第4章习题及答案.docx
《第4章习题及答案.docx》由会员分享,可在线阅读,更多相关《第4章习题及答案.docx(12页珍藏版)》请在冰豆网上搜索。
![第4章习题及答案.docx](https://file1.bdocx.com/fileroot1/2022-12/6/6516cd0f-1405-41fc-bc97-15a2eb05dc00/6516cd0f-1405-41fc-bc97-15a2eb05dc001.gif)
第4章习题及答案
第四章习题及解答
4-3什么是进程?
进程与程序的主要区别是什么?
答:
进程是一个具有一定独立功能的程序关于某个数据集合的一次活动。
进程与程序的主要区别是:
(1)程序是指令的有序集合,是一个静态概念。
进程是程序在处理机的一次执行过程,是一个动态概念。
进程是有生命期的,因创建而产生,因调度而执行,因得到资源而暂停,因撤消而消亡;
(2)进程是一个独立的运行单元,是系统进行资源分配和调度的独立单元,而程序则不是。
(3)进程与程序之间无一一对应关系。
一个程序可以对应多个进程,一个进程至少包含一个程序。
4-4图4.2标明程序段执行的先后次序。
其中:
I表示输入操作,C表示计算操作,P表示打印操作,下角标说明是对哪个程序进行上述操作。
请指明:
(1)哪些操作必须有先后次序?
其原因是什么?
(2)哪些操作可以并发执行?
其原因又是什么?
答:
(1)①In、Cn和Pn之间有先后顺序要求,这是由于程序本身的逻辑要求。
②使用同一设备的不同的程序段,如C1…Cn,I1…In,P1…Pn,之间有先后顺序要求,这是由于设备某一时刻只能为一个程序服务。
(2)不同程序使用不同设备时,占用不同设备,无逻辑关系,可以并发执行,如I2和C1;I3、C2和P1。
4-9某系统进程调度状态变迁图如图4.31所示,请说明:
(1)什么原因会导致发生变迁2、变迁3、变迁4?
答:
发生变迁2的原因:
时间片到
发生变迁3的原因:
请求I/O或其他系统调用
发生变迁4的原因:
I/O完成或其他系统调用完成
(2)在什么情况下,一个进程的变迁3能立即引起另一个进程发生变迁1?
答:
一个进程的变迁3能立即引起另一个进程发生变迁的条件是,就绪队列非空。
(3)下列因果变迁是否可能发生?
若可能,需要什么条件?
a.2→1;b.3→2;c.4→1
答:
a.2→1不需要条件,一定会发生。
b.3→2不可能发生。
c.4→1可能发生,条件:
就绪队列为空,或在可剥夺调度方式下,转变为就绪状态的进程优先级最高。
4-10某系统jincheng状态除了3个最基本状态外,又增加了创建状态、完成状态、因等消息而转变为等待状态3种新的状态,试画出增加新状态后的进程状态变迁图,并说明发生每一个变迁的原因。
答:
进程状态变迁图:
进程状态变迁原因:
运行—>等待:
请求I/O;等待—>就绪:
请求完成;
运行—>就绪:
时间片到;就绪—>运行:
CPU空闲,进程调度程序工作;
创建—>就绪:
进程创建;运行—>等消息:
等待消息;
等消息—>就绪:
收到消息;运行—>完成:
任务完成
4-12n个并发进程共用一个公共变量Q,写出用信号灯实现n个进程互斥时的程序描述,给出信号灯值的取值范围,并说明每个取值的物理意义。
解:
(1)程序描述
main(){
intmutex=1;//公共变量Q的互斥信号灯
cobegin
P1;P2;…Pn;
coend
}
Pi(){
…
P(mutex);
使用Q;
V(mutex);
…
}
(2)信号灯值的取值范围:
[(n–1),1]
(3)mutex每个取值的物理意义:
mutex=1说明没有进程进入临界段执行;
mutex=0说明有一个进程进入临界段执行;
mutex=1说明有一个进程进入临界段执行,另有一个进程正在等待进入;
mutex=(n–1)说明有一个进程进入临界段执行,另有(n–1)个进程正在等待进入。
4-13图4.32(a)、(b)分别给出了两个进程流图。
试用信号灯的p、v操作分别实现图4.32(a)、(b)所示的两组进程之间的同步,并写出程序描述。
(a)(b)
图4.32
图(a)解:
main(){
ints12=0,s13=0,s14=0;//s12表示进程P2可否执行;s13表示进程P3可否执行;s14表示进程P4可否执行//
cobegin
P1;P2;P3;P4;
coend
}
P1(){
p1execute;
V(s12);
V(s13);
V(s14);
}
P2(){
P(s12);
p2execute;
}
P3(){
P(s13);
p3execute;
}
P4(){
P(s14);
p4execute;
}
图(b)
main(){
ints13=0,s23=0;//s13表示进程P1执行完成否;s23表示进程P2执行完成否//
cobegin
P1;P2;P3;
coend
}
P1(){
P1execute;
V(s13);
}
P2(){
P2execute;
V(s23);
}
P3(){
P(s13);
P(s23);
P3execute;
}
4-15如图4.34所示,get、copy和put三个进程共用两个缓冲区s和t(其大小每次存放一个记录),get进程负责不断地把输入记录输入缓冲区s中,copy进程负责从缓冲区s中取出记录复制到缓冲区t中,而put进程负责从缓冲区t中取出记录打印。
试用PV操作实现这三个进程之间的同步,并写出程序描述。
图4.34
解:
main(){
ints1=1,s2=0;//s1表示缓冲区S是否为空,s2表示是否已满//
ints3=1,s4=0;//s3表示缓冲区T是否为空,s4表示是否已满//
cobegin
get;
copy;
put;
coend
}
get(){
while
(1){
P(s1);
inputdatatobufferS;
V(s2);
}
}
copy(){
while
(1){
P(s2);
copydatafrombufferS;
V(s1);
P(s3);
inputcopy-datatobufferT;
V(s4);
}
}
put(){
while
(1){
P(s4);
outputdatatobufferS;
V(s3);
}
}
4-16什么是进程的互斥与同步?
同步和互斥这两个概念有什么联系和区别?
答:
在操作系统中,当某一进程正在访问某一存储区域时,就不允许其他进程读出或者修改该存储区的内容,否则,就会发生后果无法估计的错误。
进程之间的这种相互制约关系称为互斥。
所谓同步,就是并发进程在一些关键点上可能需要互相等待与互通消息,这种相互制约的等待与互通信息称为进程同步。
同步和互斥这两个概念都属于同步范畴,描述并发进程相互之间的制约关系。
同步是指并发进程按照他们之间的约束关系,在执行的先后次序上必须满足这种约束关系。
而互斥是同步的一种特例,是指并发进程按照他们之间的约束关系,在某一点上一个时刻只允许一个进程执行,一个进程做完了,另一个进程才能执行,而不管谁先做这个操作。
4-22什么是线程?
线程和进程有什么区别?
答:
线程也称为轻量级进程,它是比进程更小的活动单位,它是进程中的一个执行路径,一个进程可能有多个执行路径,即线程。
线程和进程的主要区别如下。
(1)线程是进程的一个组成部分,一个进程可以有多个线程,而且至少有一个可执行的线程。
(2)进程是资源分配的基本单位,它拥有自己的地址空间和各种资源;线程是处理机调度的基本单位,它只能和其他线程共享进程的资源,而本身并没有任何资源。
(3)进程的多个线程都在进程的地址空间内活动。
这样,在以线程为单位进行处理机调度和切换时,切换时间较短;而以进程为单位进行处理机调度和切换时,由于涉及到资源转移及现场保护等问题,将导致切换时间变长和资源利用率下降。
(4)线程和进程一样,都有自己的状态和相应的同步机制,但是,由于线程没有自己单独的程序和数据空间,因而不能像进程那样将程序和数据交换到外存去。
(5)进程的调度和控制大多由操作系统的内核完成,而线程的控制既可以由操作系统内核完成,也可以由用户控制完成。
4-27试画出Linux系统的进程状态变迁,并说明这些变迁可能的原因。
答:
画出Linux系统的进程状态变迁如图所示。
(1)进程创建
当系统或用户需要创建一个新进程时,调用fork()系统调用,被创建的新进程被置为就绪状态TASK_RUNNING。
(2)进程调度
当调度时机来到时,进程调度程序从进程运行队列中选择优先级最高的进程,将其投入运行,设置状态为运行状态。
(3)被抢占
正在CPU上运行的进程,当其优先级低于处于就绪状态的某一个进程的优先级时,它被抢占而被迫让出CPU的控制权,此时,该进程的状态转为就绪状态。
(4)进程等待
若正在运行的进程因等待某一事件而暂时不能运行下去时,进入相应的等待队列,设置为等待状态。
(5)进程唤醒
当某个进程等待的原因撤销时,该进程被唤醒,将其从等待队列中移出,进入就绪队列。
(6)进程终止
当正在运行的进程完成其任务时,通过exit()系统调用终止自己而进入终止状态。
4-29某公园有一个长凳,其上最多可以坐5个人。
公园里的游客遵循以下规则使用长凳:
(1)如果长凳还有空间可以坐,就坐到长凳上休息,直到休息结束,离开长凳。
(2)如果长凳上没有空间,就转身离开。
试用信号灯的P、V操作描述这一场景。
答:
main(){
intcount=5;//长凳上可坐的人数
intmutex=0;//访问count的互斥信号灯
cobegin
guesti;//i=1,2,3,4……
coend
}
guesti{
P(mutex);
if(count==0){
V(mutex);
return;
}
count--;
V(mutex);
休息;
P(mutex);
Count++;
V(mutex);
}
4-316个进程合作完成一项计算任务的并发描述如图4-38所示,程序中,s1、s2、s3、s4、s5、s6分别是同步信号灯,x、y、z是共享数据变量。
试给出变量z的最终结果,并画出6个进程合作的进程流图。
答:
Z=12
4-32现有3个并发进程P1、P2和P3,如图4.39所示。
3个并发进程共享两个单缓冲区B1和B2。
进程P1负责不断从输入设备读数据,若读入的数据为正数,则直接送入B2,否则应先将数据送入B1,经P2取出加工后再送入B2,P3从B2中取信息输出。
请使用信号灯和P、V操作描述进程P1、P2、P3实现同步的算法。
答:
缓冲区B1设置信号灯s1、t1,s1表示缓冲区B1是否空闲,t1表示缓冲区B1是否有数据,缓冲区B2设置信号灯s2、t2,s2表示缓冲区B2是否空闲,t2表示缓冲区B2是否有数据。
Main()
{
Ints1=s2=1;
Intt1=t2=0;
Cobegin
P1();p2();p3();
Coend
}
4-34某商场有一个地下停车场,有N个停车位,车辆只能通过一个指定的通道进出停车场,通道处只能容一辆车通过,请设计信号灯和P、V操作给出进、出车辆两种进程的程序描述。
答:
main()
{
intcount1=count2=0;/*计数器*/
intmutex1=mutex2=1;/*两个计数器的互斥访问信号灯*/
intmutex=1;/*通道互斥访问信号灯*/
cobegin
in();
out();
coend
}
in()
{
P(empty);
P(mutex1);
Count1++;
ifcount1==0P(mutex);
V(mutex1);
开车进地下停车场;
P(mutex1);
count1--;
ifcount1==0V(mutex);
V(mutex1);
}
out()
{
P(mutex2);
Count2++;
ifcount2==0P(mutex);
V(mutex2);
开车出地下停车场;
P(mutex2);
Count2--;
ifcount2==0V(mutex);
V(mutex2);
V(empty);
}