裝置管理---裝置驅動程式、裝置無關性、緩衝區管理
一、裝置驅動程式
裝置驅動程式是I/O系統的高層與裝置控制器之間的通訊程式。其主要任務:
①接收上層軟體發來的抽象I/O要求,如read、write等命令;
②再把它轉化為具體要求,傳送給裝置控制器,啟動裝置去執行。
③反方向,它也將由裝置控制器發來的訊號,傳送給上層軟體。
-
驅動程式的功能
(1)接收由與裝置無關的軟體發來的命令和引數,並將命令中的抽象要求,轉換為與裝置相關的低層操作序列;
(2)檢查使用者I/O請求的合法性,瞭解I/O裝置的工作狀態,傳遞與I/O裝置操作有關的引數,設定裝置的工作方式;
(3)發出I/O命令,如果裝置空閒,便立即啟動I/O裝置,完成指定的I/O操作;如果裝置忙碌,則將請求者掛在裝置佇列上等待;
(4)及時響應由裝置控制器發來的中斷請求,並根據其中斷型別,呼叫相應的中斷處理程式進行處理。 -
裝置驅動程式的特點
(1)驅動程式是與裝置無關的軟體和裝置控制器之間通訊和轉換的程式。
(2)驅動程式與裝置控制器和I/O裝置的硬體特性,緊密相關。
(3)驅動程式與I/O裝置所採用的I/O控制方式緊密相關。
(4)由於驅動程式與硬體緊密相關,因而其中的一部分必須用匯編語言編寫。
(5)驅動程式應允許可重入,一個正在執行的驅動程式常會在一次呼叫完成前被再次呼叫。 -
裝置處理方式
(1)為每一類裝置設定一個程序,專門用於執行這類裝置的I/O操作。這種方式比較適合於較大的系統;
(2)在整個系統中設定一個I/O程序,專門用於執行系統中所有各類裝置的I/O操作。也可以設定一個輸入程序和一個輸出程序,分別處理系統中的輸入或輸出操作;
(3)不設定專門的裝置處理程序,而只為各類裝置設定相應的裝置驅動程式,供使用者或系統程序呼叫。這種方式目前用得較多。 -
驅動程式處理過程
一次I/O由“驅動程式+中斷程式”一塊處理完成 -
I/O控制方式
(1)程式I/O方式
(2)中斷驅動I/O方式
①CPU向相應的裝置控制器發出一條I/O命令
②然後立即返回繼續執行任務。
③裝置控制器按照命令的要求去控制指定I/O裝置。
④這時CPU與I/O裝置並行操作。
⑤I/O裝置輸入資料中,無需CPU干預,因而可使CPU與I/O裝置並行工作。從而提高了整個系統的資源利用率及吞吐量。
(3)直接儲存器訪問DMA(位元組—塊)
①特點:
a.資料傳輸的基本單位是資料塊;
b.所傳送的資料是從裝置直接送入記憶體的,或者直接從記憶體進裝置;不需要CPU操作。
c.CPU干預進一步減少:僅在傳送一個或多個數據塊的開始和結束時,才需CPU干預,整塊資料的傳送是在控制器的控制下完成的。===>DMA方式又是成百倍的減少了CPU對I/O的干預,進一步提高了CPU與I/O裝置的並行操作程度。
②DMA控制器中的暫存器
a.資料暫存器DR:暫存裝置到記憶體或從記憶體到裝置的資料。
b.記憶體地址暫存器MAR:它存放把資料從裝置傳送到記憶體的起始的目標地址或記憶體原地址。
c.資料計數器DC:存放本次CPU要讀或寫的字(節)數。
d.命令/狀態暫存器CR:用於接收從CPU發來的I/O命令或有關控制和狀態資訊。③DMA工作過程
(4)I/O通道控制方式(組織傳送的獨立)
CPU、通道和I/O裝置三者的並行操作,提高整系統資源利用率
宗旨:減少主機對I/O控制的干預,將CPU從繁雜的I/O控制事物中解脫出來。
二、與裝置無關的I/O軟體
裝置無關的軟體是I/O系統最高層軟體,但它和其下的裝置驅動程式之間的界限,將隨作業系統和裝置的不同而有所差異。
- 好處:
(1)裝置分配時的靈活性
(2)易於實現I/O重定向 - 所有裝置的公有操作:
(1)獨立裝置的分配與回收
(2)邏輯裝置對映為物理裝置
(3)裝置保護
(4)緩衝管理
(5)差錯控制
(6)控制方式 - 分配
I/O請求->裝置->控制器->通道
三、緩衝區管理
- I/O控制方式減少CPU對I/O的干預提高利用率;
- 緩衝則通過緩和CPU和I/O裝置速度不匹配矛盾,增加CPU和I/O裝置的並行性,提高利用率。
- 現代OS中,幾乎所有的I/O裝置與處理機交換資料時,都用了緩衝區。
-
引入緩衝區的主要原因:
(1)緩和CPU與I/O裝置間速度不匹配的矛盾。
(2)緩衝區資料成批傳入記憶體,也可進一步減少對CPU的中斷頻率
(3)最終目的:提高CPU和I/O裝置的並行性 -
使用緩衝區的方式:
裝置速度差距越大,緩衝區容量越大
(1)單緩衝、多緩衝
兩個緩衝區,CPU和外設不再針對一塊交替
可能實現連續處理無需等待對方。前提是CPU和外設對一塊資料的處理速度相近。
另外還可實現雙向通訊
(2)迴圈緩衝
為進一步協調速度差,可增加緩衝區數量,同時進行一定的多緩衝管理入和出的同步
利用率不高。緩衝區是專用緩衝。
(3)緩衝池(Buffer Pool)
在池中設定多個可供若干個程序共享的緩衝區。