




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
奥鹏远程教育中心助学服务部 浙大08秋冬学期操作系统原理课程第二章课堂笔记第二章 进程管理 2.1 进程的引入和描述2.1.1 为什么引入进程 为了提高资源利用率,系统采用多道程序设计,程序执行环境由顺序执行变为并发执行。1. 程序顺序执行(Sequential Execution)与特征 一个较大的程序通常都由若干个程序段组成,程序在顺序的处理机上执行时,各程序段必须按照先后次序逐个执行。程序各程序段先后执行次序关系可用前趋图表示。 前趋图(Predecessor Graph)是一个有向无循环图,图由结点和 结点间有向边组成,结点代表各程序段操作,而结点间的有向边表示两程序段操作之间存在的前趋关系(“”)。两程序段Pi和Pj的前趋关系表示成Pi Pj,Pi是Pj的前趋,Pj是Pi的后继。 (1)程序独占处理机顺序执行时特征 顺序性:程序各程序段严格按照规定的顺序执行。 封闭性:程序运行时机内各资源只受该程序控制而改变,执行结果不受外界因素影响。 可再现性:只要程序执行环境和初始条件相同,程序多次执行,可获得相同结果。2. 程序并发执行(Concurrent Execution)与特征(1) 程序并发执行的前趋图四个上述三个程序段类的作业并发执行的前趋图如下图所示:(2) 程序并发执行特征(了解)1)间断性:程序在并发执行时,由于它们共享资源或为完成同一项任务而相互合作,使在并发程序之间形成了相互制约的关系。相互制约将导致并发程序具有“执行-暂仃-执行”这种间断性活动规律。2)失去封闭性:程序在并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行已失去了封闭性。3)不可再现性:程序在并发执行时,由于失去了封闭性,也将导致失去结果的可再现性。即程序经过多次运行,虽然其各次的环境和初始条件相同,但得到的结果却各不相同。例:观察者/报告者3. 进程的引入(1) 为了提高资源利用率,系统采用多道程序设计,程序执行环境由顺序执行变为并发执行。(2) 由于程序在并发执行时,可能会造成执行结果的不可再现,所以用“程序”这个概念已无法描述程序的并发执行,所以必须引入新的概念-进程来描述程序的并发执行,并要对进程进行必要的管理,以保证进程在并发执行时结果可再现。(3) 进程这一术语最早由麻省理工学院著名的操作系统MULTICS中提出。(4) 进程(Process)定义:“可并发执行的程序在一个数据集合上的运行过程”。(掌握) (5) 进程的特征:(重点掌握)1)动态性:动态性是进程的最基本特征,它是程序执行过程,它是有一定的生命期。它由创建而产生、由调度而执行,因得不到资源而暂仃,并由撤消而死亡。而程序是静态的,它是存放在介质上一组有序指令的集合,无运动的含义2)并发性:并发性是进程的重要特征,同时也是OS的重要特征。并发性指多个进程实体同存于内存中,能在一段时间内同时运行。而程序是不能并发执行。3)独立性:进程是一个能独立运行的基本单位,即是一个独立获得资源和独立调度的单位,而程序不作为独立单位参加运行。4)异步性:进程按各自独立的不可预知的速度向前推进,即进程按异步方式进行,正是这一特征,将导致程序执行的不可再现性,因此OS必须采用某种措施来限制各进程推进序列以保证各程序间正常协调运行。5)结构特征:从结构上,进程实体由程序段、数据段和进程控制块三部分组成。 2.1.2进程的描述1. 进程的三个基本状态(掌握)(1)运行态/执行态(Running):当一个进程在处理机上运行时,则称该进程处于运行状态。(2)就绪态(Ready):一个进程获得了除处理机外的一切所需资源,一旦得到处理机即可运行,则称此进程处于就绪状态。(3)阻塞态(Blocked):(又称挂起状态、等待状态):一个进程正在等待某一事件发生(例如请求IO而等待IO完成等)而暂时停止运行,这时即使把处理机分配给进程也无法运行,故称该进程处于阻塞状态。图2-3 进程的三个基本状态转换图2.进程状态的转换(掌握)l 就绪态运行态:当处理机空闲时,进程调度程序必将处理机分配给一个处于就绪态的 进程 ,该进程便由就绪态转换为运行态。l 运行态阻塞态:处于运行态的进程在运行过程中需要等待某一事件发生后,才能继续 运行,则该进程放弃处理机,从运行态转换为阻塞态。l 阻塞态就绪态:处于阻塞态的进程,若其等待的事件已经发生,于是进程由阻塞态转 换为就绪态。l 运行态就绪态:处于运行状态的进程在其运行过程中,因分给它的处理机时间片已用完,而不得不让出(被抢占)处理机,于是进程由运行态转换为就绪态。l 而阻塞态运行态和就绪态阻塞态这二种状态转换不可能发生。 3. 系统中各进程状态管理 处于运行态进程:如系统有一个处理机,则在任何一时刻,最多只有一个进程处于运行态。 处于就绪态进程:一般处于就绪态的进程按照一定的算法(如先来的进程排在前面,或采用优先权高的进程排在前面)排成一个就绪队列RL。 处于阻塞态进程: 处于阻塞态的进程排在阻塞队列中。4系统中各进程状态转换影响 在一个多道程序设计的系统中,各进程状态转换会互相影响。 例如系统中一个运行态的进程A发生I/O请求后要等待I/O完成,它的状态也由运行态转换为阻塞态,此时进程调度程序就会按照一定的算法,在就绪队列中选一个进程B,将处理机分给它,该B进程的状态也由就绪态转换为运行态。 如一个进程C等待的事件完成,则它的状态由阻塞态转换为就绪态,它也从阻塞队列中抽出插入就绪队列中。 如进程 C从阻塞态转换为就绪态时,有一个进程D在CPU上运行。而系统采用抢占式调度算法,进程C的优先级又高于正在CPU上运行的进程D的优先级,则要发行抢占调度。 即接下去的操作时由进程调度程序将正在运行的进程D由运行态转换为就绪态,插入就绪队列。5.系统中各进程状态的分布实例例:一个只有一个处理机的系统中,OS的进程有运行、就绪、阻塞三个基本状态。假如某时刻该系统中有10个进程并发执行,在略去调度程序所占用时间情况下试问(1)这时刻系统中处于运行态的进程数最多几个?最少几个(2)这时刻系统中处于就绪态的进程数最多几个?最少几个(3)这时刻系统中处于阻塞态的进程数最多几个?最少几个?解:因为系统中只有一个处理机,所以某时刻处于运行态的进程数最多只有一个。而最少可能为0,此时其它10个进程一定全部排在各阻塞队列中,在就绪队列中没有进程。而某时刻处于就绪态的进程数最多只有9个,不可能出现10个情况,因为一旦CPU有空,调度程序马上调度,当然这是在略去调度程序调度时间时考虑。处于阻塞态的进程数最少是0个。 2.1.3进程控制模块PCB(Process Control Block)1进程控制块的作用进程存在的唯一实体(重点掌握) 由于进程控制块中记录进程存在和特性信息;PCB与进程同生死,创建一个进程就是为其建立一个PCB,当进程被撤消时,系统就回收它的PCB; OS对进程的控制要是根据PCB来进行,对进程管理也通过对PCB管理来实现,所以进程控制块是进程存在的唯一实体。2. PCB的信息 进程标识符 它用于唯一地标识一个进程。它有外部标识符(由字母组成,供用户使用)和内部标识符(由整数组成,为方便系统管理而设置)二种。 进程调度信息 它包括进程状态(running、ready、blacked)、队列(就绪、阻塞队列)、队列指针,调度参数:进程优先级、进程已执行时间和已等待时间等。 处理机状态信息 它由处理机各种寄存器(通用寄存器、指令计数器、程序状态字PSW、用户栈指针等)的内容所组成,该类信息使进程被中断后重新执行时能恢复现场从断点处继续运行。 进程控制信息 它包括程序和数据的地址、IO资源清单,保证进程正常运行的同步和通信机制等。 家族信息 它包括该进程的父、子进程标识符、进程的用户主等。2.1.4 进程上下文 (Process Context) 进程是由程序、数据和进程控制块组成。 进程上下文实际上是执行活动全过程的静态描述。 一个进程的执行是在该进程的上下文中执行,而当系统调度新进程占有处理机时,新老进程的上下发生切换。 2.2.进程控制 (Process Control ) 2.2.1内核 (Kernel) 1. 核心态和用户态(管态和目态)(了解) (1)为了防止用户应用程序访问和或更改重要的操作系统数据,Windows 2000、UNIX使用两种处理器访问模式:核心态和用户态(又称管态和目态)。 (2)用户应用程序(在Windows 2000中以用户线程方式出现)运行用户程序一般代码时,它是在用户态下执行。(3)但当程序要调用系统服务,它就要通过一条专门的指令(自陷指令/访管指令)来完成从用户态切换到核心态,操作系统根据该指令及有关参数,执行用户的请求服务。在服务完成后将处理器模式切换回用户态,并将控制返回用户线程。因此用户线程有时在核心态下执行,在核心态下执行的是调用操作系统有关功能模块的代码。 2. 原语(Primitive)(掌握) 原语是一种特殊的广义指令,它的功能是由系统通过一段不可分割的指令操作来完成,它又称原子操作,原语在核心态下完成。进程控制操作(创建、撤消、阻塞)大都为原语操作。3 内核功能 (1)内核是计算机硬件上的第一层扩充软件,它是OS中关键部分,它是管理控制中心。内核在核心态下运行,常驻内存,内核通过执行各种原语操作来实现各种控制和管理功能。(2)内核为OS其它模块提供最基本的支撑功能,对中断进行“必要和有限的”处理,时钟管理和原语操作。同时完成进程(处理器)、存储器和设备各种资源基本管理功能。2.2.2进程状态的细化 1. “挂起”、 “激活”操作的引入(1)系统管理员有时需要暂停某个进程,以便排除系统故障或暂时减轻系统负荷,用户有时也希望暂停自己的进程以便检查自己作业的中间结果。 这就希望系统提供“挂起”操作,暂停进程运行,同是也要提供“激活”的操作,恢复被挂起的进程。 由于被挂起前进程的状态有三种,挂起后的进程就分为二种状态:静止就绪态和静止阻塞态(有的称挂起就绪态和挂起阻塞态)。 挂起前的进程就绪态和阻塞态也改为活动就绪态和活动阻塞态。(2)当进程处于运行态和活动就绪态时,执行挂起操作,进程状态转换为静止就绪态。 当进程处于活动阻塞态时,执行挂起操作,进程状态转换为静止阻塞态。 对被挂起的进程施加“激活”操作,则处于静止就绪的进程转换为活动就绪态,处于静止阻塞态的进程转换为活动阻塞态。 被挂起的处于静止阻塞态的进程当它等待的事件发生后,它就由静止阻塞态转换为静止就绪态。具有以上五个状态和新增“挂起”、“激活”两个操作的进程状态图见下图所示。2. 五个状态进程状态图 (掌握) 2.2.3进程控制原语 1.创建原语(Create) 一个进程可借助创建原语来创建一个新进程,该新进程是它的子进程,创建一个进程主要是为新进程创建一个PCB。 创建原语首先从系统的PCB表中索取一个空白的PCB表目,并获得其内部标识,然后将调用进程提供的参数:如外部名、正文段、数据段的首址、大小、所需资源、优先级等填入这张空白PCB表目中。 并设置新进程状态为活动静止就绪态,并把该PCB插入到就绪队列RQ中,就可进入系统并发执行。2.撤消原语(Destroy)/ 终止(Termination) 对于树型层次结构的进程系统撤消原语采用的策略是由父进程发出,撤消它的一个子进程及该子进程所有的子孙进程,被撤消进程的所有资源(主存、I/O资源、PCB表目)全部释放出来归还系统,并将它们从所有的队列中移去。 如撤消的进程正在运行,则要调用进程调度程序将处理器分给其它进程。 3.阻塞原语(block) 当前进程因请求某事件而不能执行时(例如请求IO而等待IO完成时),该进程将调用阻塞原语阻塞自己,暂时放弃处理机。进程阻塞是进程自身的主动行为。 阻塞过程首先立即仃止原来程序的执行,把PCB中的现行状态由运行态改为活动阻塞态,并将PCB插入到等待某事件的阻塞队列中,最后调用进程调度程序进行处理机的重新分配。4.唤醒原语(wakeup) 当被阻塞的进程所期待的事件发生时(例如IO完成时),则有关进程和过程(例如IO设备处理程序或释放资源的进程等)调用wakeup原语,将阻塞的进程唤醒,将等待该事件的进程从阻塞队列移出,插入到就绪队列中,将该进程的PCB中现行状态, 如是活动阻塞态改为活动就绪态,如是静止阻塞态改为静止就绪态。 5.挂起原语(suspend) 调用挂起原语的进程只能挂起它自己或它的子孙,而不能挂起别的族系的进程。挂起原语的执行过程是:检查要挂起进程PCB的现行状态, 若正处于活动就绪态,便将它改为静止就绪态; 如是活动阻塞态则改为静止阻塞态。 如是运行态,则将它改为静止就绪态,并调用进程调度程序重新分配处理机。 为了方便用户或父进程考察该进程的运行情况,需把该进程的PCB复制到内存指定区域。6.激活原语(active) 用户进程或父进程通过调用激活原语将被挂起的进程激活。 激活原语执行过程是:检查被挂起进程PCB中的现行状态,若处于静止就绪态,则将它改为活动就绪态,若处于静止阻塞态,则将它改为活动阻塞态。 2.2.4线程(Threaded)概念1.线程的引入 线程基本的属性(了解)n 进程既是一个拥有资源的独立单位,它可独立分配虚地址空间、主存和其它;n 又是一个可独立调度和分派的基本单位。(1)概念 资源拥有单元称为进程(或任务),调度的单位称为线程、又称轻进程(light weight process)。 线程只拥有一点在运行中必不可省的资源(程序计数器、一组寄存器和栈),但它可与同属一个进程的其它线程共享进程拥有的全部资源。线程定义为进程内一个执行单元或一个可调度实体。 2.多线程(Multithreading) 多线程是OS在一个进程内支持多个线程的能力。 一个进程定义为保护的单元和资源分配的单元,与一个进程有关的是: 保存进程映象的虚地址空间; 对处理器、其它进程、(如进程通信)、文件和IO资源受保护的存取。 在一个进程内有多个线程,与一个线程有关的是: 一个线程的执行状态(运行、就绪); 当不运行时保存一个线程的内容:一个独立的程序计数器;一个执行的栈; 每个线程的一些局部变量的静态存贮;和这个进程的其它线程共享对这个进程的存贮器和资源的存取。 3. 引入线程的好处(Benefits of Threads)u 线程的关键好处是从性能应用中得到的,在一个存在的进程中产生(或终止)一个线程比产生(或终止)一个进程化费少得多的时间。u 假如一个应用或函数作为一组相关执行单元的应用,那么采用一组线程的集合比采用分开进程的集合要有效得多。u 线程应用的例子是线程作为局部网上文件服务器。u 线程、进程等的上下文切换开销:与用户级线程相比,核心级线程的上下文切换时间要大于用户级线程的上下文切换时间。 线程和进程间关系(了解)线程的分类(1)核心级(系统级)线程(kernel-level thread) 依赖于OS核心,由内核的内部需求进行创建和撤销,用来执行一个指定的函数。Windows NT和OS/2支持内核线程; 内核维护进程和线程的上下文信息; 线程切换由内核完成; 一个线程发起系统调用而阻塞,不会影响其他线程的运行。 时间片分配给线程,所以多线程的进程获得更多CPU时间。(2)用户级线程(user-level thread) 不依赖于OS核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。 用户线程的维护由应用进程完成; 内核不了解用户线程的存在; 用户线程切换不需要内核特权; 用户线程调度算法可针对应用优化;2.3进程同步(Synchronization of multiple processes) 2.3.1进程同步的概念 1. 进程间制约关系 在多道程序环境下,系统中各进程以不可预测的速度向前推进,进程的异步性会造成了结果的不可再现性。为防止这种现象,异步的进程间推进受到二种限制: 资源共享关系 多进程共享资源; 例如各进程争用一台打印机,这时各进程使用这台打印机时有一定的限制。每次只允许一个进程使用一段时间打印机,等该进程使用完毕后再将打印机分配给其它进程。这种使用原则称为互斥使用。 u 进程之间竞争资源面临三个控制问题: 1)互斥( mutual exclusion )指多个进程不能同时使用同一个资源; 2)死锁( deadlock )指多个进程互不相让,都得不到足够的资源; 3)饥饿( starvation )指一个进程一直得不到资源(其他进程可能轮流占用资源)u 相互合作关系 在某些进程之间还存在合作关系,例如一个程序的输入、计算、打印三个程序段作为三个进程并发执行,由于这三个进程间存在着相互合作的关系,即先输入再计算、最后再打印的关系,所以这三个进程在并发执行时推进序列受到限制,要保证其合作关系正确,进程间这种关系称为同步关系。 2.临界资源(重点掌握) (1)像打印机这类资源一次只允许一个进程使用的资源称为临界资源。 (2)属于临界资源有硬件打印机、磁带机等,软件在消息缓冲队列、变量、数组、缓冲区等。 (3)还有一类象磁盘等资源,它允许进程间共享,即可交替使用,所以它称为共享资源,而临界资源又称独享资源。3.临界区(critical sections)(重点掌握) 多个进程共享临界资源时必须互斥使用,例如在二个进程A和B它们的程序如下: A: begin Input data 1 form I/O 1 ; Computer; Print results 1 by printer ; A临界区 end B: begin Input data 1 form I/O 2 ; Computer; Print results 2 by printer ; B临界区 endl A和B两个进程都需要使用打印机,它们必须互斥使用。l 如果为了保证结果的正确性限制A、B二进程推进序列,l 规定进程A执行好再执行进程B,或进程B执行好再执行进程A,这样的限制就显得过死,l 因为它已不能保证进程A、B能并发执行,所以必须把限制减少到最少,以尽可能支持并发执行。 l 为此把各进程代码分解,把访问临界资源的那段代码(称为临界区)与其它段代码分割开来,只对各种进程进入自己的临界区加以限制,即各进程互斥地进入自己的临界区。l 在上述A、B两程序中我们分别把A和B的使用打印机的二段程序print result 1 by printer和print result 2 by printer 称为A和B进程使用打印机的临界区A和临界区B,进程A和B必须互斥地分别进入各自的临界区A和B。 4. 进程同步机制 (1)进程在并发执行时为了保证结果的可再现性,各进程执行序列必须加以限制以保证互斥地使用临界资源,相互合作完成任务。 (2)多个相关进程在执行次序上的协调称为进程同步。用于保证多个进程在执行次序上的协调关系的相应机制称为进程同步机制。 所有的进程同步机制应遵循下述四条准则:l 空闲让进 当无进程进入临界区时,相应的临界资源处于空闲状态,因而允许一个请求进入临界区的进程立即进入自己的临界区。l 忙则等待 当已有进程进入自己的临界区时,即相应的临界资源正被访问,因而其它试图进入临界区的进程必须等待,以保证进程互斥地访问临界资源。 l 有限等待 对要求访问临界资源的进程,应保证进程能在有限时间进入临界区,以免陷入“饥饿”状态。l 让权等待 当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入忙等。l 一个由临界区和剩余区1和剩余区2程序段组成的进程采用进程同步机制后的描述如下: begin remainder section 1; 剩余区1 进入区 critical section ; 临界区 退出区 remainder section 2 ; 剩余区2 end 进程同步机制在临界区前加上进入区,它负责对欲访问的临界资源状态进行检查,以决定是允许该进程进入临界区还是等待。 同时在临界区后加上退出区,它负责释放临界资源以便其它等待该临界资源的进程使用。 实现进程互斥和同步的信号量机制有软件方法、硬件指令方法、信号量机制和管程等。 2.3.3 信号量(Semaphores)机制1. 记录型信号量结构 在信号量机制中信号量是代表资源物理实体的数据结构,记录型信号量的数据结构描述如下: type semaphore=record value: integer; L: pointer of PCB; end 信号量的值只能通过两个原子操作:P、V操作来改变,它代表分配资源和释放资源。2. 信号量的类型 公用信号量(互斥信号量) 它为一组需互斥共享临界资源的并发进程而设置,它代表永久性的共享的临界资源,每个进程均可对它施加P、V操作,即都可申请和释放该临界资源,其初始值置为1。 专用信号量(同步信号量) 它为一组需同步协作完成任务的并发进程而设置,它代表消耗性的专用资源,只有拥有该资源的进程才能对它施加P操作(即可申请资源),而由其合作进程对它施加V操作(即释放资源)。3. 信号量S取值意义S .value 0 ;表示可供使用资源数 0 ;表示资源已被占用, 无其它进程等待。 0(-n);表示资源已被占用, 还有n个进程因等待资源而阻塞。4. P-V操作(wait和signal 操作)(重点掌握) 对信号量施加P、V操作代表申请和释放资源。proceduce P(S) var S:semaphore ;begin S.value=S.value-1 ; If S.value0 then block(S.L) ; end Procefuce V(S) Var S:semaphore ;; begin S.value=S.value+1 ; If s.value0 then wakeup(S.L) ; end 2.3.4 利用信号量机制实现进程互斥 (1)为使多个进程能互斥地访问某临界资源,只需为该资源设置一个互斥信号量mutex,并设其初值为1,(2)并规定每个进程在进入临界区CS前必须申请资源,即对互斥信号量mutex施加P操作,在退出临界区CS后必须释放资源,即对互斥信号量mutex施加V操作;即将各进程的临界区CS置于P(mutex)和V(mutex)操作之间。利用信号量实现共享打印机的A、B两进程互斥的类并行PASCAL程序描述如下: var mutex:=semaphore:=1 ;beginparbegin A:begin B:begin Input data 1 from I/0 1 ; Input data 2 from I/O 2 ; Compute; Compute; P(mutex) ;申请资源 P(mutex) ;申请资源 Print results1 by printer; Print results2 by printer; (临界区A使用资源) (临界区B使用资源) V(mutex) ;释放资源 V(mutex) ;释放资源 end end parend end 2.3.5利用信号量机制实现进程同步 利用信号量能解决进程间的同步问题,这里以下图所示的计算进程C和打印进程P通过缓 冲区Buffer传送数据的同步问题为例说明。C和P两进程基本算法如下:C:begin P: begin repeat repeat Compute next number ; remove from Buffer ; add to Buffer ; print last number ; until false until false end end (1)C和P两进程并发执行,必须在执行序列上遵循以下规则,才能避免错误。 (2)只有当C进程把数据送入Buffer后,P进程才能从Buffer中取出数据来打印,否则P进程只能等待。 (3)只有当P进程从Buffer中取走数据后,C进程才能将新计算的数据再存入Buffer,否则C进程也只能等待。 为了实现进程同步,需采用同步信号量。为了满足第一条同步规则 只有当C进程把数据送入Buffer后,P进程才能从Buffer中取出数据来打印。 设置一个同步信号量full,它代表的消耗性的专用资源是缓冲器装满数据, 这个资源只是后面动作(Remove from buffer)的进程(P进程)所拥有,P进程在动作前可以申请该资源,对它施加P操作, 如条件满足P进程可从Buffer中取数,它的初值为0。 而前面动作的进程(P进程的合作进程C)在动作(Add to buffer)完成后对full信号量施加V操作,即当C进程将数据存入Buffer后,即可释放该资源供P进程再使用。 实现C和P两进程第一条同步规则的类PASCAL程序:考虑第一个同步关系C加入后P再取var: full:semaphore:=0 ; begin parbegin C: begin repeat Compute next number ; Add to buffer ; V(full) ; until false end P: begin repeat P(full) ; remove from Buffer ; Print last number ; until false end parend endl 为了满足第二条同步规则:只有当P进程从Buffer中取走数据后,C进程才能将新计算的数据再存入Buffer。l 设置另一个同步信号量empty,它代表的消耗性的专用资源是缓冲器空,这个资源只是后面动作(Add to buffer)的进程(C进程)所拥有,C进程在动作前可以申请该资源,对它施加P操作,如条件满足进程C可以申请该资源,它的初值为1 。l 而前面动作(Remove from buffer)的进程(C进程的合作进程P)在动作完成后对empty信号量施加V操作,即当P进程从Buffer中取走数据后,即可释放该资源供C进程再使用。实现C和P两进程第二条同步规则的类PASCAL程序var: empty:semaphore:=1 ; begin parbegin C: begin repeat Compute next number ; P(empty) ; Add to buffer ; until false end P: begin repeat remove from Buffer ; V(empty) ; Print last number ; until false end parend 考虑二个同步关系 var: empty,full:semaphore:=1,0 ; begin parbegin C: begin repeat Compute next number ; P(empty) ; Add to buffer ; V(full) ; until false end P: begin repeat P(full) ; remove from Buffer ; V(empty) ; Print last number ; until false end parend end2.3.6 经典进程同步问题(重点掌握) 经典进程同步问题是从进程并发执行中归纳的典型例子,这些问题常用来测试新的进程同步机制可行性。主要的经典同步问题有生产者-消费者问题、读者-写者问题、哲学家进餐问题等。u 生产者-消费者问题 (producer-consumer Problem ) 生产者-消费者问题是最著名的同步问题,它描述一组生产者(P1 Pm)向一组消费者(C1Cq)提供消息。它们共享一个有界缓冲池(bounded buffer pool),生产者向其中投放消息,消费者从中取得消息,如下图所示。生产者-消费者问题是许多相互合作进程的一种抽象。 l 假定缓冲池中有n个缓冲区,每个缓冲区存放一个消息。由于缓冲池是临界资源,它只允许一个生产者投入消息,或者一个消费者从中取出消息。l 即生产者之间、生产者与消费者之间、消费者之间都必须互斥使用缓冲池。所以必须设置互斥信号量mutex,它代表缓冲池资源,它的数值为1。 var mutex,empty,full:semaphore:=1,n,o ;Buffer : array 0n-1 of message ;in, out : on-1:=0,0 ;begin parbegin Pi: begin repeat Produce a new message m ; P (mutex) ;申请共享资源 Bufferin=m ; in :=(in+1) mod n ; V (mutex) ;释放共享资源 until false end Cj: begin repeat P (mutex) ;申请共享资源 m := bufferout ; out : = (out+1) mod n ; V (mutex) ;释放共享资源 Consume message m ; until false end parend endu 经典进程同步问题 与计算打印两进程同步关系相同,生产者和消费者二类进程P和C之间应满足下列二个同步条件:l 只有在缓冲池中至少有一个缓冲区已存入消息后,消费者才能从中提取消息,否则消费者必须等待。l 只有缓冲池中至少有一个缓冲区是空时,生产者才能把消息放入缓冲区,否则生产者必须等待。 为了满足第一个同步条件,为了满足第一条同步规则 只有在缓冲池中至少有一个缓冲区已存入消息后,消费者才能从中提取消息。 设置一个同步信号量full,它代表的消耗性的专用资源是缓冲器装满数据数,这个资源只是后面动作的进程(消费者进程C)所拥有,C进程在动作前可以申请该资源,对它施加P操作, 如条件满足C进程可从Buffer中取数,它的初值为0。而前面动作的进程(C进程的合作进程生产者进程P)在动作完成后对full信号量施加V操作,即当P进程将数据存入Buffer后,即可释放该资源供消费者进程C再使用。u 经典进程同步问题 为了满足第二条同步规则 只有缓冲池中至少有一个缓冲区是空时,生产者才能把消息放入缓冲区。 设置另一个同步信号量empty,它代表的消耗性的专用资源是缓冲器空,这个资源只是后面动作的进程(生产者进程P)所拥有,P进程在动作前可以申请该资源,对它施加P操作, 如条件满足进程P可以申请该资源,它的初值为n。而前面动作的进程(生产者进程P的合作进程消费者进程C)在动作完成后对empty信号量施加V操作,即当消费者进程C从Buffer中取走数据后,即可释放该资源供生产者进程P再使用。2.4进程通信(Interprocess Communication) 在多道程序设计的系统中并发执行的进程是异步的、独立地向前推进。 并发执行的进程间有的需共享有关临界资源,有的需要协同完成一个任务,在进程间不但需要同步还需要通信,即交换一定数量的信息。 进程间通信时所交换的信息量可多可少,少者仅是一些数据和状态的变换,多者可交换成千上百个数据。 虽然信号量机制作为同步工具是卓有成效,但作为通信工具不够理想。 主要是由于效率低,生产者或消费者每次都只能放入或取出一个消息;其次是通信对用户不透明,这对程序设计带来很大的不便,P、V操作设计不当会造成某些执行序列出现死锁。u 进程通信 高级通信要求能高效地传送大量数据,同时通信过程对用户透明,以简化程序设计的复杂性。 共享存储器系统: 基于共享数据结构的通信方式 基于共享存储区的通信方式 消息传送系统 直接通信方式 间接通信方式 管道通信系统 2.4.1共享存储器系统 1. 基于共享数据结构的通信方式2. 基于共享存储区的通信方式 共享存储区是UNIX系统V中通信速度最高的一种通信机制,它包含在进程通信软件包IPC中。2.4.2 消息传递系统(Message passing system)1. 直接通信方式 发送进程利用OS提供的发送命令直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上。 接收进程利用OS提供的接收命令直接从消息缓冲队列中取得消息。此时要求发送进程和接收进程都以显示的方式提供对方的标识符,通常系统提供下述两条通信原语: Send(Receiver ,message) ;Receive(Sender ,message) ;或(Receive(message) ; 直接通信的实例-消息缓冲队列通信机制。u 消息缓冲队列通信机制 (1)消息缓冲队列通信原理 由系统管理一组缓冲区,其中每个缓冲区可以存放一个消息。 当发送进程要发送消息时先要向系统申请一个缓冲区,然后把消息写进去,接着把该缓冲区连接到接收进程的消息缓冲队列中。 接收进程可以在适当的时候从消息缓冲队列中摘下消息缓冲区,读取消息,并释放该缓冲区。(2)消息缓冲队列通信的数据结构 消息缓冲队列通信的数据结构有消息缓冲区和进程PCB中有关通信的扩充数据项,2.间接通信方式 在间接通信情况,消息不直接从发送者发送到接收者,而是发送到暂存消息的共享数据结构组成的队列,这个实体称为信箱(mailbox).因此二个进程通信情况,一个进程发送一个消息到某个信箱,而另一个进程从信箱中摘取消息。 间接通信的使用好处是增加了使用消息的灵活性。2.4.3 管道通信 UNIX系统在OS的发展上最重要的贡献之一便是该系统首创了管道(pipes)。l 管道是指用于连接一个读进程和一个写进程,以实现它们之间通信的一个打开的共享文件,又称为 pipe文件。l 向管道(共享文件)提供输入的发送进程(即写进程),以字符形式将大量的数据送入管道,而接收管道输出的接收进程(即读进程)可从管道中接收数据。l 管道通信是基于文件系统形式的一种通信方式。(1) 无名管道利用系统调用pipe(filedes)创建,只用该系统调用所返回的文件描述符filedes2来标识该文件。(2) 与一般文件不同是管道数据的先进先出(FIFO)处理方式和管道文件数据不可再现性,即被读取的数据在管道中不能再利用。无名管道在关机后自动消失。(3) 为了克服无名管道使用上的局限性,以便让更多的进程也能利用管道进行通信,在以后版本UNIX系统中又增加了有名管道。有名管道是利用mknod系统调用建立的,它是可以在文件系统中长期存在的、具有路径名的文件,因而其它进程可以知道它的存在,并能利用该路径名来访问该文件。 (4) 管道命令用符号“|”表示。2.5调度 (Scheduling) 2.5.1作业的状态和处理机三级调度 1. 作业的状态 作业从进入到运行结束,一般需要经历“提交”、“后备”、“运行”和“完成”四个阶段。(1)提交状态 一个作业被提交给机房后正在通过SPOOLing系统进行输入或用户通过终端向计算机中键入其作业时所处于的状态为提交状态。(2)后备状态 作业已经过SPOOLing系统输入到磁盘输入井,等待调入内存运行,此时作业处于后备状态。为了管理和调度作业,为每个作业设置一个作业控制块(JCB)。作业控制块记录了作业类型和资源要求等有关信息。作业控制块按作业类型组成一个或多个后备作业队列。 (3)运行状态 一个在后备作业队列的作业被作业调度程序选中后,分配必要的资源,建立一组相应的进程后,调入内存,该作业就进入运行状态。进程各状态(进程运行态、内存进程就绪态、内存阻塞态、外存进程就绪态、外存进程阻塞态等)都对应作业运行状态。(4)完成状态 当进程正常运行结束或因发生错误而终止时,作业进入完成状态。终止作业程序将负责善后处理。图2-12:作业状态和处理机三级调度2.处理机三级调度 (1)高级(Long-term)调度作业调度 作业调度用于决定把外存输入井上处于作业后备队列上的哪些作业调入内存,并为它们分配必要的资源,创建进程,设置该进程状态为就绪态,然后再将新创建的进程排在就绪队列上,参加CPU争夺。(2)低级(Short-term)调度进程调度 进程调度决定就绪队列中哪个进程将获得处理机,然后由分派程序执行把处理机分配给该进程的操作(3)中级(Medium-term)调度对换2.5.2 处理机调度模型 1.仅有进程调度的调度队列模型2.有进程调度和中级调度队列模型3.具有高级调度和低级调度的调度队列模型4.同时具有三级调度的调度队列模型2.5.3进程调度 1.进程调度的方式1)非抢占(非剥夺)方式2)抢占(剥夺)方式(Preemptive mode)2.调度的时机3.进程调度的功能1)记录系统中所有进程的执行情况2)选择占有处理机进程3)进行进程上下文切换2.5.4 调度方式和算法的选择准则和评价 1.面向用户(User-oriented)的准则和评价(1)周转时间(Turnaround Time)短: 它是评价批处理系统的重要性能指标。作业周转时间Ti是指从作业提交给系统开始,到作业完成为止的这段时间间隔。周转时间Ti = 完成时间到达(提交)时间平均周转时间 平均带权周转时间 一个作业
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 期末测试卷5年级数学试卷
- 枣庄移动围挡施工方案(3篇)
- 拼多多超市活动策划方案(3篇)
- 儿童舞蹈摄影活动方案策划(3篇)
- 智慧场馆施工方案(3篇)
- 奇石活动策划方案模板(3篇)
- 南岸别墅格栅施工方案(3篇)
- 饮酒科目考试题库及答案
- 心理咨询题目测试及答案
- 心理测试题目加分及答案
- 人教版小学3-6年级英语单词表,已A4排版,可直接打印
- 制造业班组长培训
- 研发项目策划书
- 创作属于自己的国画作品
- 烟草行业基础知识培训课件
- 《花生膜下滴灌技术》课件
- 2024年江苏高科技投资集团有限公司招聘笔试参考题库含答案解析
- 办公室文员员工职责
- 完整版江苏省政府采购专家库入库考试题库(1-4套卷)
- 样品不合格分析及改良流程图
- 小学三年级上册《健康成长》全册教案教学设计
评论
0/150
提交评论