1、1操作系统 第 2章 2-9. (1)xn时,每个进程最多可以请求 个该类资源nm当 m=n时,每个进程最多可以请求 1个该类资源当 mn时,每个进程最多可以请求(m+n-1)/n 个该类资源)3-15解答:这是进程之间的同步问题。M2、M3 和 M4必须在接收到 M1的消息后才能运行。同理,M6 必须在 M2和 M3之后运行,M7 必须在 M4,M5 之后运行,M8 必须在M3、M7 之后运行。如何保证呢?需设置相应的信号量来保证:S12,S13,S14,用来制约 M2、M3 和 M4的运行;S26,S36,用来制约 M6的运行;S47,S57,用来制约 M7的运行;S38,S78 用来制约
2、 M8的运行。各进程的制约关系描述如下。S12,S13,S14,S26,S36,S47,S57,S38,S78:semaphore;S12:=0;S13:=0;S14:=0;S26:=0;S36:=0;S47:=0;S57:=0;S38:=0;S78:=0;COBEGINPROCESS M1: PROCESS M2:BEGIN BEGINV(S12); P(S12);V(S13); V(S26);V(S14); ENDENDPROCESS M3: PROCESS M4:BEGIN BEGIN6P(S13); P(S14);V(S36); V(S47);V(S38); ENDENDPROCESS
3、 M5: PROCESS M6:BEGIN BEGINV(S57); P(S26);END P(S36);ENDPROCESS M7: PROCESS M8BEGIN BEGINP(S47); P(S38);P(S57); P(S78);V(S78); ENDENDCOEND3-16. 叉子是临界资源,在一段时间内只允许一个哲学家使用。一个信号量表示一把叉子,五个信号量构成信号量数组,这些信号量的初值为 1。int fork0=fork1=fork4=1;第 i个哲学家所执行的程序:do P(mutex);P(forki);P(fork(i+1)mod5);V(mutex);吃饭V(forki
4、);V(fork(i+1)mod5); while(1);3-17. (1)公平竞争(无写者时,读者仍遵循多个读者可以同时读)rmutex互斥共享 readcount; rwmutex读写互斥,写写互斥;读写进程在 z上排队。int rmutex=1,rwmutex=1,readcount=0;7reader:beginp(z); /读写进程在 z上排队。p(rmutex);if(readcount=0) then p(rwmutex);end if+readcount;v(rmutex);v(z); /无写者时,多个读者可以同时读.read data;p(rmutex);-readcount
5、;if(readcount=0 then v(rwmutex);end if;v(rmutex);endwriter:beginp(z); /读写进程在 z上排队。p(rwmutex);write data;v(rwmutex);v(z);end(2)写者优先int readcount,writecount;semaphore rmutex=1,wmutex=1,rwmutex=1,z=1,x=1;reader:/当来了一个写进程时,通过 p(x)禁止其后读进程读,直到写进程写完为止。while(1)p(z); /其他读进程在 z上排队p(x); /一个读进程与一个写进程在 x上竞争p(rmu
6、tex); /读进程互斥访问 readcount写z 读写写读读读写8+readcount;if(readcount=1) p(rwmutex); v(rmutex);v(x);v(z);read data; /临界区p(rmutex);-readcount;if(readcount=0) v(rwmutex);v(rmutex);Writer:while(1)p(wmutex); /写进程互斥访问 writecount+writecount;if(writecount=1) p(x); /一个写进程与一个读进程在 x上竞争v(wmutex);p(rwmutex); /其他写进程在 rwmut
7、ex上排队write data; /临界区v(rwmutex);p(wmutex);-writecount;if(writecount=0) v(x); /写进程都写完时,通过 v(x)允许读进程读v(wmutex);附加题:读者优先,规定仅允许 5个进程同时读,怎样修改程序?解:增加一个资源信号量 s,初值为 5。int s=5;Reader:beginrwmutexxz读读读读写读 写写9P(rmutex);readcount=readcount+1;if(readcount=1)then P(rwmutex);V(rmutex);P(s);read_file();V(s);P(rmute
8、x);readcount=readcount-1;if(readcount=0)then V(rwmutex);V(rmutex);endwriter:beginp(rwmutex);write data;v(rwmutex);end3-18int s1=0, s2=n;顾客进程:P(s2);V(s1);坐椅子等理发理发师进程:P(s1);给顾客理发V(s2)3-19 (2)和(4)会发生死锁。3-20P1/剩余 P2/剩余 P3/剩余 系统剩余1 3/5 72 2/4 53 4(不安全)4 5/3 35 2(不安全)6 (5+3)/0 0(8)107 4/3 48 (2+2)/2 29(1)
9、 P1占有 5个资源,剩余 3个资源请求。P2占有 2个资源,剩余 4个资源请求。P3占有 0个资源,剩余 7个资源请求。系统剩余 3个资源。(2)P1 的请求最先满足。进程完成序列:P1,P2,P3。3-21(1)最大需求矩阵: 分配矩阵: 剩余请求矩阵:Max = Allocation = Need = 剩余资源向量:Available=(1 5 0 2)(2)当前系统是安全的。判断系统是否安全,只要检查系统剩余资源向量能否对各进程的剩余请求向量找到一个进程完成序列,当按照这个序列为各进程分配资源时,各进程都能成功完成。若能找到,则系统是安全的,否则,为不安全。先找到 p0, 因为 p0已
10、满足最大资源请求,它可以完成,释放其占有的资源,使系统剩余资源向量为(1 5 1 4)之后,系统剩余资源向量(1 5 1 4) ,可满足进程 p2, 使 p2 可以完成,释放其占有的资源,使系统剩余资源向量为(2 8 6 8) 。之后无论选哪一个进程都可成功完成。故找到的进程完成序列可为:p0,p2,p4,p3,p1; 或 p0,p2,p3,p1,p4 等,故系统是安全的。(3)因系统剩余可用向量为(1502) ,p2 的剩余请求向量为(1002) ,即(1502)(1002) 。故,当 p2提出(1001)请求时,能满足。进程完成序列:p0,p2,p4,p3,p10 0 1 21 7 5 0
11、2 3 5 60 6 5 20 6 5 60 0 1 21 0 0 01 3 5 40 6 3 20 0 1 40 0 0 00 7 5 01 0 0 20 0 2 00 6 4 21112第 4 章 习题答案4-14 内存有如下顺序排列的空闲块:10K,40K,20K,18K,7K,9K,12K 和15K,有如下的请求序列:12K,10K,9K。(1)若采用首次适应法: 12K的请求:将分配 40K的空闲块, 40K变为剩余的(40-12)K=28K,空闲队列变为:10K,28K,20K,18K,7K,9K,12K 和 15K; 10K的请求:将分配 10K的空闲块,空闲队列变为:28K,2
12、0K,18K,7K,9K,12K 和 15K; 9K的请求:将分配 28K的空闲块,空闲队列变为:(28-9)=18K,20K,18K,7K,9K,12K 和 15K;(2)若采用最佳适应法: 12K的请求:将分配 12K的空闲块,空闲队列变为:10K,40K,20K,18K,7K,9K 和 15K; 10K的请求:将分配 10K的空闲块,空闲队列变为:40K,20K,18K,7K,9K,12K 和 15K; 9K的请求:将分配 9K的空闲块,空闲队列变为: 40K,20K,18K,7K, 12K和 15K;(3)若采用最坏适应法: 12K的请求,将分配 40K的空闲块,空闲队列变为:10K,
13、28K,20K,18K,7K,9K 和 15K; 10K的请求:将分配 28K的空闲块,空闲队列变为: 20K,18K,7K,9K,12K 和 15K; 9K的请求:将分配 20K的空闲块,空闲队列变为:10K,18K,11K, 18K,7K, 12K 和 15K。4-15 有如下图所示的页表中的虚地址与物理地址之间的关系,即该进程分得 6个内存块。页的大小为 4096。给出对应下面虚地址的物理地址:(1)20; (2) 5100; (3) 8300; (4) 47000.0 1 2 3 4 5 6 72 1 6 0 4 3 x x解:(1)虚地址 20 变为页号 0 和页内偏移 20由页号查
14、页表得 0页对应内存块号为 2 ,可计算得物理地址=块号*页的大小+页内偏移=2*4096+20=8212(2)虚地址 5100 变为页号 1 和页内偏移 1004(5100/4096)13由页号查页表得 1页对应内存块号为 1 ,可计算得物理地址=块号*页的大小+页内偏移=1*4096+1004=5100(3)虚地址 8300 变为页号 2 和页内偏移 108由页号查页表得 2页对应内存块号为 6 ,可计算得物理地址=块号*页的大小+页内偏移=6*4096+108=24684(4)虚地址 47000 变为页号 11 和页内偏移 1944117 页号越界4-16 一个作业在执行过程中,按如下顺
15、序依次访问各页,作业分得四个主存块,问分别采用 FIFO、LRU 和 OPT算法时,要产生多少次缺页中断?设进程开始运行时,主存没有页面。页访问串顺序为:0 1 7 2 3 2 7 1 0 3 2 5 1 7(1)FIFO0 1 7 2 3 2 7 1 0 3 2 5 1 7采用 FIFO淘汰算法,产生 9次缺页中断。(2)LRU0 1 7 2 3 2 7 1 0 3 2 5 1 7采用 LRU算法时,产生 11次缺页中断。4-17 考虑如图所示的段表,给出如下所示的逻辑地址所对应的物理地址。0 1 7 2 3 3 3 3 0 0 0 5 1 70 1 7 2 2 2 2 3 3 3 0 5
16、10 1 7 7 7 7 2 2 2 3 0 50 1 1 1 1 7 7 7 2 3 0F F F F F S S S F S S F F F 0 1 7 2 3 2 7 1 0 3 2 5 1 70 1 7 2 3 2 7 1 0 3 2 5 10 1 7 7 3 2 7 1 0 3 2 50 1 1 1 3 2 7 1 0 3 2F F F F F S S S F F F F F F14段始址 段的长度219 6002300 1492 1001326 5801954 96(1)0,430 219+430=649(2)1,10 2300+10=2310(3)2,500 500100 段内地
17、址越界(4)3,400 1326+400=1726(5)4,112 11296 段内地址越界4-18 一台计算机含有 65536字节的存储空间,这一空间被分成许多长度为 4096字节的页。有一程序,其代码段为 32768字节,数据段为 16386字节,栈段为15870字节。试问该机器的主存空间适合这个作业吗?如果每页改成 512字节,适合吗?答:(1)存储空间每块为 4096个字节,共可分成 16块。程序代码段占 32768/4096=8块,数据段占 16386/4096=5块,栈段占15870/4096=4块,合计为 8+5+4=17块,故该机器的主存空间不适合这个作业。(2)当存储空间每块
18、为 512个字节,共可分成 128块。程序代码段占 32768/512=64块,数据段占 16386/512=33块,栈段占15870/512=31块,合计为 64+33+31=128块,故该机器的主存空间是适合这个作业的。4-19 逻辑地址中,用 9位表示页号,用 10位表示页内地址。4-20 (1)缺页中断 50次; 5000 次(2)缺页中断 100次; 10000 次4-21 0.9(0.751+0.258)+0.10(8+5000+8)+84-23 8192/4=204864=7+11+11+11+11+13 5级页表第 5章 文件系统5-9. 文件存贮空间管理可采用成组自由块链表或
19、位示图。若一磁盘有 B个盘块,其中有 F个自由块。若盘块号用 D位表示。试给出使用自由块链表比使用位示图15占用更少的空间的条件。当 D为 16时,给出满足条件的自由空间占整个空间的百分比。解:一磁盘有 B个盘块,用位图表示要使用 B位现有 F个自由块,若表示一个盘块需用 D位。则采用链表接连 F个盘块,需要F个链指针,共占 F*D位。使用自由块链表比使用位示图占用更少的空间的条件是 F*DB。当 D=16时,满足条件的自由空间占整个空间的百分比为F/B1/16=6.25%。5-10. 文件系统的执行速度依赖于缓冲池中找到盘块的比率。假设盘块从缓冲池读出用 1毫秒,从盘上读出用 40毫秒。从缓
20、冲池找到盘块的比率为 n,请给出一个公式计算读盘块的平均时间,并画出 n从 0到 1.0的函数图像。 解:读一个盘块的平均时间=n+40(1-n)=40-39n5-13. 1574/256=638, 因此,要访问文件的第 7个记录内的 38B处。每个块放两个记录,所要访问的字节处在第 4个逻辑块内,其对应的物理块号为 4,应访问 4号块内的第 38个字节。要访问 4次磁盘才能将该字节的内容读出。5-14共需要 4次磁盘操作5-151GB=2 30 ,16KB=2 14 , 230/214 =216 ,每个磁盘块号需要 2个字节表示,即 2B。 (1)10KB16KB, 所以,只占用 1个磁盘块
21、。(2)1089KB/16KB=69 需一个索引块和 69个数据块,共 70个盘块。(3)129MB/16KB=8256 , 16KB/2B=8K(个索引项)8256所以,需 2个一级索引表和一个 1个二级索引表,8256 个数据块。共需 8259个磁盘块。第 6章 设备管理4010 1n166-6下列工作各是在四层 I/O软件的哪一层上实现的?(1) 对于读磁盘,计算柱面、磁头和扇区 (设备驱动)(2) 维持最近所用块而设的高速缓冲 (独立于设备的软件层)(3) 向设备寄存器写命令 (设备驱动)(4) 查看是否允许用户使用设备 (独立于设备的软件层)(5) 为了打印,把二进制整数转换成 AS
22、CII码 (用户进程)6-13假设移动头磁盘有 200个磁道(从 0号到 199号)。目前正在处理 143号磁道上的请求,而刚刚处理结束的请求是 125号,如果下面给出的是按到达时间的先后排成的等待服务队列:86,147,91,177,94,150,102,75,130。那么,用下列各种磁盘调度算法来满足这些请求所需的总磁头移动量是多少?(1) FCFS:125 143-86-147-91-177-94-150-102-75-130满足这些请求所需的总磁头移动量=(143-86)+(147-86)+(147-91)+(177-91)+(177-94)+(150-94)+(150-102)+(1
23、02-75)+(130-75)=57+61+56+86+83+56+48+27+55=524(2) SSTF:125 143-147-150-130-102-94-91-86-75-177满足这些请求所需的总磁头移动量=(150-143)+(150-75)+(177-75)=7+75+102=182(3)SCAN:125 143-147-150-177-199-130-102-94-91-86-75满足这些请求所需的总磁头移动量= (199-143)+(199-75)=56+124=180(5)C-SCAN:125 143-147-150-177-199-0-75-86-91-94102 -130满足这些请求所需的总磁头移动量=(199-143)+(199-0)+(130-0)=56+199+130=385(4)C-LOOK:125 143-147-150-177-75-86-91-94-102-130满足这些请求所需的总磁头移动量=(177-143)+(177-75)+(130-75)=33+102+55=190