内容发布更新时间 : 2025/1/5 17:46:29星期一 下面是文章的全部内容请认真阅读。
进程管理习题
1现代操作系统中为什么要引入“进程”概念 它与程序有什么区别
答:之所以要引入进程的概念,是因为在一些可以并发的程序段之间,存在着某种相互制约的关系,每个程序段的执行不仅要受到其它程序执行的制约,而且还要动态地依赖系统资源的分配情况,因此每个可以并发执行的程序段就会因外界条件的限制而不能运行,被迫处于阻塞状态。仅用程序的概念无法表示程序的走走停停以及程序运行过程中对资源的竞争现象,因此需要采用一种动态的概念描述并发程序这种走走停停的现象,这就产生了进程的概念。
进程和程序的区别:
(1) 进程是程序的执行过程,是动态的过程,属于一种动态概念。程序是一组有序静态指令和数据的集合,用来指示处理机的操作,是一种静态概念。
(2) 从结构上看,每个进程实体是由程序段和相应的数据段两部分构成,并且进程结构中还要包含PCB,即进程控制块。
(3) 一个进程可以涉及到一个或几个程序的执行;反之,同一程序可以对应多个进程,即同一个程序段可以在不同数据集合上运行,可以构成不同的进程。
(4) 进程能真实地描述并发执行的过程,而程序仅仅是静态指令堆积的序列。
(5) 进程有可创建其他进程的功能,而一般的程序不具有创建其它程序的功能。
(6) 每一个程序都是在一个进程现场中运行的。
2叙述进程的并发性和制约性。
答:并发性是进程的重要特征。即多道程序中多个进程同时向前推进的过程,没个进程总是与其它进程并发地执行的。进程的制约性是指一个进程的运行受到另一进程的制约。比如有的进程可能正在等待另一进程的计算结果而无法运行,或者进程所需的资源被别的进程占有而无法运行。
3进程的含义是什么 如何构造和描述进程
答:进程是程序的一次执行。进程由“进程控制块+程序+数据”构成,用进程控制块描述进程。
4有三个并发进程,R负责从输入设备读入信息并传送给M,M将信息加工并传送给P,P将打印输出,写出下列条件下的并发程序。
(1) 双缓冲区,每个区大小为K。 (2) 单缓冲区,其大小为K。 答:
(1) 双缓冲区,每个区大小为K,信号量初值如下: mutexR=mutexP=1; emptyR=emptyP=k; fullR= fullP=0; 变量的初值如下:
inR=outR=inP=outP=0; 用类Pascal编写程序如下:
var
mutexR,mutexP,emptyR,fullR,emptyP,fullP: semaphere; inR,outR,inP,outP: integer; buffer: array 0..k-1 of item; bufferP: array 0..k-1 of item; procedure R begin
while true do begin
输入数据data1; P (emptyR); P (mutexR);
bufferR(inR):=data1; inR:=(inR+1) mod (k); V(mutexR);
V(fullR);
end end;
procedure M begin
while true do begin
P(fullR); P(mutexR);
data2:=bufferR(outR); outR:=(outR+1)mod (k); V(mutexR); V(emptyR);
对data2进行加工; P(emptyP); P(mutexP);
bufferP(inP):=data2; inP:=(inP+1)mod (k); V(mutexP); V(fullP); end end;
procedure P: begin
while true do
begin
P(fullP); P(mutexP)
data3:=bufferP(outP);
outP:=(outP+1)mod(k); V(mutexP); V(emptyP); 打印 data3; end end; begin
seminitinal,1;,1;,k;,0;,k;,0); inR:=0;outR:=0; inP:=0;outP:=0; cobegin
R; M; P; coend end.
(2)单缓冲区,大小为k var
empty,full,ok,mutex : semaphere; inR,outR,inP,outP : integer;
buffer : array 0..k-1 of item; procedure R: begin
while true do
begin
输入数据 data1; P(empty); P(mutex);
buffer(inR):=data1; inR:=(inR+1) mod (k);
V(mutex);
V(full) end end;
procedure M: begin
while ture do
begin
P(full); P(mutex);
data2:==buffer(outR); outR:=(outR+1) mod (k);
V(mutex);
对data2 加工;