OS计算题总结.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OS计算题总结

一、第三章的计算有点多(PV操作,银行家算法,低级调度算法)PV操作操作系统的进程管理中,PV是重点和难点信号量:信号量是个数据结构。struct semaphore{int value;pcb *blockqueue;}mutex;其中value是信号量的值;blockqueue是等待使用该信号量的进程排成的队列的对手指针。p操作:当一个进程对信号量mutex执行p操作时,执行两个动作:mutex.valu–; //申请一个资源if (mutex.value0) //申请失败sleep(); //本进程进入该信号量等待队列睡眠v操作:当一个进程对信号量mutex执行v操作时,执行两个动作:mutex.value++; //释放一个资源if (mutex.value=0) //如果有进程在等待信号量wakeup(); //从该信号量的等待队列中唤醒一个进程注:操作系统会保证PV操作的原子性,也就是说当一个进程执行PV操作,检测信号量时,不受中断。看一下PV操作实现的功能:实现进程之间的互斥; 实现进程之间的同步;(接下来的两个例题是互斥与同步的典型)区别:互斥是为了保证资源一次只能由一个进程使用,互斥进程彼此在逻辑上是完全无关的,它们的运的运行不具有时间次序的特征。而同步是为了实现进程通信,同步进程之间具有合作关系,在执行时间上须按照一定顺序协同进行。 1.互斥:进出教室问题:有一个变量count,初值为0,一个学生进入教室则count++,出教室则count–-。mutex = 1;IN: OUT:p(mutex); p(mutex);count++; count–;v(mutex); v(mutex);过程:一个学生进入教室执行IN,p操作,mutex.value = 0;假设在进行count++之前遇到了中断,而中断之后跳回来时正好这个学生又在出教室,那么这时候就会执行OUT,mutex.value = -1,该OUT进程进入睡眠,返回IN进程,count = 1,v操作,mutex.value = 0(说明有等待使用count的进程);唤醒OUT进程,count = 0,v操作,mutex.value = 1。注意上面划线部分的假设。PV操作在这就是为了保证这种竞争情况的发生。2.同步:桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。分析:在本题中,爸爸、儿子、女儿共用一个盘子,盘中一次只能放一个水果。当盘子为空时,爸爸可将一个水果放入果盘中。若放入果盘中的是桔子,则允许儿子吃,女儿必须等待;若放入果盘中的是苹果,则允许女儿吃,儿子必须等待。本题实际上是生产者-消费者问题的一种变形。这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。解:在本题中,应设置三个信号量S、So、Sa,信号量S表示盘子是否为空,其初值为l;信号量So表示盘中是否有桔子,其初值为0;信号量Sa表示盘中是否有苹果,其初值为0。同步描述如下:int S=1;int Sa=0;int So=0;main(){cobeginfather();son();daughter();coend}father(){while(1){P(S);将水果放入盘中;if(放入的是桔子)V(So);else V(Sa);}}son(){while(1){P(So);从盘中取出桔子;V(S);吃桔子;}}daughter(){while(1){P(Sa);从盘中取出苹果;V(S);吃苹果;}}一些问题:为什么要设计三个信号量?因为这里盘子的状态有三种情况。所以在PV操作用在同步的时候,资源都多少种状态,就应该有多少个信号量(高并发的不一定好,需要更多的信号量,这样消耗系统的资源就更多)。还有,有没有留意到,每一次“吃”的操作都是在V操作之后进行,这是为什么呢?这是因为V操作是释放资源的一个操作,当然是越早释放对系统越有利啊。哲学家就餐问题五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一把叉子;解一:设fork[5]为5 个信号量,初值为均1设信号量S ,用于封锁第5个哲学家,初值为4。Philosopheri:while (1) { 思

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档