常見設備接口類型:
1、字符設備:鍵盤鼠標、串口
??????a.以字節為單位順序訪問
??????b.I/O命令通常使用文件訪問接口和語義
2、塊設備:磁盤、磁帶、光驅
??????a.均勻的數據塊訪問
??????b.I/O命令通常使用文件系統接口,也可以使用內存映射訪問
3、網絡設備:以太網、無線、藍牙
??????a.格式化的報文交換
??????b.I/O網絡報文,通過網絡接口支持多種網絡協議。
同步與異步I/O:
1、阻塞I/O:發出請求后等待數據讀出或寫入完畢
2、非阻塞I/O:發出請求后不等待立即返回,返回值為成功傳輸的字節數
3、異步I/O:讀數據時,使用指針標記好用戶緩沖區,立即返回,稍后內核將填充緩沖區并通知用戶;寫數據內核寫入完畢后通知用戶
I/O結構
北橋連高速設備,南橋連IO設備。
I/O數據傳輸
CPU與設備控制器的數據傳輸:
1、程序控制I/O:
??????a. 通過CPU的in/out或者load/store傳輸所有數據
??????b. 特點是硬件簡答,編程容易,但是小伙CPU時間,適用于簡單的小型的設備I/O
2、直接內存訪問(DMA)
??????a. 設備控制器可直接訪問系統總線
??????b. 控制器直接與內存湘湖傳輸數據
??????c. 特點是設備傳輸數據不影響CPU,只需要CPU參與設置,適用于高吞吐量的I/O。
I/O設備通知操作系統的機制:
1、CPU主動輪詢:
?????a. I/O設備在特定狀態寄存器中放置狀態和錯誤信息
?????b. 操作系統定期檢測狀態寄存器
?????c. 特點是簡單,I/O操作頻繁或不可預測時開銷較大,并且延時較大
2、設備中斷
?????a. CPU在I/O之前設置任務參數
?????b. CPU在發出I/O請求之后繼續執行其他任務
?????c. I/O設備處理I/O請求
?????d. I/O設備處理完成時,觸發CPU中斷請求
?????e. CPU接收中斷,分發到相應中斷處理例程
?????f. 特點是處理不可預測事件事件效果好,但是中斷較多時開銷較高
? ? ?g. 實際操作系統中一些高帶寬設備可能結合了輪詢和設備中斷,第一次傳入數據包之前采用中斷,輪詢后面的數據包知道硬件緩存為空。
磁盤調度
???????????通過優化磁盤訪問請求順序來提高磁盤訪問性能。
1、尋道時間是磁盤訪問最耗時的部分
2、同時會有多個在同一磁盤上的I/O請求
3、隨機處理磁盤訪問請求的性能表現很差
調度算法:
1、FIFO:按順序處理請求,公平對待所有進程,在有很多進程的情況下,接近隨機調度的性能
2、SSTF(最短服務時間優先):選擇離磁臂當前位置最近的請求執行
3、掃描算法:磁臂在一個方向上移動,訪問所有未完成的請求,直到磁臂到達該方向上最后的磁道,也稱電梯算法
4、循環掃描算法:限制為僅在一個方向上掃描,當最后一個磁道也被訪問過了后,磁臂返回到磁盤的另外一端再次進行
5、C-LOOK算法:磁臂先到達該方向上最后一個請求的位置,然后立即反轉
6、N步掃描算法:一側請求過多時,磁頭會有粘著現象,后面磁道無法響應,將磁盤請求隊列分成長度為N的子隊列,按FIFO算法依次處理所有隊列,掃描算法處理每個隊列
7、雙隊列掃描算法:只有兩個隊列,交替使用掃描算法處理兩個隊列,新生成的I/O請求放入另一個隊列中。
磁盤緩存
概念:
緩存是數據傳輸雙方訪問速度差異較大時引入的速度匹配中間層。
磁盤緩存是磁盤扇區在內存中的緩存區。類似于虛擬內存管理,只是方向相反。但是磁盤的訪問頻率是遠低于虛擬存儲中的內存訪問頻率,因此次磁盤緩存調度算法會比虛擬存儲復雜。
單緩存與雙緩存:
單緩存只有一個緩存區,任意時刻只有一端可以對緩存區進行操作,速度受到限制;雙緩存包含兩個緩存區,設備與用戶進程可以分別操作一個緩沖區,當一個緩沖區1寫完并且緩沖區2讀完了,可以將兩個緩沖區交換,繼續操作。
訪問頻率置換算法:
在一段密集磁盤訪問之后, LFU算法的引用計數會增加到很大,之后的變化無法反應當前的引用情況。因此該算法考慮磁盤訪問的密集特征,對密集引用不計數,在短周期內使用LRU算法,在長周期中使用LFU算法。
????????具體實現過程為,維護一個特殊棧(LRU的要求),棧中緩存塊被訪問時移到棧頂。與LRU不同是棧被分為三個區域:新區域、中間區域和舊區域。如果該塊在新區域中,引用計數不變,否則,引用計數加1,在舊區域中找計數最小的塊置換出去。這樣就將LRU與LFU結合在一起,并且避免了密集訪問的影響。