第二章 进程的描述与控制
并发执行
进程
-
定义:
(1)进程使程序的一次执行。
(2)进程是一个程序机器数据在处理机上顺序执行时所发生的活动。
(3)进程时具有独立功能的程序在 一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
-
组成:
进程主要由数据段、程序段、PCB三部分内容组成,其中PCB是进程存在的惟一标志。而程序段部分也可以为其他进程共享。
-
基本特征:
(1)动态性(最基本特征):它因创建而产生,因调度而执行,因得不到资源而暂停,因撤消而消亡。
(2)并发性(重要特征):进程实体同存于内存中,且能在一段时间内同时运行。
(3)独立性:进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。
(4)异步性:进程以各自独立的、不可预知的速度向前推进。
(5)结构特征:进程控制块(PCB)+程序+数据=进程实体
-
PCB:
操作系统为了管理和控制进程的运行为每一个进程定义的一个数据结构,它记录了系统管理进程所需的全部信息。PCB是进程存在的唯一标志。
作用:是os对并发执行的进程进行控制和管理的依据。也是系统用来感知进程存在的根据。
-
进程的5种状态(三种基本状态):
(1)new新建/创建:进程正在创建中的状态
(2)ready就绪: 进程已获得了除处理机以外的所有资源,等待分配处理机执行的等待状态。
(3)running运行/执行: 当一个进程获得必要的资源并正在处理机上执行的状态。
(4)waiting等待/阻塞: 正在执行的进程由于发生某事件而暂时无法执行下去,此时进程所处的状态。
(5)terminated终止/撤消/退出:进程执行完毕,释放所占资源的状态。
-
挂起状态引入及引入后转换
挂起状态:程序在运行期间,由于某种需要,往往将进程暂停执行,使其静止下来,以满足需要。(内存到外存)
-
进程通信类型:
共享存储器系统、管道通讯系统、消息传递系统以及客户机—服务系统。
-
进程与程序的区别:
(1)程序是指令的有序集合,其本身没有任何运行的含义,它是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态概念。
(2)程序的存在是永久的。而进程则是有生命期的,它因创建而产生,因调度而执行,因得不到资源而暂停,因撤消而消亡。
(3)程序仅是指令的有序集合。而进程则由程序段、相关数据段和进程控制块(PCB)组成。
(4)进程与程序之间不是一一对应。
-
进程同步遵循的规则:
由空让进(空闲让进)、互斥(忙则等待)、有限等待、让权等待。
-
进程创建
申请空白PCB---->为新进程分配资源---->初始化进程控制块---->将新进程插入就绪队列。
-
进程终止
引起进程终止的事件:
(1)正常结束
(2)异常结束:越界错误,非法指令
(3)外界干预:操作员或操作系统干预、父进程请求、父进程终止。
进程终止过程:
找出被终止进程的PCB—>若进程状态为运行态,置CPU调度为真—>若有子孙进程,终止回收子孙进程资源—>回收终止进程的资源---->回收终止的PCB
-
进程的阻塞与唤醒
引起进程阻塞和唤醒的事件
(1)请求系统服务。(2)启动某种操作。(3)新数据尚未到达。(4)无新工作可做。
-
原语:由若干条指令组成,能够完成一定功能的程序段。执行只能一气呵成,不可中断。
信号量机制
-
定义:信号量是一个变量,可以用信号量来表示系统中某种资源的数量。
原语:wait(S)=P(S); signal(S)=V(S);
-
整型信号量
int S=1; void wait(int S){ while(S<=0); //资源数不够,一直循环等待 S=S-1; //资源数够,占用一个资源 } void signal(int S){ S=S+1; //使用完资源,退出释放资源。 }
使用打印机资源:
wait(S); //申请资源 //使用打印机 signal(S); //释放资源
当一个进程P0来时,S=1跳出循环,S-1,P0执行。如果同时来了P1,S=0,while循环会一直执行,直到P0进程执行signal,S+1后,P1进程跳出循环,使用打印机资源
-
记录型信号量(遵循让权等待)
typedef struct{ int value; //剩余资源数 struct process *L; //等待队列 }smaphore; void wait(smaphore S){ S.value--; if(S.value<0){ block(S.L); } } void signal(smaphore S){ S.value++; if(S.value<=0){ wakeup(S.L); } }
block和wakeup都是原语,如果剩余资源数不够,block原语使进程进入阻塞状态,挂到S队列中。wakeup会唤醒等待队列中的进程,将进程从阻塞变成就绪。
-
进程的互斥与同步
进程互斥:
临界区资源需要互斥访问。
互斥信号量mutex,初值为1。
对不同临界资源需要设置不同的互斥信号量。
进程同步:
目的:让各个并发进程有序推进。
同步信号量S,初值为0。
在必须先执行的代码之后加上V(S)操作,在必须后执行的代码之前加上P(S)操作。
//代码4必须在代码2执行之后进行。 P1(){ 代码1; 代码2; V(S); 代码3; } P2(){ P(S); 代码4; 代码5; 代码6; }
先执行V操作,S++,S=1,再执行P2时,可以继续执行,若直接执行P2,会导致p2阻塞。
生产者消费者问题
生产者每次生成要消耗(P)一个空闲缓冲区,并生产(V)一个产品。消费者每次要消耗(P)一个产品。并释放一个空闲缓冲区(V)。往缓冲区放入/取走产品要互斥。
semphore mutex=1; //互斥信号量,实现缓冲区互斥访问
semphore empty=0; //同步信号量,表示空闲缓冲区数量
semphore full=0; //同步信号量,表示产品数量,也即非空缓冲区
//生产者
Producer(){
while(1){
//生产一个产品
P(empty); //消耗一个空闲缓冲区
P(mutex);
//把产品放入缓冲区
V(mutex);
V(full); //增加一个产品
}
}
//消费者
consumer(){
while(1){
P(full); //消耗一个产品
P(mutex);
//从缓冲区取走一个产品
V(mutex);
V(empty); //增加一个空闲缓冲区
//使用产品
}
}
实现互斥的P操作一定要在实现同步的P操作之后。
练习题
进程概念
一、 单项选择题
1、 在进程管理中,当( C)时,进程从阻塞状态变为就绪状态。
A 进程被进程调度程序选中
B 等待某一事件
C 等待的事件发生
D 时间片用完
2、 分配到必要的资源并获得处理机的进程状态是(B)
A就绪状态 B执行状态
C阻塞状态 D撤消状态
3、 对进程的管理和控制使用( B )
A 指令 B 原语 C 信号量 D 信箱通信
4、 程序的顺序执行通常在(A )的工作环境中,具有(C )特征;程序的并发执行在(B )的工作环境中,具有( D)特征。
A 单道程序 B 多道程序
C 程序的可再现性 D 资源共享
5、 进程的三个基本状态在一定条件下可以相互转化,进程由就绪状态变为执行状态的条件是( D);由执行状态变为阻塞状态的条件是(B )
A 时间片用完 B 等待某事件发生
C等待的某事件已发生 D被进程调度程序选中
6、 下列的进程状态变化中,( C)变化是不可能发生的。
A 运行—就绪 B运行—等待
C等待—运行 D 等待—就绪
7、 一个运行的进程用完了分配给它的时间片后,它的状态变为(A )
A 就绪 B等待 C运行 D由用户自己确定
8、 下面对进程的描述中,错误的是( D)
A进程是动态的概念 B进程执行需要处理机
C 进程是有生命期的 D进程是指令的集合
9、 下面的叙述中正确的是( D)
A 操作系统的一个重要概念是进程,因此不同进程所执行的代码也一定不同
B 为了避免发生进程死锁,各进程只能逐个申请资源
C 操作系统用PCB管理进程,用户进程可以从PCB中读出与本身运行状况有关的信息
D 进程同步是指某些进程之间在逻辑上的相互制约关系。
10、 进程控制就是对系统中的进程实施有效的管理,通过使用(C )、进程撤消、进程阻塞、进程唤醒等进程控制原语实现。
A进程运行 B进程管理 C进程创建 D进程同步
11、 信箱通信是一种(B )通信方式
A直接通信 B间接通信 C低级通信 D信号量
12、 操作系统通过( B)对进程进行管理
A进程 B进程控制块
C进程启动程序 D进程控制区
13、 操作系统通过( B)对进程进行管理
A JCB B PCB C DCT D CHCT
14、 某系统的进程状态如图所示:A是( )状态,B是( )状态,C是( )状态。
A挂起 B运行 C等待 D就绪 E睡眠
15、 通常,用户进程被建立后,( B)
A 便一直存在于系统中,直到被操作人员撤消
B 随着作业运行正常或不正常结束而撤消
C 随着时间片轮转而撤消与建立
D 随着进程的阻塞或唤醒而撤消与建立
16、 在操作系统中,进程是一个具有一定独立功能的程序在某个数据集上的一次( B)
A等待活动 B运行活动 C单独操作 D关联操作
17、 一个进程被唤醒意味着(D )
A该进程重新占有了CPU B它的优先权变为最大
C其PCB移至等待队列队首 D进程变为就绪状态
18、 下面所步骤中,(A )不是创建进程所必需的。
A由调度程序为进程分配CPU
B建立一个进程的控制块
C为进程分配内存
D将进程控制块链入就绪队列
19、 多程序环境下,操作系统分配资源以(C )为基本单位
A程序 B指令 C进程 D作业
20、 为了进行进程协调,进程之间应当具有一定的联系,这种联系通常采用进程间交换数据的方式进行,这种方式称为(D )
A进程互斥 B进程同步 C进程制约 D进程通信
二、 填空题
1、 进程的基本特征有(动态)、(并发)、独立、异步及结构特征
2、 进程在运行过程中有三种基本状态,它们是(就绪)、(执行)、(阻塞)
3、 进程主要由(进程控制块)、(数据段)、(程序段)三部分内容组成,其中(PCB)是进程存在的惟一标志。而(程序段)部分也可以为其他进程共享。
4、 将进程的(PCB)链接在一起就形成了进程队列
5、 用信箱实现通信时,应有(发送)和(接受)两条基本原语
6、 进程是一个(动)态概念,而程序是一个(静)态概念
7、 设系统中有N(n>2)个进程,且当前不在执行进程调度程序,试考虑下述4种情况:
A 没有运行进程,有2个就绪进程,N个进程处于等待状态
B 有1个运行进程,没有就绪进程,N-1进程处于等待状态
C 有1个运行进程,有1个就绪进程,N-2进程处于等待状态
D有1个运行进程,N-1个就绪进程,没有进程处于等待状态
上述情况中,不可能发生的情况是(A )
8、 在一个单处理机系统中,若有5个用户进程,且假设当前时刻为用户态,则处于就绪状态的用户进程最多有(4 ),最少有( 0 )个
9、 下面关于进程的叙述不正确的是( C)
A 进程申请CPU得不到满足时,其状态变为等待状态
B在单CPU系统中,任一时刻有一个进程处于运行状态
C优先级是进行进程调度的重要依据,一旦确定不能改变
D进程获得处理机而运行是通过调度而实现
进程调度练习题
一、 单项选择题
1、 在分时操作系统中,进程调度经常采用( C )算法。
A 先来先服务 B最高优先权 C时间片轮转 D随机
2、 (B )优先权是在创建进程时确定的,确定之后在整个进程运行期间不再改变.
A 先来先服务 B 静态 C 动态 D 短作业
3、 以优先级为基础的进程调度算法可以保证在任何时候正在运行的进程总是非等待状态下诸进程中优先级最高的进程。上述描述是( B )
A 正确的 B 错误的
二、 填空题
1、 进程调度方式通常有(抢占式 )和( 非抢占式)。
2、 所谓进程调度就是从处于(就绪 )状态的一些进程中按某种算法选择一个进程,使其占有CPU,使其该进程处于( 执行)状态。
3、 进程调度算法采用时间片轮转法,时间片过大,就会使轮转法转化为(先来先服务 )调度算法。
4、 进程调度负责(处理机 )的分配工作。
5、 一种最常用的进程调度算法是把处理机分配给具有最高优先权的进程,而确定优先权的方法概括起来不外乎是基于(静态 )特性和(动态 )特性两种方法。前者所得到的是( 静态)优先权,后者所得到的是(动态 )优先权。
6、 在( 先来先服务)调度算法中,按照进程进入就绪队列的先后次序来分配处理机。
三、 概念的区别与联系
1、 作业调度与进程调度
作业是从用户角度出发的,它由用户提交,以用户任务为单位;
进程是从操作系统触发,由系统生成,是操作系统资源分配和独立运行的基本单位。
2、 静态优先数与动态优先数。
系统在创建进程时就确定了它的优先数,该优先数在进程的整个生存期内不再改变,这种优先数属于静态优先数。
系统在创建进程时确定了它的优先数,但该优先数在进程的整个生存期内可以随着情况的变化而发生改变,这种优先数属于动态优先数。
四、 解析题
1、 假设有一台计算机,它有1M内存,操作系统占有用200K,每个用户进程也占用200K,用户进程等待I/O的时间为80%,若增加1M内存,则CPU的利用率将提高多少?
解:1M 内存的情况:1)支持用户进程数:(1024K-200K)/200K=4.12 所以4个用户进程。
2)CPU利用率: 先求CPU空闲(4个用户均处于等待I/O状态)概率P=(80%)^4,然后再求CPU利用率1-P
1-P =1-(80%)^4 = 1-0.8^4=59%
增加1M****内存的情况:1)支持用户进程数:(2*1024K-200K)/200K=9.24 所以9个用户进程。
2)CPU利用率: 先求CPU空闲(9个用户均处于等待I/O状态)概率P(80%)9,然后再求CPU利用率1-P
1-P =1-(80%)^9 = 1 -0.8^9=87%
87%-59%=28% 28%/59%=47%
增加1M
内存,CPU
的利用率将提高:87% / 59%= 147%
147% - 100%=47%
所以若增加1M内存,则CPU的利用率将提高47%。
2、 有两个程序,A程序按顺序使用CPU10S,使用设备甲5S,使用CPU5S,使用设备乙10S,最后使用CPU10S。B程序按顺序使用设备甲10S,CPU10S,使用设备乙5S,使用CPU5S,使用设备乙10S。在顺序环境下先执行A程序再执行B程序,CPU的利用率是多少?
程序A:执行时间10+5+5+10+10=40S
使用CPU时间:10+5+10=25S
程序B:执行时间10+10+5+5+10=40S
使用CPU时间:10+5=15S
程序AB总执行时间:40+40=80S
使用CPU的时间为: 25+15=40S
CPU的利用率: 40S/80S=50%
3、 设某计算机系统有一台输入机、一台打印机。现有两道程序同时投入运行,且程序A先开始运行,程序B后运行。程序A的运行轨迹为:计算50MS,打印信息100MS,再计算50MS,打印信息100MS,结束。程序B的运行轨迹为计算50MS,输入数据80MS,再计算100MS。试说明:
(1) 两道程序运行时,CPU有无空闲等待?若有,在哪段时间内等待?为什么会空闲等待?
(2) 程序A、B运行时有无等待现象?若有,在什么时候会发生等待现象?
解:
(1) 存在CPU空闲(在程序A运行后100ms-150ms之间,程序A正打印,程序B正输入)
(2) 程序A运行后无等待现象,程序B运行后有等待现象(在A开始180ms-200ms之间;或程序B在运行后130ms-150ms之间)
4、 假设就绪队列中有10个进程,系统将时间片设为200ms,CPU进行进程切换要花费用10ms,试问系统开销所占的比率约为多少?
解: 10个进程以时间片轮转的方式使用CPU。
系统总时间(200ms+10ms)
系统开销所占的比率: 10/(200+10)= 4.8%
5、 考虑5个进程P1,P2,P3,P4,P5,见表,规定进程的优先数越小,优先级越高,试描述在采用下述调度算法时各个进程运行过程,并计算采用每种算法时进程平均周转时间。假设忽略进程的调度时间。
1)先来先服务调度算法;2)时间片轮转调度算法(时间片为1ms);3)非剥夺式优先级调度算法;4)剥夺式优先级调度算法。
进程 | 创建时刻ms | 运行时间ms | 优先数 |
---|---|---|---|
P1 | 0 | 3 | 3 |
P2 | 2 | 6 | 5 |
P3 | 4 | 4 | 1 |
P4 | 6 | 5 | 2 |
P5 | 8 | 2 | 4 |
列表算出各算法的平均周转时间:
1)8.60(先来先服务算法,按照创建时刻先后运行进程。)
2)10.80(轮转调度,时间片为1,每隔一秒队列中的进程重新排序,如果当前时间有进程创建,将创建的进程进入队尾,再将刚刚执行过的进程放到末尾;如果没有进程创建,直接将运行后的进程放到队尾。)
3) 8.60 (非剥夺式,当进程创建时,不会剥夺当前正在执行的进程,但是会和等待队列中的进程按照优先级排序。)
4)7.80(剥夺式,当进程创建时,会和所有的进程进行排序,包括正在执行的进程,会执行优先级最高的进程。)
进程同步练习题
一、 单项选择题
1、 P、V操作是( A )。
A 两条低级进程通信原语 B两组不同的机器指令
C两条系统调用命令 D两条高级进程通信原语
2、 对进程的管理和控制使用(B )。
A 指令 B 原语 C 信号量 D 信箱通信
3、 若P、V操作的信号量S初值为2,当前值为-1,则表示有( B )等待进程。
A 0个 B 1个 C 2个 D 3个
4、 用P、V操作管理互斥临界区时,信号量的初值应定义为(C )。
A -1 B 0 C 1 D 任意值
5、 用V操作唤醒一个等待进程时,被唤醒进程的状态变为(B )。
A 等待 B就绪 C运行 D 完成
6、 进程间的同步是指进程间在逻辑上的相互( B)关系。
A联接 B 制约 C继续 D调用
7、 ( D)是一种只能进行P操作和V操作的特殊变量
A调度 B进程 C同步 D信号量
8、( B)是解决进程间同步和互斥的一对低级通信原语。
A lock 和unlock B P和V C W和S D send和receive
8、 在操作系统中,解决进程间的(B )和( D)问题的一种方法是使用( F)。
A调度 B 互斥 C通讯 D同步 E分派 F信号量
9、 用P、V操作可以解决(A)互斥问题
A一切 B某些 C 正确 D错误
10、 对于两个并发进程,设互斥信号量为mutex,若mutex=0,则(B )
A表示没有进程进入临界区 B表示有一个进程进入临界区
C表示有一个进程进入临界区,另一个进程等待进入
D表示有两个进程进入临界区
11、两个进程合作完成一个任务,在并发执行中,一个进程要等待其合作伙伴发来消息,或者建立某个条件后再向前执行,这种制约性合作关系被称为进程的( A)
A同步 B 互斥 C调度 D执行
二、 填空题
1、 信号量的物理意义是当信号量值大于零时表示( 可用资源数目);当信号量值小于零时,其绝对值为( 因请求资源而阻塞进入阻塞队列的数目)。
2、 临界资源的概念是(一次只允许一个进程访问的资源 ),而临界区是指( 进程中访问临界区的那段代码)。
3、 系统中各进程之间逻辑上的相互制约关系称为(进程同步 )。
4、 若一个进程已进入临界区,其他欲进入临界区的进程必须(等待 )。
5、 用P、V操作管理临界区时,任何一个进程在进入临界区之前应调用( P)操作,退出临界区时应调用( V)操作。
6、 在多道程序系统中,进程之间存在着的不同制约关系可以划分为两类:(进程互斥 )与( 进程同步)。(进程同步 )指进程间具有一定逻辑关系;( 进程互斥)是指进程间在使用共享资源方面的约束关系。
7、 对于信号量可以做( P )操作和( V)操作,( P)操作用于阻塞进程,( P )操作用于释放进程,程序中的( P)和( V)操作应谨慎使用,以保证其使用的正确性,否则执行时可能发生死锁。
8、 操作系统中,对信号量S的P操作定义中,使进程进入相应等待队列等待的条件是(S.value<0 )
三、 解析题
1、 在生产者和消费者问题中,如果对调生产者(消费者)进程中的两个P操作和V操作,可能发生什么情况?。
死锁
2、 在测量控制系统中,数据采集任务把采集的数据送入一单缓冲区,计算任务从该单缓冲区中取出数据进行计算,试写出利用信号量机制实现两者共享单缓冲区的同步算法。
(本题实际上是一个生产者/消费者问题,将生产者/消费者问题抽象出来,以另外一种形式描述是一种常见的试题形式)
semphore Se=1; //空闲缓冲区
semphore SF=0; //非空闲缓冲区
void caiji(){
while(){
P(SE)
//采集数据;
V(SF);
}
}
void jisuan(){
while(){
P(SF);
//计算数据;
V(SF);
}
}
3、 在视频通信系统中,由进程PA采集一帧图像信息并存入环形缓冲区buffer,进程PB从buffer中取一帧数据进行处理,假设buffer的大小为n,试用P、V操作实现PA和PB。(类似生产者-消费者)
semphore Buffer=n; //空闲缓冲区
semphore Full=0; //非空闲缓冲区
void caiji(){
while(){
P(Buffer)
//送入缓冲区;
V(Full);
}
}
void jisuan(){
while(){
P(Full);
//从缓冲区拿出数据;
V(Buffer);
}
}
4、 桌上有一空盘,允许存放一只水果,爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取出,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。
semphore mutex=1;
semphore apple=0;
semphore organ=0;
void father()
{
while(1){
//准备水果;
P(mutex);
//放入盘子;
if(苹果)V(apple);
else V(organ);
}
}
void son(){
while(1){
P(organ);
//从盘子拿出;
V(mutex);
//吃掉苹果;
}
}
void daughter(){
while(1){
P(apple);
//从盘子拿出;
V(mutex);
//吃掉橘子;
}
}