操作系统 —— 设备管理
目錄
- 1. I/O 設備
- 1.1. I/O 設備的分類
- 1.1.1. 按使用特性
- 1.1.2. 按傳輸速率
- 1.1.3. 按信息交換的單位
- 2. I/O 控制器
- 2.1. 機械部件 vs 電子部件
- 2.2. I/O 控制器的功能
- 2.3. I/O 控制器的組成
- 3. I/O 控制方式
- 3.1. 程序直接控制方式
- 3.2. 中斷驅動方式
- 3.3. DMA方式
- 3.4. 通道控制方式
- 4. I/O 軟件層次結構
- 5. I/O 核心子系統
- 5.1. 假脫機技術(SPOOLing技術)
- 5.1.1. 脫機技術
- 5.1.2. 假脫機技術
- 6. 設備的分配與回收
- 6.1. 安全分配 vs 不安全分配
- 6.2. 靜態分配 vs 動態分配
- 6.3. 設備分配管理中的數據結構
- 6.3.1. 設備控制表(DCT)
- 6.3.2. 控制器控制表(COCT)
- 6.3.3. 系統設備表(SDT)
- 6.4. 設備分配的步驟
- 7. 緩沖區管理
- 7.1. 緩沖區的作用
- 7.2. 單緩沖
- 7.3. 雙緩沖
- 7.4. 循環緩沖區
- 7.5. 緩沖池
1. I/O 設備
“ I/O ” 就是“ 輸入/輸出 ”(lnput/Output)
I/O 設備就是可以將數據輸入到計算機,或者可以接收計算機輸出數據的外部設備,屬于計算機中的硬件部件。
UNIX系統將外部設備抽象為一種特殊的文件, 用戶可以使用與文件操作相同的方式對外部設備進行操作。
Write:向外部設備寫出數據。
Read:向外部設備讀入數據。
1.1. I/O 設備的分類
1.1.1. 按使用特性
- 人機交互類外設:鼠標、鍵盤、打印機等。—— 用于人機交互 —— 數據傳輸速度慢
- 存儲設備:移動硬盤、光盤等。 —— 用于數據存儲 —— 數據傳輸速度快
- 網絡通信設備:調制解調器等。 —— 用于網絡通信 —— 數據傳輸速度介于上面兩者之間
1.1.2. 按傳輸速率
- 低速設備:鼠標、鍵盤等 —— 傳輸速率為每秒幾個到幾百字節。
- 中速設備:如激光打印機等 —— 傳輸速率為每秒數千至上萬個字節。
- 高速設備:如磁盤等 —— 傳輸速率為每秒數千字至千兆字節。
1.1.3. 按信息交換的單位
- 塊設備:如磁盤等 ―― 數據傳輸的基本單位是 “ 塊” 。—— 傳輸速率較高,可尋址,即對它可隨機地讀/寫任一塊。
- 字符設備:鼠標、鍵盤等 ―― 數據傳輸的基本單位是字符。—— 傳輸速率較慢,不可尋址,在輸入/輸出時常采用中斷驅動方式。
2. I/O 控制器
2.1. 機械部件 vs 電子部件
- l/O 設備的機械部件主要用來執行具體 l/O 操作。
如我們看得見摸得著的鼠標/鍵盤的按鈕;顯示器的LED屏;移動硬盤的磁臂、磁盤盤面。
- l/O 設備的電子部件通常是一塊插入主板擴充槽的印刷電路板。
CPU 無法直接控制 I/O 設備的機械部件,因此 I/O 設備還要有一個電子部件作為 CPU 和 I/O 設備機械部分之間的 “中介”, 用于實現CPU對設備的控制。
這個電子部件就是 I/O 控制器,又稱設備控制器。
CPU可控制 I/O 控制器,又由 I/O 控制器來控制設備的機械部件。
2.2. I/O 控制器的功能
1、接受和識別 CPU 發出的命令
? 如 CPU 發來的 read/write 命令,I/O 控制器中會有相應的控制寄存器來存放命令和參數。
2、向 CPU 報告設備的狀態
? I/O 控制器中會有相應的狀態寄存器,用于記錄 I/O 設備的當前狀態。如:1表示空閑,0表示忙碌。
3、數據交換
? I/O 控制器中會設置相應的數據寄存器。
? 輸出時,數據寄存器用于暫存CPU發來的數據,之后再由控制器傳送設備。
? 輸入時,數據寄存器用于暫存設備發來的數據,之后CPU從數據寄存器中取走數據。
4、地址識別
? 類似于內存的地址,為了區分設備控制器中的各個寄存器,也需要給各個寄存器設置一個特定的“地址”。
? I/O 控制器通過 CPU 提供的 “ 地址 ” 來判斷 CPU 要讀/寫的是哪個寄存器。
2.3. I/O 控制器的組成
1、 CPU與控制器的接口:用于實現 CPU 與控制器之間的通信,CPU 通過控制線發出命令,通過地址線指明要操作的設備,通過數據線來取出輸入數據,或放入輸出數據。
2、 I/O邏輯:負責接收和識別 CPU 的各種命令, 并負責對設備發出命令。
3、 控制器與設備的接口:用于實現控制器與設備之間的通信。
值得注意的小細節:
① 一個 I/O 控制器可能會對應多個設備;
② 數據寄存器、控制寄存器、狀態寄存器可能有多個(如:每個控制/狀態寄存器對應一個具體的設備),且這些寄存器都要有相應的地址,才能方便CPU操作。有的計算機會讓這些寄存器占用內存地址的一部分,稱為內存映像 I/O;另一些計算機則采用 I/O 專用地址,即寄存器獨立編址。
3. I/O 控制方式
即用什么樣的方式來控制 I/O 設備的數據讀/寫。
3.1. 程序直接控制方式
通過 輪詢 實現,以讀操作為例。
數據傳送的單位:每次讀/寫一個字。
數據的流向:
? 讀操作(數據輸入):I/O 設備 → CPU → 內存
? 寫操作(數據輸出):內存 → CPU → I/O 設備
每個字的讀/寫都需要CPU的幫助。
優點:實現簡單。在讀/寫指令之后,加上實現循環檢查的一系列指令即可。(因此才稱為“程序直接控制方式”)
缺點:CPU 和 I/O 設備只能I/O串行工作,CPU 需要一直輪詢檢查,長期處于"忙等"狀態,CPU 利用率低。
3.2. 中斷驅動方式
引入中斷機制。
由于 I/O 設備速度很慢,因此在 CPU 發出讀/寫命令后,可將等待 I/O 的進程阻塞,先切換到別的進程執行。當 I/O 完成后,控制器會向 CPU 發出一個中斷信號,CPU檢測到中斷信號后,會保存當前進程的運行環境信息,轉去執行中斷處理程序處理該中斷。
處理中斷的過程中,CPU從 I/O 控制器讀一個字的數據傳送到 CPU 寄存器,再寫入主存。接著,CPU恢復等待 I/O 的進程(或其他進程)的運行環境,然后繼續執行。
注意:
① CPU 會在每個指令周期的末尾檢查中斷;
② 中斷處理過程中需要保存、恢復進程的運行環境,這個過程是需要一定時間開銷的。可見,如果中斷發生的頻率太高,也會降低系統性能。
CPU干預的頻率:
每次 I/O 操作開始之前、完成之后需要 CPU 介入。
等待 I/O 完成的過程中 CPU 可以切換到別的進程執行。
數據傳送的單位:每次讀/寫一個字。
數據的流向:
? 讀操作(數據輸入):I/O 設備 → CPU → 內存
? 寫操作(數據輸出):內存 → CPU → I/O 設備
優點:與 “ 程序直接控制方式 ” 相比,在“中斷驅動方式”中,I/O 控制器會通過中斷信號主動報告I/O 已完成,CPU不再需要不停地輪詢。CPU 和 I/O 設備可并行工作,CPU利用率得到明顯提升。
缺點:每個字在 I/O 設備與內存之間的傳輸,都需要經過 CPU。而頻繁的中斷處理會消耗較多的CPU時間。
3.3. DMA方式
DMA方式(Direct Memory Access,直接存儲器存取)。
主要用于塊設備的 I/O 控制,相對于 “中斷驅動方式 ” 有這樣幾個改進:
① 數據的傳送單位是 “ 塊 ”。不再是一個字、一個字的傳送;
② 數據的流向是從設備直接放入內存,或者從內存直接到設備。不再需要 CPU 作為“快遞小哥”
③ 僅在傳送一個或多個數據塊的開始和結束時,才需要CPU干預。
-
DR (Data Register,數據寄存器):暫存從設備到內存,或從內存到設備的數據。
-
MAR (Memory Address Register,內存地址寄存器):在輸入時,MAR表示數據應放到內存中的什么位置;輸出時MAR表示要輸出的數據放在內存中的什么位置。
-
DC(Data Counter,數據計數器):表示剩余要讀/寫的字節數。
-
CR (Command Register,命令/狀態寄存器):用于存放 CPU 發來的 I/O 命令,或設備的狀態信息。
CPU干預的頻率:僅在傳送一個或多個數據塊的開始和結束時,才需要CPU干預。
數據傳送的單位:每次讀/寫一個或多個塊
- 每次讀寫的只能是連續的多個塊,且這些塊讀入內存后在內存中也必須是連續的
數據的流向:
讀操作(數據輸入): I/O 設備 → 內存
寫操作(數據輸出):內存 → I/O 設備
優點:數據傳輸以“塊”為單位,CPU 介入頻率進一步降低。數據的傳輸不再需要先經過 CPU 再寫入內存,數據傳輸效率進一步增加。CPU 和 I/O 設備的并行性得到提升。
缺點:CPU 每發出一條 I/O 指令,只能讀/寫一個或多個連續的數據塊。如果要讀/寫多個離散存儲的數據塊,或者要將數據分別寫到不同的內存區域時,CPU要分別發出多條 I/O 指令,進行多次中斷處理才能完成。
3.4. 通道控制方式
通道:一種硬件,可以理解為是 “ 弱雞版的 CPU ”。通常可以識別并執行一系列的通道指令。
與 CPU 相比,通道可以執行的指令很單一,并且通道程序是放在主機內存中的,也就是說通道與CPU 共享內存。
CPU 干預的頻率:極低,通道會根據 CPU 的指示執行相應的通道程序,只有完成一組數據塊的讀/寫后才需要發出中斷信號,請求 CPU 干預。
數據傳送的單位:每次讀/寫一組數據塊。
數據的流向〈在通道的控制下進行)
讀操作(數據輸入):I/O 設備 → 內存
寫操作(數據輸出):內存 → I/O 設備
優點:CPU、通道、I/O 設備可并行工作,資源利用率很高。
缺點:實現復雜,需要專門的通道硬件支持。
4. I/O 軟件層次結構
- 越上面的層次越接近用戶,越下面的層次越接近硬件。
- 每一層會利用下層提供的服務,實現某些功能,并屏蔽實現的具體細節,向高層提供服務(封裝思想)。
用戶層軟件:實現與用戶交互的接口,向上提供方便易用的庫函數。
設備獨立性軟件:
① 向上層提供統一的調用接口(如read/write系統調用);
② 設備的保護;
③ 差錯處理;
④ 設備的分配與回收;
⑤ 數據緩沖區管理;
⑥ 建立邏輯設備名到物理設備名的映射關系;根據設備類型選擇調用相應的驅動程序……
設備驅動程序:設置設備寄存器、檢查設備狀態。
中斷處理程序:進行中斷處理。
硬件:執行 I/O 操作,有機械部分、電子部分組成。
5. I/O 核心子系統
I/O 核心子系統要實現的功能其實就是中間三層要實現的功能。
I/O 調度:用某種算法確定一個好的順序來處理各個 I/O 請求。(比如磁盤調度)
設備保護:
操作系統需要實現文件保護功能,不同的用戶對各個文件有不同的訪問權限。
在 UNIX 系統中,設備被看做是一種特殊的文件,每個設備也會有對應的FCB。
當用戶請求訪問某個設備時,系統根據FCB中記錄的信息來判斷該用戶是否有相應的訪問權限,以此實現“設備保護”的功能。
5.1. 假脫機技術(SPOOLing技術)
5.1.1. 脫機技術
5.1.2. 假脫機技術
“假脫機技術”,又稱“SPOOLing 技術”,用軟件的方式模擬脫機技術。SPOOLing 系統的組成如下:
打印機是一種 " 獨占式設備 ",但是可以用SPOOLing技術改造成 " 共享設備 "。
6. 設備的分配與回收
6.1. 安全分配 vs 不安全分配
從進程運行的安全性上考慮,設備分配有兩種方式:
1、安全分配方式:為進程分配一個設備后就將進程阻塞,本次 I/O 完成后才將進程喚醒。
一個時段內每個進程只能使用一個設備
優點:破壞了 “ 請求和保持 ” 條件,不會死鎖。
缺點:對于一個進程來說,CPU 和 I/O 設備只能串行工作。
2、不安全分配方式:進程發出 I/O 請求后,系統為其分配 I/O 設備,進程可繼續執行,之后還可以發出新的 I/O 請求。只有某個 I/O 請求得不到滿足時才將進程阻塞。
一個進程可以同時使用多個設備
優點:進程的計算任務和 I/O 任務可以并行處理,使進程迅速推進。
缺點:有可能發生死鎖(死鎖避免、死鎖的檢測和解除)。
6.2. 靜態分配 vs 動態分配
靜態分配:進程運行前為其分配全部所需資源,運行結束后歸還資源。
動態分配:進程運行過程中動態申請設備資源
6.3. 設備分配管理中的數據結構
設備、控制器、通道之間的關系
一個通道可控制多個設備控制器,每個設備控制器可控制多個設備。
6.3.1. 設備控制表(DCT)
系統為每個設備配置一張DCT,用于記錄設備情況。
6.3.2. 控制器控制表(COCT)
每個設備控制器都會對應一張COCT。操作系統根據COCT的信息對控制器進行操作和管理。
6.3.3. 系統設備表(SDT)
記錄了系統中全部設備的情況,每個設備對應一個表目。
6.4. 設備分配的步驟
① 根據進程請求的物理設備名查找SDT。(注:物理設備名是進程請求分配設備時提供的參數)
② 根據SDT找到DCT,若設備忙碌則將進程PCB掛到設備等待隊列中,不忙碌則將設備分配給進程。
③ 根據DCT找到COCT,若控制器忙碌則將進程PCB掛到控制器等待隊列中,不忙碌則將控制器分配給進程。
④ 根據COCT找到CHCT,若通道忙碌則將進程PCB掛到通道等待隊列中,不忙碌則將通道分配給進程。
缺點:
① 用戶編程時必須使用 “ 物理設備名 ”,底層細節對用戶不透明,不方便編程。
② 若換了一個物理設備,則程序無法運行。
③ 若進程請求的物理設備正在忙碌,則即使系統中還有同類型的設備,進程也必須阻塞等待。
改進方法:
建立邏輯設備名與物理設備名的映射機制,用戶編程時只需提供邏輯設備名。
7. 緩沖區管理
緩沖區是一個存儲區域,可以由專門的硬件寄存器組成,也可以利用內存作為緩沖區。
使用硬件作為緩沖區的成本較高,容量較小, 一般僅用在對速度要求非常高的場合。
比如聯想寄存器 ( 快表 ) 就是硬件作為緩沖區。
一般情況下, 更多的是利用內存作為緩沖區。
7.1. 緩沖區的作用
7.2. 單緩沖
假設某用戶進程請求某種塊設備讀入若干塊的數據。若采用單緩沖的策略,操作系統會在主存中為其分配一個緩沖區(若題目中沒有特別說明,一個緩沖區的大小就是一個塊)。
當緩沖區數據非空時,不能往緩沖區沖入數據,只能從緩沖區把數據傳出;
當緩沖區為空時,可以往緩沖區沖入數據,但必須把緩沖區充滿以后,才能從緩沖區把數據傳出。
7.3. 雙緩沖
假設某用戶進程請求某種塊設備讀入若干塊的數據。若采用雙緩沖的策略,操作系統會在主存中為其分配兩個緩沖區(若題目中沒有特別說明,一個緩沖區的大小就是一個塊)。
7.4. 循環緩沖區
將多個大小相等的緩沖區鏈接成一個循環隊列。
注:以下圖示中,橙色表示已充滿數據的緩沖區,綠色表示空緩沖區。
7.5. 緩沖池
緩沖池由系統中共用的緩沖區組成。
這些緩沖區按使用狀況可以分為:
1、空緩沖隊列
2、裝滿輸入數據的緩沖隊列(輸入隊列)
3、裝滿輸出數據的緩沖隊列(輸出隊列)。
根據一個緩沖區在實際運算中扮演的功能不同,又設置了四種工作緩沖區:
1、用于收容輸入數據的工作緩沖區(hin)
2、用于提取輸入數據的工作緩沖區(sin)
3、用于收容輸出數據的工作級沖區( hout)
4、用于提取輸出數據的工作緩沖區(sout)。
總結
以上是生活随笔為你收集整理的操作系统 —— 设备管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GitHub基础——下载和上传
- 下一篇: 牛客21805 字符串编码与解码