操作系统第六次作业.doc

操作系统第六次作业.doc

ID:53065252

大小:18.97 KB

页数:8页

时间:2020-04-01

操作系统第六次作业.doc_第1页
操作系统第六次作业.doc_第2页
操作系统第六次作业.doc_第3页
操作系统第六次作业.doc_第4页
操作系统第六次作业.doc_第5页
资源描述:

《操作系统第六次作业.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、操作系统第五次作业6.1第一个著名的正确解决两个进程的临界区问题的软件方法是Dekker设计的。两个进程P0和P1共享以下变量:       booleanflag[2];  /*initiallyfalse*/       intturn;进程Pi(i==0或1)的结构见图6.25,另一个进程是Pj(j==0或1)。试证明这个算法满足临界区问题的所有三个要求。答:临界区的问题的解答必须满足以下三个条件:1)     互斥:如果进程Pi在其临界区内执行,那么其他进程都不能在其临界区内执行。2)     有空让进:如果没有进程在其临界

2、区内执行且有进程需进入临界区,那么只有那些不在剩余区内执行的进程可参加选择,以确定谁能下一个进入临界区,且这种选择不能无限推迟。3)     有限等待:从一个进程做出进入其临界区的请求,直到该请求允许为止,其他进程被允许进入其临界区的次数有上限。为了表述方便,接下来用0,1来代替i,j;首先两个进程共享以下变量:       booleanflag[2];  /*initiallyfalse*/       intturn;flag用来记录谁要访问临界区,就让对应的flag=true(例如P0要访问临界区,就让flag[0]=tru

3、e),相当于“举手示意我要访问”。初始值为0表示一开始没人要访问。trun用于标识当前允许谁进入,turn=0则P0可进入,turn=1则P1可进入。接下来看进程P0的逻辑do{flag[0]=true;  //首先P0举手示意我要访问while(flag[1]){ //看看P1是否也举手了if(turn==1){    //如果P1也举手了,那么就看看到底轮到谁flag[0]=false;   //如果确实轮到P1,那么P0先把手放下(让P1先)while(turn==1);//donothing //只要还是P1的时间,P0就不

4、举手,一直等flag[0]=true;     //等到P1用完了(轮到P0了),P0再举手}}//Criticalsection     //访问临界区turn=1;           //P0访问完了,把轮次交给P1,让P1可以访问flag[0]=false;       //P0放下手//remaindersection  //剩余区}while(1);P1的逻辑和P0相同:do{flag[1]=true;  //首先P1举手示意我要访问while(flag[0]){ //看看P0是否也举手了if(turn==0){    

5、//如果P0也举手了,那么就看看到底轮到谁flag[1]=false;   //如果确实轮到P0,那么P1先把手放下(让P0先)while(turn==0);//donothing //只要还是P0的时间,P1就不举手,一直等flag[1]=true;     //等到P0用完了(轮到P1了),P1再举手}}//Criticalsection     //访问临界区turn=0;           //P1访问完了,把轮次交给P0,让P0可以访问flag[1]=false;       //P1放下手//remaindersect

6、ion  //剩余区}while(1);为了证明第一点,要注意到只有当flag[0]=true并且turn==0的时候,进程P0才会进入临界区。而当flag[0]=true,flag[1]=true表示P0和P1都想进入临界区的时候,P0和P1谁能进入临界区取决于turn的值,当turn==0时,P0可以进入,当turn=1时,P1可以进入;turn的值只可能是0或1,而不可能同时为两个值,所以一次只能有一个进程在临界区内,满足互斥的条件。为了证明第二点和第三点,应注意到,只要条件flag[1]=true,turn==1成立,fla

7、g[0]的值就会被设置成false,并且P0陷入while循环语句,那么P0就能被阻止进入临界区。如果P1不准备进入临界区(flag[1]=false)或者没有轮到P1进入临界区(turn==0),那么P0就能进入临界区。当P1退出临界区的时候,它会设置flag[0]=true,以允许P0进入临界区。当P0访问完之后退出临界区,它会设置turn==1和flag[0]=false,表示P0访问完了,把轮次交给P1,让P1能够访问,所以P1会进入临界区,满足前进的条件;同时P1最多在P0进入临界区一次之后就能进入,满足有限等待的条件。综

8、上所述,Dekker算法是满足临界区问题的所有三个要求的。6.4请解释为什么自旋锁不适用于单处理器系统中,而是往往使用于多处理器系统中?自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。