對設(shè)備進行控制的方法組成了操作系統(tǒng)內(nèi)核的I/O子系統(tǒng),提供的服務(wù)有I/O調(diào)度某宪,緩沖與高速緩存,設(shè)備分配與回收锐朴,假脫機兴喂,設(shè)備保護,差錯處理焚志。
- I/O調(diào)度
確定一個好的順序來執(zhí)行這些I/O請求衣迷,來改善系統(tǒng)整體性能,進程之間公平的共享設(shè)備訪問酱酬,減少I/O完成所需要的平均時間壶谒。
為每個設(shè)備維護一個請求隊列來實現(xiàn)調(diào)度,當(dāng)一個應(yīng)用程序執(zhí)行阻塞I/O系統(tǒng)調(diào)用時候膳沽,請求加到相應(yīng)設(shè)備的隊列上汗菜。I/O調(diào)度會重新安排隊列順序以改善系統(tǒng)總體效率和應(yīng)用程序的平均響應(yīng)時間。
磁盤調(diào)度算法其實就是I/O調(diào)度的一種挑社。 - 高速緩存和緩沖區(qū)
- 磁盤高速緩存
使用磁盤高速緩存技術(shù)來提高磁盤的I/O速度陨界,正在運行的進程的指令既存儲在磁盤上,也存儲在物理內(nèi)存中痛阻,也被復(fù)制到CPU的二級和一級高速緩存中菌瘪。
磁盤高速緩存技術(shù)是指利用內(nèi)存中的存儲空間來暫存從磁盤中讀出的一系列盤塊中的信息。磁盤高速緩存在邏輯上屬于磁盤录平,物理上是駐留在內(nèi)存中的盤塊麻车。
高速緩存分為兩種形式缀皱,一是內(nèi)存中開辟單獨的存儲空間作為磁盤高速緩存斗这, 大小固定。另一種是未利用的內(nèi)存空間作為緩沖池啤斗,供請求分頁系統(tǒng)和磁盤I/O時共享表箭。 - 緩沖區(qū)
CPU和I/O設(shè)備間速度不匹配的矛盾
減少對CPU的中斷頻率
解決基本數(shù)據(jù)單元大小不匹配的問題
提高CPU和I/O設(shè)備之間的并行性
緩沖區(qū),內(nèi)存區(qū)域钮莲,當(dāng)緩沖區(qū)數(shù)據(jù)非空的時候免钻,不能往緩沖區(qū)沖入數(shù)據(jù)彼水,只能從緩沖區(qū)把數(shù)據(jù)傳出。緩沖區(qū)為空的時候极舔,可以往緩沖區(qū)沖入數(shù)據(jù)凤覆,但是必須把緩沖區(qū)充滿后,才能從緩沖區(qū)把數(shù)據(jù)傳出拆魏。- 單緩沖
設(shè)備和處理機之間設(shè)置一個緩沖區(qū)盯桦,設(shè)備和處理機交換數(shù)據(jù)的時候,先把交換數(shù)據(jù)寫入緩沖區(qū)渤刃,然后需要數(shù)據(jù)的設(shè)備或者處理機從緩沖區(qū)拿走數(shù)據(jù)拥峦。
數(shù)據(jù)沖入緩沖區(qū)的時間為T,操作系統(tǒng)將緩沖區(qū)數(shù)據(jù)傳入用戶區(qū)時間為M卖子,CPU處理時間為C略号。
每塊數(shù)據(jù)塊的處理時間為max(C,T)+M,根據(jù)圖來進行回憶分析洋闽。 - 雙緩沖
CPU在M時間是空閑的玄柠,所以在緩沖區(qū)1充滿后,開始沖緩沖區(qū)2诫舅,同時CPU將緩沖區(qū)1的數(shù)據(jù)取出到用戶進程處理随闪,然后緩沖區(qū)1數(shù)據(jù)處理完后,緩沖區(qū)2如果滿的話骚勘,繼續(xù)處理铐伴,然后填緩沖區(qū)1。如果沒滿俏讹,一直到裝滿再讓處理機從緩沖區(qū)2取數(shù)據(jù)当宴。
處理一塊數(shù)據(jù)的用時,分為T>C+M或者T<C+M的情況泽疆,然后根據(jù)圖形和原理進行分析户矢,Max(C+M,T)
T>C+M使塊設(shè)備連續(xù)輸入,T<C+M使CPU不必等待設(shè)備輸入殉疼,CPU一直工作梯浪。
對于字符設(shè)備,行輸入方式瓢娜,雙緩沖可以在輸入第一行之后挂洛,CPU執(zhí)行命令的時候繼續(xù)輸入下一行的數(shù)據(jù)。
兩臺機器之間通信如果只配置了單緩沖眠砾,那么同時只能實現(xiàn)單方向的數(shù)據(jù)傳輸虏劲,實現(xiàn)雙向數(shù)據(jù)傳輸,則在兩臺機器上都設(shè)置兩個緩沖區(qū),一個用作發(fā)送緩沖區(qū)柒巫,另一個用作接收緩沖區(qū)励堡。 - 循環(huán)緩沖區(qū)
包含多個大小相等的緩沖區(qū),每個緩沖區(qū)中有一個鏈接指針指向下一個緩沖區(qū)堡掏,最后一個緩沖區(qū)指向第一個緩沖區(qū)应结,多個緩沖區(qū)構(gòu)成一個環(huán)形。
in指針指向可以輸入數(shù)據(jù)的第一個空緩沖區(qū)泉唁,out指針指向可以提取數(shù)據(jù)的第一個滿緩沖區(qū)摊趾。 - 緩沖池
由多個系統(tǒng)公用的緩沖區(qū)組成,緩沖區(qū)形成三個隊列:空緩沖隊列游两,裝滿輸入數(shù)據(jù)的緩沖隊列砾层,裝滿輸出數(shù)據(jù)的緩沖隊列。還有四種緩沖區(qū)贱案,用于收容輸入數(shù)據(jù)的工作緩沖區(qū)肛炮,用于提取輸入數(shù)據(jù)的工作緩沖區(qū),用于收容輸出數(shù)據(jù)的工作緩沖區(qū)宝踪,用于提取輸出數(shù)據(jù)的工作緩沖區(qū)侨糟。
工作過程:當(dāng)輸入進程需要輸入數(shù)據(jù)的時候,從空緩沖隊列的隊首摘下一個空緩沖區(qū)瘩燥,作為收容輸入工作緩沖區(qū)秕重,把輸入數(shù)據(jù)輸入其中,裝滿后把它掛到輸入隊列隊尾厉膀,計算進程需要輸入數(shù)據(jù)的時候溶耘,從輸入隊列取得一個緩沖區(qū)作為提取輸入工作緩沖區(qū),數(shù)據(jù)用完之后將它掛到空緩沖隊列尾服鹅。
- 單緩沖
- 高速緩存和緩沖區(qū)
高速緩存是可以保存數(shù)據(jù)拷貝的高速存儲器凳兵,訪問高速緩存比訪問原始數(shù)據(jù)更加有效,速度更快企软。而緩沖區(qū)是高速設(shè)備和低速設(shè)備的通信都需要緩沖區(qū)庐扫,高速設(shè)備不會直接訪問低速設(shè)備。
- 設(shè)備分配與回收
- 設(shè)備
- 獨占式設(shè)備
- 分時式共享使用設(shè)備仗哨,比如對磁盤設(shè)備的I/O操作形庭。
- 以SPOOLing方式使用外部設(shè)備,對I/O操作進行批處理厌漂,空間換時間的技術(shù)萨醒,虛擬設(shè)備。
- 設(shè)備分配的數(shù)據(jù)結(jié)構(gòu)
設(shè)備控制表DCT桩卵,控制器控制表COCT验靡,通道控制表CHCT,系統(tǒng)設(shè)備表SDT雏节。
設(shè)備控制表表征一個設(shè)備胜嗓,控制表表項就是各個設(shè)備的各個屬性。
每個DCT都需要一個表項來表示控制器钩乍,需要一個指向控制器控制表的指針辞州,所以DCT和COCT有一一對應(yīng)的關(guān)系。
現(xiàn)代操作系統(tǒng)的I/O控制采用的都是通道控制寥粹,設(shè)備控制器控制設(shè)備與內(nèi)存交換數(shù)據(jù)变过,設(shè)備控制器又要請求通道為它服務(wù),每個COCT必定有一個表項存放指向相應(yīng)的通道控制表的指針涝涤,而一個通道可以為多個設(shè)備控制器服務(wù)媚狰,因此通道控制表有一個指針,指向一個表阔拳,這個表表達(dá)的是CHCT提供服務(wù)的那幾個設(shè)備控制器崭孤。
系統(tǒng)設(shè)備表SDT,記錄已經(jīng)鏈接到系統(tǒng)中所有物理設(shè)備的情況糊肠,每個物理設(shè)備占一個表目辨宠。
合理的分配原則需要考慮,I/O設(shè)備的固有屬性货裹,I/O設(shè)備的分配算法嗤形,I/O設(shè)備分配的安全性,以及I/O設(shè)備的獨立性弧圆。
- 設(shè)備分配的策略
分配的總原則赋兵,避免造成進程死鎖,將用戶程序和具體設(shè)備隔離開
分配的方式搔预,靜態(tài)分配毡惜,動態(tài)分配。
- 靜態(tài)分配
主要用于對獨占設(shè)備的分配斯撮,一次性分配作業(yè)要求的所有設(shè)備经伙,控制器。靜態(tài)分配不會出現(xiàn)死鎖勿锅,但是設(shè)備的使用效率低帕膜。 - 動態(tài)分配
進程執(zhí)行過程中根據(jù)執(zhí)行需要進行,進程需要設(shè)備時溢十,通過系統(tǒng)調(diào)用命令向系統(tǒng)提出設(shè)備請求垮刹,由系統(tǒng)按照事先規(guī)定的策略給進程分配所需要的設(shè)備,I/O控制器张弛,用完之后立即釋放荒典,有可能造成進程死鎖酪劫。 - 設(shè)備分配算法
有先請求先分配,優(yōu)先級高者優(yōu)先寺董。
共享設(shè)備可以被多個進程所共享覆糟,一般采用動態(tài)分配方式,但是每個I/O傳輸?shù)膯挝粫r間內(nèi)只被一個進程所占有遮咖。
- 設(shè)備分配的安全性
指設(shè)備分配中應(yīng)該防止發(fā)生進程死鎖
- 安全分配方式
進程發(fā)出I/O請求后便進入阻塞狀態(tài)滩字,直到I/O操作完成時才被喚醒,進程獲得某種設(shè)備后便阻塞御吞,不能再請求任何資源麦箍,在阻塞時也不保持任何資源,缺點是CPU和I/O設(shè)備時串行工作的陶珠。 - 不安全分配方式
進程在I/O請求后繼續(xù)運行挟裂,需要時候發(fā)出第二個,第三個請求揍诽,當(dāng)進程所請求設(shè)備被其他進程占用時候话瞧,才進入阻塞狀態(tài),優(yōu)點是一個進程操作多個設(shè)備寝姿,進程推進迅速交排,缺點是可能死鎖。
- 邏輯設(shè)備名到物理設(shè)備名的映射
設(shè)備獨立性是指應(yīng)用程序獨立于具體使用的物理設(shè)備
邏輯設(shè)備表饵筑,用于將邏輯設(shè)備名映射為物理設(shè)備名埃篓,LUT表項包括邏輯設(shè)備名,物理設(shè)備名和設(shè)備驅(qū)動程序入口地址根资。系統(tǒng)通過查找LUT來尋找相應(yīng)的物理設(shè)備和驅(qū)動程序架专。
- 整個系統(tǒng)設(shè)置一張LUT,不允許有相同的邏輯設(shè)備名玄帕,適用于單用戶系統(tǒng)中
- 每個用戶設(shè)置一張LUT部脚,用戶登陸的時候,系統(tǒng)為用戶建立一個進程裤纹,同時建立一張LUT委刘,將該表放入進程的PCB中。
- SPOOLing技術(shù)鹰椒,假脫機技術(shù)
脫機輸入/輸出技術(shù)锡移,利用專門的外圍控制機,將低速I/O設(shè)備上的數(shù)據(jù)傳送到高速磁盤中漆际,或者相反淆珊,SPOOLing是外部設(shè)備同時聯(lián)機操作,假脫機輸入/輸出操作奸汇,系統(tǒng)中采用的一項將獨占設(shè)備改造成共享設(shè)備的技術(shù)施符。
- 輸入井和輸出井
輸入井模擬脫機輸入時的磁盤往声,收容I/O設(shè)備輸入的數(shù)據(jù),輸出井模擬輸出時的磁盤戳吝,用于收容用戶程序的輸出數(shù)據(jù)浩销。 - 輸入緩沖區(qū)和輸出緩沖區(qū)
內(nèi)存中,輸入緩沖區(qū)用于暫存由輸入設(shè)備送來的數(shù)據(jù)骨坑,以后再傳入輸入井撼嗓,輸出緩沖區(qū)用于暫存從輸出井送來的數(shù)據(jù)柬采,以后再傳送給輸出設(shè)備欢唾。 - 輸入進程和輸出進程
輸入的時候,將用戶要求的數(shù)據(jù)從輸入機通過輸入緩沖區(qū)再送到輸入井粉捻,CPU需要輸入數(shù)據(jù)時候礁遣,直接將數(shù)據(jù)從輸入井讀入內(nèi)存。輸出進程把用戶要求的輸出數(shù)據(jù)從內(nèi)存送到輸出井肩刃,待輸出設(shè)備空閑時候祟霍,再將輸出井的數(shù)據(jù)經(jīng)過輸出緩沖區(qū)送到輸出設(shè)備。
SPOOLing系統(tǒng)盈包,提高了I/O速度沸呐,將獨占設(shè)備改造成共享設(shè)備,實現(xiàn)了虛擬設(shè)備功能呢燥。
在SPOOLing技術(shù)下崭添,CPU要打印機打印的數(shù)據(jù)可以先輸出到磁盤的輸出井里,然后再做其他事情叛氨。將打印請求掛到等待隊列中呼渣,打印機有空的時候再把數(shù)據(jù)打印出來。
Tips:
- 磁盤時共享設(shè)備寞埠,一個時間間隔內(nèi)可以被多個進程同時訪問屁置。
- 緩沖池時系統(tǒng)公用資源,可以供多個進程共享仁连。
- 緩沖區(qū)是一種臨界資源蓝角,使用緩沖區(qū)時都有申請和釋放(互斥)的問題來考慮。
- 如果有高優(yōu)先級的操作饭冬,記錄鼠標(biāo)活動情況帅容,必須使用緩沖技術(shù)。
- 虛擬設(shè)備是靠將獨占設(shè)備改造成共享設(shè)備伍伤,提高系統(tǒng)資源/獨占設(shè)備利用率的SPOOLing技術(shù)實現(xiàn)的并徘。
- SPOOLing系統(tǒng)由預(yù)輸入程序,井管理程序扰魂,緩輸出程序組成麦乞。