资源描述:
《操作系统原理,作业》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第3章作业3.2试比较进程和程序的区别。答:(1)进程是一个动态概念,而程序则是一个静态概念。程序是指令的有序集合,没有任何执行的含义。而进程则强调执行过程,它动态地被创建,并被调度执行后消亡;(2)进程具有并发特征,而程序没有;(3)进程是竞争计算机系统资源的基本单位,从而其并发性受到系统自己的制约。这里制约就是对进程独立性和异步性;(4)不同的进程可以包含同一程序,只要该程序所对应的数据集不同。3.3我们说程序的并发执行将导致最终结果失去封闭性。这话对所有的程序都成立吗?试距离说明。答:并非对所有的程序都成立。如:Beginlocalx;x=10;print(x);End上述程序中x是
2、内部变量,不可能被外部程序访问,因此这段程序的运行不会手外部环境影响。3.7并发进程间的制约有哪2种?引起制约的原因是什么?答:并发进程间的制约有两种:直接制约和间接制约。直接制约是由并发进程互相共享对方的私有资源所引起的。间接制约是由竞争公有资源引起的。3.8什么是进程间的互斥?什么是进程间的同步?答:进程间的互斥是指:一组并发进程中的一个或多个程序段,因共享某一共有资源而导致它们必须以一个不许交叉执行的单位执行,集不允许两个以上的共享该资源的并发进程同时进入临界区。进程间的同步是指:异步环境下的一组并发进程阴直接制约互相发送消息二进行合作、互相等待,是个进程按一定的速度执行的过程。3.
3、13编写一个程序使用系统调用fork生成三个子进程,并使用系统调用pipe创建一管道,使得这3个子进程和父进程公用同一条管道进行信息通信。答:main(){ intr,i,P1,P2,fd[2]; charbuf[50],s[50]; pipe(fd); while((P1=fork())==-1); if(P1==0) { lockf(fd[1],1,0); sprintf(buf,"childprocessP1issendingmessages!"); printf("childprocessP1!"); write(fd[1],buf,50); sleep(5);
4、 lockf(fd[1],0,0); exit(0); } else { while((P2=fork())==-1); if(P2==0) { lockf(fd[1],1,0); sprintf(buf,"childprocessP2issendingmessages!"); printf("childprocessP2!"); write(fd[1],buf,50); sleep(5); lockf(fd[1],0,0); exit(0); }else { while((P3=fork())==-1);
5、if(P3==0) { lockf(fd[1],1,0); sprintf(buf,"childprocessP3issendingmessages!"); printf("childprocessP3!"); write(fd[1],buf,50); sleep(5); lockf(fd[1],0,0); exit(0);}wait(0); if(r=read(fd[0],s,50)==-1) printf("can'treadpipe"); else printf("%s",s); wait(0)
6、; if(r=read(fd[0],s,50)==-1) printf("can'treadpipe"); else printf("%s",s);wait(0); if(r=read(fd[0],s,50)==-1) printf("can'treadpipe"); else printf("%s",s);exit(0); } }}3.14设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子。但是桌子上总共只有5支筷子,在每人两边分开各放一支。哲学家们在肚子饥饿时才试图分两次从两边拾起筷子就餐。条件:(1)只有拿到两只筷子时,哲学家才能
7、吃饭;(2)如果筷子已在他人手上,则该哲学家必须等待到他人吃完之后才能拿到筷子;(3)任一哲学家在自己未拿到两只筷子吃饭之前,绝不放下自己手中的筷子。试:(1)描述一个保证不会出现两个邻座同时要求吃饭的通信算法。(2)描述一个既没有两邻座同时吃饭,又没有人饿死(永远拿不到筷子)的算法。(3)在什么情况下,5个哲学家全部吃不上饭。答:(1)设信号量c[0]~c[4],初始值均为1,分别表示I号筷子被拿(I=0,1,2,3,