操作系统原理第二篇第三节.pptVIP

  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文档。上传文档
查看更多
操作系统原理 第二章 进程管理 第三节 进程同步 主要内容 进程同步的概念 临界资源与临界区 信号量机制 管程机制 典型的进程同步问题 1、进程同步的概念 多道系统与多任务系统——程序的并发执行——程序执行失去封闭型——引入进程的概念——使得多进程能够并发执行并能够保证运行环境封闭与进程的独立性——问题: 如何进行资源共享? 解决办法(1)排队,有共享资源控制访问——需要专门的守护进程,增加了开销 (2)由用户进程控制访问——互斥 1、进程同步的概念 先看一个例子:进程P1、P2公用一个变量COUNT,初始值为0 1、进程同步的概念 P1、P2两个进程的执行顺序是随机的,P1、P2可能顺序执行或交错执行。 由图可见,不同的执行顺序,COUNT值会不同,这是不允许的。出现这种现象的原因,在于在一个进程执行过程中,该进程能够修改的全局变量如 COUNT应该不允许其他进程修改。即在进程P1执行前,必须保证在P1执行过程中没有其他进程修改COUNT的值 1、进程同步的概念 进程运行中的两种制约关系 由于竞争资源形成的间接制约关系; 由于相互合作造成的直接制约关系; 进程同步指多个相关进程在执行次序上的协调 2、临界资源与临界区 临界资源(critical source) 在一段时间内只允许有限个进程访问的资源 ,如打印机等I/O设备,缓冲区等 临界区(critical section) 每个进程中访问临界资源的那段代码 ,被称之为进程的临界区 可把一个访问临界资源的循环进程描述如下: 2、临界资源与临界区 repeat critical section;  remainder section; until false; 2、临界资源与临界区 同步机制应遵循的规则 空闲让进; 忙则等待; 有限等待;对要求进入临界区的进程,应在有限时间内使之进入,以免陷入“死等”。 让权等待;对于等待进入临界区的进程而言,它必须立即释放处理机,以免进程“忙等” 2、临界资源与临界区 例:生产者-消费者问题 有一个或多个生产者生产某着类型的产品(数据、记录、字符等等),并放置在缓冲区中;有一个或多个消费者从缓冲区中取数据,每次取一项;系统保证对缓冲区的操作是互斥进行的,即每次只有一个进程能够访问缓冲区。 其中:缓冲区是临界资源,而访问缓冲区的代码是临界区 3、信号量机制 引例:生产者-消费者问题 分析:首先需要定义产品的类型,缓冲区的长度,读写指针,资源变量counter。 Int n; Int in,out; Structure item; Item buffer[n]; Int counter; 3、信号量机制 Void procedure(){ while(true){ 生产一个产品放入 nextp; while(counter==n){no-op;} buffer[in]=nextp; in++; counter++;} } 3、信号量机制 Void comsumer(){ while(true){ while(counter==0){no-op;} nextc=buffer[out]; out++; counter--; 消费nextc中的产品;} } 3、信号量机制 问题: 并发执行时,消费者进程与生产者进程都可以改变counter的值,执行顺序不同,counter的结果也不一样,而且与实际结果也不相同。 为解决这个问题,引入一个互斥变量mutex,来控制对变量counter的访问。 引入互斥变量后的生产者消费者代码如下: 3、信号量机制 Void procedure(){ while(true){ 生产一个产品放入 nextp; wait(mutex); while(counter==n){no-op;} buffer[in]=nextp; in++; counter++;

文档评论(0)

189****6140 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档