I/O設備
IO設備的類型
分為三類:人機交互類外部設備:打印機、顯示器、鼠標、鍵盤等等。這類設備數據交換速度相對較慢,通常是以字節為單位進行數據交換的
存儲設備:用於存儲程序和數據的設備,如磁盤、磁帶、光盤等。這類設備用於數據交換、速度較快。
網絡通信設備:用於與遠程設備通信的設備,如各種網絡接口、調制解調器、其速度介於兩者之間。
IO控制方式
程序控制I/O:處理器代表一個進程給io模塊發送一個io命令,該進程進入忙等待,直到操作完成
中斷驅動I/O:處理器代表進程向io發送命令,如果來自進程的io指令是非阻塞的,那么處理器繼續執行進程的后續指令。如果io指令時阻塞的,那么處理器執行來自操作系統的指令,將當前進程設置為阻塞態並且調度其他進程。
直接存儲器訪問(DMA):一個DMA模塊控制內存和io模塊之間的數據交換。為傳送一塊數據,處理器給DMA模塊發送請求,並且只有當整個數據塊傳送結束后,它才能被中斷。
DMA: 在io設備和內存之間開辟直接的數據交換通路,徹底解放CPU。有利於系統總線與存儲器進行雙向數據傳送。其基本單位是數據塊,整塊數據的傳送是在DMA控制器的控制下完成的,僅僅在傳送一個或多個數據塊的開始和結束的時候,才需要CPU干預。所傳送的數據,也是直接從設備送入內存的,反之相同。
操作系統的IO設計
在設計io機制的時候,兩個最重要的目標是效率和通用性。
本地外圍設備的組織:硬件->調度和控制->設備I/O->邏輯I/O->用戶進程
通信端口的組織:硬件->調度和控制->設備I/O->通信結構->用戶進程
文件系統的組織:硬件->調度和控制->設備I/O->物理組織->文件系統->目錄管理->用戶進程
邏輯IO:邏輯io模塊把設備當作一個邏輯資源來處理,它並不關心實際控制設備的細節。邏輯io模塊代表用戶進程管理的一般io功能,允許用戶進程根據設備標識符以及諸如打開、關閉、讀、寫之類的簡單命令與設備打交道。
設備IO:請求的操作和數據(緩沖的數據、記錄等)被轉換成適當的IO指令序列、通道命令和控制器命令。可以使用緩沖技術來提高利用率。
調度和控制:io操作的排隊、調度實際上發生在這一層,處理中斷、收集並報告io狀態。這一層是與io模塊和設備硬件真正發生交互的軟件層。
設備獨立性: 用戶在編程序時使用的設備與實際設備無關。一個程序獨立於分配給它的某類設備的具體設備,即在用戶程序中只需要指明IO使用的設備類型即可。 其優先包括:方便用戶編程、使程序運行不受具體機器環境的限制、便於程序移植。
I/O緩沖
使用緩沖的原因
- 緩和CPU與IO設備間速度不匹配的矛盾
- 減少對CPU的中斷頻率,放寬對CPU中斷響應時間的限制
- 解決基本數據單元大小不匹配的問題
- 提高CPU與IO設備之間的並行性
緩沖是用來平滑IO需求的峰值的一種技術,但是當進程的平均需求大於io設備的服務能力的時候,緩沖再多也不能讓io設備與這個進程一直並駕齊驅。但是在多道程序設計環境中,多種io活動和多種進程活動的時候,緩沖是提高系統效率和單個進程性能的一種方法。
緩沖
緩沖:在輸入請求發出前就開始執行輸入傳送,並且在輸出請求發出一段時間之后才開始執行輸出傳送。【預輸入,緩輸出】
面向塊的設備:將信息保存在塊中,塊的大小是固定的,傳送過程中一次傳送一塊。如磁盤和USB
面向流的設備:以字節流的方式輸入輸出數據,沒有塊結構。如終端、打印機、通信端口、鼠標等等。
單緩沖
當用戶進程發出IO請求的時候,操作系統給該操作分配一個位於內存中系統部分的緩沖區。
面向塊:輸入傳送的數據被放到系統緩沖區中,當傳送完成的時候,進程把該塊移到用戶空間,並立即請求另一塊。需要數據的設備或處理器從緩沖區中拿走數據。這樣能夠期望這塊數據最終會被使用。
最終用時為MAX(C,T)+M。(c:處理器處理時間,m:數據傳輸到用戶區的時間,t:輸入到緩沖區的時間。)
加速比為: (T+C)/(MAX(C,T)+M)
優勢在於能夠提高系統速度,並且操作系統可以進行進程交換。但是增加了操作系統的邏輯復雜度。交換邏輯也會受到影響。
面向流:每次傳送一行的方式或者每次傳送一個字節的方式使用。傳送行的方式輸入要掛起,輸出不用。傳送字節的方式采用生產者/消費者模型。
雙緩沖
也稱緩沖交換。給操作系統分配兩個系統緩沖區,在一個進程往一個緩沖區中傳送數據(取數據)的同時,操作系統清空(或者填充)另一個緩沖區。
它的執行時間是MAX(C,T),加速比是 (T+C)/MAX(C,T)。 如果C<=T,則有可能使得面向塊的設備全速運行,反之也能確保處理器的效率,不需要等待IO。因此性能能夠有所提高,但是復雜性也提升了。
面向流:每次傳送一行的io,用戶進程不需要為輸入輸出掛起程序。對於每次傳送一個字節的操作,雙緩沖並沒有特別的優勢。都采用生產者/消費者模型。
循環緩沖
如果該進程需要爆發式地執行大量的IO操作,僅僅有兩個緩沖是不夠的,在這種情況下,通常使用多於兩個的緩沖區的方案來緩解不足。當使用兩個以上的緩沖區的時候,這組緩沖區自身被當作循環緩沖區。
緩沖池
由多個系統公共的緩沖區組成,緩沖區按其使用情況可以形成三個隊列:空緩沖隊列、裝滿輸入數據的緩沖隊列和裝滿輸出數據的緩沖隊列。還包括了四個緩沖區:收容輸入數據、提取輸入數據、收容輸出數據、提取輸出數據的工作緩沖區。
當輸入程序需要輸入數據的時候,從空緩沖隊列對首使用一個空緩沖區,作為收容輸入的工作緩沖區,然后裝入數據,裝滿后再掛到輸入隊列隊尾。當計算程序需要輸入數據的時候,從輸入隊列取得一個緩沖區作為提取輸入工作緩沖區,計算進程從中提取數據,數據用完后再放入到空緩沖隊列。
磁盤調度
磁盤性能參數
尋道時間:磁頭定位到磁道所需要的時間
旋轉延遲:磁道定位之后,磁盤控制器開始等待,直到適當的扇區旋轉到磁頭處的時間。
存取時間:尋道時間+旋轉延遲,即達到讀或寫的位置所需要的時間。
傳輸時間:磁頭定位完成,磁頭通過下面旋轉的扇區,執行讀操作或寫操作所需要的時間。
總的存取時間=存取時間(尋道時間+旋轉延遲)+傳輸時間
計算:
磁盤調度策略
磁盤訪問產生性能差異的原因可以追溯到尋道時間。如果扇區訪問請求包括隨機選擇磁道,則性能就特別低。為提高性能,需要減少花費在尋道上的時間。
硬盤高速緩存
一個硬盤高速緩存是內存中為磁盤扇區設置的一個緩沖區,包含有磁盤中某些扇區的副本。當出現一個請求某一特定扇區的IO請求時,首先進行檢測,以確定該扇區是否在cache中。
主要考慮的問題有兩個:
- 緩存數據與用戶空間交換的問題:數據傳送、共享內存指針
- 置換策略:LRU LFU