文章目錄
- 1 設備管理概述
- 1.1 系統總線結構
- 1.2 設備控制器通用結構
- 1.3 I/O設備的模型
- 2 I/O端口
- 2.1 尋址方式
- 3 驅動程序
- 4 基本I/O控制方式
- 4.1 程序直接控制
- 4.2 中斷I/O方式
- 4.3 DMA方式
- 4.4 I/O通道控制方式
- 5 I/O管理中的重要思想
- 5.1 設備獨立性
- 5.2 SPOOLing技術
- 5.3 I/O軟件的多層模型
- 6 磁盤I/O
- 6.1 磁盤調度算法
- 6.1.1 先來先服務 FCFS
- 6.1.2 最短尋道時間優先 SSTF
- 6.1.3 掃描算法 電梯調度算法 SCAN
- 6.1.3 循環掃描 C-SCAN
- 6.1.4 N-Step-SCAN
- 6.1.5 FSCAN
- 6.2 其他磁盤I/O性能的改善
1 設備管理概述
1.1 系統總線結構
系統總線上傳輸的信息有——數據 地址 其他控制狀態定時信號
系統總線其實有幾類
如下圖 CPU總線 存儲器總線 和I/O總線
其中北橋芯片組把處理器和存儲器分成了兩個總線
南橋芯片連接在I/O總線上
I/O總線上連著眾多的I/O設備
當然I/O總線和I/O設備之間通過設備管理器進行連接控制
那么設備管理器的結構是怎樣的呢?
1.2 設備控制器通用結構
控制不同的外設需要不同的設備控制器,將系統總線和設備側的接口連在一起
1.3 I/O設備的模型
對于外部設備而言,他們的設備如下
2 I/O端口
I/O設備中非常重要的一部分就是外設寄存器(也叫做I/O端口,下文我們都叫做I/O端口了)(存儲著設備狀態,數據等)
控制需要了解外設寄存器值,讀取數據也是從相應的寄存器值讀取
I/O端口通常包括:控制寄存器、狀態寄存器和數據寄存器三大類
所以這里就牽扯出一個問題,CPU下達指令讀或寫某個I/O端口(寄存器),需要知道那個寄存器在哪里,也就是說寄存器的地址是什么,這就涉及到I/O端口的編址以及尋址
2.1 尋址方式
統一編址方式(內存映射方式)
與主存空間統一編址,主存單元和I/O端口在同一個地址空間
獨立編址方式(特殊I/O指令方式)
單獨編號,不和主存單元一起編,使成為一個獨立的I/O地址空間,例如Intel處理器
3 驅動程序
控制外設進行輸入輸出的底層I/O軟件是驅動程序,由設備生產商制作,包括 設備控制器中有哪些用戶可以訪問的寄存器、控制狀態寄存器的每一位的含義,通信協議等等
驅動程序通過訪問 I/O端口控制外設進行I/O
? 比如 讀取控制命令送到控制寄存器來啟動外設工作
? 讀取狀態寄存器了解外設和設備控制器的狀態
? 訪問數據緩沖寄存器進行數據的輸入和輸出
實現這種訪問操作是通過I/O操作完成的,他是一種特權指令
4 基本I/O控制方式
有如下四種
4.1 程序直接控制
? 程序查詢I/O方式
原理 由CPU負責直接控制I/O操作,不涉及中斷或DMA(Direct Memory Access)。
方法
計算機從外部設備讀取數據到存儲器,每次讀一個字的數據。對讀入的每個字, CPU 需要對外設狀態進行循環檢查,直到確定該字已經在I/0 控制器的數據寄存器中
優點 簡單、易于實現。
缺點
在程序直接控制方式中,由于CPU 的高速性和I/0設備的低速性,致使CPU 的絕大部分時間都處于等待I/0 設備完成數據I/0 的循環測試中,造成了CPU 資源的極大浪費。在該方式中, CPU 之所以要不斷地測試I/0 設備的狀態,就是因為在CPU 中未采用中斷機構,使I/0 設備無法向CPU報告它已完成了一個字符的輸入操作。
4.2 中斷I/O方式
? 中斷I/O方式
原理 設備在完成操作后發出中斷信號,通知CPU進行數據傳輸。
方法
中斷驅動方式的思想是,允許I/0 設備主動打斷CPU 的運行并請求服務,從而“解放"CPU, 使得其向I/0 控制器發送讀命令后可以繼續做其他有用的工作。
優點: 提高CPU利用率,減少了對CPU的占用。
缺點
中斷方式在一些情況下可以提高CPU利用率,但在一些情況下,字符式設備,其中斷頻率太高,來回切換的話也會耗費處理機較多時間
核心是因為什么?
是因為上面兩種方式都需要經過CPU處理?
什么叫經過CPU處理
是外設輸入數據流大概是這樣的: 【外圍設備->I/O控制器的數據寄存器->CPU寄存器->存儲器】,這就叫經過CPU,或者說傳輸數據的過程需要CPU的干預
于是引出了下面的DMA(直接在I/O設備和內存之間建立數據通路)
4.3 DMA方式
磁盤等高速外設設備所用的方式
原理
? 基本思想 在高速外設和主存間直接傳送數據
? 由專門硬件**(即DMA控制器)**控制總線進行傳輸,注意這里不是CPU了
方式
- 基本單位是數據塊(前面是一個字)。
- 所傳送的數據,是從設備直接送入內存的,或者相反。
- 僅在傳送一個或多個數據塊的開始和結束時,才需CPU 干預,整塊數據的傳送是在DMA控制器的控制下完成的。
優點 大大減輕了CPU的負擔,提高了數據傳輸速率。
**缺點 需要額外的硬件支持,復雜度較高。
如何進一步提高資源利用率呢?當然是請更牛逼的通道,將苦逼的CPU盡可能的從累活中解放出來。
4.4 I/O通道控制方式
原理 使用專門的I/O通道控制器,它獨立于CPU和主存儲器,負責管理多個設備的I/O操作
方式
I/0 通道是指專門負責輸入/輸出的處理機。I/O通道方式是DMA方式的發展,它可以進一步 減少CPU的干預,即把對一個數據塊的讀(或寫)為單位的干預,減少為對一組數據塊的讀(或寫)及有關控制和管理為單位的干預。同時,又可以實現CPU、通道和I/0 設備三者的并行操作,從而更有效地提高整個系統的資源利用率。
優點: 高度并行化的數據傳輸,減少了對CPU的占用。
缺點: 需要更復雜的硬件支持,成本較高。
5 I/O管理中的重要思想
5.1 設備獨立性
該思想旨在使應用程序與具體的I/O設備解耦,從而提高系統的靈活性、可移植性和可維護性。
5.2 SPOOLing技術
? 即外圍設備同時聯機操作,又稱作假脫機操作
什么是脫機I/O?
? 脫機I/O 目的是為了解決CPU和I/O速度不匹配的問題,輸入由一臺抵擋計算機做中介
什么是假脫機?
? 即模擬實現上面的脫機i/O
實現方法
? OS利用兩個進程分別模擬脫機I/O時外圍機的功能
? 其中一個進程負責將輸入設備的數據傳送到磁盤,另一個進程負責將數據從磁盤送到輸出設備
組成
? 1 輸入輸出井
? 2 預輸入進程和緩輸出進程
5.3 I/O軟件的多層模型
1 用戶進程層——執行I/O系統調用,對I/O數據進行格式化
2 獨立于設備的軟件——實現設備的命名,分配,數據的緩沖,設備的保護,提高下層的統一接口
3 設備驅動程序,與設備有關的代碼,向設備控制器發送命令,檢測設備的執行狀態
4 中斷處理程序,負責I/O完成時,喚醒設備驅動程序的進程,進行中斷處理
5 硬件層 實現物聯I/O操作
6 磁盤I/O
磁盤一般分為固定結構和移動頭磁盤兩大類
固定頭磁盤——每個盤面的每條磁道都有一個讀寫磁頭,固定頭磁盤各個磁頭可并行讀寫,成本高
移動頭磁道——每個盤面只有一個讀寫磁頭
6.1 磁盤調度算法
目標 使得磁盤平均尋道時間最短
6.1.1 先來先服務 FCFS
按請求訪問磁盤的先后次序進行調度
6.1.2 最短尋道時間優先 SSTF
選擇處理與當前磁頭距離最近的磁道請求,以減少尋道時間
6.1.3 掃描算法 電梯調度算法 SCAN
要求磁頭臂僅沿一個方向移動,并在途中滿足所有未完成的請求,直到最后一個磁道,再反方向
6.1.3 循環掃描 C-SCAN
要求磁頭臂僅沿一個方向移動,并在途中滿足所有未完成的請求,直到最后一個磁道,不反方向直接回到最后一個磁道,開始掃描
SSFT、SCAN、C-SCAN都存在“餓死現象”
即當一個或多個進程反復請求某個磁道I/O,壟斷了整個磁盤,其他磁道得不到訪問
6.1.4 N-Step-SCAN
將磁盤請求隊列分成若干個長度為N的子隊列
每一次SCAN處理一個子隊列
6.1.5 FSCAN
使用2個子隊列
當掃描開始時,所有請求都在一個子隊列,另一個子隊列為空,掃描過程中,所有新到的請求加入另一個子隊列中,使得新請求服務延遲老請求處理完后
6.2 其他磁盤I/O性能的改善
高速緩存
合理分配磁盤空間
把有可能順序訪問的放到一塊
提前讀,延遲寫,周期性的成簇寫回
例題
嘗試給出一種能夠滿足下列要求的I/O設備管理設計方案:
1 應用程序在訪問設備時候,不需要關心設備的物理特性
2 應用程序申請使用某類設備時,不需要指定具體的物理設備
3 應用程序可以通過文件系統訪問設備
設計方案:
為滿足上述要求,可以設計一個綜合管理系統,其設計思路如下:
1 采用分層的I/O軟件模型 多層處理,如用戶層,設備驅動程序等待。進行設備抽象,將不同類型的設備進行抽象,屏蔽設備的具體物理特性。通過設備抽象,應用程序可以以統一的方式訪問各種設備,而無需關心設備的底層實現。
2 設備分組:將相同類型的設備進行分組,并為每個設備組分配一個唯一的標識符。應用程序在申請使用某類設備時,只需指定設備組的標識符,而無需指定具體的物理設備。
3 權限控制:設計合適的權限控制機制,確保應用程序只能訪問其被授權的設備組和設備文件,以保護系統的安全性和數據的機密性。
數據結構
1 用類和結構定義抽象層,包括設備的通用屬性,操作方法,事件等
2 用哈希表或映射存儲設備組的標識符和相應的設備類型