新版操作系统教程课后习题解答. 联系客服

发布时间 : 星期三 文章新版操作系统教程课后习题解答.更新完毕开始阅读b4f8612e4b7302768e9951e79b89680203d86b62

程的多个线程间亦可并发执行,因而使系统具有更好的并发性。

(4)系统开销方面

相比于没有引入线程的操作系统,引入线程的系统其系统开销将显著降低。例如,在创建或撤销线程时,系统只需分配与回收很少的资源,而无须像进程创建或撤销那样,花费开销来分配或回收如内存空间、I/O设备等资源;又如,在线程切换时,只需保存和设置少量的寄存器的内容,而无须像进程切换那样,花费开销来保存和设置很多的现场信息。另外,同一个进程内线程之间的通信由于共享所属进程的存储空间,因此也比进程通信更加容易。

20.线程有哪些属性?

线程具有如下属性:

(1)多个线程可以并发执行。

(2)一个线程可以创建另一个线程。

(3)线程具有动态性。一个线程被创建后便开始了它的生命周期,可能处于不同的状态,直至衰亡。

(4)每个线程同样有自己的数据结构即线程控制块(Thread Controlling Block, TCB),其中记录了该线程的标识符、线程执行时的寄存器和栈等现场状态信息。

(5)在同一进程内,各线程共享同一地址空间(即所属进程的存储空间)。 (6)一进程中的线程在另一进程中是不可见的。

(7)同一进程内的线程间的通信主要是基于全局变量进行的。

21.试说明线程的分类。

多线程的实现分为三类:用户级线程ULT);内核级线程(KLT);混合式线程方式。 (1)内核级线程

内核级线程是指线程的管理工作由内核完成,由内核所提供的线程API来使用线程, 当任务提交给操作系统执行时,内核为其创建进程和一个基线程,线程在执行过程中可通过内核的创建线程原语来创建其他线程,应用程序的所有线程均在一个进程中获得支持。内核需要为进程及进程中的单个线程维护现场信息,所以,应在内核空间中建立和维护进程控制块PCB及线程控制块TCB,内核的调度在线程的基本上进行。 (2)用户级线程

用户级线程是指线程的管理由应用程序完成,在用户空间中实现,内核无须感知线程的存在。用户级多线程由用户空间中的线程库来完成,应用程序通过线程库进行设计,再与线程库连接、运行以实现多线程。线程库是由用户级线程管理的例行程序包,在这种情况下,线程库是线程运行的支撑环境。

(3)混合式线程

某些操作系统既支持用户级线程,又支持内核级线程,Solaris便是一个例子。线程的实现分为两个层次:用户层和内核层。用户层线程在用户线程库中实现;内核层线程在操作系统内核中实现,处于两个层次的线程分别称为用户级线程和内核级线程。在混合式线程系统中,内核必须支持内核级多线程的建立、调度和管理,同时也允许应用程序建立、调度和管理用户级线程。

22.什么叫与时间有关的错误?与时间有关的错误表现在哪些方面?请举例说明之。

进程按异步方式执行,对于有交往的并发进程来说,可能有若干并发进程同时使用共享资源,即一个进程一次使用未结束,另一进程已开始使用,形成交替使用共享资源的现象。如果对这种情况不加控制的话,就可能出现与时间有关的错误,在共享资源(变量)时就会

出错,就会得到不正确的结果。与时间有关的错误主要表现在进程的互斥和进程的同步。

23.什么是临界区?试举一临界区的例子。 有交往的并发进程执行时出现与时间有关的错误,其根本原因是对共享资源(变量)的使用不加限制,当进程交叉使用了共享资源(变量)就可能造成了错误。为了使并发进程能正确地执行,必须对共享变量的使用加以限制。我们把并发进程中与共享资源(变量)有关的程序段称为“临界区”。共享资源在(变量)所代表的资源称为“临界资源”。多个并发进程中涉及相同共享资源(变量)的那些程序段称为“相关临界区”

24.什么是进程的互斥?什么是进程的同步?

进程的互斥是指当有若干进程都要使用某一共享资源时,任何时刻最多只允许一个进程去使用,其他要使用该资源的进程必须等待,直到占用资源者释放该资源。

进程的同步是指并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消息,当一个进程没有得到另一个进程的消息时应等待,直到消息到达时才被唤醒。

25.若信号量s表示一种资源,则对s作PV操作的直观含义是什么?

若信号量s表示一种资源,则对s作PV操作的直观含义是,P(s)表示申请一个s资源,V(s)表示释放一个s资源。

26.在信号量s上作PV操作时,s的值发生变化,当s>0,s=0,s<0时,它们的物理意义是什么?

在信号量s上作PV操作时,s的值发生变化,当s>0时表示还有|s|个可用资源;当s=0时表示已无可用资源;当s<0时表示不但无可用资源,且还有|s|个进程在等待使用资源。

27.有三个并发进程,R负责从输入设备读入信息并传送给M,M将信息加工后并传送给P,P把加工后的信息打印输出。现有: (1)一个缓冲区; (2)两个缓冲区;

用PV操作写出这三个进程能正确工作的程序。 解:(1)一个缓冲区

设信号量S1表示缓冲区的容量; 信号量S2表示R读入的信息数;

信号量S3表示M信息加工后的信息数; Var S1,S2,s3: Semaphore; S1=缓冲区容量; S2=0; S3=0; Cobegin {

R(); M(); P(); } R( )

{ WHILE(1)

{

从输入设备读入信息X;

P(S1);

把读入信息X放入缓冲区中; V(S2); } } M( )

{ WHILE(1) {

P(S2);

从缓冲区中取R的读入信息X; V(S1);

信息加工得到新数据Y; P(S1);

把新数据Y放入缓冲区中; V(S3); } } P( )

{ WHILE(1) {

P(S3);

从缓冲区中取新数据Y; V(S1);

把新数据Y打印输出; } }

28.用PV操作解决生产者和消费者问题。假设有一个可以存放1件产品的缓冲器;有m个生产者,每个生产者每次生产一件产品放入缓冲器中,有n个消费者,每个消费者每次从缓冲器中取出一件产品。

解: 设信号量Sp表示是否可以把产品放入缓冲器中; 信号量Sg表示缓冲器中是否存放了产品;

buffer: integer; Sp,Sg: integer; Sp:=1; Sg:=0; Cobegin

Procedure produceri(i=1,2,3,?,m) Begin

L1: [ produce a product ];

P(Sp);

Buffer:=product ; V(Sg);

Goto L1 ; End;

Procedure consumerj(j=1,2,3,?,n)

L2: P(Sg);

[take a product from buffer ]; V(Sp); [consume]; Goto L2; End;

29.系统有输入机和行式打印机各一台,有两个进程都要使用它们,采用PV操作实现请求使用和归还释放后,还会产生死锁吗?若否,说明理由;若会产生死锁则给出一种防止死锁的方法。

系统有输入机和行式打印机各一台,有两个进程都要使用它们,采用PV操作实现请求使用和归还释放后,不会产生死锁。因为系统的输入机和行式打印机作为临界资源分别用两个信号量表示,初值为1,在需要使用它们时用P操作申请,在需要归还它们时用V操作释放,这样就保证了两个进程对输入机和行式打印机的互斥使用,可防止死锁的产生。

30.若系统有同类资源m个,被n个进程共享,问:当m>n和m≤n时每个进程最多可以请求多少个这类资源,使系统一定不会发生死锁?

若系统有同类资源m个,被n个进程共享,当m>n时,每个进程最多可以请求(m/n向上取整)个这类资源,使系统一定不会发生死锁。当m≤n时每个进程最多可以请求1个这类资源,使系统一定不会发生死锁

31.在公共汽车上,司机和售票员的工作流程如下图所示。为保证乘客的安全,司机和售票员应密切配合协调工作。请用PV操作来实现司机与售票员之间的同步。

司 机 ↓ 启动车辆 ↓ 正常行车 ↓ 到站停车

售票员 ↓ 售票 ↓ 开车门 ↓ 关车门

解:设 S1是否可以启动汽车; S2是否可以开车门; Var S1,S2: Semaphore; S1=0; S2=1; Cobegin {

Driver(); Busman(); }

Driver()