《現代操做系統》精讀與思考筆記 第五章 輸入/輸出

  本系列博文是《現代操做系統(英文第三版)》(Modern Operating Systems,簡稱MOS)的閱讀筆記,定位是正文精要部分的摘錄理解和課後習題精解,所以不會事無鉅細的全面摘抄,僅僅根據我的狀況進行記錄和推薦。因爲是英文版,部份內容會使用英文原文。html

  課後習題的選擇標準:儘可能避免單純的概念考察(如:What is spooling?)或者簡單的數值計算,而是可以引發思考加深理解的題目。爲了保證解答的正確性,每道題都會附上原書解答,而中文部分會適當加入本身的看法。原書答案下載地址(需註冊)網絡

 

1.用代碼描述程序驅動I/O、中斷驅動I/O、DMA的I/O(P344~347)

情景:dom

  使用打印機打印一個字符串。ide

  打印機的接口是兩個寄存器:printer _data_ register用來存放下一個要打印的字符,printer _status_reg存放當前的狀態供讀取。oop

  因爲打印機的限制,一次只能打印這個字符串的一個字符。不考慮進程競爭,打印機獨佔使用。性能

  字符串必須先拷貝至內核空間,而後再打印。spa

 

(1)程序控制I/O

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)。操作系統

 

(2)中斷驅動I/O

//當使用打印的系統調用時執行的代碼
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( ); 

 

(3)DMA

//當使用打印的系統調用時執行的代碼
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是值得的。

 

2.爲什麼廠商宣傳與實際能使用的磁盤容量不符?這和不少緣由有關。(P377~378)

  • 一個容量爲200*109B的磁盤,多是按照200GB來進行銷售的;
  • (低級)格式化時,磁盤上一部份內容做爲前導碼(preamble)、一部分做爲糾錯碼(ECC)預留,其他纔可供存放用戶的數據,這部分容量可能只有170*109B;
  • 操做系統報告容量只有158GB,由於軟件將存儲器的1GB做爲230(1,073,741,824)B而不是109B處理。

  值得注意的是,kilo、mega、giga、tera(也即K、M、G、T)只有在存儲器和磁盤容量時才表明210、220、230、240

 

課後習題選

16.Compare RAID level 0 through 5 with respect to read performance, write per­ formance, space overhead, and reliability.

譯:

  比較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、三問沒有做答。

相關文章
相關標籤/搜索