輸入輸出的目的:屏蔽輸入輸出設(shè)備的差異。在不同設(shè)計之間進行數(shù)據(jù)表示的轉(zhuǎn)換。
輸入輸出硬件:所有的輸入輸出設(shè)備可以(大概)劃分為兩個大類:塊設(shè)備和字符設(shè)備。這種劃分是以設(shè)備存儲和傳輸數(shù)據(jù)的方式來決定。塊設(shè)備,顧名思義,就是以數(shù)據(jù)塊為單位存儲和傳輸數(shù)據(jù)的輸入輸出設(shè)備,如磁盤、光盤、U盤、磁帶等。而字符設(shè)備自然是將數(shù)據(jù)按照字符(字節(jié))為單位來存放和傳輸?shù)脑O(shè)備,如鼠標(biāo)、鍵盤、打印機、網(wǎng)絡(luò)界面等(但是不是絕對,有些兩者都屬于)。
字符設(shè)備和塊設(shè)備的區(qū)別:字符設(shè)備和塊設(shè)備的最大不同表現(xiàn)在尋址上。塊設(shè)備的數(shù)據(jù)按數(shù)據(jù)塊為單位進行處理,而每個數(shù)據(jù)塊都有一個唯一的磁盤地址,也就是說數(shù)據(jù)塊是可尋址的。而字符設(shè)備里的字符是不可尋址的。
輸入輸出設(shè)備的結(jié)構(gòu):一個輸入輸出設(shè)備至少可以分為兩部分機械部分和電子部分。機械部分自然是設(shè)備的物理硬件部分,而電子部分則是設(shè)備的控制器。控制器有時也稱為適配器,通常為一塊印刷電路板??刂破骺梢蕴幚矶鄠€設(shè)備,或者說多個同類的設(shè)備可以共用一個控制器。
設(shè)備控制器的任務(wù)可以簡單地分為如下幾項:
- 控制設(shè)備的物理運行。
- 將序列字位流轉(zhuǎn)化為字節(jié)塊流。
- 進行糾錯操作。
直接內(nèi)存訪問(即Direct Memory Access,DMA):DMA的工作原理是,如果按數(shù)據(jù)塊進行I/O,即需要傳輸大量數(shù)據(jù)時,就無須CPU的介入。在這種情況下,我們可以讓I/O設(shè)備與計算機內(nèi)存進行直接數(shù)據(jù)交換。而CPU則可以去忙別的事情。這種將CPU的介入減少的I/O模式稱為直接內(nèi)存訪問(通過DMA管理輸出輸出)。
DMA輸入輸出的過程如下所示:
1)CPU對DMA進行設(shè)置,告訴其I/O的起始地址和數(shù)據(jù)長度。
2)啟動DMA過程。
3)DMA進行數(shù)據(jù)傳輸。
4)DMA結(jié)束后發(fā)出中斷。
5)CPU響應(yīng)中斷并處理結(jié)束事宜。
DMA模式的優(yōu)缺點:優(yōu)點就是將主CPU從I/O中解脫出來。而缺點自然是增加了成本和復(fù)雜性。而且,由于DMA需要與CPU競爭內(nèi)存總線,其效率的提高不如理論上的期望。因此,并不是任何I/O都應(yīng)該使用DMA。
I/O模式分類:從CPU的涉入程度來分,可以分為可編程I/O和中斷驅(qū)動I/O,這兩種分別對應(yīng)硬件原理的繁忙等待I/O和直接內(nèi)存訪問。
可編程I/O原理:在可編程模式下,CPU等待I/O的完成,即CPU涉入程度很深。這種模式也稱為輪詢或者繁忙等待。
中斷驅(qū)動I/O原理:中斷驅(qū)動就是將CPU從繁忙等待的繁瑣中解脫出來。在發(fā)送完一個或一批數(shù)據(jù)后,CPU就去忙別的事情。I/O設(shè)備處理完這批數(shù)據(jù)后,向CPU發(fā)出中斷。CPU響應(yīng)中斷后再發(fā)送下一批數(shù)據(jù)。
** I/O軟件分層**:
用戶層I/O軟件
設(shè)備獨立的操作系統(tǒng)軟件
設(shè)備驅(qū)動程序
中斷服務(wù)程序
中斷服務(wù)程序處理步驟:
1)保存沒有被中斷硬件保存的相關(guān)寄存器。
2)設(shè)置中斷服務(wù)程序的上下文。
3)設(shè)置中斷服務(wù)程序的棧。
4)回應(yīng)中斷控制器。
5)重開中斷。
6)從保存處恢復(fù)寄存器。
7)執(zhí)行服務(wù)程序。
8)設(shè)置MMU以執(zhí)行下一個進程。
9)設(shè)置新進程的寄存器。
10)開始執(zhí)行新進程。
設(shè)備驅(qū)動程序的功能:
從上層接收抽象的讀寫請求。
確保讀寫操作完成。
初始化設(shè)備,開關(guān)設(shè)備。
對設(shè)備的功能進行管理。