操作系统原理-第4章-并发处理课件_第1页
操作系统原理-第4章-并发处理课件_第2页
操作系统原理-第4章-并发处理课件_第3页
操作系统原理-第4章-并发处理课件_第4页
操作系统原理-第4章-并发处理课件_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章并发处理

主要内容:1.

进程的引入2.

进程的概念3.

进程控制4.

进程的相互制约关系5.

进程互斥6.

信号灯和P、V操作7.

进程同步8.

进程通信9.UNIX系统的进程管理第4章并发处理主要内容:6.

信号灯和P、V操作4.1并发活动——进程的引入

4.1.1程序的顺序执行

(一)数据、操作对某一有限数据的集合所施行的、目的在于解决某一问题的一组有限的操作的集合,称为一个计算。(二)顺序程序一个程序由若干个程序段组成,而这些程序段的执行必须是顺序的,这个程序被称为顺序程序。4.1并发活动——进程的引入4.1.1程序的顺序执行(三)顺序程序的特点1.顺序性:处理机的操作严格按照程序所规定的顺序执行2.封闭性:程序执行的结果不受外界因素的影响,即一个程序执行时所用的变量、指针值、各资源的状态不能被外界改变。3.可再现性:程序执行的结果与它的执行速度无关(即与时间无关),只与初始条件有关。(三)顺序程序的特点4.1.2程序的并发执行

所谓程序的并发执行是指:若干个程序同时在系统中运行,这些程序的执行在时间上是重迭的,一个程序的执行尚未结束,另一个程序的执行已经开始,即使这种重迭是很小的一部分,那么这两个程序是并发执行的。

4.1.2程序的并发执行操作系统原理-第4章-并发处理ppt课件程序的并发执行的表示方法:

1.图示方法

程序的并发执行的表示方法:操作系统原理-第4章-并发处理ppt课件2.语句方法(荷兰科学家E.W.Dijkstra方法)

S0;

cobeginS1;S2;...;Sn;

coendSn+1;

2.语句方法(荷兰科学家E.W.Dijkstra方法)4.1.3并发执行实例—誉抄

(一)一个循环程序的誉抄方案

假设f表示输入序列,g表示输出序列。main(){while(f不空){input;/*读入f中的数据;*/output;/*输出读入的数据;*/}}卡片输入机打印机4.1.3并发执行实例—誉抄卡片输入机打印机(二)

两个并发程序的誉抄方案假设f表示输入序列,g表示输出序列,誉抄过程利用一个缓冲区A。(二)

两个并发程序的誉抄方案main(){

cobeginwhile(f不空){input;/*读入f中的数据;*/send;/*将读入的数据送到A;*/}while(誊抄未完成){receive;/*从A中取的数据;*/output;/*输出取出的数据;*/}coend}

fAgmain()fAg三个并发程序的誉抄方案main(){if(f不空){get(s,f);while(誊抄未完成){t=s;/*COPY*/cobeginput(t,g);get(s,f);coend}}}

fstg三个并发程序的誉抄方案fstg4.1.4与时间有关的错误结论:并发程序如共享某些公共变量时,并发程序执行时会出现与时间有关的错误。如

4.1.4与时间有关的错误main(){if(f不空){get(s,f);while(誊抄未完成){

/*t=s;*//*COPY*/cobegint=s;/*COPY*/put(t,g);get(s,f);coend}}}main()4.1.5并发程序的特点(一)失去程序的封闭性和再现性(二)程序与计算不再一一对应

(三)程序并发执行的相互制约

4.1.5并发程序的特点4.2进程概念

4.2.1进程的定义到目前为止,进程有多种定义,如:(1)

进程是程序的执行;(2)

并行程序称为进程;(3)

进程是可以和别的计算并发的计算;(4)

进程是一个数据结构及在其上进行操作的程序。4.2进程概念4.2.1进程的定义这些定义都从不同的侧面描述了进程的特征,都一定的道理,但我们认为下面的定义更全面和更准确:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。此定义包含有如下的含义:这些定义都从不同的侧面描述了进程的特征,都一定的道理,但我们(1)

进程是一个动态的概念,而程序是一个静态的概念;(2)

进程包含了一个数据集合和运行其上的程序;(3)

同一程序运行于若干不同的数据集合上时,它将属于若干个不同的进程,或者说,两个不同的进程可包含相同的程序;(4)

系统分配资源是以进程为单位的,所以只有进程才可能在不同的时刻处于几种不同的状态,即等待、就绪、运行。(5)

从微观上看,进程是轮换地占有处理机而运行的,从宏观上看,进程是并发地运行的。(1)进程是一个动态的概念,而程序是一个静态的概念;进程和程序是即有联系又有区别的两个概念,它们的区别和关系如下:(1)程序是指令的有序集合,其本身没有任何运行的含义,它是一个静态概念。而进程是程序在处理机上的一次执行过程,它是一动态概念。程序可以作为一种软件资料长期保存,而进程是有一定生命周期的,它能够动态地产生和消亡。即进程可由“创新”而产生,由调度而执行,因得不到资源而暂停,以致最后由“撤消”而消亡。进程和程序是即有联系又有区别的两个概念,它们的区别和关系如下(2)进程是一个能独立运行的单位,能与其它进程并行地活动。(3)进程是竞争计算机系统有限资源的基本单位,也是进行处理机调度的基本单位。(4)同一程序同时运行于若干不同的数据集合上,它将属于若干个不同的进程。或者说,若干个不同的进程可以包含相同的程序。这句话的意思是:用同一程序对不同的数据先后或同时加以处理,就对应与好几个进程。例如,系统具有一个输入子程序,当它输入不同的作业时就形成了输入进程I1、I2、I3……In。(2)进程是一个能独立运行的单位,能与其它进程并行地活动。进程的构成进程=PCB+程序+数据进程的构成4.2.2进程的类型1.系统进程2.用户进程3.系统进程与用户进程的区别:(1)

系统进程被分配一个初始的资源集合,这些资源可以独占,也可以最高优先权资格优先使用。用户进程通过系统服务请求的手段竞争系统资源。(2)

系统进程可以进行显示的、直接的I/O操作。用户进程不进行直接的I/O操作。(3)系统进程在管态下活动。用户进程在目态下活动。

4.2.2进程的类型4.2.3进程的状态(一)进程的基本状态

(1)就绪状态:存在于处理机调度队列中的那些进程,它们已经准备就绪,一旦得到CPU就立即可以运行,这些进程所处的状态为就绪状态。(2)运行状态:当进程由调度/分派模块分派后,得到中央处理机控制权,它的程序正在运行,该进程所处的状态为运行状态。(3)

等待状态:若一进程正在等待着某一事件发生(如等待输入输出操作的完成)而暂时停止执行,这时,即使给它CPU时间,它也无法执行,则称该进程处于等待状态。又可称为阻塞状态或挂起状态。

4.2.3进程的状态(二)进程状态变迁图在进程状态变迁图中,以结点表示进程的状态,以箭头表示状态的变化。

请求可以满足开始时间片到进程调度请求无法满足完成等待就绪执行图4.8进程状态变迁图(二)进程状态变迁图请求可以满足时间片到请求无法满足等待就绪(三)引起进程状态转换的4原因(1)CPU调度(低级调度):CPU调度按某种原则从就绪队列中调度一个进程到CPU上运行,该进程就从就绪状态变为运行状态;与此同时,原运行进程从运行状态变为就绪状态。因此,这两种状态变化是同时发生的。(2)进程在运行过程中需要等待某一事件,例如,等待分配某一资源,等待I/O操作完成等。一个进程在需要等待某一事件时主动退出CPU,并使自己处于阻塞状态,引起状态变化。(三)引起进程状态转换的4原因(3)如果进程所等待的事件发生了变化,例如,一次I/O完成了,于是进程便被解除阻塞状态,变为就绪状态。(4)一个具体的进程在任何一个指定的时刻必须而且只能处于一种状态。(3)如果进程所等待的事件发生了变化,例如,一次I/O完成了(四)进程状态转换的说明(1)

进程之间的状态转换并非都是可逆的进程既不能从等待变为运行,也不能从就绪变为等待。(2)进程之间的状态转换并非都是主动的,在很多情况下都是“它动的”事实上,只有运行到等待的转换是进程的主动行为(主动调用调度管理程序),其它都是它动的,例如,从执行到就绪,通常是时钟中断引起的,从等待到就绪,是一个进程把另一个进程唤醒。

(四)进程状态转换的说明4.2.4进程的描述-----进程控制块进程控制块(processcontrolblock,PCB)是进程的重要组成部分,是操作系统能“感知”进程存在的唯一标志,它和进程是一一对应的,操作系统正是通过管理PCB来管理进程的。为了描述一个进程和其它进程相联系的数据块,称为进程控制块pcb(processcontrolblock)或称为进程描述器(processdescriptor)。包含下面的内容:4.2.4进程的描述-----进程控制块(1)

进程标识符name(2)

进程当前状态status(3)

当前队列指针next(4)

总链指针all-q–next(5)

进程开始地址start-addr(6)

进程优先级priority(7)

CPU现场保护区cpustatus(8)

通信信息communication-information(9)

家族联系process-family(10)

占用资源清单own-resource(1)

进程标识符name4.3进程控制

4.3.1进程控制的概念进程控制的职责是对系统中的全部进程实施有效的管理,它是处理机管理的一部分,当系统允许多进程并发执行是,为了实现共享、协调并发进程的关系,处理机管理机就提供对进程实行有效的功能。用于进程控制的原语有:创建原语、撤消原语、阻塞原语、唤醒原语等4.3进程控制4.3.1进程控制的概念原语

一般,我们把系统态下执行的某些具有特定功能的程序段成为原语,原语可是机器指令级的扩充,其特点是执行期间不允许中断、它是一个不可分割的基本单位。它们都在系统态下执行,且都是为了完成某个系统管理所需要的功能和被高层软件调用。原语一般,我们把系统态下执行的某些具有特定功能的程序4.3.2进程创建进程创建的方式有两种:(a)由系统程序模块统一创建。例如在批处理系统中,由操作系统的作业调度程序为用户进程创建相应的进程以完成用户作业所要求的功能。(b)由父进程创建。例如在UNIX操作系统中,父进程创建子进程以完成并行工作。

4.3.2进程创建create(name,priority,start_add){在总链队列上查找有无同名的进程;if(有同名的进程)return(错误码);从pcb资源池申请一个空闲的pcb结构;if(无空pcb结构)return(错误码);用入口参数设置pcb内容;置进程为“就绪”状态;将新进程的pcb插入就绪队列;将新进程的pcb插入总链队列;return(新进程的pid);}create(name,priority,start_add4.3.3进程撤消进程撤消的原因:1)

该进程已完成所要求的功能而正常终止。2)

由于某种错误导致非正常终止。4.3.3进程撤消Kill(){由运行指针得到当前进程的pid;释放本进程所占资源给父进程;将该进程从总链队列中摘除;释放该进程的pcb;转进程调度程序;}Kill()4.3.4进程等待(阻塞)阻塞原语在一个进程期待某一事件发生但发生条件尚不具备时,被该进程自己调用来阻塞自己。阻塞原语在阻塞一个进程时,由于该进程正处于执行状态,故应先中断处理机和保存该进程的处理机现场,然后被阻塞进程置阻塞状态后插入等待队列中,再转进程调度程序选择新的就绪进程投入运行。

4.3.4进程等待(阻塞)susp(chan)//*入口参数chan,进程等待的原因*//{保护现行进程的CPU现场到pcb结构中;置进程为“等待”状态;将该进程的pcb插入到等待chan的等待队列中;转进程调度;}susp(chan)4.3.5进程唤醒进程唤醒的两种方法1)

由系统进程唤醒系统统一控制事件的发生并将“事件发生”这一消息通知等待进程。2)

由事件发生进程唤醒4.3.5进程唤醒wakeup(chan)/*输入:chan等待的事件(阻塞原因)

输出:无*/{找到该等待chan的队列指针;for(等待该事件的进程){将进程移出此等待队列;置进程为“就绪”状态;将进程pcb入就绪队列;}}wakeup(chan)4.3.6进程延迟

delay(seconds)/*seconds为所需延迟秒数*/{保护调用进程的CUP现场;clock_ticks=secondsX(clock_rate);/*需延迟的机内时间,clock_rate为时钟速率*/封锁延迟队列;以clock_ticks值查找延迟队列;找到合适位置插入;/*延迟队列按延迟时间升序排队*/解除延迟队列;置进程为延迟状态;转进程调度;}4.3.6进程延迟4.4进程的相互制约关系

资源共享是当代计算机系统的一个重要特征。而资源共享导致进程之间存在相互制约关系。

4.4进程的相互制约关系资源共享是当代计算机系统的一资源共享的方式(两种)1.由系统进行统一分配凡需要使用共享资源的进程,先向系统申请,然后由系统根据资源情况,按一定的策略进行分配。如,进程对处理机的共享,靠操作系统的进程调度程序来协调;内存的共享,靠操作系统的内存管理程序来协调。

资源共享的方式(两种)2.由程序自行使用系统中的某些资源无需系统分配,而由进程自行使用,如数据集、变量、队列等。共享这些资源时,靠操作系统提供的同步机构来协调

2.由程序自行使用进程合作进程合作时,必定会出现数据的共享,如消息的传递等。

进程合作4.4.2进程互斥与同步同步:所谓进程同步就是对于进程操作的时间顺序所加的某种限制。也可以说进程同步是进程间共同完成一项任务是直接发生相互作用的关系,也就是说,这些具有伙伴关系的进程在执行时间次序上必须遵循确定的规律。4.4.2进程互斥与同步同步:互斥:在操作系统中,当某一进程正在访问某一存储区域时,就不允许其它进程来读出或者修改存储区的内容,否则就会发生后果无法估计的错误。我们把进程之间的这种相互制约关系称为互斥。也可以说,进程的互斥是因为对同一物理资源的竞争而产生的相互制约关系。

互斥:同步与互斥的特点比较

同步与互斥的特点比较临界资源和临界区我们把一次只允许一个进程使用的资源称为临界资源,而把在每个进程中访问临界资源的程序段称为临界区。要进入临界区的若干个进程必须满足如下关系:(1)

一次只允许一个进程进入临界区。(2)任何时候,处于临界区的进程不得多于一个。(3)进入临界区的进程要在有限的时间内退出。(4)如果不能进入自己的临界区,则应让出处理机资源。

临界资源和临界区4.5.同步机构4.5.1锁和上锁、开锁操作对应于每一共享数据块或设备都要有一个单独的锁位。按惯例,常用锁位w值为“0”表示资源可用,而用“1”表示资源已经被占用。这样,进程使用某一共享资源之前就必须完成下列动作(即关锁操作):(1)考察锁位的值(是0还是1);(2)如果原来的值为0,将锁位置1(表示占用资源);(3)如果原来的值为1(即资源已被占用),则返回第一步再考察。当前进程使用完资源后,它将锁位置成“0”,称为开锁操作。

4.5.同步机构局限性:只要有一个进程由于执行关锁操作而进入临界区,则其它进程在检查锁状态时都将反复执行关锁操作,从而导致处理机繁忙。

现在一般采用硬件指令来解决互斥进入临界区问题。

局限性:只要有一个进程由于执行关锁操作而进入临界区,则其它进lock(w){while(w==1){保护现行进程的CPU现场;现行进程入等W的队列;将该进程登记为“等待”状态;转到进程调度;}w=1;/*上锁*/}unlock(w){if(等W的队列不空){

移出等W的队列的首元素;将该进程入就绪队列;将该进程登记为“就绪”状态;}w=0;/*开锁*/}lock(w)unlock(w)4.5.2信号灯和P、V操作1.信号灯的概念P、V操作是荷兰科学家E.W.Dijkstra在1965年提出的一种解决同步、互斥问题的更通用的方法,并在THE操作系统中得以实现。P是荷兰语发信号的开头字母,V是等待的开头字母。信号灯是一个确定的二元组(s,q),s为信号灯的值,是整型变量;q是指向PCB的队列。4.5.2信号灯和P、V操作1.信号灯的概念信号量的值s与相应资源的使用状态有关。(1)当它的值>0时,它表示可用资源的数量;(2)当它的值<0时,其绝对值表示等待使用该资源的进程个数,即在该信号量队列上排队的PCB的个数。(3)当它的值=0时,无可用资源,同时也无等待使用该资源的进程信号量的一般数据结构及PCB队列如图

数值(-3)指针PCB1PCB2PCB3信号量的值s与相应资源的使用状态有关。数值(-3)PCB1信号灯的值只能通过p、v操作来改变。其可能的取值范围是,负数值、零、正数值。信号灯的是操作系统中实现进程见同步和通信的一种常用工具。

信号灯的值只能通过p、v操作来改变。其可能的取值范围是,负数2.p、v操作

设信号量为S,对S的P操作记为P(S),对它的V操作记为V(S)。P、V操作的含义是:

P(S)操作顺序执行下述动作:1)

S=S-12)

S>=0说明当前进程q有资源可执行;

3)S<0说明无资源,则当前进程挂起或封锁,将该进程插入排队到该信号量等待队列的队尾,并放弃处理机,进行等待(直到其它进程在S上执行V操作,把资源释放出来为止)。

2.p、v操作设信号量为S,对S的P操作记为P(S)V(S)操作顺序执行下述动作:1)S=S+1;2)如果S>0,则该进程继续运行;3)

如果S<=0,则释放信号队列上的第一个PCB(即信号量指针所指向的PCB)所对应的进程(把阻塞态改为就绪态),执行V操作的进程继续运行。V(S)操作顺序执行下述动作:4.6进程互斥与同步的实现4.6.1用上锁原语和开锁原语实现进程互斥

上锁原语进入临界区csa开锁原语上锁原语进入临界区csb开锁原语4.6进程互斥与同步的实现上锁原语进入临界区csa开锁原语main(){intw=0;cobeginppa();ppb();coend}

ppa(){……lock(w);csa;/*临界区*/unlock(w);……}

ppb(){……lock(w);csa;/*临界区*/unlock(w);……}main()ppb()4.6.2用信号灯实现进程互斥

main(){intmutex=1;/*互斥作用*/cobeginpa();pb();coend}pa(){……;p(mutex);

csa;/*临界段*/v(mutex);

……;}pb(){……;p(mutex);

csb;/*临界段*/v(mutex);

……;

}4.6.2用信号灯实现进程互斥main()pb4.6.3进程同步的实现

同步的概念所谓同步,就是并发进程在一些关键点上可能需要互相等待与互通消息,这种相互制约的等待与互通消息称为进程同步。

4.6.3进程同步的实现同步的概念同步的例子SPOOLing系统中的输入功能可以由两个进程A和B完成,进程A负责从读卡机上把卡片上的信息读到一个缓冲区中,进程B负责把该缓冲区中的信息进行加工并写到外存输入井中。要实现两者的协同工作,两个进程必须满足如下的制约关系:同步的例子SPOOLing系统中的输入功能可以由两个进程A只有当缓冲区的内容取空时,进程A才能向其中写入新信息;只有当缓冲区写满时,进程B才能从中取出内容作进一步加工和转送工作。可见,在缓冲区内容区空时,进程B不应该继续运行,需要等待进程A向其中送入新的信息;反之,当缓冲区中的信息尚未取走时,进程A应等待,防止把原有的信息冲掉,造成丢失信息的结果。进程A和进程B就是一种同步关系。只有当缓冲区的内容取空时,进程A才能向其中写入新信息;只有当用信号灯实现进程同步信号灯可以解决进程的同步问题。一般同步问题可以分为两类:一类是保证一组合作进程按逻辑需要所确定的执行次序;另一类是保证共享缓冲区(或共享数据)的合作进程的同步。

用信号灯实现进程同步main(){ints1=0;/*表示有无化验单*/ ints2=0;/*表示有无化验结果*/cobeginlabora();diagnosis();coend}

labora(){while(化验工作未完成){p(s1);/*询问有无化验单,若无则等*/

化验工作;

v(s2);/*送出化验结果*/}}diagnosis(){while(看病工作未完成){

看病;

v(s1);/*送出化验单*/p(s2);/*等化验结果*/diagnosis;/*诊断*/}}main()化验工作;(一)合作进程的执行次序main(){intsb=0;/*表示Pb进程能否开始执行*/intsc=0;/*表示Pc进程能否开始执行*/cobeginpa();

pb();

pc();

coend}pa(){……;v(sb);v(sc);}pb(){p(sb);

……;}pc(){p(sc);

……;}sfpbpcpa(一)合作进程的执行次序main()pa()sfpb(二)

共享缓冲区的合作进程的同步

main(){intsa=0;/*表示buf中有无信息*/intsb=1;/*表示buf中有无空位置*/cobegincp();iop();coend}cp(){while(计算未完成){

得到一个计算结果;

p(sb);将数送到缓冲区中;

v(sa);

}}iop(){while(打印工作未完成);

{p(sa);

从缓冲区中取一数;

v(sb);

从打印机上输出;}

}cpiopbuf(二)共享缓冲区的合作进程的同步main()p(s4.6.4生产者-消费者问题

(producer-consumerproblem)生产者--消费者问题表述如下:有n个生产者和m个消费者,连接在一个有k个单位缓冲区的有界缓冲上,故又叫有界缓冲问题。其中,pi和cj都是并发进程,只要缓冲区未满,生产者pi生产的产品就可投入缓冲区;类似地,只要缓冲区不空,消费者进程cj就可从缓冲区取走并消耗产品。4.6.4生产者-消费者问题

(producer-consu可以用程序把生产者-消费者问题的算法描述如下:p1p2…pnc1c2…cmK个可以用程序把生产者-消费者问题的算法描述如下:p1c1K个main(){intfull=0;/*满缓冲区的数目*/intempty=n;/*空缓冲区的数目*/intmutex=1;/*互斥作用*/cobeginproducer();consumer();coend}producer(){while(生产未完成){

……;

生产一个产品;

p(empty);

p(mutex);送一个产品到有界缓冲区中;

v(mutex)v(full);

}}consumer(){while(还要继续消费);

{p(full);p(mutex);从有界缓冲区中取产品;

v(mutex);

v(empty);

消费一个产品;

……;

}main()p(empty);哲学家吃通心面问题下面再来讨论使用信号量和P、V操作解决操作系统经典的五个哲学家吃通心面问题(Dijkstra,1965)。有五个哲学家围坐在一圆桌旁,桌子中央有一盘通心面,每人面前有一只空盘子,每两人之间放一把叉子。每个哲学家思考、饥饿、然后,欲吃通心面。为了吃面,每个哲学家必须获得两把叉子,且每人只能直接从自己左边或右边去取叉子。哲学家吃通心面问题下面再来讨论使用信号量和P、V操作解决操五个哲学家吃通心面问题五个哲学家吃通心面问题在这道经典题目中,每一把叉子都是必须互斥使用的,因此,应为每把叉子设置一个互斥信号量Si(i=0,1,2,3,4),初值均为1。当一个哲学家吃通心面之前必须获得自己左边和右边的两把叉子,即执行两个P操作,吃完通心面后必须放下叉子,即执行两个V操作。程序如下:在这道经典题目中,每一把叉子都是必须互斥使用的,因此,应为每main(){intfork[0...4]={1,1,1,1,1,1};cobeginp1;p2;p3;p4;p5;coend}processPi/*i=0,1,2,3,4{while(){

思考;P(fork[i]);P(fork[i+1]mod5);

吃通心面;V(fork[i]);V(fork[i+1]mod5);}}main()processPi/*i=0,1,2,3,4上述解法中,如果五个哲学家先执行P(fork[i]),再执行P(fork[i+1]mod5)的话,就有可能出现每个哲学家举起左边一把叉子,却又在永远等待相邻哲学家手中的叉子的情况。有若干种办法可避免这类死锁:(1)至多允许四个哲学家同时吃。(2)奇数号先取左手边的叉子,然后再取右手边的叉子;偶数号先取右手边的叉子,然后,再取左手边的叉子。(3)每个哲学家取到手边的两把叉子才吃,否则,一把叉子也不取。上述解法中,如果五个哲学家先执行P(fork[i]),再执行读者与写者问题

(reader-writerproblem)读者与写者问题(Courtois,1971)也是一个经典的并发程序设计问题。有两组并发进程:读者和写者,共享一个文件F,要求:(1)允许多个读者可同时对文件执行读操作;(2)只允许一个写者往文件中写信息;(3)任一写者在完成写操作之前不允许其他读者或写者工作;(4)写者执行写操作前,应让已有的写者和读者全部退出。读者与写者问题

(reader-writerproblemReader_i(){P(mutex);rc=rc+1;ifrc=1thenP(W);

V(mutex);

读文件;

P(mutex);rc=rc-1;ifrc=0thenV(W);V(mutex);}Writer_j(){P(W);写文件;V(W);}其中:i=1,2,…,n;j=1,2,…,m;Reader_i()Writer_j()其中:main(){intW=1,mutex=1;intrc=0;/*读进程计数*/cobeginReader_i;Writer_j;coend}main()4.7进程通信

4.7.1进程通信的概念

并发进程之间的交互必须满足两个基本要求:同步和通信。进程竞争资源时要实施互斥,互斥是一种特殊的同步,实质上需要解决好进程同步问题,进程同步是一种进程通信,通过修改信号量,进程之间可建立起联系,相互协调运行和协同工作。但是信号量与PV操作只能传递信号,没有传递数据的能力。

4.7进程通信4.7.1进程通信的概念有些情况下进程之间交换的信息量虽很少,例如,仅仅交换某个状态信息,但很多情况下进程之间需要交换大批数据,例如,传送一批信息或整个文件,这可以通过一种新的通信机制来完成,进程之间互相交换信息的工作称之为进程通信IPC(InterProcessCommunication)。有些情况下进程之间交换的信息量虽很少,例如,仅仅交换某个状态进程通信是指进程之间可直接以较高的效率传达较多数据的信息交换方式。这种方式中采用的是通信机构,如消息发送和接收、邮箱结构等,在进程通信时往往以消息形式传递信息。消息是指进程之间相互传送的赖以发生交互作用的有结构的数据。操作系统原理-第4章-并发处理ppt课件进程间通信的方式很多,大致分为四类:1、信号(signal)通信机制;2、信号量及其原语操作(PV、读写锁、管程)控制的共享存储区(sharedmemory)通信机制;3、管道(pipeline)提供的共享文件(sharedfile)通信机制;4、信箱和发信/收信原语的消息传递(messagepassing)通信机制。进程间通信的方式很多,大致分为四类:其中前两种通信方式由于交换的信息量少且效率低下,故称为低级通信机制,相应地可把发信号/收信号及PV之类操作称为低级通信原语,仅适用于集中式操作系统。消息传递机制属于高级通信机制,共享文件通信机制是消息传递机制的变种,这两种通信机制,既适用于集中式操作系统,又适用于分布式操作系统。其中前两种通信方式由于交换的信息量少且效率低下,故称为低级通信号通信机制信号(signal)机制又称软中断,是一种进程之间进行通信的简单通信机制,通过发送一个指定信号来通知进程某个异常事件发生,并进行适当处理。进程运行时不时地检查有无软中断信号到达,如果有,则中断原来正在执行的程序,转向该信号的处理程序对该事件进行处理,处理结束后便可返回原程序的断点执行。信号通信机制信号(signal)机制又称软中断,是一种进程之一般地可以分成OS标准信号和用户进程自定义信号,这种机制类似硬件中断,不分优先级,简单有效,但不能传送数据。信号不但能从内核发给一个进程,也能由一个进程发给同组的另一个进程或多个进程。一般地可以分成OS标准信号和用户进程自定义信号,这种机制类举例:当系统正在运行一个耗时的前台程序,如若已发现有错误,并断定该程序要失败,为了节省时间,用户可以按软中断键(一般为ctrl+alt+del)停止程序的执行,这一过程中就用到了信号(signal)。系统具体的操作为:响应键盘输入的中断处理程序向发来中断信号的终端进程发一个信号,进程收到信号后,完成相关处理,然后执行终止。举例:当系统正在运行一个耗时的前台程序,如若已发现有错误,并共享文件通信机制管道(pipeline)是连接读写进程的一个特殊文件,允许进程按先进先出方式传送数据,也能使进程同步执行操作。如图所示,发送进程视管道文件为输出文件,以字符流形式把大量数据送入管道;接收进程将管道文件视为输入文件,从管道中接收数据,所以,也叫管道通信。由于方便有效,能在进程间作大量信息的通信,目前已被引入到许多操作系统中。共享文件通信机制管道和消息队列的主要区别在于:管道中的消息是无界的,它存于外存;消息队列是位于内存。共享文件ProcessA写ProcessB

读管道和消息队列的主要区别在于:管道中的消息是无界的,它存于外4.7.2消息缓冲通信消息传递方式分为直接通信方式和间接通讯方式两种,而直接通讯方式的消息缓冲为基本的进程通讯方式。发送进程直接将消息挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中得到消息。基本的有发送(send)消息和读取(re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论