【发布时间】:2018-07-06 10:59:30
【问题描述】:
int main()
{
int count = 0;
int pid;
if ( !(pid=fork()))
{
while (((count<2) && (pid=fork()) ) {
count++;
printf("%d",count)
}
if(count>0)
{
printf("%d", count);
}
}
if (pid) {
waitpid(pid,NULL,0);
count = count<<1;
printf("%d", count)
}
}
我无法阅读这段代码。我无法弄清楚进行了多少系统调用,甚至无法远程跟踪它们。这导致我无法理解输出是如何工作的。我假设调度程序可以做任何事情。所有可能的输出是什么?进行了多少系统调用?
【问题讨论】:
-
我包含了代码的图像,除非您看不到 imgur 链接。我也会添加代码。
-
要计算 xv6 中的系统调用,您有两个选择,手动计算它们,或者编写一个程序来这样做。对于手动计数,可以在user.h 中找到可用系统调用的列表。在上面的代码中,
fork和wait是显式系统调用。如果您查看printf的代码,您会发现它也进行了系统调用write。
标签: fork system-calls waitpid xv6