操作系统教程习题答案 下载本文

(1)一个进程获得了除 CPU 外的一切资源,则称此进程处于就绪态。

(2)一个进程由于 等待某一事件发生或请求I/O设备 而暂时停止运行,这时即使把CPU分配给进程也无法运行,则称该进程处于阻塞态。

(3)在一个只有一个CPU的系统中,假如某时刻该系统中有10个进程并发执行,在略去调度时间所占用时间的前提下,则:

1)这时刻系统中处于运行态的进程最多有 1 个,最少有 0 个。 2)这时刻系统中处于就绪态的进程最多有 9 个,最少有 0 个。 3)这时刻系统中处于阻塞态的进程最多有 10 个,最少有 0 个。

(4)操作系统对进程的控制是根据 PCB 来进行的,对进程的管理是通过 PCB 来实现的。

3.基本概念的解释和辨析 (1)进程和程序 (2)进程和作业 (3)进程和线程 (4)原语和系统调用 (5)内核和微内核

(6)用户级线程和核心级线程 4.综合题

(1)某系统的进程状态转换图如图3.16所示,请说明:

1)引起各种状态转换的典型原因有哪些?

运行态→就绪态 时间片到或被更高优先级的进程抢占 就绪态→运行态 被调度

运行态→阻塞态 等待某一事件的发生而事件未发生 阻塞态→就绪态 等待的事件已发生

2)当观察系统中某些进程时,能够看到某一进程的一次状态转换能引起另一个进程的

运行 2 1 就绪 4 3 阻塞 图3.16某系统进程状态转换图 一次状态转换。在什么情况下,当一个进程发生转换3时能立即引起另一个进程发生转换2?

3)如图3.16,说明是否会发生下述因果转换: 2→1 会,在抢占式调度的情况下,更高优先级的进程到达 3→2 会,一个正在运行的进程因等待某一事件的发生而转入阻塞态,而就绪队列中有进程在等待运行 4→1 不会

(2)有一个单向链接的进程PCB队列,它的队首由系统指针指出,队尾进程链接指针为0。分别画出一个进程从队首入队和队尾入队的流程图。

(3)挂起状态和阻塞状态有何区别?在具有挂起操作的系统中,进程的状态有哪些?如何变迁?

被挂起进程处于静止状态,不能参与竞争CPU,直到被激活,但被挂起进程可能并不缺少资源;而阻塞进程是由于等待某一事件的发生,处于缺乏资源的状态。

(4)在创建一个进程时需要完成的主要工作是什么?在撤消一个进程时需要完成的主要工作又是什么?

创建进程的主要工作是为被创建进程创建一个PCB,并填入相应的初始值。并把该进程插入就绪队列。

撤消该进程的所有子孙进程。在撤消的过程中,被撤消进程的所有系统资源(内存、外设)应全部释放出来归还给系统,并将它们从所有队列中移出。如果被撤消进程正在处理器上运行,则要调用进程调度程序将处理器分配给其它进程。

(5)什么是可再入程序?其有何特性?

能被多个程序同时调用的程序。它具有以下性质:它是纯代码的,即它在执行过程中不改变自身代码,通常由指令和常量等程序逻辑中的不变部分组成;调用它的各程序应提供工作区,用以存放随着程序执行将发生变化的部分,诸如程序中的数组、变量和通用存储器内的信息。

(6)在使用线程的系统中,是每个线程有一个堆栈还是每个进程有一个堆栈?说明原因。

(7)线程通常有哪些状态?为了管理线程,操作系统一般提供哪些原语? 线程状态:就绪态,运行态,阻塞态 原语:派生,阻塞,激活

习题4

1.单项选择题

(1)要避免出现与时间有关的错误,对若干进程的相关临界区的管理应满足以下除 C 外的要求。

A、 一次最多让一个进程在临界区中执行 B、 任何一个进入临界区执行的进程必须在有限时间内退出临界区 C、 避免进程进入相关临界区

D、 不能强迫一个进程无限期地等待进入它的临界区

(2)有三个进程P1、P2、P3共享同一个程序段,而每次最多允许两个进程进入该程序段,则信号量S的初值为 C 。

A、0 B、1 C、2 D、3

(3)在操作系统中wait、signal操作是一种 D 。 A、机器指令 B、系统调用命令 C、作业控制命令 D、低级进程通信

(4)用signal操作唤醒一个进程时,被唤醒进程的状态应变成 C 状态。 A、等待 B、运行 C、就绪 D、完成

(5)用信箱实现并发进程间的通信需要两个基本的通信原语,它们是 B 。 A、wait原语和signal原语 B、send原语和receive原语 C、R(S)和W(S) D、以上都不是 (6)用来实现进程同步与互斥的wait,signal操作,实际上是 D 的过程。 A、一个可被中断 B、一个不可被中断

C、两个可被中断 D、两个不可被中断 2.填空题

(1)临界资源是 一次仅允许一个进程访问 的资源,临界区是 进程中访问临界资源的那段代码 。

(2)信号量s>0时,表示 有s个可用的资源 ;当s=0时,表示 资源已经用完,但没有进程在等待 ;若s<0,则表示 有|s|个进程在等待资源 。

(3)设计进程同步机制的准则有 空闲让进 、 忙则等待 、 有限等待 和 让权等待 。 3. 基本概念解释和辨析 (1)同步与互斥。

(2)临界资源与临界区。 (3)高级通信与低级通信。 (4)直接通信与间接通信。 4.论述题

(1)什么是“忙等待”?如何克服“忙等待”?

如果在单处理器系统中,一个进程试图进入处于“忙”状态的临界区,则该进程只能不断测试临界区的状态,这就是“忙等待”。

让试图进入“忙”状态的临界区的进程“睡眠”等待,由释放资源的进程将其唤醒,便可克服“忙等待”的缺点。

(2)在解决进程互斥时,如果TS指令的执行可以中断,则会出现什么情况?而如果wait、signal的执行可分割,又会出现什么情况?

如果wait可被分割,则可能破坏“空闲让进”准则。如s.value=1,进程A执行wait操作,进行s.value--,s.value的值为0;如果此时被中断,进程B执行wait操作,进行s.value--,s.value的值为-1,则进程B将被阻塞;此时进程A恢复中断,由于s.value的值为-1,也将被阻塞,从而破坏了“空闲让进”准则。

如果signal可被分割,也有可能破坏“空闲让进”准则。如s.value=-1,进程C在等待s资源,进程A执行signal操作,进行s.value++,s.value的值为0;如果此时被中断,进程B执行signal操作,进行s.value++,s.value的值为1,进程B不会唤醒进程C;此时进程A恢复中断,由于s.value的值为1,也不会唤醒进程C,从而破坏了“空闲让进”准则。

(3)使用parbegin改写下面的表达式以获得最大程度的并行性。 (3*a*b+4)/(c+d)**(e-f)

typedef Fan_Type DataType; Fan_Type x;

Fan_Type P1( )

{ return(3*a*b+4); }

Fan_Type P2( ) { return(c+d); }

Fan_Type P3( ) { return(e-f); }

void main( )

{

}

(4)设有几个进程共享一互斥段,对于如下两种情况: (1)每次只允许一个进程进入临界区;

(2)最多允许m个进程(m

所采用的信号量是否相同?信号量值的变化范围如何? (1)信号量值的变化范围为s.value<=1; (2)信号量值的变化范围为s.value<=m;

(5)下面是两个并发执行的进程,它们能正确执行吗?若不能正确执行,请举例说明,并改正之(x是公共变量)。

void P1( ) { int y, z; x=1; y=0; if(x>=1) y=y+1;

z=y;

} void P2( ) { int t, u; x=0; t=0; if(x<1) t=t+z; u=t; } void main( ) { parbegin(P1( ), P2( )); }

不能正确执行。如进程P1执行过程中不被中断,进程运行结束后x, y, z的值均为1;但若进程P1执行到y=0时被中断,进程P2执行完毕后x的值为0,则P1恢复中断后获得的结果为x, y, z的值均为0,从而发生与时间有关的错误。

struct semaphore s; s.value=1; void P1( ) { int y, z; wait(s); x=1; y=0; if(x>=1) y=y+1; z=y; signal(s); } void P2( )

Fan_Type a, b, c;

parbegin(a=P1, b=P2, c=P3); xa/b**c;