计算机操作系统第四版汤小丹版
b. 当前进程因发生某事件而无法执行,如访问已被占用的临界资源,就会使进程由执行状态转变为阻塞状态。
c. 当前进程因时间片用完而被暂停执行,该进程便由执行状态转变为就绪状态。
12. 为什么要引入挂起状态?该状态有哪些性质?
a. 引入挂起状态主要是出于4种需要(即引起挂起的原因): 终端用户的请求,父进程请求,负荷调节的需要,操作系统的需要。
b. 被挂起的进程是处于静止状态,并且不能直接被处理机调度。
@. 为什么进程在进入临界区之前应先执行“进入区”代码?而在退出前又要执行“退出区”代码?
为了实现多个进程对临界资源的互斥访问,必须在临界区之前加一段用于检查临界资源是否正在被访问的代码,如未被访问,该进程可进入临界区对此临界资源进行访问;如正被访问,则该进程不能进入临界区访问临界资源。
在退出临界区后,执行恢复访问标志的代码为“退出区”,而在退出前执行“退出区”代码主要是为了使其它进程能再访问此临界资源。
@. 同步机构应遵循哪些基本准则?为什么?
a. 空闲让进、忙则等待、有限等待、让权等待四条准则
b. 为实现进程能互斥地进入到自己的临界区
@. 试从物理概念上说明记录型信号量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链表中的
第一个等待进程唤醒。
@. 试写出相应的程序来描述图2-17所示的前驱图。
a. Var a, b, c, d, e, f, g, h; semaphore:= 0, 0, 0, 1, 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
b. 略