第4章习题参考解答讲解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
V(sa);
P(ta);
input copy-data to buffer T;
V(tb);}
}
put()
{
while(1)
{
P(tb);
output data to buffer S;
V(ta);
}
}
4-16
答:在操作系统中,当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一进程才被允许去访问此临界资源。我们称进程之间的这种相互制约关系为互斥。
4-23
对进程区分出这几种状态主要是为了便于系统对进程的管理和控制。
4-7
4-8
4-9
(1)什么原因导致变迁2、变迁3、变迁4?
变迁2:某进程的时间片满
变迁3:某进程请求服务,或等待事件
变迁4:某进程请求服务完成,或等待事件发生
(2)当观察系统中进程时,可能看到某一进程产生的一次状态变迁将导致另一进程做一次状态变迁,这两个变迁称为因果变迁。在什么情况下,一个进程的变迁3能立即引起另一个进程发生变迁1?
int ta=1,tb=0;// ta表示缓冲区T是否为空,tb表示是否为满。
cobegin
get;
copy;
put;
coend
}
get()
{
while(1)
{
P(sa);
input data to buffer S;
V(sb);
}
}
copy ()
{
while(1)
{
P(sb);
copy data from buffer S;
c.41不可能发生。一个进程由等待状态变就绪状态,只是自身进程的状态变迁,不涉及处理器,故不会引起其它进程由就绪状态变运行状态。
4-11
为了描述一个进程和其它进程,以及系统资源的关系,为了刻画一个进程在各个不同时期所处的状态,人们采用了一个与进程相联系的数据块,称为进程控制块(PCB)。
其作用:标识一个进程的存在。
(3)程序是记录在介质上指令的有序集合,而进程则由程序、数据和进程控制块3部分组成。
(4)进程与程序之间无一一对应关系。不同的进程可以包含同一程序,同一程序在执行中也可以产生多个进程。
(5)进程是一个独立的运行单位,也是系统进行资源分配和调度的独立单位。而程序无此概念。
4-6
答:进程有三个基本状态:运行状态、就绪状态和等待状态(又称阻塞、挂起、睡眠)。
进入csb…
V(s);
}
4-21
答:线程有时也称为轻量级进程,它是比进程更小的活动单位,它是进程中的一个执行路径。一个进程可以有多个执行路径即线程。
线程和进程的主要区别如下:
(1)线程是进程的一个组成部分。一个进程可以有多个线程,而且至少有一个可执行的线程。(2)进程是资源分配的基本单位,它拥有自己的地址空间和各种资源。线程是处理机调度的基本单位,它只能和其他线程共享进程的资源,而本身并不具有任何资源。(3)进程的多个线程都在进程的地址空间内活动。这样,在以线程为单位进行处理机调度和切换时,由于不发生资源变化特别是地址空间的变化,因此切换时间较短。而以进程为单位进行处理机调度和切换时,由于涉及到资源转移及现场保护等问题,将导致切换时间变长和资源利用率降低。(4)线程和进程一样,都有自己的状态和相应的同步机制。但是,由于线程没有自己单独的程序和数据空间,因而不能像进程的程序和数据那样交换到外存去。
p2();
p3();
coend
}
p1()
{
…
V(s1);
}
p2()
{
…
V(s2);
}
p3()
{
P(s1);
P(s2);
…
}
(2)设a、b两进程共用一个缓冲区,a向t写信息,b从t读出信息,算法如下图
进程A和进程B共用一个缓冲区,则缓冲区是共享资源,进程A向其中写入信息前需由P操作控制分配资源,当进程A写完消息,则可向进程B发送消息,通知B进程可以去取消息了,故进程A和B是同步进程。
第
4-3
答:进程,即是一个具有一定独立功能的程序关于某个数据集合的一次活动。
进程与程序的主要区别是:
(1)程序是指令的有序集合,是一个静态概念,其本身没有任何运行的含义,进程是程序在处理机上的一次执行过程,是一个动态概念。
(2)程序作为软件资料可长期保存,而进程是有生命期的,因创建而产生、因调度而执行、因得不到资源而暂停、因撤消而消亡。
(3)设a、b两并发进程,它们共享一临界资源。其执行临界区的算法框图如下图,
进程A和进程B为互斥进程,则需一个互斥信号量s,初值为1,表示临界资源初始情况下无进程使用。
main()
{
int s=1;
cobegin
pa();
pb();
coend
}
pa()
{
P(s);
进入csa…
V(s);
}
pb()
{
P(s);
}
p3()
{
P(s);
…
}
参考解答:
因p1和p2进程是p3进程开始执行的先决条件,即当p1和p2进程均执行完毕时,p3才能执行,则p3需有两个信号量,分别表示p1进程执行完毕的信号量s1,以及p2进程执行完毕的信号量s2。则同步算法描述如下:
main()
{
int s1=0,s2=0;
cobegin
p1();
需为进程A定义私用信号量S1,初值为1表示缓冲区为空,为进程B定义私用信号量S2,初值为0,表示缓冲区没有消息。算法描述:
main()
{
int s1=1,s2=0;
cobegin
pa();
pb();
coend
}
pa()
{
P(s1);
写消息….
V(s2);
}
pb()
{
P(s2);
读消息…
V(s1);
}
进程同步是指多个相关进程在执行次序上的协调。这些进程相互合作,在一些关键点上可能需要互相等待或互通消息。
4-18
(1)3个进程并发活动的进程流图如下图所示,其同步算法描述如下
main()
{
int s=-1;
cobegin
p1();
p2();
p3();
coend
}
p1()
{
…源自文库
V(s);
}
p2()
{
…
V(s);
(5)进程的调度和控制大多由操作系统的内核完成,而线程的控制既可以由操作系统内核完成,也可以由用户控制完成。
4-22
TASK_RUNNING就绪/运行状态
TASK_INTERRUPTIBLE尝试睡眠状态
TASK_UNINTERRUPTIBLE浅度睡眠状态
TASK_STOPPED暂停状态
TASK_ZOMBIE僵死状态
当有一个进程发生变迁3时,将会让出处理器,这时调度必然在就绪队列中选中一个进程使之由就绪状态变为运行状态。
(3)下述因素变迁是否可能发生?如果可能,是在什么情况下发生?
a.21可能发生。有一个进程由运行状态变就绪状态,它让出处理器,则这时必有一个进程由就绪状态转运行状态。
b.32不可能发生。有一个进程由运行状态变等待状态,它让出处理器,这种变迁不会导致另一个进程由运行状态转就绪状态。
4-12 n
main()
{
int mutQ=1;//信号量mutQ用来管理公共变量Q,其值为1,表示初始情况下没有进程使用该变量
cobegin
p1();p2();…;pn();
coend
}
p1()
{
…
P(mutQ);
使用公共变量Q..//或cs(i)…..
V(mutQ);
…
}
mutQ的取值范围:1-n~1
1-n:表示一个进程正在使用公共变量Q,另有n-1个进程在等待使用公共变量Q
0:表示一个进程正在使用公共变量Q,没有进程等待使用公共变量Q
1:表示初始情况下没有进程使用该变量
4-14
(a)(b)
(a)解:
main()
{
int s12=0,s13=0,s14=0;
cobegin
p1();
p2();
p3();
p4();
coend
}
p1()
{
p1 execute;
V(s12);
V(s13);
V(s14);
}
p2()
{
P(s12);
p2 execute;
}
p3()
{
P(s13);
p3 execute;
}
p4()
{
P(s14);
p4 execute;
}
4-15
解:
main()
{
int sa=1,sb=0;// sa表示缓冲区S是否为空,sb表示是否为满。
P(ta);
input copy-data to buffer T;
V(tb);}
}
put()
{
while(1)
{
P(tb);
output data to buffer S;
V(ta);
}
}
4-16
答:在操作系统中,当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一进程才被允许去访问此临界资源。我们称进程之间的这种相互制约关系为互斥。
4-23
对进程区分出这几种状态主要是为了便于系统对进程的管理和控制。
4-7
4-8
4-9
(1)什么原因导致变迁2、变迁3、变迁4?
变迁2:某进程的时间片满
变迁3:某进程请求服务,或等待事件
变迁4:某进程请求服务完成,或等待事件发生
(2)当观察系统中进程时,可能看到某一进程产生的一次状态变迁将导致另一进程做一次状态变迁,这两个变迁称为因果变迁。在什么情况下,一个进程的变迁3能立即引起另一个进程发生变迁1?
int ta=1,tb=0;// ta表示缓冲区T是否为空,tb表示是否为满。
cobegin
get;
copy;
put;
coend
}
get()
{
while(1)
{
P(sa);
input data to buffer S;
V(sb);
}
}
copy ()
{
while(1)
{
P(sb);
copy data from buffer S;
c.41不可能发生。一个进程由等待状态变就绪状态,只是自身进程的状态变迁,不涉及处理器,故不会引起其它进程由就绪状态变运行状态。
4-11
为了描述一个进程和其它进程,以及系统资源的关系,为了刻画一个进程在各个不同时期所处的状态,人们采用了一个与进程相联系的数据块,称为进程控制块(PCB)。
其作用:标识一个进程的存在。
(3)程序是记录在介质上指令的有序集合,而进程则由程序、数据和进程控制块3部分组成。
(4)进程与程序之间无一一对应关系。不同的进程可以包含同一程序,同一程序在执行中也可以产生多个进程。
(5)进程是一个独立的运行单位,也是系统进行资源分配和调度的独立单位。而程序无此概念。
4-6
答:进程有三个基本状态:运行状态、就绪状态和等待状态(又称阻塞、挂起、睡眠)。
进入csb…
V(s);
}
4-21
答:线程有时也称为轻量级进程,它是比进程更小的活动单位,它是进程中的一个执行路径。一个进程可以有多个执行路径即线程。
线程和进程的主要区别如下:
(1)线程是进程的一个组成部分。一个进程可以有多个线程,而且至少有一个可执行的线程。(2)进程是资源分配的基本单位,它拥有自己的地址空间和各种资源。线程是处理机调度的基本单位,它只能和其他线程共享进程的资源,而本身并不具有任何资源。(3)进程的多个线程都在进程的地址空间内活动。这样,在以线程为单位进行处理机调度和切换时,由于不发生资源变化特别是地址空间的变化,因此切换时间较短。而以进程为单位进行处理机调度和切换时,由于涉及到资源转移及现场保护等问题,将导致切换时间变长和资源利用率降低。(4)线程和进程一样,都有自己的状态和相应的同步机制。但是,由于线程没有自己单独的程序和数据空间,因而不能像进程的程序和数据那样交换到外存去。
p2();
p3();
coend
}
p1()
{
…
V(s1);
}
p2()
{
…
V(s2);
}
p3()
{
P(s1);
P(s2);
…
}
(2)设a、b两进程共用一个缓冲区,a向t写信息,b从t读出信息,算法如下图
进程A和进程B共用一个缓冲区,则缓冲区是共享资源,进程A向其中写入信息前需由P操作控制分配资源,当进程A写完消息,则可向进程B发送消息,通知B进程可以去取消息了,故进程A和B是同步进程。
第
4-3
答:进程,即是一个具有一定独立功能的程序关于某个数据集合的一次活动。
进程与程序的主要区别是:
(1)程序是指令的有序集合,是一个静态概念,其本身没有任何运行的含义,进程是程序在处理机上的一次执行过程,是一个动态概念。
(2)程序作为软件资料可长期保存,而进程是有生命期的,因创建而产生、因调度而执行、因得不到资源而暂停、因撤消而消亡。
(3)设a、b两并发进程,它们共享一临界资源。其执行临界区的算法框图如下图,
进程A和进程B为互斥进程,则需一个互斥信号量s,初值为1,表示临界资源初始情况下无进程使用。
main()
{
int s=1;
cobegin
pa();
pb();
coend
}
pa()
{
P(s);
进入csa…
V(s);
}
pb()
{
P(s);
}
p3()
{
P(s);
…
}
参考解答:
因p1和p2进程是p3进程开始执行的先决条件,即当p1和p2进程均执行完毕时,p3才能执行,则p3需有两个信号量,分别表示p1进程执行完毕的信号量s1,以及p2进程执行完毕的信号量s2。则同步算法描述如下:
main()
{
int s1=0,s2=0;
cobegin
p1();
需为进程A定义私用信号量S1,初值为1表示缓冲区为空,为进程B定义私用信号量S2,初值为0,表示缓冲区没有消息。算法描述:
main()
{
int s1=1,s2=0;
cobegin
pa();
pb();
coend
}
pa()
{
P(s1);
写消息….
V(s2);
}
pb()
{
P(s2);
读消息…
V(s1);
}
进程同步是指多个相关进程在执行次序上的协调。这些进程相互合作,在一些关键点上可能需要互相等待或互通消息。
4-18
(1)3个进程并发活动的进程流图如下图所示,其同步算法描述如下
main()
{
int s=-1;
cobegin
p1();
p2();
p3();
coend
}
p1()
{
…源自文库
V(s);
}
p2()
{
…
V(s);
(5)进程的调度和控制大多由操作系统的内核完成,而线程的控制既可以由操作系统内核完成,也可以由用户控制完成。
4-22
TASK_RUNNING就绪/运行状态
TASK_INTERRUPTIBLE尝试睡眠状态
TASK_UNINTERRUPTIBLE浅度睡眠状态
TASK_STOPPED暂停状态
TASK_ZOMBIE僵死状态
当有一个进程发生变迁3时,将会让出处理器,这时调度必然在就绪队列中选中一个进程使之由就绪状态变为运行状态。
(3)下述因素变迁是否可能发生?如果可能,是在什么情况下发生?
a.21可能发生。有一个进程由运行状态变就绪状态,它让出处理器,则这时必有一个进程由就绪状态转运行状态。
b.32不可能发生。有一个进程由运行状态变等待状态,它让出处理器,这种变迁不会导致另一个进程由运行状态转就绪状态。
4-12 n
main()
{
int mutQ=1;//信号量mutQ用来管理公共变量Q,其值为1,表示初始情况下没有进程使用该变量
cobegin
p1();p2();…;pn();
coend
}
p1()
{
…
P(mutQ);
使用公共变量Q..//或cs(i)…..
V(mutQ);
…
}
mutQ的取值范围:1-n~1
1-n:表示一个进程正在使用公共变量Q,另有n-1个进程在等待使用公共变量Q
0:表示一个进程正在使用公共变量Q,没有进程等待使用公共变量Q
1:表示初始情况下没有进程使用该变量
4-14
(a)(b)
(a)解:
main()
{
int s12=0,s13=0,s14=0;
cobegin
p1();
p2();
p3();
p4();
coend
}
p1()
{
p1 execute;
V(s12);
V(s13);
V(s14);
}
p2()
{
P(s12);
p2 execute;
}
p3()
{
P(s13);
p3 execute;
}
p4()
{
P(s14);
p4 execute;
}
4-15
解:
main()
{
int sa=1,sb=0;// sa表示缓冲区S是否为空,sb表示是否为满。