1、操作系第3版孟庆昌答案部分习题参考答案针对书中习题的重点和难点部分给出参考答案,而其余习题可在书中相应章节处得到答案。第 1 章.操作系统是裸机之上的第一层软件,它只在核心态模式下运行,受硬件保护,与硬件关系尤为密切。操作系统是整个计算机系统的控制管理中心,其他所有软件都建立在操作系统之上。操作系统对它们既具有支配权力,又为其运行建造必备环境。4.脱机I/O是指输入输出工作不受主机直接控制,而由卫星机专门负责完成/,主机专门完成快速计算任务,从而二者可以并行操作。联机I/O是指作业的输入、调入内存及结果输出都在CP直接控制下进行。8硬件 是指计算机物理装置本身,它是计算机系统的物理基础。如CP
2、、内存、设备等。软件是相对硬件而言的,它是与数据处理系统的操作有关的计算机程序、过程、规则及相关文档资料的总称。简单地说,软件是计算机执行的程序。多道程序设计 在这种设计技术下,内存中能同时存放多道程序,在管理程序的控制下交替地执行。这些作业共享CPU和系统中的其他资源。并发 是指两个或多个活动在同一给定的时间间隔中进行。它是宏观上的概念。吞吐量在一段给定的时间内,计算机所能完成的总工作量。分时 就是对时间的共享。在分时系统中,分时主要是指若干并发程序对CPU时间的共享。实时表示“及时”或“即时”。系统调用 是用户在程序中能以“函数调用”形式调用的、由操作系统提供的子功能的集合。每一个子功能称
3、做一条系统调用命令。它是操作系统对外的接口,是用户级程序取得操作系统服务的唯一途径。10通常,大家会熟悉以下操作系统:Windows 200,Wndows P,UNIX或inx。在上机工作过程中,操作系统为用户提供的服务包括:命令和数据输入/输出的管理,内存的分配,用户文件的管理,P的分配,设备管理等。2.当执行操作系统程序时,处理机处于核心态。它有较高的特权,可以执行所有的指令,包括一般用户程序中不能使用的特权指令,从而能对所有寄存器和内存进行访问、启动I/操作等。用户程序是在用户态下执行,它的权限较低,只能执行指令集中非特权指令。设置这两种不同状态的目的是为了保护操作系统程序(特别是其内核
4、部分),防止受到用户程序的损害。3.只在核心态下执行的指令有:屏蔽所有中断。设置时钟日期。启动打印机。清内存。14实时系统的一个重要特征就是对时间的严格限制和要求。实时系统的首要任务是调度一切可利用的资源完成实时控制任务,其次才着眼于提高计算机系统的使用效率。所以,设计实时操作系统必须首先考虑处理各种事件的时间限制。5特权指令是一类只能在核心态下执行的机器指令。而系统调用不是机器指令,它往往以函数调用的形式出现,实现操作系统提供的子功能,它是操作系统与用户的编程接口。在用户程序中可以使用系统调用来获得操作系统服务。在系统调用代码中可以使用特权指令。16结构关系清晰,提高系统的可靠性和安全性。各
5、层模块的功能明确,提高系统的可扩充性和可移植性。各层间具有单向依赖性,增强系统的可维护性。符合软件工程的思想,便于实施研制开发。18精减核心的功能,提供了一种简单的高度模块化的体系结构,提高了系统设计及使用的灵活性。可移植性好。所有与具体机器特征相关的代码,全部隔离在微内核中。可伸缩性好。操作系统能方便地进行定制、扩充或缩减,以适应硬件的快速更新和应用需求的不断变化。实时性好。微内核可以方便地支持实时处理。提供多线程机制,支持多处理器的体系结构和分布式系统及计算机网络。系统安全性好。传统的操作系统将安全性功能建立在内核之外,因而它并不是很安全的。而微内核则将安全性作为系统内特性来进行设计。第
6、2 章1由于多道程序并发执行时共享系统资源,共同决定这些资源的状态,因此系统中各程序在执行过程中就出现了相互制约的新关系,程序的执行出现“走走停停”的新状态。用程序这个静态概念已不能如实反映程序并发执行过程中的这些特征。为此,人们引入了“进程(Prcess)”这一概念来描述程序动态执行过程的性质。进程和程序是两个完全不同的概念。进程与程序的主要区别如表C1所示。表C-进 程程 序进程是动态概念程序是静态概念进程具有并发性,宏观上同时运行程序本身具有顺序性,程序的并发执行是通过进程实现的进程具有独立性,是一个能独立运行的单位,是系统资源分配的基本单位,是运行调度的基本单位程序本身没有此特性程序和
7、进程无一一对应关系,一个进程可顺序执行多个程序一个程序可由多个进程共用进程异步前进,会相互制约程序不具备此特性然而,进程与程序之间存在密切关系,进程的功能是通过程序的运行得以实现的,进程活动的主体是程序。进程不能脱离开具体程序而独自存在。2.PCB是进程组成中最关键的部分。每个进程有唯一的进程控制块;操作系统根据B对进程实施控制和管理,进程的动态、并发等特征是利用PCB表现出来的;PCB是进程存在的唯一标志。CB中有表明进程状态的信息,该进程的状态包括运行态、就绪态和阻塞态,它利用状态信息来描述进程的动态性质。4.(1)就绪运行:CPU空闲,就绪态进程被调度程序选中。运行阻塞:运行态进程因某种
8、条件未满足而放弃对CPU的占用,如等待读文件。阻塞就绪:阻塞态进程所等待的事件发生了,例如读数据的操作完成。运行就绪:正在运行的进程用完了本次分配给它的CPU时间片。(2)下述状态变迁:(A)21,可以。运行进程用完了本次分配给它的时间片,让出CPU,从就绪队列中选一个进程投入运行。(B)2,不行。任何时候一个进程只能处于一种状态,它既然由运行态变为阻塞态,就不能再变为就绪态。(C)1,可以。某一阻塞态进程等待的事件出现了,而且此时就绪队列为空,该进程进入就绪队列后马上又被调度运行。.不是所有的共享资源都是临界资源。因为临界资源是一次仅允许一个进程使用的资源,而系统中有很多资源可以让多个进程同
9、时使用,例如硬盘、正文段等。10.因为打印机是一种临界资源,所以这三个进程只能互斥使用这台打印机,即一个用户的计算结果打印完之后,另一个用户再打印。设三个进程分别为A, B和C,如图-1所示。设一个互斥信号量为mex,其初值为。图C-111.(1)这个算法不对。因为A, B两进程共用一个缓冲区Q,如果A先运行,且信息数量足够多,那么缓冲区Q中的信息就会发生后面的冲掉前面的,造成信息丢失,B就不能从Q中读出完整的信息。改正:A, B两进程要同步使用缓冲区Q。为此,设立两个信号量。epty 缓冲区Q为空,初值为1。full 缓冲区Q为满,初值为0。算法框图如图C所示。(2)这个算法不对。因为A,
10、B两个进程是并发的,它们共享一个临界资源,所以二者应互斥地使用该临界资源,在进入临界区时不存在A先后的时序关系,而是哪个进程先到一步就先进入自己的临界区。改正:A, B两个进程应互斥地进入临界区。为此,设立一个信号量:互斥信号量为tex,其初值为1。算法框图如图C-3所示。 图-2 图C-312.(1)如图C-4所示,系统可设三个进程来完成这个任务:R进程负责从卡片输入机上读入卡片信息,输入到缓冲区B1中;C进程负责从缓冲区1中取出信息,进行加工处理,之后将结果送到缓冲区B2中;P进程负责从缓冲区B中取出信息,并在打印机上印出。图-4(2)R进程受C进程影响,B1放满信息后进程要等待,等到C进
11、程将其中信息全部取走,才能继续读入信息;进程受R进程和P进程的约束,B1中信息放满后C进程才可从中取出它们,且2被取空后C进程才可将加工结果送入其中;P进程受C进程的约束,B2中信息放满后P进程才可从中取出它们,进行打印。(3)信号量含义及初值:B1full 缓冲区B满,初值为0。B1epy 缓冲区B1空,初值为。ful 缓冲区B2满,初值为0。Bempty缓冲区B2空,初值为1。13.(1) 输入、输出两组进程读/写缓冲区需要的条件是: 所有进程都要互斥使用缓冲区。 所有输入进程连续写入缓冲区的个数不能超过缓冲区的总容量()。 输出进程不能超前输入进程。 设置三个信号量:full 放有信息的
12、缓冲区数,其初值为0。mpty 可供使用的缓冲区数,其初值为n。mutex 互斥信号量,初值为1,表示各进程互斥进入临界区,即保证任何时候只有一个进程使用缓冲区。两个计数变量:in和ut分别是输入进程和输出进程使用的计数量,表示下面使用的缓冲区编号,初值都是。 输入进程: 输出进程: whil(RU) wle(TE) P(mp); P(ful); P(mutex); P(utx); 信息送往buffer(in); 从buffer(ou)中取出信息 in(n+1)mod n; /以n为模 ot(t+)mod n; /*以n为模*/ V(tex); V(mutex); V(ful); V(mpy)
13、; ()输入、输出两组进程读写缓冲区需要的条件是所有进程都要互斥使用缓冲区;输出进程不能超前输入进程。 信号量:ful缓冲区满的情况,初值为0。mutex 互斥信号量,初值为1。计数器:=0,j=0 (i, 分别为输入进程和输出进程使用的缓冲区号码)。 输入进程: 输出进程: whle(TRE) hile(TU) P(mutex); P(ful); 信息送往buffr(i); P(muex); i=i1; 从uff(j)中取出信息; V(utex); j+1; V(ful); V(mex); 14.()完成此项工作可编写一个程序(函数)或者两个程序(函数)。每个读者对应一个进程。当一个读者进入
14、阅览室时,就为他建立一个进程;当读者离开阅览室时,就终止该进程。可见,有多少个读者到来就要有多少个进程。而完成工作的程序代码可以是一个,或者二个,这是各个读者进程共用的。()信号量:S 座位情况,初值为0。mutex 互斥使用登记表,初值为1。有两种解法,分别对应利用一个程序(函数)编写和利用二个程序(函数)编写。第一种解法 第二种解法(一个函数,用自然语言描述) (二个函数,用C语言描述) 每位读者进程 ypeef sruc /定义结构型信号量 */ int alue; struct PB *ls; seaphor; sahore s=1; P() semahore uex; P(mx) o
15、id main() 查表,登记 V(mtex) regitr( ); /*查表并登记*/ 入室,阅读 redng( ); *阅读 P(muex) dlete( ); /*查表并删除登记项*/ 出室查表,删除登记项 V(mutex) oid este( ) V(S) (S); (muex); Chek_egister( ); V(mte); viddelet( ) P(uex); Check_dlete( ); V(mtex); (); 15在生产者消费者问题中,如果对调生产者进程中的两个操作,形如:生产者进程roducer: wil(TUE) (mte); P(empy); (mutx); V
16、(ull);当缓冲区全满时,只要有一个生产者进程试图进入临界区,并在mpty信号量上阻塞,所有消费者进程都无法进入自己的临界区,从而无法使该进程醒来。于是,所有生产者进程和消费者进程都无限期地处于阻塞状态,从而出现死锁。然而,如果对调生产者进程中的两个V操作,并不出现任何故障,只是从进程退出临界区的角度考虑,应越快越好。如果对调消费者进程中的两个P操作,也会产生同样问题。16.信号量所能传递的信息量是非常有限的,通信效率低。如果用它实施进程间数据的传送就会增加程序的复杂性,使用起来也很不方便,甚至会因使用不当而产生死锁。为了解决进程间消息通信问题,人们研究和设计了高级通信机构。其主要优点是:不
17、仅能较好地解决进程间的同步互斥问题,还能交换大量信息;由操作系统隐藏了进程通信的实现细节,即通信过程对用户是透明的,从而大大简化了编制通信程序的复杂性。当某个进程需要向另一个进程发送消息时,就向系统申请一个消息缓冲区,并把要发送的数据送到消息缓冲区,然后把该消息缓冲区插入到接收进程的消息队列中。接收进程在接收消息时,只需从本进程的消息队列中摘下该缓冲区,并从中取出所需的信息,然后把该缓冲区交还给系统。17.设隧道一端为A,另一端为。每辆汽车为一个进程。、两端的汽车进程分别用P_Ai和P_Bi(=1, ,3)表示。双方通过隧道的方式相同:首先提出申请;获准后进入隧道,本方进入隧道的汽车计数加1;
18、如果是本方第一辆车过隧道,则阻塞对方汽车过隧道;若对方无车辆等待,则本方可以连续放行多台车辆进入隧道;汽车通过隧道;本方进入隧道的汽车计数减1;如果是目前本方最后一辆车(即目前本方无车辆过隧道),则放行对方汽车通过。设置信号量:wai: 等待申请的互斥信号量,初值为1;muxA: 放行A方汽车过隧道的互斥信号量,初值为1;utex:放行B方汽车过隧道的互斥信号量,初值为;计数变量:cou=0;cu20;过隧道算法描述:P_i: P_B:P(ait); P(wt); (mteA); P(utexB); oucount11; cun2out+1;i(cunt=1) i(unt2=1)P(muteB
19、); P(muexA); V(mtexA); V(mutexB); (it); (wait); 汽车通过隧道; 汽车通过隧道;P(utexA); P(mutexB); ount1=con-1; count=cout2-1;f(ount10) if(cun=) V(mutexB); V(mex); V(mutex); V(mtex);18本题是典型的读者-写者问题。查询信息的用户是读者,订票用户是写者,并且要求写者优先。【解法1】读者-写者按先后顺序交叉访问数据库,如图C5所示。图C-5 计数变量:rc 正在运行的查询者进程数目,初值为0。信号量:w控制订票者进程的活动,初值为。rc互斥使用c变
20、量,初值为1。S 当订票者到达时封锁后续的读进程,初值为。【解法2】保证写者优先于读者,即一旦有写者到达时,则新读者要等待。信号量:mutx当至少有一个写者到达时,阻止所有读者访问的互斥操作信号量,初值为1。wute写者间以及读者与写者间互斥操作信号量,初值为1。x控制readcun变量修改的互斥信号量,初值为1。y控制wrieount变量修改的互斥信号量,初值为1。z有写者时,只允许一个读者在rmutex上排队,其他读者在信号量z上排队,初值为1。计数变量:reacunt读者计数器,初值为。它控制对mute的设置。writeount写者数目,初值为0。它控制对muex的设置。 读者进程 写者
21、进程 hle(TR) while(TRUE) P(z); P(y); P(mutex); itcount +; P(x); if(wreo 1) radcu+; P(ue); if(radcunt =) (y); P(mutex); P(wmuex); V(); 执行写操作 (rmutex); V(mtex); V(z); P(y); 执行读操作 writoun -; P(x); if(writou = =0) readcun-; V(rmtx); if(redcou= =0) V(y); V(wmute); V(); 1.除学生进程、教师进程外,为保证系统控制流程,需另设一个监控进程,用于控
22、制学生的进入和计算机的分配,如图-6所示。信号量:sun 学生到达情况,初值为0。coputr 计算机分配情况,初值为m。eter 能否进入机房情况,初值为0。finis 学生完成情况,初值为。he检查工作完成情况,初值为0。图-620如图所示。信号量:S_M01,S_M1,S2=3,SM3=2各个信箱中可用格子的信号量。S=,S1=0,S2=0,S3=0 各个信箱中信息的信号量。mute0,mutx,mtex2,utex3 互斥使用各信箱的信号量,初值均为1。图C-726用一个信号量表示一根筷子,五个信号量构成信号量数组chpstik,所有信号量初值为1。第i个哲学家的进餐过程可描述如下:i
23、e(RU) 思考问题 P(chpstik); P(chpstick(i1)od 5); 进餐 V(chopstci; V(chptc(i+1)mod ); defie N 5 #efie LEFT (-1)%N #define RI (i)% #efine NKNG 0 define HNY 1 in EAING ypestrt /* 定义结构型信号量 */ in vlu; stct PCB *list; smaphore; instate; eaphre hpsck5 =,,1,1,1; eahore ux1; * 互斥进入临界区 * smahre N; /* 每位哲学家一个信号量/ voi
24、dphlospr(nt i) while (TE) hik(); / 哲学家在思考问题 */ take_chopstick(i); /*拿到两根筷子或者等待 * at(); /* 进餐*/ putcopstick(i); * 把筷子放回原处 */ voidtke_chopstik(nt i) (me); stateiHUNGRY; tst(i); * 试图拿两根筷子 */ V(mutex); P(s); oid pu_hopsick(int i) P(mtx); tati=THINKIN; test(E); /* 查看左邻,现在能否进餐 */ et(RIGH); * 查看右邻,现在能否进餐 */ V(tx); void tst(int) if (state=HNGRY& staeEFT!EATING& staeIGT!=ETING) satei=ATI; V(s ); 第 3 章.解决死锁的一般方法有:死锁的预防、死锁的避免、死锁的检测与恢复等三种。死锁预防的基本思想是:要求进程申请资源时遵循某种协议,从而打破产生死锁的4个必要条件中的一个或几个,保证系统不会进入死锁状态。死锁避免的基本思想是:对进程所发出的每一个申请资源命令加以动态地检查,并根据检查结果决定是否进行资源分
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1