2、在运算器实验中,哪些是互斥信号量?(互斥信号量即在同一时刻,不能同时有效的信号)

运算器实验(1)_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
运算器实验(1)
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩3页未读,
定制HR最喜欢的简历
你可能喜欢运算器控制信号cn_中华文本库
具体运算器实例的有 关内容; 关内容; 掌握:定点运算器的功能、组成、控制与...输入的数据 Cn:最低位的进位信号 Cn+4:给出运算结果的同时,送出向高位进位 ...
组成原理运算器实验报告_计算机硬件及网络_IT/计算机_专业资料。甘肃政法学院本科...SW-B 各电平 控制信号用“SWITCH UNIT”中的二进制数据开关来模拟,其中 Cn、...
置各控制信号如下: LDA LDB ALU-B CN S3 S2 3/5 S1 S0 计算机组成原理实验报告——基本运算器实验 0 0 0 0 0 1 0 1 此时数据总线 LED 显示灯显示的...
二.实验原理在实验(1)的基础上增加进位控制电路,将运算器 ALU181 的进位位送入 D 锁存器,由 T4 和 CN 控制其写入, 在此,T4 是由键 5 产生的脉冲信号,...
S3~S0、M:运算器的功能控制信号;可参见 74181 芯片的功能表 P64。 Cn:进位控制信号,低电平有效。 LDDR1、LDDR2:数据寄存器 DR1 和 DR2 的数据装载控制...
控制信号产生部件 译码器 乘商寄存器 操作数 地址 寄存器组 Rn 地址寄存器 指令...Cn+4 A L U S R Cin 第一个组成部分是算逻运算部件ALU,能完成3种算术运...
运算器的逻辑功能表如表 1-1 所示,其中 S3 S2 S1 S0 CN 为控制信号,FC 为进位标志,FZ 为运算器 零标志,表中功能栏内的 FC、FZ 表示当前运算会影响到该...
运算器的逻辑功能表如表 1-1-1 所示, 其中 S3 S2 S1 S0 CN 为控制信号,FC 为进位标志, FZ 为运算器零标志,表中功能栏内的 FC、FZ 表示 当前运算会...
该端的状态锁存由 T4、/CN 和 LDCZY 信号控制,T4 是时序脉冲信号,在 T4 周 期将本次运算的进位结果锁存到进位锁存器中, 实验时按动 “单步” 命令键产生...
用控制信号 CN 决定运算器 是否带进位移位。 1 三、实验内容 1、运算器实验按照下表连线 连接 1 2 3 4 注:CyIN 为运算器进位输入。 2 信号孔 J1 座 S0...1互斥信号量:_图文_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
1互斥信号量:
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩4页未读,
定制HR最喜欢的简历
你可能喜欢当前位置: >>
第2章-2 进程的同步与互斥
第2章 进程管理? ? ? ? ? ? 2.1 2.2 2.3 2.4 2.5 2.6 进程的引入 进程控制 进程同步 经典进程的同步问题 进程间通信 线程1 引入? ? ? ? ? 图书馆借书 订票 独木桥 司机和售票员 订奶…进程同步的主要任务:对多个相 关进程在执行次序上进行协调, 使并发执行的进程间能有效共 享资源和相互合作。 2 2.3.1进程同步的概念1、两种制约关系? 直接相互制约关系(同步) ? 间接相互制约关系(互斥)3 同步? 直接相互制约关系(同步)指系统中一些进程需要相互合作,共同完成一 项任务,这种协作进程之间相互等待对方消息或信 号的协调关系称为进程同步.具体说,并发进程在 一些关键点上可能需要互相等待与互通消息,进程 间的相互联系是有意识的安排的。? 产生的原因? 进程合作4 ? 一般同步问题有两类? 保证一组合作进程按逻辑需要的执行次序执行【例】司机 P1 REPEAT 启动 正常运行 到站停 UNTIL FALSE 售票员 P2 REPEAT 关门 售票 开门 UNTIL FALSE? 保证共享缓冲区(共享数据)的合作进程的同步 【例】 输入 计算 打印进程PI缓冲区进程PC缓冲区进程PP5 进程的互斥? 是解决进程间竞争关系(间接制约关系)的手段。 ? 间接相互制约关系(互斥) 是指若干个进程同时竞争一个需要互斥使用的资 源时,任何时刻最多允许一个进程去使用,其他要使 用该资源的进程必须等待,直到该资源被释放。进程 间要通过某种中介发生联系,是无意识安排的。 ? 产生的原因? 资源共享 ? 互斥是一种特殊的同步 ? 逐次使用互斥资源,也是对进程使用资源次序上的 一种协调。 6 2. 临界资源?临界资源系统中某些资源一次只允许一 个进程使用,称这样的资源为临界资 源或互斥资源。? 硬件临界资源:打印机、磁带机? 软件临界资源:只能排它使用的变量、 表格、队列7 临界资源实例?二人合作存款count=100;PA S1:N= S2:N=N+100; S3:count=N; 执行情况:(1) PA―& PB ,PB―& PA(2) S1―& PB―&S2―&S3 (3) S4―& PA―&S5―&S6PB S4:M= S5:M=M+200; S6:count=M;count=400 √count=200 × count=300 ×8因count是一个互斥性使用的变量,是一个临界资源 3.临界区?临界区(临界段)在进程中访问临界资源的那段代码区。 例子9 具有临界资源的进程结构……entry section/*进入区*/ /*临界区*/ /*退出区*/exit section /*剩余区*/…… 10 访问临界区应遵循的原则? 空闲让进 当无进程在临界区时,任何有权使用临界区 的进程可进入。 ? 忙则等待 不允许两个以上的进程同时进入临界区。 ? 有限等待 任何进入临界区的要求应在有限的时间内得 到满足。 ? 让权等待不能进入临界区的进程应放弃占用CPU。 11 临界区互斥解决方法? 硬件? ? ? ? ? 当一个进程进入临界区,就屏蔽所有中断 专用机器指令方法 缺点:成本高 用编程解决 缺点: (1)忙等待 (2)实现过于复杂,需要高的编程技巧? 软件? 信号量机制 12 2.3.2信号量机制一类资源抽象成S(信号量)?信号量 只能由wait(S)、signal(S) 操作对其 进行操作的变量。 ?信号量的使用应注意 ?必须置一次且只能置一次初值 ?初值不能为负数,实现互斥时初值1。 ?只能执行wait, signal操作 13 1. 整型信号量? ?wait(S): while S≤0 do no-op? S∶=S-1;? signal(S): S:=S+1;?14 2.记录型信号量一类资源抽象成S(信号量) value?0 L=nil? 记录型信号量 ? 信号量S:记录型数据结构,一个分量为整型量value,另 一个分量为信号量队列 L; ? 信号量的物理含义 ? 当S.value&0:表示可用资源个数 当S.value=0:表示可用资源正好用完 当S.value&0:表示等待该类资源的进程数信号量的值(-2)信号量队列指针15 type semaphore=record? value:? L:? end procedure wait(S)? var S:? begin? S.value?∶ =?S.value-1;? if S.value<0 then block(S.L)? end?记录型信号量描述物理意义:申请一个资源,如果申请成功,则返回;如果申请不成功, 则挂在该资源的等待队列上。 procedure signal(S)? var S:? begin? S.value?∶ =?S.value+1;? if S.value≤0 then wakeup(S.L);? end? 物理意义:归还一个资源,如果没有进程等待该资源,则返回;如果有 进程在等待,把等待的进程从L上移到就绪队列。 16 信号量及 wait、signal操作讨论(1)信号量的物理含义:S .value &0: 表示有S .value个资源可用 S .value =0: 表示无资源可用 S .value &0: 则| S .value|表示等待队列中的进程 个数信号量的初值应该大于等于017 wait、signal操作讨论(2)? wait(S):表示申请一个资源 signal(S):表示释放一个资源。 ? wait、signal操作必须成对出现,有一个wait操 作就一定有一个signal操作? wait、signal操作的优点简单,而且表达能力强,可解决任何互斥问题? wait、signal操作的缺点 不够安全, wait、signal操作使用不当会出现死锁,遇到复杂互斥问题时,实现复杂。 18 2.3.3 信号量的应用?利用信号量实现互斥 ?利用信号量实现同步19 1. 用wait、signal操作实现互斥? 信号量初值为1? 对于两个并发进程,互斥信号量的值仅取1、0 和-1三个值 : ? 若mutex.value=1表示没有进程进入临界区 ? 若mutex.value=0表示有一个进程进入临界 区 ? 若mutex.value =-1表示一个进程进入临界区, 另一个进程等待进入。 20 利用记录型信号量实现进程互斥P1P2wait(mutex) wait(mutex) signal(mutex) signal(mutex) 互斥区 21 ? 利用wait、signal操作实现两个进程互斥的模板如下:st mutex.value=1; mutex.L= { cobegin Process P1:Begin M wait(mutex); 临界区1 signal(mutex); M End Process P2:Begin M wait(mutex); 临界区2 signal(mutex); M End coend
}22 例1(进程互斥)? 生产围棋的工人不小心把相等数量的黑子和白子混装载一 个箱子里,现要用自动分拣系统把黑子和白子分开,该系 统由两个并发执行的进程组成,功能如下: (1)进程A专门拣黑子,进程B专门拣白子; (2)每个进程每次只拣一个子,当一个进程在拣子时不允 许另一个进程去拣子; ? 分析: 第一步:确定进程间的关系。由功能(2)可知进程之间是 互斥的关系。 第二步:确定信号量及其值。由于进程A和进程B要互斥进 入箱子去拣棋子,箱子是两个进程的公有资源,所以设置 一个信号量s,s的初值就设为1。 23 ? begin s: s:=1;? cobegin process A begin L1: wait(s); 拣黑子; signal(s); goto L1; process B begin L2:wait(s); 拣白子; signal(s); goto L2; 24 使用wait、signal操作实现互斥应注意? 识别临界资源? 是否被共享; ? 是否有排它性使用要求。? 临界区代码应尽量短小,不能有死循环。 ? wait和signal原语应分别紧靠临界区的头尾。 ? wait、signal操作在同一进程中必须成对出现。25 思考题用记录型信号量解决二人存款问题,用 类C语言编写进程互斥算法。26 2. 用wait、signal操作实现进程的同步? 只要信号量初值是一个大于等于0的整数就能达 到同步的目的,就可以直接使用wait、signal操 作实现同步.? 互斥是一种特殊的同步.wait、signal操作既可以实现互斥,也可以实现 同步.27 例2?在例1的基础之上再添加一个功能: (3)当一个进程拣了一个棋子(黑子或 白子)以后,必让另一个进程拣一个棋 子(黑子或白子) 。28 ? 分析:? 第一步:确定进程间的关系。由功能(1)(2)(3) 可知,进程间的关系为同步关系。 ? 第二步:确定信号量及其值。进程A和B共享箱子这个 公有资源,但规 定两个进程必须轮流去取不同色的棋 子,因而相互间要互通消息。对于进程A可设置一个 私有信号量s1,该私有信号量用于判断进程A是否能去 拣黑子,初值为 1。对于进程B同样设置一个私有信号 量s2,该私有信号量用于判断进程B是否能去拣白子, 初值为0。当然你也可以设置s1初值为0,s2初值为1。29 ? begins1,s2: s1:=1;s2:=0;cobegin? process A begin L1: wait(s1);拣黑子; signal(s2);goto L1;? process B begin L2: wait(s2); 拣白子; signal(s1); goto L2; 30 用wait、signal操作实现进程的同步aS2 S1Var a,b,c,d,e,f,g; semaphore?∶=?0,0,0,0,0,0,0;?cS4dS5bS3begin?parbegin?begin S1; signal(a); signal(b);?fS6gebegin wait(a); S2; signal(c); signal(d);?begin wait(b); S3; signal(e);?图 2-10 前趋图举例begin wait(c); S4; signal(f);? begin wait(d); S5; signal(g);?begin wait(e); wait(f); wait(g); S6;?parend?end31 使用wait,signal操作实现同步应注意?信号量的设置 ? 信号量的初值?wait,signal操作要成对出现,并在不同的进程中32 信号量及wait,signal操作讨论(3)(1) wait,signal操作必须成对出现,有一个wait操作 就一定有一 个signal操作 (2) 当为互斥操作时,它们同处于同一进程 当为同步操作时,则不在同一进程中出现 (3) 如果wait(S1)和wait(S2)两个操作在一起,那么wait操 作的 顺序至关重要。 一个同步wait操作与一个互斥wait操作在一起时,同 步wait操作在互斥wait操作前,而两个signal操作无关 紧要。 33 PV操作实现互斥与同步的模板进程互斥 S初值为1 P1 P2wait(S) 临界区1 signal(S) wait(S) 临界区2 signal(S)进程同步 S1初值为n, S2初值为0 P1 P2wait(S1) 段1 signal(S2) wait(S2) 段2 signal(S1)在P1与P2中设置相同的wait、signal 操作 34 进程互斥总结? 由于用于互斥的信号量mutex与所有的并发进 程有关,所以称之为公有信号量。公有信号量 的值反映了公有资源的数量。只要把临界区置 于wait(mutex)和 signal(mutex)之间,即可 实现进程间的互斥。就象火车中的每节车厢只 有一个卫生间,该车厢的所有旅客共享这个公 有资源:卫生间。 ? 判断进程间是否互斥,关键是看进程间是否共 享某一公有资源 。 35 进程同步?与进程互斥不同,进程同步时的信号量 只与制约进程及被制约进程有关而不是 与整组并发进程有关,所以称该信号量 为私有信号量。利用PV原语实现进程同 步的方法是:首先判断进程间的关系为 同步的,且为各并发进程设置私有信号 量,然后为私有信号量赋初值,最后利 用PV原语和私有信号量规定各进程的执 行顺序。 36 ?进程同步与互斥的混合问题 ?37 经典的进程同步问题? 生产者/消费者问题 ? 读者/写者问题 ? 哲学家进餐问题38 生产者/消费者问题生产者消费者问题是一种同步问题的抽 象描述。计算机系统中的每个进程都可以消 费(使用)或生产(释放)某类资源。这些 资源可以是硬件资源,也可以是软件资源。当某一进程使用某一资源时,可以看作 是消费,称该进程为消费者。而当某一进程 释放某一资源时,它就相当于生产者。39 情形1: 1个生产者,1个消费者,单缓冲区? 生产者进程P1不断地生产产品送入缓冲区,消 费者进程P2不断地从缓冲区中提取产品消费。 ? 信号量empty,初始化为1,表示缓冲区为空, 可以将产品放入缓冲区中; ? 信号量full,初始值为0,表示缓冲区有产品, 可以提取消费。P1:生产一个产品---&wait(empty)测试缓冲区是否为空-----&产品 送缓冲区----&signal(full)设置有产品----&重复P2: wait(full)测试是否有产品-----&从缓冲区取出产品------ &signal(empty)设置缓冲区为空-------&消费---&重复 40 情形2: 1个生产者,1个消费者,n个缓冲区? 同步:信号量empty(初始化为n),表示是否可以将产 品放入缓冲区中; 信号量full,初始值为0,表示缓冲区中是否有物品 。 互斥:mutex:对缓冲区资源进行互斥控制 。? P1: 生产一个产品-----&wait(empty)---&wait(mutex)---& 产品送缓冲区---&signal(mutex)----&signal(full) ? P2: wait(full)------&wait(mutex)---&从缓冲区取出一个 产品-----&signal(mutex)-----&signal(empty)-----&消费41 情形3: 多个生产者,多个消费者,n个缓冲区通过一个公用缓冲池可以把一群生产者 P1,P2…,Pi,和一群消费者Q1,Q2,…,Qj联系起来。 如图: ? 只要缓冲区未满,生产者就可以把产品送入缓冲 区;? 只要缓冲区未空,消费者就可以从缓冲区中取走 物品。42 生产者/消费者问题(图示)放消息 取消息PQ......ijnn个缓冲区 (Buffer)43 44 生产者/消费者问题(分析)? 同步信号量:empty:初值为缓冲池的大小N,?full: 初值为0。? 互斥信号量mutex:其初值为1。? struct semaphone empty=n, full=0, mutex=1;void buffer[n-1];int in=, out=0;45 生产者/消费者问题(解决)Consumerj: cobegin while(1) procedurei: { while(1) wait(full); { wait(mutex); 生产产品; 从Buffer[out]取产品; wait(empty); wait(mutex); out = (out+1) signal(mutex); 往Buffer [in]放产品; signal(empty); in = (in+1) 消费产品; signal(mutex); } signal(full); } 46 生产者/消费者问题(思考)? 在生产者进程和消费者进程中,两个wait操 作的执行顺序是否能交换?两个signal操作 的执行顺序是否能交换?47 思考题两个进程合作完成数据计算和打印工作, 计算进程未计算完就不可打印,反之也然, 双方共用一个缓冲区,写出此算法。48 读者/写者问题有两组并发进程: ? 读者和写者,共享一个数据文件 要求: ? 允许多个读者同时执行读操作 ? 不允许读者、写者同时操作 ? 不允许多个写者同时操作49 读者/写者问题如果读者来:1)无读者、写者,新读者可以读 2)有写者等,但有其它读者正在读,则新读者也可以读 3)有写者写,新读者等如果写者来:1)无读者、写者,新写者可以写 2)有读者,新写者等待 3)有其它写者,新写者等待50 读者写者问题的解法? 为实现读者和写者、写者和写者之间的互斥,设 置一个互斥信号量Wmutex=1 ? 由于“读―读”允许,再设置一个整型变量 Readcount表示正在读的进程数,初值 Readcount=0 ? 由于Readcount是一个可被多个读者进程访问的 临界资源 ,所以要为它设置一个互斥信号量 Rmutex=151 ?判断是否可读?-& ?读?…有无读者在读,若有读者, 则说明没有写者,可读; 若无读者,则查看有写者吗需要记录读者数量52 读者: { wait(Rmutex); if readcount=0 then wait(Wmutex); Readcount= Readcount+1; signal(Rmutex); 读 wait(Rmutex); Readcount= Readcount-1; if Readcount=0 then signal(Wmutex); 写者: signal(Rmutex); } { wait(Wmutex); 写 signal(Wmutex); }
53 哲学家就餐问题? 有五个哲学家围坐在一圆桌旁,桌 中央有一盘通心粉,每人面前有一 只空盘子,每两人之间放一只筷子 ? 每个哲学家的行为是思考,感到饥 饿,取筷子,然后吃通心粉,放筷 子,思考。 ? 为了吃通心粉,每个哲学家必须拿 到两只筷子,并且每个人只能直接 从自己的左边或右边去取筷子 ? 筷子是临界资源,要用5个互斥信号 量来表示这5只筷子。54 哲学家就餐问题解设fork[5]为5 个信号量,初值均为1 struct semaphore fork [4]; 以上解法会出现死锁,为防止死锁发生可采 fork[i]:= 1; 取的措施: Philosopheri: ?最多允许4个哲学家同时坐在桌子周围 While(1) ?给所有哲学家编号,奇数号的哲学家必须首 { 先拿左边的筷子,偶数号的哲学家则反 思考; ?仅当一个哲学家左右两边的筷子都可用 wait(fork[i]); 时,才允许他拿筷子(?) wait(fork[(i+1) mod 5]); 进食; signal(fork[i]); signal(fork[(i+1) mod 5]);
55 } 思考题桌子上有一只盘子,每次只能放入一 只水果。爸爸专向盘中放苹果,妈妈专向盘 中放桔子,一个儿子专等吃盘中的桔子,一 个女儿专等吃盘中的苹果。请利用wait、 signal操作写出父亲、母亲、儿子、女儿进 程的同步算法。56 思考题分析:在本题中,应设置三个信号量s、so、 sa, ? 信号量s表示盘子是否为空,其初值为1; ? 信号量so表示盘中是否有桔子,其初值为0; ? 信号量sa表示盘中是否有苹果,其初值为0。 同步描述如下:57 Var s, so, sa: semaphone: =1, 0, 0; Begin cobegin father ( ); mother( ); son ( ); son ( ) daughter ( ); wait(so); coend 从盘中取出桔子; father ( ) signal(s); wait(s); 吃桔子; 将水果放入盘中; daughter ( ) signal(sa); wait(sa); mother ( ) 从盘中取出苹果; wait(s); signal(s); 将水果放入盘中; 吃苹果; signal(so); End 58
更多搜索:
All rights reserved Powered by
文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 互斥量和信号量的区别 的文章

 

随机推荐