{
while(1) { . .
collect data in nextp; . .
wait(empty); wait(mutex); buffer(in)=nextp; in=(in+1) mod n; signal(mutex); signal(full); }
}//send obtain() {
while(1) {
wait(full); wait(mutex);
nextc:=buffer(out); out:=(out+1) mod n; signal(mutex); signal(empty);
culculate the data in nextc; }//while }//obtain
12 画图说明管程由哪几部分组成?为什么要引入条件变量?
答:管程由三部分组成:局部于管程的共享变量说明;对该数据结构进行操作的一组过程;
对局部于管程的数据设置初始值的语句.。(图见P80) 因为调用wait原语后,使进程等待的原因有多种,为了区别它们,引入了条件变量。 13 如何利用管程来解决生产者-消费者问题? (见P82)
14 什么是AND信号量?试利用AND信号量写出生产者-消费者问题的解法。
答:为解决并行所带来的死锁问题,在wait操作中引入AND条件,其基本思想是将进程在
整个运行过程中所需要的所有临界资源,一次性地全部分配给进程,用完后一次性释放。 解决生产者-消费者问题可描述如下: var mutex,empty,full: semaphore:=1,n,0; buffer: array[0,...,n-1] of item; in,out: integer:=0,0; begin parbegin
producer: begin repeat . .
produce an item in nextp; . .
wait(empty);
wait(s1,s2,s3,...,sn); //s1,s2,...,sn为执行生产者进程除empty外其余的条件 wait(mutex);
buffer(in):=nextp; in:=(in+1) mod n; signal(mutex); signal(full);
signal(s1,s2,s3,...,sn); until false; end
consumer: begin repeat wait(full);
wait(k1,k2,k3,...,kn); //k1,k2,...,kn为执行消费者进程除full外其余的条件 wait(mutex);
nextc:=buffer(out); out:=(out+1) mod n; signal(mutex); signal(empty);
signal(k1,k2,k3,...,kn); consume the item in nextc; until false; end parend end
15 在单处理机环境下,进程间有哪几种通信方式? 答:a. 共享存储器系统通信方式;
b. 消息传递系统通信方式; c. 管道通信方式.
16 试比较进程间的低级通信工具与高级通信工具。
答:用户用低级通信工具实现进程通信很不方便,因为其效率低,通信对用户不透明,所有
的操作都必须由程序员来实现。而高级通信工具则可弥补这些缺陷,用户可直接利用操作系统所提供的一组通信命令,高效地传送大量的数据。 17 消息队列通信机制应有哪几方面功能? 略
18 试比较消息队列与管道通信机制。
答:a. 所谓管道,是指用于连接一个读进程和一个写进程,以实现它们之间通信的共享文
件,又称pipe文件。管道通信是属于共享存储器系统的。
b. 消息队列通信机制属于消息传递系统通信机制,存在通信链路,有消息的格式,有若干缓冲队列,采用独特的发送原语和接收原语。 (详见P89-90)
第四章
1. 高级调度与低级调度的主要任务是什么?为什么要引入中级调度?
答:a. 作业调度又称宏观调度或高级调度,其主要任务是按一定的原则对外存上处于后备
状态的作业进行选择,给选中的作业分配内存,输入输出设备等必要的资源,并建立相应的进程,以使该作业的进程获得竞争处理机的权利。
b. 进程调度又称微观调度或低级调度,其主要任务是按照某种策略和方法选取一个处于就绪状态的进程,将处理机分配给它。
c. 为了提高内存利用率和系统吞吐量,引入了中级调度. 2. 在作业调度中需做出哪两个决定? 答:a. 接纳多少个作业;
b. 接纳哪些作业.
3. 在剥夺调度方式中,有哪些剥夺原则? 答:a. 时间片原则;
b. 优先权原则;
c. 短作业(进程)优先原则.
4. 在OS中引起进程调度的主要因素有哪些? (有待讨论)
5. 选择调度方式和调度算法时,应遵循的准则是什么?
答:a. 面向用户的准则有周转时间短,响应时间快,截止时间的保证,以及优先权准则。
b. 面向系统的准则有系统吞吐量高,处理机利用率好,各类资源的平衡利用。 6. 在批处理系统,分时系统和实时系统中,各采用哪几种进程(作业)调度算法? (有待讨论)
7. 为什么说多级反馈队列能较好地满足各种用户的需要?
答:a. 对于终端型作业用户,由于终端型作业用户所提交的作业,大都属于交互型作业,
系统只要能使这些作业(进程)在第一队列所规定的时间片内完成,便可使终端型作业用户都感到满意。
b. 对于短批处理作业用户,很短的批处理型作业如果仅在第一队列中执行一个时间片即可完成,便可获得与终端型作业一样的相应时间.对于稍长的作业,通常也只需在第二队列和第三队列中各执行一个时间片即可完成,其周转时间仍然很短。 c. 对于长批处理作业用户,用户也不必担心其作业长期得不到处理。 8. 在按时间片轮转调度算法中,在确定时间片的大小时,应考虑哪些因素? 答:a. 系统对相应时间的要求;
b. 就绪队列中进程的数目; c. 系统的处理能力。
9. 为实现实时调度,对实时系统提出了哪些要求? 答:a. 要提供必要的调度信息;
b. 在调度方式上要具体情况具体分析; c. 要具有快速响应外部中断的能力; d. 快速任务分派。
10 目前常用的调度方式和算法,能否应用到实时系统中?
答:a. 对于时间片轮转调度算法,是一种常用于分时系统的调度算法;
b. 对于非抢占式优先权调度算法,可用于要求不太严格的实时控制系统中;
c. 对于基于时钟中断抢占的优先权调度算法,有很好的响应效果,可用于大多数的实时系统中;
d. 对于立即抢占(Immediate Preemption)的优先权调度,要求操作系统具有快速响应外部时间的能力。
11 在多处理机系统中,比较有代表性的线程调度方式有哪几种? 答:a. 自调度方式;
b. 成组调度;
c. 专用处理机分配调度方式。 12 试比较自调度和成组调度?
答:a. 自调度方式是系统中有一个公共的线程或进程的就绪队列,所有的处理机在空闲时,
都可自己从该队列中取出一个进程或线程运行;
b. 成组调度是由系统将一组相关的进程或线程,同时分配到一组处理机上运行,进程或线程与处理机一一对应;
c. 在一般情况下,成组调度的性能优于自调度,因为自调度存在瓶颈,低效,线程切换频繁等问题,而成组调度可减少线程的切换和调度的开销,因而目前得到了广泛的认可。
13 在OS/2中采用哪种调度方式和调度算法?
答:在OS/2中采用的是抢占式调度方式,多优先级的抢占式调度算法。 14 何谓死锁?产生死锁的原因和必要条件是什么?
答:a. 死锁是指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将永
远不能再向前推进;
b. 产生死锁的原因有二,一是竞争资源,二是进程推进顺序非法;
c. 必要条件是: 互斥条件,请求和保持条件,不剥夺条件和环路等待条件。
15 在解决死锁问题的几个方法中,哪种方法最容易实现?哪种方法使资源的利用率最高? 答:a. 解决死锁可归纳为四种方法: 预防死锁,避免死锁,检测死锁和解除死锁;
b. 其中,预防死锁是最容易实现的; c. 避免死锁使资源的利用率最高。 16 请详细说明可通过哪些途径预防死锁?
答:a. 摈弃\请求和保持\条件,就是如果系统有足够的资源,便一次性地把进程所需的所有
资源分配给它;
b. 摈弃\不剥夺\条件,就是已经保持了资源的进程,当它提出新的资源请求而不能立即得到满足时,必须释放它已经保持的所有资源,待以后需要时再重新申请; c. 摈弃\环路等待\条件,就是将所有资源按类型排序标号,所有进程对资源的请求必须严格按序号递增的次序提出。
17 在银行家算法的例子中,如果P0发出的请求向量由Request0(0,2,0)改为Request0(0,1,0),问系统可否将资源分配给它? 可以。
首先,Request0(0,1,0)<=Need0(7,4,3), Request0(0,1,0)<=Available(2,3,0);
分配后可修改得一资源数据表(表略),进行安全性检查,可以找到一个安全序列{P1,P4,P3,P2,P0},或{P1,P4,P3,P0,P2},因此,系统是安全的,可以立即将资源分配给P0。
第五章
1. 可采用哪几种方式将程序装入内存?它们分别适用于何种场合?
答:a. 首先由编译程序将用户源代码编译成若干目标模块,再由链接程序将编译后形成的
目标模块和所需的库函数链接在一起,组成一个装入模块,再由装入程序将装入模块装入内存;
b. 装入模块的方式有: 绝对装入方式,可重定位方式和动态运行时装入方式; c. 绝对装入方式适用于单道程序环境下; d. 可重定位方式适用于多道程序环境下;
e. 动态运行时装入方式也适用于多道程序环境下。 2. 何谓静态链接及装入时动态链接和运行时的动态链接?
答:a. 静态链接是指事先进行链接形成一个完整的装入模块,以后不再拆开的链接方式;
b. 装入时动态链接是指目标模块在装入内存时,边装入边链接的链接方式; c. 运行时的动态链接是将某些目标模块的链接推迟到执行时才进行。 3. 在进行程序链接时,应完成哪些工作? 答:a. 对相对地址进行修改;
b. 变换外部调用符号.
4. 在动态分区分配方式中,可利用哪些分区分配算法? 答:a. 首次适应算法;
b. 循环首次适应算法; c. 最佳适应算法。
5. 在动态分区分配方式中,应如何将各空闲分区链接成空闲分区链?
答:应在每个分区的起始地址部分,设置一些用于控制分区分配的信息,以及用于链接各分
区的前向指针;在分区尾部则设置一后向指针,通过前,后向指针将所有的分区链接成一个双向链。
6. 为什么要引入动态重定位?如何实现?
答:a. 为了在程序执行过程中,每当访问指令或数据时,将要访问的程序或数据的逻辑地
址转换成物理地址,引入了动态重定位。
b. 可在系统中增加一个重定位寄存器,用它来装入(存放)程序在内存中的起始地址,程序在执行时,真正访问的内存地址是相对地址与重定位寄存器中的地址相加而形成的,从而实现动态重定位。
7. 试用类Pascal语言来描述首次适应算法进行内存分配的过程。 (略)
8. 在采用首次适应算法回收内存时,可能出现哪几种情况?应怎样处理这些情况?
答:a. 回收区与插入点的前一个分区相邻接,此时可将回收区与插入点的前一分区合并,
不再为回收分区分配新表项,而只修改前邻接分区的大小;
b. 回收分区与插入点的后一分区相邻接,此时合并两区,然后用回收区的首址作为新空闲区的首址,大小为两者之和;
c. 回收区同时与插入点的前后两个分区邻接,此时将三个分区合并,使用前邻接分区的首址,大小为三区之和,取消后邻接分区的表项;
d. 回收区没有邻接空闲分区,则应为回收区单独建立一个新表项,填写回收区的首址和大小,并根据其首址,插入到空闲链中的适当位置。 9. 在系统中引入对换后带有哪些好处?
答:能将内存中暂时不运行的进程或暂时不用的程序和数据,换到外存上,以腾出足够的内