第 3 章作业 3.2 试比较进程和程序的区别。 答: ( 1)进程是一个动态概念,而程序则是一个静态概念。程序是指令的有序集合,没有任何执行的含义。而进程则强调执行过程,它动态地被创建,并被调度执行后消亡; ( 2)进程具有并发特征,而程序没有; ( 3) 进程是竞争计算机系统资源的基本单位,从而其并发性受到系统自己的制约。这里制约就是对进程独立性和异步性; ( 4)不同的进程可以包含同一程序,只要该程序所对应的数据集不同。 3.3 我们说程序的并发执行将导致最终结果失去封闭性。这话对所有的程序都成立吗?试距离说明。 答:并非对所有的程序都成立。 如: Begin local x; x=10; print(x); End 上述程序中x 是内部变量,不可能被外部程序访问,因此这段程序的运行不会手外部环境影响。 3.7 并发进程间的制约有哪2 种?引起制约的原因是什么? 答:并发进程间的制约有两种:直接制约和间接制约。 直接制约是由并发进程互相共享对方的私有资源所引起的。间接制约是由竞争公有资源引起的。 3.8 什么是进程间的互斥?什么是进程间的同步? 答:进程间的互斥是指:一组并发进程中的一个或多个程序段,因共享某一共有资源而导致它们必须以一个不许交叉执行的单位执行,集不允许两个以上的共享该资源的并发进程同时进入临界区。 进程间的同步是指:异步环境下的一组并发进程阴直接制约互相发送消息二进行合作、互相等待,是个进程按一定的速度执行的过程。 3.13 编写一个程序使用系统调用fork 生成三个子进程,并使用系统调用pipe 创建一管道,使得这3 个子进程和父进程公用同一条管道进行信息通信。 答: main() { int r,i,P1,P2,fd[2]; char buf[50],s[50]; pipe(fd); while((P1=fork())==-1); if(P1==0) { lockf(fd[1],1,0); sprintf(buf,"child process P1 is sending messages!\n"); printf("child process P1!\n"); write(fd[1],buf,50); sleep(5); lockf(fd[1],0,0); exit(0); } else { while((P2=fork())==-1); if(P2==0) { lockf(fd[1],1,0); sprintf(buf,"child process P2 is sending messages!\n"); printf("child process P2!\n"); write(fd[1],buf,50); sleep(5); lockf(fd[1],0,0); exit(0); } else { while((P3=fork())==-1); if(P3==0) { lockf(fd[1],1,0); sprintf(buf,"child process P3 is sending messages!\n");...