- 1、本文档共252页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
浙江工业大学操作系统第二章进程管理课件
* * * * * * * * * * * * Dijkstra在1971年提出,把所有进程对某一种临界资源的同步操作都集中起来,构成一个所谓的秘书进程,凡是要访问此临界资源的进程都要先报告秘书,由秘书来实现进程的同步。 * * * * * * * * * * * * * * * * * * * 如果有一个理发师速度比较快,或者一位顾客头发比较少,这时,释放第一个进入椅子的顾客会导致下面的情况: * * * * * * * * * * * * * * * * (1) 不能保证实现“空闲让进”的准则1,轮到Pj使用临界区,但Pj在进入临界区前被熊吃掉了。 * 第2次课止 Pi进入While语句发现Flag[j]=false,但在它将flag[i]置为true之前,调度程序调度运行了pj,Pj进入While语句发现Flag[i]=false,Pj置 Flag[j]=true进入临界区;在pj退出临界区前,调度程序调度到pi,Pi 置Flag[i]=true进入临界区。 * * Peterson算法解决了互斥访问的问题,而且克服了强制轮流法的缺点,可以完全正常地工作。 * * Testset指令测试它的参数i的值。若为0,则用1代替并返回true;否则值不变返回false。整个testset指令自动执行,它不服从于任何中断。右图是使用这个指令的互斥规程。共享变量bolt被初始化为0,唯一可以进入临界区的进程是发现bolt等于0的那个进程,所有试图进入临界区的其他进程进入忙等待模式。当一个进程离开它的临界区时,它把bolt重置为0,此时只有一个等待进程被允许进入它的临界区。 * 该指令交换一个寄存器的内容和已存储器单元的内容。执行该指令的过程中,任何其他指令对该存储器单元的访问都被阻止。 使用该指令的互斥进程。共享变量bolt初值为0,每个进程都使用一个局部变量key且初始化为1,唯一可以进入临界区的进程是发现bolt等于0的那个进程,他通过把bolt置为1排斥所有其他进程进入它们的临界区。当一个进程离开临界区时,它把bolt重置为0, 允许另一个进程进入临界区。 * * * 以上介绍的各种算法都存在问题,它们是平等进程间的一种协商机制,需要一个地位高于进程的管理者来解决公有资源的使用问题。 操作系统可从进程管理者的角度来处理互斥的问题,信号量就是操作系统提供的管理公有资源的有效手段。 信号量机制基本原理:两个或多个进程可以通过简单的信号进行合作,一个进程可以被迫在某一位置停止,直到它接收到一个特定的信号。为了发信号,需要一个称作信号量的特殊变量。为通过信号量s传送信号,进程可执行原语signal(s);为通过信号量s接收信号,进城可执行原语wait(s).如果相应的信号仍然没有发送,进程被挂起,直到发生传送。 * * * * * * * * * 在整型信号量机制中的wait操作,信号量S≤0,就会不断地测试,该机制并未遵循“让权等待”的准则,而是使该进程处于“忙等”的状态。 * type semaphore=record value:integer; // s.value 资源信号量,代表资源数目,当s.value=1时,又转变为互斥信号量 L:list of process; //等待信号量链表S.L ,链接等待进程 end 相应地,wait(s)和signal(s)可描述为: Procedure wait(s) var S:Semaphore; begin s.value:=s.value-1; 先减1 s.value的初值为某类资源的数目,请求一个单位的资源 if s.value0 then block(S.L); (s.value)表示阻塞的进程调用block进行自我 end; 阻塞,放弃处理机插入到等待信号量链表S.L中 Procedure signal(s) var s:semaphore; begin s.value:=s.value+1; 释放一个单位资源 if s.value≤0 then wakeup(S,L); s.value≤0表示S.L还有等待该资源的 end 进程,调用wakeup唤醒第一个进程 * * * * * * * * * 第3次课止 * * * * 进程控制块的内容不仅与具体的系统管理和控制方法有关,而且与系统规模有关,大型操作系统PCB包含的信息较多,小型操作系统PCB包
文档评论(0)