- 在一个请求分页存储系统中,一个进程的页面走向为4,3,2,1,4,3,5,3,2,1,设分配给该进程的内存块数M=3,采用FIFO页面置换算法(每调进一个新页认为发生一次缺页中断)。求缺页中断次数以及缺页率。(12分)
过程4分 页框\页 | 4 | 3 | 2 | 1 | 4 | 3 | 5 | 3 | 2 | 1 |
1 | 4 | 4 | 4 | 1 | 1 | 1 | 5 | 5 | 5 | 5 |
2 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 2 | 2 | |
3 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 1 |
F √ √ √ √ √ √ √ √ √(每步1分)
缺页中断次数为F=9次,缺页率为f=90℅ (2分)
- 在一个文件缓冲系统中,为不同的读写需求建立了三种缓冲区(A、B、C),每种缓冲区的块数分别是10、6、8,每个进程在访问文件时,可以请求任意种类任意数量的缓冲区。将采用银行家算法来避免死锁。若系统中只有4个进程要使用缓冲区,当前每个进程使用缓冲区的情况如下表所示:(8分)
资源 进程 | Max | Need | Allocation |
A B C | A B C | A B C | |
P1 | 3 2 4 | 0 0 3 | 3 2 1 |
P2 | 9 3 5 | 7 2 5 | 2 1 0 |
P3 | 5 4 3 | 2 4 1 | 3 0 2 |
P4 | 2 2 4 | 0 1 0 | 2 1 4 |
1)请问当前状态是安全的吗?写出按照银行家算法计算的过程(建议用表格),给出分析结果。
2)现在进程P2再发出请求(A=0, B=2, C=0),请问是否可以满足该分配请求。
答:问题1)由已经分配的资源数可知,当前可用资源的数量为(0,2,1),即初始Work=(0,2,1),按照银行家算法可以得出如下的分配过程:(后两列每空0.5分)
资源 进程 | Max | Need | Allocation | Work+Allocation | Finish |
A B C | A B C | A B C | A B C | ||
P4 | 2 2 4 | 0 1 0 | 2 1 4 | 2 3 5 | True |
P1 | 3 2 4 | 0 0 3 | 3 2 1 | 5 5 6 | True |
P3 | 5 4 3 | 2 4 1 | 3 0 2 | 8 5 8 | True |
P2 | 9 3 5 | 7 2 5 | 2 1 0 | 10 6 8 | True |
从分析过程可知,存在一个安全序列(P4、P1、P3、P2),由此可知当前状态是安全的。(2分)
答:问题2)如果满足该请求,则剩余资源数为:(0,0, 1),按照银行家算法检查系统的安全性可知剩余资源数无法满足任意进程的需求,因此进入了不安全状态,所以本次请求不能满足。(2分)
进程 | Max | Need | Allocation |
A B C | A B C | A B C | |
P1 | 3 2 4 | 0 0 3 | 3 2 1 |
P2 | 9 3 5 | 7 0 5 | 2 3 0 |
P3 | 5 4 3 | 2 4 1 | 3 0 2 |
P4 | 2 2 4 | 0 1 0 | 2 1 4 |
- 存放在某个磁盘上的文件系统,对于采用混合索引分配方式,其FCB中共有13项地址项,第0~9个地址项为直接地址,第10个地址项为一次间接地址,第11个地址项为二次间接地址,第12个地址项为三次间接地址。如果每个盘块的大小为512字节,盘块号需要3个字节来描述,则每个盘块最多存放170个盘块地址:(10分)
(1) 该文件系统允许的最大长度是多少?
(2) 将文件的字节偏移量5000、15000、150000转换为物理块号和块内偏移量。
(3) 假设某文件的索引结点已在内存中,但其他信息均在外存,为了访问该文件中某个位置的内容,最多需要几次访问磁盘?
答:
(1)文件的最大长度为:
10+170+1702+1703=4942080块=2471040KB(2分)
(2)
5000/512得商9,余数为392。即逻辑块号为9,块内偏移为392。故可直接从该文件的FCB的第9个地址处得到物理盘块号,块内偏移为392。(2分)
15000/512得商为29,余数为152。即逻辑块号为29,块内偏移为152。由于10≤29<10+170,而29-10=19,故可从FCB的第10个地址项,即一次间址项中得到一次间址块;并从一次间址块的19项中获得对应的物理盘块号,块内偏移为152。(2分)
150000/512得商为292,余数为496。即逻辑块号为292,块内偏移为496。由于10+170≤292,故可从FCB的第11个地址项,即二次间址项中获得第1个一次间址块;并从该一次间址块的112项中获得对应的物理盘块号,块内偏移为496。(2分)
(3) 由于文件的索引结点已在内存,为了访问文件中的某个位置的内容,最少需要1次访问磁盘(即通过直接地址直接读文件盘块),最多需要4次访问磁盘(第一次是读三次间址块,第二次读二次间址块,第三次读一次间址块,第四次是读文件盘块)(2分)
四、编程题(共20分)
- 有一单车道隧道实施单向放行,隧道长度最多能容纳N辆车,在两边端口A和B各设置一个红绿灯控制车流。当隧道内车辆全部开出后,反方向车辆才能进入,否则会死锁。在无车时两边均为绿灯。假设每辆车到达隧道口时都会触发管理这2个红绿灯的控制器主机产生一个子进程,实现灯光控制管理。请使用信号量写出控制器程序(伪代码),能够避免隧道内死锁的发生。(20分)
mutex = 1 左右过洞公用信号量,
实现先来先过洞 leftmutex=rightmutex=1
从左往右过洞示意如下,从右往左基本和从左往右相同:
P(leftmutex);
If leftcount = 0 P(rightmutex)
Leftcount++;
V(leftmutex);
左至右过洞;
P(leftmutex);
Leftcount--;
If leftcount = 0 V(mutex);
V(leftmutex);