I/O 硬件原理
I/O 設備
I/O 設備大致可以分爲兩類:塊設備和字符設備。
塊設備把信息存儲在固定大小的塊中,每個塊有自己的地址。通常塊的大小在521字節至65536字節之間。所有傳輸以一個或多個完整的連續的塊爲單位。塊設備的基本特徵是每個塊都能獨立於其他塊而讀寫。硬盤、藍光光盤和 USB 盤是最常見的塊設備。
字符設備以字符爲單位發送或接收一個字符流,而不考慮任何塊結構。字符設備是不可尋址的,也沒有任何尋道操作。打印機、網絡接口、鼠標可看做字符設備。
設備控制器
I/O 設備一般由機械部件和電子部件兩部分組成。電子部件稱作設備控制器或適配器。
控制器的任務是把串行的位流轉換爲字節塊,並進行必要的錯誤校正工作。
內存映射 I/O
設備控制器中有控制寄存器和數據緩衝區用來與 CPU 進行通信。
- 單獨的 I/O 和內存空間
- 每個控制寄存器被分配一個 I/O 端口號,所有的 I/O 端口形成 I/O 端口空間,並且受到保護使得普通用戶程序不能對其進行訪問,只有操作系統可以訪問。
- 內存映射 I/O
- 將所有控制寄存器映射到內存空間中,每個控制寄存器被分配唯一的一個內存地址,並且不會有內存被分配這一地址。
- 在大多數系統中,分配給控制寄存器的地址位於或者靠近地址空間的頂端。
- 混合方案
內存映射 I/O 的優點:
- 對於內存映射 I/O,設備控制寄存器只是內存中的變量,在 C 語言中可以和任何其他變量一樣尋址,因此 I/O 設備驅動程序可以完全用 C 語言編寫。否則,就要用到某些彙編代碼。
- 對於內存映射 I/O,不需要特殊的保護機制來阻止用戶進程執行 I/O 操作,操作系統必須要做的全部事情只是避免把包含控制寄存器的那部分地址空間放入任何用戶的虛擬地址空間之中。
- 對於內存映射 I/O,可以引用內存的每一條指令也可以引用控制寄存器。
中斷
當一個 I/O 設備完成交給它的工作時,它就產生一箇中斷。
中斷信號導致 CPU 停止當前正在做的工作並且開始做其他的事情。地址線上的數字被用做指向一個稱爲中斷向量的表格的索引,以便讀取一個新的程序計數器。這一程序計數器指向相應的中斷服務過程的開始。一般情況下,陷阱和中斷從這一點上看使用相同的機制,並且常常共享相同的中斷向量。中斷向量的位置可以硬佈線到機器中,也可以在內存中的任何地方通過一個 CPU 寄存器(由操作系統裝載)指向其起點。
I/O 軟件原理
I/O 軟件的目標
- 設備獨立性:程序可以訪問任意 I/O 設備而無需事先指定設備。
- 統一命名:一個文件或一個設備的名字應該是一個簡單的字符串或整數,它不應依賴於設備。
- 錯誤處理:錯誤應該儘可能地在接近硬件的層面得到處理,如果設備控制器處理不了,那麼設備驅動程序應當予以處理。
- 同步(阻塞)和異步傳輸(中斷驅動): 操作系統使實際上是中斷驅動(異步)的操作變爲在用戶程序看來是阻塞式(同步)的操作。
- 緩衝:數據離開一個設備之後通常並不能直接存放到其最終的目的地。
- 共享設備和設備獨佔:有些設備局無法共享,如寫入磁帶;而獨佔設備又會帶來各種問題,如死鎖。
程序控制 I/O
I/O 可以採用三種根本上不同的方式來實現:程序控制 I/O、中斷驅動 I/O 和使用 DMA 的 I/O。
以打印一個字符串爲例:首先,數據被複制到內核空間。然後,操作系統進入一個密閉的循環,一次輸出一個字符。在輸出一個字符之後,CPU 要不斷地查詢設備以瞭解它是否就緒準備接收另一個字符。這一行爲通常稱爲輪詢或忙等待。
程序控制 I/O 十分簡單但是有缺點:直到全部 I/O 完成之前要佔用 CPU 的全部時間。
中斷驅動 I/O
這種允許 CPU 在等待打印機變爲就緒的同時做某些其他事情的方式就是使用中斷。
當打印字符串的系統調用發出時,字符串緩衝區被複制到內核空間,並且一旦打印機準備好接收一個字符時就將第一個字符複製到打印機中。這時,CPU 要調用調度程序,並且某個其他進程將運行,請求打印字符串的進程將被阻塞,直到整個字符串打印完。
當打印機將字符打印完並且準備好接收下一個字符時,它將產生一箇中斷。這一中斷將停止當前進程並且保存其狀態。然後,打印機中斷服務過程將運行。如果沒有更多的字符要打印,中斷處理程序就採取某個操作將用戶進程解除阻塞。否則,它將輸出下一個字符,應答中斷,並且返回到中斷之前正在運行的進程,該進程將從其停止的地方繼續運行。
使用 DMA 的 I/O
中斷驅動 I/O 的一個明顯缺點是中斷髮生在每個字符上。中斷要花費時間,所以這一方法將浪費一定數量的 CPU 時間。這一問題的一種解決方法是使用直接存儲器 DMA。
DMA 控制器能夠獨立於 CPU 而訪問系統總線。
讓 DMA 控制器一次給打印機提供一個字符,而不必打擾 CPU。本質上,DMA 是程序控制 I/O,只是由 DMA 控制器而不是主 CPU 做全部工作。這一策略需要特殊的硬件(DMA 控制器),但是使 CPU 獲得自由從而可以在 I/O 期間做其他工作。
DMA 的重大成功是將中斷的次數從打印每個字符一次減少到打印每個緩衝區一次。
使用通道的 I/O
I/O 軟件層次
- I/O 軟件系統的層次
用戶級 I/O 軟件 |
---|
與設備無關的操作系統軟件 |
設備驅動程序 |
中斷處理程序 |
硬件 |
中斷處理程序
當中斷髮生時,中斷處理程序將做它必須要做的全部工作以便對中斷進行處理。然後,它可以將啓動中斷的驅動程序接觸阻塞。
設備驅動程序
每個連接到計算機上的 I/O 設備都需要某些設備特定的代碼來對其進行控制。這樣的代碼稱爲設備驅動程序,它一般由設備的製造商編寫並隨同設備一起交付。因爲每一個操作系統都需要自己的設備驅動程序,所以設備製造商通常要爲若干流行的操作系統提供驅動程序。
爲了訪問設備的硬件,意味着訪問設備控制器的寄存器,設備驅動程序通常必須是操作系統內核的一部分,至少對目前的體系結構是如此。
與設備無關的 I/O 軟件
雖然 I/O 軟件中有一些是設備特定的,但是其他部分 I/O 軟件都是與設備無關的。
與設備無關的軟件的基本功能是執行對所有設備公共的 I/O 功能,並且向用戶層軟件提供一個統一的接口。
與設備無關的 I/O 軟件的功能:
- 設備驅動程序的統一接口
- 設備驅動程序與操作系統其餘部分之間的接口。
- 如何給 I/O 設備命名,把符號化的設備名映射到適當的驅動程序上。
- 緩衝
- 緩衝可以提高應用的性能。
- 錯誤報告
- 錯誤在 I/O 上下文中比在其他上下文中要常見得多。當錯誤發生時,操作系統必須盡最大努力對它們進行處理。許多錯誤是設備特定的並且必須由適當的驅動程序來處理,但是錯誤處理的框架是設備無關的。
- 錯誤的類型:
- 編程錯誤
- 實際的 I/O 錯誤
- 分配與釋放專用設備
- 提供與設備無關的塊大小
- 不同的磁盤可能具有不用的扇區大小。應該由與設備無關的軟件來隱藏這一事實並且向高層提供一個統一的塊大小。
用戶空間的 I/O 軟件
儘管大部分 I/O 軟件都在操作系統內部,但是仍然有一小部分在用戶空間,包括與用戶程序連接在一起的庫,甚至完全運行於內核之外的程序。有一個重要的類別是假脫機系統,假脫機是多道程序設計系統中處理獨佔 I/O 設備的一種方法。
I/O 系統的層次以及每一層的主要功能
I/O 請求 | 層次 | I/O 應答 | I/O 功能 |
---|---|---|---|
↓ | 用戶進程 | ↑ | 產生 I/O 請求;對 I/O 進行格式化;假脫機 |
↓ | 與設備無關的軟件 | ↑ | 命名、保護、分塊、緩衝、分配 |
↓ | 設備驅動程序 | ↑ | 設置設備寄存器;檢查狀態 |
↓ | 中斷處理程序 | ↑ | 當 I/O 完成時喚醒驅動程序 |
↓ | 硬件 | ↑ | 執行 I/O 操作 |
盤
磁盤
磁盤被組織成柱面,每一個柱麪包含若干磁道,磁道數與垂直堆疊的磁頭個數相同,磁道又被分成若干個扇區。
- IDE:Integrated Drive Electronics,集成驅動電子設備
- SATA:Serial ATA,串行 ATA
對磁盤驅動程序有重要意義的一個設備特性是:控制器是否可以同時控制兩個或多個驅動程序進行尋道,這就是重疊尋道。
(x,y,z):x 個柱面、y 個磁頭、每磁道 z 個扇區。所有現代的磁盤都支持邏輯塊尋址系統,在這樣的系統中,磁盤扇區從0開始連續編號,而不管磁盤的幾何規格如何。
磁盤臂調度算法
讀寫磁盤的時間由以下三個因素決定:
- 尋道時間:將磁盤臂移動到適當的柱面上所需的時間。
- 旋轉延遲:等待適當扇區旋轉到磁頭下所需的時間。
- 實際數據傳輸時間。
對大多數磁盤而言,尋道時間與另外兩個時間相比占主導地位,所以減少平均尋道時間可以充分改善系統性能。
許多磁盤驅動程序都維護着一張表,該表按柱面號索引。每一柱面的未完成的請求組成一個鏈表,鏈表頭存放在表的相應表目中。
- 先來先服務,FCFS
- 最短尋道優先,SSF
- 電梯算法
RAID
- Redundant Array of Inexpensive Disk(廉價磁盤冗餘陣列)
- Redundant Array of Independent Disk(獨立磁盤冗餘陣列)
改進磁盤的性能和可靠性。
將數據分佈在多個驅動器上稱爲劃分條帶。
- 0級 RAID:將連續的條帶以輪轉方式寫到全部驅動器上。
- 1級 RAID:複製了所有的磁盤。
穩定存儲器
目標是不惜一切代價保持磁盤的一致性。並且是在軟件中實現的。
穩定存儲器使用一對完全相同的磁盤,對應的塊一同工作以形成一個無差錯的塊。當不存在錯誤時,在兩個驅動器上對應的塊是相同的,讀取任意一個都可以得到相同的結果。爲了達到這一目的,定義了下述三種操作:
- 穩定寫
- 穩定讀
- 崩潰恢復
時鐘
- 時鐘硬件:根據已知的時間間隔產生中斷
- 時鐘軟件(時鐘驅動程序):
- 維護日時間
- 防止進程超時運行
- 對 CPU 的使用情況記賬
- 處理用戶進程提出的 alarm 系統調用
- 爲系統本身的各個部分提供監控定時器
- 完成概要剖析、監視和統計信息收集
用戶界面
- 輸入設備
- 鍵盤
- 鼠標
- 輸出設備
- 監視器
- 終端
- 文本窗口
- 圖形用戶界面(GUI)
- X 窗口系統
電源管理
兩種減少能量消耗的一般方法:
- 當計算機的某些部件(主要是 I/O 設備)不用的時候由操作系統關閉它們。
- 應用程序使用較少的能力,但可能會降低用戶體驗的質量。
- 顯示器
- 硬盤
- CPU
- 內存
- 無線通信
- 熱量管理
- 電池管理
- 節能模式