裝置管理
IO管理概述
接入I/O裝置的主要方式:匯流排。
![image-20240515100936955](https://cdn.jsdelivr.net/gh/maotougu/picture-for-Typore/typore_img/image-20240515100936955.png)
- 邏輯IO:完成裝置無關的操作,如裝置分配、裝置回收、資料準備等。
- 裝置驅動程式:負責對裝置控制器進行控制
- 中斷服務程式:裝置工作結束後負責向CPU中發中斷訊號,中斷服務程式完成相應處理。
IO裝置的分類:
按資料組織分類:
- 塊裝置:以資料塊為單位儲存、傳輸資訊。傳輸速率較高,可定址(隨機讀寫)
- 磁碟
- 字元裝置:以字元為單位儲存、傳輸資訊。傳輸速率低,不可定址
- 滑鼠、鍵盤
- 常採用中斷驅動的方式
按用途分類:
- 儲存裝置
- 傳輸裝置
- 人際互動裝置
從資源分配角度:
- 獨佔裝置
- 共享裝置
- 虛裝置
IO管理的目標:
- 按使用者請求,控制裝置操作,完成IO裝置與記憶體間的資料交換,最終完成使用者的IO請求。
- 建立方便、統一的獨立於裝置的介面
- 提高CPU與裝置、裝置與裝置之間的並行工作能力,充分利用資源
- 保護:保護傳輸的資料的安全性。
IO硬體組成
裝置控制器
功能:
- 接收和識別CPU命令
- 資料交換:CPU與控制器、控制器與裝置
- 裝置狀態的瞭解和報告
- 裝置地址識別
- 緩衝區
- 對裝置傳來的資料進行差錯檢測
組成:
- 控制器與CPU介面:資料暫存器、控制暫存器、狀態暫存器
- 控制器與裝置介面:資料訊號、控制訊號、狀態訊號
- IO邏輯:用於實現CPU對IO裝置的控制
IO埠地址
介面電路中,每個暫存器具有唯一的地址。
IO指令的形式與IO地址是相互關聯的:記憶體映像IO模式(記憶體映像編址)和IO獨立編址(IO專用指令)
-
記憶體對映IO的特點:
控制器的記憶體/暫存器作為實體記憶體空間的一部分。
優點:
- 不需要特殊的保護機制來組織使用者進行相應的IO操作,作業系統要避免把包含了控制暫存器的那部分地址空間放入使用者的虛擬地址空間中
- 可以引用記憶體的每一條指令 都適用於引用控制暫存器
缺點:
- 不能透過快取記憶體。
-
IO獨立編址的特點:
Intel體系架構in/out指令。
優點:
- 外設不佔用記憶體空間
- 程式設計時易於區分是對記憶體操作還是對IO操作。
缺點:
- IO埠操作的指令型別少,操作不靈活
IO控制方式
IO控制技術有:
- 程式控制IO
- 中斷驅動方式
- 直接儲存訪問DMA
- 通道技術
以上從上往下,越來越高效(CPU被打斷少),但硬體代價越來越高。
程式控制IO(輪詢方式)
![image-20240515103059584](https://cdn.jsdelivr.net/gh/maotougu/picture-for-Typore/typore_img/image-20240515103059584.png)
- CPU提出一個讀資料的請求,IO裝置啟動,狀態為未就緒;資料準備好後狀態修改為就緒。
- 裝置驅動程式檢查裝置的狀態
- 如果狀態正常,就給裝置發出相應的控制命令
- 不斷去測試這個裝置是否完成了這次執行過程,實際上就是一個輪詢
- 裝置控制器完成操作,把資料送給CPU,再傳入記憶體
- 應用程式繼續進行相應的處理。
![image-20240515103343293](https://cdn.jsdelivr.net/gh/maotougu/picture-for-Typore/typore_img/image-20240515103343293.png)
-
這種方式CPU的干預頻率很高,CPU效率低
-
實現簡單
-
資料傳送單位:字
-
資料流向:IO——CPU暫存器——記憶體
(讀操作從左到右;寫操作相反)
中斷驅動方式
![image-20240515103418755](https://cdn.jsdelivr.net/gh/maotougu/picture-for-Typore/typore_img/image-20240515103418755.png)
-
使用者程式提出IO請求
-
設別驅動程式檢查裝置的狀態
-
如果裝置已經準備好,那麼就向裝置發出控制命令
-
將狀態記錄在裝置狀態表中,CPU繼續其他工作
-
裝置完成工作後向CPU發中斷訊號,轉入中斷處理程式
-
中斷處理程式在確定正確完成任務後,把結果提交給裝置管理程式
完成後,由裝置控制器主動通知裝置驅動程式,而不是讓裝置驅動程式不斷詢問。
-
裝置管理程式從裝置狀態表中查詢是哪一個請求的完成
-
把相應的資料送到應用程式
-
通知應用程式可以繼續執行
- 優點:提高了CPU利用率,可以處理不確定事件。
- 缺點:每次輸入/輸出一個字資料都要中斷CPU,多次中斷浪費CPU時間,只適於資料傳輸率較低的裝置。
- 資料傳送單位:每次讀/寫一個字
直接儲存訪問方式(DMA)
主要用於對塊裝置的控制。
- 由程式設定DMA控制器中的若干暫存器值(記憶體始址,傳送位元組數等),然後發起IO操作。
- DMA控制器完成記憶體與外設的成批資料交換
- 在操作完成時DMA控制器向CPU發出中斷。
- 資料的流向不再經過CPU,CPU只需在IO操作的開始和結束時干預,適用於高速裝置。
- 讀寫單位比那位一個或多個塊(PS:多個塊在讀入和寫出後必須連續)
- 每個裝置佔用一個DMA控制器,當裝置增加時,需要增加新的DMA控制器。
IO通道控制方式
通道:一種硬體,可以識別並執行一系列通道指令。
- CPU向通道發出IO指令,指明通道程式在記憶體中的位置,並指明要操作哪個IO裝置(提供了一個任務清單)。
- 通道執行記憶體中的通道程式。
- 通道執行完任務後,向CPU發出中斷訊號。
特點:
- 通道的程式放在主機記憶體中,即通道與CPU共享記憶體。
- 每次可以讀/寫一組資料塊
- 資源利用率很高,但需要特殊的通道硬體支援。
- 相比DMA,通道有自己的指令和程式,有更強的獨立處理IO的功能;一個通道可以同時控制多種裝置。
IO軟體組成
分層設計思想:把IO軟體組織稱多個層次。
![image-20240515105428244](https://cdn.jsdelivr.net/gh/maotougu/picture-for-Typore/typore_img/image-20240515105428244.png)
裝置獨立性軟體
即裝置無關性軟體。
主要實現的功能:
-
對上層提供介面
-
裝置的保護(類似檔案保護)
-
IO排程、分配與回收管理、緩衝區管理
-
建立邏輯裝置名到物理裝置名的對映關係,根據裝置型別選擇呼叫相應的驅動程式。
透過邏輯裝置表LUT來記錄對映關係以及找到對應的驅動程式。
管理LUT的方式:
- 整個系統只設定一張LUT,只適合單使用者作業系統
- 為每個使用者設定一張LUT,各個使用者使用的邏輯裝置名可以重複,適用多使用者作業系統。LUT存放在使用者管理程序的PCB中。
實現裝置獨立性後帶來的好處:
- 裝置分配時的靈活性:同類裝置共同參與分配
- 易於實現IO重定向:用於IO操作的裝置可以更換,而不用改變應用程式。
裝置驅動程式
主要負責對硬體裝置的具體控制,將上層發出的一系列命令轉化為特定裝置的一系列操作。
每個裝置驅動程式處理一種裝置型別。
包括設定裝置暫存器、檢查裝置狀態、釋放命令、監督執行等。
特點:
- IO程序與裝置控制器之間的通訊程式
- 驅動程式與IO裝置的特性、IO控制方式緊密相關
- 與硬體緊密相關
工作列表 | 對應層次 |
---|---|
使用者程序請求列印一個輸出檔案 | 使用者層 |
將一維磁碟塊號轉換為三維實體地址(柱面、磁軌和扇區) | 裝置驅動程式 |
獲得裝置驅動程式的入口地址 | 裝置獨立性軟體 |
將終端輸入的字元轉換為ASCⅡ碼 | 裝置獨立性軟體 |
裝置驅動程序被喚醒 | 中斷處理程式 |
向裝置暫存器寫命令 | 裝置驅動程式 |
檢查使用者是否有權使用裝置 | 裝置獨立性軟體 |
將二進位制整數轉化成ASCⅡ碼以便列印 | 使用者層 |
維護一個最近使用塊的快取 | 裝置獨立性軟體 |
IO緩衝管理
緩衝技術可以提高外設利用率。在裝置無關軟體實現。
緩衝區在記憶體中。
單緩衝:一個緩衝區
緩衝區資料非空時,不能往其中衝入資料;緩衝區為空時,可以往緩衝區衝入資料,但必須在緩衝區充滿後,才能把資料傳出。(預設一個緩衝區大小就是一塊)
其中T和C可以並行。
所以單塊資料的平均處理時間:M+max(T,C)。
雙緩衝:兩個緩衝區
如果C<T,則塊裝置可以連續輸入;
T<C,則CPU可以連續處理。
單塊資料平均處理時間:Max(C,T)
注意王道版平均耗時:Max(T,C+M)
下圖基於T>C+M的情況。
![image-20240602205927593](https://cdn.jsdelivr.net/gh/maotougu/picture-for-Typore/typore_img/image-20240602205927593.png)
環形緩衝
CPU與外設的處理速度差過大,雙緩衝效果不夠理想,引入多緩衝機制,可以將多個緩衝區組織成迴圈緩衝形式。
組成如下:
- 空緩衝區R,和指向下一次可用的空緩衝區的指標Nexti;
- 已裝滿緩衝區G,和指向計算程序下一次可用的G緩衝區的Nextg;
- 正在使用的工作緩衝區C,和指標Current。
緩衝池
包括三種型別的緩衝區(佇列):
- 空緩衝區
- 裝滿輸入資料的緩衝區
- 裝滿輸出資料的緩衝區
IO裝置管理
外設資源有限,在分配外設上有兩種常見的做法:
- 程序間交替使用外設,如滑鼠和鍵盤
- 透過一個虛擬裝置把外設和應用程序隔開
需要的資料結構
-
裝置控制表DCT:用於記錄裝置的使用情況
-
控制器控制表COCT:每個裝置控制器都會對應一張COCT。
-
通道控制表CHCT:每個通道對應一張CHCT。
-
系統裝置表SDT:記錄了系統中全部裝置的情況,每個裝置對應一個表目。
裝置分配過程
- 分配裝置:根據程序請求分配時提供的物理裝置名查SDT,找到對應的裝置控制器表DCT
- 分配裝置控制器:在DCT中找相應的控制器控制表COCT
- 分配通道:從COCT中找到對應的CHCT。
SPOOLing技術
假離線技術,使用軟體的方式模擬離線技術,在使用者層軟體實現。
在多道程式系統中,專門利用一道程式來完成對裝置的IO操作,無需使用外圍IO處理機。
系統由三部分組成:
- 輸入井和輸出井:模擬離線輸入/輸出時的磁碟,在磁碟上。輸入井暫存IO裝置輸入的資料,輸出井暫存使用者程式和輸出資料。
- 輸入緩衝區和輸出緩衝區:在記憶體中。緩和CPU和磁碟之間速度不匹配。
- 輸入程序SPi和輸出程序SPo:利用兩個程序來模擬離線IO時的外圍控制機。
輸入裝置—>輸入緩衝區—>輸入井—>記憶體
記憶體—>輸出井—>輸出緩衝區—>輸出裝置
特點:
-
高速虛擬IO操作
-
實現對獨享裝置的共享:由SPOOLing程式提供虛擬裝置(把一臺物理裝置虛擬成多臺虛擬裝置),可以對獨享裝置依次共享使用。
採用SPOOLing技術實現的共享裝置,在同一時刻可以讓多個程序使用它進行I/O。( F )