# 家庭作业
家庭作业 8.9(★)
考虑四个具有如下开始和结束时间的进程:
| 进程 | 开始时间 | 结束时间 |
|---|---|---|
| A | 5 | 7 |
| B | 2 | 4 |
| C | 3 | 6 |
| D | 1 | 8 |
对于每对进程,指明它们是否是并发地运行的:
| 进程对 | 并发地? |
|---|---|
| AB | |
| AC | |
| AD | |
| BC | |
| BD | |
| CD |
家庭作业 8.10(★)
在这一章里,我们介绍了一些具有不寻常的调用和返回行为的函数:setjmp、longjmp、execve 和 fork。找到下列行为中和每个函数相匹配的一种:
A. 调用一次,返回两次。
B. 调用一次,从不返回。
C. 调用一次,返回一次或者多次。
家庭作业 8.11(★)
这个程序会输出多少个 "hello" 输出行?
#include "csapp.h"
int main()
{
int i;
for (i = 0; i < 2; i++)
Fork();
printf("hello\n");
exit(0);
}
家庭作业 8.12(★)
这个程序会输出多少个 "hello" 输出行?
#include "csapp.h"
void doit()
{
Fork();
Fork();
printf("hello\n");
return;
}
int main()
{
doit();
printf("hello\n");
exit(0);
}
家庭作业 8.13(★)
下面程序的一种可能的输出是什么?
#include "csapp.h"
int main()
{
int x = 3;
if (Fork() != 0)
printf("x=%d\n", ++x);
printf("x=%d\n", --x);
exit(0);
}
家庭作业 8.14(★)
下面这个程序会输出多少个 "hello" 输出行?
#include "csapp.h"
void doit()
{
if (Fork() == 0) {
Fork();
printf("hello\n");
exit(0);
}
return;
}
int main()
{
doit();
printf("hello\n");
exit(0);
}
家庭作业 8.15(★)
下面这个程序会输出多少个 "hello" 输出行?
#include "csapp.h"
void doit()
{
if (Fork() == 0) {
Fork();
printf("hello\n");
return;
}
return;
}
int main()
{
doit();
printf("hello\n");
exit(0);
}