chapter2_进程相关管理2 计算机操作系统 .ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
chapter2_进程相关管理2 计算机操作系统 .ppt

计算机操作系统 主讲教师:蔡坤 ; 课程主要内容;进程管理---第2章;进程同步与通信 2.3 进程同步 2.4 经典进程的同步问题 2.5 进程通信 调度与死锁(第3章);2.3 进程同步;间接制约关系示例:;一、进程同步的基本概念;2、临界资源、临界区;一、进程同步的基本概念;一、进程同步的基本概念;例:有两个进程A和B,它们共享一个变量x,且两个进程按以下方式对变量X进行访问和修改: 其中R1和R2为处理机中的两个 寄存器。A与B均对X+1,即X+2。 若按另一顺序对变量进行修改: 结果x只加了1。;2、临界资源、临界区;要进入临界区的若干进程必须满足: (1)一次只允许一个进程进入临界区 (2)任何时候,处于临界区的进程不得多于一个 (3)进入临界区的进程要在有限的时间内退出 (4)如果不能进入自己的临界区,则应让出处理机资源 解决临界区(互斥)问题的方法:P-V操作;3、同步机制应遵循的规则;有限等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入“死等”状态。 让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”。;二、信号量机制;1、整型信号量;2、记录型信号量;2、记录型信号量;2、记录型信号量;2、记录型信号量;2、记录型信号量;AND型信号量的基本思想 将进程在整个运行过程中所需要的所有临界资源,一次性全部分配给进程,待进程使用完后再一起释放。只要有一个资源未能分配给进程,其它所有可能分配的资源也不分配给该进程。从而可避免死锁发生。在wait操作中,增加了一个“AND”条件,故称为AND同步。 ;3、信号量集---AND型信号量;3、信号量集---一般信号量;3、信号量集---一般信号量;3、信号量集---一般信号量;三、信号量的应用;三、信号量的应用;;利用信号量实现前驱关系;三、信号量的应用;三、信号量的应用;三、信号量的应用;三、信号量的应用;2.4 经典进程的同步问题;1、“生产者—消费者”问题;1、“生产者—消费者”问题;1、“生产者—消费者”问题;1、“生产者—消费者”问题;1、“生产者—消费者”问题;多缓冲区的生产者─消费者问题解法;1、“生产???—消费者”问题;“生产者—消费者”问题的算法描述 semaphore full=0; /*表示满缓冲区的数目*/ semaphore empty=n; /*表示空缓冲区的数目*/ semaphore mutex=1; /*表示对缓冲区进程操作的互斥信号量*/ Main() { cobegin producer(); consumer(); coend };{ while(true) { 生产一个产品; P(empty); P(mutex); 将一个产品送入缓冲区; V(mutex); V(full); } } ; “生产者-消费者”问题中应注意;1、“生产者—消费者”问题;2、“哲学家进餐”问题; semaphore stick[5]={1,1,1,1,1}; /*分别表示5支筷子*/ Main() { cobegin philosopher(0); philosopher(1); philosopher(2); philosopher(3); philosopher(4); coend };2、“哲学家进餐”问题;2、“哲学家进餐”问题;2、“哲学家进餐”问题;3、“读者—写者”问题;3、“读者—写者”问题;3、“读者—写者”问题;设置一个共享变量和两个信号量: 共享变量Readcount:记录当前正在读数据集的读进程数目,初值为0。 读互斥信号量Rmutex :表示读进程互斥地访问共享变量readcount,初值为1. 写互斥信号量wmutex:表示写进程与其它进程(读、写)互斥地访问数据集,初值为1.; semaphore rmutex=1; semaphore wmutex=1; int readcount=0; Main() { cobegin reader(); writer(); coend } ;{ while(true) { p(rmutex); if(readcount= =0) p(wmutex);/*第一位读者阻止写者*/ readcount++; V(rmutex); 读数据集; p(rmutex); readcount--; if(readc

文档评论(0)

yuzongxu123 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档