操作系统:第五章 磁盘管理 - I/O控制,缓冲区管理
本文已收錄至 Github(MD-Notes),若博客中有圖片打不開,可以來我的 Github 倉庫:https://github.com/HanquanHq/MD-Notes,涵蓋了互聯網大廠面試必問的知識點,講解透徹,長期更新中,歡迎一起學習探討。
面試必會系列專欄:https://blog.csdn.net/sinat_42483341/category_10300357.html
操作系統系列專欄:https://blog.csdn.net/sinat_42483341/category_10519484.html
第五章 磁盤管理 - I/O控制,緩沖區管理
目錄
- 第五章 磁盤管理 - I/O控制,緩沖區管理
- I/O 設備
- 按使用特性分類
- 按傳輸速率分類
- 按信息交換的單位分類
- I/O 控制器
- 為什么有 I/O 控制器?
- I/O 控制器在哪里?
- 主要功能
- 組成
- 兩種寄存器編址方式
- I/O 控制方式
- 程序解控制方式
- 中斷驅動方式
- DMA 方式
- DMA 控制器
- 通道控制方式
- I/O 控制方式總結
- I/O 軟件層次結構
- I/O 核心子系統
- SPOOLing 技術(假脫機技術)
- 設備的分配與回收
- 設備分配管理中的數據結構
- 優化后的設備分配步驟
- 緩沖區管理
- 單緩沖策略
- 雙緩沖策略
- 循環緩沖區
- 緩沖池
I/O 設備
UNIX系統將外部設備抽象為一種特殊的文件,用戶可以使用與文件操作相同的方式對外部設備進行操作。
按使用特性分類
人機交互類外部設備、存儲設備、網絡通信設備
按傳輸速率分類
低速設備、中速設備、高速設備
按信息交換的單位分類
塊設備(傳輸快,可尋址)、字符設備(傳輸慢,不可尋址,常采用中斷驅動方式)
I/O 控制器
為什么有 I/O 控制器?
想要把 printf("hello, world”) 這樣的用戶I/O請求,轉換為對設備的控制命令,并完成設備I/O任務,需要I/O軟件與I/O硬件之間的協調工作。
為達到模塊化、通用性的設計目標,通常將I/O設備(又稱外圍設備、控制設備)中的 機械部件 和 電子部件 分開處理。CPU無法直接控制 I/O設備 的 機械部件,因此 I/O 設備還要有一個 電子部件 作為 CPU 和 I/O 設備機械部件之間的“中介”,用于實現CPU對設備的控制。這個 電子部件 就是 I/O控制器,又稱設備控制器。CPU可控制I/O控制器,又由I/O控制器來控制設備的機械部件。
操作系統與控制器交互,而非與設備交互,外設通過電纜與設備控制器(I/O接口)進行數據、狀態和控制信息的傳送。
I/O 控制器在哪里?
I/O控制器(I/O接口)在 擴展卡 或者 南橋芯片 內,通過I/O總線、北橋芯片連接CPU
I/O硬件建立了外設與主機之間的“通路”:主機 — 北橋 — I/O總線 — 南橋(設備控制器) — 電纜 — 外設
主要功能
- 接收和識別 CPU 發出的命令(要有控制寄存器)
- 向 CPU 報告設備的狀態(要有狀態寄存器)
- 數據交換(要有數據寄存器,暫存輸入 / 輸出的數據)
- 地址識別(由 I/O 邏輯實現)
組成
- CPU 與控制器之間的接口(實現控制器與 CPU 之間的通信)
- I/O 邏輯(負責識別 CPU 發出的命令,并向設備發出命令)
- 控制器與設備之間的接口(實現控制器與設備之間的通信)
兩種寄存器編址方式
- 內存映射 I/O
- 控制器中的寄存器與內存統一編址
- 可以采用對內存進行操作的指令來對控制器進行操作
- 寄存器獨立編址
- 控制器中的寄存器獨立編址
- 需要設置專門的指令來操作控制器
I/O 控制方式
程序解控制方式
優點:實現簡單。在讀/寫指令之后,加上實現循環檢查的一系列指令即可(因此才稱為“程序直接控制方式”)
? 缺點:CPU和I/O設備只能串行工作,CPU需要一直輪詢檢查,長期處于“忙等”狀態,CPU利用率低。
中斷驅動方式
優點:與“程序直接控制方式”相比,在“中斷驅動方式”中,I/O控制器會通過中斷信號主動報告I/O已完成,CPU不再需要不停地輪詢。CPU和I/O設備可并行工作,CPU利用率得到明顯提升。
缺點:每個字在I/O設備與內存之間的傳輸,都需要經過CPU。而頻繁的中斷處理會消耗較多的CPU時間。
DMA 方式
DMA 控制器
DR(Data Register,數據寄存器):暫存從設備到內存,或從內存到設備的數據。
MAR(Memory Address Register,內存地址寄存器):在輸入時,MAR表示數據應放到內存中的什么位置;輸出時MAR表示要輸出的數據放在內存中的什么位置。
DC(Data Counter,數據計數器):表示剩余要讀/寫的字節數。
CR(Command Register,命令/狀態寄存器):用于存放CPU發來的I/O命令,或設備的狀態信息。
優點:數據傳輸以“塊”為單位,CPU介入頻率進一步降低。數據的傳輸不再需要先經過CPU再寫入內存,數據傳輸效率進一步增加。CPU和I/O設備的并行性得到提升。
缺點:CPU每發出一條I/O指令,只能讀/寫一個或多個連續的數據塊。如果要讀/寫多個離散存儲的數據塊,或者要將數據分別寫到不同的內存區域時,CPU要分別發出多條I/O指令,進行多次中斷處理才能完成。
通道控制方式
通道:一種 硬件,可以理解為是“弱雞版的CPU”。通道可以識別并執行一系列 通道指令
缺點:實現復雜,需要專門的通道硬件支持
優點:CPU、通道、I/O設備可并行工作,資源利用率很高。
I/O 控制方式總結
I/O 軟件層次結構
-
用戶通過調用 用戶層軟件 提供的 庫函數 發出的I/O請求
-
用戶層軟件通過 系統調用 請求 設備獨立性軟件層 的服務
-
設備獨立性軟件層根據LUT調用設備對應的 驅動程序
-
驅動程序向 I/O控制器 發出具體命令
-
等待I/O完成的進程應該被阻塞,因此需要進程切換,而進程切換必然需要 中斷處理
I/O 核心子系統
I/O核心子系統要實現的功能,其實就是上述中間三層要實現的功能,包括:I/O調度、設備保護、假脫機技術(SPOOLing技術)、設備分配與回收、緩沖區管理(即緩沖與高速緩存)
SPOOLing 技術(假脫機技術)
在早期的手工操作計算機中,所謂脫機,即脫離主機的控制,由外圍控制機(磁帶機)進行輸入 / 輸出操作
現在的假脫機技術,是用軟件的方式模擬脫機技術。SPOOLing系統的組成如下:
打印機是種“獨占式設備”,SPOOLing技術可以把一臺物理設備虛擬成邏輯上的多臺設備,可將獨占式設備改造成共享設備。
設備的分配與回收
設備分配時應考慮的因素:設備的固有屬性、設備的分配算法、設備分配中的安全性
設備的固有屬性可分為三種:獨占設備、共享設備、虛擬設備。
- 獨占設備——一個時段只能分配給一個進程(如打印機)
- 共享設備——可同時分配給多個進程使用(如磁盤),進程往往宏觀上共享使用設備,微觀上交替使用。
- 虛擬設備——采用SPOOLing技術將獨占設備改造成虛擬的共享設備,可同時分配給多個進程使用(如采用SPOOLing技術實現的共享打印機)
設備的分配算法:
- 先來先服務
- 優先級高者優先
- 短任務優先
設備分配中的安全性:
- 安全分配方式:為進程分配一個設備后就將進程阻塞,本次I/O完成后才將進程喚醒。破壞了死鎖發生的“請求和保持”條件,不會導致死鎖。
- 不安全分配方式:進程發出I/O請求后,系統為其分配I/O設備,進程可繼續執行,之后還可以發出新的I/O請求。直到只有某個I/O請求得不到滿足時,才將進程阻塞。有可能發生死鎖,可以使用銀行家算法避免。
設備分配管理中的數據結構
設備控制表(DCT):系統為每個設備配置一張DCT,用于記錄設備情況。包含:
- 設備類型:如,打印機/掃描儀/鍵盤
- 設備標識符:即物理設備名,系統中的每個設備的物理設備名唯一
- 設備狀態:忙碌/空閑/故障…
- 指向控制器表的指針:每個設備由一個控制器控制,該指針可找到相應控制器的信息
- 重復執行次數或時間:當重復執行多次I/O操作后仍不成功,才認為此次I/O失敗
- 設備隊列的隊首指針:指向正在等待該設備的進程隊列(由進程PCB組成隊列)
控制器控制表(COCT):每個設備控制器都會對應一張COCT。操作系統根據COCT的信息對控制器進行操作和管理。
- 控制器標識符:各個控制器的唯一ID
- 控制器狀態:忙碌/空閑/故障…
- 指向通道表的指針:每個控制器由一個通道控制,該指針可找到相應通道的信息
- 控制器隊列的隊首指針:指向正在等待該控制器的進程隊列(由進程PCB組成隊列)
- 控制器隊列的隊尾指針:同上
通道控制表(CHCT):每個通道都會對應一張CHCT。操作系統根據CHCT的信息對通道進行操作和管理。
- 通道標識符:各個通道的唯一ID
- 通道狀態:忙碌/空閑/故障…
- 與通道連接的控制器表首址:可通過該指針找到該通道管理的所有控制器相關信息(COCT)
- 通道隊列的隊首指針:指向正在等待該通道的進程隊列(由進程PCB組成隊列)
- 通道隊列的隊尾指針:同上
系統設備表(SDT):記錄了系統中全部設備的情況,每個設備對應一個表目。
優化后的設備分配步驟
根據進程請求的邏輯設備名查找SDT(注:用戶編程時提供的邏輯設備名其實就是“設備類型”,例如打印機)
查找SDT,找到用戶進程指定類型的、并且空閑的設備,將其分配給該進程。操作系統在邏輯設備表(LUT)中新增一個表項。
根據DCT找到COCT,若控制器忙碌則將進程PCB掛到控制器等待隊列中,不忙碌則將控制器分配給進程。
根據COCT找到CHCT,若通道忙碌則將進程PCB掛到通道等待隊列中,不忙碌則將通道分配給進程。
緩沖區管理
使用 硬件作為緩沖區 的成本較高,容量也較小,一般僅用在對速度要求非常高的場合(如存儲器管理中用的聯想寄存器,即 快表,由于對頁表的訪問頻率極高,因此使用速度很快的聯想寄存器來存放頁表項的副本)
一般情況下,更多的是利用內存作為緩沖區,“設備獨立性軟件”的緩沖區管理就是要組織管理好這些緩沖區
單緩沖策略
當緩沖區數據非空時,不能往緩沖區沖入數據,只能從緩沖區把數據傳出;當緩沖區為空時,可以往緩沖區沖入數據,但必須把緩沖區充滿以后,才能從緩沖區把數據傳出。
雙緩沖策略
假設某用戶進程請求某種塊設備讀入若干塊的數據。若采用雙緩沖的策略,操作系統會在主存中為其分配兩個緩沖區(若題目中沒有特別說明,一個緩沖區的大小就是一個塊)
結論:采用雙緩沖策略,處理一個數據塊的平均耗時為Max (T, C+M)
兩臺機器之間通信時,可以配置緩沖區用于數據的發送和接受。
注:管道通信中的“管道”其實就是緩沖區。要實現數據的雙向傳輸,必須設置兩個管道
循環緩沖區
將多個大小相等的緩沖區鏈接成一個循環隊列。
注:以下圖示中,橙色表示已充滿數據的緩沖區,綠色表示空緩沖區。
緩沖池
緩沖池由系統中共用的緩沖區組成。這些緩沖區按使用狀況可以分為:空緩沖隊列、裝滿輸入數據的緩沖隊列(輸入隊列)、裝滿輸出數據的緩沖隊列(輸出隊列)。
另外,根據一個緩沖區在實際運算中扮演的功能不同,又設置了四種工作緩沖區:
-
用于收容輸入數據的工作緩沖區(hin)
-
用于提取輸入數據的工作緩沖區(sin)
-
用于收容輸出數據的工作緩沖區(hout)
-
用于提取輸出數據的工作緩沖區(sout)
總結
以上是生活随笔為你收集整理的操作系统:第五章 磁盘管理 - I/O控制,缓冲区管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统:第四章 文件管理2 - 磁盘管
- 下一篇: java信息管理系统总结_java实现科