IO裝置在OS中的權衡

一嵩寒溪發表於2019-05-11

IO裝置是作業系統的中斷源之一,IO裝置包括磁碟,時鐘,中斷源,顯示器,按照資料傳送的基本單元分為塊裝置和字元裝置。本文從磁碟這一個IO裝置來歸納作業系統中IO裝置從硬體到軟體的工作方式。

硬體水平觀察(hardware-level observation)

關於所有的描述我都會給出一個具體的規格來說明。
磁碟IO與作業系統的交流是通過叫做介面卡或者裝置控制器的電子器件完成的,磁碟驅動程式對磁碟控制器進行程式設計。

磁碟是由多個柱面組成的機械裝置,如果你搜尋磁碟結構,每個圓片就是一個柱面。
柱面通常會被分成多個磁軌,每個磁軌被切分成多個扇區。以下給出的磁碟引數以WD 18300
中的為主。
———-WD 18300引數Start———–

引數 資料
每柱面磁軌數 12
每個磁軌扇區數 281
每個扇區位元組數 512
尋道時間 6 ms
RPM 10000
裝置控制器與裝置介面 SATA
ECC 海明碼
柱面數 10601
記憶體寫入方式 DMA

———-WD 18300引數End———–

裝置控制器通常以晶片或者PCI插槽形式出現,主要功能為將序列的位流轉換成位元組塊。
磁碟塊讀通常資料格式如下:

前導符(preamble) 4096bit ECC 校驗碼位
28 4096 12

前導符:14位柱面號,4位扇區號,9位扇區號,1位同步資訊
校驗碼:12位的校驗碼可以根據海明碼的生成方法計算得出。
現在我們已經瞭解了磁碟進入控制器前的封裝了!

磁碟控制器內部的優化:
磁碟壞塊重對映和資料快取記憶體是控制器需要做的一些必要的額外工作。資料快取記憶體消除了對匯流排時間上的精確要求,簡化了控制器設計,另一點是計算校驗和需要。

壞塊重對映是對磁碟的壞塊用磁碟格式化時備用塊代替。

DMA控制資料傳送(Direct Memory Access)

DMA創造的初衷是希望擺脫程式控制IO,即由CPU完成對資料傳送。這樣使用DMA完成資料傳送,
作業系統轉入程式排程,讓CPU完成其他的工作。但是DMA的傳送效率相比CPU控制下傳送效率要低。
因此,大批資料處理且CPU空閒可以選擇CPU進行傳送。

DMA的組成:
IO裝置中暫存器被分配唯一的地址,就像記憶體地址一樣,稱為IO埠,埠集合組成的地址空間稱為IO埠空間。CPU通過IO埠與裝置暫存器進行通訊。IO埠的地址我們選擇記憶體對映IO的方式。
DMA的暫存器分為三個:

地址暫存器:磁碟讀取的起始地址
計數暫存器:讀取的傳送單位數
控制暫存器:本暫存器的IO埠地址,傳送方向(IO W/R)傳送單位(字/位元組)

DMA工作方式:
1.CPU在上述DMA暫存器寫入資料
2.DMA向磁碟控制器中的暫存器中寫入請求位
(DMA通道的概念由此產生,每個不同的IO裝置都有這樣的一組暫存器,通過控制引數選擇裝置)
3.DMA在佔用匯流排不定期傳送資料
4.DMA計數暫存器為0,產生中斷,移交中斷控制器。

這就是IO中一個特例–磁碟IO中的基本過程,中斷是執行IO時的重要過程,我將在稍後的文章中整理。

相關文章