《电脑基础知识计算机操作系统课件》由会员分享,可在线阅读,更多相关《电脑基础知识计算机操作系统课件(264页珍藏版)》请在金锄头文库上搜索。
1、第二章进 程 管 理 第二章进 程 管 理 2.1进程的基本概念进程的基本概念 2.2进程控制进程控制 2.3进程同步进程同步 2.4经典进程的同步问题经典进程的同步问题 2.5 进程通信进程通信 2.6线程线程 电脑基础知识计算机操作系统第二章进 程 管 理 2.1进程的基本概念进程的基本概念 2.1.1程序的顺序执行及其特征程序的顺序执行及其特征1. 程序的顺序执行程序的顺序执行通常可以把一个应用程序分成若干个程序段,在各程序通常可以把一个应用程序分成若干个程序段,在各程序段之间,必须按照某种先后次序顺序执行,仅当前一操作段之间,必须按照某种先后次序顺序执行,仅当前一操作(程程序段序段)执
2、行完后,才能执行后继操作。执行完后,才能执行后继操作。电脑基础知识计算机操作系统第二章进 程 管 理 例如,在进行计算时,总须先输入用户的程序和数据,例如,在进行计算时,总须先输入用户的程序和数据,然后进行计算,最后才能打印计算结果。然后进行计算,最后才能打印计算结果。 这里,我们用结点这里,我们用结点(Node)代表各程序段的操作代表各程序段的操作(在图在图2-1中中用圆圈表示用圆圈表示),其中,其中,I代表输入操作,代表输入操作,C代表计算操作,代表计算操作,P为为打印操作;打印操作; 另外,用箭头指示操作的先后次序。这样,上述的三个另外,用箭头指示操作的先后次序。这样,上述的三个程序段的
3、执行顺序可示于图程序段的执行顺序可示于图2-1(a)中。中。 对一个程序段中的多条语句来说,也有一个执行顺序问对一个程序段中的多条语句来说,也有一个执行顺序问题,例如对于下述三条语句的程序段题,例如对于下述三条语句的程序段: 电脑基础知识计算机操作系统第二章进 程 管 理 S1: a:=x+y;S2: b:=a-5;S3: c:=b+1; 其中,语句其中,语句S2必须在语句必须在语句S1之后之后(即即a被赋值被赋值)才能执行;同样,才能执行;同样,语句语句S3也只能在也只能在b被赋值后才能执行。因此,这三条语句应按被赋值后才能执行。因此,这三条语句应按图图2-1(b)所示的顺序执行。所示的顺序
4、执行。 电脑基础知识计算机操作系统第二章进 程 管 理 图图 2-1程序的顺序执行程序的顺序执行 电脑基础知识计算机操作系统第二章进 程 管 理 2. 程序顺序执行时的特征程序顺序执行时的特征(1) (1) 顺顺序序性性:处处理理机机的的操操作作严严格格按按照照程程序序所所规规定定的的顺顺序序执行,即每一操作必须在上一个操作结束之后开始。执行,即每一操作必须在上一个操作结束之后开始。(2) (2) 封封闭闭性性:程程序序是是在在封封闭闭的的环环境境下下执执行行的的,即即程程序序运运行行时时独独占占全全机机资资源源,资资源源的的状状态态( (除除初初始始状状态态外外) )只只有有本本程程序序才才
5、能能改改变变它它。程程序序一一旦旦开开始始执执行行,其其执执行行结结果果不不受受外外界界因因素素影响影响。(3) (3) 可可再再现现性性:只只要要程程序序执执行行时时的的环环境境和和初初始始条条件件相相同同,当当程程序序重重复复执执行行时时,不不论论它它是是从从头头到到尾尾不不停停顿顿地地执执行行,还还是是“停停走走停停走走”地执行,都将获得相同的结果。地执行,都将获得相同的结果。程序顺序执行时的特性,为程序员检测和校正程序的错程序顺序执行时的特性,为程序员检测和校正程序的错误带来了很大的方便。误带来了很大的方便。 电脑基础知识计算机操作系统第二章进 程 管 理 2.1.2前趋图前趋图前趋图
6、前趋图(Precedence Graph)是一个有向无循环图,是一个有向无循环图,记为记为DAG(Directed Acyclic Graph),用于描述进程之间执行的前,用于描述进程之间执行的前后关系。后关系。 图中的每个图中的每个结点结点可用于描述一个可用于描述一个程序段程序段或或进程进程,乃至一,乃至一条语句;结点间的条语句;结点间的有向边有向边则用于表示两个结点之间存在的则用于表示两个结点之间存在的偏偏序序(Partial Order,亦称偏序关系,亦称偏序关系)或或前趋关系前趋关系(Precedence Relation)“”。 电脑基础知识计算机操作系统第二章进 程 管 理 =(P
7、i,Pj)|Pi must complete before Pj may start,如,如果果(Pi,Pj),可写成,可写成PiPj,称,称Pi是是Pj的的直接前趋直接前趋,而称,而称Pj是是Pi的的直接后继直接后继。 在前趋图中,把没有前趋的结点称为在前趋图中,把没有前趋的结点称为初始结点初始结点(Initial Node),把没有后继的结点称为,把没有后继的结点称为终止结点终止结点(Final Node)。 此外,每个结点还具有一个重量此外,每个结点还具有一个重量(Weight),用于表示该,用于表示该结点所含有的结点所含有的程序量程序量或或结点的执行时间结点的执行时间。电脑基础知识计算
8、机操作系统第二章进 程 管 理 在图在图2-1(a)和和2-1(b)中分别存在着这样的前趋关系:中分别存在着这样的前趋关系: IiCiPi S1S2S3 和 电脑基础知识计算机操作系统第二章进 程 管 理 对于图对于图2-2(a)所示的前趋图,存在下述前趋关系:所示的前趋图,存在下述前趋关系: P1P2,P1P3,P1P4,P2P5,P3P5,P4P6,P4P7,P5P8,P6P8,P7P9,P8P9前前驱图2-2(a)表示表示为:G=(P, )其中,其中,P=P1,P2,P3,P4,P5,P6,P7,P8,P9=(P1,P2),(P1,P3),(P1,P4),(P2,P5),(P3,P5),
9、(P4,P6),(P4,P7),(P5,P8),(P6,P8),(P7,P9),(P8,P9) 应当注意,前趋图中必须不存在循环,但在图应当注意,前趋图中必须不存在循环,但在图2-2(b)中却中却有着下述的前趋关系:有着下述的前趋关系: S2S3,S3S2 电脑基础知识计算机操作系统第二章进 程 管 理 图 2-2前趋图 电脑基础知识计算机操作系统第二章进 程 管 理 2.1.3程序的并发执行及其特征程序的并发执行及其特征1程序的并发执行程序的并发执行在图在图2-1中的输入程序、计算程序和打印程序三者之间,中的输入程序、计算程序和打印程序三者之间,存在着存在着IiCiPi这样的前趋关系,以至对
10、一个作业的输入、这样的前趋关系,以至对一个作业的输入、计算和打印三个操作,必须顺序执行,但并不存在计算和打印三个操作,必须顺序执行,但并不存在PiIi+1的的关系,因而在对一批程序进行处理时,可使它们并发执行。关系,因而在对一批程序进行处理时,可使它们并发执行。电脑基础知识计算机操作系统第二章进 程 管 理 例例如如,输输入入程程序序在在输输入入第第一一个个程程序序后后,在在计计算算程程序序对对该该程程序序进进行行计计算算的的同同时时,可可由由输输入入程程序序再再输输入入第第二二个个程程序序,从从而而使使第第一一个个程程序序的的计计算算操操作作可可与与第第二二个个程程序序的的输输入入操操作作并
11、并发发执行。执行。 一一般般来来说说,输输入入程程序序在在输输入入第第i+1个个程程序序时时,计计算算程程序序可可能能正正在在对对第第i个个程程序序进进行行计计算算,而而打打印印程程序序正正在在打打印印第第i- -1个个程程序的计算结果。序的计算结果。 图图2-3示示出出了了输输入入、计计算算和和打打印印这这三三个个程程序序对对一一批批作作业业进进行处理的情况。行处理的情况。 电脑基础知识计算机操作系统第二章进 程 管 理 图2-3 并发执行时的前趋图 电脑基础知识计算机操作系统第二章进 程 管 理 在该例中存在下述前趋关系:在该例中存在下述前趋关系: IiCi,IiIi+1,CiPi,CiC
12、i+1,PiPi+1 而而Ii+1和和Ci及及Pi- -1是是重重迭迭的的,亦亦即即在在Pi- -1和和Ci以以及及Ii+1之之间,可以并可以并发执行。行。对于具有下述四条于具有下述四条语句的程序段:句的程序段:S1: a:=x+2S2: b:=y+4S3: c:=a+bS4: d:=c+b 电脑基础知识计算机操作系统第二章进 程 管 理 图图 2-4四条语句的前趋关系四条语句的前趋关系 电脑基础知识计算机操作系统第二章进 程 管 理 2 2程序并发执行时的特征程序并发执行时的特征1) 1) 间断性间断性程序在并发执行时,由于它们共享系统资源,以及为完程序在并发执行时,由于它们共享系统资源,以
13、及为完成同一项任务而相互合作,致使在这些并发执行的程序之间,成同一项任务而相互合作,致使在这些并发执行的程序之间,形成了相互制约的关系。例如,图形成了相互制约的关系。例如,图2-3 中的中的I、C和和P是三个相是三个相互合作的程序,当计算程序完成互合作的程序,当计算程序完成Ci1的计算后,如果输入程的计算后,如果输入程序序I尚未完成尚未完成Ii的处理,则计算程序就无法进行的处理,则计算程序就无法进行Ci的处理,致的处理,致使计算程序必须暂停运行。又如,当打印程序完成使计算程序必须暂停运行。又如,当打印程序完成Pi的打印的打印后,若计算程序尚未完成后,若计算程序尚未完成Ci1的计算,则打印程序就
14、无法对的计算,则打印程序就无法对Ci1的计算结果进行打印。一旦使程序暂停的因素消失后的计算结果进行打印。一旦使程序暂停的因素消失后(如如Ii已处理完成已处理完成),计算程序便可恢复执行对,计算程序便可恢复执行对Ci的处理。简而言之,的处理。简而言之,相互制约将导致并发程序具有相互制约将导致并发程序具有“执行执行暂停暂停执行执行”这种间这种间断性的活动规律。断性的活动规律。 电脑基础知识计算机操作系统第二章进 程 管 理 2 2程序并发执行时的特征程序并发执行时的特征1) 1) 间断性间断性程序在并发执行时,由于它们共享系统资源,以及为完程序在并发执行时,由于它们共享系统资源,以及为完成同一项任
15、务而相互合作,致使在这些并发执行的程序之间,成同一项任务而相互合作,致使在这些并发执行的程序之间,形成了相互制约的关系。例如,图形成了相互制约的关系。例如,图2-3 中的中的I、C和和P是三个相是三个相互合作的程序,当计算程序完成互合作的程序,当计算程序完成Ci1的计算后,如果输入程的计算后,如果输入程序序I尚未完成尚未完成Ii的处理,则计算程序就无法进行的处理,则计算程序就无法进行Ci的处理,致的处理,致使计算程序必须暂停运行。又如,当打印程序完成使计算程序必须暂停运行。又如,当打印程序完成Pi的打印的打印后,若计算程序尚未完成后,若计算程序尚未完成Ci1的计算,则打印程序就无法对的计算,则
16、打印程序就无法对Ci1的计算结果进行打印。一旦使程序暂停的因素消失后的计算结果进行打印。一旦使程序暂停的因素消失后(如如Ii已处理完成已处理完成),计算程序便可恢复执行对,计算程序便可恢复执行对Ci的处理。简而言之,的处理。简而言之,相互制约将导致并发程序具有相互制约将导致并发程序具有“执行执行暂停暂停执行执行”这种间这种间断性的活动规律。断性的活动规律。 电脑基础知识计算机操作系统第二章进 程 管 理 2) 2) 失去封闭性失去封闭性程序在并发执行时,是多个程序共享系统中的各种资源程序在并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行因而这些资
17、源的状态将由多个程序来改变,致使程序的运行失去了封闭性。失去了封闭性。 这样,某程序在执行时,必然会受到其它程序的影响。这样,某程序在执行时,必然会受到其它程序的影响。例如,当处理机这一资源已被某个程序占有时,另一程序必例如,当处理机这一资源已被某个程序占有时,另一程序必须等待。须等待。 电脑基础知识计算机操作系统第二章进 程 管 理 3) 3) 不可再现性不可再现性程序在并发执行时,由于失去了封闭性,也将导致其再程序在并发执行时,由于失去了封闭性,也将导致其再失去可再现性。例如,有两个循环程序失去可再现性。例如,有两个循环程序A和和B,它们共享一个,它们共享一个变量变量N。程序。程序A每执行
18、一次时,都要做每执行一次时,都要做N:=N+1操作;程序操作;程序B每每执行一次时,都要执行执行一次时,都要执行Print(N)操作,然后再将操作,然后再将N置成置成“0”。程序程序A和和B以不同的速度运行。这样,可能出现下述三种情况以不同的速度运行。这样,可能出现下述三种情况(假定某时刻变量假定某时刻变量N的值为的值为n)。 电脑基础知识计算机操作系统第二章进 程 管 理 (1) N:=N+1(1) N:=N+1在在Print(N)Print(N)和和N:=0N:=0之前,此时得到的之前,此时得到的N N值分值分别为别为n+1n+1,n+1n+1,0 0。(2) N:=N+1(2) N:=N
19、+1在在Print(N)Print(N)和和N:=0N:=0之后,此时得到的之后,此时得到的N N值分值分别为别为n n,0 0,1 1。(3) N:=N+1(3) N:=N+1在在Print(N)Print(N)和和N:=0N:=0之间,此时得到的之间,此时得到的N N值分值分别为别为n n,n+1n+1,0 0。上述情况说明,程序在并发执行时,由于失去了封闭性,上述情况说明,程序在并发执行时,由于失去了封闭性,其计算结果已与并发程序的执行速度有关,从而使程序的执其计算结果已与并发程序的执行速度有关,从而使程序的执行失去了可再现性,亦即,程序经过多次执行后,虽然它们行失去了可再现性,亦即,程
20、序经过多次执行后,虽然它们执行时的环境和初始条件相同,但得到的结果却各不相同。执行时的环境和初始条件相同,但得到的结果却各不相同。 电脑基础知识计算机操作系统第二章进 程 管 理 2.1.42.1.4进程的特征与状态进程的特征与状态1. 1. 进程的特征和定义进程的特征和定义在多道程序环境下,程序的执行属于并发执行,此时它在多道程序环境下,程序的执行属于并发执行,此时它们将失去其封闭性,并具有间断性及不可再现性的特征。们将失去其封闭性,并具有间断性及不可再现性的特征。 这决定了通常的程序是不能参与并发执行的,因为程序这决定了通常的程序是不能参与并发执行的,因为程序执行的结果是不可再现的。这样,
21、程序的运行也就失去了意执行的结果是不可再现的。这样,程序的运行也就失去了意义。义。 为使程序能并发执行,且为了对并发执行的程序加以描为使程序能并发执行,且为了对并发执行的程序加以描述和控制,人们引入了述和控制,人们引入了“进程进程”的概念。为了能较深刻地了的概念。为了能较深刻地了解什么是进程,我们将先对进程的特征加以描述。解什么是进程,我们将先对进程的特征加以描述。 电脑基础知识计算机操作系统第二章进 程 管 理 1) 1) 结构特征结构特征通常的程序是不能并发执行的。为使程序通常的程序是不能并发执行的。为使程序(含数据含数据)能独立能独立运行,应为之配置一运行,应为之配置一进程控制块进程控制
22、块,即,即PCB(Process Control Block);而由程序段、相关的数据段和;而由程序段、相关的数据段和PCB三部分便构成了三部分便构成了进进程实体程实体。 在早期的在早期的UNIX版本中,把这三部分总称为版本中,把这三部分总称为“进程映像进程映像”。值得指出的是,在许多情况下所说的进程,实际上是指值得指出的是,在许多情况下所说的进程,实际上是指进程进程实体实体,例如,例如,所谓创建进程,实质上是创建进程实体中的所谓创建进程,实质上是创建进程实体中的PCB;而撤消进程,实质上是撤消进程的而撤消进程,实质上是撤消进程的PCB,本教材中也本教材中也是如此。是如此。 电脑基础知识计算机
23、操作系统第二章进 程 管 理 2) 2) 动态性动态性进程的实质是进程实体的一次执行过程进程的实质是进程实体的一次执行过程,因此,因此,动态性是动态性是进程的最基本的特征进程的最基本的特征。 动态性还表现在:动态性还表现在:“它由创建而产生,由调度而执行,由它由创建而产生,由调度而执行,由撤消而消亡撤消而消亡”。 可见,进程实体有一定的生命期,而程序则只是一组有序可见,进程实体有一定的生命期,而程序则只是一组有序指令的集合,并存放于某种介质上,其本身并不具有运动的含指令的集合,并存放于某种介质上,其本身并不具有运动的含义,因而是义,因而是静态静态的。的。 电脑基础知识计算机操作系统第二章进 程
24、 管 理 3) 3) 并发性并发性这这是是指指多多个个进进程程实实体体同同存存于于内内存存中中,且且能能在在一一段段时时间间内内同时运行。同时运行。 并发性是进程的重要特征,同时也成为并发性是进程的重要特征,同时也成为OSOS的重要特征。的重要特征。 引引入入进进程程的的目目的的也也正正是是为为了了使使其其进进程程实实体体能能和和其其它它进进程程实体并发执行;而程序实体并发执行;而程序( (没有建立没有建立PCB)PCB)是不能并发执行的。是不能并发执行的。电脑基础知识计算机操作系统第二章进 程 管 理 4) 4) 独立性独立性在传统的在传统的OS中,独立性是指进程实体是一个能中,独立性是指进
25、程实体是一个能独立运行独立运行、独立分配资源独立分配资源和和独立接受调度的独立接受调度的基本单位。基本单位。 凡未建立凡未建立PCB的程序都不能作为一个独立的单位参与运的程序都不能作为一个独立的单位参与运行。行。 电脑基础知识计算机操作系统第二章进 程 管 理 5) 5) 异步性异步性这这是是指指进进程程按按各各自自独独立立的的、 不不可可预预知知的的速速度度向向前前推推进进,或说进程实体按异步方式运行。或说进程实体按异步方式运行。电脑基础知识计算机操作系统第二章进 程 管 理 现现在在我我们们再再来来讨讨论论进进程程的的定定义义。曾曾有有许许多多人人从从不不同同的的角角度对进程下过定义,其中
26、较典型的进程定义有:度对进程下过定义,其中较典型的进程定义有:(1) (1) 进程是程序的一次执行。进程是程序的一次执行。(2) (2) 进进程程是是一一个个程程序序及及其其数数据据在在处处理理机机上上顺顺序序执执行行时时所所发生的活动。发生的活动。(3) 进程是程序在一个数据集合上运行的过程,它是系统进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。进行资源分配和调度的一个独立单位。 电脑基础知识计算机操作系统第二章进 程 管 理 2. 2. 进程的三种基本状态进程的三种基本状态进进程程执执行行时时的的间间断断性性决决定定了了进进程程可可能能具具有有多多种种状状
27、态态。事实上,运行中的进程可能具有以下三种基本状态。事实上,运行中的进程可能具有以下三种基本状态。1) 1) 就绪就绪(Ready)(Ready)状态状态当进程已分配到除当进程已分配到除CPU以外的所有必要资源后,只要以外的所有必要资源后,只要再获得再获得CPU,便可立即执行,进程这时的状态称为就绪状,便可立即执行,进程这时的状态称为就绪状态。态。 在一个系统中处于就绪状态的进程可能有多个,通常在一个系统中处于就绪状态的进程可能有多个,通常将它们排成一个队列,称为将它们排成一个队列,称为就绪队列就绪队列。 电脑基础知识计算机操作系统第二章进 程 管 理 2) 2) 执行状态执行状态进程已获得进
28、程已获得CPUCPU,其程序正在执行。,其程序正在执行。 在在单单处处理理机机系系统统中中,只只有有一一个个进进程程处处于于执执行行状状态态;在在多多处处理机系统中,则有多个进程处于执行状态。理机系统中,则有多个进程处于执行状态。电脑基础知识计算机操作系统第二章进 程 管 理 3) 3) 阻塞状态阻塞状态正在执行的进程由于发生某事件而暂时无法继续执行时,正在执行的进程由于发生某事件而暂时无法继续执行时,便放弃处理机而处于暂停状态,亦即进程的执行受到阻塞,把便放弃处理机而处于暂停状态,亦即进程的执行受到阻塞,把这种暂停状态称为这种暂停状态称为阻塞状态阻塞状态,有时也称为,有时也称为等待状态等待状
29、态或或封锁状态封锁状态。 致使进程阻塞的典型事件有:请求致使进程阻塞的典型事件有:请求I/O,申请缓冲空间等。,申请缓冲空间等。 通常将这种处于阻塞状态的进程也排成通常将这种处于阻塞状态的进程也排成一个队列一个队列。有的系。有的系统则根据阻塞原因的不同而把处于阻塞状态的进程排成统则根据阻塞原因的不同而把处于阻塞状态的进程排成多个队多个队列列。 电脑基础知识计算机操作系统第二章进 程 管 理 图图2-5 进程的三种基本状态及其转换进程的三种基本状态及其转换 电脑基础知识计算机操作系统第二章进 程 管 理 3. 3. 挂起状态挂起状态1) 1) 引入挂起状态的原因引入挂起状态的原因在在不不少少系系
30、统统中中进进程程只只有有上上述述三三种种状状态态,但但在在另另一一些些系系统统中中,又增加了一些新状态,最重要的是挂起状态。又增加了一些新状态,最重要的是挂起状态。电脑基础知识计算机操作系统第二章进 程 管 理 引入挂起状态的原因有:引入挂起状态的原因有:(1) 终端用户的请求。终端用户的请求。 当终端用户在自己的程序运行期间发现有可疑问题时,希当终端用户在自己的程序运行期间发现有可疑问题时,希望暂时使自己的程序静止下来。望暂时使自己的程序静止下来。 亦即,使正在执行的进程暂停执行;亦即,使正在执行的进程暂停执行; 若此时用户进程正处于就绪状态而未执行,则该进程暂不若此时用户进程正处于就绪状态
31、而未执行,则该进程暂不接受调度,以便用户研究其执行情况或对程序进行修改。我们接受调度,以便用户研究其执行情况或对程序进行修改。我们把这种静止状态称为把这种静止状态称为挂起状态挂起状态。 电脑基础知识计算机操作系统第二章进 程 管 理 (2) (2) 父进程请求。父进程请求。 有有时时父父进进程程希希望望挂挂起起自自己己的的某某个个子子进进程程,以以便便考考查查和和修修改该子进程,或者协调各子进程间的活动。改该子进程,或者协调各子进程间的活动。(3) (3) 负荷调节的需要。负荷调节的需要。 当当实实时时系系统统中中的的工工作作负负荷荷较较重重,已已可可能能影影响响到到对对实实时时任任务务的的控
32、控制制时时,可可由由系系统统把把一一些些不不重重要要的的进进程程挂挂起起,以以保保证证系系统能正常运行。统能正常运行。(4) 操作系统的需要。操作系统的需要。 操作系统有时希望挂起某些进程,以便检查运行中的资操作系统有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账。源使用情况或进行记账。 电脑基础知识计算机操作系统第二章进 程 管 理 2) 2) 进程状态的转换进程状态的转换在在引引入入挂挂起起状状态态后后,又又将将增增加加从从挂挂起起状状态态( (又又称称为为静静止止状状态态) )到到非非挂挂起起状状态态( (又又称称为为活活动动状状态态) )的的转转换换;或或者者相相反反。可可
33、有有以下几种情况:以下几种情况:(1) 活动就绪活动就绪静止就绪。静止就绪。 当进程处于未被挂起的就绪状态时,称此为当进程处于未被挂起的就绪状态时,称此为活动就绪状活动就绪状态态,表示为,表示为Readya。当用挂起原语。当用挂起原语Suspend将该进程挂起后,将该进程挂起后,该进程便转变为该进程便转变为静止就绪状态静止就绪状态,表示为,表示为Readys,处于,处于Readys状态的进程不再被调度执行。状态的进程不再被调度执行。 电脑基础知识计算机操作系统第二章进 程 管 理 图 2-6具有挂起状态的进程状态图 电脑基础知识计算机操作系统第二章进 程 管 理 (2) (2) 活活动动阻阻塞
34、塞静静止止阻阻塞塞。当当进进程程处处于于未未被被挂挂起起的的阻阻塞塞状状态态时时,称称它它是是处处于于活活动动阻阻塞塞状状态态,表表示示为为BlockedaBlockeda。当当用用SuspendSuspend原原语语将将它它挂挂起起后后,进进程程便便转转变变为为静静止止阻阻塞塞状状态态,表表示示为为BlockedsBlockeds。处处于于该该状状态态的的进进程程在在其其所所期期待待的的事事件件出出现现后后,将将从静止阻塞变为静止就绪从静止阻塞变为静止就绪。(3) (3) 静静止止就就绪绪活活动动就就绪绪。处处于于ReadysReadys状状态态的的进进程程,若若用激活原语用激活原语Acti
35、veActive激活后,该进程将转变为激活后,该进程将转变为ReadyaReadya状态。状态。(4) 静止阻塞静止阻塞活动阻塞。处于活动阻塞。处于Blockeds状态的进程,若状态的进程,若用激活原语用激活原语Active激活后,该进程将转变为激活后,该进程将转变为Blockeda状态。状态。图图2-6示出了具有挂起状态的进程状态图。示出了具有挂起状态的进程状态图。 电脑基础知识计算机操作系统第二章进 程 管 理 4 4创建状态和终止状态创建状态和终止状态1) 1) 创建状态创建状态创建一个进程一般要通过两个步骤:创建一个进程一般要通过两个步骤: 首先,为一个新进程创建首先,为一个新进程创建
36、PCB,并填写必要的管理信息;,并填写必要的管理信息; 其次,把该进程转入就绪状态并插入就绪队列之中。其次,把该进程转入就绪状态并插入就绪队列之中。电脑基础知识计算机操作系统第二章进 程 管 理 当当一一个个新新进进程程被被创创建建时时,系系统统已已为为其其分分配配了了PCB,填填写写了了进进程程标标识识等等信信息息,但但由由于于该该进进程程所所必必需需的的资资源源或或其其它它信信息息,如如主主存存资资源源尚尚未未分分配配等等,一一般般而而言言,此此时时的的进进程程已已拥拥有有了了自自己己的的PCB,但但进进程程自自身身还还未未进进入入主主存存,即即创创建建工工作作尚尚未未完完成成,进程还不能
37、被调度运行,其所处的状态就是进程还不能被调度运行,其所处的状态就是创建状态创建状态。 电脑基础知识计算机操作系统第二章进 程 管 理 引入创建状态,是为了保证进程的调度必须在创建工作引入创建状态,是为了保证进程的调度必须在创建工作完成后进行,以确保对进程控制块操作的完整性。完成后进行,以确保对进程控制块操作的完整性。 同时,创建状态的引入,也增加了管理的灵活性,操作同时,创建状态的引入,也增加了管理的灵活性,操作系统可以根据系统性能或主存容量的限制,推迟创建状态进系统可以根据系统性能或主存容量的限制,推迟创建状态进程的提交。程的提交。 对于处于创建状态的进程,获得了其所必需的资源,以对于处于创
38、建状态的进程,获得了其所必需的资源,以及对其及对其PCBPCB初始化工作完成后,初始化工作完成后,进程状态便可由创建状态转入进程状态便可由创建状态转入就绪状态。就绪状态。 电脑基础知识计算机操作系统第二章进 程 管 理 2) 2) 终止状态终止状态进程的终止也要通过两个步骤:进程的终止也要通过两个步骤: 首首先先等等待待操操作作系系统统进进行行善善后后处处理理,然然后后将将其其PCBPCB清清零零,并将并将PCBPCB空间返还系统。空间返还系统。电脑基础知识计算机操作系统第二章进 程 管 理 当当一一个个进进程程到到达达了了自自然然结结束束点点,或或是是出出现现了了无无法法克克服服的的错错误误
39、,或或是是被被操操作作系系统统所所终终结结,或或是是被被其其他他有有终终止止权权的的进进程程所终结,它将进入所终结,它将进入终止状态终止状态。 进进入入终终止止态态的的进进程程以以后后不不能能再再执执行行,但但在在操操作作系系统统中中依依然然保保留留一一个个记记录录,其其中中保保存存状状态态码码和和一一些些计计时时统统计计数数据据,供供其其它它进进程程收收集集。一一旦旦其其它它进进程程完完成成了了对对终终止止状状态态进进程程的的信信息息提取之后,操作系统将删除该进程。提取之后,操作系统将删除该进程。图图2-7示出了增加了创建状态和终止状态后,进程的三种示出了增加了创建状态和终止状态后,进程的三
40、种基本状态及转换图衍变为五种状态及转换关系图。基本状态及转换图衍变为五种状态及转换关系图。 电脑基础知识计算机操作系统第二章进 程 管 理 图2-7 进程的五种基本状态及转换 电脑基础知识计算机操作系统第二章进 程 管 理 图图2-8 具有创建、终止和挂起状态的进程状态图具有创建、终止和挂起状态的进程状态图 电脑基础知识计算机操作系统第二章进 程 管 理 如如图图2-82-8所所示示,引引进进创创建建和和终终止止状状态态后后,在在进进程程状状态态转转换换时时,相相比比较较图图2-72-7所所示示的的进进程程五五状状态态转转换换而而言言,需需要要增增加加考考虑虑下面的几种情况。下面的几种情况。(
41、1) NULL(1) NULL创建:创建: 一个新进程产生时,该进程处于创建状态。一个新进程产生时,该进程处于创建状态。(2) 创建创建活动就绪:活动就绪: 在当前系统的性能和内存的容量均允许的情况下,完成在当前系统的性能和内存的容量均允许的情况下,完成对进程创建的必要操作后,相应的系统进程将进程的状态转对进程创建的必要操作后,相应的系统进程将进程的状态转换为活动就绪状态。换为活动就绪状态。 电脑基础知识计算机操作系统第二章进 程 管 理 (3) (3) 创建创建静止就绪:静止就绪: 考考虑虑到到系系统统当当前前资资源源状状况况和和性性能能要要求求,并并不不分分配配给给新新建建进进程程所所需需
42、资资源源,主主要要是是主主存存资资源源,相相应应的的系系统统进进程程将将进进程程状状态态转转为为静静止止就就绪绪状状态态,对对换换到到外外存存,不不再再参参与与调调度度,此时进程创建工作尚未完成。此时进程创建工作尚未完成。(4) 执行执行终止:终止: 当一个进程到达了自然结束点,或是出现了无法克服当一个进程到达了自然结束点,或是出现了无法克服的错误,或是被操作系统所终结,或是被其他有终止权的的错误,或是被操作系统所终结,或是被其他有终止权的进程所终结,进程即进进程所终结,进程即进终止状态终止状态。 电脑基础知识计算机操作系统第二章进 程 管 理 2.1.52.1.5进程控制块进程控制块1 1进
43、程控制块的作用进程控制块的作用为了描述和控制进程的运行,系统为每个进程定义了一个为了描述和控制进程的运行,系统为每个进程定义了一个数据结构数据结构进程控制块进程控制块PCB(Process Control Block),它是进,它是进程实体的一部分,是操作系统中最重要的记录型数据结构。程实体的一部分,是操作系统中最重要的记录型数据结构。 PCB中记录了操作系统所需的、用于描述进程的当前情况中记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息。以及控制进程运行的全部信息。 进程控制块的作用进程控制块的作用是使一个在多道程序环境下不能独立运是使一个在多道程序环境下不能独立运行的
44、程序行的程序(含数据含数据),成为成为一个能独立运行的基本单位,一个能一个能独立运行的基本单位,一个能与其它进程与其它进程并发执行并发执行的进程。的进程。电脑基础知识计算机操作系统第二章进 程 管 理 或者说,或者说,OS是根据是根据PCB来对并发执行的进程进行控制和来对并发执行的进程进行控制和管理的。例如:管理的。例如:当当OS要调度某进程执行时,要从该进程的要调度某进程执行时,要从该进程的PCB中查出其现行中查出其现行状态及优先级;状态及优先级;在调度到某进程后,要根据其在调度到某进程后,要根据其PCB中所保存的处理机状态信中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据其息,设
45、置该进程恢复运行的现场,并根据其PCB中的程序和数中的程序和数据的内存始址,找到其程序和数据;据的内存始址,找到其程序和数据; 进程在执行过程中,当需要和与之合作的进程实现同步、通进程在执行过程中,当需要和与之合作的进程实现同步、通信或访问文件时,也都需要访问信或访问文件时,也都需要访问PCB;当进程由于某种原因而暂停执行时,又须将其断点的处理机当进程由于某种原因而暂停执行时,又须将其断点的处理机环境保存在环境保存在PCB中。中。电脑基础知识计算机操作系统第二章进 程 管 理 可见,在进程的整个生命期中,系统总是通过可见,在进程的整个生命期中,系统总是通过PCB对进程对进程进行控制的,亦即,进
46、行控制的,亦即,系统是根据进程的系统是根据进程的PCB而不是任何别的什而不是任何别的什么而感知到该进程的存在的么而感知到该进程的存在的。 所以说,所以说,PCB是进程存在的惟一标志。是进程存在的惟一标志。 电脑基础知识计算机操作系统第二章进 程 管 理 当系统创建一个新进程时,就为它建立了一个当系统创建一个新进程时,就为它建立了一个PCB;进;进程结束时又回收其程结束时又回收其PCB,进程于是也随之消亡。,进程于是也随之消亡。 PCB可以被操作系统中的多个模块读或修改,如被调度可以被操作系统中的多个模块读或修改,如被调度程序、资源分配程序、中断处理程序以及监督和分析程序等程序、资源分配程序、中
47、断处理程序以及监督和分析程序等读或修改。读或修改。 因为因为PCB经常被系统访问,尤其是被运行频率很高的进经常被系统访问,尤其是被运行频率很高的进程及分派程序访问,故程及分派程序访问,故PCB应常驻内存。应常驻内存。电脑基础知识计算机操作系统第二章进 程 管 理 系统将所有的系统将所有的PCB组织成若干个链表组织成若干个链表(或队列或队列),存放在,存放在操作系统中专门开辟的操作系统中专门开辟的PCB区内。区内。 例如在例如在Linux系统中用系统中用task_struct数据结构来描述每个进数据结构来描述每个进程的进程控制块,在程的进程控制块,在Windows操作系统中则使用一个执行体操作系
48、统中则使用一个执行体进程块进程块(EPROCESS)来表示进程对象的基本属性。来表示进程对象的基本属性。 电脑基础知识计算机操作系统第二章进 程 管 理 2 2进程控制块中的信息进程控制块中的信息1) 1) 进程标识符进程标识符进进程程标标识识符符用用于于惟惟一一地地标标识识一一个个进进程程。一一个个进进程程通通常常有有两两种标识符:种标识符:(1)(1)内内部部标标识识符符。在在所所有有的的操操作作系系统统中中,都都为为每每一一个个进进程程赋赋予予了了一一个个惟惟一一的的数数字字标标识识符符,它它通通常常是是一一个个进进程程的的序序号号。设设置内部标识符主要是为了方便系统使用。置内部标识符主
49、要是为了方便系统使用。(2) 外部标识符外部标识符。它由创建者提供,通常是由字母、数字。它由创建者提供,通常是由字母、数字组成,往往是由用户组成,往往是由用户(进程进程)在访问该进程时使用。在访问该进程时使用。 为了描述进程的家族关系,还应设置为了描述进程的家族关系,还应设置父进程标识父进程标识及及子进程子进程标识标识。此外,还可设置。此外,还可设置用户标识用户标识,以指示拥有该进程的用户。,以指示拥有该进程的用户。 电脑基础知识计算机操作系统第二章进 程 管 理 2) 2) 处理机状态处理机状态处理机状态信息主要是由处理机的各种寄存器中的内容处理机状态信息主要是由处理机的各种寄存器中的内容组
50、成的。组成的。 处理机在运行时,许多信息都放在寄存器中。处理机在运行时,许多信息都放在寄存器中。 当处理机被中断时,所有这些信息都必须保存在当处理机被中断时,所有这些信息都必须保存在PCB中,中,以便在该进程重新执行时,能从断点继续执行。以便在该进程重新执行时,能从断点继续执行。电脑基础知识计算机操作系统第二章进 程 管 理 这些寄存器包括:这些寄存器包括: 通通用用寄寄存存器器,又又称称为为用用户户可可视视寄寄存存器器,它它们们是是用用户户程程序序可可以以访访问问的的,用用于于暂暂存存信信息息,在在大大多多数数处处理理机机中中,有有 832个个通通用寄存器,在用寄存器,在RISC结构的计算机
51、中可超过结构的计算机中可超过100个;个; 指令计数器,其中存放了要访问的下一条指令的地址;指令计数器,其中存放了要访问的下一条指令的地址; 程程序序状状态态字字PSW,其其中中含含有有状状态态信信息息,如如条条件件码码、执执行行方方式、中断屏蔽标志等;式、中断屏蔽标志等; 用用户户栈栈指指针针,指指每每个个用用户户进进程程都都有有一一个个或或若若干干个个与与之之相相关关的的系系统统栈栈,用用于于存存放放过过程程和和系系统统调调用用参参数数及及调调用用地地址址,栈栈指指针指向该栈的栈顶。针指向该栈的栈顶。 电脑基础知识计算机操作系统第二章进 程 管 理 3) 3) 进程调度信息进程调度信息在在
52、PCB中还存放一些与进程调度和进程对换有关的信息,中还存放一些与进程调度和进程对换有关的信息,包括:包括: 进程状态,指明进程的当前状态,作为进程调度和对换时进程状态,指明进程的当前状态,作为进程调度和对换时的依据;的依据; 进程优先级,用于描述进程使用处理机的优先级别的一个进程优先级,用于描述进程使用处理机的优先级别的一个整数,优先级高的进程应优先获得处理机;整数,优先级高的进程应优先获得处理机;电脑基础知识计算机操作系统第二章进 程 管 理 进程调度所需的其它信息,它们与所采用的进程调度算法进程调度所需的其它信息,它们与所采用的进程调度算法有关,比如,进程已等待有关,比如,进程已等待CPU
53、的时间总和、进程已执行的时的时间总和、进程已执行的时间总和等;间总和等; 事件,指进程由执行状态转变为阻塞状态所等待发生的事事件,指进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因。件,即阻塞原因。 电脑基础知识计算机操作系统第二章进 程 管 理 4) 4) 进程控制信息进程控制信息进程控制信息包括:进程控制信息包括: 程序和数据的地址,指进程的程序和数据所在的内存或外程序和数据的地址,指进程的程序和数据所在的内存或外存地存地(首首)址,以便再调度到该进程执行时,能从址,以便再调度到该进程执行时,能从PCB中找到其中找到其程序和数据;程序和数据; 进程同步和通信机制,指实现进程同步和进
54、程通信时必需进程同步和通信机制,指实现进程同步和进程通信时必需的机制,如消息队列指针、信号量等,它们可能全部或部分的机制,如消息队列指针、信号量等,它们可能全部或部分地放在地放在PCB中;中;电脑基础知识计算机操作系统第二章进 程 管 理 资资源源清清单单,即即一一张张列列出出了了除除CPU以以外外的的、进进程程所所需需的的全全部部资源及已经分配到该进程的资源的清单;资源及已经分配到该进程的资源的清单; 链链接接指指针针,它它给给出出了了本本进进程程(PCB)所所在在队队列列中中的的下下一一个个进进程的程的PCB的首地址。的首地址。 电脑基础知识计算机操作系统第二章进 程 管 理 3. 3.
55、进程控制块的组织方式进程控制块的组织方式1) 1) 链接方式链接方式这是把具有同一状态的这是把具有同一状态的PCB,用其中的链接字链接成一,用其中的链接字链接成一个队列。这样,可以形成个队列。这样,可以形成就绪队列就绪队列、若干个阻塞队列若干个阻塞队列和和空白空白队列队列等。等。 对其中的就绪队列对其中的就绪队列常按进程优先级的高低排列常按进程优先级的高低排列,把优先,把优先级高的进程的级高的进程的PCB排在队列前面。排在队列前面。 此外,也可根据阻塞原因的不同而把处于阻塞状态的进此外,也可根据阻塞原因的不同而把处于阻塞状态的进程的程的PCB排成等待排成等待I/O操作完成的队列和等待分配内存的
56、队列操作完成的队列和等待分配内存的队列等。图等。图2-9示出了一种链接队列的组织方式。示出了一种链接队列的组织方式。 电脑基础知识计算机操作系统第二章进 程 管 理 图 2-9PCB链接队列示意图电脑基础知识计算机操作系统第二章进 程 管 理 2) 2) 索引方式索引方式系统根据所有进程的状态建立几张索引表。系统根据所有进程的状态建立几张索引表。 例如,就绪索引表、阻塞索引表等,并把各索引表在例如,就绪索引表、阻塞索引表等,并把各索引表在内存的首地址记录在内存的一些专用单元中。内存的首地址记录在内存的一些专用单元中。 在每个索引表的表目中,记录具有相应状态的某个在每个索引表的表目中,记录具有相
57、应状态的某个PCB在在PCB表中的地址。表中的地址。 图图2-10示出了索引方式的示出了索引方式的PCB组织。组织。 电脑基础知识计算机操作系统第二章进 程 管 理 图 2-10按索引方式组织PCB 电脑基础知识计算机操作系统第二章进 程 管 理 2.2进进 程程 控控 制制 进程控制是进程管理中最基本的功能。进程控制是进程管理中最基本的功能。它用于创建一个它用于创建一个新进程,终止一个已完成的进程,或终止一个因出现某事件新进程,终止一个已完成的进程,或终止一个因出现某事件而使其无法运行下去的进程,还可负责进程运行中的状态转而使其无法运行下去的进程,还可负责进程运行中的状态转换。换。 如当一个
58、正在执行的进程因等待某事件而暂时不能继续如当一个正在执行的进程因等待某事件而暂时不能继续执行时,将其转换为阻塞状态,而当该进程所期待的事件出执行时,将其转换为阻塞状态,而当该进程所期待的事件出现时,又将该进程转换为就绪状态等等。现时,又将该进程转换为就绪状态等等。 进程控制一般是由进程控制一般是由OS的内核中的原语来实现的的内核中的原语来实现的。 电脑基础知识计算机操作系统第二章进 程 管 理 原语原语(Primitive)是由若干条指令组成的,用于完成一定是由若干条指令组成的,用于完成一定功能的一个过程。功能的一个过程。 它与一般过程的区别在于:它们是它与一般过程的区别在于:它们是“原子操作
59、原子操作(Action Operation)”。 所谓所谓原子操作原子操作,是指一个操作中的所有动作要么全做,是指一个操作中的所有动作要么全做,要么全不做。换言之,它是一个不可分割的基本单位,因此,要么全不做。换言之,它是一个不可分割的基本单位,因此,在执行过程中不允许被中断。在执行过程中不允许被中断。 原子操作在管态下执行,常驻内存。原子操作在管态下执行,常驻内存。 电脑基础知识计算机操作系统第二章进 程 管 理 2.2.12.2.1进程的创建进程的创建1 1进程图进程图(Process Graph)(Process Graph)进程图是用于描述一个进程的家族关系的有向树进程图是用于描述一个
60、进程的家族关系的有向树,如图,如图2-11所示。所示。 图中的结点图中的结点(圆圈圆圈)代表进程。在进程代表进程。在进程D创建了进程创建了进程I之后,之后,称称D是是I的的父进程父进程(Parent Process),I是是D的的子进程子进程(Progeny Process)。 电脑基础知识计算机操作系统第二章进 程 管 理 图2-11 进程树 电脑基础知识计算机操作系统第二章进 程 管 理 2 2引起创建进程的事件引起创建进程的事件在在多多道道程程序序环环境境中中,只只有有( (作作为为) )进进程程( (时时) )才才能能在在系系统统中中运运行行。因因此此,为为使使程程序序能能运运行行,就
61、就必必须须为为它它创创建建进进程程。导导致致一个进程去创建另一个进程的典型事件,可有以下四类:一个进程去创建另一个进程的典型事件,可有以下四类:(1)(1)用用户户登登录录。在在分分时时系系统统中中,用用户户在在终终端端键键入入登登录录命命令令后后,如如果果是是合合法法用用户户,系系统统将将为为该该终终端端建建立立一一个个进进程程,并并把把它插入就绪队列中。它插入就绪队列中。(2) 作业调度作业调度。在批处理系统中,当作业调度程序按一定。在批处理系统中,当作业调度程序按一定的算法调度到某作业时,便将该作业装入内存,为它分配必的算法调度到某作业时,便将该作业装入内存,为它分配必要的资源,并立即为
62、它创建进程,再插入就绪队列中。要的资源,并立即为它创建进程,再插入就绪队列中。 电脑基础知识计算机操作系统第二章进 程 管 理 (3) 提供服务提供服务。 当运行中的用户程序提出某种请求后,系统将专门创建当运行中的用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需要的服务,例如,用户程序要求进一个进程来提供用户所需要的服务,例如,用户程序要求进行文件打印,操作系统将为它创建一个行文件打印,操作系统将为它创建一个打印进程打印进程,这样,不,这样,不仅可使打印进程与该用户进程并发执行,而且还便于计算出仅可使打印进程与该用户进程并发执行,而且还便于计算出为完成打印任务所花费的时间。为完成打
63、印任务所花费的时间。 电脑基础知识计算机操作系统第二章进 程 管 理 (4) 应用请求应用请求。 在上述三种情况下,都是由系统内核为它创建一个新进在上述三种情况下,都是由系统内核为它创建一个新进程;而第程;而第4类事件则是基于应用进程的需求,由它自己创建类事件则是基于应用进程的需求,由它自己创建一个新进程,以便使新进程以并发运行方式完成特定任务。一个新进程,以便使新进程以并发运行方式完成特定任务。 例如,某应用程序需要不断地从键盘终端输入数据,继例如,某应用程序需要不断地从键盘终端输入数据,继而又要对输入数据进行相应的处理,然后,再将处理结果以而又要对输入数据进行相应的处理,然后,再将处理结果
64、以表格形式在屏幕上显示。表格形式在屏幕上显示。 该应用进程为使这几个操作能并发执行,以加速任务的该应用进程为使这几个操作能并发执行,以加速任务的完成,完成,可以分别建立键盘输入进程、表格输出进程可以分别建立键盘输入进程、表格输出进程。 电脑基础知识计算机操作系统第二章进 程 管 理 3 3进程的创建进程的创建(Creation of Process)(Creation of Process)一一旦旦操操作作系系统统发发现现了了要要求求创创建建新新进进程程的的事事件件后后,便便调调用用进程创建原语进程创建原语Creat( )Creat( )按下述步骤创建一个新进程。按下述步骤创建一个新进程。(1
65、) 申请空白申请空白PCB。为新进程申请获得惟一的数字标识符,。为新进程申请获得惟一的数字标识符,并从并从PCB集合中索取一个空白集合中索取一个空白PCB。 电脑基础知识计算机操作系统第二章进 程 管 理 (2) 为新进程分配资源。为新进程分配资源。 为新进程的程序和数据以及用户栈分配必要的内存空间。为新进程的程序和数据以及用户栈分配必要的内存空间。显然,此时操作系统必须知道新进程所需内存的大小。显然,此时操作系统必须知道新进程所需内存的大小。 对于批处理作业对于批处理作业,其大小可在用户提出创建进程要求时,其大小可在用户提出创建进程要求时提供。提供。若是为应用进程创建子进程若是为应用进程创建
66、子进程,也应是在该进程提出创,也应是在该进程提出创建进程的请求中给出所需内存的大小。建进程的请求中给出所需内存的大小。对于交互型作业对于交互型作业,用,用户可以不给出内存要求而由系统分配一定的空间。户可以不给出内存要求而由系统分配一定的空间。 如果新进程要如果新进程要共享某个已在内存的地址空间共享某个已在内存的地址空间(即已装入内即已装入内存的共享段存的共享段),则必须建立相应的链接。,则必须建立相应的链接。 电脑基础知识计算机操作系统第二章进 程 管 理 (3) (3) 初始化进程控制块。初始化进程控制块。 PCBPCB的的初初始始化化包包括括: 初初始始化化标标识识信信息息,将将系系统统分
67、分配配的的标标识识符符和和父父进进程程标标识识符符填填入入新新PCBPCB中中; 初初始始化化处处理理机机状状态态信信息息,使使程程序序计计数数器器指指向向程程序序的的入入口口地地址址,使使栈栈指指针针指指向向栈栈顶顶; 初初始始化化处处理理机机控控制制信信息息,将将进进程程的的状状态态设设置置为为就就绪绪状状态态或或静静止止就就绪绪状状态态,对对于于优优先先级级,通通常常是是将将它它设设置置为为最最低低优先级,除非用户以显式方式提出高优先级要求。优先级,除非用户以显式方式提出高优先级要求。(4) 将新进程插入就绪队列将新进程插入就绪队列 如果进程就绪队列能够接纳新进程,便将新进程插入就如果进
68、程就绪队列能够接纳新进程,便将新进程插入就绪队列。绪队列。 电脑基础知识计算机操作系统第二章进 程 管 理 2.2.22.2.2进程的终止进程的终止1 1引起进程终止的事件引起进程终止的事件1) 1) 正常结束正常结束在任何计算机系统中,都应有一个用于表示进程已经运在任何计算机系统中,都应有一个用于表示进程已经运行完成的指示。行完成的指示。 例如,在批处理系统中,通常在程序的最后安排一条例如,在批处理系统中,通常在程序的最后安排一条Halt指令或终止的系统调用。当程序运行到指令或终止的系统调用。当程序运行到Halt指令时,将指令时,将产生一个中断,去通知产生一个中断,去通知OS本进程已经完成。
69、本进程已经完成。 在分时系统中,用户可利用在分时系统中,用户可利用Logs off去表示进程运行完去表示进程运行完毕,此时同样可产生一个中断,去通知毕,此时同样可产生一个中断,去通知OS进程已运行完毕。进程已运行完毕。 电脑基础知识计算机操作系统第二章进 程 管 理 2) 2) 异常结束异常结束在进程运行期间,由于出现某些错误和故障而迫使进程终在进程运行期间,由于出现某些错误和故障而迫使进程终止止(Termination of Process)(Termination of Process)。这类异常事件很多,常见的有。这类异常事件很多,常见的有下述几种:下述几种:(1)(1)越界错误。这是指
70、程序所访问的存储区已越出该进程越界错误。这是指程序所访问的存储区已越出该进程的区域。的区域。(2)(2)保护错。这是指进程试图去访问一个不允许访问的资保护错。这是指进程试图去访问一个不允许访问的资源或文件,或者以不适当的方式进行访问,例如,进程试图去源或文件,或者以不适当的方式进行访问,例如,进程试图去写一个只读文件。写一个只读文件。(3) 非法指令。这是指程序试图去执行一条不存在的指令。非法指令。这是指程序试图去执行一条不存在的指令。出现该错误的原因,可能是程序错误地转移到数据区,把数据出现该错误的原因,可能是程序错误地转移到数据区,把数据当成了指令。当成了指令。 电脑基础知识计算机操作系统
71、第二章进 程 管 理 (4)(4)特特权权指指令令错错。这这是是指指用用户户进进程程试试图图去去执执行行一一条条只只允允许许OSOS执行的指令。执行的指令。(5)(5)运运行行超超时时。这这是是指指进进程程的的执执行行时时间间超超过过了了指指定定的的最最大大值。值。(6)(6)等等待待超超时时。这这是是指指进进程程等等待待某某事事件件的的时时间间超超过过了了规规定定的最大值。的最大值。(7)(7)算算术术运运算算错错。这这是是指指进进程程试试图图去去执执行行一一个个被被禁禁止止的的运运算,例如被算,例如被0 0除。除。(8) I/O故障。这是指在故障。这是指在I/O过程中发生了错误等。过程中发
72、生了错误等。 电脑基础知识计算机操作系统第二章进 程 管 理 3) 3) 外界干预外界干预外外界界干干预预并并非非指指在在本本进进程程运运行行中中出出现现了了异异常常事事件件,而而是是指进程应外界的请求而终止运行。这些干预有:指进程应外界的请求而终止运行。这些干预有:(1)(1)操操作作员员或或操操作作系系统统干干预预。由由于于某某种种原原因因,例例如如,发发生生了死锁,由操作员或操作系统终止该进程。了死锁,由操作员或操作系统终止该进程。(2)(2)父父进进程程请请求求。由由于于父父进进程程具具有有终终止止自自己己的的任任何何子子孙孙进进程的权力,因而当父进程提出请求时,系统将终止该进程。程的
73、权力,因而当父进程提出请求时,系统将终止该进程。(3) 父进程终止。当父进程终止时,父进程终止。当父进程终止时,OS也将它的所有子也将它的所有子孙进程终止。孙进程终止。 电脑基础知识计算机操作系统第二章进 程 管 理 2 2进程的终止过程进程的终止过程如如果果系系统统中中发发生生了了上上述述要要求求终终止止进进程程的的某某事事件件,OSOS便便调调用进程终止原语,按下述过程去终止指定的进程。用进程终止原语,按下述过程去终止指定的进程。(1)(1)根根据据被被终终止止进进程程的的标标识识符符,从从PCBPCB集集合合中中检检索索出出该该进进程的程的PCBPCB,从中读出该进程的状态。,从中读出该
74、进程的状态。(2) 若被终止进程正处于执行状态,应立即终止该进程若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度。新进行调度。 电脑基础知识计算机操作系统第二章进 程 管 理 (3)(3)若若该该进进程程还还有有子子孙孙进进程程,还还应应将将其其所所有有子子孙孙进进程程予予以终止,以防它们成为不可控的进程。以终止,以防它们成为不可控的进程。(4)(4)将将被被终终止止进进程程所所拥拥有有的的全全部部资资源源,或或者者归归还还给给其其父父进程,或者归还给系统。进程,或者归还给系统。(5)
75、 将被终止进程将被终止进程(PCB)从所在队列从所在队列(或链表或链表)中移出,等中移出,等待其他程序来搜集信息。待其他程序来搜集信息。 电脑基础知识计算机操作系统第二章进 程 管 理 2.2.32.2.3进程的阻塞与唤醒进程的阻塞与唤醒1. 1. 引起进程阻塞和唤醒的事件引起进程阻塞和唤醒的事件有下述几类事件会引起进程阻塞或被唤醒。有下述几类事件会引起进程阻塞或被唤醒。1)1)请求系统服务请求系统服务当正在执行的进程请求操作系统提供服务时,当正在执行的进程请求操作系统提供服务时,由于某种由于某种原因,操作系统并不立即满足该进程的要求时,该进程只能原因,操作系统并不立即满足该进程的要求时,该进
76、程只能转变为阻塞状态来等待。转变为阻塞状态来等待。例如,一进程请求使用某资源,如例如,一进程请求使用某资源,如打印机,由于系统已将打印机分配给其他进程而不能分配给打印机,由于系统已将打印机分配给其他进程而不能分配给请求进程,这时请求者进程只能被阻塞,仅在其他进程在释请求进程,这时请求者进程只能被阻塞,仅在其他进程在释放出打印机的同时,才将请求进程唤醒。放出打印机的同时,才将请求进程唤醒。 电脑基础知识计算机操作系统第二章进 程 管 理 2)2)启动某种操作启动某种操作当进程启动某种操作后,如果该进程必须在该操作完成当进程启动某种操作后,如果该进程必须在该操作完成之后才能继续执行,则必须先使该进
77、程阻塞,以等待该操作之后才能继续执行,则必须先使该进程阻塞,以等待该操作完成。完成。 例如,进程启动了某例如,进程启动了某I/O设备,如果只有在设备,如果只有在I/O设备完成设备完成了指定的了指定的I/O操作任务后进程才能继续执行,则该进程在启动操作任务后进程才能继续执行,则该进程在启动了了I/O操作后,便自动进入阻塞状态去等待。在操作后,便自动进入阻塞状态去等待。在I/O操作完成操作完成后,再由中断处理程序或中断进程将该进程唤醒。后,再由中断处理程序或中断进程将该进程唤醒。 电脑基础知识计算机操作系统第二章进 程 管 理 3)3)新数据尚未到达新数据尚未到达对于相互合作的进程,如果其中一个进
78、程需要先获得另对于相互合作的进程,如果其中一个进程需要先获得另一一(合作合作)进程提供的数据后才能对数据进行处理,则只要其进程提供的数据后才能对数据进行处理,则只要其所需数据尚未到达,该进程只有所需数据尚未到达,该进程只有(等待等待)阻塞。阻塞。 例如,有两个进程,进程例如,有两个进程,进程A用于输入数据,进程用于输入数据,进程B对输对输入数据进行加工。假如入数据进行加工。假如A尚未将数据输入完毕,则进程尚未将数据输入完毕,则进程B将将因没有所需的处理数据而阻塞;一旦进程因没有所需的处理数据而阻塞;一旦进程A把数据输入完毕,把数据输入完毕,便可去唤醒进程便可去唤醒进程B。 电脑基础知识计算机操
79、作系统第二章进 程 管 理 4)4)无新工作可做无新工作可做系统往往设置一些具有某特定功能的系统进程,每当这系统往往设置一些具有某特定功能的系统进程,每当这种进程完成任务后,便把自己阻塞起来以等待新任务到来。种进程完成任务后,便把自己阻塞起来以等待新任务到来。 例如,系统中的发送进程,其主要工作是发送数据,若例如,系统中的发送进程,其主要工作是发送数据,若已有的数据已全部发送完成而又无新的发送请求,这时已有的数据已全部发送完成而又无新的发送请求,这时(发送发送)进程将使自己进入阻塞状态;进程将使自己进入阻塞状态; 仅当又有进程提出新的发送请仅当又有进程提出新的发送请求时,才将发送进程唤醒。求时
80、,才将发送进程唤醒。 电脑基础知识计算机操作系统第二章进 程 管 理 2 2进程阻塞过程进程阻塞过程正在执行的进程,当发现上述某事件时,由于无法继续正在执行的进程,当发现上述某事件时,由于无法继续执行,于是执行,于是进程便通过调用阻塞原语进程便通过调用阻塞原语block把自己阻塞把自己阻塞。可见,。可见,进程的阻塞是进程自身的一种主动行为进程的阻塞是进程自身的一种主动行为。电脑基础知识计算机操作系统第二章进 程 管 理 进进入入block过过程程后后,由由于于此此时时该该进进程程还还处处于于执执行行状状态态,所所以以应应先先立立即即停停止止执执行行,把把进进程程控控制制块块中中的的现现行行状状
81、态态由由“执执行行”改为改为“阻塞阻塞”,并将,并将PCB插入阻塞队列。插入阻塞队列。 如如果果系系统统中中设设置置了了因因不不同同事事件件而而阻阻塞塞的的多多个个阻阻塞塞队队列列,则应将本进程插入到具有相同事件的阻塞则应将本进程插入到具有相同事件的阻塞(等待等待)队列。队列。 最最后后,转转调调度度程程序序进进行行重重新新调调度度,将将处处理理机机分分配配给给另另一一就就绪绪进进程程并并进进行行切切换换,亦亦即即,保保留留被被阻阻塞塞进进程程的的处处理理机机状状态态(在在PCB中中),再再按按新新进进程程的的PCB中中的的处处理理机机状状态态设设置置CPU的的环境。环境。 电脑基础知识计算机
82、操作系统第二章进 程 管 理 3 3进程唤醒过程进程唤醒过程当当被被阻阻塞塞进进程程所所期期待待的的事事件件出出现现时时,如如I/OI/O完完成成或或其其所所期期待待的的数数据据已已经经到到达达,则则由由有有关关进进程程( (比比如如用用完完并并释释放放了了该该I/OI/O设设备备的的进进程程) )调调用用唤唤醒醒原原语语wakeup( wakeup( ) ),将将等等待待该该事事件件的的进进程程唤醒。唤醒。 唤醒原语执行的过程是唤醒原语执行的过程是: :(1)(1)首先把被阻塞的进程从等待该事件的阻塞队列中移出,首先把被阻塞的进程从等待该事件的阻塞队列中移出,(2)(2)将其将其PCBPCB
83、中的现行状态由阻塞改为就绪,中的现行状态由阻塞改为就绪,(3)(3)然后再将该然后再将该PCBPCB插入到就绪队列中。插入到就绪队列中。电脑基础知识计算机操作系统第二章进 程 管 理 应当指出,应当指出,block原语和原语和wakeup原语是一对作用刚好相原语是一对作用刚好相反的原语。反的原语。 因此,因此,如果在某进程中调用了阻塞原语,则必须在与之如果在某进程中调用了阻塞原语,则必须在与之相合作的另一进程中或其他相关的进程中安排唤醒原语,以相合作的另一进程中或其他相关的进程中安排唤醒原语,以能唤醒阻塞进程;能唤醒阻塞进程;否则,被阻塞进程将会因不能被唤醒而长否则,被阻塞进程将会因不能被唤醒
84、而长久地处于阻塞状态,从而再无机会继续运行。久地处于阻塞状态,从而再无机会继续运行。 电脑基础知识计算机操作系统第二章进 程 管 理 2.2.42.2.4进程的挂起与激活进程的挂起与激活1 1进程的挂起进程的挂起当出现了引起进程挂起的事件时,比如,用户进程当出现了引起进程挂起的事件时,比如,用户进程请求请求将自己挂起,或父进程将自己挂起,或父进程请求请求将自己的某个子进程挂起,系统将自己的某个子进程挂起,系统将利用挂起原语将利用挂起原语suspend( )将指定进程或处于阻塞状态的进程将指定进程或处于阻塞状态的进程挂起。挂起。电脑基础知识计算机操作系统第二章进 程 管 理 挂起原语的执行过程是
85、:挂起原语的执行过程是: 首首先先检检查查被被挂挂起起进进程程的的状状态态,若若处处于于活活动动就就绪绪状状态态,便便将将其其改改为为静静止止就就绪绪;对对于于活活动动阻阻塞塞状状态态的的进进程程,则则将将之之改改为为静止阻塞。静止阻塞。 为为了了方方便便用用户户或或父父进进程程考考查查该该进进程程的的运运行行情情况况而而把把该该进进程的程的PCB复制到某指定的内存区域。复制到某指定的内存区域。 最最后后,若若被被挂挂起起的的进进程程正正在在执执行行,则则转转向向调调度度程程序序重重新新调度。调度。 电脑基础知识计算机操作系统第二章进 程 管 理 2 2进程的激活过程进程的激活过程当发生激活进
86、程的事件时,例如,父进程或用户进程请当发生激活进程的事件时,例如,父进程或用户进程请求激活指定进程,若该进程驻留在外存而内存中已有足够的求激活指定进程,若该进程驻留在外存而内存中已有足够的空间时,则可将在外存上处于静止就绪状态的该进程换入内空间时,则可将在外存上处于静止就绪状态的该进程换入内存。这时,系统将利用激活原语存。这时,系统将利用激活原语active( )将指定进程激活。将指定进程激活。电脑基础知识计算机操作系统第二章进 程 管 理 激激活活原原语语先先将将进进程程从从外外存存调调入入内内存存,检检查查该该进进程程的的现现行行状状态态,若若是是静静止止就就绪绪,便便将将之之改改为为活活
87、动动就就绪绪;若若为为静静止止阻阻塞塞,便将之改为活动阻塞。便将之改为活动阻塞。 假假如如采采用用的的是是抢抢占占调调度度策策略略,则则每每当当有有新新进进程程进进入入就就绪绪队队列列时时,应应检检查查是是否否要要进进行行重重新新调调度度,即即由由调调度度程程序序将将被被激激活活进进程程与与当当前前进进程程进进行行优优先先级级的的比比较较,如如果果被被激激活活进进程程的的优优先先级级更更低低,就就不不必必重重新新调调度度;否否则则,立立即即剥剥夺夺当当前前进进程程的的运运行,把处理机分配给刚被激活的进程。行,把处理机分配给刚被激活的进程。 电脑基础知识计算机操作系统第二章进 程 管 理 2.3
88、进进 程程 同同 步步 2.3.12.3.1进程同步的基本概念进程同步的基本概念1 1两种形式的制约关系两种形式的制约关系在在多多道道程程序序环环境境下下,当当程程序序并并发发执执行行时时,由由于于资资源源共共享享和和进进程程合合作作,使使同同处处于于一一个个系系统统中中的的诸诸进进程程之之间间可可能能存存在在着着以下两种形式的制约关系。以下两种形式的制约关系。电脑基础知识计算机操作系统第二章进 程 管 理 (1) 间接相互制约关系。间接相互制约关系。 同处于一个系统中的进程,通常都共享着某种系统资源,同处于一个系统中的进程,通常都共享着某种系统资源,如共享如共享CPU、共享、共享I/O设备等
89、。设备等。 所谓所谓间接相互制约间接相互制约即源于这种资源共享,例如,有两个即源于这种资源共享,例如,有两个进程进程A和和B,如果在,如果在A进程提出打印请求时,系统已将惟一的进程提出打印请求时,系统已将惟一的一台打印机分配给了进程一台打印机分配给了进程B,则此时进程,则此时进程A只能阻塞;一旦进只能阻塞;一旦进程程B将打印机释放,则将打印机释放,则A进程才能由阻塞改为就绪状态。进程才能由阻塞改为就绪状态。 电脑基础知识计算机操作系统第二章进 程 管 理 (2) 直接相互制约关系。直接相互制约关系。 这种制约主要源于进程间的合作。这种制约主要源于进程间的合作。 例如,有一输入进程例如,有一输入
90、进程A通过单缓冲向进程通过单缓冲向进程B提供数据。当提供数据。当该缓冲空时,计算进程因不能获得所需数据而阻塞,而当进该缓冲空时,计算进程因不能获得所需数据而阻塞,而当进程程A把数据输入缓冲区后,便将进程把数据输入缓冲区后,便将进程B唤醒;反之,当缓冲区唤醒;反之,当缓冲区已满时,进程已满时,进程A因不能再向缓冲区投放数据而阻塞,当进程因不能再向缓冲区投放数据而阻塞,当进程B将缓冲区数据取走后便可唤醒将缓冲区数据取走后便可唤醒A。 电脑基础知识计算机操作系统第二章进 程 管 理 2. 2. 临界资源临界资源在第一章中我们曾经介绍过,许多硬件资源如打印机、在第一章中我们曾经介绍过,许多硬件资源如打
91、印机、磁带机等,都属于磁带机等,都属于临界资源临界资源(Critical Resouce),诸进程间应,诸进程间应采取互斥方式,实现对这种资源的共享。下面我们将通过一采取互斥方式,实现对这种资源的共享。下面我们将通过一个简单的例子来说明这一过程。个简单的例子来说明这一过程。 电脑基础知识计算机操作系统第二章进 程 管 理 生产者生产者-消费者消费者(producer-consumer)问题是一个著名的进问题是一个著名的进程同步问题。程同步问题。 它描述的是:有它描述的是:有一群一群生产者进程在生产产品,并将这些生产者进程在生产产品,并将这些产品提供给消费者进程去消费。产品提供给消费者进程去消费
92、。 为使生产者进程与消费者进程能并发执行,在两者之间为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有设置了一个具有n个缓冲区的缓冲池,生产者进程将它所生产个缓冲区的缓冲池,生产者进程将它所生产的产品放入一个缓冲区中;消费者进程可从一个缓冲区中取的产品放入一个缓冲区中;消费者进程可从一个缓冲区中取走产品去消费。走产品去消费。电脑基础知识计算机操作系统第二章进 程 管 理 尽管所有的生产者进程和消费者进程都是以异步方式运尽管所有的生产者进程和消费者进程都是以异步方式运行的,但它们之间必须保持同步,即不允许消费者进程到一行的,但它们之间必须保持同步,即不允许消费者进程到一个空缓冲区去取
93、产品,也不允许生产者进程向一个已装满产个空缓冲区去取产品,也不允许生产者进程向一个已装满产品且尚未被取走的缓冲区中投放产品。品且尚未被取走的缓冲区中投放产品。 电脑基础知识计算机操作系统第二章进 程 管 理 我们可利用一个数组来表示上述的具有我们可利用一个数组来表示上述的具有n个个(0,1,n-1)缓冲区的缓冲池。用输入指针缓冲区的缓冲池。用输入指针in来指示下一个可投放产品的来指示下一个可投放产品的缓冲区,每当生产者进程生产并投放一个产品后,输入指针加缓冲区,每当生产者进程生产并投放一个产品后,输入指针加1;用一个输出指针;用一个输出指针out来指示下一个可从中获取产品的缓冲区,来指示下一个
94、可从中获取产品的缓冲区,每当消费者进程取走一个产品后,输出指针加每当消费者进程取走一个产品后,输出指针加1。由于这里的。由于这里的缓冲池是组织成循环缓冲的,故应把输入指针加缓冲池是组织成循环缓冲的,故应把输入指针加1表示成表示成 in:= (in+1)mod n; 输出指针加输出指针加1表示成表示成out:= (out+1) mod n。当。当 (in+1) mod n=out时表示缓冲池满;而时表示缓冲池满;而in=out则表示缓冲池空。则表示缓冲池空。此外,还引入了一个整型变量此外,还引入了一个整型变量counter,其初始值为,其初始值为0。每当生。每当生产者进程向缓冲池中投放一个产品后
95、,使产者进程向缓冲池中投放一个产品后,使counter加加1;反之,;反之,每当消费者进程从中取走一个产品时,使每当消费者进程从中取走一个产品时,使counter减减1。生产者。生产者和消费者两进程共享下面的变量:和消费者两进程共享下面的变量: 电脑基础知识计算机操作系统第二章进 程 管 理 Var nVar n,integerinteger;type item=type item=;var buffer: arrayvar buffer: array0 0,1 1,n-1n-1 of itemof item;inin,out: 0out: 0,1 1,n-1n-1;counter: 0,1,
96、n; 电脑基础知识计算机操作系统第二章进 程 管 理 指针指针in和和out初始化为初始化为1。在生产者和消费者进程的描述。在生产者和消费者进程的描述中,中,noop是一条空操作指令,是一条空操作指令,while condition do no-op语句语句表示重复的测试条件表示重复的测试条件(condication),重复测试应进行到该条,重复测试应进行到该条件变为件变为false(假假),即到该条件不成立时为止。,即到该条件不成立时为止。 在生产者进程中使用一局部变量在生产者进程中使用一局部变量nextp,用于暂时存放每,用于暂时存放每次刚生产出来的产品;而在消费者进程中,则使用一个局部次
97、刚生产出来的产品;而在消费者进程中,则使用一个局部变量变量nextc,用于存放每次要消费的产品。,用于存放每次要消费的产品。 电脑基础知识计算机操作系统第二章进 程 管 理 producer: repeatproducer: repeat produce an item in nextpproduce an item in nextp;while counter=n do no-opwhile counter=n do no-op;bufferbufferinin:=nextp:=nextp;in:=in+1 mod nin:=in+1 mod n;counter:=counter+1coun
98、ter:=counter+1;until false; 电脑基础知识计算机操作系统第二章进 程 管 理 consumer: repeat while counter=0 do no-op;nextc:=bufferout;out:=(out+1) mod n;counter:=counter-1;consumer the item in nextc; until false; 电脑基础知识计算机操作系统第二章进 程 管 理 虽然上面的生产者程序和消费者程序在分别看时都是正确虽然上面的生产者程序和消费者程序在分别看时都是正确的,而且两者在顺序执行时其结果也会是正确的,但若并发的,而且两者在顺序执
99、行时其结果也会是正确的,但若并发执行时就会出现差错,问题就在于这两个进程共享变量执行时就会出现差错,问题就在于这两个进程共享变量counter。生产者对它做加。生产者对它做加1操作,消费者对它做减操作,消费者对它做减1操作,这操作,这两个操作在用机器语言实现时,两个操作在用机器语言实现时, 常可用下面的形式描述:常可用下面的形式描述: register1:=counter; register2:=counter;register1:=register1+1;register2:=register2-1;counter:=register1; counter:=register2; 电脑基础知识
100、计算机操作系统第二章进 程 管 理 假设假设counter的当前值是的当前值是5。如果生产者进程先执行左列。如果生产者进程先执行左列的三条机器语言语句,然后消费者进程再执行右列的三条语的三条机器语言语句,然后消费者进程再执行右列的三条语句,则最后共享变量句,则最后共享变量counter的值仍为的值仍为5; 反之,如果让消费反之,如果让消费者进程先执行右列的三条语句,然后再让生产者进程执行左者进程先执行右列的三条语句,然后再让生产者进程执行左列的三条语句,则列的三条语句,则counter值也还是值也还是5,但是,如果按下述顺,但是,如果按下述顺序执行:序执行: 电脑基础知识计算机操作系统第二章进
101、 程 管 理 register1:=counter; (register1=5)register1:=register1+1; (register1=6)register2:=counter; (register2=5)register2:=register2-1; (register2=4)counter:=register1; (counter=6)counter:=register2; (counter=4) 电脑基础知识计算机操作系统第二章进 程 管 理 正确的正确的counter值应当是值应当是5,但现在是,但现在是4。读者可以自己试。读者可以自己试试,倘若再将两段程序中各语句交叉执
102、行的顺序改变,将可试,倘若再将两段程序中各语句交叉执行的顺序改变,将可看到又可能得到看到又可能得到counter=6的答案,这表明程序的执行已经失的答案,这表明程序的执行已经失去了再现性。为了预防产生这种错误,解决此问题的关键是去了再现性。为了预防产生这种错误,解决此问题的关键是应把变量应把变量counter作为临界资源处理,亦即,令生产者进程和作为临界资源处理,亦即,令生产者进程和消费者进程互斥地访问变量消费者进程互斥地访问变量counter。 电脑基础知识计算机操作系统第二章进 程 管 理 3临界区临界区由前所述可知,不论是硬件临界资源,还是软件临界资由前所述可知,不论是硬件临界资源,还是
103、软件临界资源,多个进程必须互斥地对它进行访问。人们把在每个进程源,多个进程必须互斥地对它进行访问。人们把在每个进程中访问临界资源的那段代码称为中访问临界资源的那段代码称为临界区临界区(critical section)。 显然,若能保证诸进程互斥地进入自己的临界区,便可实显然,若能保证诸进程互斥地进入自己的临界区,便可实现诸进程对临界资源的互斥访问。现诸进程对临界资源的互斥访问。电脑基础知识计算机操作系统第二章进 程 管 理 为为此此,每每个个进进程程在在进进入入临临界界区区之之前前,应应先先对对欲欲访访问问的的临临界资源进行检查,看它是否正被访问。界资源进行检查,看它是否正被访问。 如如果果
104、此此刻刻该该临临界界资资源源未未被被访访问问,进进程程便便可可进进入入临临界界区区对对该该资资源源进进行行访访问问,并并设设置置它它正正被被访访问问的的标标志志;如如果果此此刻刻该该临临界资源正被某进程访问,则本进程不能进入临界区。界资源正被某进程访问,则本进程不能进入临界区。 因因此此,必必须须在在临临界界区区前前面面增增加加一一段段用用于于进进行行上上述述检检查查的的代代码,把这段代码称为码,把这段代码称为进入区进入区(entry section)。 相相应应地地,在在临临界界区区后后面面也也要要加加上上一一段段称称为为退退出出区区(exit section)的的代代码码,用用于于将将临临
105、界界区区正正被被访访问问的的标标志志恢恢复复为为未未被被访访问的标志。问的标志。 电脑基础知识计算机操作系统第二章进 程 管 理 进进程程中中除除上上述述进进入入区区、临临界界区区及及退退出出区区之之外外的的其其它它部部分分的的代代码码,在在这这里里都都称称为为剩剩余余区区。这这样样,可可把把一一个个访访问问临临界界资资源的循环进程描述如下:源的循环进程描述如下:repeatentry sectioncritical section;exit sectionremainder section;until false; 电脑基础知识计算机操作系统第二章进 程 管 理 4同步机制应遵循的规则同步机
106、制应遵循的规则为为实实现现进进程程互互斥斥地地进进入入自自已已的的临临界界区区,可可用用软软件件方方法法,更更多多的的是是在在系系统统中中设设置置专专门门的的同同步步机机构构来来协协调调各各进进程程间间的的运运行。所有同步机制都应遵循下述四条准则:行。所有同步机制都应遵循下述四条准则:(1)空空闲闲让让进进。当当无无进进程程处处于于临临界界区区时时,表表明明临临界界资资源源处处于于空空闲闲状状态态,应应允允许许一一个个请请求求进进入入临临界界区区的的进进程程立立即即进进入入自自己的临界区,以有效地利用临界资源。己的临界区,以有效地利用临界资源。(2) 忙则等待。当已有进程进入临界区时,表明临界
107、资忙则等待。当已有进程进入临界区时,表明临界资源正在被访问,因而其它试图进入临界区的进程必须等待,源正在被访问,因而其它试图进入临界区的进程必须等待,以保证对临界资源的互斥访问。以保证对临界资源的互斥访问。 电脑基础知识计算机操作系统第二章进 程 管 理 (3) 有有限限等等待待。对对要要求求访访问问临临界界资资源源的的进进程程,应应保保证证在在有有限时间内能进入自己的临界区,以免陷入限时间内能进入自己的临界区,以免陷入“死等死等”状态。状态。(4) 让权等待。当进程不能进入自己的临界区时,应立即让权等待。当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入释放处理机,以免进程陷入“忙
108、等忙等”状态。状态。 电脑基础知识计算机操作系统第二章进 程 管 理 2.3.2信号量机制信号量机制1整型信号量整型信号量最最初初由由Dijkstra把把整整型型信信号号量量定定义义为为一一个个用用于于表表示示资资源源数数目目的的整整型型量量S,它它与与一一般般整整型型量量不不同同,除除初初始始化化外外,仅仅能能通通过过两两个个标标准准的的原原子子操操作作(Atomic Operation) wait(S)和和signal(S)来来访访问问。很很长长时时间间以以来来,这这两两个个操操作作一一直直被被分分别别称称为为P、V操操作作。Wait(S)和和signal(S)操作可描述为:操作可描述为:
109、wait(S): while S=0 do no-op;S:=S-1;signal(S):S:=S+1; 电脑基础知识计算机操作系统第二章进 程 管 理 wait(S)和和signal(S)是两个原子操作,因此,它们在执行是两个原子操作,因此,它们在执行时是不可中断的。时是不可中断的。 亦即,当一个进程在修改某信号量时,没有其他进程可亦即,当一个进程在修改某信号量时,没有其他进程可同时对该信号量进行修改。同时对该信号量进行修改。 此外,在此外,在wait操作中,对操作中,对S值的测试和做值的测试和做S:=S-1操作时操作时都不可中断。都不可中断。 电脑基础知识计算机操作系统第二章进 程 管 理
110、 2记录型信号量记录型信号量在整型信号量机制中的在整型信号量机制中的wait操作,只要是信号量操作,只要是信号量S0,就会不断地测试。就会不断地测试。 因此,该机制并未遵循因此,该机制并未遵循“让权等待让权等待”的准则,而是使进的准则,而是使进程处于程处于“忙等忙等”的状态。的状态。 记录型信号量机制则是一种不存在记录型信号量机制则是一种不存在“忙等忙等”现象的进程现象的进程同步机制。同步机制。电脑基础知识计算机操作系统第二章进 程 管 理 但但在在采采取取了了“让让权权等等待待”的的策策略略后后,又又会会出出现现多多个个进进程程等待访问同一临界资源的情况。等待访问同一临界资源的情况。 为为此
111、此,在在信信号号量量机机制制中中,除除了了需需要要一一个个用用于于代代表表资资源源数数目目的的整整型型变变量量value外外,还还应应增增加加一一个个进进程程链链表表指指针针L,用用于于链接上述的所有等待进程。链接上述的所有等待进程。 记记录录型型信信号号量量是是由由于于它它采采用用了了记记录录型型的的数数据据结结构构而而得得名名的。它所包含的上述两个数据项可描述为:的。它所包含的上述两个数据项可描述为: 电脑基础知识计算机操作系统第二章进 程 管 理 type semaphore=recordvalue: integer;L: list of process;end 电脑基础知识计算机操作系
112、统第二章进 程 管 理 相应地,相应地,wait(S)和和signal(S)操作可描述为:操作可描述为:procedure wait(S)var S:semaphore;beginS.value:=S.value-1;if S.value0 then block(S.L);end procedure signal(S)var S: semaphore;beginS.value:=S.value+1;if S.value=0 then wakeup(S.L);end 电脑基础知识计算机操作系统第二章进 程 管 理 在记录型信号量机制中,在记录型信号量机制中,S.value的初值表示系统中某类资的
113、初值表示系统中某类资源的数目,因而又称为资源信号量。对它的每次源的数目,因而又称为资源信号量。对它的每次wait操作,意操作,意味着进程请求一个单位的该类资源,使系统中可供分配的该类味着进程请求一个单位的该类资源,使系统中可供分配的该类资源数减少一个,因此描述为资源数减少一个,因此描述为S.value:=S.value-1;当;当S.value=1 and and Sn=1 thenfor i:=1 to n do Si:=Si-1;endforelseplace the process in the waiting queue associated with the first Si fou
114、nd with Si=t1 and and Sn=tn thenfor i:=1 to n doSi:=Si-di;endforelsePlace the executing process in the waiting queue of the first Si with Si1时时)或互斥信号量或互斥信号量(S=1时时)。(3) Swait(S,1,0)。这是一种很特殊且很有用的信号量。这是一种很特殊且很有用的信号量操作。当操作。当S1时,允许多个进程进入某特定区;当时,允许多个进程进入某特定区;当S变为变为0后,后,将阻止任何进程进入特定区。换言之,它相当于一个可控开将阻止任何进程进入特
115、定区。换言之,它相当于一个可控开关。关。 电脑基础知识计算机操作系统第二章进 程 管 理 2.3.3信号量的应用信号量的应用1利用信号量实现进程互斥利用信号量实现进程互斥为使多个进程能互斥地访问某临界资源,只须为该资源为使多个进程能互斥地访问某临界资源,只须为该资源设置一互斥信号量设置一互斥信号量mutex,并设其初始值为,并设其初始值为1,然后将各进程,然后将各进程访问该资源的临界区访问该资源的临界区CS置于置于wait(mutex)和和signal(mutex)操作操作之间即可。这样,每个欲访问该临界资源的进程在进入临界之间即可。这样,每个欲访问该临界资源的进程在进入临界区之前,都要先对区
116、之前,都要先对mutex执行执行wait操作,若该资源此刻未被访操作,若该资源此刻未被访问,本次问,本次wait操作必然成功,进程便可进入自己的临界区,操作必然成功,进程便可进入自己的临界区,这时若再有其他进程也欲进入自己的临界区,此时由于对这时若再有其他进程也欲进入自己的临界区,此时由于对mutex执行执行wait操作定会失败,因而该进程阻塞,从而保证了操作定会失败,因而该进程阻塞,从而保证了该临界资源能被互斥地访问。当访问临界资源的进程退出临该临界资源能被互斥地访问。当访问临界资源的进程退出临界区后,又应对界区后,又应对mutex执行执行signal操作,以便释放该临界资源。操作,以便释放
117、该临界资源。利用信号量实现进程互斥的进程可描述如下:利用信号量实现进程互斥的进程可描述如下: 电脑基础知识计算机操作系统第二章进 程 管 理 Var mutex: semaphore:=1;beginparbeginprocess 1: begin repeat wait(mutex); critical section signal(mutex); remainder seetion until false; end 电脑基础知识计算机操作系统第二章进 程 管 理 process 2: begin repeatwait(mutex);critical sectionsignal(mutex)
118、;remainder sectionuntil false;endparend 电脑基础知识计算机操作系统第二章进 程 管 理 2利用信号量实现前趋关系利用信号量实现前趋关系 还还可可利利用用信信号号量量来来描描述述程程序序或或语语句句之之间间的的前前趋趋关关系系。设设有有两两个个并并发发执执行行的的进进程程P1和和P2。P1中中有有语语句句S1;P2中中有有语语句句S2。我我们们希希望望在在S1执执行行后后再再执执行行S2。为为实实现现这这种种前前趋趋关关系系,我我们们只只须须使使进进程程P1和和P2共共享享一一个个公公用用信信号号量量S,并并赋赋予予其其初初值值为为0,将将signal(S
119、)操操作作放放在在语语句句S1后后面面;而而在在S2语语句句前前面面插插入入wait(S)操作,即操作,即在进程在进程P1中,用中,用S1;signal(S);在进程在进程P2中,用中,用wait(S);S2; 电脑基础知识计算机操作系统第二章进 程 管 理 由于由于S被初始化为被初始化为0,这样,若,这样,若P2先执行必定阻塞,只先执行必定阻塞,只有在进程有在进程P1执行完执行完S1;signal(S);操作后使;操作后使S增为增为1时,时,P2进进程方能执行语句程方能执行语句S2成功。同样,我们可以利用信号量,按照成功。同样,我们可以利用信号量,按照语句间的前趋关系语句间的前趋关系(见图见
120、图2-12),写出一个更为复杂的可并发,写出一个更为复杂的可并发执行的程序。执行的程序。 图图2-12示出了一个前趋图,其中示出了一个前趋图,其中S1,S2,S3,S6是是最简单的程序段最简单的程序段(只有一条语句只有一条语句)。为使各程序段能正确执行,。为使各程序段能正确执行,应设置若干个初始值为应设置若干个初始值为“0”的信号量。如为保证的信号量。如为保证S1S2,S1S3的前趋关系,应分别设置信号量的前趋关系,应分别设置信号量a 和和b,同样,为了保,同样,为了保证证S2S4,S2S5,S3S6,S4S6和和S5S6,应设置信号量,应设置信号量c,d,e,f,g。 电脑基础知识计算机操作
121、系统第二章进 程 管 理 Var a,b,c,d,e,f,g:semaphore: =0,0,0,0,0,0,0;beginparbeginbegin S1; signal(a); signal(b); end;begin wait(a); S2; signal(c); signal(d); end;begin wait(b); S3; signal(e); end;begin wait(c); S4; signal(f); end;begin wait(d); S5; signal(g); end;begin wait(e); wait(f); wait(g); S6; end;parend
122、end 电脑基础知识计算机操作系统第二章进 程 管 理 图2-12 前趋图举例 电脑基础知识计算机操作系统第二章进 程 管 理 2.3.4管程机制管程机制1管程的定义管程的定义系统中的各种硬件资源和软件资源,均可用数据结构抽系统中的各种硬件资源和软件资源,均可用数据结构抽象地描述其资源特性,即用少量信息和对该资源所执行的操象地描述其资源特性,即用少量信息和对该资源所执行的操作来表征该资源,而忽略了它们的内部结构和实现细节。作来表征该资源,而忽略了它们的内部结构和实现细节。 例如,对一台电传机,可用与分配该资源有关的状态信例如,对一台电传机,可用与分配该资源有关的状态信息息(busy或或free
123、)和对它执行请求与释放的操作,以及等待该和对它执行请求与释放的操作,以及等待该资源的进程队列来描述。又如,一个资源的进程队列来描述。又如,一个FIFO队列,可用其队队列,可用其队长、队首和队尾以及在该队列上执行的一组操作来描述。长、队首和队尾以及在该队列上执行的一组操作来描述。 电脑基础知识计算机操作系统第二章进 程 管 理 利用共享数据结构抽象地表示系统中的共享资源,而把利用共享数据结构抽象地表示系统中的共享资源,而把对该共享数据结构实施的操作定义为一组过程,如资源的请对该共享数据结构实施的操作定义为一组过程,如资源的请求和释放过程求和释放过程request和和release。 进程对共享资
124、源的申请、释放和其它操作,都是通过这进程对共享资源的申请、释放和其它操作,都是通过这组过程对共享数据结构的操作来实现的,这组过程还可以根组过程对共享数据结构的操作来实现的,这组过程还可以根据资源的情况,或接受或阻塞进程的访问,确保每次仅有一据资源的情况,或接受或阻塞进程的访问,确保每次仅有一个进程使用共享资源,这样就可以统一管理对共享资源的所个进程使用共享资源,这样就可以统一管理对共享资源的所有访问,实现进程互斥。有访问,实现进程互斥。 电脑基础知识计算机操作系统第二章进 程 管 理 代代表表共共享享资资源源的的数数据据结结构构,以以及及由由对对该该共共享享数数据据结结构构实实施施操操作作的的
125、一一组组过过程程所所组组成成的的资资源源管管理理程程序序,共共同同构构成成了了一个操作系统的资源管理模块,我们称之为一个操作系统的资源管理模块,我们称之为管程管程。 管管程程被被请请求求和和释释放放资资源源的的进进程程所所调调用用。Hansan为为管管程程所所下下的的定定义义是是:“一一个个管管程程定定义义了了一一个个数数据据结结构构和和能能为为并并发发进进程程所所执执行行(在在该该数数据据结结构构上上)的的一一组组操操作作,这这组组操操作作能能同步进程和改变管程中的数据同步进程和改变管程中的数据”。电脑基础知识计算机操作系统第二章进 程 管 理 由上述的定义可知,管程由四部分组成:由上述的定
126、义可知,管程由四部分组成: 管程的名称;管程的名称; 局部于管程内部的共享数据结构说明;局部于管程内部的共享数据结构说明; 对该数据结构进行操作的一组过程;对该数据结构进行操作的一组过程; 对局部于管程内部的共享数据设置初始值的语句。对局部于管程内部的共享数据设置初始值的语句。 图图2-13是一个管程的示意图。是一个管程的示意图。 电脑基础知识计算机操作系统第二章进 程 管 理 图2-13管程的示意图 电脑基础知识计算机操作系统第二章进 程 管 理 管程的语法描述如下:管程的语法描述如下:type monitor_name = MONITOR;define ;use ;procedure ()
127、;beginend; 电脑基础知识计算机操作系统第二章进 程 管 理 function ():值类型;:值类型;beginend; begin ;end 电脑基础知识计算机操作系统第二章进 程 管 理 需需要要指指出出的的是是,局局部部于于管管程程内内部部的的数数据据结结构构,仅仅能能被被局局部部于于管管程程内内部部的的过过程程所所访访问问,任任何何管管程程外外的的过过程程都都不不能能访访问问它它;反反之之,局局部部于于管管程程内内部部的的过过程程也也仅仅能能访访问问管管程程内内的数据结构。的数据结构。 由由此此可可见见,管管程程相相当当于于围围墙墙,它它把把共共享享变变量量和和对对它它进进行
128、行操操作作的的若若干干过过程程围围了了起起来来,所所有有进进程程要要访访问问临临界界资资源源时时,都都必必须须经经过过管管程程(相相当当于于通通过过围围墙墙的的门门)才才能能进进入入,而而管管程程每每次只准许一个进程进入管程,从而实现了进程互斥。次只准许一个进程进入管程,从而实现了进程互斥。管程是一种程序设计语言结构成分,它和信号量有同管程是一种程序设计语言结构成分,它和信号量有同等的表达能力,从语言的角度看,管程主要有以下特性:等的表达能力,从语言的角度看,管程主要有以下特性: 电脑基础知识计算机操作系统第二章进 程 管 理 (1) 模块化。管程是一个基本程序单位,可以单独编译。模块化。管程
129、是一个基本程序单位,可以单独编译。(2) 抽象数据类型。管程中不仅有数据,而且有对数据抽象数据类型。管程中不仅有数据,而且有对数据的操作。的操作。(3) 信息掩蔽。管程中的数据结构只能被管程中的过程信息掩蔽。管程中的数据结构只能被管程中的过程访问,这些过程也是在管程内部定义的,供管程外的进程访问,这些过程也是在管程内部定义的,供管程外的进程调用,而管程中的数据结构以及过程调用,而管程中的数据结构以及过程(函数函数)的具体实现外部的具体实现外部不可见。不可见。 电脑基础知识计算机操作系统第二章进 程 管 理 管程和进程不同,主要体现在以下几个方面:管程和进程不同,主要体现在以下几个方面:(1)
130、虽虽然然二二者者都都定定义义了了数数据据结结构构,但但进进程程定定义义的的是是私私有有数据结构数据结构PCB,管程定义的是公共数据结构,管程定义的是公共数据结构,如消息队列等;,如消息队列等;(2) 二二者者都都存存在在对对各各自自数数据据结结构构上上的的操操作作,但但进进程程是是由由顺顺序序程程序序执执行行有有关关的的操操作作,而而管管程程主主要要是是进进行行同同步步操操作作和和初初始化操作始化操作;(3) 设置进程的目的在于实现系统的并发性,而管程的设置进程的目的在于实现系统的并发性,而管程的设置则是解决共享资源的互斥使用问题;设置则是解决共享资源的互斥使用问题; 电脑基础知识计算机操作系
131、统第二章进 程 管 理 (4) 进进程程通通过过调调用用管管程程中中的的过过程程对对共共享享数数据据结结构构实实行行操操作作,该该过过程程就就如如通通常常的的子子程程序序一一样样被被调调用用,因因而而管管程程为为被被动动工工作作方式,进程则为主动工作方式;方式,进程则为主动工作方式;(5) 进程之间能并发执行,而管程则不能与其调用者并发;进程之间能并发执行,而管程则不能与其调用者并发;(6) 进程具有动态性,由进程具有动态性,由“创建创建”而诞生,由而诞生,由“撤销撤销”而而消亡,而管程则是操作系统中的一个资源管理模块,供进程消亡,而管程则是操作系统中的一个资源管理模块,供进程调用。调用。 电
132、脑基础知识计算机操作系统第二章进 程 管 理 2条件变量条件变量在利用管程实现进程同步时,必须设置同步工具,如在利用管程实现进程同步时,必须设置同步工具,如两个同步操作原语两个同步操作原语wait和和signal。 当某进程通过管程请求获得临界资源而未能满足时,当某进程通过管程请求获得临界资源而未能满足时,管程便调用管程便调用wait原语使该进程等待原语使该进程等待,并将其排在等待队列,并将其排在等待队列上,如图上,如图2-13 所示。所示。仅当另一进程访问完成并释放该资源仅当另一进程访问完成并释放该资源之后,管程才又调用之后,管程才又调用signal原语原语,唤醒等待队列中的队首进,唤醒等待
133、队列中的队首进程。程。 电脑基础知识计算机操作系统第二章进 程 管 理 但是仅仅有上述的同步工具是不够的。考虑一种情况:但是仅仅有上述的同步工具是不够的。考虑一种情况:当一个进程调用了管程,在管程中时被阻塞或挂起,直到阻当一个进程调用了管程,在管程中时被阻塞或挂起,直到阻塞或挂起的原因解除,而在此期间,塞或挂起的原因解除,而在此期间,如果该进程不释放管程,如果该进程不释放管程,则其它进程无法进入管程,被迫长时间地等待则其它进程无法进入管程,被迫长时间地等待。 为了解决这个问题,引入了条件变量为了解决这个问题,引入了条件变量condition。通常,。通常,一个进程被阻塞或挂起的条件一个进程被阻
134、塞或挂起的条件(原因原因)可有多个,因此在管程可有多个,因此在管程中设置了多个条件变量中设置了多个条件变量,对这些条件变量的访问,只能在管,对这些条件变量的访问,只能在管程中进行。程中进行。 电脑基础知识计算机操作系统第二章进 程 管 理 管管程程中中对对每每个个条条件件变变量量都都须须予予以以说说明明,其其形形式式为为:Var x,y:condition。 对对条条件件变变量量的的操操作作仅仅仅仅是是wait和和signal,因因此此条条件件变变量量也也是是一一种种抽抽象象数数据据类类型型,每每个个条条件件变变量量保保存存了了一一个个链链表表,用用于于记记录录因因该该条条件件变变量量而而阻阻
135、塞塞的的所所有有进进程程,同同时时提提供供的的两两个个操操作作即可表示为即可表示为x.wait和和x.signal,其含义为:其含义为: x.wait:正在调用管程的进程因:正在调用管程的进程因x条件需要被阻塞或条件需要被阻塞或挂起,则调用挂起,则调用x.wait将自己插入到将自己插入到x条件的等待队列上,并释条件的等待队列上,并释放管程,直到放管程,直到x条件变化。此时其它进程可以使用该管程。条件变化。此时其它进程可以使用该管程。 电脑基础知识计算机操作系统第二章进 程 管 理 x.signal:正正在在调调用用管管程程的的进进程程发发现现x条条件件发发生生了了变变化化,则则调调用用x.si
136、gnal,重重新新启启动动一一个个因因x条条件件而而阻阻塞塞或或挂挂起起的的进进程程。如如果果存存在在多多个个这这样样的的进进程程,则则选选择择其其中中的的一一个个,如如果果没没有有,则则继继续续执执行行原原进进程程,而而不不产产生生任任何何结结果果。这这与与信信号号量量机机制制中中的的signal操操作作不不同同,因因为为后后者者总总是是要要执执行行s:=s+1操操作作,因因而而总总会改变信号量的状态。会改变信号量的状态。如如果果有有进进程程Q因因x条条件件处处于于阻阻塞塞状状态态,当当正正在在调调用用管管程程的的进进程程P执执行行了了x.signal操操作作后后,进进程程Q被被重重新新启启
137、动动,此此时时两两个个进进程程P和和Q,如如何何确确定定哪哪个个执执行行,哪哪个个等等待待,可可采采用用下下述述两两种种方方式之一进行处理:式之一进行处理:(1) P等待,直至等待,直至Q离开管程或等待另一条件。离开管程或等待另一条件。(2) Q等待,直至等待,直至P离开管程或等待另一条件。离开管程或等待另一条件。 电脑基础知识计算机操作系统第二章进 程 管 理 采用哪种处理方式,当然是各执一词。采用哪种处理方式,当然是各执一词。 Hoare采用了第一种处理方式,而采用了第一种处理方式,而Hansan选择了两者的选择了两者的折衷,他规定管程中的过程所执行的折衷,他规定管程中的过程所执行的sig
138、nal 操作是过程体的操作是过程体的最后一个操作,于是,进程最后一个操作,于是,进程P执行执行signal操作后立即退出管程,操作后立即退出管程,因而进程因而进程Q马上被恢复执行。马上被恢复执行。 电脑基础知识计算机操作系统第二章进 程 管 理 2.4经典进程的同步问题经典进程的同步问题 2.4.1生产者生产者消费者问题消费者问题1利用记录型信号量解决生产者利用记录型信号量解决生产者消费者问题消费者问题假定在生产者和消费者之间的公用缓冲池中,具有假定在生产者和消费者之间的公用缓冲池中,具有n个缓个缓冲区,这时可利用互斥信号量冲区,这时可利用互斥信号量mutex实现诸进程对缓冲池的互实现诸进程对
139、缓冲池的互斥使用。利用信号量斥使用。利用信号量empty和和full分别表示缓冲池中空缓冲区分别表示缓冲池中空缓冲区和满缓冲区的数量。又假定这些生产者和消费者相互等效,和满缓冲区的数量。又假定这些生产者和消费者相互等效,只要缓冲池未满,生产者便可将消息送入缓冲池;只要缓冲只要缓冲池未满,生产者便可将消息送入缓冲池;只要缓冲池未空,消费者便可从缓冲池中取走一个消息。对生产者池未空,消费者便可从缓冲池中取走一个消息。对生产者消费者问题可描述如下消费者问题可描述如下: 电脑基础知识计算机操作系统第二章进 程 管 理 Var mutex,empty,full: semaphore:=1,n,0;buf
140、fer:array0,n-1 of item;in,out: integer:=0,0;beginparbeginproceducer: beginrepeatproducer an item nextp;wait(empty); 电脑基础知识计算机操作系统第二章进 程 管 理 wait(mutex);buffer(in):=nextp;in:=(in+1) mod n;signal(mutex);signal(full);until false;endconsumer: beginrepeatwait(full);wait(mutex);nextc:=buffer(out); 电脑基础知识计
141、算机操作系统第二章进 程 管 理 out:=(out+1) mod n;signal(mutex);signal(empty);consumer the item in nextc;until false;endparendend 电脑基础知识计算机操作系统第二章进 程 管 理 在生产者在生产者消费者问题中应注意:首先,在每个程序中消费者问题中应注意:首先,在每个程序中用于实现互斥的用于实现互斥的wait(mutex)和和signal(mutex)必须成对地出现;必须成对地出现;其次,对资源信号量其次,对资源信号量empty和和full的的wait和和signal操作,同样操作,同样需要成对地
142、出现,但它们分别处于不同的程序中。例如,需要成对地出现,但它们分别处于不同的程序中。例如,wait(empty)在计算进程中,而在计算进程中,而signal(empty)则在打印进程中,则在打印进程中,计算进程若因执行计算进程若因执行wait(empty)而阻塞,则以后将由打印进而阻塞,则以后将由打印进程将它唤醒;最后,在每个程序中的多个程将它唤醒;最后,在每个程序中的多个wait操作顺序不能操作顺序不能颠倒,应先执行对资源信号量的颠倒,应先执行对资源信号量的wait操作,然后再执行对互操作,然后再执行对互斥信号量的斥信号量的wait操作,否则可能引起进程死锁。操作,否则可能引起进程死锁。 电
143、脑基础知识计算机操作系统第二章进 程 管 理 2利用利用AND信号量解决生产者信号量解决生产者消费者问题消费者问题 对对于于生生产产者者消消费费者者问问题题,也也可可利利用用AND信信号号量量来来解解决决,即即用用Swait(empty,mutex)来来代代替替wait(empty)和和wait(mutex);用用Ssignal(mutex,full)来来代代替替signal(mutex)和和signal(full);用用Swait(full,mutex)来来代代替替wait(full)和和wait(mutex),以以及及用用Ssignal(mutex,empty)代代替替Signal(mut
144、ex)和和Signal(empty)。利用利用AND信号量来解决生产者信号量来解决生产者消费者问题的算法描述如下:消费者问题的算法描述如下: 电脑基础知识计算机操作系统第二章进 程 管 理 Var mutex,empty,full: semaphore:=1,n,0;buffer:array0,n-1 of item;in out: integer:=0,0;beginparbeginproducer: beginrepeatproduce an item in nextp;Swait(empty,mutex);buffer(in):=nextp;in:=(in+1)mod n;Ssignal
145、(mutex,full);until false;end 电脑基础知识计算机操作系统第二章进 程 管 理 consumer:beginrepeatSwait(full,mutex);Nextc:=buffer(out);Out:=(out+1) mod n;Ssignal(mutex,empty);consumer the item in nextc;until false;endparendend 电脑基础知识计算机操作系统第二章进 程 管 理 3利用管程解决生产者利用管程解决生产者消费者问题消费者问题 在在利利用用管管程程方方法法来来解解决决生生产产者者消消费费者者问问题题时时,首首先先便
146、便是是为为它它们们建建立立一一个个管管程程,并并命命名名为为ProclucerConsumer,或或简简称称为为PC。其中包括两个过程:。其中包括两个过程:(1) put(item)过过程程。生生产产者者利利用用该该过过程程将将自自己己生生产产的的产产品品投投放放到到缓缓冲冲池池中中,并并用用整整型型变变量量count来来表表示示在在缓缓冲冲池池中中已已有有的产品数目,当的产品数目,当countn时,表示缓冲池已满,生产者须等待。时,表示缓冲池已满,生产者须等待。(2) get(item)过程。消费者利用该过程从缓冲池中取出一过程。消费者利用该过程从缓冲池中取出一个产品,当个产品,当count
147、0时,表示缓冲池中已无可取用的产品,消时,表示缓冲池中已无可取用的产品,消费者应等待。费者应等待。 电脑基础知识计算机操作系统第二章进 程 管 理 PC管程可描述如下:管程可描述如下:type producer-consumer=monitorVar in,out,count: integer;buffer: array0, , n-1 of item;notfull,notempty:condition;/nutfull:用于描述生产者;用于描述生产者;/notempty:用于描述消费者;用于描述消费者;电脑基础知识计算机操作系统第二章进 程 管 理 procedure entry put(
148、nextp)beginif count=n then notfull.wait;buffer(in):=nextp;in:=(in+1) mod n;count:=count+1;if notempty.queue then notempty.signal;end 电脑基础知识计算机操作系统第二章进 程 管 理 procedure entry get(nextc)beginif count2)结结点点(进进程程)。电脑基础知识计算机操作系统第二章进 程 管 理 而根据通信方式的不同,则又可把链路分成两种:而根据通信方式的不同,则又可把链路分成两种:(1) 单向通信链路单向通信链路,只允许发送进
149、程,只允许发送进程A向接收进程向接收进程B发送发送消息,或者相反;消息,或者相反; (2)双向链路双向链路,既允许,既允许A向向B发送,也允许发送,也允许B向向A发送;发送;还可根据通信链路容量的不同而把链路分成两类:还可根据通信链路容量的不同而把链路分成两类: 一是一是无容量通信链路无容量通信链路,在这种通信链路上没有缓冲区,在这种通信链路上没有缓冲区,因而不能暂存任何消息;因而不能暂存任何消息; 再者就是再者就是有容量通信链路有容量通信链路,指在通信链路中设置了缓冲,指在通信链路中设置了缓冲区,因而能暂存消息。缓冲区数目愈多,通信链路的容量区,因而能暂存消息。缓冲区数目愈多,通信链路的容量
150、愈大。愈大。 电脑基础知识计算机操作系统第二章进 程 管 理 2消息的格式消息的格式在消息传递系统中所传递的消息,必须具有一定的消息格在消息传递系统中所传递的消息,必须具有一定的消息格式。在单机系统环境中,由于发送进程和接收进程处于同一台式。在单机系统环境中,由于发送进程和接收进程处于同一台机器中,有着相同的环境,故其消息格式比较简单;但在计算机器中,有着相同的环境,故其消息格式比较简单;但在计算机网络环境下,不仅源和目标进程所处的环境不同,而且信息机网络环境下,不仅源和目标进程所处的环境不同,而且信息的传输距离很远,可能要跨越若干个完全不同的网络,致使所的传输距离很远,可能要跨越若干个完全不
151、同的网络,致使所用的消息格式比较复杂。用的消息格式比较复杂。 通常,可把一个消息分成通常,可把一个消息分成消息头消息头和和消息正文消息正文两部分。两部分。消消息头包括消息在传输时所需的控制信息息头包括消息在传输时所需的控制信息,如源进程名、目标进,如源进程名、目标进程名、消息长度、消息类型、消息编号及发送的日期和时间;程名、消息长度、消息类型、消息编号及发送的日期和时间;而而消息正文消息正文则是发送进程实际上所发送的数据。则是发送进程实际上所发送的数据。 电脑基础知识计算机操作系统第二章进 程 管 理 在某些在某些OS中,消息采用比较短的中,消息采用比较短的定长消息格式定长消息格式,这便减,这
152、便减少了对消息的处理和存储开销。这种方式可用于办公自动化少了对消息的处理和存储开销。这种方式可用于办公自动化系统中,为用户提供快速的便笺式通信;但这对要发送较长系统中,为用户提供快速的便笺式通信;但这对要发送较长消息的用户是不方便的。消息的用户是不方便的。 在有的在有的OS中,采用中,采用变长的消息格式变长的消息格式,即进程所发送消息,即进程所发送消息的长度是可变的。系统无论在处理还是在存储变长消息时,的长度是可变的。系统无论在处理还是在存储变长消息时,都可能会付出更多的开销,但这方便了用户。都可能会付出更多的开销,但这方便了用户。 这两种消息格式各有其优缺点,故在很多系统这两种消息格式各有其
153、优缺点,故在很多系统(包括计算包括计算机网络机网络)中,是同时都用的。中,是同时都用的。 电脑基础知识计算机操作系统第二章进 程 管 理 3进程同步方式进程同步方式在在进进程程之之间间进进行行通通信信时时,同同样样需需要要有有进进程程同同步步机机制制,以以使使诸诸进进程程间间能能协协调调通通信信。不不论论是是发发送送进进程程,还还是是接接收收进进程程,在在完完成成消消息息的的发发送送或或接接收收后后,都都存存在在两两种种可可能能性性,即即进进程程或或者者继继续续发送发送(接收接收),或者阻塞。,或者阻塞。由此,我们可得到以下三种情况:由此,我们可得到以下三种情况:(1) 发送进程阻塞,接收进程
154、阻塞。发送进程阻塞,接收进程阻塞。 这种情况主要用于进程之间紧密同步这种情况主要用于进程之间紧密同步(tight synchronization),发送进程和接收进程之间无缓冲时发送进程和接收进程之间无缓冲时。这两个。这两个进程平时都处于阻塞状态,直到有消息传递时。这种同步方式进程平时都处于阻塞状态,直到有消息传递时。这种同步方式称为称为汇合汇合(rendezrous)。 电脑基础知识计算机操作系统第二章进 程 管 理 (2) 发送进程不阻塞,接收进程阻塞。发送进程不阻塞,接收进程阻塞。 这是一种应用最广的进程同步方式。平时,发送进程这是一种应用最广的进程同步方式。平时,发送进程不阻塞,因而它
155、可以尽快地把一个或多个消息发送给多个目不阻塞,因而它可以尽快地把一个或多个消息发送给多个目标;标; 而接收进程平时则处于阻塞状态,直到发送进程发来而接收进程平时则处于阻塞状态,直到发送进程发来消息时才被唤醒消息时才被唤醒。 例如,在服务器上通常都设置了多个服务进程,它们例如,在服务器上通常都设置了多个服务进程,它们分别用于提供不同的服务,如打印服务。平时,这些服务进分别用于提供不同的服务,如打印服务。平时,这些服务进程都处于阻塞状态,一旦有请求服务的消息到达时,系统便程都处于阻塞状态,一旦有请求服务的消息到达时,系统便唤醒相应的服务进程,去完成用户所要求的服务。处理完后,唤醒相应的服务进程,去
156、完成用户所要求的服务。处理完后,若无新的服务请求,服务进程又阻塞。若无新的服务请求,服务进程又阻塞。 电脑基础知识计算机操作系统第二章进 程 管 理 (3) 发送进程和接收进程均不阻塞。发送进程和接收进程均不阻塞。 这也是一种较常见的进程同步形式。平时,发送进程和这也是一种较常见的进程同步形式。平时,发送进程和接收进程都在忙于自己的事情,仅当发生某事件使它无法继接收进程都在忙于自己的事情,仅当发生某事件使它无法继续运行时,才把自己阻塞起来等待。续运行时,才把自己阻塞起来等待。电脑基础知识计算机操作系统第二章进 程 管 理 例如,在发送进程和接收进程之间联系着一个消息队列例如,在发送进程和接收进
157、程之间联系着一个消息队列时,该消息队列最多能接纳时,该消息队列最多能接纳n个消息,这样,发送进程便可个消息,这样,发送进程便可以连续地向消息队列中发送消息而不必等待;接收进程也可以连续地向消息队列中发送消息而不必等待;接收进程也可以连续地从消息队列中取得消息,也不必等待。以连续地从消息队列中取得消息,也不必等待。 只有当消息队列中的消息数已达到只有当消息队列中的消息数已达到n个时,即消息队列个时,即消息队列已满,发送进程无法向消息队列中发送消息时才会阻塞;类已满,发送进程无法向消息队列中发送消息时才会阻塞;类似地,只有当消息队列中的消息数为似地,只有当消息队列中的消息数为0,接收进程已无法从,
158、接收进程已无法从消息队列中取得消息时才会阻塞。消息队列中取得消息时才会阻塞。 电脑基础知识计算机操作系统第二章进 程 管 理 2.5.4消息缓冲队列通信机制消息缓冲队列通信机制1) 消息缓冲区消息缓冲区在在消消息息缓缓冲冲队队列列通通信信方方式式中中,主主要要利利用用的的数数据据结结构构是是消消息缓冲区。它可描述如下:息缓冲区。它可描述如下:type message buffer=record sender;发送者进程标识符;发送者进程标识符 size; 消息长度消息长度 text; 消息正文消息正文 next; 指向下一个消息缓冲区的指针指向下一个消息缓冲区的指针 end 电脑基础知识计算机
159、操作系统第二章进 程 管 理 2) PCB中有关通信的数据项中有关通信的数据项在操作系统中采用了消息缓冲队列通信机制时,除了需在操作系统中采用了消息缓冲队列通信机制时,除了需要为进程设置消息缓冲队列外,还应在进程的要为进程设置消息缓冲队列外,还应在进程的PCB中增加消中增加消息队列队首指针,用于对消息队列进行操作,以及用于实现息队列队首指针,用于对消息队列进行操作,以及用于实现同步的互斥信号量同步的互斥信号量mutex和资源信号量和资源信号量sm。在。在PCB中应增加中应增加的数据项可描述如下:的数据项可描述如下: 电脑基础知识计算机操作系统第二章进 程 管 理 type processcon
160、trol block=record mq; 消息队列队首指针消息队列队首指针 mutex; 消息队列互斥信号量消息队列互斥信号量 sm; 消息队列资源信号量消息队列资源信号量 end 电脑基础知识计算机操作系统第二章进 程 管 理 2发送原语发送原语 发送进程在利用发送原语发送消息之前,应先在自己的内发送进程在利用发送原语发送消息之前,应先在自己的内存空间设置一发送区存空间设置一发送区a,见图,见图2-14 所示。把待发送的消息正文、所示。把待发送的消息正文、发送进程标识符、消息长度等信息填入其中,然后调用发送原发送进程标识符、消息长度等信息填入其中,然后调用发送原语,把消息发送给目标语,把消
161、息发送给目标(接收接收)进程。发送原语首先根据发送区进程。发送原语首先根据发送区a中所设置的消息长度中所设置的消息长度a.size来申请一缓冲区来申请一缓冲区i,接着把发送区,接着把发送区a中的信息复制到缓冲区中的信息复制到缓冲区i中。为了能将中。为了能将i挂在接收进程的消息队挂在接收进程的消息队列列mq上,应先获得接收进程的内部标识符上,应先获得接收进程的内部标识符j,然后将,然后将i挂在挂在j.mq上。由于该队列属于临界资源,故在执行上。由于该队列属于临界资源,故在执行insert操作的前后,操作的前后,都要执行都要执行wait和和signal操作。操作。 电脑基础知识计算机操作系统第二章
162、进 程 管 理 发送原语可描述如下:发送原语可描述如下:procedure send(receiver,a)begingetbuf(a.size,i);根据;根据a.size申请缓冲区;申请缓冲区;i.sender:= a.sender; 将发送区将发送区a中的信息复制到消息缓冲区中的信息复制到消息缓冲区i中;中;i.size:=a.size;i.text:=a.text;i.next:=0;getid(PCB set,receiver.j);获得接收进程内部标识符;获得接收进程内部标识符;wait(j.mutex);insert(j.mq,i);将消息缓冲区插入消息队列;将消息缓冲区插入消息
163、队列;signal(j.mutex);signal(j.sm);end 电脑基础知识计算机操作系统第二章进 程 管 理 图 2-14消息缓冲通信 电脑基础知识计算机操作系统第二章进 程 管 理 3接收原语接收原语接收进程调用接收原语接收进程调用接收原语receive(b),从自己的消息缓冲,从自己的消息缓冲队列队列mq中摘下第一个消息缓冲区中摘下第一个消息缓冲区i,并将其中的数据复制到,并将其中的数据复制到以以b为首址的指定消息接收区内。接收原语描述如下为首址的指定消息接收区内。接收原语描述如下: 电脑基础知识计算机操作系统第二章进 程 管 理 procedure receive(b)begi
164、nj:= internal name; j为接收进程内部的标识符;为接收进程内部的标识符;wait(j.sm);wait(j.mutex);remove(j.mq,i); 将消息队列中第一个消息移出;将消息队列中第一个消息移出;signal(j.mutex);b.sender:=i.sender;将消息缓冲区将消息缓冲区i中的信息复制到接收区中的信息复制到接收区b;b.size:=i.size;b.text:=i.text;end 电脑基础知识计算机操作系统第二章进 程 管 理 2.6线程线程 2.6.1线程的基本概念线程的基本概念1线程的引入线程的引入如果说,在操作系统中引入进程的目的,是为
165、了使多个如果说,在操作系统中引入进程的目的,是为了使多个程序能并发执行,以提高资源利用率和系统吞吐量,那么,程序能并发执行,以提高资源利用率和系统吞吐量,那么,在操作系统中再引入线程,则是为了减少程序在并发执行时在操作系统中再引入线程,则是为了减少程序在并发执行时所付出的时空开销,使所付出的时空开销,使OS具有更好的并发性。具有更好的并发性。电脑基础知识计算机操作系统第二章进 程 管 理 为了说明这一点,我们首先来回顾进程的两个基本属性为了说明这一点,我们首先来回顾进程的两个基本属性: 进程是一个可拥有资源的独立单位;进程是一个可拥有资源的独立单位; 进程同时又是一个可独立调度和分派的基本单位
166、。进程同时又是一个可独立调度和分派的基本单位。 正正是是由由于于进进程程有有这这两两个个基基本本属属性性,才才使使之之成成为为一一个个能能独独立立运运行行的的基基本本单单位位,从从而而也也就就构构成成了了进进程程并并发发执执行行的的基基础础。然然而而,为为使使程程序序能能并并发发执执行行,系系统统还还必必须须进进行行以以下下的的一一系系列列操作。操作。 电脑基础知识计算机操作系统第二章进 程 管 理 1) 创建进程创建进程系系统统在在创创建建一一个个进进程程时时,必必须须为为它它分分配配其其所所必必需需的的、除除处处理理机机以以外外的的所所有有资资源源,如如内内存存空空间间、I/O设设备备,以
167、以及及建建立立相相应应的的PCB。2) 撤消进程撤消进程系统在撤消进程时,又必须先对其所占有的资源执行回收系统在撤消进程时,又必须先对其所占有的资源执行回收操作,然后再撤消操作,然后再撤消PCB。 电脑基础知识计算机操作系统第二章进 程 管 理 3) 进程切换进程切换对对进进程程进进行行切切换换时时,由由于于要要保保留留当当前前进进程程的的CPU环环境境和和设置新选中进程的设置新选中进程的CPU环境,因而须花费不少的处理机时间。环境,因而须花费不少的处理机时间。换言之,由于进程是一个资源的拥有者,因而在创建、换言之,由于进程是一个资源的拥有者,因而在创建、撤消和切换中,系统必须为之付出较大的时
168、空开销。正因如撤消和切换中,系统必须为之付出较大的时空开销。正因如此,在系统中所设置的进程,其数目不宜过多,进程切换的此,在系统中所设置的进程,其数目不宜过多,进程切换的频率也不宜过高,这也就限制了并发程度的进一步提高。频率也不宜过高,这也就限制了并发程度的进一步提高。 电脑基础知识计算机操作系统第二章进 程 管 理 如何能使多个程序更好地并发执行同时又尽量减少系统如何能使多个程序更好地并发执行同时又尽量减少系统的开销,已成为近年来设计操作系统时所追求的重要目标。的开销,已成为近年来设计操作系统时所追求的重要目标。 有不少研究操作系统的学者们想到,若能将进程的上述有不少研究操作系统的学者们想到
169、,若能将进程的上述两个属性分开,由操作系统分开处理,亦即对于作为调度和两个属性分开,由操作系统分开处理,亦即对于作为调度和分派的基本单位,不同时作为拥有资源的单位,以做到分派的基本单位,不同时作为拥有资源的单位,以做到“轻轻装上阵装上阵”;而对于拥有资源的基本单位,又不对之进行频繁;而对于拥有资源的基本单位,又不对之进行频繁的切换。的切换。 正是在这种思想的指导下,形成了线程的概念。正是在这种思想的指导下,形成了线程的概念。 电脑基础知识计算机操作系统第二章进 程 管 理 2线程与进程的比较线程与进程的比较1) 调度调度在传统的操作系统中,作为拥有资源的基本单位和独立在传统的操作系统中,作为拥
170、有资源的基本单位和独立调度、分派的基本单位都是进程。而在引入线程的操作系统调度、分派的基本单位都是进程。而在引入线程的操作系统中,则把线程作为调度和分派的基本单位,而进程作为资源中,则把线程作为调度和分派的基本单位,而进程作为资源拥有的基本单位,把传统进程的两个属性分开,使线程基本拥有的基本单位,把传统进程的两个属性分开,使线程基本上不拥有资源,这样线程便能轻装前进,从而可显著地提高上不拥有资源,这样线程便能轻装前进,从而可显著地提高系统的并发程度。系统的并发程度。 在同一进程中,线程的切换不会引起进程的切换,但从在同一进程中,线程的切换不会引起进程的切换,但从一个进程中的线程切换到另一个进程
171、中的线程时,将会引起一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。进程的切换。 电脑基础知识计算机操作系统第二章进 程 管 理 2) 并发性并发性在引入线程的操作系统中,不仅在引入线程的操作系统中,不仅进程之间可以并发执行进程之间可以并发执行,而且而且在一个进程中的多个线程之间亦可并发执行在一个进程中的多个线程之间亦可并发执行,使得操作,使得操作系统具有更好的并发性,从而能更加有效地提高系统资源的系统具有更好的并发性,从而能更加有效地提高系统资源的利用率和系统的吞吐量。利用率和系统的吞吐量。电脑基础知识计算机操作系统第二章进 程 管 理 例例如如,在在一一个个未未引引入入线线
172、程程的的单单CPU操操作作系系统统中中,若若仅仅设设置置一一个个文文件件服服务务进进程程,当当该该进进程程由由于于某某种种原原因因而而被被阻阻塞塞时时,便没有其它的文件服务进程来提供服务。便没有其它的文件服务进程来提供服务。 在在引引入入线线程程的的操操作作系系统统中中,则则可可以以在在一一个个文文件件服服务务进进程程中中设设置置多多个个服服务务线线程程。当当第第一一个个线线程程等等待待时时,文文件件服服务务进进程程中中的的第第二二个个线线程程可可以以继继续续运运行行,以以提提供供文文件件服服务务;当当第第二二个个线程阻塞时,则可由第三个继续执行,提供服务。线程阻塞时,则可由第三个继续执行,提
173、供服务。 显显然然,这这样样的的方方法法可可以以显显著著地地提提高高文文件件服服务务的的质质量量和和系系统的吞吐量。统的吞吐量。 电脑基础知识计算机操作系统第二章进 程 管 理 3) 拥有资源拥有资源不论是传统的操作系统,还是引入了线程的操作系统,不论是传统的操作系统,还是引入了线程的操作系统,进程都可以拥有资源,是系统中拥有资源的一个基本单位进程都可以拥有资源,是系统中拥有资源的一个基本单位。 一般而言,线程自己不拥有系统资源一般而言,线程自己不拥有系统资源(也有一点必不可少也有一点必不可少的资源的资源),但它可以访问其隶属进程的资源,即一个进程的代,但它可以访问其隶属进程的资源,即一个进程
174、的代码段、数据段及所拥有的系统资源,如已打开的文件、码段、数据段及所拥有的系统资源,如已打开的文件、I/O设设备等,可以供该进程中的所有线程所共享。备等,可以供该进程中的所有线程所共享。 电脑基础知识计算机操作系统第二章进 程 管 理 4) 系统开销系统开销在在创建或撤消进程创建或撤消进程时,系统都要为之创建和回收进程控时,系统都要为之创建和回收进程控制块,分配或回收资源,如内存空间和制块,分配或回收资源,如内存空间和I/O设备等,操作系统设备等,操作系统所付出的开销明显大于线程创建或撤消时的开销。所付出的开销明显大于线程创建或撤消时的开销。 类似地,在类似地,在进程切换进程切换时,涉及到当前
175、进程时,涉及到当前进程CPU环境的保环境的保存及新被调度运行进程的存及新被调度运行进程的CPU环境的设置,而线程的切换则环境的设置,而线程的切换则仅需保存和设置少量寄存器内容,不涉及存储器管理方面的仅需保存和设置少量寄存器内容,不涉及存储器管理方面的操作,所以就切换代价而言,进程也是远高于线程的。操作,所以就切换代价而言,进程也是远高于线程的。 此外,由于一个进程中的多个线程具有相同的地址空间,此外,由于一个进程中的多个线程具有相同的地址空间,在同步和通信的实现方面线程也比进程容易。在一些操作系在同步和通信的实现方面线程也比进程容易。在一些操作系统中,线程的切换、同步和通信都无须操作系统内核的
176、干预。统中,线程的切换、同步和通信都无须操作系统内核的干预。 电脑基础知识计算机操作系统第二章进 程 管 理 3线程的属性线程的属性在在多多线线程程OS中中,通通常常是是在在一一个个进进程程中中包包括括多多个个线线程程,每每个个线线程程都都是是作作为为利利用用CPU的的基基本本单单位位,是是花花费费最最小小开开销销的的实实体。线程具有下述属性。体。线程具有下述属性。(1) 轻型实体。线程中的实体基本上不拥有系统资源,轻型实体。线程中的实体基本上不拥有系统资源,只是有一点必不可少的、只是有一点必不可少的、 能保证其独立运行的资源,比如,能保证其独立运行的资源,比如,在每个线程中都应具有一个用于控
177、制线程运行的线程控制块在每个线程中都应具有一个用于控制线程运行的线程控制块TCB,用于指示被执行指令序列的程序计数器,保留局部变,用于指示被执行指令序列的程序计数器,保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈。量、少数状态参数和返回地址等的一组寄存器和堆栈。 电脑基础知识计算机操作系统第二章进 程 管 理 (2) 独独立立调调度度和和分分派派的的基基本本单单位位。在在多多线线程程OS中中,线线程程是是能能独独立立运运行行的的基基本本单单位位,因因而而也也是是独独立立调调度度和和分分派派的的基基本本单位。由于线程很单位。由于线程很“轻轻”,故线程的切换非常迅速且开销小。,故线程的切
178、换非常迅速且开销小。(3) 可可并并发发执执行行。在在一一个个进进程程中中的的多多个个线线程程之之间间可可以以并并发发执执行行,甚甚至至允允许许在在一一个个进进程程中中的的所所有有线线程程都都能能并并发发执执行行;同同样,不同进程中的线程也能并发执行。样,不同进程中的线程也能并发执行。(4) 共享进程资源。共享进程资源。在同一进程中的各个线程都可以共享在同一进程中的各个线程都可以共享该进程所拥有的资源该进程所拥有的资源,这首先表现在所有线程都具有相同的,这首先表现在所有线程都具有相同的地址空间地址空间(进程的地址空间进程的地址空间)。这意味着线程可以访问该地址。这意味着线程可以访问该地址空间中
179、的每一个虚地址;此外,还可以访问进程所拥有的已空间中的每一个虚地址;此外,还可以访问进程所拥有的已打开文件、定时器、信号量机构等。打开文件、定时器、信号量机构等。 电脑基础知识计算机操作系统第二章进 程 管 理 4线程的状态线程的状态(1) 状态参数。在状态参数。在OS中的每一个线程都可以利用线程标中的每一个线程都可以利用线程标识符和一组状态参数进行描述。状态参数通常有这样几项:识符和一组状态参数进行描述。状态参数通常有这样几项: 寄存器状态,它包括程序计数器寄存器状态,它包括程序计数器PC和堆栈指针中的内容;和堆栈指针中的内容; 堆栈,在堆栈中通常保存有局部变量和返回地址;堆栈,在堆栈中通常
180、保存有局部变量和返回地址; 线程运行状态,用于描述线程正处于何种运行状态;线程运行状态,用于描述线程正处于何种运行状态; 优先级,描述线程执行的优先程度;优先级,描述线程执行的优先程度; 线程专有存储器,用于保存线程自己的局部变量拷贝;线程专有存储器,用于保存线程自己的局部变量拷贝; 信号屏蔽,即对某些信号加以屏蔽。信号屏蔽,即对某些信号加以屏蔽。 电脑基础知识计算机操作系统第二章进 程 管 理 (2) 线程运行状态。如同传统的进程一样,在各线程之间线程运行状态。如同传统的进程一样,在各线程之间也存在着共享资源和相互合作的制约关系,致使线程在运行时也存在着共享资源和相互合作的制约关系,致使线程
181、在运行时也具有间断性。相应地,线程在运行时也具有下述三种基本状也具有间断性。相应地,线程在运行时也具有下述三种基本状态态: 执行状态,表示线程正获得处理机而运行;执行状态,表示线程正获得处理机而运行; 就绪状态,指线程已具备了各种执行条件,一旦获得就绪状态,指线程已具备了各种执行条件,一旦获得CPU便可执行的状态;便可执行的状态; 阻塞状态,指线程在执行中因某事件而受阻,处于暂停执阻塞状态,指线程在执行中因某事件而受阻,处于暂停执行时的状态。行时的状态。 电脑基础知识计算机操作系统第二章进 程 管 理 5线程的创建和终止线程的创建和终止在在多多线线程程OS环环境境下下,应应用用程程序序在在启启
182、动动时时,通通常常仅仅有有一一个个线线程程在在执执行行,该该线线程程被被人人们们称称为为“初初始始化化线线程程”。它它可可根根据据需要再去创建若干个线程。需要再去创建若干个线程。 在在创创建建新新线线程程时时,需需要要利利用用一一个个线线程程创创建建函函数数(或或系系统统调调用用),并并提提供供相相应应的的参参数数,如如指指向向线线程程主主程程序序的的入入口口指指针针、堆堆栈的大小,以及用于调度的优先级等。栈的大小,以及用于调度的优先级等。 在在线线程程创创建建函函数数执执行行完完后后,将将返返回回一一个个线线程程标标识识符符供供以以后后使用。使用。 电脑基础知识计算机操作系统第二章进 程 管
183、 理 如同进程一样,如同进程一样,线程也是具有生命期的线程也是具有生命期的。终止线程的方。终止线程的方式有两种:一种是在线程完成了自己的工作后自愿退出;另式有两种:一种是在线程完成了自己的工作后自愿退出;另一种是线程在运行中出现错误或由于某种原因而被其它线程一种是线程在运行中出现错误或由于某种原因而被其它线程强行终止。强行终止。 但有些线程但有些线程(主要是系统线程主要是系统线程),在它们一旦被建立起来,在它们一旦被建立起来之后,便一直运行下去而不再被终止。之后,便一直运行下去而不再被终止。 在大多数的在大多数的OS中,中,线程被中止后并不立即释放它所占有线程被中止后并不立即释放它所占有的资源
184、,的资源,只有当进程中的其它线程执行了只有当进程中的其它线程执行了分离函数分离函数后,被终后,被终止的线程才与资源分离,此时的资源才能被其它线程利用。止的线程才与资源分离,此时的资源才能被其它线程利用。 电脑基础知识计算机操作系统第二章进 程 管 理 虽已被终止但尚未释放资源的线程,仍可以被需要它虽已被终止但尚未释放资源的线程,仍可以被需要它的线程所调用,以的线程所调用,以使被终止线程重新恢复运行使被终止线程重新恢复运行。 为此,为此,调用者线程调用者线程须调用一条被称为须调用一条被称为“等待线程终止等待线程终止”的连接命令,来与该线程进行连接。的连接命令,来与该线程进行连接。 如果在一个调用
185、者线程调用如果在一个调用者线程调用“等待线程终止等待线程终止”的连接的连接命令试图与指定线程相连接时,命令试图与指定线程相连接时,若指定线程尚未被终止若指定线程尚未被终止,则调用连接命令的线程将会阻塞,直至指定线程被终止后则调用连接命令的线程将会阻塞,直至指定线程被终止后才能实现它与调用者线程的连接并继续执行;才能实现它与调用者线程的连接并继续执行;若指定线程若指定线程已被终止,已被终止,则调用者线程不会被阻塞而是继续执行。则调用者线程不会被阻塞而是继续执行。 电脑基础知识计算机操作系统第二章进 程 管 理 6多线程多线程OS中的中的进程进程在在多多线线程程OS中中,进进程程是是作作为为拥拥有
186、有系系统统资资源源的的基基本本单单位位,通通常常的的进进程程都都包包含含多多个个线线程程并并为为它它们们提提供供资资源源,但但此此时时的的进进程程就就不不再再作作为为一一个个执执行行的的实实体体。多多线线程程OS中中的的进进程程有有以以下下属属性:性:(1) 作为系统资源分配的单位。作为系统资源分配的单位。 在多线程在多线程OS中,仍是将进程作为系统资源分配的基本单中,仍是将进程作为系统资源分配的基本单位,在任一进程中所拥有的资源包括受到分别保护的用户地位,在任一进程中所拥有的资源包括受到分别保护的用户地址空间、用于实现进程间和线程间同步和通信的机制、已打址空间、用于实现进程间和线程间同步和通
187、信的机制、已打开的文件和已申请到的开的文件和已申请到的I/O设备,以及一张由核心进程维护设备,以及一张由核心进程维护的地址映射表,该表用于实现用户程序的逻辑地址到其内存的地址映射表,该表用于实现用户程序的逻辑地址到其内存物理地址的映射。物理地址的映射。 电脑基础知识计算机操作系统第二章进 程 管 理 (2) 可包括多个线程。可包括多个线程。 通通常常,一一个个进进程程都都含含有有多多个个相相对对独独立立的的线线程程,其其数数目目可可多多可可少少,但但至至少少也也要要有有一一个个线线程程,由由进进程程为为这这些些(个个)线线程程提提供供资资源及运行环境,使这些线程可并发执行。源及运行环境,使这些
188、线程可并发执行。 在在OS中的所有线程都只能属于某一个特定进程。中的所有线程都只能属于某一个特定进程。电脑基础知识计算机操作系统第二章进 程 管 理 (3) 进程不是一个可执行的实体。进程不是一个可执行的实体。 在多线程在多线程OS中,是把线程作为独立运行的基本单位,所中,是把线程作为独立运行的基本单位,所以此时的进程已不再是一个可执行的实体。以此时的进程已不再是一个可执行的实体。 虽然如此,进程仍具有与执行相关的状态。虽然如此,进程仍具有与执行相关的状态。 例如,例如,所谓进程处于所谓进程处于“执行执行”状态,实际上是指该进程中状态,实际上是指该进程中的某线程正在执行的某线程正在执行。 此外
189、,对进程所施加的与进程状态有关的操作,也对其线此外,对进程所施加的与进程状态有关的操作,也对其线程起作用。例如,在把某个进程挂起时,该进程中的所有线程程起作用。例如,在把某个进程挂起时,该进程中的所有线程也都将被挂起;又如,在把某进程激活时,属于该进程的所有也都将被挂起;又如,在把某进程激活时,属于该进程的所有线程也都将被激活。线程也都将被激活。 电脑基础知识计算机操作系统第二章进 程 管 理 2.6.2线程间的同步和通信线程间的同步和通信1互斥锁互斥锁(mutex)互斥锁是一种比较简单的、用于实现线程间对资源互斥访互斥锁是一种比较简单的、用于实现线程间对资源互斥访问的机制。由于操作互斥锁的时
190、间和空间开销都较低,因而较问的机制。由于操作互斥锁的时间和空间开销都较低,因而较适合于高频度使用的关键共享数据和程序段。适合于高频度使用的关键共享数据和程序段。 互斥锁可以有两种状态,即开锁互斥锁可以有两种状态,即开锁(unlock)和关锁和关锁(lock)状态状态。相应地,可用两条命令相应地,可用两条命令(函数函数)对互斥锁进行操作。其中的关锁对互斥锁进行操作。其中的关锁lock操作用于将操作用于将mutex关上,开锁操作关上,开锁操作unlock则用于打开则用于打开mutex。 电脑基础知识计算机操作系统第二章进 程 管 理 当当一一个个线线程程需需要要读读/写写一一个个共共享享数数据据段
191、段时时,线线程程首首先先应应为为该数据段所设置的该数据段所设置的mutex执行关锁命令。执行关锁命令。 命命令令首首先先判判别别mutex的的状状态态,如如果果它它已已处处于于关关锁锁状状态态,则则试试图图访访问问该该数数据据段段的的线线程程将将被被阻阻塞塞;而而如如果果mutex是是处处于于开开锁锁状态,则将状态,则将mutex关上后便去读关上后便去读/写该数据段。写该数据段。 在在线线程程完完成成对对数数据据的的读读/写写后后,必必须须再再发发出出开开锁锁命命令令将将mutex打打开开,同同时时还还须须将将阻阻塞塞在在该该互互斥斥锁锁上上的的一一个个线线程程唤唤醒醒,其它的线程仍被阻塞在等
192、待其它的线程仍被阻塞在等待mutex打开的队列上。打开的队列上。 电脑基础知识计算机操作系统第二章进 程 管 理 另另外外,为为了了减减少少线线程程被被阻阻塞塞的的机机会会,在在有有的的系系统统中中还还提提供供了一种用于了一种用于mutex上的操作命令上的操作命令Trylock。 当当一一个个线线程程在在利利用用Trylock命命令令去去访访问问mutex时时,若若mutex处处于于开开锁锁状状态态,Trylock将将返返回回一一个个指指示示成成功功的的状状态态码码;反反之之,若若mutex处处于于关关锁锁状状态态,则则Trylock并并不不会会阻阻塞塞该该线线程程,而而只只是是返回一个指示操
193、作失败的状态码。返回一个指示操作失败的状态码。 电脑基础知识计算机操作系统第二章进 程 管 理 2条件变量条件变量在许多情况下,只利用在许多情况下,只利用mutex来实现互斥访问可能会引来实现互斥访问可能会引起死锁,我们通过一个例子来说明这一点。有一个线程在对起死锁,我们通过一个例子来说明这一点。有一个线程在对mutex 1执行关锁操作成功后,便进入一临界区执行关锁操作成功后,便进入一临界区C,若在临界,若在临界区内该线程又须访问某个临界资源区内该线程又须访问某个临界资源R,同样也为,同样也为R设置另一设置另一互斥锁互斥锁mutex 2。假如资源。假如资源R此时正处于忙碌状态,线程在对此时正处
194、于忙碌状态,线程在对mutex 2执行关锁操作后必将被阻塞,这样将使执行关锁操作后必将被阻塞,这样将使mutex 1一直一直保持关锁状态;如果保持了资源保持关锁状态;如果保持了资源R的线程也要求进入临界区的线程也要求进入临界区C,但由于,但由于mutex 1一直保持关锁状态而无法进入临界区,这一直保持关锁状态而无法进入临界区,这样便形成了死锁。为了解决这个问题便引入了条件变量。样便形成了死锁。为了解决这个问题便引入了条件变量。 电脑基础知识计算机操作系统第二章进 程 管 理 每每一一个个条条件件变变量量通通常常都都与与一一个个互互斥斥锁锁一一起起使使用用,亦亦即即,在创建一个互斥锁时便联系着一
195、个条件变量。在创建一个互斥锁时便联系着一个条件变量。 单单纯纯的的互互斥斥锁锁用用于于短短期期锁锁定定,主主要要是是用用来来保保证证对对临临界界区区的的互斥进入。互斥进入。 而而条条件件变变量量则则用用于于线线程程的的长长期期等等待待,直直至至所所等等待待的的资资源源成成为可用的资源。为可用的资源。电脑基础知识计算机操作系统第二章进 程 管 理 现在,我们看看如何利用互斥锁和条件变量来实现对资现在,我们看看如何利用互斥锁和条件变量来实现对资源源R的访问。的访问。 线程首先对线程首先对mutex执行关锁操作,若成功便进入临界区,执行关锁操作,若成功便进入临界区,然后查找用于描述该资源状态的数据结
196、构,以了解资源的情然后查找用于描述该资源状态的数据结构,以了解资源的情况。况。只要发现所需资源只要发现所需资源R正处于忙碌状态正处于忙碌状态,线程便转为等待状线程便转为等待状态,态,并对并对mutex执行开锁操作后,等待该资源被释放;执行开锁操作后,等待该资源被释放;若资源若资源处于空闲状态,处于空闲状态,表明线程可以使用该资源,于是将该资源设表明线程可以使用该资源,于是将该资源设置为忙碌状态,再对置为忙碌状态,再对mutex执行开锁操作。执行开锁操作。 下面给出了对上述资源的下面给出了对上述资源的申请申请(左半部分左半部分)和和释放释放(右半部分右半部分)操作的描述。操作的描述。 电脑基础知
197、识计算机操作系统第二章进 程 管 理 Lock mutexLock mutexcheck data structures; mark resource as free;while(resource busy); unlock mutex;wait(condition variable); wakeup(condition variable);mark resource as busy;unlock mutex; 电脑基础知识计算机操作系统第二章进 程 管 理 原来占有资源原来占有资源R的线程在使用完该资源后,便按照右半的线程在使用完该资源后,便按照右半部分的描述释放该资源,其中的部分的描述释放
198、该资源,其中的wakeup(condition variable)表示去唤醒在指定条件变量上等待的一个或多个线程。表示去唤醒在指定条件变量上等待的一个或多个线程。 在大多数情况下,由于所释放的是在大多数情况下,由于所释放的是临界资源临界资源,此时所唤,此时所唤醒的只能是在条件变量上等待的醒的只能是在条件变量上等待的某一个某一个线程,其它线程仍继线程,其它线程仍继续在该队列上等待。续在该队列上等待。 但如果线程所释放的是一个数据文件,该文件允许多个线但如果线程所释放的是一个数据文件,该文件允许多个线程同时对它执行读操作。在这种情况下,当一个写线程完成程同时对它执行读操作。在这种情况下,当一个写线
199、程完成写操作并释放该文件后,如果此时在该条件变量上还有多个写操作并释放该文件后,如果此时在该条件变量上还有多个读线程在等待,则该线程可以唤醒读线程在等待,则该线程可以唤醒所有的等待线程所有的等待线程。 电脑基础知识计算机操作系统第二章进 程 管 理 3信号量机制信号量机制1) 私用信号量私用信号量(private samephore)当某线程需利用信号量来实现当某线程需利用信号量来实现同一进程中各线程之间的同一进程中各线程之间的同步同步时,时,可调用创建信号量的命令来创建一私用信号量可调用创建信号量的命令来创建一私用信号量,其,其数据结构存放在应用程序的地址空间中。数据结构存放在应用程序的地址
200、空间中。 私用信号量属于特定的进程所有,私用信号量属于特定的进程所有,OS并不知道私用信号并不知道私用信号量的存在量的存在,因此,一旦发生私用信号量的占用者异常结束或,因此,一旦发生私用信号量的占用者异常结束或正常结束,但并未释放该信号量所占有空间的情况时,系统正常结束,但并未释放该信号量所占有空间的情况时,系统将无法使它恢复为将无法使它恢复为0(空空),也不能将它传送给下一个请求它的,也不能将它传送给下一个请求它的线程。线程。 电脑基础知识计算机操作系统第二章进 程 管 理 2) 公用信号量公用信号量(public semaphort)公用信号量是为公用信号量是为实现不同进程间或不同进程中各
201、线程之实现不同进程间或不同进程中各线程之间的同步而设置的间的同步而设置的。 由于它有着一个公开的名字供所有的进程使用,故而把由于它有着一个公开的名字供所有的进程使用,故而把它称为公用信号量。它称为公用信号量。 其数据结构是存放在受保护的系统存储区中,由其数据结构是存放在受保护的系统存储区中,由OS为为它分配空间并进行管理,故也称为系统信号量。它分配空间并进行管理,故也称为系统信号量。 如果信号量的占有者在结束时未释放该公用信号量,则如果信号量的占有者在结束时未释放该公用信号量,则OS会自动将该信号量空间回收,并通知下一进程。可见,会自动将该信号量空间回收,并通知下一进程。可见,公用信号量是一种
202、比较安全的同步机制。公用信号量是一种比较安全的同步机制。 电脑基础知识计算机操作系统第二章进 程 管 理 2.6.3线程的实现方式线程的实现方式1内核支持线程内核支持线程对于通常的进程,无论是系统进程还是用户进程,进程对于通常的进程,无论是系统进程还是用户进程,进程的创建、的创建、 撤消,以及要求由系统设备完成的撤消,以及要求由系统设备完成的I/O操作,都是利操作,都是利用系统调用而进入内核,再由内核中的相应处理程序予以完用系统调用而进入内核,再由内核中的相应处理程序予以完成的。成的。 进程的切换同样是在内核的支持下实现的。因此我们说,进程的切换同样是在内核的支持下实现的。因此我们说,不论什么
203、进程,它们都是在操作系统内核的支持下运行的,不论什么进程,它们都是在操作系统内核的支持下运行的,是与内核紧密相关的。是与内核紧密相关的。 电脑基础知识计算机操作系统第二章进 程 管 理 这这 里里 所所 谓谓 的的 内内 核核 支支 持持 线线 程程 KST(Kernel Supported Threads),也也都都同同样样是是在在内内核核的的支支持持下下运运行行的的,即即无无论论是是用用户户进进程程中中的的线线程程,还还是是系系统统进进程程中中的的线线程程,他他们们的的创创建建、撤撤消消和和切切换换等等也也是是依依靠靠内内核核,在在内内核核空空间间实实现现的的。此此外外,在在内内核核空空间
204、间还还为为每每一一个个内内核核支支持持线线程程设设置置了了一一个个线线程程控控制制块块TCB,内核是根据该控制块而感知某线程的存在内核是根据该控制块而感知某线程的存在,并对其加以控制。,并对其加以控制。这种线程实现方式主要有如下四个优点:这种线程实现方式主要有如下四个优点:(1) 在多处理器系统中,内核能够同时调度同一进程中多在多处理器系统中,内核能够同时调度同一进程中多个线程并行执行;个线程并行执行; 电脑基础知识计算机操作系统第二章进 程 管 理 (2) 如如果果进进程程中中的的一一个个线线程程被被阻阻塞塞了了,内内核核可可以以调调度度该该进进程程中中的的其其它它线线程程占占有有处处理理器
205、器运运行行,也也可可以以运运行行其其它它进进程程中中的线程;的线程;(3) 内内核核支支持持线线程程具具有有很很小小的的数数据据结结构构和和堆堆栈栈,线线程程的的切换比较快,切换开销小;切换比较快,切换开销小;(4) 内内核核本本身身也也可可以以采采用用多多线线程程技技术术,可可以以提提高高系系统统的的执行速度和效率。执行速度和效率。内核支持线程的主要缺点是:内核支持线程的主要缺点是:对于用户的线程切换而言,对于用户的线程切换而言,其模式切换的开销较大其模式切换的开销较大,在同一个进程中,在同一个进程中,从一个线程切换从一个线程切换到另一个线程时,需要从用户态转到内核态进行到另一个线程时,需要
206、从用户态转到内核态进行,这是因为,这是因为用户进程的线程在用户态运行,而线程调度和管理是在内核用户进程的线程在用户态运行,而线程调度和管理是在内核实现的,系统开销较大。实现的,系统开销较大。 电脑基础知识计算机操作系统第二章进 程 管 理 2用户级线程用户级线程用户级线程用户级线程ULT(User Level Threads)仅存在于用户空间中。仅存在于用户空间中。对于这种线程的创建、撤消、线程之间的同步与通信等功能,对于这种线程的创建、撤消、线程之间的同步与通信等功能,都无须利用系统调用来实现都无须利用系统调用来实现。 对于用户级线程的切换,通常发生在一个应用进程的诸多对于用户级线程的切换,
207、通常发生在一个应用进程的诸多线程之间,这时,也同样无须内核的支持。由于切换的规则远线程之间,这时,也同样无须内核的支持。由于切换的规则远比进程调度和切换的规则简单,因而使线程的切换速度特别快。比进程调度和切换的规则简单,因而使线程的切换速度特别快。可见,这种线程是与内核无关的。可见,这种线程是与内核无关的。 我们可以为一个应用程序建立多个用户级线程。在一个系我们可以为一个应用程序建立多个用户级线程。在一个系统中的用户级线程的数目可以达到数百个至数千个。统中的用户级线程的数目可以达到数百个至数千个。由于这些由于这些线程的任务控制块都是设置在用户空间,而线程所执行的操作线程的任务控制块都是设置在用
208、户空间,而线程所执行的操作也无须内核的帮助,因而内核完全不知道用户级线程的存在。也无须内核的帮助,因而内核完全不知道用户级线程的存在。 电脑基础知识计算机操作系统第二章进 程 管 理 值值得得说说明明的的是是,对对于于设设置置了了用用户户级级线线程程的的系系统统,其其调调度度仍仍是是以以进进程程为为单单位位进进行行的的。在在采采用用轮轮转转调调度度算算法法时时,各各个个进进程程轮轮流流执执行行一一个个时时间间片片,这这对对诸诸进进程程而而言言似似乎乎是是公公平平的的。但但假假如如在在进进程程A中中包包含含了了一一个个用用户户级级线线程程,而而在在另另一一个个进进程程B中中含含有有100个个用用
209、户户级级线线程程,这这样样,进进程程A中中线线程程的的运运行行时时间间将将是是进进程程B中中各各线线程程运运行行时时间间的的100倍倍;相相应应地地,其其速速度度要要快快上上100倍。倍。假如系统中设置的是内核支持线程,则调度便是以线程假如系统中设置的是内核支持线程,则调度便是以线程为单位进行的。在采用轮转法调度时,是各个线程轮流执行为单位进行的。在采用轮转法调度时,是各个线程轮流执行一个时间片。同样假定进程一个时间片。同样假定进程A中只有一个内核支持线程,而中只有一个内核支持线程,而在进程在进程B中有中有100个内核支持线程。此时进程个内核支持线程。此时进程B可以获得的可以获得的CPU时间是
210、进程时间是进程A的的100倍,且进程倍,且进程B可使可使100个系统调用并个系统调用并发工作。发工作。 电脑基础知识计算机操作系统第二章进 程 管 理 使使用用用用户户级级线线程程方方式式有有许许多多优优点点,主主要要表表现现在在如如下下三三个个方面:方面:(1) 线线程程切切换换不不需需要要转转换换到到内内核核空空间间,对对一一个个进进程程而而言言,其其所所有有线线程程的的管管理理数数据据结结构构均均在在该该进进程程的的用用户户空空间间中中,管管理理线线程程切切换换的的线线程程库库也也在在用用户户地地址址空空间间运运行行。因因此此,进进程程不不必必切切换换到到内内核核方方式式来来做做线线程程
211、管管理理,从从而而节节省省了了模模式式切切换换的的开开销销,也节省了内核的宝贵资源。也节省了内核的宝贵资源。(2) 调度算法可以是进程专用的调度算法可以是进程专用的。在不干扰操作系统调度。在不干扰操作系统调度的情况下,不同的进程可以根据自身需要,选择不同的调度的情况下,不同的进程可以根据自身需要,选择不同的调度算法对自己的线程进行管理和调度,而与操作系统的低级调算法对自己的线程进行管理和调度,而与操作系统的低级调度算法是无关的。度算法是无关的。 电脑基础知识计算机操作系统第二章进 程 管 理 (3) 用户级线程的实现与操作系统平台无关用户级线程的实现与操作系统平台无关,因为对于线,因为对于线程
212、管理的代码是在用户程序内的,属于用户程序的一部分,程管理的代码是在用户程序内的,属于用户程序的一部分,所有的应用程序都可以对之进行共享。所有的应用程序都可以对之进行共享。 因此,用户级线程甚至可以在不支持线程机制的操作系因此,用户级线程甚至可以在不支持线程机制的操作系统平台上实现。统平台上实现。 电脑基础知识计算机操作系统第二章进 程 管 理 用户级线程实现方式的主要缺点在于如下两个方面:用户级线程实现方式的主要缺点在于如下两个方面:(1) 系系统统调调用用的的阻阻塞塞问问题题。在在基基于于进进程程机机制制的的操操作作系系统统中中,大大多多数数系系统统调调用用将将阻阻塞塞进进程程,因因此此,当
213、当线线程程执执行行一一个个系系统统调调用用时时,不不仅仅该该线线程程被被阻阻塞塞,而而且且进进程程内内的的所所有有线线程程都都会会被被阻阻塞塞。而而在在内内核核支支持持线线程程方方式式中中,则则进进程程中中的的其其它它线线程程仍仍然可以运行。然可以运行。(2) 在单纯的用户级线程实现方式中,在单纯的用户级线程实现方式中,多线程应用不能多线程应用不能利用多处理机进行多重处理的优点利用多处理机进行多重处理的优点。内核每次分配给一个进。内核每次分配给一个进程的仅有一个程的仅有一个CPU,因此进程中仅有一个线程能执行,在该,因此进程中仅有一个线程能执行,在该线程放弃线程放弃CPU之前,其它线程只能等待
214、。之前,其它线程只能等待。 电脑基础知识计算机操作系统第二章进 程 管 理 3组合方式组合方式有些操作系统把用户级线程和内核支持线程两种方式进有些操作系统把用户级线程和内核支持线程两种方式进行组合,提供了组合方式行组合,提供了组合方式ULT/KST 线程。线程。在组合方式线程系在组合方式线程系统中,内核支持多统中,内核支持多KST线程的建立、调度和管理,同时,也线程的建立、调度和管理,同时,也允许用户应用程序建立、调度和管理用户级线程。允许用户应用程序建立、调度和管理用户级线程。 一些内核支持线程对应多个用户级线程,一些内核支持线程对应多个用户级线程,程序员可按应程序员可按应用需要和机器配置对
215、内核支持线程数目进行调整,以达到较用需要和机器配置对内核支持线程数目进行调整,以达到较好的效果好的效果。组合方式线程中,同一个进程内的多个线程可以。组合方式线程中,同一个进程内的多个线程可以同时在多处理器上并行执行,而且在阻塞一个线程时,并不同时在多处理器上并行执行,而且在阻塞一个线程时,并不需要将整个进程阻塞。所以,组合方式多线程机制能够结合需要将整个进程阻塞。所以,组合方式多线程机制能够结合KST和和ULT两者的优点,并克服了其各自的不足。两者的优点,并克服了其各自的不足。 电脑基础知识计算机操作系统第二章进 程 管 理 2.6.4线程的实现线程的实现1内核支持线程的实现内核支持线程的实现
216、在仅设置了内核支持线程的在仅设置了内核支持线程的OS中,一种可能的线程控制中,一种可能的线程控制方法是,系统在创建一个新进程时,便为它分配一个任务数方法是,系统在创建一个新进程时,便为它分配一个任务数据区据区PTDA(Per Task Data Area),其中包括若干个线程控制块,其中包括若干个线程控制块TCB空间,如图空间,如图2-15所示。在每一个所示。在每一个TCB中可保存线程标识中可保存线程标识符、优先级、线程运行的符、优先级、线程运行的CPU状态等信息。虽然这些信息与状态等信息。虽然这些信息与用户级线程用户级线程TCB中的信息相同,但现在却是被保存在内核空中的信息相同,但现在却是被
217、保存在内核空间中。间中。 电脑基础知识计算机操作系统第二章进 程 管 理 图 2-15任务数据区空间 电脑基础知识计算机操作系统第二章进 程 管 理 每当进程要创建一个线程时,便为新线程分配一个每当进程要创建一个线程时,便为新线程分配一个TCB,将有关信息填入该,将有关信息填入该TCB中,并为之分配必要的资源,如为中,并为之分配必要的资源,如为线程分配数百至数千个字节的栈空间和局部存储区,于是新线程分配数百至数千个字节的栈空间和局部存储区,于是新创建的线程便有条件立即执行。当创建的线程便有条件立即执行。当PTDA中的所有中的所有TCB空间已空间已用完,而进程又要创建新的线程时,只要其所创建的线
218、程数用完,而进程又要创建新的线程时,只要其所创建的线程数目未超过系统的允许值目未超过系统的允许值(通常为数十至数百个通常为数十至数百个),系统可再为之,系统可再为之分配新的分配新的TCB空间;在撤消一个线程时,也应回收该线程的空间;在撤消一个线程时,也应回收该线程的所有资源和所有资源和TCB。可见,内核支持线程的创建、。可见,内核支持线程的创建、 撤消均与进撤消均与进程的相类似。在有的系统中为了减少创建和撤消一个线程时程的相类似。在有的系统中为了减少创建和撤消一个线程时的开销,在撤消一个线程时,并不立即回收该线程的资源和的开销,在撤消一个线程时,并不立即回收该线程的资源和TCB,当以后再要创建
219、一个新线程时,便可直接利用已被撤,当以后再要创建一个新线程时,便可直接利用已被撤消但仍保持有资源和消但仍保持有资源和TCB的线程作为新线程。的线程作为新线程。 电脑基础知识计算机操作系统第二章进 程 管 理 内核支持线程的调度和切换与进程的调度和切换十分相似,内核支持线程的调度和切换与进程的调度和切换十分相似,也分抢占式方式和非抢占方式两种。也分抢占式方式和非抢占方式两种。 在线程的调度算法上,同样可采用时间片轮转法、优先权在线程的调度算法上,同样可采用时间片轮转法、优先权算法等。当线程调度选中一个线程后,便将处理机分配给它。算法等。当线程调度选中一个线程后,便将处理机分配给它。当然,线程在调
220、度和切换上所花费的开销,要比进程的小得多。当然,线程在调度和切换上所花费的开销,要比进程的小得多。 电脑基础知识计算机操作系统第二章进 程 管 理 2用户级线程的实现用户级线程的实现用用户户级级线线程程是是在在用用户户空空间间实实现现的的。所所有有的的用用户户级级线线程程都都具具有有相相同同的的结结构构,它它们们都都运运行行在在一一个个中中间间系系统统的的上上面面。当当前前有有两两种方式实现的中间系统,即运行时系统和内核控制线程。种方式实现的中间系统,即运行时系统和内核控制线程。1) 运行时系统运行时系统(Runtime System)所谓所谓“运行时系统运行时系统”,实质上是用于管理和控制线
221、程的函,实质上是用于管理和控制线程的函数数(过程过程)的集合,的集合,其中包括用于创建和撤消线程的函数、其中包括用于创建和撤消线程的函数、 线程线程同步和通信的函数以及实现线程调度的函数等。同步和通信的函数以及实现线程调度的函数等。 正因为有这些函数,才能使用户级线程与内核无关。运行正因为有这些函数,才能使用户级线程与内核无关。运行时系统中的所有函数都驻留在用户空间,并作为用户级线程与时系统中的所有函数都驻留在用户空间,并作为用户级线程与内核之间的接口。内核之间的接口。 电脑基础知识计算机操作系统第二章进 程 管 理 在传统的在传统的OS中,进程在切换时必须先由用户态转为核心中,进程在切换时必
222、须先由用户态转为核心态,再由核心来执行切换任务;态,再由核心来执行切换任务; 而用户级线程在切换时则不而用户级线程在切换时则不需转入核心态,而是由需转入核心态,而是由运行时系统运行时系统中的线程切换过程来执行中的线程切换过程来执行切换任务。切换任务。 该过程将线程的该过程将线程的CPU状态保存在该线程的堆栈中,然后按状态保存在该线程的堆栈中,然后按照一定的算法选择一个处于就绪状态的新线程运行,将新线照一定的算法选择一个处于就绪状态的新线程运行,将新线程堆栈中的程堆栈中的CPU状态装入到状态装入到CPU相应的寄存器中,一旦将栈相应的寄存器中,一旦将栈指针和程序计数器切换后,便开始了新线程的运行。
223、由于用指针和程序计数器切换后,便开始了新线程的运行。由于用户级线程的切换无需进入内核,且切换操作简单,因而使用户级线程的切换无需进入内核,且切换操作简单,因而使用户级线程的切换速度非常快。户级线程的切换速度非常快。 电脑基础知识计算机操作系统第二章进 程 管 理 不论在传统的不论在传统的OS中,还是在多线程中,还是在多线程OS中,系统资源都中,系统资源都是由内核管理的。是由内核管理的。 在传统的在传统的OS中,进程是利用中,进程是利用OS提供的系统调用来请求提供的系统调用来请求系统资源的,系统调用通过软中断系统资源的,系统调用通过软中断(如如trap)机制进入机制进入OS内核,内核,由内核来完
224、成相应资源的分配。由内核来完成相应资源的分配。 用户级线程是不能利用系统调用的。当线程需要系统资用户级线程是不能利用系统调用的。当线程需要系统资源时,是将该要求传送给运行时系统,由后者通过相应的系源时,是将该要求传送给运行时系统,由后者通过相应的系统调用来获得系统资源的。统调用来获得系统资源的。 电脑基础知识计算机操作系统第二章进 程 管 理 2) 内核控制线程内核控制线程这种线程又称为轻型进程这种线程又称为轻型进程LWP(Light Weight Process)。每一个进程都可拥有多个每一个进程都可拥有多个LWP,同用户级线程一样,每个,同用户级线程一样,每个LWP都有自己的数据结构都有自
225、己的数据结构(如如TCB),其中包括线程标识符、优,其中包括线程标识符、优先级、状态,另外还有栈和局部存储区等。先级、状态,另外还有栈和局部存储区等。 它们也可以共享进程所拥有的资源。它们也可以共享进程所拥有的资源。LWP可通过系统调可通过系统调用来获得内核提供的服务,这样,用来获得内核提供的服务,这样,当一个用户级线程运行时,当一个用户级线程运行时,只要将它连接到一个只要将它连接到一个LWP上,此时它便具有了内核支持线程上,此时它便具有了内核支持线程的所有属性。的所有属性。这种线程实现方式就是组合方式。这种线程实现方式就是组合方式。 电脑基础知识计算机操作系统第二章进 程 管 理 在一个系统
226、中的用户级线程数量可能很大,为了节省系在一个系统中的用户级线程数量可能很大,为了节省系统开销,不可能设置太多的统开销,不可能设置太多的LWP,而把这些,而把这些LWP做成一个缓做成一个缓冲池,称为冲池,称为“线程池线程池”。 用户进程中的任一用户线程都可以连接到用户进程中的任一用户线程都可以连接到LWP池中的任池中的任何一个何一个LWP上。为使每一用户级线程都能利用上。为使每一用户级线程都能利用LWP与内核通与内核通信,可以使多个用户级线程多路复用一个信,可以使多个用户级线程多路复用一个LWP,但只有当前,但只有当前连接到连接到LWP上的线程才能与内核通信,其余进程或者阻塞,上的线程才能与内核
227、通信,其余进程或者阻塞,或者等待或者等待LWP。电脑基础知识计算机操作系统第二章进 程 管 理 而每一个而每一个LWP都要连接到一个内核级线程上,这样,通都要连接到一个内核级线程上,这样,通过过LWP可把用户级线程与内核线程连接起来,用户级线程可可把用户级线程与内核线程连接起来,用户级线程可通过通过LWP来访问内核,但内核所看到的总是多个来访问内核,但内核所看到的总是多个LWP而看不而看不到用户级线程。到用户级线程。 亦即,由亦即,由LWP实现了在内核与用户级线程之间的隔离,实现了在内核与用户级线程之间的隔离,从而使用户级线程与内核无关。从而使用户级线程与内核无关。 图图2-16示出了利用轻型
228、进程作为中间系统时用户级线程示出了利用轻型进程作为中间系统时用户级线程的实现方法。的实现方法。 电脑基础知识计算机操作系统第二章进 程 管 理 图 2-16利用轻型进程作为中间系统 电脑基础知识计算机操作系统第二章进 程 管 理 当用户级线程不需要与内核通信时,并不需要当用户级线程不需要与内核通信时,并不需要LWP;而;而当要通信时,便需借助于当要通信时,便需借助于LWP,而且每个要通信的用户级线,而且每个要通信的用户级线程都需要一个程都需要一个LWP。 例如,在一个任务中,如果同时有例如,在一个任务中,如果同时有5个用户级线程发出了个用户级线程发出了对文件的读、写请求,这就需要有对文件的读、
229、写请求,这就需要有5个个LWP来予以帮助,即由来予以帮助,即由LWP将对文件的读、写请求发送给相应的内核级线程,再由将对文件的读、写请求发送给相应的内核级线程,再由后者执行具体的读、写操作。后者执行具体的读、写操作。 如果一个任务中只有如果一个任务中只有4个个LWP,则只能有,则只能有4个用户级线程个用户级线程的读、写请求被传送给内核线程,余下的一个用户级线程必的读、写请求被传送给内核线程,余下的一个用户级线程必须等待。须等待。 电脑基础知识计算机操作系统第二章进 程 管 理 在内核级线程执行操作时,如果发生阻塞,则与之相连在内核级线程执行操作时,如果发生阻塞,则与之相连接的多个接的多个LWP
230、也将随之阻塞,进而使连接到也将随之阻塞,进而使连接到LWP上的用户级上的用户级线程也被阻塞。如果进程中只包含了一个线程也被阻塞。如果进程中只包含了一个LWP,此时进程也,此时进程也应阻塞。应阻塞。 这种情况与前述的传统这种情况与前述的传统OS一样,在进程执行系统调用时,一样,在进程执行系统调用时,该进程实际上是阻塞的。该进程实际上是阻塞的。 但如果在一个进程中含有多个但如果在一个进程中含有多个LWP,则当一个,则当一个LWP阻塞阻塞时,进程中的另一个时,进程中的另一个LWP可继续执行;即使进程中的所有可继续执行;即使进程中的所有LWP全部阻塞,进程中的线程也仍然能继续执行,只是不能全部阻塞,进
231、程中的线程也仍然能继续执行,只是不能再去访问内核。再去访问内核。 电脑基础知识计算机操作系统第二章进 程 管 理 3用户级线程与内核控制线程的连接用户级线程与内核控制线程的连接1) 一对一模型一对一模型该该模模型型是是为为每每一一个个用用户户线线程程都都设设置置一一个个内内核核控控制制线线程程与与之之连连接接,当当一一个个线线程程阻阻塞塞时时,允允许许调调度度另另一一个个线线程程运运行行。在在多处理机系统中,则有多个线程并行执行。多处理机系统中,则有多个线程并行执行。该模型并行能力较强,但每创建一个用户线程相应地就该模型并行能力较强,但每创建一个用户线程相应地就需要创建一个内核线程,开销较大,
232、因此需要限制整个系统需要创建一个内核线程,开销较大,因此需要限制整个系统的线程数。的线程数。Windows 2000、Windows NT、OS/2等系统上都等系统上都实现了该模型。实现了该模型。 电脑基础知识计算机操作系统第二章进 程 管 理 2) 多对一模型多对一模型该该模模型型是是将将多多个个用用户户线线程程映映射射到到一一个个内内核核控控制制线线程程,为为了了管管理理方方便便,这这些些用用户户线线程程一一般般属属于于一一个个进进程程,运运行行在在该该进进程程的的用用户户空空间间,对对这这些些线线程程的的调调度度和和管管理理也也是是在在该该进进程程的的用用户户空空间间中中完完成成。当当用
233、用户户线线程程需需要要访访问问内内核核时时,才才将将其其映映射射到到一个内核控制线程上,但每次只允许一个线程进行映射。一个内核控制线程上,但每次只允许一个线程进行映射。该模型的主要优点是线程管理的开销小,效率高,但当该模型的主要优点是线程管理的开销小,效率高,但当一个线程在访问内核时发生阻塞,则整个进程都会被阻塞,一个线程在访问内核时发生阻塞,则整个进程都会被阻塞,而且在多处理机系统中,一个进程的多个线程无法实现并行。而且在多处理机系统中,一个进程的多个线程无法实现并行。 电脑基础知识计算机操作系统第二章进 程 管 理 3) 多对多模型多对多模型该该模模型型结结合合上上述述两两种种模模型型的的优优点点,将将多多个个用用户户线线程程映映射射到到多多个个内内核核控控制制线线程程,内内核核控控制制线线程程的的数数目目可可以以根根据据应应用用进进程程和和系系统统的的不不同同而而变变化化,可可以以比比用用户户线线程程少少,也也可可以以与与之之相相同。同。 电脑基础知识计算机操作系统