- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 
                        查看更多
                        
                    
                操作系统2016要点
                    void   reader( ){     while(TRUE){          wait(mutex) ;          if   (readcount==0)   wait(wmutex);           readcount++;          signal(mutex) ;          …… 执行读操作 …… ;          wait(mutex) ;           readcount--;          if   (readcount==0)   signal(wmutex);          signal(mutex);       }  } 3.哲学家就餐问题 3.4.5 经典同步问题 * (1)问题描述            有五位哲学家,用一生来思考和吃饭。他们围坐在一张圆桌旁,桌子中央有一大碗米饭,桌上还有五个碗和五只筷子,他们的生活方式是交替地进行思考和进餐。当某位哲学家进行思考时,他不与其它哲学家交互。当他感觉到饥饿时,便试图拿起与其左右最靠近的筷子。 一个哲学家每次只能拿起一只筷子,且他不能从其他哲学家手里拿筷子 只有在他拿到两只筷子时才能进餐 3.4.5 经典同步问题 *  (2)用信号量解决哲学家就餐问题 每一只筷子的使用都必须是互斥的,在某一时刻只允许一个哲学家使用,它是临界资源 利用一个信号量表示一只筷子,五只筷子的信号量数组定义为:        semaphore  chopstick[5]={1, 1, 1, 1, 1};  利用变量 i 区分不同的哲学家及筷子:int i; 3.4.5 经典同步问题 * void   philosopher(int i){     while(TRUE){         /* 先取左侧筷子 */        思考 ;          wait(chopstick[ i ]);          wait(chopstick[(i+1)  %  5 ]);          进餐  ;          signal(chopstick[(i+1)  %  5 ]);          signal(chopstick[ i ]);      } } 可能引起死锁       (1)仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐;       (2)至多只允许有四位哲学家同时去拿左边的筷子,并在某哲学家用餐完毕时能释放出他用过的两只筷子;       (3)规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子;而偶数号哲学家则相反。  几种解决死锁的方法: semaphore  room=4; void   philosopher(int i){     while(TRUE){           思考 ;          wait(room);          wait(chopstick[ i ]);          wait(chopstick[(i+1)  %  5 ]);          进餐  ;          signal(chopstick[(i+1)  %  5 ]);          signal(chopstick[ i ]);          signal(room);      } } room视作资源信号量   利用信号量机制解题的思路 ①  分析已知条件,确定临界资源、以及对其执行的所有      操作,并为其设定互斥信号量或资源信号量; ②  把对临界资源进行操作的所有对象进行分类; ③  对每一类不同的操作对象,分别确定其操作步骤——          基本框架是:Wait( ) → CS → Signal( ) ; ④  对所有用到的信号量、变量进行初始化;其中——          互斥信号量初值=1          资源信号量初值=信号量所表示的该类资源的总数 ⑤  构造一个函数过程(算法),其中各子过程分别描述      不同类别对象的各自操作步骤,使用 “类语言”; ⑥  检查,确保在算法内针对同一信号量的P,V操作成对! 1. 管程的定义             管程是由一个或多个过程、一个初始化序列和数据组成的软件模块,是一种程序设计语言结构成分,具有和信号量同等的表达能力。             进程可以通过调用管程实现对资源的请求和释放。 3.4.4  管程 *         管程对分散在各进程中的临界区集中进行管理,并将系统中的共享资源用数据结构抽象地表示出来。         管程中的共享变量每次只能被一个进程访问,从而可以提供互斥机制。 管程的主要特点: 共享性:一个进程通过调用管程的一个过程进入管程,管
                您可能关注的文档
最近下载
- 江苏省常州市十校2022-2023学年高一上学期期中联考历史试题.pdf VIP
 - 六年级道法上册第九课话题二《守法不违法》教学设计.docx VIP
 - 当代大学生职业生涯规划的调查报告.pdf VIP
 - 仙侣山旅游综合开发一期项目评价分析报告.pptx
 - 天津外研版九年级上册英语单词表.docx VIP
 - 2025《大数据下财务管理研究—以晨光出版社公司为例》10000字.doc
 - 尿素的工艺生产过程(CO2气提法).ppt VIP
 - 《外部空间设计》芦原义信.pdf VIP
 - 中信建投-AI新纪元:砥砺开疆・智火燎原.pdf VIP
 - 北京科技大学马克思主义学院《625马克思主义基本原理》历年考研真题汇编合集.docx VIP
 
原创力文档
                        

文档评论(0)