本系列博文是《现代操做系统(英文第三版)》(Modern Operating Systems,简称MOS)的阅读笔记,定位是正文精要部分的摘录理解和课后习题精解,所以不会事无巨细的全面摘抄,仅仅根据我的状况进行记录和推荐。因为是英文版,部份内容会使用英文原文。html
课后习题的选择标准:尽可能避免单纯的概念考察(如:What is spooling?)或者简单的数值计算,而是可以引发思考加深理解的题目。为了保证解答的正确性,每道题都会附上原书解答,而中文部分会适当加入本身的看法。原书答案下载地址(需注册)网络
情景:dom
使用打印机打印一个字符串。ide
打印机的接口是两个寄存器:printer _data_ register用来存放下一个要打印的字符,printer _status_reg存放当前的状态供读取。oop
因为打印机的限制,一次只能打印这个字符串的一个字符。不考虑进程竞争,打印机独占使用。性能
字符串必须先拷贝至内核空间,而后再打印。spa
copy_from_user(buffer, p, count); /* p is the kernel buffer */ for (i = 0; i <count; i++) { /* loop on every character */ while (*printer _status_reg != READY) ; /* loop until ready */ *printer _data_ register = p[i]; /* output one character */ } return_ to_ user();
这种行为方式也称轮询(poll)或忙等(busy waiting)。操作系统
//当使用打印的系统调用时执行的代码 copy_trom_user(buffer, p, count); enable_interrupts( ); while (*printer _status_ reg != READY)
; *printer _data_ register = p[0]; scheduler();
//打印机的中断服务例程,每次中断时执行 if (count== 0) { unblock_ user(); } else { *printer _data_ register= p[i]; count = count-1; i = i + 1; } acknowledge_interrupt( ); return_from_interrupt( );
//当使用打印的系统调用时执行的代码 copy_trom_user(buffer, p, count); set_up_DMA_controller( ); scheduler();
//打印机的中断服务例程,每次中断时执行 acknowledge_interrupt( ); unblock_ user(); return_from_interrupt( );
本质上,DMA是由DMA控制器完成的程序控制I/O,一些须要完成的工做没有体如今上门的代码中,须要特殊的硬件来完成,从而解放了CPU。3d
DMA每每比主CPU慢得多。若是DMA控制器不能彻底发挥I/O的速度,或者CPU在等待DMA中断时没有别的事要作,程序控制I/O和中断驱动I/O可能比DMA更好。code
大多数状况下使用DMA是值得的。
值得注意的是,kilo、mega、giga、tera(也即K、M、G、T)只有在存储器和磁盘容量时才表明210、220、230、240。
译:
比较0至5级RAID的读写性能、空间开销、可靠性。
Answer:
Read performance: RAID levels 0, 2, 3, 4, and 5 allow for parallel reads to service one read request. However, RAID level 1 further allows two read re-quests to simultaneously proceed. Write performance: All RAID levels provide similar write performance. Space overhead: There is no space overhead in level 0 and 100% overhead in level 1. With 32-bit data word and six parity drives, the space overhead is about 18.75% in level 2. For a 32-bit data word, the space overhead in level 3 is about 3.13%. Finally, assuming 33 drives in levels 4 and 5, the space overhead is 3.13% in them. Reliability: There is no reliability support in level 0. All other RAID levels can survive one disk crash. In addition, in levels 3, 4 and 5, a single random bit error in a word can be detected, while in level 2, a single random bit error in a word can be detected and corrected.
分析:
先补上图5-20便于观察。
读效率,0、二、三、四、5级容许并行一次读取,而1级能够同步地进行两次读取;
写效率,全部RAID写效率是相同的;
空间开销:
0级没有额外空间开销;
1级使用100%(相较于有效数据)的开销;
32位字并使用6位进行奇偶校验的2级产生了18.75%的开销;
一样条件下3级使用了3.125%的开销。
注意到习题14分析了3级为何比2级开销小,缘由是3级须要知道哪台设备出现了故障来进行恢复,而2级不须要,可参考P365;
图中的4级和5级同3级同样都是3.125%,它们只是把单位由位变成了磁盘条带(strip)。
可靠性:
0级没有可靠性保证,发生崩溃时不能恢复数据。
1级只要有一个拷贝没有出错就能够彻底恢复。
三、四、5级均可以检测一位错误;
2级能够发现并纠正随机一位错误。
1.习题1的“Fig.1-5”并不对应于答案。不管是第一章图1-5仍是第五章前几个图,都不符合答案“ a controller with two devices”的描述。
2.习题8的“Fig.1-6(a)”应为“Fig.1-7(a)”。注意到若是不是这种流水线(最后一个stage才是execute unit),答案可能不一样。
3.习题12的答案,网络传输时间部分我计算的是1024/(10*106/8)=0.8192msec,计算过程当中没有舍入,而参考答案是0.83msec,怀疑有误。
4.习题32,60行每行80个字符,总字符数是4800而非“5280 characters,total”。此题计算过程当中的部分叙述彷佛不对,我没有理解,看书的时候第2、三问没有做答。