首页 操作系统-进程管理

操作系统-进程管理

举报
开通vip

操作系统-进程管理4.4进程的相互制约关系在多道程序的环境中,系统中的多个进程可以并发执行,同时它们又要共享系统中的资源,这些资源有些是可共享使用的,如磁盘,有些是以独占方式使用的,如打印机。由此将会引起一系列的矛盾,产生错综复杂的相互制约的关系。产生这种错综复杂的相互制约关系的原因有二:资源共享进程合作进程间的关系进程之间有两种关系:第一种是竞争关系,从而有进程的互斥(MutualExclusion)是解决进程间竞争关系的手段。第二种是协作关系,某些进程为完成同一任务需要分工协作。进程的同步(Synchronization)是解决...

操作系统-进程管理
4.4进程的相互制约关系在多道程序的环境中,系统中的多个进程可以并发执行,同时它们又要共享系统中的资源,这些资源有些是可共享使用的,如磁盘,有些是以独占方式使用的,如打印机。由此将会引起一系列的矛盾,产生错综复杂的相互制约的关系。产生这种错综复杂的相互制约关系的原因有二:资源共享进程合作进程间的关系进程之间有两种关系:第一种是竞争关系,从而有进程的互斥(MutualExclusion)是解决进程间竞争关系的手段。第二种是协作关系,某些进程为完成同一任务需要分工协作。进程的同步(Synchronization)是解决进程间协作关系的手段。进程间的关系进程的互斥(MutualExclusion)是指若干个进程要使用同一共享资源时,任何时刻最多允许一个进程去使用,其它要使用该资源的进程必须等待,直到占有资源的进程释放该资源。临界区管理可以解决进程互斥问题,后续课程将详细介绍临界区的解决方案。进程间的关系进程的同步(Synchronization)是解决进程间协作关系的手段。指一个进程的执行依赖于另一个进程的消息,当一个进程没有得到来自于另一个进程的消息时则等待,直到消息到达才被唤醒。不难看出,进程互斥关系是一种特殊的进程同步关系,即逐次使用互斥共享资源。进程间的关系对于协作关系有如下例子:设input、process、和output三个进程分工协作完成读入数据、加工处理和打印输出任务,这是一种典型的协作关系。操作系统要确保诸进程在执行次序上协调一致:没有输入完一块数据之前不能加工处理没有加工处理完一块数据之前不能打印输出等等每个进程都要接收到它进程完成一次处理的消息后,才能进行下一步工作。4.5.1互斥的概念引例:宿舍固定电话的使用打印机的使用还有内存变量、指针、数组等等也是临界资源。临界资源 说明 关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书 例1:两个进程A、B共享一台打印机  若不加以控制,两个进程的输出结果可能交织在一起,很难区分。临界资源说明例2:两个进程共享一个变量x  设:x代 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 某航班机座号,p1和p2两个售票进程,售票工作是对变量x加1。这两个进程在一个处理机C上并发执行,分别具有内部寄存器r1和r2,两个进程共享一个变量x时,两种可能的执行次序:说明以前的课程也讲到了与时间有关的错误,其实就是因为共享变量,这个共享的变量就是临界资源。如果不对临界资源加以控制,那么就可能出现错误,这就是本节要解决的问题。什么是临界资源特点:当两个进程公用一个变量时,它们必须顺序地使用,一个进程对公用变量操作完毕后,另一个进程才能去访问和修改这一变量。一次仅允许一个进程使用的资源称为临界资源。    哪些临界资源?临界资源:物理设备,如输入机、打印机、磁带机等都具有这种性质。软件资源,如公用变量、数据、表格、队列等也都具有这一特点。什么是临界区临界区:在每个进程中,访问临界资源的那段程序能够从概念上分离出来,称为临界区或临界段。它就是进程中对公共变量(或存储区)进行审查与修改的程序段,称为相对于该公共变量的临界区。什么是临界区什么是临界区什么是互斥?互斥:在操作系统中,当某一进程正在访问某一存储区域时,就不允许其他进程来读出或者修改存储区的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 ,否则,就会发生后果无法估计的错误。进程间的这种相互制约关系称为互斥。进入临界区的准则:进入临界区的准则:(1)每次至多有一个进程处于临界区;(2)当有若干个进程欲进入临界区时,应在有限的时间内使其进入;(3)进程在临界区内仅逗留有限的时间。4.5.2锁和上锁、开锁操作解决进程互斥的最简单的办法是加锁。什么是锁——用某假设变量w代表某种资源的状态,w称为“锁”。锁位值:为“0”表示资源可用为"1"表示资源已被占用(不可用)。在系统中为每个临界资源设置一个锁位。4.5.2锁和上锁、开锁操作当一个进程使用某个临界资源之前必须完成下列操作:1、考察锁位的值(是0还是1);;2、若原来的值是为“0”,将锁位置为“1”,此为上锁操作(表示占用该资源);3、若原来值是为“1”,(该资源已被别人占用),则不改变原来的值,循环检测等待。4、当某进程使用完资源后,将锁位置为“0”,称为开锁操作,此时别的等待进程一旦检测到w的不为1了,则表示可以使用临界资源了。4.5.2锁和上锁、开锁操作说明在上述简单的关锁原语中,goto语句使得lock(w)原语的进程占用处理机而等待进入互斥段(称为忙等待busywaiting)测试法,浪费CPU时间。。为此,可将上述上锁原语和开锁原语做进一步修改。修改后的原语如下所示:改进的lock和unlock算法锁和上锁、开锁操作设临界区的类名为w。为了保证每一次临界区中只能有一个程序段被执行,又设锁定位key[w]。key[w]表示该锁定位属于类名为w的临界区。加锁后的临界区程序描述如下:lock(key[w])//上锁<临界区>unlock(key[w])//开锁经过锁处理,任何时候都不可能有两个及以上的进程进入临界去。4.5.3用上锁原语和开锁原语实现互假设有两个进程共享打印机,两个进程中使用打印机的程序段为临界区。为保证打印的正确,设置打印机的锁print,其初值为“0”,表示打印机可用。4.5.3用上锁原语和开锁原语实现互斥4.6.1信号灯的概念前面介绍的方法虽能保证互斥,可正确解决临界区调度问题,但有明显缺点:对不能进入临界区的进程,采用忙式等待(busywaiting)测试法,浪费CPU时间。将测试能否进入临界区的责任推给各个竞争的进程会削弱系统的可靠性,加重了用户编程负担。4.6.1信号灯的概念1965年荷兰的计算机科学家Dijkstra提出了新的同步工具——信号量和P、V操作。他将交通管制中多种颜色的信号灯管理交通的方法引入操作系统,让两个或多个进程通过信号量(Semaphore)展开交互。进程在某一特殊点上停止执行直到得到一个对应的信号量,通过信号量这一设施,任何复杂的进程交互要求可得到满足,这种特殊的变量就是信号量。4.6.1信号灯的概念信号量仅能由同步原语对其进行操作,原语是操作系统中执行时不可中断的过程、即原子操作(AtomicAction)。Dijkstra发明了两个同步原语:P操作和V操作(荷兰语中“测试(Proberen)”和“增量(Verhogen)”的头字母,此外还用的符号有:wait和signal;up和down;sleep和wakeup等。本书中采用Dijkstra最早论文中使用的符号P和V。利用信号量和P、V操作既可以解决并发进程的竞争问题,又可以解决并发进程的协作问题。信号灯的分类信号量按其用途可分为两种:公用信号量:联系一组并发进程,相关的进程均可在此信号量上执行P和V操作。初值常常为1,用于实现进程互斥。私有信号量:联系一组并发进程,仅允许此信号量拥有的进程执行P操作,而其他相关进程可在其上施行V操作。初值常常为0或正整数,多用于并发进程同步。信号灯的分类信号量按其取值可分为两种:二元信号量:仅允许取值为0和1,主要用于解决进程互斥问题(非我即你,通常用一个布尔量来表示)。一般信号量:允许取值为非负整数,主要用于解决进程间的同步问题。4.6.1信号灯的概念信号灯的定义:信号灯是一个确定的二元组(s,q),s是一个具有非负初值的整型变量,q是一个初始状态为空的排队站。S代表资源的实体。在实际应用中应准确地说明s的意义和初值,每个信号灯都有一个队列,其初始状态为空。4.6.2P、V操作信号灯的值仅能由P、V操作来改变,对信号灯的P操作记为:P(S),P操作是一个原子操作。对信号灯的V操作记为:V(S),V操作是一个原子操作。在实际操作系统中,一般情况下是由机器硬件提供P、V操作的指令,当然是原子操作,若机器不提供P、V操作的指令,则操作系统提供P、V操作原语。信号量值的物理意义 信号灯是整型变量。 变量值≥0时,表示绿灯,进程执行。   变量值<0时,表示红灯,进程停止执行。4.6.2P、V操作P操作:(1)s值减1;(2)若相减结果大于等于0,则进程继续执行;(3)若结果小于0,则该进程挂起。注:推起该进程包括:保留调用进程CPU现场;置“等待”状态;入等待队列;转进程调度;4.6信号灯和P、V操作4.6.2P、V操作V操作:(1)s值加1;(2)若相加结果大于0,进程继续执行;(3)否则,唤醒一个(或多个)等待该信号灯的进程,然后本进程继续执行。用P、V操作解决进程间互斥问题4.6.3用信号灯实现进程互斥用两个进程共享打印机的例子设信号灯print表示打印机,初值为1,表示打印机可用(也可理解为有一台打印机)。(print是用于互斥的信号灯,教材上设置为mutex,设施成何种符号无所谓,只要可读性好即可。)4.6.3用信号灯实现进程互斥信号量的物理意义S>0:其数值代表可用的资源数量S=0:代表无资源可用,但也没有等待的进程,即也没有申请资源的进程S<0:其|S|表示等待队列中想申请资源而还没有成功的进程数量用信号灯实现进程互斥的例子设:x代表某航班机座号,p1和p2两个售票进程,售票工作是对变量x加1。试用信号灯的P、V操作实现这两个进程的互斥。设:mutex为互斥信号灯,初值为1(通过pv操作,可以解决与时间有关的错误)   五个哲学家就餐问题下面再来看一下使用互斥信号量和PV操作解决操作系统经典的五个哲学家就餐问题。有五个哲学家围坐在一圆桌旁,桌中央有一盘通心面,每人面前有一只空盘于,每两人之间放一把叉子。每个哲学家思考、饥饿、然后吃通心面。为了吃面,每个哲学家必须获得两把叉子,且每人只能直接从自己左边或右边去取叉子。五个哲学家就餐五个哲学家就餐问题在这道题目中,每一把叉子都是必须互斥使用的,因此应为每把叉子设置一个互斥信号量Si,初值均为1。当一个哲学家吃通心面前必须获得自己左边和右边的两把叉子,即执行两个P操作,吃完通心面后必须放下叉子,即执行两个V操作。程序如下:五个哲学家就餐问题 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 请大家注意,如果五个哲学家同时变得饥饿的话,且同时拿起他左边的叉子。这样所有的chopstick都变成0。就有可能出现每个哲学家举起左边的一把叉子,却又在永远等待相邻哲学家手中的叉子的情况——哲学家就会饿死。五个哲学家就餐问题分析思考:如果增加一条指令:吃不到就放下自己手中得叉子,这样哲学家就不会饿死吗?这样同样会导致哲学家会饿死,因为可能在上面的情况下,五个哲学家因为自己吃不到东西,同时放下叉子,因为大家还饿着呢,环顾一看左右都叉子,可能又同时拿起叉子,就这样,同时拿起,同时放下…循环往复。哲学家们不饿死,也得累死。这就是——死锁情况。并发进程临界区的管理原则计算机专家Dijkstra1965年提出临界区设计原则,即一组并发进程互斥执行时必须满足:空闲让进忙则等待有限等待让权等待4.7.1同步的例子引例1:两位同学约好星期天去东湖,早上8:00在校门口,不见不散。当一个同学先来到校门口,要等另一个同学,到齐后一道打的去东湖同步的例子——病员就诊4.7.2同步的概念互斥的概念来自于诸进程对独占使用资源(设备)的竞争,同步来源于多个进程的合作。在人类社会中竞争与合作是永恒的。同步的定义:所谓同步就是并发进程在一些关键点上可能需要相互等待与互通消息,这样的相互制约关系称为进程同步。4.7.3用信号灯实现进程的同步在操作系统中,同步有各种各样,但归纳起来有两类:诸进程合作完成某工作的逻辑顺序:如看病拿药问题;对系统资源的共享:如两个进程共享一个缓冲区完成誊抄问题4.7.3用信号灯实现进程的同步(一)合作进程的执行次序用进程流图来描述诸进程合作完成某一任务的次序,其规则如下4.7.3用信号灯实现进程的同步用信号灯及P、V操作来描述左图1、说明进程的同步关系进程P1、P2可并行执行,P3的执行必须等待P1、P2都完成后才能开始执行。2、设置信号灯,说明含义、初值。初值s13=0表示进程P1尚未执行完成;初值s23=0表示进程P2尚未执行完成;4.7.3用信号灯实现进程的同步P、V操作实现合作进程的同步 练习:设pa、pb、pc为一组合作进程,其进程流图如右图所示,试用信号灯的p、v操作实现这三个进程的同步。解答(1)三个进程的同步关系:  任务启动后pa先执行,当它结束后pb、pc可以开始执行,pb、pc执行完毕,任务终止。(2)信号灯设置:  设两个同步信号灯sb、sc分别表示进程pb和pc能否开始执行,其初值均为0。解答共享缓冲区的合作进程的同步 例:计算进程cp和打印进程iop公用一个单缓冲(buffer大小为1个字节),为了完成正确的计算与打印,试用信号灯的p、v操作实现这两个进程的同步。布置作业P1084-11,4-13,4-15下周交4.7.3用信号灯实现进程的同步分析:CP进程不断产生字符,送buffer,IOP进程从buffer中取出字符打印。如不加控制,会有多种打印结果,这取决于这两个进程运行的相对速度。在这众多的打印结果中,只有CP、IOP进程的运行刚好匹配的一种是对的,其它均为错误,并且不能重现。4.7.3用信号灯实现进程的同步要保证打印结果的正确,CP、IOP必须遵循以下同步规,则两个进程的同步关系如下:(1)当CP把结果送入buffer后,IOP才能从buffer中取,否则IOP必须等待;(2)当IOP从buffer中取走数据后,CP才能将新产生数据送buffer,否则也必须等待。4.7.3用信号灯实现进程的同步解决这个问题的步骤:(1)分析问题,弄清楚同步关系,如上分析;(2)设置信号灯,说明含义、初值;(3)写出程序描述。用信号灯实现进程的同步信号灯设置:设置两个信号灯sa和sb。信号灯sa--表示缓冲区中是否有可供打印的计算结果,其初值为0。信号灯sb--表示缓冲区有无空位置存放新的信息,其初值为1。用信号灯实现进程的同步信号量的小结信号量值的小结(回顾):S>0:其数值代表可用的资源数量S=0:代表无资源可用,但也没有等待的进程,即也没有申请资源的进程S<0:其|S|表示等待队列中想申请资源而还没有成功的进程数量信号量的小结P和V的位置放置的小结:对于互斥资源:P、V操作在同一个进程中(强调的是自私)对于共享资源的同步:P、V操作在不同进程中(强调的是你中有我,我中有你的协作关系)P和V信号量的初始化:必须置一次初值,且只能置一次初值初值必须>=0,不能为负值多缓冲的生产者-消费者问题问题描述:若干进程通过有限的共享缓冲区交换数据。其中,“生产者”进程不断写入,而“消费者”进程不断读出;共享缓冲区共有N个;任何时刻只能有一个进程可对共享缓冲区进行操作。即满足如下条件:(1)消费者想接收数据时,有界缓冲区中至少有一个单元是满的。(2)生产者想发送数据时,有界缓冲区中至少有一个单元是空的。 生产者-消费者的例子例1:计算进程和打印进程计算进程cp不断产生数据,是生产者; 打印进程iop不断打印数据,是消费者。例2:通信问题发消息进程send不断产生消息,是生产者; 收消息进程receive不断接收消息,是消费者 多生产者--消费者问题图示生产者与消费者生产者:当有界缓冲区中无空位置时,要等待;向有界缓冲区放入物品后,要发消息(V操作)。消费者:当有界缓冲区中无物品时,要等待;从有界缓冲区取出物品后,要发消息(P操作)。多缓冲区的P-C问题之间的关系一、同步关系:对于生产者进程:产生一个数据,当要送入缓冲区时,要检查缓冲区是否已满,若未满,则可将数据送入缓冲区,并通知消费者进程;否则,等待;对于消费者进程:当它去取数据时,要看缓冲区中是否有数据可取,若有则取走一个数据,并通知生产者进程,否则,等待。这种相互等待,并互通信息就是典型的进程同步。多缓冲区的P-C问题之间的关系二、互斥关系缓冲区又是个临界资源,在多个进程在生产产品时,它不允许在缓冲区的某一个单元同时存放产品也不允许多个进程同时消费缓冲区的某一个单元产品,因此,还有个互斥的问题。多生产者-消费者问题的一般解答信号灯设置——两个同步信号灯empty:表示空缓冲区的数目,初值为有界缓冲区的大小n;full:表示满缓冲区的数目,其初值为0; 一个互斥信号灯--  mutex:互斥信号灯,初值为1。同步描述程序描述程序描述多生产者-消费者问题的flash动画思考与说明如果我们把生产者进程中的两个P操作交换次序,即那么会有什么问题吗?参见下图的程序参考:主程序并行程序思考与说明在这个问题中P操作的次序是很重要的,如果我们把生产者进程中的两个P操作交换次序,即那么就会产生与时间有关的错误。分析如下:分析说明在某个时刻,消费者消费的比较快,把所有的产品消费完,有:empty=n,mutex=1,full=0接着消费者进程运行到1处,使得mutex=0,运行到2处full=-1<0,消费者进程等待在接着生产者进程运行到3处,由于生产了一个产品,故空位置-1,empty=n-1,运行到4初,由于p(mutex)操作,mutex=mutex-1=-1<0,生产者进程也等待。故而,这两个程序陷于相互等待的死锁状态。思考思考与延伸:交换生产者的两个p操作会不会带来与时间有关的错误呢?如果会,在什么情况下会?请分析之。程序见下图:思考与说明思考与结论所以在使用PV操作实现进程同步时,特别要当心P操作的次序,而V操作的次序倒是无关紧要的。一般来说,用于互斥的信号量上的P操作,总是在用于协作的P操作之后执行。例2一道考研题苹果桔子问题:桌上有一只盘子,最多可以容纳两个水果,每次只能放入/取出一只水果;爸爸专向盘子中放苹果(apple),妈妈专向盘子中放桔子(orange),两个儿子专等吃盘子中的桔子,两个女儿专等吃盘子里的苹果。请用P,V操作来实现爸爸、妈妈儿子、女儿之间的同步和互斥。(南京大学2000年)分析这个问题实际上是两个生产者和两个消费者被连结到仅能放两个产品的缓冲器上。生产者各自生产不同的产品,但就其本质而言,他们是同一类生产者。而消费者则各自取需要的产品消费,他们的消费方式不同。程序如下:信号量及P、V操作讨论1)信号量的物理含义:S>0表示有S个资源可用S=0表示无资源可用S<0则|S|表示S等待队列中的进程个数P(S):表示申请一个资源V(S):表示释放一个资源。信号量的初值应该大于等于0信号量及P、V操作讨论(续1)2)P.V操作必须成对出现,有一个P操作就一定有一个V操作当为互斥操作时,它们同处于同一进程当为同步操作时,则不在同一进程中出现如果P(S1)和P(S2)两个操作在一起,那么P操作的顺序至关重要,一个同步P操作与一个互斥P操作在一起时同步P操作在互斥P操作前而两个V操作无关紧要信号量及P、V操作讨论(续2)3)P.V操作的优缺点优点:简单,而且表达能力强(用P.V操作可解决任何同步互斥问题)缺点:不够安全;P.V操作使用不当会出现死锁;遇到复杂同步互斥问题时实现复杂回顾:哲学家就餐问题问题描述:有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子每个哲学家的行为是思考,感到饥饿,然后吃通心粉为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子哲学家就餐问题解法(1)#defineN5voidphilosopher(inti){while(true){思考;取fork[i];取fork[(i+1)%5];进食;放fork[i];放fork[(i+1)%5];}}回顾:哲学家就餐问题为防止死锁发生可采取的措施:最多允许4个哲学家同时坐在桌子周围仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子()给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反之为了避免死锁,把哲学家分为三种状态,思考,饥饿,进食,并且一次拿到两只筷子,否则不拿哲学家就餐问题解法(2)#defineN5#defineTHINKING0#defineHUNGRY1#defineEATING2#typedefintsemaphore;intstate[N];semaphoremutex=1;//叉子操作要互斥的信号量semaphores[N];//每一个哲学家是否能吃为一个信号量state[i]=THINKING;//初始化i=0-4s[i]=0;//初始化i=0-4voidtest(inti){if(state[i]==HUNGRY)&&(state[(i-1)%5]!=EATING)&&(state[(i+1)%5]!=EATING){state[i]=EATING;V(s[i]);}}voidphilosopher(inti){while(true){思考;P(mutex);state[i]=HUNGRY;test(i);V(mutex);P(s[i]);拿左筷子;拿右筷子;进食;放左筷子;放右筷子;P(mutex)state[i]=THINKING;test([i-1]%5);test([i+1]%5);V(mutex);}}state[i]=THINKINGs[i]=0经典问题(1)读者写者问题问题描述:有两组并发进程:读者和写者,共享一组数据区要求:允许多个读者同时执行读操作不允许读者、写者同时操作不允许多个写者同时操作第一类:读者优先如果读者到:1)无读者、写者,新读者可以读2)有写者等,但有其它读者正在读,则新读者也可以读3)有写者写,新读者等如果写者到:1)无读者,新写者可以写2)有读者,新写者等待3)有其它写者,新写者等待第一类读者写者问题的解法读者不固定情况:第一类读者写者问题的解法//初始化mutex1=1;W=1;count=0;读者:Readeri{while(true){P(mutex1);readcount++;if(readcount==1)P(w);//禁止写V(mutex1);读……P(mutex1);readcount--;if(readcount==0)V(w);//可以允许写V(mutex1);};}写者:Writej{while(true){P(w);写V(w);}}实例训练有N个读者和两个编辑同时处理一篇文章。 对于读操作是可以同时进行的,若有读者正在读这篇文章,编辑就不能工作;若编辑正在处理这篇文章,读者就不能作读操作。 编辑与编辑的工作也是互斥的,试用信号灯及P、V操作写出读者与编辑之间协同工作的程序描述。说明读者-写者问题,它为数据库访问建立了一个模型。例如,设想一个飞机定票系统,其中有许多竞争的进程试图读写其中的数据。说明在读者优先的进程中:现在假设一个写者到来,由于写操作是排他的,所以它不能访问数据库,而是被挂起。随后其他的读者到来,这样只要有一个读者活跃,随后而来的读者都被允许访问数据库。这样的结果是只要有读者陆续到来,它们一来就被允许进入,而写者将一直被挂起直到没有一个读者为止。假如每2秒钟来一个读者,而其操作时间为5秒钟,则写者将永远不能访问数据库,或者我们说写者发生了饥饿现象。思考思考题:请大家试着写出写者优先的解法,并且考虑一下,能不能设计出一种算法使得无论对读者还是写者都是公平的,不会存在任何一方可能的饥饿现象。写者优先(第二类读写/者问题)写者优先:条件:1)多个读者可以同时进行读2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行)3)写者优先于读者(一旦有写者,则后续读者必须等待[没有进入计数的进程],唤醒时优先考虑写者)解1读者数量固定如果读者数是固定的,我们可采用下面的算法:rwmutex:用于写者与其他读者/写者互斥的访问共享数据rmutex:设该信号量初始值设为10,表示最多允许10个读者进程同时进行读操作写者优先写者优先解2读者数不固定如果读者数不固定,采用下面的算法:设置三个互斥信号量:rwmutex用于写者与其他读者/写者互斥的访问共享数据rmutex 用于读者互斥的访问读者计数器readcountnrmutex用于写者等待已进入读者退出,所有读者退出前互斥写操作4.8进程通信并发进程之间的交往本质上是互相交换信息。有些情况下进程之间交换的信息量很少,例如仅仅交换某个状态信息。有些情况下进程之间交换大批数据,例如传送一批信息或整个文件。进程之间互相交换信息的工作称之为进程通信IPC(InterProcessCommunication)。4.8.1概述P.V操作实现的是进程之间的低级通讯,所以P.V为低级通讯原语。它只能传递简单的信号,不能传递交换大量信息如果要在进程间传递大量信息则要用Send/Receive原语(高级通讯原语)进程通信的方式1-共享内存共享内存:相互通信的进程间设有公共内存,一组进程向该公共内存中写,另一组进程从公共内存中读,通过这种方式实现两组进程间的信息交换。如图所示:共享内存内存中开辟一个共享存储区,诸进程通过该区实现通信,这是进程通信中最快的方法。进程通信的方式2-消息传递有时进程间可能需要交换更多的信息,例如,一个输入输出操作请求,要求把数据从一个进程传送给另一个进程,这种大量的信息传递可使用一种高级通信方式——消息传递(messagepassing)来实现。由于操作系统隐蔽了许多实现细节,通过消息传递机制通信,能简化程序编制的复杂性,方便易用,得到了广泛应用。进程通信的方式2-消息传递消息传递机制至少需要提供两条原语send和receive,前者向一个给定的目标发送一个消息,后者则从一个给定的源接受一条消息。如果没有消息可用,则接收者可能阻塞直到一条消息到达,或者也可以立即返回,并带回一个错误码。消息传递方式消息传递:系统为进程提供了两个高级通讯原语send和receivesend:当要进行消息传递时执行receive:当接收者要接收消息时执行消息传递的方式消息传递系统的变体很多,常用的有直接通信(消息缓冲区)方式和间接通信(信箱)方式Unix的pipeline和socket机制属于一种信箱方式的变体。下图是消息传递机制通信模型。消息传递模式:消息传递模式分两大类:(a)消息缓冲(直接通信)(b)信箱通信(间接通信)(a)消息缓冲(直接通信)在消息缓冲方式下,在内存中开设缓冲区,发送进程将消息送入缓冲区,接收进程接收传递来的缓冲区。企图发送或接收消息的每个进程必须指出信件发给谁或从谁那里接收消息,可用send原语和receive原语为实现进程之间的通信,这两个原语定义如下:send(P,消息):把一个消息发送给进程Preceive(Q,消息):从进程Q接收一个消息(a)消息缓冲(直接通信)这样,进程P和Q通过执行这两个操作而自动建立了一种联结,并且这一种联结仅仅发生在这一对进程之间。消息可以有固定长度或可变长度两种:固定长度便于物理实现,但使程序设计增加困难;而消息长度可变使程序设计变得简单,但使物理实现复杂化。(b)信箱通信(间接通信)采用信箱通信(间接通信)方式时,进程间发送或接收消息通过一个信箱来进行,消息可以被理解成信件,每个信箱有一个唯一的标识符。当两个以上的进程有一个共享的信箱时,它们就能进行通信。(b)信箱通信(间接通信)一个进程也可以分别与多个进程共享多个不同的信箱,这样,一个进程可以同时和多个进程进行通信。在间接通信方式“发送”和“接收”原语的形式如下:send(A,信件):把一封信件(消息)传送到信箱A。receive(A,信件):从信箱A接收一封信件(消息)。(b)信箱通信信箱是存放信件的存储区域,每个信箱可以分成信箱特征和信箱体两部分:信箱特征指出信箱容量、信件 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 、指针等;信箱体用来存放信件,信箱体分成若干个区,每个区可容纳一封信。信箱使用规则若发送信件时信箱已满,则发送进程被置为“等信箱”状态,直到信箱有空时才被释放若取信件时信箱中无信,则接收进程被置为“等信件”状态,直到有信件时才被释放4.9线程1.什么是线程(thread)--有时称轻量级进程(lightweightprocessLWP),是一个CPU调度单位,是进程中的一个执行路径。它由线程ID,程序计数器、寄存器集合和堆栈组成。它与同属于一个进程的其它线程共享其代码段、数据段和其它操作系统的资源(如打开文件和信号)SingleandMultithreadedProcessesSingleThreadedandMultithreadedModelsCombinationsofThreadsandProcesses4.9线程线程可以这样来描述:进程中的一条执行路径;它有自己私用的堆栈和处理机执行环境它与父进程共享分配给父进程的主存;它是单个进程所创建的许多个同时存在的线程中的一个。4.9线程2.线程的特点:创建一个线程比创建一个进程开销要小得多;实现线程间通信十分方便,因为一个进程创建的多个线程可以共享地址区域和数据;线程是一个动态的概念;在进程内创建多线程,可以提高系统的并行处理能力,加快进程的处理速度。线程的适用范围典型的应用1.服务器中的文件管理或通信控制2.前后台处理3.异步处理典型的应用Threadusageexample:WordProcessor一个多线程的字处理有一个线程用于显示图形文字,另一个线程用于读入用户的键盘输入,还有一个线程在后台把文档存入磁盘Threadusageexample:WebServer进程和线程的比较进程是资源分配的基本单位。而进程是抢占处理机的调度单位。与进程相对应,线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。进程和线程的比较线程只由相关堆栈(系统栈或用户栈)寄存器和线程控制表TCB组成。寄存器可被用来存储线程内的局部变量,但不能存储其他线程的相关变量。进程和线程的比较进程切换时涉及到有关资源指针的保存以及地址空间的变化等问题;线程切换时,由于同不进程内的线程共享资源和地址空间,将不涉及资源信息的保存和地址变化问题,从而减少了操作系统的开销时间。而且,进程的调度与切换都是由操作系统内核完成,而线程则既可由操作系统内核完成,也可由用户程序进行。线程的执行特性线程有3个基本状态:执行、就绪、阻塞线程有5种基本操作:派生:线程在进程内派生出来,它即可由进程派生,也可由线程派生。阻塞(Block):如果一个线程在执行过程中需要等待某个事件发生,则被阻塞。激活(unblock):如果阻塞线程的事件发生,则该线程被激活并进入就绪队列。调度(schedule):选择一个就绪线程进入执行状态。结束(Finish):如果一个线程执行结束,它的寄存器上下文以及堆栈内容等将被释放。线程的状态与操作线程的分类线程有两个基本类型:用户级线程:管理过程全部由用户程序完成,操作系统内核心只对进程进行管理。系统级线程(核心级线程):由操作系统内核进行管理。操作系统内核给应用程序提供相应的系统调用和应用程序接口API,以使用户程序可以创建、执行、撤消线程。本讲完毕
本文档为【操作系统-进程管理】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
中小学教育资料汇总
暂无简介~
格式:doc
大小:110KB
软件:Word
页数:20
分类:互联网
上传时间:2023-03-03
浏览量:0