《操作系统原理》算法-m.ppt
《《操作系统原理》算法-m.ppt》由会员分享,可在线阅读,更多相关《《操作系统原理》算法-m.ppt(129页珍藏版)》请在三一办公上搜索。
1、2023/9/1,进程同步互斥,1,信号量机制(semaphore),1965年,由荷兰学者Dijkstra提出(P、V分别是荷兰语的test(proberen)和increment(verhogen))一种卓有成效的进程同步机制最初提出的是二元信号量(互斥)推广到一般信号量(多值)(同步)P、V操作是原语,2023/9/1,进程同步互斥,2,整型信号量,定义一个整数S,仅能通过两个原子操作来访问:wait(S):while S=0 then do no-op S:=S 1;Signal(S):S:=S+1;很明显,不满足让权等待。,2023/9/1,进程同步互斥,3,记录型信号量,是一个数据
2、结构定义如下:struct semaphore int value;pointer_PCB queue;信号量说明:semaphore s;,2023/9/1,进程同步互斥,4,Wait(P操作),wait(s)s.value=s.value-1;if(s.value 0)block(S.L);/该进程状态置为等待状态/将PCB插入相应的等待队列s.queue;,2023/9/1,进程同步互斥,5,Signal(V操作),signal(s)s.value=s.value+1;if(s.value=0)wakeup(S.L);/唤醒相应等待队列s.queue中等待的一个进程/改变其状态为就绪态并
3、将其插入就绪队列,2023/9/1,进程同步互斥,6,必须置一次且只能置一次初值初值不能为负数只能执行P、V操作,信号量的使用,2023/9/1,进程同步互斥,7,用P、V操作解决进程间互斥问题,2023/9/1,进程同步互斥,8,信号量及P、V操作讨论,对于两个并发进程,互斥信号量的值仅取1、0和1三个值 若MUTEX1表示没有进程进入临界区若MUTEX0表示有一个进程进入临界区若MUTEX1表示一个进程进入临界区,另一个进程等待进入。,2023/9/1,进程同步互斥,9,1)信号量的物理含义:S0表示有S个资源可用S=0表示无资源可用S0则|S|表示S等待队列中的进程个数P(S):表示申请
4、一个资源 V(S):表示释放一个资源。信号量的初值应该大于等于0,2023/9/1,进程同步互斥,10,2)P.V操作必须成对出现,有一个P操作就一定有一个V操作当为互斥操作时,它们同处于同一进程当为同步操作时,则不在同一进程中出现如果P(S1)和P(S2)两个操作在一起,那么P操作的顺序至关重要。一个同步P操作与一个互斥P操作在一起时同步P操作在互斥P操作前而两个V操作无关紧要,2023/9/1,进程同步互斥,11,进程互斥,用信号量实现临界区互斥:设置一信号量,信号量初值唯一,进入临界区以前对信号量执行P操作,退出临界区后对信号量执行V操作.,2023/9/1,进程同步互斥,12,进程同步
5、,同步问题可分为两类:保证一组合作进程按确定的次序执行保证共享缓冲区的合作进程的同步。,2023/9/1,进程同步互斥,13,合作进程的执行次序,若干个进程为了完成一个共同任务而并发执行,在这些进程中,有些进程之间有次序的要求,有些进程之间没有次序的要求,为了描述方便,可以用一个图来表示进程集合的执行次序。如图,2023/9/1,进程同步互斥,14,例,如图,试用信号量实现这三个进程的同步。设有两个信号量SB、SC,初值均为Pa:Pb:Pc:P(SB);P(SC)V(SB);V(SC);,2023/9/1,进程同步互斥,15,【思考题1】,如图,试用信号量实现这三个进程的同步。,2023/9/
6、1,进程同步互斥,16,解,设有两个信号量S1、S2,初值均为P1:P2:P3:P(S1)V(S1);V(S2);P(S2),2023/9/1,进程同步互斥,17,【思考题2】,如图,试用信号量实现这6个进程的同步,2023/9/1,进程同步互斥,18,解,设有5个信号量S2、S3、S4、S5、S6,初值均为P1:P2:P3:P(S2);P(S3)V(S2);V(S3);V(S4);V(S6);V(S5),P4:P5:P6:P(S4);P(S5);P(S6);P(S5);P(S6);V(S5);V(S6);,2023/9/1,进程同步互斥,19,共享缓冲区的进程的同步,设某计算进程CP和打印进
7、程IOP共用一个单缓冲区,CP进程负责不断地计算数据并送入缓冲区T中,IOP进程负责不断地从缓冲区T中取出数据去打印。,2023/9/1,进程同步互斥,20,分析,通过分析可知,CP、IOP必须遵守以下同步规则:当CP进程把计算结果送入缓冲区时,IOP进程才 能从缓冲区中取出结果去打印;当IOP进程把缓冲区中的数据取出打印后,CP进程才能把下一个计算结果送入缓冲区,2023/9/1,进程同步互斥,21,解,为此设有两个信号量Sa=0,Sb=1,Sa表示缓冲区中有无数据,Sb表示缓冲区中有无空位置。两个进程的同步可以描述如下:,2023/9/1,进程同步互斥,22,【思考题】,1.用P.V操作解
8、决下图之同步问题提示:分别考虑对缓冲区S和T的同步,再合并考虑,2023/9/1,进程同步互斥,23,解,设置四个信号量Sin=1,Sout=0,Tin=1,Tout=0;,get:while(1)P(Sin);将数放入S;V(Sout);,copy:while(1)P(Sout);P(Tin);将数从S放入T;V(Tout);V(Sin);,put:while(1)P(Tout);将数从T取走;V(Tin);,2023/9/1,进程同步互斥,24,【思考题】,桌上有一空盘,最多允许存放一只水果。爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果。试用P、V操作实现爸爸、
9、儿子、女儿三个并发进程的同步。提示:设置一个信号量表示可否向盘中放水果,一个信号量表示可否取桔子,一个信号量表示可否取苹果。,2023/9/1,进程同步互斥,25,解,设置三个信号量S,So,Sa,初值分别为1,0,0。分别表示可否向盘中放水果,可否取桔子,可否取苹果。,2023/9/1,进程同步互斥,26,2023/9/1,进程同步互斥,27,4 经典的进程同步问题,4.1 生产者/消费者问题 4.2 读者/写者问题 4.3 哲学家进餐问题,2023/9/1,进程同步互斥,28,4.1 生产者/消费者问题,生产者消费者问题是一种同步问题的抽象描述。计算机系统中的每个进程都可以消费(使用)或生
10、产(释放)某类资源。这些资源可以是硬件资源,也可以是软件资源。当某一进程使用某一资源时,可以看作是消费,称该进程为消费者。而当某一进程释放某一资源时,它就相当于生产者。,2023/9/1,进程同步互斥,29,问题描述,通过一个有界缓冲区可以把一群生产者P1,P2,Pm,和一群消费者Q1,Q2,Qn联系起来。如图只要缓冲区未满,生产者就可以把产品送入缓冲区;只要缓冲区未空,消费者就可以从缓冲区中取走物品。,2023/9/1,进程同步互斥,30,图,2023/9/1,进程同步互斥,31,问题分析,为解决生产者消费者问题,应该设两个同步信号量,一个说明空缓冲区的数目,用S1表示,初值为有界缓冲区的大
11、小N,另一个说明已用缓冲区的数目,用S2表示,初值为。由于在此问题中有M个生产者和N个消费者,它们在执行生产活动和消费活动中要对有界缓冲区进行操作。由于有界缓冲区是一个临界资源,必须互斥使用,所以,另外还需要设置一个互斥信号量mutex,其初值为。,2023/9/1,进程同步互斥,32,问题的解,Q:j=0;while(1)P(S2);P(mutex);从Bufferj取产品;j=(j+1)%n;V(mutex);V(S1);消费产品;,P:i=0;while(1)生产产品;P(S1);P(mutex);往Buffer i放产品;i=(i+1)%n;V(mutex);V(S2);,2023/9
12、/1,进程同步互斥,33,采用AND信号量集解决生产者-消费者问题,Q:j=0;while(1)Swait(s2,mutex);从Bufferj取产品;j=(j+1)%n;Ssignal(s1,mutex);消费产品;,P:i=0;while(1)生产产品;Swait(s1,mutex);往Buffer i放产品;i=(i+1)%n;Ssignal(s2,mutex);,2023/9/1,进程同步互斥,34,【思考题】,有一个仓库,可以存放A和B两种产品,但要求:(1)每次只能存入一种产品(A或B)(2)NA产品数量B产品数量M。其中,N和M是正整数。试用P、V操作描述产品A与B的入库过程。提
13、示:设两个信号量Sa、SbSa表示允许A产品比B产品多入库的数量Sb表示允许B产品比A产品多入库的数量,2023/9/1,进程同步互斥,35,解,设两个信号量Sa、Sb,初值分别为M-1,N-1Sa表示允许A产品比B产品多入库的数量Sb表示允许B产品比A产品多入库的数量设互斥信号量mutex,初值为1。,2023/9/1,进程同步互斥,36,B产品入库进程:j=0;while(1)P(Sb);P(mutex);B产品入库 V(mutex);V(Sa);消费产品;,A产品入库进程:i=0;while(1)生产产品;P(Sa);P(mutex);A产品入库 V(mutex);V(Sb);,2023
14、/9/1,进程同步互斥,37,4.2 读者/写者问题,有两组并发进程:读者和写者,共享一组数据区 要求:允许多个读者同时执行读操作 不允许读者、写者同时操作 不允许多个写者同时操作,2023/9/1,进程同步互斥,38,第一类:读者优先,如果读者来:1)无读者、写者,新读者可以读2)有写者等,但有其它读者正在读,则新读者也可以读3)有写者写,新读者等如果写者来:1)无读者,新写者可以写2)有读者,新写者等待3)有其它写者,新写者等待,2023/9/1,进程同步互斥,39,第一类读者写者问题的解法,设有两个信号量w=1,mutex=1另设一个全局变量readcount=0w用于读者和写者、写者和
15、写者之间的互斥readcount表示正在读的读者数目mutex用于对readcount 这个临界资源的互斥访问,2023/9/1,进程同步互斥,40,读者:while(1)P(mutex);readcount+;if(readcount=1)P(w);V(mutex);读 P(mutex);readcount-;if(readcount=0)V(w);V(mutex);,写者:while(1)P(w);写 V(w);,2023/9/1,进程同步互斥,41,第一类读者写者问题的解法(一般信号量集),写者:while(1)Swait(wmutex,1,1;rcount,R,0);写;Ssignal
16、(wmutex,1);,读者:while(1)Swait(rcount,1,1;wmutex,1,0);读;Ssignal(rcount,1);,增加一个限制条件:同时读的“读者”最多R个wmutex表示“允许写”,初值是1rcount表示“允许读者数目”,初值为R,2023/9/1,进程同步互斥,42,【思考题】写优先,修改以上读者写者问题的算法,使之对写者优先,即一旦有写者到达,后续的读者必须必须等待,无论是否有读者在读。提示,增加一个信号量,用于在写者到达后封锁后续的读者,2023/9/1,进程同步互斥,43,解 增加一个信号量s,初值为1,读者:while(1)P(s);P(mutex
17、);readcount+;if(readcount=1)P(w);V(mutex);V(s);读 P(mutex);readcount-;if(readcount=0)V(w);V(mutex);,写者:while(1)P(s);P(w);写 V(w);V(s);,2023/9/1,进程同步互斥,44,4.3 哲学家就餐问题,有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子每个哲学家的行为是思考,感到饥饿,然后吃通心粉为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子,2023/9/1,进程同步互斥,45,设fork
18、5为5 个信号量,初值为均1Philosopheri:while(1)思考;P(forki);P(fork(i+1)%5);进食;V(forki);V(fork(i+1)%5);,解,2023/9/1,进程同步互斥,46,以上解法会出现死锁为防止死锁发生可采取的措施:最多允许4个哲学家同时坐在桌子周围仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子()给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反之,分析,2023/9/1,进程同步互斥,47,采用AND信号量集解决哲学家就餐问题,设fork5为5 个信号量,初值为均1Philosopheri:while(1)思考
19、;Swait(forki,fork(i+1)%5);进食;Ssignal(forki,fork(i+1)%5);,2023/9/1,进程调度,48,3.2调度算法,先来先服务算法(FCFS:First Come First Serve)有利于长作业,不利于短作业最短作业优先算法(SJF:Shortest Job First)-提高了系统吞吐量对长作业不利未考虑作业的紧迫程度作业时间的估计时间不准,2023/9/1,进程调度,49,高优先权调度算法,照顾紧迫作业,常用于批处理静态优先权依据进程类型:系统进程高于一般用户进程依据对资源的要求:要求少的高于多的依据用户要求:紧迫程度和付费情况动态优先
20、权创建进程时赋予的优先权,遂进程的推进或随其等待时间的增加而改变,可防止某些进程无限期的等待,2023/9/1,进程调度,50,最高响应比优先算法(HRN:Highest Response Ratio Next)响应比R=作业周转时间/作业处理时间=(作业处理时间+作业等待时间)/作业处理时间=1+(作业等待时间/作业处理时间),2023/9/1,进程调度,51,调度算法应用例子1,假设在单道批处理环境下有四个作业,已知它们进入系统的时间、估计运行时间 应用先来先服务、最短作业优先和最高响应比优先作业调度算法,分别计算出作业的平均周转时间和带权的平均周转时间,2023/9/1,进程调度,52,
21、2023/9/1,进程调度,53,先来先服务调度算法计算结果,2023/9/1,进程调度,54,最短作业优先作业算法计算结果,2023/9/1,进程调度,55,最高响应比优先作业算法计算结果,2023/9/1,进程调度,56,多队列反馈调度算法 将就绪队列分为N级,每个就绪队列分配给不同的时间片,队列级别越高,时间片越长,级别越小,时间片越短;当进程第一次就绪时,进入第一级队列系统从第一级调度,当第一级为空时,系统转向第二个队列,.当运行进程用完一个时间片,放弃CPU时,进入下一级队列;等待进程被唤醒时,进入原来的就绪队列;,2023/9/1,进程调度,57,就绪队列1,就绪队列2,就绪队列3
22、,就绪队列4,至CPU,至CPU,至CPU,至CPU,2023/9/1,进程调度,58,利用银行家算法避免死锁,最有代表性的避免死锁算法,由Dijkstra提出。1、银行家算法中的数据结构可利用资源向量Available。它是一个含有m个元素的数组,其中每个元素代表一类可利用资源的数目。如:,2023/9/1,进程调度,59,最大需求矩阵Max。n*m矩阵,表示n个进程的每一个对m类资源的最大需求。,2023/9/1,进程调度,60,分配矩阵Allocation。n*m矩阵,表示每个进程分配的资源数。,2023/9/1,进程调度,61,需求矩阵Need。n*m矩阵,表示每个进程还需要各类资源数
23、。,2023/9/1,进程调度,62,例,设系统有五个进程和三类资源,每类资源分别有10、5、7。在T0时刻资源分配情况如图,2023/9/1,进程调度,63,银行家算法描述,当进程Pi提出资源申请时,系统执行下列步骤:(1)若RequestiNeedi,转(2);否则错误返回(2)若RequestiAvailable,转(3);否则进程等待,2023/9/1,进程调度,64,(3)假设系统分配了资源,则有:Available:=Available-Requesti;Allocationi:=Allocationi+Requesti;Needi:=Needi-Requesti(4)执行安全性算
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统原理 操作系统 原理 算法
链接地址:https://www.31ppt.com/p-5898542.html