实现临界段的硬件方法概要.ppt

实现临界段的硬件方法概要.ppt

ID:52656245

大小:156.00 KB

页数:25页

时间:2020-04-12

实现临界段的硬件方法概要.ppt_第1页
实现临界段的硬件方法概要.ppt_第2页
实现临界段的硬件方法概要.ppt_第3页
实现临界段的硬件方法概要.ppt_第4页
实现临界段的硬件方法概要.ppt_第5页
资源描述:

《实现临界段的硬件方法概要.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第八讲信号量4.2.3实现临界段的硬件方法4.2.4信号量信号量的使用(互斥与同步)信号量的具体实现4.2.5进程同步与互斥举例有限缓冲区问题哲学家就餐问题4.2.3实现临界段的硬件方法利用处理机提供的特殊指令实现临界区加锁常见硬件指令有:一、“Test_and_Set”指令二、“Swap”指令三、“Dec_and_Test”指令一、“Test_and_Set”指令其功能描述为:FunctionTest_and_Set(Vartarget:boolean):boolean;beginTest_and_Set=target;tar

2、get=true;end;设lock为全局布尔变量,利用Test_and_Set指令,即可实现对临界区的加锁与解锁:RepeatwhileTest_and_Set(lock)doskipcriticalsectionlock=false;non-criticalsectionUntilfalse;“Test_and_Set”读后置1指令实例:T&SRi,Aj解释为将(Aj)地址所指内存单元内容读到Ri寄存器中,同时将1置入Aj所指的内存单元中.设Lock为临界段锁变量,则安排如下指令,即可实现加锁与解锁:*临界段非临界段A1<=&L

3、ock;(将Lock单元地址送A1寄存器,Lock初值为0)Loop:T&SR1,A1;JRNR1,Loop;(If(R1=1)thengotoLoop)A1<=&Lock;(A1)<=0;(置Lock内存单元为0)二、“Swap”指令其功能描述为:ProcedureSwap(Vara,b:boolean);Vartemp:boolean;begintemp=a;a=b;b=temp;end;设lock为全局布尔变量(初值为假),每个进程设一个局部布尔变量Key。利用Swap指令,可实现对临界区的加锁与解锁。Repeatke

4、y=true;repeatSwap(lock,key);untilkey=false;criticalsectionlock=false;non-criticalsectionUntilfalse;设s为全局整形变量(初值为1),利用下面的指令序列,可实现对临界区的加锁与解锁吗?Repeatwhiles<=0doskip;s--;criticalsections++;non-criticalsectionUntilfalse;三、“Dec_and_Test”指令其功能描述为:FunctionDec_and_Test(Vars:int

5、):boolean;begins=s-1;Dec_and_Read=(s>=0);end;设s为全局整形变量(初值为1),利用Dec_and_Test指令,也可实现对临界区的加锁与解锁:Repeatwhile!Dec_and_Test(s)dos++criticalsections++;non-criticalsectionUntilfalse;4.2.4信号量信号量机制:“信号量”、“P、V操作”。信号量s为一整型变量,它只能通过P、V操作访问:P(s):while!Dec_and_Test(s)dos++;V(s):s++;

6、一.原子操作原子操作:指完成某种功能且不被分割、不被中断执行的操作序列。或称此类操作序列为原子的。在单机环境下:一条硬件指令就是一个原子操作,也可以通过中断屏蔽实现由一组指令序列构成的原子操作。在多机环境下:一些硬件指令是原子的,如Test_and_Set、Swap、Dec_and_Test等。一.信号量的使用(互斥与同步)互斥:用于n个进程的临界段互斥,n进程共享一个信号量mutex,初值为1,任一进程Pi的结构为:P(mutex)V(mutex)临界段非临界段repeatuntilfalse同步:有P1、P2两进程,必须在P1执行

7、完S1语句后,P2才能执行S2。需同步的两进程共享信号量synch,初值为0。ParbeginP2:beginP1:begin……S1;V(synch);……end;……P(synch);S2;……end;Parend;操作系统实现信号量时与进程调度相结合,消除忙等待现象。原则是:在P操作循环等待的地方加入放弃处理机/挂入等待队列动作,在V操作时,从等待队列中摘取进程变为就绪态。二.信号量的具体实现1、信号量定义typeSemaphore=recordvalue:integer;一个数型变量L:Listofprocess;一个PCB队

8、列end;2、P操作P(S):S.Value--;ifS.value<0then保存现场将本进程挂入S.L队列,重新调度3、V操作V(S):S.value++ifS.value≥0then从S.L队列取一进程挂入就绪队列

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。