對設備進行控制的方法組成了操作系統內核的I/O子系統,提供的服務有I/O調度,緩沖與高速緩存,設備分配與回收,假脫機,設備保護,差錯處理。
- I/O調度
確定一個好的順序來執行這些I/O請求,來改善系統整體性能,進程之間公平的共享設備訪問,減少I/O完成所需要的平均時間。
為每個設備維護一個請求隊列來實現調度,當一個應用程序執行阻塞I/O系統調用時候,請求加到相應設備的隊列上。I/O調度會重新安排隊列順序以改善系統總體效率和應用程序的平均響應時間。
磁盤調度算法其實就是I/O調度的一種。 - 高速緩存和緩沖區
- 磁盤高速緩存
使用磁盤高速緩存技術來提高磁盤的I/O速度,正在運行的進程的指令既存儲在磁盤上,也存儲在物理內存中,也被復制到CPU的二級和一級高速緩存中。
磁盤高速緩存技術是指利用內存中的存儲空間來暫存從磁盤中讀出的一系列盤塊中的信息。磁盤高速緩存在邏輯上屬于磁盤,物理上是駐留在內存中的盤塊。
高速緩存分為兩種形式,一是內存中開辟單獨的存儲空間作為磁盤高速緩存, 大小固定。另一種是未利用的內存空間作為緩沖池,供請求分頁系統和磁盤I/O時共享。 - 緩沖區
CPU和I/O設備間速度不匹配的矛盾
減少對CPU的中斷頻率
解決基本數據單元大小不匹配的問題
提高CPU和I/O設備之間的并行性
緩沖區,內存區域,當緩沖區數據非空的時候,不能往緩沖區沖入數據,只能從緩沖區把數據傳出。緩沖區為空的時候,可以往緩沖區沖入數據,但是必須把緩沖區充滿后,才能從緩沖區把數據傳出。- 單緩沖
設備和處理機之間設置一個緩沖區,設備和處理機交換數據的時候,先把交換數據寫入緩沖區,然后需要數據的設備或者處理機從緩沖區拿走數據。
數據沖入緩沖區的時間為T,操作系統將緩沖區數據傳入用戶區時間為M,CPU處理時間為C。
每塊數據塊的處理時間為max(C,T)+M,根據圖來進行回憶分析。 - 雙緩沖
CPU在M時間是空閑的,所以在緩沖區1充滿后,開始沖緩沖區2,同時CPU將緩沖區1的數據取出到用戶進程處理,然后緩沖區1數據處理完后,緩沖區2如果滿的話,繼續處理,然后填緩沖區1。如果沒滿,一直到裝滿再讓處理機從緩沖區2取數據。
處理一塊數據的用時,分為T>C+M或者T<C+M的情況,然后根據圖形和原理進行分析,Max(C+M,T)
T>C+M使塊設備連續輸入,T<C+M使CPU不必等待設備輸入,CPU一直工作。
對于字符設備,行輸入方式,雙緩沖可以在輸入第一行之后,CPU執行命令的時候繼續輸入下一行的數據。
兩臺機器之間通信如果只配置了單緩沖,那么同時只能實現單方向的數據傳輸,實現雙向數據傳輸,則在兩臺機器上都設置兩個緩沖區,一個用作發送緩沖區,另一個用作接收緩沖區。 - 循環緩沖區
包含多個大小相等的緩沖區,每個緩沖區中有一個鏈接指針指向下一個緩沖區,最后一個緩沖區指向第一個緩沖區,多個緩沖區構成一個環形。
in指針指向可以輸入數據的第一個空緩沖區,out指針指向可以提取數據的第一個滿緩沖區。 - 緩沖池
由多個系統公用的緩沖區組成,緩沖區形成三個隊列:空緩沖隊列,裝滿輸入數據的緩沖隊列,裝滿輸出數據的緩沖隊列。還有四種緩沖區,用于收容輸入數據的工作緩沖區,用于提取輸入數據的工作緩沖區,用于收容輸出數據的工作緩沖區,用于提取輸出數據的工作緩沖區。
工作過程:當輸入進程需要輸入數據的時候,從空緩沖隊列的隊首摘下一個空緩沖區,作為收容輸入工作緩沖區,把輸入數據輸入其中,裝滿后把它掛到輸入隊列隊尾,計算進程需要輸入數據的時候,從輸入隊列取得一個緩沖區作為提取輸入工作緩沖區,數據用完之后將它掛到空緩沖隊列尾。
- 單緩沖
- 高速緩存和緩沖區
高速緩存是可以保存數據拷貝的高速存儲器,訪問高速緩存比訪問原始數據更加有效,速度更快。而緩沖區是高速設備和低速設備的通信都需要緩沖區,高速設備不會直接訪問低速設備。
- 設備分配與回收
- 設備
- 獨占式設備
- 分時式共享使用設備,比如對磁盤設備的I/O操作。
- 以SPOOLing方式使用外部設備,對I/O操作進行批處理,空間換時間的技術,虛擬設備。
- 設備分配的數據結構
設備控制表DCT,控制器控制表COCT,通道控制表CHCT,系統設備表SDT。
設備控制表表征一個設備,控制表表項就是各個設備的各個屬性。
每個DCT都需要一個表項來表示控制器,需要一個指向控制器控制表的指針,所以DCT和COCT有一一對應的關系。
現代操作系統的I/O控制采用的都是通道控制,設備控制器控制設備與內存交換數據,設備控制器又要請求通道為它服務,每個COCT必定有一個表項存放指向相應的通道控制表的指針,而一個通道可以為多個設備控制器服務,因此通道控制表有一個指針,指向一個表,這個表表達的是CHCT提供服務的那幾個設備控制器。
系統設備表SDT,記錄已經鏈接到系統中所有物理設備的情況,每個物理設備占一個表目。
合理的分配原則需要考慮,I/O設備的固有屬性,I/O設備的分配算法,I/O設備分配的安全性,以及I/O設備的獨立性。
- 設備分配的策略
分配的總原則,避免造成進程死鎖,將用戶程序和具體設備隔離開
分配的方式,靜態分配,動態分配。
- 靜態分配
主要用于對獨占設備的分配,一次性分配作業要求的所有設備,控制器。靜態分配不會出現死鎖,但是設備的使用效率低。 - 動態分配
進程執行過程中根據執行需要進行,進程需要設備時,通過系統調用命令向系統提出設備請求,由系統按照事先規定的策略給進程分配所需要的設備,I/O控制器,用完之后立即釋放,有可能造成進程死鎖。 - 設備分配算法
有先請求先分配,優先級高者優先。
共享設備可以被多個進程所共享,一般采用動態分配方式,但是每個I/O傳輸的單位時間內只被一個進程所占有。
- 設備分配的安全性
指設備分配中應該防止發生進程死鎖
- 安全分配方式
進程發出I/O請求后便進入阻塞狀態,直到I/O操作完成時才被喚醒,進程獲得某種設備后便阻塞,不能再請求任何資源,在阻塞時也不保持任何資源,缺點是CPU和I/O設備時串行工作的。 - 不安全分配方式
進程在I/O請求后繼續運行,需要時候發出第二個,第三個請求,當進程所請求設備被其他進程占用時候,才進入阻塞狀態,優點是一個進程操作多個設備,進程推進迅速,缺點是可能死鎖。
- 邏輯設備名到物理設備名的映射
設備獨立性是指應用程序獨立于具體使用的物理設備
邏輯設備表,用于將邏輯設備名映射為物理設備名,LUT表項包括邏輯設備名,物理設備名和設備驅動程序入口地址。系統通過查找LUT來尋找相應的物理設備和驅動程序。
- 整個系統設置一張LUT,不允許有相同的邏輯設備名,適用于單用戶系統中
- 每個用戶設置一張LUT,用戶登陸的時候,系統為用戶建立一個進程,同時建立一張LUT,將該表放入進程的PCB中。
- SPOOLing技術,假脫機技術
脫機輸入/輸出技術,利用專門的外圍控制機,將低速I/O設備上的數據傳送到高速磁盤中,或者相反,SPOOLing是外部設備同時聯機操作,假脫機輸入/輸出操作,系統中采用的一項將獨占設備改造成共享設備的技術。
- 輸入井和輸出井
輸入井模擬脫機輸入時的磁盤,收容I/O設備輸入的數據,輸出井模擬輸出時的磁盤,用于收容用戶程序的輸出數據。 - 輸入緩沖區和輸出緩沖區
內存中,輸入緩沖區用于暫存由輸入設備送來的數據,以后再傳入輸入井,輸出緩沖區用于暫存從輸出井送來的數據,以后再傳送給輸出設備。 - 輸入進程和輸出進程
輸入的時候,將用戶要求的數據從輸入機通過輸入緩沖區再送到輸入井,CPU需要輸入數據時候,直接將數據從輸入井讀入內存。輸出進程把用戶要求的輸出數據從內存送到輸出井,待輸出設備空閑時候,再將輸出井的數據經過輸出緩沖區送到輸出設備。
SPOOLing系統,提高了I/O速度,將獨占設備改造成共享設備,實現了虛擬設備功能。
在SPOOLing技術下,CPU要打印機打印的數據可以先輸出到磁盤的輸出井里,然后再做其他事情。將打印請求掛到等待隊列中,打印機有空的時候再把數據打印出來。
Tips:
- 磁盤時共享設備,一個時間間隔內可以被多個進程同時訪問。
- 緩沖池時系統公用資源,可以供多個進程共享。
- 緩沖區是一種臨界資源,使用緩沖區時都有申請和釋放(互斥)的問題來考慮。
- 如果有高優先級的操作,記錄鼠標活動情況,必須使用緩沖技術。
- 虛擬設備是靠將獨占設備改造成共享設備,提高系統資源/獨占設備利用率的SPOOLing技術實現的。
- SPOOLing系統由預輸入程序,井管理程序,緩輸出程序組成。