操作系统(软件)第二章作业答案

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

1、什么是中断?给出系统总体上的中断处理过程。

【解答】:所谓中断是指CPU在正常执行程序的过程中,由于某个外部或内部事件的作用,强迫CPU停止当前正在执行的程序,转去为该事件服务(称为中断服务),待服务结束后,又能自动返回到被中断的程序中继续执行。

CPU每执行完一条指令就去扫描中断寄存器,检查是否有中断发生,若没有中断就继续执行下条指令;若有中断发生就转去执行相应的中断处理程序。中断处理过程可粗略的分为以下四个过程:

①保护当前正在运行程序的现场;

②分析是何种中断,以便转去执行相应的中断处理程序;

③执行相应的中断处理程序;

④恢复被中断程序的现场。

2、请给出进程与程序它们的区别和联系。

【解答】:1、进程是动态的程序是静态的。程序是一组有序的指令集合,是一个静态的概念;进程则是程序及其数据在计算机上的一次执行是一个动态的集合。2、一个进程可以执行多个程序;一个程序可被多个进程执行;3、程序可以长期保存,进程有从被创建到消亡的生命周期。4、进程具有并发性,而程序具有顺序性;5、进程具有独立性,是资源分配调度的基本单位,而程序无此特性。

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

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

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

c. 当前进程因时间片用完而被暂停执行,该进程便由执行状态转变为就绪状态.

4、什么是临界资源和临界区?

【解答】:临界资源是一次仅允许一个进程访问的资源,例如打印机,共享的变量。进程中访问临界资源的那段代码段称为临界区。

5、进程的互斥和同步有什么异同点?进程同步机制应遵循哪四个基本准则?

【解答】:进程同步机制应遵循如下四个基本准则:空闲让进,以提高临界资源利用率,忙则等待,以保证临界资源互斥使用;让权等待,以提高cpu的利用率;有限等待,以免相关进程陷入“死等”。

6、信号量的物理含义是什么?

【解答】:

5、

6、

7、

8、

9、

10、

7、处于执行状态的进程若同时发生了下列两种情况:

(1)对某信号量执行P操作后,信号量的值变为负数。

(2)该进程的时间片到时产生中断。

试问,该进程将由执行状态变迁为就绪态,还是阻塞态?简述理由。

【解答】:

该进程应转入阻塞状态。假如不这样,而进程进入就绪态,有可能该进程被调度程序选中投入运行,但是该进程被阻塞的原因未去除,它仍然无法运行,白白浪费时间做进程切换工作。

8、设有n个进程共享一临界区,对于下述情况,说明信号量的初值、含义,并用PV操作写出有关进程的互斥算法:

(1)一次只允许一个进程进入临界区。

(2)一次允许m(m<n=个进程进入临界区。

【解答】:

设置信号量S1,初值为1;表示临界资源有一个可供1个进程竞争使用。每个进程的互斥算法描述如下:

S1取值的范围是1,0,-1,-2,…-(n-1),即某一时刻最多有一个进程正在临界区,而等待进入临界区的进程可有1个,2个,最多时可达n-1个。

设置信号量S2,初值为m;表示临界资源有m个可供n个进程竞争使用。每个进程的互斥算法描述如下:

S2取值的范围是m,m-1,…1,0,-1,-2,…-(n-m),即某一时刻最多有m个进程正在临界区,而等待进入临界区的进程可有1个,2个,最多可达n-m个。

9、假定阅览室最多可同时容纳100个人阅读,读者进入时,必须在阅览室门口的一个登记表上登记,内容包括姓名、座号等,离开时要撤掉登记内容。用P、V操作描述读者进程的同步算法。

【解答】:

struct semaphore seats, regbook = 100, 1 //seats座位数 regbook登记本

cobegin

void readeri( void ) ( i=1,2.....n)

{ while ( 1 ) {

P( seats ); //申请坐位,若无空位则阻塞

P( regbook); //申请登记本资源

register_reader_information(); //登记读者信息

V( regbook ); //释放登记本资源

reading(); //阅览

P( regbook ); //申请登记本资源

unregister_reader_information(); //注销登录信息

V( regbook ); //释放登记本资源

V( seats ); // 释放空位资源

}

}

coend

10、兄弟俩共用一个账号,他们都可以用该账号到任何一家联网的银行自动存款或取款。假定银行的服务系统有“存款”和“取款”两个并发进程组成,且规定每次的存款额和取款额总是为100元。若进程结构如下:

begin

amount:integer;

amount:=0;

cobegin

Process SAVE

m1: integer;

begin

m1:=amount;

m1:=m1+100;

amount:=m1

end;

Process TAKE

m2:Integer;

begin

m2:=amount;

m2:=m2-100;

amount:=m2

end;

coend;

end;

请回答下列问题:

(1)你估计该系统工作时会出现怎样的错误?为什么?

(2)若哥哥先存了两次钱,但在第三次存钱时弟弟却正在取钱,则该账号上可能出现的余额为多少?正确的余额应该为多少?

(3)为保证系统的安全,若用PV操作来管理,应怎样定义信号量及其初值?解释信号量的作用。

(4)在程序的适当位置加上P操作和V操作,使其能正确工作。

[分析]:

由于“存款”和“取款”两个并发进程使用了共享变量amount,在进程中没有对共享变量的使用加以限制,因而当两个进程交叉访问共享变量时可能会出现与时间有关的错误。

因amount的初值为“0”,故当哥哥先存了两次钱后,amount的值应该为200(每次存人 100元)。之后,哥哥和弟弟各自调用SAVE和TAKE进行存款和取款,使两个进程同时执行。它们并发执行时可能有如下两种情况:

(1)进程在临界区执行没有被打断。此时若哥哥先执行了 m1:=amount;m1:= m1+100;amount:=m1;则 amount的值为 300。然后,由弟弟执行 m2:= amount; m2:=m2-100;amount:= m2;则弟弟从 300元中取走了 100元使 amount的值保持为 200。如果弟弟先执行,则弟弟将从已有的200元存款中取出 100元使amount的值成为 100。然后,哥哥再执行存人 100

元的工作而使amount的值仍为200。可见,无论是哥哥先执行存款还是弟弟先执行取款,只要各自在临界区的工作没有间断,则均使amount保持正确值。

相关文档
最新文档