计算机操作系统 作业答案

  • 格式:doc
  • 大小:86.50 KB
  • 文档页数:7

下载文档原格式

  / 7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章作业

1.1. 设计现代OS的主要目标是什么?

方便性,有效性,可扩充性和开放性.

1.2. OS的作用可表现为哪几个方面?

a. OS作为用户与计算机硬件系统之间的接口;

b. OS作为计算机系统资源的管理者;

c. OS实现了对计算机资源的抽象.

第二章作业

2.2. 试画出下面4条语句的前趋图:

S1: a:=x+y;

S2: b:=z+1;

S3: c:=a-b;

S4: w:=c+1;

语句S2都执行后才能执行,这样

语句 S4也只能在c赋值后才能执

行。对应的前驱图如右所示:

2.6.

a. 动态性是进程最基本的特性,可表现为由创建而产生,由调度而执行,因

得不到资源而暂停执行,以及由撤销而消亡,因而进程由一定的生命期;

而程序只是一组有序指令的集合,是静态实体。

b. 并发性是进程的重要特征,同时也是OS的重要特征。引入进程的目的正

是为了使其程序能和其它建立了进程的程序并发执行,而程序本身是不能并发执行的。

c. 独立性是指进程实体是一个能独立运行的基本单位,同时也是系统中独立

获得资源和独立调度的基本单位。而对于未建立任何进程的程序,都不能

作为一个独立的单位来运行。

第三章作业

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

执行“退出区”代码?2. 如何利用Test-and-set指令来实现互斥?它有何缺

点?

为了实现多个进程对临界资源的互斥访问,必须在临界区之前加一段用于检

查临界资源是否正在被访问的代码,如未被访问,该进程可进入临界区对此临界资源进行访问;如正被访问,则该进程不能进入临界区访问临界资源。

在退出临界区后,执行恢复访问标志的代码为“退出区”,而在退出前执行“退

出区”代码主要是为了使其它进程能再访问此临界资源。

3.4. 如何利用Test-and-set指令来实现互斥?它有何缺点?

Test-and-set指令是一种借助于一条硬件指令,即测试并建立指令TS (Test-and-set)来实现互斥的方法。利用TS实现进程互斥:每个临界资源设置一个公共布尔变量lock,初值为FALSE在进入区利用TS进行检查:有进程在临界区时,重复检查;直到其它进程退出时,检查通过。所有要访问临界资源的进程的进入区和退出区代码都是相同的。

缺点:利用硬件指令能有限实现进程互斥,但不能满足让权等待的准则,造成处理器时间的浪费,而且也很难用于解决较复杂的进程同步问题。

3.7. 如何利用信号量机制来实现多个进程对临界资源的互斥访问?并举例说明。

为了使多个进程能互斥访问某临界资源,只需为该资源设置一互斥信号量mutex,并设其初始值为1,用于表示临界资源未被访问,然后将各进程访问该资源的临界区CS置于wait(mutex)和signal(mutex)操作之间即可。这样,每个欲访问该临界资源的进程,在进入临界区之前,都要先对mutex执行wait操作,若该资源此刻未被访问(mutex的值为1),本次wai操作必然成功,进程便可以进入自己的临界区。这时,若有其他进程也想进入自己的临界区,由于对mutex 执行wait操作定会失败(mutex的值已为-1),因而该进程被阻塞,从而保证了该临界资源能被互斥地访问。

举例:

Var mutex:semaphore:=1;

begin

parbegin

process 1: begin

repeat

wait(mutex);

critical section

signal(mutex);

remainder seetion

until false;

end

process 2: begin

repeat

wait(mutex);

critical section

signal(mutex);

remainder section

until false;

end

parend

3.8. 试写出相应的程序来描述图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. Var a, b, c, d, e, f, g, h, i, j; semaphore:= 0, 0, 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); signal(f); end;

begin wait(c); S4; signal(g); end;

begin wait(d); S5; signal(h); end;

begin wait(e); S6; signal(i); end;

begin wait(f); S7; signal(j); end;

begin wait(g); wait(h); wait(i); wait(j); S8; end;

parend

end

3.11. 为某临界资源设置一把锁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)

例子:

V ar W:semaphore:=0;

begin

repeat

lock(W);

critical section

unlock(W);

remainder section

until false;

end

3.13. 试利用记录型信号量写出一个不会出现死锁的哲学家进餐问题的算法。

(课堂练习)

Var chopsiick array of semaphore:=(1,1,1,1,1);

prosessi

repeat

think;

Sswait(chopstick[(i+1)mod 5], chopstick[i]);

Eat;

Ssignal(chopstick[(i+1)mod 5], chopstick[i])