waitint=waiting+1;将等待理发的顾客数加1
signal(customers);如果需要,唤醒理发师
signal(mutex);释放waiting的访问权
wait(barbers);如果空闲理发师为0则进入睡眠状态
get_hair();就座并接受理发服务
}else{
Signal(mutex);理发店已满;不等待
}
第八章死锁
8.1列出三个与计算机系统环境相关的死锁的例子。
答:
(1)两辆汽车从相反方向通过一座单行的桥梁;
(2)一人想爬上梯子而另一人想从梯子上下来;
(3)两列火车企图在同一轨道上相向而行。
8.2死锁是否可能只涉及一个进程?
为什么?
答:
不可能。
这违反了占有并等待条件。
8.9假设有一个系统有m个资源被n个进程共享,进程每次只请求和释放一个资源。
证明只要系统符合下面两个条件,就不会发生死锁:
a.每个进程需要资源的最大值在1到m之间。
b.所有进程需要资源的最大值的和小于m+n。
答:
假设进程i需要的最大值为Max(i),已分配的资源实例数为Alloc(i),还需要资源数为Need(i)。
则
假设系统中存在死锁,则
根据a可得:
根据c可得:
因此得到:
可以得出至少存在一个进程Pi,其Need(i)=0,因为Max(i)³1,因此该进程能正常运行结束并释放一个资源,死锁也就不会发生。
8.13
答:
(1)Need矩阵内容分别为:
(0,0,0,0);(0,7,5,0);(1,0,0,2);(0,0,2,0);(0,6,4,2)
(2)该系统处于安全状态。
(3)P1请求为(0,4,2,0),此时Available为(1,1,0,0),该请求能立刻被满足。
第九章内存管理
9.2说明内部碎片与外部碎片的区别。
答:
内部碎片是指在一个分区或一个页内,但是没有被占有这个分区或页的进程使用的内存。
即分配给作业的存储空间中未被利用的部分,直到该作业完成并释放该分区或页时才能被使用。
而外部碎片是指系统中无法利用的小存储块,只要通过合理的移动使所有空闲空间合并成一整块便可分配给作业。
9.3描述下列分配算法:
首次适应、最佳适应、最差适应
答:
(1)首次适应:
搜索空闲内存列表分配第一个足够大小要求的空闲分区。
(2)搜索整个内存列表分配最小的足够大小要求的空闲分区。
(3)最差适应:
搜索整个内存列表分配最大的空闲分区。
9.5如果有内存划分100KB、500KB、200KB、300KB和600KB(按顺序),首次适应、最佳适应与最差适应算法各自将怎样放置大小分别为212KB、417KB、112KB和426KB(按顺序)的进程?
哪一种算法的内存利用率最高?
答:
(1)首次适应:
212K放在500K分区(剩余288K);417K放在600K分区;112K放在剩余的288K分区;而426K进程必须等待。
(2)最佳适应:
212K放在300K分区;417K放在500K分区;112K放在200K分区;426K放在600K分区。
(3)最差适应:
212K放在600K分区(剩余388K);417K放在500K分区;112K放在剩余388K分区;而426K进程必须等待。
从上可看出,最佳适应算法的内存利用率最高。
9.8假设一个有8个1024字页面的逻辑地址空间,映射到一个有32帧的物理内存。
问:
a.逻辑地址多少位?
b.物理地址多少位?
答:
逻辑地址13位;物理地址15位。
9.10假设一个将页表放在内存的分页系统。
a.如果一次内存访问用200ns,访问一页内存需要多少时间?
b.如果加入TLB,并且75%的页表引用发生在TLB,内存有效访问时间是多少?
(假设在TLB中寻找页表项占用零时间,如果页表项在其中)。
答:
a.访问一页内存需要200ns+200ns=400ns。
b.有效内存访问时间:
0.75200+0.25400=250ns。
9.16答:
a.0430逻辑地址的物理地址是:
219+430=649
b.110逻辑地址的物理地址是:
2300+10=2310
c.2500逻辑地址的长度越界,产生中断
d.3400逻辑地址的物理地址是:
1327+400=1727
e.4122逻辑地址的长度越界,产生中断
第十章虚拟内存
10.1在什么情况下出现页错误?
描述一下发生页错误时操作系统做了哪些动作?
答:
当进程试图访问那些尚未调入到内存的页时,对标记为无效的访问会产生页错误陷阱。
处理页错误的程序:
(1)操作系统检查进程的页表,以确定该引用是合法还是非法的地址访问;
(2)如果引用非法,那么终止进程。
如果引用有效但是尚未调入页面,那么现在应调入;
(3)找到一个空闲帧;
(4)调度一个磁盘操作,以便将所需要的页调入刚分配的帧;
(5)当磁盘读操作完成后,修改进程的内部表和页表,以表示该页已在内存中;
(6)重新开始因非法地址陷阱而中断的指令。
10.10
答:
由题目所给条件可知,数组A有100´100=10000个整数,系统中共有2个内存页用于存放数组信息,数组中的元素按行编址。
若每页存放200个整数,则一个内存页中可以存放2行数组元素,对于程序a,数组元素的访问顺序为:
A[0][0],A[0][1],¼,A[0][99]
A[1][0],A[1][1],¼,A[1][99]
¼
A[99][0],A[99][1],¼,A[99][99]
显然程序a对数组A的访问顺序与存储顺序一致,也是按行进行的。
因此程序a每访问2行数组元素都会产生一次缺页中断,则访问整个数组会产生100/2=50次缺页中断。
对于程序b,数组元素的访问顺序为:
A[0][0],A[1][0],¼,A[99][0]
A[0][1],A[1][1],¼,A[99][1]
¼
A[0][99],A[1][99],¼,A[99][99]
显然程序b对数组A的访问顺序与存储顺序不一致。
因此程序b每访问2个元素将产生一次缺页中断,则访问整个数组会产生10000/2=5000次缺页中断。
10.11
答:
算法
帧数
最近最少使用(LRU)
FIFO页置换
最优页置换
1
20
20
20
2
18
18
15
3
15
16
11
4
10
14
8
5
8
10
7
6
7
10
7
7
7
7
7
第十一章文件系统接口
11.1假设有一个文件系统,它里面的文件被删除后,当连接到该文件的链接依然存在时,文件的磁盘空间会再度被利用。
如果一个新的文件被创建在同一个存储区域或具有同样的绝对路径名,这会产生什么问题?
如何才能避免这些问题?
答:
假设F1是旧文件而F2是新文件,一个用户本来想访问F1而实际通过链接访问的却是F2。
这个问题可以通过确保在删除文件的同时删除连接到该文件的链接实现。
具体实现可通过以下几种方法:
(1)保留每个文件的链接列表,当文件被删除时搜索这些链接并删除它们。
(2)暂时保留链接指针,直到试图访问已删除的文件时删除它们。
(3)保留文件直到删除其所有引用为止。
11.2一些系统当一个用户注销或作业中止时会自动删除所有的用户文件,除非用户显式地要求文件被保留。
另外的系统保留所有的文件,除非用户显式删除它们,论述每种方法的相对优点。
答:
删除没有具体由用户保存的所有文件通过不保存不想要的或不必要的文件,因此具有最小化文件空间的优势。
保存所有文件除非显式删除它们这种方法对用户来说更安全,因为它们不可能因为忘了保存而无意中丢失了文件。