操作系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2) 信号量的类型
信号量按联系进程的关系分成二类: 公用信号量(互斥信号量):它为一组需互斥共享临界资 源的并发进程而设置,代表共享的临界资源,每个进程均 可对它施加P、V操作,即都可申请和释放该临界资源,其 初始值置为1。信号量mutex取值意义如下: mutex .value >=m ;m>0,表示m个某类资源空闲,可供使 用。 =0 ;表示资源已被占用,无其它进程等待。 =-n ;n>0,表示资源已被占用,还有n个进 程因 等待资源而阻塞。 专用信号量(同步信号量):它为一组需同步协作完成任 务的并发进程而设置,只有拥有该资源的进程才能对它施 加P操作(即可申请资源),而由其合作进程对它施加V操 作(即释放资源)。
3.1.2 利用硬件技术实现进程同步机制
1.提高临界区代码执行中断优先级 这种方法在UNIX和Windows NT中都使用,它是在单机系 统中有效地实现互斥的一种方法。 因为在传统操作系统中,打断进程对临界区代码的执 行只有中断请求、中断一旦被接受,系统就有可能调用其 它进程进入临界区,并修改此全局数据库。所以用提高临 界区中断优先级方法就可以屏蔽了其它中断,保证了临界 段的执行不被打断,从而实现了互斥。 在多处理机情况下,用提高临界段代码执行的中断优先 级方法是无法保证互斥的,因为在一个处理机上提高中断 优先级并不能阻止其它处理器上的中断,所以必须采用其 它方法。
2. 检测和设置(TS)硬件指令 许多大型机(如IBM370等)和微型机(如Intel ×86等)中 都提供了专用的硬件指令,这些指令允许对一个字中的内容 进行检测和修正,或交换两个字的内容。特别要指出的是这 些操作都是在一个存储周期中完成,或者说由一条指令来完 成,用这些指令就可以解决临界区问题了。 在单机系统中,由于中断的原因,使得一个进程在对一个公 用变量先取来并检测其值,然后修改的这两个动作中,可以 插入其它进程对此公用变量的访问和修改,从而破坏了此公 用变量数据的完整性和正确性。在多机系统中,多处理机共 享主存,因而使得某处理机可插入另一处理机的两个存储访 问周期之间,访问并修改此共享变量。
第三章 进程的同步和通讯 (Synchronization and Communication Among Processes )
教学目的: 在进程的控制的基础上这课引入进程同步和进程同步机制的 概念,它对并发执行进程的推进序列加以限制以保证互斥使用 临界资源或协同完成任务,解决程序并发执行时带来结果不可 再现问题。这课介绍了用软件、硬件、信号量机制、AND型 信号量集、一般信号量集、管程等各种解决进程互斥同步问题 的方法,重点介绍了信号量机制的概念和用信号量机制解决进 程互斥同步问题的方法。
临界资源和临界区 例如进程A的程序如下(进程B的程序类似): A: begin Input data 1 form I/O 1 ; Computer……; Print results 1 by printer ; end
A临界区
3. 进程同步机制 进程在并发执行时为了保证结果的可再现性,各进程执行序 列必须加以限制以保证互斥地使用临界资源,相互合作完成 任务。 多个相关进程在执行次序上的协调称为进程同步。用于保证 多个进程在执行次序上的协调关系的相应机制称为进程同步 机制。 所有的进程同步机制应遵循下述四条准则: 空闲让进。 当无进程进入临界区时,相应的临界资源处于空闲状态, 因而允许一个请求进入临界区的进程立即进入自己的临界区 忙则等待。 当已有进程进入自己的临界区时,即相应的临界资源正被 访问,因而其它试图进入临界区的进程必须等待,以保证进 程互斥地访问临界资源。
3.2 信号量(Semaphores)机制
1965年,荷兰学者Dijkstra提出的信号量机制是一种卓有 成效的进程同步工具,在长期广泛的应用中,信号量机制 又得到了很大的发展,它从整型信号量机制发展到记录型 信号量机制,进而发展为“信号集”机制。现在信号量机 制已广泛应用于OS中。 (1) 记录型信号机制 记录型信号量结构 在信号量机制中信号量是代表资源物理实体的数据结构, 记录型信号量的数据结构描述如下: type semaphore=record value: integer; L: pointer of PCB; end 信号量的值只能通过两个原子操作:P、V操作来改变, 它代表分配资源和释放资源。
教学要求:
熟悉进程间制约关系,掌握临界资源和临界区概念,掌握进 程同步和进程同步机制,熟悉利用软件方法和硬件技术解决 进程同步机制。 熟练掌握信号量和P、V操作的概念、定义和实质,熟练掌握 利用信号量实现进程互斥和同步,熟悉用信号量描述前趋关 系。 掌握利用信号量解生产者-消费者问题、熟悉利用信号量解读 者-写者问题等经典同步问题,掌握进程同步分析方法。 了解用AND型信号集机制、一般信号集机制和管程解经典同 步问题。 熟悉进程通讯的概念和共享存储器系统、消息传送系统、管 道通信系统三类高级通讯机制,掌握消息缓冲队列通信机制。
3.1进程同步(Synchronization of multiple processes)
3.1.1 进程同步的概念
1.进程间制约关系 在多道程序环境下,系统中各进程以不可预测的速度向前 推进,进程的异步性会造成了结果的不可再现性。为防止这 种现象,异步的进程间推进受到二种限制: 资源共享关系(Cooperation Among Processes by Sharing) 多进程共享资源,例如各进程争用一台打印机,这时各进 程使用这台打印机时有一定的限制。每次只允许一个进程使 用一段时间打印机,等该进程使用完毕后再将打印机分配给 其它进程。这种使用原则称为互斥使用。
(5)利用信号量实现进程同步
利用信号量能解决进程间的同步问题,这里以下图所示的 计算进程C和打印进程P通过缓冲区Buffer传送数据的同步 问题为例说明。 C P
Buffer
利用信号量实现进程同步-1
C和P两进程基本算法如下: C:begin P: begin repeat repeat Compute next number ; take from Buffer ; add to Buffer ; print last number ; until false until false end end C和P两进程并发执行,必须在执行序列上遵循以下规则,才 能避免错误。 只有当C进程把数据送入Buffer后,P进程才能从Buffer中取 出数据来打印,否则P进程只能等待。 只有当P进程从Buffer中取走数据后,C进程才能将新计算的 数据再存入Buffer,否则C进程也只能等待。
(4)利用信号量实现进程互斥
为使多个进程能互斥地访问某临界资源,只需为该资源设置一 个互斥信号量mutex,并设其初值为1,然后将各进程的临界区 CS置于P(mutex)和V(mutex)操作之间即可。利用信号量实 现共享打印机的A、B两进程互斥的类并行PASCAL程序描述如 下:
利用信号量实现进程互斥-1
进程同步的概念-1
进程之间竞争资源面临三个控制问题: 互斥( mutual exclusion ) 死锁( deadlock ) 饥饿( starvation ) 相互合作关系
(Cooperation Among Processes by Communication) 在某些进程之间还存在合作关系,例如一个程序的输入、 计算、打印三个程序段作为三个进程并发执行,由于这三个 进程间存在着相互合作的关系,即先输入再计算、最后再打 印的关系,所以这三个进程在并发执行时推进序列受到限制, 要保证其合作关系正确,进程间这种关系称为同步关系。
var mutex:=semaphore:=1 ; begin parbegin A:begin B:begin Input datd 1 from I/0 1 ; Input datd 2 from I/O 2 ; Compute……; Compute……; P(mutex) ; P(mutex) ; Print results1 by printer; Print results2 by printer; V(mutex) ; V(mutex) ; end end parend end (练习)
2.ห้องสมุดไป่ตู้临界资源和临界区
临界资源 象打印机这类资源一次只允许一个进程使用的资源称为临 界资源。属于临界资源有硬件打印机、磁带机等,软件有消 息缓冲队列、变量、数组、缓冲区等。当然还有一类象磁盘 等资源,它允许进程间共享,即可交替使用,所以它称为共 享资源,而临界资源又称独享资源。 临界区(critical sections) 多个进程共享临界资源时必须互斥使用,例如A和B两个进程 都需要使用打印机,它们必须互斥使用。如果为了保证结果 的正确性限制A、B二进程推进序列,规定进程A执行好再执行 进程B,这样的限制就显得过死,因为它已不能保证进程A、B 能并发执行,所以必须把限制减少到最少,以尽可能支持并 发执行。为此把各进程分解,把访问临界资源的那段代码 (称为临界区)与其它段代码分割开来,只对各种进程进入 自己的临界区加以限制,即各进程互斥地进入自己的临界区。
进程同步机制 有限等待。 对要求访问临界资源的进程,应保证进程能在有限时 间进入临界区,以免陷入“饥饿”状态。 让权等待。 当进程不能进入自己的临界区时,应立即释放处理机, 以免进程陷入忙等。
进程同步机制 一个由临界区和剩余区1和剩余区2程序段组成的进程采 用进程同步机制后的描述如下: begin remainder section 1; 剩余区1 进入区 critical section ; 临界区 退出区 remainder section 2 ; 剩余区2 end 进程同步机制在临界区前加上进入区,它负责对欲访问 的临界资源状态进行检查,以决定是允许该进程进入临界 区还是等待。同时在临界区后加上退出区,它负责释放临 界资源以便其它等待该临界资源的进程使用。 实现进程互斥和同步的信号量机制有软件方法、硬件指令 方法、信号量机制和管程等。
检测和设置(TS)硬件指令-2 用这些硬件指令可以简单有效地实现互斥。其方法是为每个 临界段或其它互斥资源设置一个布尔变量,例如称为lock。 当其值为false则临界区末被使用,反之则说明正有进程在 临界区中执行。于是某进程用TS指令实现互斥的程序结构为 (设为无限循环进程): repeat ... while TS(lock) do skip ; 进程临界区CS ; lock :=false ; ... until false; WindowsNT 内核用来达到多处理器互斥的机制“转锁”,它 类同于TS指令机制。
(3)
P-V操作(wait(s)和signal(s) 操作)
对信号量施加P、V操作代表申请和释放资源。P-V操作描述如下: proceduce P(S) var S:semaphore ; begin S.value=S.value-1 ; If S.value<0 then block(S.L) ; end Procefuce V(S) Var S:semaphore ;; begin S.value=S.value+1 ; If s.value≤0 then wakeup(S.L) ; end (练习)
检测和设置(TS)硬件指令-1 对于同一主存块访问要求,即使两个处理机同时提出,存 储控制逻辑也只能让其中之一先访问,但在一个处理机的 两个存储周期间则可以插入另一个处理机的存储周期。现 在用一条指令来完成检测和修改两个功能,这样中断和插 入另一处理机的存储周期均不可能,所以不会影响此公用 变量数据的完整性。 检测和设置(TS)的功能可用PASCAL语言描述如下: function TS (var flag :boolean):boolean begin TS = flag ; flag :=true ; end 这条指令在Z-8000中称为TEST指令,在IBM370中称为TS指令。