优秀课件笔记之进程管理(上)

1、本文所以内容来自 著名高校课件和学生笔记(校园里面经常见到有人高价买笔记)
2、任课教师不会提供参考文献,所以只能对作者表示感谢,如果引用了您的作品,可以用回复方式补充参考文献。
3、我不对文章无关问题进行解答,文章内容也比较难,我也很难解答您遇到的问题,如果发现BUG可以用回复方式帮我修正。
4、本课 计算机操作系统
,适用于计算机操作系统课、考研

本课其他部分的导航条见页面底部

§3.1  进程的概念
§3.2  进程的描述
§3.3  进程状态及其转换
§3.4  进程控制

§3.1
进程的概念
• 现代操作系统的重要特点是程序的并发执行,及系
统所拥有的资源被共享和系统的用户随机地使用。
这三个特点是互相联系和互相依赖的,它们是互相
独立的用户如何使用有限的计算机系统资源的反映。
通常,操作系统的重要任务之一是使用户充分、有
效地利用系统资源。采用一个什么样的概念,来描
述计算机程序的执行过程和作为资源分配的基本单
位才能充分反映操作系统的执行并发、资源共享及
用户随机的特点呢?这个概念就是进程。为了讲清
进程的概念,以及引入进程概念的必要性等,下面
将从操作系统的特点讲起。
2
3.1.1
程序的并发执行
1.
程序的顺序执行
程序是一个在时间上按严格次序前后相继的操作序
列,是一个静态的概念。程序体现了编程人员要求计算机
完成所要求功能时所应该采取的顺序步骤。显然,一个程
序只有经过执行才能得到最终结果,且一般用户在编写程
序时不考虑在自己的程序执行过程中还有其他用户程序存
在这一事实。另外,计算机
CPU
是通过时序脉冲来控制顺
序执行指令的。其执行过程可以描述为:
Repeat IR
← M
[pc

pc
← pc+1
1+〈 Execute (instruction in IR)

Until CPU halt
iltnPUhCtal
3
• 这里IR
为指令寄存器,pc
为程序计数器,M
为存储器。显
然,程序的顺序性与计算机硬件的顺序性是一致的。我们
把一个具有独立功能的程序独占处理机直至最终结束的过
程称为程序的顺序执行。程序的顺序执行具有如下特点:
(1)
顺序性
程序顺序执行时,其执行过程可看作一系列严格按程
序规定的状态转移过程。
(2)
封闭性
程序执行得到的最终结果由给定的初始条件决定,不
受外界因素的影响。
(3)
可再现性
只要输入的初始条件相同,则无论何时重复执行该程
序都会得到相同的结果。
4
2.
多道程序系统中程序执行环境的变化
在许多情况下,需要计算机能够同时处理多个具有独立
功能的程序。批处理系统、分时系统、实时系统以及网络与
分布式系统等都是这样的系统。这样的执行环境具有下述三
个特点:
(1)
独立性
每道程序都是逻辑上独立的,它们之间不存在
逻辑上的制约关系。
(2)
随机性
在多道程序环境下,特别是在多用户环境下,
程序和数据的输入与执行开始时间都是随机的。
(3)
资源共享
资源共享将导致对进程执行速度的制约。
5
3.
程序的并发执行
(1)
什么是程序的并发执行
所谓并发执行,是为了增强计算机系统的处理能力和
提高资源利用率所采取的一种同时操作技术。程序的并发
执行可进一步分为两种:第一种是多道程序系统的程序执
行环境变化所引起的多道程序的并发执行。由于资源的有
限性,多道程序的并发执行总是伴随着资源的共享与竞争。
从而制约各道程序的执行速度。而无法作到在微观上,也
就是在指令级上的同时执行。因此,尽管多道程序的并发
执行在宏观上是同时进行的,但在微观上仍是顺序执行
的;第二种并发执行是在某道程序的几个程序段中(例如
几个程序),包含着一部分可以同时执行或顺序颠倒执行
的代码。例如语句:
6
read (a)

read (b)

• 它们既可以同时执行,也可颠倒次序执行。对于这
样的语句,同时执行不会改变顺序程序所具有的逻
辑性质。因此,可以采用并发执行来充分利用系统
资源以提高计算机的处理能力。
• 程序的并发执行可总结为:一组在逻辑上互相独立
的程序或程序段在执行过程中,其执行时间在客观
上互相重叠,即一个程序段的执行尚未结束,另一
个程序段的执行已经开始的这种执行方式。
• 程序的并发执行不同于程序的并行执行。程序的并
行执行是指一组程序按独立的、异步的速度执行。
并行执行不等于时间上的重叠。可以将并发执行过
程描述为: 7
S0
Cobegin
P1
;P2
;...
Pn
Coend
Sn
• 这里,S0
,Sn
分别表示并发程序段P1
,P2
,…
,Pn
开始执
行前和并发执行结束后的语句。P1
,P2
,…
,Pn
也可以由
同一程序段中的不同语句组成。1966
年Bernstein
提出了两
相邻语句S1
,S2
可以并发执行的条件:
• 将程序中任一语句Si
划分为两个变量的集合R(Si
)
和W(Si
iSW(
)

其中
R(Si
)={a1 a2

am}
,aj(j
=1
,…
,m)
• 是语句Si
在执行期间必须对其进行读写的变量;
8
W(Si
)={b1 b2

bn
}
,bj(j
jbj
=1
,…
,n)
• 是语句Si
在执行期间必须对其进行修改、访问
的变量;
• 如果对于语句S1
和S2
,有

R(S1)
∩ W(S2)={
∮}


W(S1)
∩ R(S2)={
∮}


W(S1)
∩ W(S2)={
∮}
同时成立,则语句S1
和S2
是可以并发执行的。
9
(2)
程序的并发执行所带来的影响
程序的并发执行充分地利用了系统资源,从而提
高了系统的处理能力,这是并发执行好的一方面。但
是,正如前面所提到的那样,由于系统资源有限,程
序的并发执行必然导致资源共享和资源竞争,从而改
变程序的执行速度。如果并发执行的各程序段中语句
或指令满足上述Bernstein
的三个条件,则认为并发执
行不会对执行结果的封闭性和可再现性产生影响(证
明略)。但在一般情况下,系统要判定并发执行的各
程序段是否满足Bernstein
条件是相当困难的。从而,
如果并发执行的程序段不按照特定的规则和方法进行
资源共享和竞争,则其执行结果将不可避免地失去封
闭性和可再现性。下面的例子说明了这一点。
10
图3.1
堆栈的取数和存数过程
11
• 例:设有堆栈S
,栈指针top
,栈中存放内存中相应
数据块地址(如图3.1(a)
)设有两个程序段
getaddr(top
)
和reladdr(blk
erabkdl )
,其中getaddr(top
)
从给
定的top
所指栈中取出相应的内存数据块地址,而
reladdr(blk
erabkdl )
则将内存数据块地址blk
放入堆栈S
中。
getaddr(top
)
和reladdr(blk
erabkdl )
可分别描述为:
procedure
getaddr(top
)
begin
local r
r
←(top)
top
← top-1
1otpreturn(
r)
end
procedure
reladdr(blk
erabkdl )
12
begin
top
← top+1
1otp+
(top)

blk
end
• 显然,如果上例中的getaddr

reladdr
程序段进行
顺序执行,其执行结果具有封闭性和可再现性。但
如果对这两个程序段采用并发执行,则在单CPU

统中,将有可能出现下述情况:
13
• 首先,程序段
reladdr
开始执行,准备释放内存数据块
地址入栈。然而,当reladdr
执行到top
← top+1
语句时
(如图3.1(b)
),程序段getaddr
也开始执行且抢占了
处理机,从而程序段reladdr
停在top
← top+1
处等待处
理机。getaddr
程序段的执行目的是要从对应的堆栈指
针top
所指的栈格中取出一个内存数据块地址,显然,
由于reladdr
程序段的执行将指针top
升高了一格且未
放进适当的数据,getaddr
的执行结果是失败的(如图
3.1(c)
)。另外,如果改变程序段getaddr

reladdr

执行顺序或执行速度,又可得到不同的执行结果。这
说明了如下问题:在某些情况下,程序的并发执行使
得其执行结果不再具有封闭性和可再现性,且可能造
成程序出现错误。
14
• 上例中的程序段并发执行出现错误结果是由于两程序
段共享资源堆栈S
,从而使得执行结果受执行速度影响。
一般情况下,并发执行的各程序段如果共享软、硬件
资源,都会造成其执行结果受执行速度影响的局面。
显然,这是程序设计人员不希望看到的。为了使得在
并发执行时不出现错误结果,必须采取某些措施来制
约、控制各并发程序段的执行速度。这在操作系统程
序设计中尤其重要,因为操作系统用户随机性与各道
程序逻辑独立的特点将使得每个用户程序所使用的软、
硬件资源都受到其他并发程序的共享和竞争,从而得
到非预料的或不正确的结果。为了控制和协调各程序
段执行过程中的软、硬件资源的共享和竞争,显然,
必须应该有一个描述各程序段执行过程和共享资源的
基本单位。
15
• 从上述讨论可以看出,由于程序的顺序性、静态性
以及孤立性,用程序段作为描述其执行过程和共享
资源的基本单位既增加操作系统设计和实现的复杂
性,也无法反映操作系统所应该具有的程序段执行
的并发性、用户随机性,以及资源共享等特征。也
就是说,用程序作为描述其执行过程以及共享资源
的基本单位是不合适的。需要有一个能描述程序的
执行过程且能用来共享资源的基本单位。这个基本
单位被称为进程(或任务)。
16
3.1.2
进程的定义
进程的概念是60
年代初期,首先在MIT

Multics
系统
和IBM

TSS/360
系统中引用的。从那以来,人们对进程下
过许多各式各样的定义。
(1)
进程是可以并行执行的计算部分(S.E.Madnick

J.T.Donovan
);
(2)
进程是一个独立的可以调度的活动(E.Cohen

D.Jofferson
);
(3)
进程是一抽象实体,当它执行某个任务时,将要分配和释放
各种资源(P.Denning
);
(4)
行为的规则叫程序,程序在处理机上执行时的活动称为进程
(E.W.Dijkstra
ijtsrakEDW.
);
(5)
一个进程是一系列逐一执行的操作,而操作的确切含义则有
赖于以何种详尽程度来描述进程(Brinch
Hansen
),等等。
17
l以上进程的定义,尽管各有侧重,但在本质上是
相同的。即主要注重进程是一个动态的执行过程
这一概念。也可以这样定义进程:一个具有独立
功能的程序对某个数据集在处理机上的执行过程
和分配资源的基本单位。这里,程序指一组操作
序列,而数据集则是接受程序规定操作的一组存
储单元的内容。
l进程和程序是两个既有联系又有区别的概念,它
们的区别和关系可简述如下:
18
(1)
进程是一个动态概念,而程序则是一个静态概念。程序是
指令的有序集合,没有任何执行的含义。而进程则强调执
行过程,它动态地被创建,并被调度执行后消亡。
(2)
进程具有并行特征,而程序没有。由进程的定义可知,进
程具有并行特征的两个方面,即独立性和异步性。??也就是
说,在不考虑资源共享的情况下,各进程的执行是独立
的,执行速度是异步的。显然,由于程序不反映执行过
程,所以不具有并行特征。
(3)
进程是竞争计算机系统资源的基本单位,从而其并行性受
到系统自己的制约。这里,制约就是对进程独立性和异步
性的限制。
(4)
不同的进程可以包含同一程序,只要该程序所对应的数据
集不同。
19
3.1.3
作业和进程的关系
作业是用户需要计算机完成某项任务时要求计算机所
作工作的集合。进程是已提交完毕程序的执行过程的描
述,是资源分配的基本单位。区别与关系:
(1)
作业是用户向计算机提交任务的任务实体。在用户向计算
机提交作业之后,系统将它放入外存中的作业等待队列中
等待执行。而进程则是完成用户任务的执行实体,是向系
统申请分配资源的基本单位。任一进程,只要它被创建,
总有相应的部分存在于内存中。
(2)
一个作业可由多个进程组成。且必须至少由一个进程组
成,但反过来不成立。
(3)
作业的概念主要用在批处理系统中。而进程的概念则用在
几乎所有的多道系统中。
20
§3.2
进程的描述
从处理机的活动角度来看,又如何识别描述程序执行
活动的进程呢?显然,系统中需要有描述进程存在和能够
反映其变化的物理实体,即进程的静态描述。进程的静态
描述由三部分组成:进程控制块PCB
,有关程序段和该程
序段对其进行操作的数据结构集。进程控制块包含了有关
进程的描述信息、控制信息以及资源信息,是进程动态特
征的集中反映。系统根据PCB
感知进程的存在和通过PCB
中所包含的各项变量的变化,掌握进程所处的状态以达到
控制进程活动的目的。由于进程的PCB
是系统感知进程的
唯一实体,因此,在几乎所有的多道操作系统中,一个进
程的PCB
结构都是全部或部分常驻内存的。
21
进程的程序部分描述进程所要完成的功能。
而数据结构集是程序在执行时必不可少的工作区
和操作对象。这两部分是进程完成所需功能的物
质基础。由于进程的这两部分内容与控制进程的
执行及完成进程功能直接有关,因而,在大部分
多道操作系统中,这两部分内容放在外存中,直
到该进程执行时再调入内存。下面分别介绍进程
的PCB结构、程序与数据结构集。
22
3.2.1
进程控制块PCB
如上所述,PCB
包含一个进程的描述信息、控
制信息及资源信息,有些系统中还有进程调度等待
所使用的现场保护区。PCB
集中反映一个进程的
动态特征。在进程并发执行时,由于资源共享,带
来各进程之间的相互制约。显然,为了反映这些制
约关系和资源共享关系,在创建一个进程时,应首
先创建其
PCB
,然后才能根据PCB
中信息对进程
实施有效的管理和控制。当一个进程完成其功能之
后,系统则释放PCB
,进程也随之消亡。
一般来说,根据操作系统的要求不同,进程的
PCB
所包含的内容会多少有所不同。但是,下面所
示基本内容是必需的:
23
(1)
描述信息

进程名或进程标识号

用户名或用户标识号

家族关系
(2)
控制信息

进程当前状态
进程在活动期间可分为就绪态、执行态和等待状态。

进程优先级
进程优先级是选取进程占有处理机的重要依据。与进
程优先级有关的PCB
表项有:
a.
占有CPU
时间;
b.
进程优先级偏移;
c.
占据内存时间,等。
24

程序开始地址

各种计时信息
给出进程占有和利用资源的有关情况。

通信信息
通信信息用来说明该进程在执行过程中与别的进程所
发生的信息交换情况。
(3)
资源管理信息
PCB
中包含最多的是资源管理信息,包括有关存储器
的信息、使用输入输出设备的信息、有关文件系统的信息
等。这些信息有:

占用内存大小及其管理用数据结构指针,例如后述
内存管理中所用到的进程页表指针等。
25

在某些复杂系统中,还有对换或覆盖用的有关信
息,如对换程序段长度,对换外存地址等。这些信
息在进程申请、释放内存中使用。

共享程序段大小及起始地址。

输入输出设备的设备号,所要传送的数据长度、
缓冲区地址、缓冲区长度及所用设备的有关数据结
构指针等。这些信息在进程申请释放设备进行数据
传输中使用。

指向文件系统的指针及有关标识等。进程可使用
这些信息对文件系统进行操作。
26
(4) CPU
现场保护结构
当前进程因等待某个事件而进入等待状态或因某种事
件发生被中止在处理机上的执行时,为了以后该进程能在
被打断处恢复执行,需要保护当前进程的
CPU
现场(或称
进程上下文)。PCB
中设有专门的
CPU
现场保护结构,以
存储退出执行时的进程现场数据。
总之,进程控制块PCB
是系统感知进程存在的唯一实
体。通过对PCB
的操作,系统为有关进程分配资源从而使
得有关进程得以被调度执行;而完成进程所要求功能的程
序段的有关地址,以及程序段在进程过程中因某种原因被
停止执行后的现场信息也都在PCB
中。最后,当进程执行
结束后,则通过释放PCB
来释放进程所占有的各种资源。
27
由于PCB
中包含有较多的信息,因此,一个
PCB
表往往要占据较大的存储空间(一般占几百到
几千个字节)。在有的系统中,为了减少
PCB

内存的占用量,只允许PCB
中最常用的部分,如
CPU
现场保护、进程描述信息、控制信息等常驻内
存。PCB
结构中的其他部分则存放于外存之中,
待该进程将要执行时与其他数据一起装入内存。
近年来,面向对象技术已被用于操作系统设计。
在面向对象的操作系统中,进程的描述将采用其他
方式。
28
3.2.2
进程上下文
本节介绍包括程序段和数据集在内的上下文的概念。
进程上下文实际上是进程执行活动全过程的静态描述。
具体地说,进程上下文包括计算机系统中与执行该进程有
关的各种寄存器的值、程序段在经过编译之后形成的机器
指令代码集(或称正文段)、数据集及各种堆栈值和PCB
结构(
图3.2)
。这里,有关寄存器和栈区的内容是重要的。例
如,没有程序计数器PC
和程序状态寄存器PS
,CPU
将无法
知道下条待执行指令的地址和控制有关操作。从而,从
CPU
是活动的观点来静态地看一个进程时,必须把有关寄
存器和栈区的内容也包括在其中。无论在何种系统中,进
程上下文的各部分都必须按一定的规则有机地组合起来以
便于执行。
29
图3.2
进程上下文结构
30
u进程上下文可按一定的执行层次组合,例如用户级上
下文、系统级上下文等。显然,一个进程的执行是在
该进程的上下文中执行,而当系统调度新进程占有处
理机时,新老进程的上下文发生转换。
u在UNIX System
Ⅴ中,进程上下文由用户级上下文、
寄存器上下文以及系统级上下文组成。用户级上下文
由进程的用户程序段部分编译而成的用户正文段、用
户数据、用户栈等组成。而寄存器上下文则由程序寄
存器PC
、处理机状态字寄存器PS
、栈指针和通用寄存
器的值组成。其中PC
给出CPU
将要执行的下条指令的
虚地址;PS
给出机器与该进程相关联时的硬件状态,
例如当前执行模式、能否执行特权指令等;栈指针指
向下一项的当前地址,而通用寄存器则用于不同执行
模式之间的参数传递等。
31
u进程的系统级上下文又分为静态部分与动态部分。这里的
动态部分不是指程序的执行,而是指在进入和退出不同的
上下文层次时,系统为各层上下文中相关联的寄存器值所
保存和恢复的记录。
u系统级上下文的静态部分包括PCB
结构(UNIX
系统中的
PCB
结构被分为proc
结构和user
结构两部分)、将进程虚地
址空间映射到物理空间用的有关表格和核心栈。这里,核
心栈主要用来装载进程中所使用系统调用的调用序列。
u系统级上下文的动态部分是与寄存器上下文相关联的。进
程上下文的层次概念也主要体现在动态部分中,即系统级
上下文的动态部分可看成是一些数量变化的层次组成。其
变化规则满足先进后出的堆栈方式,每个上下文层次在栈
中各占一项。
uUNIX System
Ⅴ的进程上下文组成如图3.3

32
图3.3 UNIX System
Ⅴ进程上下文组成33
3.2.3
进程空间
任一进程,都有一个自己的地址空间,把该空间称为进程空间或
虚空间。进程空间的大小只与处理机的位数有关。例如,一个16
位长处
理机的进程空间大小为2
16
,而32
位长处理机的进程空间大小为2
32
。另
外,程序的执行都在进程空间内进行。用户程序、进程的各种控制表格
等都按一定的结构排列在进程空间中。在UNIX
以及Linux
等操作系统
中,进程空间还被划分为用户空间和系统空间两大部分。
图3.4
进程空间
34
n 在进程空间被划分为两大部分后,用户程序在用户
空间内执行,而操作系统内核程序则在进程的系统
空间内执行。
n 另外,为了防止用户程序访问系统空间,造成访问
出错,计算机系统还通过程序状态寄存器等设置不
同的执行模式,即用户模式和系统模式来进行保护。
人们也把用户执行模式和系统执行模式分别称为用
户态和系统态。
n 将在第5
章存储管理部分中进一步描述进程空间。
35
§3.3
进程状态及其转换
3.3.1
进程状态
u一个进程的生命期可以划分为一组状态,这些状态
刻划了整个进程。系统根据PCB
结构中的状态值
控制进程。在进程的生命期内,一个进程至少具有
三种基本状态,它们是:执行状态、等待状态和就
绪状态。
u处于就绪状态的进程已经得到除
CPU
之外的其他
资源,只要由调度得到处理机,便可立即投入执行。
36
u在有些系统中,为了有效地利用内存,就绪状态又
可进一步分为内存就绪状态和外存就绪状态。在这
样的系统中,只有处于内存就绪状态的进程在得到
处理机后才能立即投入执行。而处于外存就绪状态
的进程只有先成为内存就绪状态后,才可能被调度
执行。这种方式明显地提高了内存的利用效率,但
反过来也增加了系统开销和系统复杂性。
u在单CPU
系统中,任一时刻处于执行状态的进程只
能有一个。只有处于就绪状态的进程经调度选中之
后才可进入执行状态。
37
u在某些操作系统中,一个进程在其生命期内的执行过程
中,总要涉及到用户程序和操作系统内核程序两部分。因
此,进程的执行状态又可进一步划分为用户执行状态和系
统执行状态。划分用户态和系统态最主要的原因是要把用
户程序和系统程序区分开来,以利于程序的共享和保护。
显然,这也是以增加系统复杂度和系统开销为代价的。
u进程因等待某个事件发生而放弃处理机进入等待状态。显
然,等待状态可根据等待事件的种类而进一步划分为不同
的子状态,例如内存等待、设备等待、文件等待和数据等
待等。这样做的好处是系统控制简单,发现和唤醒相应的
进程较为容易。但系统中设置过多的状态又会造成系统参
数和状态转换过程的增加。
38
3.3.2
进程状态转换
u进程的状态反映进程执行过程的变化。这些状态随
着进程的执行和外界条件发生变化和转换。那么,
是什么样的条件使得进程各状态发生转换呢?图
3.5
给出了三个基本状态,即就绪状态、执行状态
与等待状态之间的转换关系。
u事实上,进程的状态转换是一个非常复杂的过程。
从一个状态到另一个状态的转换除了要使用不同的
控制过程(将在下节中讲述),有时还要借助于硬
件触发器才能完成。例如,在
UNIX
系统中,从系
统态到用户态的转换要借助硬件触发器完成。
39
图3.5
进程状态转换
40
§3.4




进程和处理机管理的一个重要任务是进程控制。所
谓进程控制,就是系统使用一些具有特定功能的程序
段来创建、撤消进程以及完成进程各状态间的转换,
从而达到多进程高效率并发执行和协调、实现资源共
享的目的。一般地,把系统态下执行的某些具有特定
功能的程序段称为原语。原语可分为两类:一类是机
器指令级的,其特点是执行期间不允许中断,正如在
物理学中的原子一样,在操作系统中,它是一个不可
分割的基本单位。另一类是功能级的,其特点是作为
原语的程序段不允许并发执行。这两类原语都在系统
态下执行,且都是为了完成某个系统管理所需要的功
能和被高层软件所调用。
41
显然,系统在创建、撤消一个进程以及要改变进
程的状态时,都要调用相应的程序段来完成这些功能。
那么,这些程序段是不是原语呢?如果它们不是原
语,则由上述原语的定义可知,这些程序段是允许并
发执行的。然而,如果不加控制和管理地让这些控制
进程状态转换及创建和撤消进程的程序段并发执行,
则会使得其执行结果失去封闭性和可再现性,从而达
不到进程控制的目的。反过来,如果对这些程序段采
用下面章节中所述的控制方法使其在并发执行过程中
也能完成进程控制任务的话,将会大大增加系统的开
销和复杂度。因此,在操作系统中,通常把进程控制
用程序段做成原语。用于进程控制的原语有:创建原
语、撤消原语、阻塞原语、唤醒原语等。
42
3.4.1
进程创建与撤消
1.
进程创建
(1)
由系统程序模块统一创建,例如在批处理系统中,由操作
系统的作业调度程序为用户作业创建相应的进程以完成用
户作业所要求的功能。
(2)
由父进程创建,例如在层次结构的系统中,父进程创建子
进程以完成并行工作。
由系统统一创建的进程之间的关系是平等的,它们之间
一般不存在资源继承关系。而在父进程创建的进程之间则
存在隶属关系,且互相构成树型结构的家族关系。属于某
个家族的一个进程可以继承其父进程所拥有的资源。另
外,无论是哪一种方式创建进程,在系统生成时,都必须
由操作系统创建一部分承担系统资源分配和管理工作的系
统进程。
43
无论是系统创建方式还是父进程创建方式,都必须调
用创建原语来实现。创建原语扫描系统的PCB
链表,在找
到一定PCB
表之后,填入调用者提供的有关参数,最后形
成代表进程的PCB
结构。这些参数包括:进程名、进程优
先级P0
、进程正文段起始地址d0
、资源清单R0
等。其
实现过程如图3.6

2.
进程撤消
以下几种情况导致进程被撤消:
(1)
该进程已完成所要求的功能而正常终止。
(2)
由于某种错误导致非正常终止。
(3)
祖先进程要求撤消某个子进程。
44
图3.6
创建原语流图45
u无论哪一种情况导致进程被撤消,进程都必须释放它
所占用的各种资源和PCB
结构本身,以利于资源的有
效利用。另外,当一个祖先进程撤消某个子进程时,
还需审查该子进程是否还有自己的子孙进程,若有的
话,还需撤消其子孙进程的
PCB
结构和释放它们所占
有的资源。
u撤消原语首先检查
PCB
进程链或进程家族,寻找所要
撤消的进程是否存在。如果找到了所要撤消的进程的
PCB
结构,则撤消原语释放该进程所占有的资源之
后,把对应的
PCB
结构从进程链或进程家族中摘下并
返回给
PCB
空队列。如果被撤消的进程有自己的子进
程,则撤消原语先撤消其子进程的
PCB
结构并释放子
进程所占用的资源之后,再撤消当前进程的
PCB
结构
和释放其资源。如图3.7

46
图3.7
撤消原语流图47
3.4.2
进程的阻塞与唤醒
l进程的创建原语和撤消原语完成了进程从无到有,
从存在到消亡的变化。被创建后的进程最初处于就
绪状态,然后经调度程序选中后进入执行状态。这
里主要介绍实现进程的执行状态到等待状态,又由
等待状态到就绪状态转换的两种原语,即阻塞原语
与唤醒原语。
l阻塞原语在一个进程期待某一事件发生,但发生条
件尚不具备时,被该进程自己调用来阻塞自己。阻
塞原语在阻塞一个进程时,由于该进程正处于执行
状态,故应先中断处理机和保存该进程的CPU
现场。
然后将被阻塞进程置“
阻塞”
状态后插入等待队列
中,再转进程调度程序选择新的就绪进程投入运行。
阻塞原语的实现过程如图3.8
。48
• 这里,转进程调度程序是很重要的,否则,处理机
将会出现空转而浪费资源。
图3.8
阻塞原语图
49
• 当等待队列中的进程所等待的事件发生时,等待该
事件的所有进程都将被唤醒。唤醒一个进程有两种
方法:一种是由系统进程唤醒。另一种是由事件发
生进程唤醒。当由系统进程唤醒等待进程时,系统
进程统一控制事件的发生并将“
事件发生”
这一消息
通知等待进程。从而使得该进程因等待事件已发生
而进入就绪队列。由事件发生进程唤醒时,事件发
生进程和被唤醒进程之间是合作关系。因此,唤醒
原语既可被系统进程调用,也可被事件发生进程调
用。称调用唤醒原语的进程为唤醒进程。唤醒原语
首先将被唤醒进程从相应的等待队列中摘下,将被
唤醒进程置为就绪状态之后,送入就绪队列。在把
被唤醒进程送入就绪队列之后,唤醒原语既可以返
回原调用程序,也可以转向进程调度,以便让调度
程序有机会选择一个合适的进程执行   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值