14.I/O系統

I/O系統

計算機的兩大任主要工作是處理和I/O。

計算機的操作系統I/O功能是,管理和控制I/O操作和I/O設備。

1.概述

因爲I/O設備的功能與速度差異很大,所以需要採用不同的方法來控制設備。
這些方法構成了I/O子系統,以便內核的其他部分不必涉及I/O設備管理的複雜性。

爲了封裝各種設備的細節與特點,操作系統內核採用設備驅動程序模塊,設備驅動程序(device driver)爲I/O子系統提供了統一的設備訪問接口,就像系統調用爲應用程序與操作系統之間提供的標準接口。

2.I/O硬件

儘管I/O設備的種類如此之多,但是僅需少數幾個概念,就能理解設備是如何連接以及軟件如何控制硬件。

端口:設備與計算機的通信通過一個連接點或端口
控制器:控制器是可以操作端口、總線或設備的一組電子器件。(如,串行端口控制器、SCSI總線控制器)。
I/O端口寄存器:I/O端口通常由四個寄存器組成,即狀態、控制、數據輸入、數據輸出寄存器

主機與控制器之間的交互可以有以下三種方式:

  1. 輪詢
  2. 中斷
  3. DMA(直接內存訪問)

每種設備都有自己的功能集、控制位的定義及與主機交互的協議,這些都是不同的。
如何設計操作系統,以便新的外設可以連接到計算機而不必重寫操作系統?
設備種類繁多,操作系統又是如何提供一個統一、方便的應用程序的I/O接口?

3.應用程序I/O接口

本節討論操作系統的架構與接口,以便按統一的方式來處理I/O設備。

涉及到抽象、封裝與軟件分層。
設備驅動程序一方面可以定製以適應各種設備,另一方面也提供一組標準接口。

在這裏插入圖片描述
設備驅動程序層的作用是,爲內核I/O子系統隱藏設備控制器之間的差異。

I/O子系統與硬件的分離簡化了操作系統開發人員的工作。
也有利於硬件製造商,它們可以設計新的硬件與現有主機控制器接口兼容,也可以編寫設備驅動程序已將新的硬件連到流行的操作系統。

這樣可以將新的外設連到計算機,而無需等待操作系統供應商來開發支持代碼。

4.內核I/O子系統

由於I/O設備種類繁多,功能和傳輸速率差異巨大,需要多種方法來進行設備控制。這些方法共同組成了操作系統內核的I/O子系統,它將內核的其他方面從繁重的I/O設備管理中解放出來。

I/O核心子系統提供的服務主要有I/O調度、緩衝與高速緩存、設備分配與回收、假脫機、設備保護和差錯處理等。

(1)I/O調度
應用程序執行系統調用的順序很少是最佳的。

I/O調度可以改善系統整體性能,減少I/O完成所需的平均等待時間。

就比如說現在磁盤的磁頭在磁盤的開始的位置,三個應用程序向這個磁盤發佈阻塞的讀調用,應用程序1需要磁盤結束部分的塊,應用程序2需要磁盤開始部分的塊,應用程序3需要磁盤中間部分的塊。操作系統如果按照2、3、1的順序進行處理,則可以降低磁頭所需要移動的距離。按照這種方式來重新排列服務順序就是I/O調度的核心。

操作系統爲每個設備維護一個請求等待隊列。當應用程序發出阻塞I/O的系統調用時,該請求被添加到相應設備的請求隊列。
I/O調度程序重新安排隊列順序,以便提高系統的總體效率和應用程序的平均響應時間。

I/O調度是I/O子系統提高計算機效率的一種方法。

(2)緩衝
緩衝區(buffer)是一塊內存區域,用於保存兩個設備之間或在設備與應用程序之間傳輸的數據。
緩衝區的 3 個作用:

  1. 處理數據流的生產者與消費者之間的速度不匹配。
  2. 協調傳輸大小不一數據的設備。
  3. 支持應用程序I/O的複製語義。

(3)緩存
緩存(cache)是保存數據副本的高速內存區域。

  1. CPU的Cache,它中文名稱是高速緩衝存儲器,讀寫速度很快,幾乎與CPU一樣。由於CPU的運算速度太快,內存的數據存取速度無法跟上CPU的速度,所以在cpu與內存間設置了cache爲cpu的數據快取區。當計算機執行程序時,數據與地址管理部件會預測可能要用到的數據和指令,並將這些數據和指令預先從內存中讀出送到Cache。一旦需要時,先檢查Cache,若有就從Cache中讀取,若無再訪問內存,現在的CPU還有一級cache,二級cache。簡單來說,Cache就是用來解決CPU與內存之間速度不匹配的問題,避免內存與輔助內存頻繁存取數據,這樣就提高了系統的執行效率。
  2. 磁盤也有cache,硬盤的cache作用就類似於CPU的cache,它解決了總線接口的高速需求和讀寫硬盤的矛盾以及對某些扇區的反覆讀取。

緩存和緩衝功能不同,但是有時一個內存區域可以用於兩個目的。

區別
Buffer的核心作用是用來緩衝,緩和衝擊。比如你每秒要寫100次硬盤,對系統衝擊很大,浪費了大量時間在忙着處理開始寫和結束寫這兩件事嘛。用個buffer暫存起來,變成每10秒寫一次硬盤,對系統的衝擊就很小,寫入效率高了,日子過得爽了。極大緩和了衝擊。

Cache的核心作用是加快取用的速度。比如你一個很複雜的計算做完了,下次還要用結果,就把結果放手邊一個好拿的地方存着,下次不用再算了。加快了數據取用的速度。

簡單來說就是buffer偏重於寫,而cache偏重於讀。
在這裏插入圖片描述
(4)假脫機[ spool ]與設備預留
假脫機(spool)是保存設備輸出的緩衝區。這些設備,如打印機,不能接收交叉的數據流。是操作系統中釆用的一項將獨佔設備改造成共享設備的技術。

雖然打印機只能一次打印一個任務,但是多個應用程序可能希望併發打印輸出,而不能讓它們的輸出混到一起。操作系統通過攔截所有打印輸出,來解決這一問題。

應用程序的輸出先是假脫機到一個單獨的磁盤文件。當應用程序完成打印時,假脫機系統排序相應的假脫機文件,以便輸出到打印機。

假脫機系統的組成
在這裏插入圖片描述
輸入井和輸出井
在磁盤上開闢出的兩個存儲區域。輸入井模擬脫機輸入時的磁盤,用於收容I/O設備輸 入的數據。輸出井模擬脫機輸出時的磁盤,用於收容用戶程序的輸出數據。

輸入緩衝區和輸出緩衝區
在內存中開闢的兩個緩衝區。輸入緩衝區用於暫存由輸入設備送來的數據,以後再傳送 到輸入井。輸出緩衝區用於暫存從輸出井送來的數據,以後再傳送到輸出設備。

輸入進程和輸出進程
輸入進程模擬脫機輸入時的外圍控制機,將用戶要求的數據從輸入機通過輸入緩衝區再 送到輸入井。當CPU需要輸入數據時,直接將數據從輸入井讀入內存。輸出進程模擬脫機 輸出時的外圍控制機,把用戶要求輸出的數據先從內存送到輸出並,待輸出設備空閒時,再 將輸出井中的數據經過輸出緩衝區送到輸出設備。

共享打印機是使用SPOOLing技術的一個實例,這項技術已被廣泛地用於多用戶系統和 局域網絡中。當用戶進程請求打印輸出時,SPOOLing系統同意爲它打印輸出,但並不真正 立即把打印機分配給該用戶進程,而只爲它做兩件事:

  1. 由輸出進程在輸出井中爲之申請一個空閒磁盤塊區,並將要打印的數據送入其中。
  2. 輸出進程再爲用戶進程申請一張空白的用戶請求打印表,並將用戶的打印要求填入 其中,再將該表掛到請求打印隊列上。

5.I/O請求轉成硬件操作

操作系統是如何將應用程序請求連到網絡線路或特定的磁盤扇區。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章