操作系统综合练习 第 26 页 共 28 页
5.有人在读者写者问题,读者优先的解的基础上,增设一初值为1的信号量S,给出了对读者--写者均公平的解: Writer processes: Reader processes: while(1){ while(1){ P(S) P(S) P(r_w_w); P(mutex); … readcount++; writing is performed if (readcount == 1) P(r_w_w ); … V(mutex); V(r_w_w ); V(S) //假如将这一行放在读者进程的V(S) 最后一行 … } reading is performed … P(mutex); readcount--; if (readcount == 0) V(r_w_w ); V(mutex) // 最后一行 } 如果将读者进程中V(S)一行放在读者进程的最后,即将读者进程的V(S) 挪到并替换“// 最后一行”,结果如何?请从正确性、公平性和并发性三方面说明。
答:这是可以的,不会影响公平性。但这会影响读者的并发性,假定连续有多个读者到达而没有写者,将读者进程的signal(S) 放到最后一行会使读者不能同时读。将signal(S) 放在“reading is performed”之前,可尽早释放信号量S,使等待队列中的读者尽早的出队列,与其它读者并发进行读操作。
6. 桌上有一只空盘,只允许放一个水果,爸爸可向盘中放苹果或桔子,儿子只能吃桔子,女儿只能吃苹果,试用信号量和PV操作实现三者同步。
答:设3个信号量S=1,SO=0,SA=0,S表示盘子是否为空,SO表示盘中是否有桔子,SA表示盘中是否有苹果。
操作系统综合练习 第 27 页 共 28 页
Father: Son: Daughter: While(1){ While(1){ While(1){ P(S); P(SO); P(SA); 将水果放到盘中; 从盘中取桔子; 从盘中取苹果; If (放入的是桔子) V(S) V(S) V(SO) 吃桔子 吃苹果 Else V(SA) } } }
7. 有一个二维数组:int a[100][100]; 该矩阵按先行后列次序存储,在一个页式虚拟存储系统中,每页可以存放200个数组元素,采用LRU页面淘汰算法。
设该一个进程分配有3页内存空间(物理页架,或帧),其中第2、3页是数据区,第1页存放程序,假定程序已经在内存且不能被置换。 程序A: 程序B: for (i=0;i<100;i++) for (j=0;j<100;j++) for (j=0;j<100;j++) for (i=0;i<100;i++) a[i][j]=0; a[i][j]=0; (1)如果用程序A给数组赋值,大约会产生多少次缺页(page fault)?简单说明理由。 (2)如果用程序B给数组赋值,大约会产生多少次缺页(page fault)?简单说明理由。
[本题缺页次数统计只需一个估计数即可,不需很精确] 答:(1)约50多次。大约每两个i循环发生一次缺页。
(2)约5000次。在每1个j循环内,每2个i循环发生一次缺页。 9.假如你有一个初中文化程度的朋友,他只会使用计算机上网、文字
处理、游戏娱乐等功能,不懂得操作系统为何物,请你用200字
操作系统综合练习 第 28 页 共 28 页
左右跟他解释一下什么是操作系统,以及为什么操作系统能够做到可以使他能够同时进行计算机上网、文字处理、游戏娱乐等活动。
答:这是一道开放型的题目,按答案的合理性(2分)和通俗易懂(3
分)给分。
10.林纳斯设计Linux时也是大学生。假如让你为PC裸机设计一个全新的X操作系统内核,该内核不包括文件系统和设备管理系统,你应按先后次序完成哪几个最核心的程序?
答:这是一道开放型的题目,答案合理即可给分。参考答案:程序完成顺序可参考操作系统分层模型,先完成主要的中断处理程序、装入程序、再完成最基本的进程管理程序,如进程创建/撤消、CPU调度、信号量原语等。