1、,操作系统进程管理 张其亮,1,Out Line,进程调度,2,Introduction,3,程序概念一组有序的操作序列有序:指操作必须按照严格的先后顺序操作:指由机器指令、高级语言语句实现的某种特定功能 程序执行方式 顺序执行 并发执行,4,Sequence,程序的顺序执行,5,Features,顺序程序特点: 顺序性。 封闭性。程序 运行时独占全部资源,只有该程序才能改变资源的状态,一旦开始运行,其执行结果不受外界因素的影响。 可再现性。如果程序在不同时间重复运行,只要初始条件相同,结果就相同,void main() int i=1;i+;printf(“%d”,i); ,6,Preced
2、ence Graph,前驱图是一个有向无循环图 ,简称DAG (Directed Acyclic Graph)。图中每个结点表示一个语句,一段程序或一个进程,从结点Si到结点Sj的有向边表示它们的前趋关系,记为SiSj,即Si和Sj应顺序执行,Sj仅在Si执行完成后才能开始执行。,7,Concurrency,程序的并发执行出现多道系统后,处理机可以同时运行多个用户的程序,程序的执行方式也发生了改变,从顺序执行到并发执行。 并发执行概念若干个程序或程序段可以使用处理机同时执行,它们在执行时时间可以重叠。,8,9,Features,并发执行特点: 并发行 开放性程序运行环境开放,运行时要受到外界的
3、影响,因为并发程序共享系统资源 间断性 不可再现性由资源的开放性引起的,10,不可再现性举例:有两个循环程序A和B,它们共享一个变量N。 程序A每执行一次时都要做N:N1操作; 程序B每执行一次时,都要做print(N)操作,然后再将N置成“0”。 程序A和B以不同的速度运行。(假定某时刻变量N的值为5) (1) N:N1在print(N)和N:0之前,此时得到的N值分别为:6,6,0(2)N:N1在print(N)和N:0之后,此时得到的N值分别为 5, 0, 1(3) N:N1在 print(N)和N:0之间,此时得到的N值分别为 5, 6, 0,11,Process,程序本身是一个静态的
4、内容,不能表现其运行过程。 一个程序在运行时,可能有多个过程,单靠程序的概念无法对多个过程进行描述 (当我们打开2个qq时会看到windows进程中会存在2个qq.exe进程,但它们都运行的是同一个qq程序,用程序如何描述呢?)*引入进程描述程序在执行过程中的动态行为。,12,Definition,进程的定义进程特性,进程是一个具有一定独立功能的程序关于某个数据 集合的一次运行活动,它是系统进行资源分配和调度 的一个独立单位,动态性,并发性,独立性,异步性,结构性,13,Process states,14,Process states,进程是动态的概念,进程的状态也是在不断的变化。,就绪状态:
5、该进程运行所需的一切条件都得到满足,但因处理机资源个数少于进程个数,所以该进程不能运行,而必须等待分配处理机资源,一旦获得处理机就立即投入运行。,运行状态:进程正在处理机上运行的状态,该进程已获得必要的资源,也获得了处理机,用户程序正在处理机上运行。,阻塞状态:进程等待某种事件完成(例如,等待输入/输出操作的完成)而暂时不能运行的状态,处于该状态的进程不能参加竞争处理机,此时,即使分配给它处理机,它也不能运行。,15,Process states,16,Other states,挂起状态:暂停程序的执行,创建状态: (1)创建PCB并填入信息 (2)将进程插入到就绪队列,终止状态:清除PCB,
6、17,18,系统会有一个就绪队列 多个等待队列,19,PCB,进程实体进程是一个实际存在的概念,是一个实际存在的实体。进程实体由3部分组成: 程序:决定了要完成的功能 数据:执行时的操作对象 进程控制块(Process Control Block,PCB):进程的状态和占用资源以及进程之间的关系是不断变化的,为了便于对进程进行管理,系统通过进程控制块管理这些信息,20,PCB,21,PCB,当系统或父进程创建一个进程时,实际上就是为其建立一个进程控制块,当进程执行过程中状态发生变化时修改PCB,当进程被撤销时,系统收回PCB。 系统通过PCB感知进程,22,PCB,在进程控制块中,主要包括下述
7、4方面的信息。 (1)进程描述信息进程标识符。每个进程都有惟一的进程标识符,用以识别不同的进程。用户名或用户标识号。每个进程都隶属于某个用户,有利于资源共享与保护。 家族关系。标识进程之间的家族关系。,23,PCB,(2)处理机状态信息通用寄存器、指令计数器、程序状态字(PSW)、用户栈指(3)进程调度信息进程状态,指明进程的当前状态,以作为进程调度和进程对换时的依据。进程优先级。用于描述进程使用处理机的优先级别的一个整数,优先级别高的进程先获得处理机。进程调度所需的其他信息。如进程已等待CPU的时间总和、进程已执行的时间总 和等。事件。指进程被阻塞的原因。,24,PCB,(4)进程控制信息
8、程 序和数据的地址。指出该进程的程序和数据所在的内存或外存地址,以便再调度到该进程执行时,能从中找到其程序和数据。 进程同步和通信机制。指实现进程同步和进程通信时所必须的机制,如消息队列指针、信号量等。这些数据应全部或部分地存放在PCB中。 资源清单。它是一张列出了除CPU之外的进程所需的全部资源和已经分配给该进程的资源清单。 链接指针。它给出了本进程(PCB)所在队列的下一个进程的PCB首地址。,25,PCB,(在一个系统中,通常拥有数十个、数百个乃至数千个PCB。 为了对PCB进行有效地管理,系统应把所有的PCB用适当的 方式组织起来。),26,Process Control,对系统中全部
9、进程进行管理,包括创建、终止及实现进程状态转换等。 进程控制是由操作系统提供的一组系统调用实现的。这组系统调用直接控制进程,为了防止被其他进程中断,引进原语概念。 原语:用以完成特定功能的 、执行时不可分割的或不可中断的程序或系统调用。 进程控制原语:创建原语、终止原语、阻塞原语、唤醒原语,27,Create Process,创建原语 (1)申请空白PCB (2)为新进程分配资源(3)初始化PCB(标识、状态等)(4)将新进程插入到就绪队列,28,Exit process,终止原语(1)根据PID,找到进程PCB,读出其状态(2)终止进程的执行(3)若有子进程,予以终止(4)释放进程占有的资源
10、(5)释放PCB,29,Block Process,阻塞原语(1)在阻塞一个进程时,由于该进程正处于执行状态,故应先中断处理机和保存该进程的CPU现场。(2)将被阻塞进程置“阻塞”状态后插入等待队列中(3)再转进程调度程序选择新的就绪进程投入运行。,阻塞原语在一个进程期待某一事件(例如键盘输入数据、写盘、 其它进程发来的数据等)发生,但发生条件尚不具备时, 被该进程自己调用来阻塞自己。,30,Wake Up Process,唤醒原语 (1)将被唤醒进程从相应的等待队列中摘下.(2)将被唤醒进程置为就绪状态之后,送入就绪队列。(3)在把被唤醒进程送入就绪队列之后,唤醒原语既可以返回原调用程序,也
11、可以转向进程调度,以便让调度程序有机会选择一个合适的进程执行。,当等待队列中的进程所等待的事件发生时,等待该事件的所有 进程都将被唤醒。,31,Suspend & Active Process,(1)检查挂起进程的状态:若是ReadyaReadys;若BlockedaBlockes。 (2)将该进程的PCB复制到某指定的内存区。 (3)如被挂起的进程正在执行,则转调度程序重新执行。,(1)激活原语先将进程从外存调入内存,并检查进程的现行状态; (2)若处于ReadysReadya;若处于BlockesBlockeda。,挂起原语,激活原语,当进程请求将自己挂起或父进程请求将自己的某个子进程挂起
12、时 ,系统利用挂起原语将指定进程或阻塞的进程挂起,32,进程间的关系,33,Synchronization and mutex,进程间关系:同步【直接制约关系】:由于并发进程互相共享对方的私有资源所引起的直接制约。互斥【间接制约关系】:由于共享资源而引起的临界区内不允许并发进程交叉执行的现象,34,Mutex,两个并发的进程A、B,如果当A进行某个操作时,B不能做这一操作,进程间的这种限制条件称为进程互斥。,互斥定义:,35,进程同步,系统中有多个进程共同完成一项任务,这些进程之间存在着直接制约关系,每一个进程要依赖于其他进程所产生的结果才能继续运行。共同完成一个任务的若干进程称为合作进程。,
13、进程同步:,36,Difference,互斥的进程在各自单独执行时都能得到正确结果,但在临界区交叉执行时就会出现问题;同步的各个进程,如果单独执行将不会完成任务,只有相互配合才能得到正确结果,互斥的进程要求他们不能同时进入临界区,而不需要规定进入临界区的顺序。而同步的协调关系建立在他们的执行时序上,互斥的进程并不要知道对方的存在,同步的进程不仅知道对方的存在,还要通过与其它进程的通信完成协作。,37,Definition,打印机,磁带机,缓冲区,共享变量,38,39,Criterion,为了实现多个进程互斥的进入临界区,在系统设立专门的同步机制协调进程的运行。所有同步机制必须遵循如下准则:,赖
14、祖亮小木虫,空闲让进:没有进程在临界区时,不阻止其它进程进入临界区,忙则等待,有限等待:避免死等(死锁)访问临界资源的进程保证在有限的时间内进入临界区,让权等待:不能进入时或退出临界区时,立即释放处理机,让位给等待进程。避免忙等。,40,Mutex Resolution,设定一个锁变量w,w=1表示上锁,资源被占用;w=0表示开锁,资源空闲。lock w:L: if w=1 then goto L;else w=1; Unlock:w=0;,41,Semaphores,信号量是操作系统中一种特殊变量,有如下特性: 一整形变量 每个信号量表示一种系统资源的状况,其值表示该资源当前可用的数量 每个
15、信号量代表一个空的或非空等待队列 对信号量只能实施P、V操作,只有P、V操作才能改变其值对应于教材中的wait操作和signal操作,42,Semaphores,信号量分类:,整型信号量,记录型信号量,AND型信号量,信号量集,43,Semaphore Value,44,Wait & Signal,45,Mutex Resolution,用信号量解决几个进程互斥进入临界区的问题,几个进程共享一个公用信号量mutex(互斥信号量)。 每个进程进入临界区必须先执行wait(mutex),退出临界区后执行signal(mutex)。,解决互斥问题,46,Model,进程P1 进程P2 进程Pn wa
16、it(S); wait (S); wait (S);临界区; 临界区; 临界区;signal(S); signal (S); signal (S); ,信号量和wait signal操作实现进程互斥的一般模型:,47,3个进程P1 P2 P3共享1个资源N举例说明P1 P2 P3 按照上述流程能互斥使用N,48,每个程序中用户实现互斥的wait、signal操作必须成对出现,先做wait操作,进临界区,后做signal操作,出临界区。若有多个分支,要认真检查其成对性。wait 、signal操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环。,Attention:,49,Syn
17、chronization Resolution,设立与资源相关的私有信号量(资源信号量)。 设缓冲区只有一个缓冲单元 Empty=1 表示空单元个数。 Full=0 表示装满信息的单元个数。,50,Synchronization Resolution,51,Attention,分析进程间的制约关系,确定信号量种类。在保持进程间有正确的同步关系情况下,哪个进程先执行,哪些进程后执行,彼此间通过什么资源(信号量)进行协调,从而明确要设置哪些信号量。信号量的初值与相应资源的数量有关,也与P、V操作在程序代码中出现的位置有关。同一信号量的P、V操作要成对出现,但它们分别在不同的进程代码中。,52,Pr
18、actice,有一空盘,允许存放一只水果。爸爸可向盘中放苹果,妈妈可向盘中放桔子,儿子专等盘中的桔子吃,女儿专等盘中的苹果吃。请用P、V原语实现爸爸、妈妈、儿子、女儿四个进程的同步。,53,Answer,盘子设置互斥信号量 mutex=1 盘子中桔子个数 s1=0 盘子中苹果个数 s2=0 盘子中可容纳水果个数 empty=1;,父亲: P(empty) 送苹果 V(s2),女儿: P(s2) 吃苹果 V(empty),P(mutex),V(mutex),P(mutex),V(mutex),54,Classical Problem1,问题描述: 环形缓冲池由几个大小相等的缓冲块组成,每个缓冲块
19、容纳一个产品; 每个生产者可不断地每次往缓冲池中送一个生产产品; 每个消费者则可不断地每次从缓冲池中取出一个产品。,55,Classical Problem1,设置同步信号量: empty表示缓冲区空单元,初值为n。 full表示缓冲区中非空单元数,初值为0。,设置互斥信号: mutex 缓冲区作为临界资源,需要互斥访问,初值=1;,56,Resolution,注意事项: 每个程序中实现互斥的P(mutex),V(mutex)必须成对出现。 Empty和full的P,V操作也必须成对出现,但它们处于不同的程序中。 每个程序中的多个P操作不能颠倒顺序,否则可能引起死锁。,57,Classical
20、 Problem2,有五个哲学家,他们的生活方式是交替地进行思考和进餐,哲学家们共用一张圆桌,周围放有五张椅子,每人坐一张,在圆桌上有五个碗和五只筷子。当哲学家思考时,他不与同事交谈。饥饿时,便试图取用左,右最靠近他的筷子,他可能一支拿不到,只有在他拿到两支筷子时,方能就餐,餐毕,又继续思考。,58,Resolution,为每支筷子设置信号量: VAR Chopstrick:array04 of semaphore 信号量的初值均为1。,59,Resolution,wait(ChopstrickI)wait(Chopstrick(I+1) mod 5)就餐wait(ChopstrickI)wa
21、it(Chopstrick(I+1) mod 5)思考,第i个哲学家的活动,60,problem,Nobody can eat!,61,Resolution,struct semaphore chopstick5=(1,1,1,1,1);struct semaphore count=4;int i;while (TRUE) think;wait(count);wait(chopsticki);wait(chopstick(i+1) mod 5);eat;signal(chopsticki); signal(chopstick(i+1) mod 5); signal(count);,62,Cla
22、ssical Problem 3,有一个写者很多读者,多个读者可以同时读文件,但写者在写文件时不允许有读者在读文件,同样有读者在读文件时写者也不去能写文件,,63,利用信号量实现前驱关系,设定变量:a2 b3 c4 d5均为0 S1:signal(a2);signal(b3) wait (a2);S2;signal(c4) wait (b3);S3:signal(d5) wait(c4);wait(d5);S4,利用信号量实现前驱关系,64,Scheduling,高级调度,低级调度,65,Process Scheduling,记录系统中所有进程的有关情况。(通过PCB来掌握进程情况)确定分配处
23、理机原则。分配处理机给进程。从进程收回处理机。,66,Process Scheduling,调度问题,确定分配处理机原则。,67,When to make decision?,5.Switch from ready state to running is also,68,Process Scheduling,指把处理机分配给一个进程使用时,让该进程如何占用处理机,它能占用多长时间等。,一个进程占有处理机,这时有更紧迫的进程需要执行,则立即停止正在执行的进程,而执行更紧迫的进程 当前进程时间片用完,系统终止该进程执行,执行其他进程。,指一旦某个进程占用处理机后,则一直占用处理机运行下去。不管有没
24、有更紧迫的进程,直到它完成或者遇到某种外部事件不能执行下去。,进程调度方式,剥夺调度( 抢占式调度),非剥夺调度( 非抢占式调度),69,Scheduling Algorithm,先来先服务(FCFS),既可用于作业调度也可用于进程调度,时间片轮转调度,短作业优先,既可用于作业调度也可用于进程调度,优先级法,既可用于作业调度也可用于进程调度,高响应比优先调度算法,70,Criterion,一般用周转时间和响应时间来衡量算法的优劣。 周转时间=完成时间-提交时间。平均周转时间=周转时间/进程数。 响应时间=请求传送到处理机时间+处理机处理时间+响应信息回传到终端的时间 截至时间。必须开始执行的最
25、迟时间必须完成的最迟时间 CPU利用率,71,FCFS,按照进入就绪队列的先后顺序调度并分配处理机执行。,FCFS算法利于长作业, 不利于短作业, 而大多数的作业是I/O繁忙的短作业。 以FCFS作为主调度算法是不常用的。,先来先服务(FCFS)算法,72,Example,Do Better ?,73,Timeslice,时间片轮转调度关键要设置合适的时间片,太小则频繁调度,影响系统效率;太大则影响响应时间,时间片轮转调度,74,Shortest Job first,选择的进程为处理时间最小的:,75,Example,76,Priority,按照某种原则对就绪队列中的进程赋予优先级,根据优先级
26、确定选择哪个进程运行。,优先数法,非抢占式优先级,抢占式优先级,77,Priority,静态优先级,动态优先级,优先级类型,随等待时间增加优先级动态提高,优先等级不变,78,Highest Response Ratio First,优先权=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间,高响应比优先调度,既照顾了短作业,又考虑了作业到达的先后顺序,79,Real Time Scheduling,80,Dead Lock,是指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都无法向前推进,死锁是计算机系统和进程所处的一种状态。,81,Dead Lock,Any Que
27、stions in running?,82,Dead Lock,Same Problems,83,DeadLock Conditions,互斥条件:资源在使用上具有独占性、互斥性 不可剥夺条件:一个资源仅能被占有它的进程所释放,而不能被其他进程剥夺 部分分配条件(请求和保持条件):一个进程在请求新的资源的同时,保持对某些资源的占有 环路等待条件:存在一个进程的环路链,链中每一个进程占用有着某个或某些资源,又在等待链中的另一个进程占有的资源。,84,Dealing DeadLock,死锁的预防 死锁的避免 死锁的检测 死锁的恢复,85,Prevent,86,Prevent,87,Prevent,
28、1 为系统中各种类型的资源所分配的序号必须相对稳定,这就限制了新设备类型的增加2 作业实际使用资源的顺序与系统规定的顺序不同而造成资源的浪费;,缺点:,88,Prevent,89,Avoid DeadLock,90,Example,例:假定系统有三个进程P1、P2、P3,共有12台磁带机。进程P1总共要求10台磁带机,P2和P3分别要求4台和9台。设在T0时刻,进程P1、P2和P3已经获得5台、2台和2台,还有3台空闲没有分配。,进程,最大需求,已分配,可用,P1,10,5,3,P2,P3,4,2,2,9,T0时刻系统时安全的。这时存在一个安全序列,91,Bankers Algorithm,数
29、据结构,算法,92,Structure,一、银行家算法中的数据结构 1 可利用资源向量Available是一个含有m个元素,其中的每一个元素代表一类可利用的资源数目,其初值是系统中所配置的该类全部可用资源数目。如果Availablej=k, 表示系统中现有Rj类资源k个。 2 最大需求矩阵Max是一个含有nm的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max(i,j)=k, 表示进程i需要Rj类资源的最大数目为k。,93,Structure,3 分配矩阵Allocation是一个含有nm的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocati
30、on(i,j)=k, 表示进程i当前已分得Rj类资源k个。 4 需求矩阵Need是一个含有nm的矩阵,用以表示每一个进程尚需的各类资源数。如果Need(i,j)=k, 表示进程i还需要Rj类资源k个,方能完成其任务。Need(i,j)= Max(i,j)-Allocation(i,j),94,Algorithm,二、银行家算法设Requesti是进程Pi的请求向量,如果进程Pi需要K个Rj类资源,当Pi发出资源请求后,系统按下述步骤进行检查: 1 如果RequestiNeedi,则转向步骤2;否则认为出错。(因为它所需要的资源数已超过它所宣布的最大值。 2如果RequestiAvailable
31、,则转向步骤3;否则,表示系统中尚无足够的资源,Pi必须等待 3 系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值: Available:=Available-Requesti; Allocation:=Allocation+Requesti; Needi:= Needi- Requesti;4 系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,正式将资源分配给进程Pi,以完成本次分配;否则,将试探分配作废,恢复原来的资源分配状态,让进程Pi等待。,95,三、安全性算法 系统所执行的安全性算法可描述如下: 1 设置两个向量 工作向量Work.它表示系统可提供给
32、进程继续运行所需要的各类资源的数目,它含有m个元素,执行安全算法开始时,Work:=Available。 Finish.它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finishi:=false;当有足够的资源分配给进程时,令Finishi:=true. 2 从进程集合中找到一个能满足下述条件的进程:Finishi=false; NeediWork. 如找到,执行步骤3;否则执行步骤4。 3 当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故执行: Work:=Work+Allocation; Finishi:=true; Goto step2; 4 如果所
33、有进程的Finishi=true,则表示系统处于安全状态;否则,系统处于不安全状态。,Algorithm,96,银行家算法之例,假定系统中有五个进程P0、P1、P2、P3、P4和三种类型的资源A,B,C,每一种资源的数量分别为10、5、7,在T0时刻的资源分配情况如图,问T0时刻的安全性。,资源情况,进程,Allocation A B C,Max A B C,Need A B C,Available A B C,P0P1P2 P3 P4,0 1 0,3 2 2,9 0 2,2 2 2,4 3 3,2 0 0,3 0 2,2 1 1,0 0 2,7 4 3,1 2 2,0 0,0 1 1,4 3
34、 1,3 3 2,7 5 3,97,最大值,已分配,还需要,可用,工作向量Work.它表示系统可提供给进程继续运行所需要的各类资源的数目,10,5 7,Reactive DeadLock,资源分配图: G=(N,E)N=PR, P=P1,P2,.Pn代表进程;RR1,R2,.Rm代表资源P-R代表进程申请资源 R-P代表资源分配给进程,99,Example,100,Method,假设某个资源分配图中存在一个进程Pi,此刻Pi是既非阻塞又非独立,对进程Pi的化简即删除资源分配图中与Pi连结的所有有向边,使Pi变成孤立结点,重复上述过程直到不能化简为止。,化简资源分配图,101,Example,1
35、02,Example,103,Theory,当某资源分配图是非完全可化简的时候,说明该资源分配图不能被系统中的一些进程所化简。这些资源分配图中不能化简的进程即为死锁进程。,系统中某个时刻S为死锁状态的充分必要条件是,S时刻 系统的资源分配图是非完全可化简的。,104,Resume,1撤消进程;最简单撤消进程的方法是使全部死锁的进程夭折掉;另一方法是按照某种顺序逐个地撤消进程,直至有足够的资源可用,死锁状态消除为止2挂起进程(剥夺资源)。使用挂起/激活机构挂起一些进程,剥夺它们的资源以解除死锁,待条件满足时,再激活进程。目前挂起法比较受到重视。,105,Starvation,饥饿是指系统不能保证
36、某个进程的等待时间上界,从而使该进程长时间等待,当等待时间给进程推进和响应带来明显影响时,称发生了进程饥饿。当饥饿到一定程度的进程所赋予的任务即使完成也不再具有实际意义时称该进程被饿死。当有多个进程需要打印文件时,如果系统分配打印机的策略是最短文件优先,那么长文件的打印任务将由于短文件的源源不断到来而被无限期推迟,导致最终的饥饿甚至饿死。解决饥饿与饿死问题可从资源分配策略的公平性考虑,确保所有进程不被忽视。如时间片轮转算法(RR),106,Thread,Why thread?,107,108,Thread,线程是CPU调度的基本单位,线程基本不拥有资源,共享进程资源,进程可产生多个线程,线程并发执行,109,THE END,110,