一、单选题(共20分,共10题,每题2 分)
1. 和早期的OS相比,采用微内核结构的OS具有许多优点,但是不包括( )。 B
A)提高了系统的可扩展性; B)提高了OS的运行效率
C)增强了系统的可靠性; D) 使OS的可移植性更好。
2. 用资源信号量实现5台刻录机的使用,信号量的初值应设为:( )B
A)0 B)5 C)-1 D)1
3. 下列进程调度算法中,(B )可能会出现进程长期得不到调度的情况。
A.非强占式静态优先权法 B.强占式静态优先权法
C.时间片轮转调度算法 D.非强占式动态优先权法
4. 下面对进程的描述中,错误的是【 D 】。
A、进程是动态的概念 B、进程的执行需要处理机
C、进程是有生命期的 D、进程是指令的集合
5. 在操作系统中,调度包括作业调度和进程调度。作业调度是将作业从( B )中调入内存?
A. 就绪队列 B. 后备队列
C. 就绪/挂起队列 D. 阻塞/挂起队列
6. 在引入快表的分页存储管理方式中,如果访问主存时间为100ns,访问快表时间为30ns,命中率为80%,则内存的有效访问时间为多少?( A )
A. 150 B. 130 C. 230 D.180
7. 在可变分区存储管理中,最坏适应算法要求对所有的空闲分区按( D )进行排列。
A. 地址从大到小 B. 地址从小到大
C. 容量从小到大 D. 容量从大到小
8. 实现虚拟存储器的理论基础是程序的(A )理论。
A、局部性 B、全局性 C、动态性 D、虚拟性
9. 在Unix操作系统中,文件描述信息采用()数据结构组织。
A)FILE B)i节点 C)打开描述符 D)文件控制块
10. 设文件系统采用两级索引分配方式,如果每个磁盘块的大小为1KB,每个盘块号占16B,则单个文件的最大长度是多少?( A )
A. 4MB B. 128MB
C. 16MB D. 64MB
二、判断题( 共10分,共10题,每题1 分)
( ╳ )1.实时控制系统的实时性与分时系统的及时性是有差异的,实时系统是以控制对象所要求的截至时间来确定的,一般为秒级到毫秒级。
( ╳ )2.在段页式管理中,既有段表又有页表,就不能再使用快表了。
( √ )3.在对目标模块进行链接时,静态链接需要共享目标模块的拷贝,而动态链接不需要共享目标模块的拷贝。
( ╳ )4. 在请求页式存储管理中,若所需页面不在内存中,则会引起时钟中断。
( √ )5.如果信号量S的当前值为-8, 则表示系统中共有8个等待进程。( T )
( ╳ )6.当发生线程切换时,涉及信息的保存和地址变化问题。 (F)
( ╳ )7.计算机系统产生死锁的根本原因是系统中进程太多。 ( F )
( √ )8.进程是程序的一次执行,是抢占处理机的调度单位。 (T )
引入缓冲技术的主要目的是提高CPU与设备之间的并行程度。(T )
( ╳ )9. 在请求页式存储管理中,若所需页面不在内存中,则会引起时钟中断。
( √ )10.设备的打开、关闭、读、写等操作是由设备驱动程序完成的。( T )
二、简答题(共20分)
1. 在设计设备分配算法时,分配算法的安全性是需要考虑的问题,请先描述死锁发生的必要条件,然后结合这些条件说明设备安全分配方式和不安全分配方式的情况。(共8分)
答:死锁发生的必要条件是:
1)互斥条件,进程对所分配到的资源进行排它性使用,即在一段时间内,某资源只能被一个进程占用。其次进程只能等待其释放资源后才能使用。(1分)
2)请求和保持条件:进程在已经保持了至少一个资源时在请求新资源,如果请求得不到满足,进程被阻塞但不释放已经保持的资源。(1分)
3)不可抢占条件:进程已获得的资源在未使用完前不能被抢占。(1分)
4)循环等待条件:在发生死锁时,必然存在一个进程-资源的循环链。(1分)
在分配设备时,安全分配方式是:每当进程发出I/O请求后便进入阻塞状态,直到其I/O操作完成时才被唤醒。这时,一旦进程已经获得某种设备后便阻塞,不能再请求任何资源,而在它阻塞时又不保持任何资源。因此,该方式摒弃了造成死锁的四个必要条件之一的“请求和保持”条件,故设备分配是安全的。(2分)
不安全分配方式指:进程在发出I/O请求后继续运行,需要时又发出第二个I/O请求、第三个I/O请求等。仅当进程所请求的设备已被另一个进程占用时才进入阻塞状态。这样,进程在保有已分配资源的情况下仍然继续请求资源,这就没能消除“请求和保持”条件。由于设备使用本身具有互斥要求,且在使用过程中不可抢占,因此可能产生循环等待从而出现死锁,显然该分配方式是不安全的。(2分)
2. 程序并发执行为何会失去封闭性和可再现性?(4分)
答: 共享资源、资源状态由多个程序更改,一个程序的运行将受到另一个程序运行的影响,失去封闭性;(2分)
计算结果受并发程序执行顺序的影响,也就是说在相同的起始条件下多次运行会产生不同结果,失去可再现性。(2分)
3. 什么是用户线程?什么是内核线程?(4分)
内核线程: (2分)
切换由内核控制,当线程进行切换的时候,由用户态转化为内核态。切换完毕要从内核态返回用户态.
用户线程指: (2分)
不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。
4. 在生产者—消费者问题中,能否将生产者进程的wait(empty)和wait(mutex)语句互换,为什么?(4分)
不能。(1分)
因为这样可能导致系统死锁。当系统中没有空缓冲时,生产者进程的wait(mutex)操作获取了缓冲队列的控制权,而wait(empty) 导致生产者进程阻塞,这时消费者进程也无法执行。(3分)
三、综合应用题(共30分)
1. 有一个具有两道作业的批处理系统,作业调度采用短作业优先的调度算法,进程调度采用以优 先数为基础的非抢占式调度算法。下表所列的作业优先数即为进程优先数,优先数越小优先级越高。(10分)
作业名 | 到达时间 | 估计运行时间 | 优先数 |
A | 10:00 | 30分 | 5 |
B | 10:20 | 20分 | 4 |
C | 10:30 | 40分 | 3 |
D | 10:50 | 10分 | 6 |
(1) 列出所有作业进入内存时间及结束时间;(每空1分,共计8分)
(2) 计算平均周转时间。(2分)
作业名 | 到达时间 | 运行时间 | 优先数 | 进入内存时间 | 结束时间 | 周转时间 |
A | 10:00 | 30分 | 5 | 10:00 | 10:30 | 30分钟 |
B | 10:20 | 20分 | 4 | 10:20 | 11:30 | 70分钟 |
C | 10:30 | 40分 | 3 | 10:30 | 11:10 | 40分钟 |
D | 10:50 | 10分 | 6 | 11:10 | 11:40 | 50分钟 |
平均周转时间=(30+70+40+50)/4=47.5分
2. 在一个页式虚拟存储管理的系统中,有一用户作业,它依次要访问的字地址序列是: 115,228,320,688,446,102,321,432,260,767, 479, 548若该作业的第0页已经已经装入主存,现分配给该作业的主存共400字,页的大小为100字,请回答下列问题: 按FIFO、LRU、OPT, NRU调度算法将分别产生多少次缺页中断,依次淘汰的页号为什么, 缺页中断率是多少?(10分)
答:(1)按FIFO调度算法将产生9次缺页中断 ;依次淘汰的页号为: 1,2,3,6,4; (1.5分)
缺页中断率为:9/12=75%(1分)
(2)按LRU调度算法将产生9次缺页中断;依次淘汰的页号为:1,2,6,1,3; (1.5分)
缺页中断率为:9/12=75%(1分)
(3) 按OPT调度算法将产生7次缺页中断;依次淘汰的页号为:6,1,3; (1.5分)
缺页中断率为:7/12=58.33%(1分)
(4) 按NRU调度算法将产生10次缺页中断;依次淘汰的页号为:1,2,6,4,1,3 (1.5分)
缺页中断率为:10/12=83.33%(1分)
3. 给出某系统中的进程请求表和空闲分区表,系统采用可变分区存储管理策略。请问:(10分)
(1)若采用首次适应算法和最佳适应算法来处理这些进程序列,哪一种算法可以满足该进程 序列的请求?
(2)给出按照能满足进程序列请求的算法进行分区分配后的空闲分区表。
【解析】(1)最佳适应算法可以满足所有进程的资源请求。(2分)
(2)分区分配后的空闲分区表如下:(每空1分,8分)
分区号 | 大小 | 起始地址 |
1 | 12K | 120K |
2 | 10K | 150K |
3 | 5K | 200K |
4 | 18K | 420K |
四、编程题(共20分)
1. 某寺庙,有小和尚、老和尚若干.庙内有一水缸,由小和尚提水入缸,供老和尚饮用。水缸可容纳8桶水,每次入水、取水仅为1桶,不可同时进行。水取自同一井中,水井径窄,每次只能容纳一个水桶取水。设水桶个数为5个,试用信号灯和PV操作给出老和尚和小和尚的活动。
答:
var mutex1,mutex2,empty,full,count:semaphore;
mutex1:=mutex2:=1;
empty:=8;
full:=0;
count:=5;
cobegin
Procedure Fetch_Water
begin
while true
P(empty);
P(count);
P(mutex1);
Get Water;
V(mutex1);
P(mutex2);
pure water into the jar;
V(mutex2);
V(count);
V(full);
end
Procedure Drink_Water
begin
while true
p(full);
p(count);
p(mutex2);
Get water and Drink water;
p(mutex2);
v(empty);
v(count);
end
coend