本系列博文是《現代操做系統(英文第三版)》(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、三問沒有做答。