第4章并发处理主要内容:1.进程的引入2.进程的概念3.进程控制4.进程的相互制约关系5.进程互斥6.信号灯和P、V操作7.进程同步8.进程通信9.UNIX系统的进程管理4.1并发活动——进程的引入4.1.1程序的顺序执行(一)数据、操作对某一有限数据的集合所施行的、目的在于解决某一问题的一组有限的操作的集合,称为一个计算。(二)顺序程序一个程序由若干个程序段组成,而这些程序段的执行必须是顺序的,这个程序被称为顺序程序。(三)顺序程序的特点1.顺序性:处理机的操作严格按照程序所规定的顺序执行2.封闭性:程序执行的结果不受外界因素的影响,即一个程序执行时所用的变量、指针值、各资源的状态不能被外界改变。3.可再现性:程序执行的结果与它的执行速度无关(即与时间无关),只与初始条件有关。4.1.2程序的并发执行所谓程序的并发执行是指:若干个程序同时在系统中运行,这些程序的执行在时间上是重迭的,一个程序的执行尚未结束,另一个程序的执行已经开始,即使这种重迭是很小的一部分,那么这两个程序是并发执行的。程序的并发执行的表示方法:1.图示方法2.语句方法(荷兰科学家E.W.Dijkstra方法)S0;cobeginS1;S2;...;Sn;coendSn+1;4.1.3并发执行实例—誉抄(一)一个循环程序的誉抄方案假设f表示输入序列,g表示输出序列。main(){while(f不空){input;/*读入f中的数据;*/output;/*输出读入的数据;*/}}卡片输入机打印机(二)两个并发程序的誉抄方案假设f表示输入序列,g表示输出序列,誉抄过程利用一个缓冲区A。main(){cobeginwhile(f不空){input;/*读入f中的数据;*/send;/*将读入的数据送到A;*/}while(誊抄未完成){receive;/*从A中取的数据;*/output;/*输出取出的数据;*/}coend}fAg三个并发程序的誉抄方案main(){if(f不空){get(s,f);while(誊抄未完成){t=s;/*COPY*/cobeginput(t,g);get(s,f);coend}}}fstg4.1.4与时间有关的错误结论:并发程序如共享某些公共变量时,并发程序执行时会出现与时间有关的错误。如main(){if(f不空){get(s,f);while(誊抄未完成){/*t=s;*//*COPY*/cobegint=s;/*COPY*/put(t,g);get(s,f);coend}}}4.1.5并发程序的特点(一)失去程序的封闭性和再现性(二)程序与计算不再一一对应(三)程序并发执行的相互制约4.2进程概念4.2.1进程的定义到目前为止,进程有多种定义,如:(1)进程是程序的执行;(2)并行程序称为进程;(3)进程是可以和别的计算并发的计算;(4)进程是一个数据结构及在其上进行操作的程序。这些定义都从不同的侧面描述了进程的特征,都一定的道理,但我们认为下面的定义更全面和更准确:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。此定义包含有如下的含义:(1)进程是一个动态的概念,而程序是一个静态的概念;(2)进程包含了一个数据集合和运行其上的程序;(3)同一程序运行于若干不同的数据集合上时,它将属于若干个不同的进程,或者说,两个不同的进程可包含相同的程序;(4)系统分配资源是以进程为单位的,所以只有进程才可能在不同的时刻处于几种不同的状态,即等待、就绪、运行。(5)从微观上看,进程是轮换地占有处理机而运行的,从宏观上看,进程是并发地运行的。进程和程序是即有联系又有区别的两个概念,它们的区别和关系如下:(1)程序是指令的有序集合,其本身没有任何运行的含义,它是一个静态概念。而进程是程序在处理机上的一次执行过程,它是一动态概念。程序可以作为一种软件资料长期保存,而进程是有一定生命周期的,它能够动态地产生和消亡。即进程可由“创新”而产生,由调度而执行,因得不到资源而暂停,以致最后由“撤消”而消亡。(2)进程是一个能独立运行的单位,能与其它进程并行地活动。(3)进程是竞争计算机系统有限资源的基本单位,也是进行处理机调度的基本单位。(4)同一程序同时运行于若干不同的数据集合上,它将属于若干个不同的进程。或者说,若干个不同的进程可以包含相同的程序。这句话的意思是:用同一程序对不同的数据先后或同时加以处理,就对应与好几个进程。例如,系统具有一个输入子程序,当它输入不同的作业时就形成了输入进程I1、I2、I3……In。进程的构成进程=PCB+程序+数据4.2.2进程的类型1.系统进程2.用户进程3.系统进程与用户进程的区别:(1)系统进程被分配一个初始的资源集合,这些资源可以独占,也可以最高优先权资格优先使用。用户进程通过系统服务请求的手段竞争系统资源。(2)系统进程可以进行显示的、直接的I/O操作。用户进程不进行直接的I/O操作。(3)系统进程在管态下活动。用户进程在目态下活动。4.2.3进程的状态(一)进程的基本状态(1)就绪状态:存在于处理机调度队列中的那些进程,它们已经准备就绪,一旦得到CPU就立即可以运行,这些进程所处的状态为就绪状态。(2)运行状态:当进程由调度/分派模块分派后,得到中央处理机控制权,它的程序正在运行,该进程所处的状态为运行状态。(3)等待状态:若一进程正在等待着某一事件发生(如等待输入输出操作的完成)而暂时停止执行,这时,即使给它CPU时间,它也无法执行,则称该进程处于等待状态。又可称为阻塞状态或挂起状态。(二)进程状态变迁图在进程状态变迁图中,以结点表示进程的状态,以箭头表示状态的变化。请求可以满足开始时间片到进程调度请求无法满足完成等待就绪执行图4.8进程状态变迁图(三)引起进程状态转换的4原因(1)CPU调度(低级调度):CPU调度按某种原则从就绪队列中调度一个进程到CPU上运行,该进程就从就绪状态变为运行状态;与此同时,原运行进程从运行状态变为就绪状态。因此,这两种状态变化是同时发生的。(2)进程在运行过程中需要等待某一事件,例如,等待分配某一资源,等待I/O操作完成等。一个进程在需要等待某一事件时主动退出CPU,并使自己处于阻塞状态,引起状态变化。(3)如果进程所等待的事件发生了变化,例如,一次I/O完成了,于是进程便被解除阻塞状态,变为就绪状态。(4)一个具体的进程在任何一个指定的时刻必须而且只能处于一种状态。(四)进程状态转换的说明(1)进程之间的状态转换并非都是可逆的进程既不能从等待变为运行,也不能从就绪变为等待。(2)进程之间的状态转换并非都是主动的,在很多情况下都是“它动的”事实上,只有运行到等待的转换是进程的主动行为(主动调用调度管理程序),其它都是它动的,例如,从执行到就绪,通常是时钟中断引起的,从等待到就绪,是一个进程把另一个进程唤醒。4.2.4进程的描述-----进程控制块进程控制块(processcontrolblock,PCB)是进程的重要组成部分,是操作系统能“感知”进程存在的唯一标志,它和进程是一一对应的,操作系统正是通过管理PCB来管理进程的。为了描述一个进程和其它进程相联系的数据块,称为进程控制块pcb(processcontrolblock)或称为进程描述器(processdescriptor)。包含下面的内容:(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-resource4.3进程控制4.3.1进程控制的概念进程控制的职责是对系统中的全部进程实施有效的管理,它是处理机管理的一部分,当系统允许多进程并发执行是,为了实现共享、协调并发进程的关系,处理机管理机就提供对进程实行有效的功能。用于进程控制的原语有:创建原语、撤消原语、阻塞原语、唤醒原语等原语一般,我们把系统态下执行的某些具有特定功能的程序段成为原语,原语可是机器指令级的扩充,其特点是执行期间不允许中断、它是一个不可分割的基本单位。它们都在系统态下执行,且都是为了完成某个系统管理所需要的功能和被高层软件调用。4.3.2进程创建进程创建的方式有两种:(a)由系统程序模块统一创建。例如在批处理系统中,由操作系统的作业调度程序为用户进程创建相应的进程以完成用户作业所要求的功能。(b)由父进程创建。例如在UNIX操作系统中,父进程创建子进程以完成并行工作。create(name,priority,start_add){在总链队列上查找有无同名的进程;if(有同名的进程)return(错误码);从pcb资源池申请一个空闲的pcb结构;if(无空pcb结构)return(错误码);用入口参数设置pcb内容;置进程为“就绪”状态;将新进程的pcb插入就绪队列;将新进程的pcb插入总链队列;return(新进程的pid);}4.3.3进程撤消进程撤消的原因:1)该进程已完成所要求的功能而正常终止。2)由于某种错误导致非正常终止。Kill(){由运行指针得到当前进程的pid;释放本进程所占资源给父进程;将该进程从总链队列中摘除;释放该进程的pcb;转进程调度程序;}4.3.4进程等待(阻塞)阻塞原语在一个进程期待某一事件发生但发生条件尚不具备时,被该进程自己调用来阻塞自己。阻塞原语在阻塞一个进程时,由于该进程正处于执行状态,故应先中断处理机和保存该进程的处理机现场,然后被阻塞进程置阻塞状态后插入等待队列中,再转进程调度程序选择新的就绪进程投入运行。susp(chan)//*入口参数chan,进程等待的原因*//{保护现行进程的CPU现场到pcb结构中;置进程为“等待”状态;将该进程的pcb插入到等待chan的等待队列中;转进程调度;}4.3.5进程唤醒进程唤醒的两种方法1)由系统进程唤醒系统统一控制事件的发生并将“事件发生”这一消息通知等待进程。2)由事件发生进程唤醒wakeup(chan)/*输入:chan等待的事件(阻塞原因)输出:无*/{找到该等待chan的队列指针;for(等待该事件的进程){将进程移出此等待队列;置进程为“就绪”状态;将进程pcb入就绪队列;}}4.3.6进程延迟delay(seconds)/*seconds为所需延迟秒数*/{保护调用进程的CUP现场;clock_ticks=secondsX(clock_rate);/*需延迟的机内时间,clock_rate为时钟速率*/封锁延迟队列;以clock_ticks值查找延迟队列;找到合适位置插入;/*延迟队列按延迟时间升序排队*/解除延迟队列;置进程为延迟状态;转进程调度;}4.4进程的相互制约关系资源共享是当代计算机系统的一个重要特征。而资源共享导致进程之间存在相互制约关系。资源共享的方式(两种)1.由系统进行统一分配凡需要使用共享资源的进程,先向系统申请,然后由系统根据资源情况,按一定的策略进行分配。如,进程对处理机的共享,靠操作系统的进程调度程序来协调;内存的共享,靠操作系统的内存管理程序来协调。2.由程序自行使用系统中的某些资源无需系统分配,而由进程自行使用,如数据集、变量、队列等。共享这些资源时,靠操作系统提供的同步机构来协调进程合作进程合作时,必定会出现数据的共享,如消息的传递等。4.4.2进程互斥与同步同步:所谓进程同步就是对于进程操作的时间顺序所加的某种限制。也可以说进程同步是进程间共同完成一项任务是直接发生相互作用的关系,也就是说,这些具有伙伴关系的进程在执行时间次序上必