操作系统第二章课后复习资料 下载本文

内容发布更新时间 : 2024/5/8 2:02:44星期一 下面是文章的全部内容请认真阅读。

第二章 进程管理

2. 试画出下面4条语句的前趋图: S1: a:=x+y;

S1 S2: b:=z+1;

S3 S4 S3: c:=a-b;

S2 S4: w:=c+1;

3. 为什么程序并发执行会产生间断性特征? 程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而相互合作,致使在这些并发执行的进程之间,形成了相互制约的关系,从而也就使得进程在执行期间出现间断性。

4. 程序并发执行时为什么会失去封闭性和可再现性?

因为程序并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态是由多个程序来改变,致使程序的运行失去了封闭性。而程序一旦失去了封闭性也会导致其再失去可再现性。

5. 在操作系统中为什么要引入进程概念?它会产生什么样的影响?

为了使程序在多道程序环境下能并发执行,并能对并发执行的程序加以控制和描述,从而在操作系统中引入了进程概念。 影响: 使程序的并发执行得以实行。

6. 试从动态性,并发性和独立性上比较进程和程序?

a. 动态性是进程最基本的特性,可表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,以及由撤销而消亡,因而进程由一定的生命期;而程序只是一组有序指令的集合,是静态实体。

b. 并发性是进程的重要特征,同时也是OS的重要特征。引入进程的目的正是为了使其程序能和其它建立了进程的程序并发执行,而程序本身是不能并发执行的。 c. 独立性是指进程实体是一个能独立运行的基本单位,同时也是系统中独立获得资源和独立调度的基本单位。而对于未建立任何进程的程序,都不能作为一个独立的单位来运行。

7. 试说明PCB的作用?为什么说PCB是进程存在的唯一标志?

a. PCB是进程实体的一部分,是操作系统中最重要的记录型数据结构。PCB中记录了操作系统所需的用于描述进程情况及控制进程运行所需的全部信息。因而它的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能和其它进程并发执行的进程。

b. 在进程的整个生命周期中,系统总是通过其PCB对进程进行控制,系统是根据进程的PCB而不是任何别的什么而感知到该进程的存在的,所以说,PCB是进程存在的唯一标志。

8. 试说明进程在三个基本状态之间转换的典型原因.

a. 处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态变为执行状态。

b. 当前进程因发生某事件而无法执行,如访问已被占用的临界资源,就会使进程由执行状态转变为阻塞状态。

c. 当前进程因时间片用完而被暂停执行,该进程便由执行状态转变为就绪状态。 9. 为什么要引入挂起状态?该状态有哪些性质?

a. 引入挂起状态主要是出于4种需要(即引起挂起的原因): 终端用户的请求,父进程请求,负荷调节的需要,操作系统的需要。

b. 被挂起的进程是处于静止状态,并且不能直接被处理机调度。

17. 为什么进程在进入临界区之前应先执行“进入区”代码?而在退出前又要执行“退出区”代码?

为了实现多个进程对临界资源的互斥访问,必须在临界区之前加一段用于检查临界资源是否正在被访问的代码,如未被访问,该进程可进入临界区对此临界资源进行访问;如正被访问,则该进程不能进入临界区访问临界资源。 在退出临界区后,执行恢复访问标志的代码为“退出区”,而在退出前执行“退出区”代码主要是为了使其它进程能再访问此临界资源。 18. 同步机构应遵循哪些基本准则?为什么?

a. 空闲让进、忙则等待、有限等待、让权等待四条准则 b. 为实现进程能互斥地进入到自己的临界区

19. 试从物理概念上说明记录型信号量wait和signal。

Wait(S):当S.value>0时,表示目前系统中这类资源还有可用的,执行一次wait操作,

意味着进程请求一个单位的该类资源,是系统中可供分配的该类资源减少一个,因此描述为S.value:=S.value-1;当S.value<0时,表示该类资源已分配完毕,因此进程应调用block原语,进行自我阻塞,放弃处理机,并插入到信号量链表S.L中。

Signal(S):执行一次signal操作,意味着释放一个单位的可用资源,使系统中可供分配

的该类资源数增加一个,故执行S.value:=S.value+1操作。若加1后S.value≤0,则表示在该信号量链表中,仍有等待该资源的进程被阻塞,因此应调用wakeup原语,将S.L链表中的第一个等待进程唤醒。

22. 试写出相应的程序来描述图2-17所示的前驱图。 a. Var a, b, c, d, e, f, g, h; semaphore:= 0, 0, 0, 0, 0, 0, 0, 0; begin

parbegin

begin S1; signal(a); signal(b); end;

begin wait(a); S2; signal(c); signal(d); end; begin wait(b); S3; signal(e); end; begin wait(c); S4; signal(f); end;

begin wait(d); S5; signal(g); end; begin wait(e); S6; signal(h); end;

begin wait(f); wait(g); wait(h); S7; end;

parend end

23. 在生产者—消费者问题中,如果缺少了signal(full)或signal(empty),对执行结果将

会有何影响?

如果缺少了signal(full),那么表明从第一个生产者进程开始就没有对信号量full值改变,即使缓冲池存放的产品已满了,但full的值还是0,这样消费者进程在执行wait(full)时会认为缓冲池是空的而取不到产品,那么消费者进程则会一直处于等待状态。

如果缺少了signal(empty),例如在生产者进程向n个缓冲区投满产品后消费者进程才开始从中取产品,这时empty=0,full=n,那么每当消费者进程取走一个产品时empty并没有被改变,直到缓冲池中的产品都取走了,empty的值也一直是0,即使目前缓冲池有n个空缓冲区,生产者进程要想再往缓冲池中投放产品会因申请不到空缓冲区而被阻塞。

24. 在生产者—消费者问题中,如果将两个wait操作即wait(full)和wait(mutex)互换位置,或者将signal(mutex)和signal(full)互换位置,结果会如何? 在生产者—消费者问题中,如果将两个wait操作,即wait(full)和wait(mutex)互换位置后,可能引起死锁。考虑系统中缓冲区全满时,若一生产者进程先执行了wait(mutex)操作并获得成功,则当再执行wait(empty)操作时,它将因失败而进入阻塞状态,它期待消费者进程执行signal(empty)来唤醒自己,在此之前,它不可能执行signal(mutex)操作,从而使试图通过执行wait(mutex)操作而进入自己的临界区的其他生产者和所有消费者进程全部进入阻塞状态,这样容易引起系统死锁。

若signal(mutex)和signal(full)互换位置后只是影响进程对临界资源的释放次序,而不会引起系统死锁,因此可以互换位置。

25. 我们为某临界资源设置一把锁W,当W=1时表示关锁;当W=0时表示锁已打开,试写出开锁和关锁原语,并利用它们去实现互斥。 整型信号量:lock(W): while W=1 do no-op W:=1; unlock(W): W:=0;

记录型信号量:lock(W): W:=W+1;

if(W>1) then block(W.L) unlock(W): W:=W-1;

if(W>0) then wakeup(W.L)

例子:

Var W:semaphore:=0; begin repeat

lock(W);

critical section unlock(W);

remainder section until false; end

26. 试修改下面生产者——消费者问题解法中的错误:

producer: end begin repeat consumer: …… begin produce an item in nextp; repeat wait(mutex); …… wait(full); wait(mutex);

buffer(in):=nextp;…… wait(empty); signal(mutex); nextc:=buffer(out);

until false; out:=out+1;