操作系统第二章作业讲解
- 格式:doc
- 大小:264.50 KB
- 文档页数:24
第二章进度管理2. 试画出下面 4 条语句的前趋图 :S : a:=x+y;1S1S : b:=z+1;2S3S4 S3: c:=a-b;S4S : w:=c+1;23.为什么程序并发执行会产生中止性特色?程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而相互合作,致使在这些并发执行的进度之间,形成了相互限制的关系,从而也就使得进度在执行期间出现中止性。
4.程序并发执行时为什么会失去封闭性和可再现性?由于程序并发执行时,是多个程序共享系统中的各种资源,所以这些资源的状态是由多个程序来改变,致使程序的运行失去了封闭性。
而程序一旦失去了封闭性也会致使其再失去可再现性。
5. 在操作系统中为什么要引入进度看法?它会产生什么样的影响?为了使程序在多道程序环境下能并发执行,并能对并发执行的程序加以控制和描述,从而在操作系统中引入了进度看法。
影响 : 使程序的并发执行得以实行。
6. 试从动向性,并发性和独立性上比较进度和程序?a. 动向性是进度最基本的特色,可表现为由创办而产生,由调换而执行,因得不到资源而暂停执行,以及由撤掉而消亡,所以进度由必然的生命期;而程序可是一组有序指令的会集,是静态实体。
b. 并发性是进度的重要特色,同时也是OS 的重要特色。
引入进度的目的正是为了使其程序能和其他建立了进度的程序并发执行,而程序自己是不能够并发执行的。
c. 独立性是指进度实体是一个能独立运行的基本单位,同时也是系统中独立获得资源和独立调换的基本单位。
而对于未建立任何进度的程序,都不能够作为一个独立的单位来运行。
7.试说明 PCB 的作用 ?为什么说 PCB 是进度存在的唯一标志 ?a. PCB是进度实体的一部分,是操作系统中最重要的记录型数据结构。
PCB中记录了操作系统所需的用于描述进度情况及控制进度运行所需的全部信息。
所以它的作用是使一个在多道程序环境下不能够独立运行的程序(含数据 ),成为一个能独立运行的基本单位,一个能和其他进度并发执行的进度。
第二章作业第一次作业:1.进程有哪三种基本状态?进程在三种基本状态之间转换的典型原因是什么?答:三种基本状态:就绪状态、执行状态、阻塞状态。
(1)就绪状态→执行状态:进程分配到CPU资源(进程调度);(2)执行状态→就绪状态:时间片用完(3)执行状态→阻塞状态:I/O请求(4)阻塞状态→就绪状态:I/O完成2.在Linux系统中运行下面程序,最多可产生多少个进程?画出进程家族树。
main(){fork();fork();fork();}答:最多可以产生7个进程。
其家族树为:3.试从动态性、并发性和独立性上比较进程和程序。
答:1)动态性是进程最基本的特性,可表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,以及由撤销而消亡,因而进程由一定的生命期;而程序只是一组有序指令的集合,并存放于某种介质上,其本身并不具有运动的含义,因而是静态的;2)并发性是进程的重要特征,同时也是OS的重要特征。
引入进程的目的正是为了使其程序能和其它建立了进程的程序并发执行,而程序本身(没有建立PCB)是不能并发执行的;3)独立性是指进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位。
凡未建立PCB的程序,都不能作为一个独立的单位来运行。
4.分析下列代码的功能:答:sleep_on实现进程的睡眠过程;wake_up实现进程的唤醒过程。
第二次作业:1.同步机制应该遵循哪些基本准则?你认为整型信号量机制遵循了同步机制的哪些基本准则?答:同步机制应遵循四个基本准则:a. 空闲让进:当无进程处于临界区时,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效地利用临界资源。
b. 忙则等待:当已有进程进入临界区时,其它试图进入临界区的进程必须等待,以保证对临界资源的互斥访问。
c. 有限等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入“死等”状态。
d. 让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态。
1、什么是中断?给出系统总体上的中断处理过程。
【解答】:所谓中断是指CPU在正常执行程序的过程中,由于某个外部或内部事件的作用,强迫CPU停止当前正在执行的程序,转去为该事件服务(称为中断服务),待服务结束后,又能自动返回到被中断的程序中继续执行。
CPU每执行完一条指令就去扫描中断寄存器,检查是否有中断发生,若没有中断就继续执行下条指令;若有中断发生就转去执行相应的中断处理程序。
中断处理过程可粗略的分为以下四个过程:①保护当前正在运行程序的现场;②分析是何种中断,以便转去执行相应的中断处理程序;③执行相应的中断处理程序;④恢复被中断程序的现场。
2、请给出进程与程序它们的区别和联系。
【解答】:1、进程是动态的程序是静态的。
程序是一组有序的指令集合,是一个静态的概念;进程则是程序及其数据在计算机上的一次执行是一个动态的集合。
2、一个进程可以执行多个程序;一个程序可被多个进程执行;3、程序可以长期保存,进程有从被创建到消亡的生命周期。
4、进程具有并发性,而程序具有顺序性;5、进程具有独立性,是资源分配调度的基本单位,而程序无此特性。
3、试说明进程在三个基本状态之间转换的典型原因.【解答】a. 处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态变为执行状态.b. 当前进程因发生某事件而无法执行,如访问已被占用的临界资源,就会使进程由执行状态转变为阻塞状态.c. 当前进程因时间片用完而被暂停执行,该进程便由执行状态转变为就绪状态.4、什么是临界资源和临界区?【解答】:临界资源是一次仅允许一个进程访问的资源,例如打印机,共享的变量。
进程中访问临界资源的那段代码段称为临界区。
5、进程的互斥和同步有什么异同点?进程同步机制应遵循哪四个基本准则?【解答】:进程同步机制应遵循如下四个基本准则:空闲让进,以提高临界资源利用率,忙则等待,以保证临界资源互斥使用;让权等待,以提高cpu的利用率;有限等待,以免相关进程陷入“死等”。
操作系统第二章作业讲解第二章习题讲解1、进程之间存在着哪几种制约关系?各是什么原因引起的?下列活动分别属于哪种制约关系?(1)若干同学去图书馆借书;(2)两队举行篮球比赛;(3)流水线生产的各道工序;(4)商品生产和社会消费。
答:进程之间存在着直接制约与间接制约这两种制约关系,其中直接制约(同步)是由于进程间的相互合作而引起的,而间接制约(互斥)则是由于进程间共享临界资源而引起的。
(1)若干同学去图书馆借书,是间接制约,其中书是临界资源;(2)两队举行篮球比赛,是间接制约,其中蓝球是临界资源;(3)流水线生产的各道工序,是直接制约,各道工序间需要相互合作,每道工序的开始都依赖于前一道工序的完成;(4)商品生产和社会消费,是直接制约,两者也需要相互合作:商品生产出来后才可以被消费;商品被消费后才需要再生产。
2、试写出相应的程序来描述下图所示的前趋图vara,b,c,d,e,f:semaphore:=0,0,0,0,0,0;begin S1; signal(a); signal(b);signal(c); end;begin wait(a); S2; end;begin wait(b); S3; signal(d); end; begin wait(c); S4; end;begin wait(d); S5; signal(e); signal(f); end; begin wait(e); S6; end;begin wait(f); S7; end;3、已知一个求值公式(A2+3B)/(B+5A),若A、B已赋值,试画出该公式求值过程的前趋图,并使用信号量描述这些前趋关系。
答:根据求值公式,假设:S1: X1=A*AS2: X2=3*BS3: X3=5*AS4: X4=X1+X2S5: X5=B+X3S6: X6=X4/X5var a,b,c,d,e:semaphore:=0,0,0,0,0;begin S1; signal(a); end;begin S2; signal(b); end;begin S3; signal(c); end;begin wait(a); wait(b); S4; signal(d); endbegin wait(c); S5; signal(e); endbegin wait(d); wait(e); S6; end4、桌上有一只能容纳一个水果的盘子;爸爸专向盘子中放苹果(apple),妈妈专向盘子中放桔子(orange),一个儿子专等吃盘子中的桔子,一个女儿专等吃盘子里的苹果,1)试用信号量实现他们的同步关系;2)如果有两个家庭的爸爸、妈妈、儿子、女儿和二只盘子呢?会需要专门的实现吗?var empty,apple,orange:semaphore:= 1,0,0;说明:empty与apple表示盘子为空与盘子中放入了苹果,用于表示爸爸与女儿间的同步关系;empty与orange表示盘子为空与盘子中放入了桔子,用于表示妈妈与儿子间的同步关系;答案:1)使用记录型信号量father:beginrepeatproducer an apple;wait(empty);Put an apple to the dish;signal(apple);Until falseend daughter:beginrepeatwait(apple);Get an apple from dish;signal(empty);Eat an apple; Until falseendmother:beginrepeatproducer an orange;wait(empty);Put an orange to the dish;signal(orange); Until falseend son:beginrepeatwait(orange);Get an orange from dish;signal(empty);Eat an orange; Until falseend2)使用记录型信号量varmutex,empty,apple,orange:semaphore:=1,2,0,0;dish: array[0,1] of fruit;in, out:integer:= 0,0;father:beginrepeatproducer an apple;wait(empty);wait(mutex);if dish[in]==apple or dish[in]==orange thenin:=(in+1) mod 2;disk[in]:=apple;in:=(in+1) mod 2;signal(mutex);signal(apple);Until falseend daughter:begin repeatwait(apple);wait(mutex);ifdish[out]==orange thenout:=(out+1) mod 2;get an apple from dish[out];out:=(out+1) mod 2;signal(mutex);signal(empty);Eat an apple; Until falseEndmother:beginrepeatproducer an orange;wait(empty);wait(mutex);if dish[in]==apple or dish[in]==orange thenin:=(in+1) mod 2;disk[in]:=orange;in:=(in+1) mod 2;signal(mutex);signal(orange);Until falseend son:beginrepeatwait(orange);wait(mutex);ifdish[out]==apple thenout:=(out+1) mod 2;get an orange from dish[out];out:=(out+1) mod 2;signal(mutex);signal(empty);Eat an apple; Until falseend5、试用信号量实现课件92页,司机与售票员进程的同步关系var stop, door :semaphore:=0,0;driver:beginrepeatdrive a bus; arrive at bus station; signal(stop);rest;wait(door);Until falseend conductor:begin repeatsell tickets;wait(stop);Open the door;Close the doorsignal(door); Until falseend6、试用信号量解决读者—写者问题,使得写者与读者优先级根据到达顺序确定。
1)典型错误代码讲解:不增加任何信号量Var rmutex, wmutex:semaphore∶=1,1;Readcount:integer∶=0;beginparbeginReader:beginrepeatwait(rmutex);if Readcount=0 then wait(wmutex);Readcount∶= Readcount+1;signal(rmutex);…perform read operation;…wait(rmutex);Readcount∶= Readcount-1;if Readcount=0 then signal(wmutex);signal(rmutex);until false;endwriter:beginrepeatif readcount>0 then wait(rumtex);wait(wmutex);perform write operation;signal(rmutex);signal(wmutex);until false;endparendend到达序列:R1, R2, W1, R3, R4, W2进程行为rmutex=1wmutex=1Readcount=0状态备注R 1 到达rmutex=0rmutex=1wmutex=0Readcount=1执行/就绪第1位读者R 2 到达rmutex=0rmutex=1Readcount=2执行/就绪W 1 到达rmutex=0 阻塞1阻塞Readcount>0R 3 到达阻塞1 阻塞rmutex=0R到阻塞2 阻rmutex=04 达塞W 2 到达阻塞3 阻塞rmutex=0R 1 离开阻塞4 阻塞rmutex=0R 2 离开阻塞5 阻塞rmutex=0产生死锁2)学习指导与题解上的解题思路答:为使写者优先,可在原来的读优先算法基础上增加一个初值为1的信号量S,使得当至少有一个写者准备访问共享对象时,它可使后续的读者进程等待写完成。
初值为0的整型变量writecount用来对写者进行计数;初值为1 的互斥信号量mutex用来实现多个写者对writecount的互斥访问。
读者与写者进程算法描述如下:var S, mutex, rmutex, wmutex: semaphore:=1,1, 1,1;writecount, readcount: integer:=0,0;reader: beginrepeatwait(S);wait(rmutex);if readcount=0 then wait(wmutex);readcount:=readcount+1;signal(rmutex);signal(S);perform read operation;wait(rmutex);readcount:=readcount-1;if readcount=0 then signal(wmutex);signal(rmutex);until falseendwriter: beginrepeatwait(mutex);if writecount=0 then wait(S);writecount:=writecount+1;signal(mutex);wait(wmutex);perform write operation;signal(wmutex);wait(mutex);writecount:=writecount-1;if writecount=0 then signal(S);signal(mutex);until falseend到达序列:R1, R2, W1, R3, R4, W23)改写上述代码,真正实现读写平等策略var S, rmutex, wmutex: semaphore:=1, 1,1;readcount: integer:= 0;reader: beginrepeatwait(S);wait(rmutex);if readcount=0 then wait(wmutex);readcount:=readcount+1;signal(rmutex);signal(S);perform read operation;wait(rmutex);readcount:=readcount-1;if readcount=0 then signal(wmutex);signal(rmutex);until falseendwriter: beginrepeatwait(S);wait(wmutex);perform write operation;signal(wmutex);signal(S);until falseend到达序列:R1, R2, W1, R3, R4, W2进程行为S=1rmutex=1wmutex=1readcount=备注R1 到达S=0 rmutex=第一S= 1 0rmutex=1wmutex=readcount=1个读者执行/就绪R2 到达S=S=1rmutex=rmutex=1readcount=2执行/就绪W 1 到达S=0 阻塞1第一个写者R3 到达阻塞1R4 到达阻塞2W 2 到达阻塞3R1 离开rmutex=rmutex=1readcount=1R2 离开rmutex=rmutex=1wmutex=1readcount=负责唤醒W1W 1 被唤醒wmutex=执行/就绪W 1 离开S=1wmutex=1负责唤醒R37、试说明PCB的作用,为什么说PCB是进程存在的唯一标志?(课本第7题)答:进程控制块的作用,是使一个在多道程序环境下不能独立运行的程序,成为一个能独立运行的基本单位,即一个能与其他进程并发执行的进程。