小部分I/O系統(tǒng)軟件放在了用戶應用層上。
庫函數(shù)(與應用程序鏈接)
假脫機技術(虛擬設備)
1)系統(tǒng)調用與庫函數(shù)
¨不允許運行在用戶態(tài)的應用進程,去直接調用運行在核心態(tài)(系統(tǒng)態(tài))的OS過程。
¨應用進程在運行時,又必須取得OS所提供的服務。
于是:
¨OS在用戶層中引入了系統(tǒng)調用,應用程序可以通過它,間接調用OS中的I/O過程,對I/O設備進行操作。
2)設備分配中的虛擬技術——SPOOLing技術
虛擬性是OS的四大特征之一。
多道程序技術將一臺物理CPU虛擬為多臺邏輯CPU,實現(xiàn)多個用戶共享一臺主機;
如何將一臺物理I/O設備虛擬為多臺邏輯I/O設備,允許多個用戶共享“同時使用” ?
假脫機技術
多道程序技術,專門利用程序模擬脫機I/O的外圍機,完成設備I/O操作。
¨稱這種聯(lián)機情況下實現(xiàn)的同時外圍操作為SPOOLing 技術(Simultaneaus Periphernal Operating On—Line,或稱為假脫機操作)
¨一般進程對獨占設備的需求被假脫機模擬到磁盤上。所以實現(xiàn)設備虛擬,多道是前提,還需高速、大容量、可隨機存取的外存支持。
SPOOLing系統(tǒng)的特點
1.提高了I/O的速度。利用輸入輸出井模擬成脫機輸入輸出,緩和了CPU和I/O設備速度不匹配的矛盾。
2.將獨占設備改造為共享設備。并沒有為進程分配設備,而是為進程分配一存儲區(qū)和建立一張I/O請求表。
3.最終,實現(xiàn)了虛擬設備功能。多個進程可“同時”使用一臺獨占設備。
緩沖管理
I/O控制方式減少CPU對I/O的干預提高利用率;
緩沖則通過緩和CPU和I/O設備速度不匹配矛盾,增加CPU和I/O設備的并行性,提高利用率。
現(xiàn)代OS中,幾乎所有的I/O設備與處理機交換數(shù)據(jù)時,都用了緩沖區(qū)。
①循環(huán)緩沖的組成
多個緩沖區(qū)。大小相同,三種類型:
¨預備裝輸入數(shù)據(jù)的空緩沖區(qū)R
¨裝滿數(shù)據(jù)的緩沖區(qū)G
¨計算進程正在使用的現(xiàn)行工作緩沖區(qū)C
多個指針。
¨指示正在使用的緩沖區(qū)C的指針Current
¨指示計算進程下一個可取的緩沖區(qū)G的指針Nextg
¨指示輸入進程下次可放的緩沖區(qū)R的指針Nexti
②循環(huán)緩沖區(qū)的使用
計算進程(CPU)和輸入進程(I/O操作)可利用兩個過程來使用循環(huán)緩沖區(qū)。
主要就是利用指針,操作上述不同類型緩沖區(qū)
Getbuf過程:使用緩沖區(qū)時,可調用該過程
計算進程取:current=Nextg,G—>C,nextg下移一個。
輸入進程放:current=nexti,R—>C,nexti下移一個
Releasebuf過程:
計算進程:C->R
輸入進程:C->G
③進程同步
兩個進程的控制:輸入進程和計算進程并行執(zhí)行,如何控制相應的兩個指針不斷順時針方向移動,這樣就可能出現(xiàn)兩種情況:
1.Nexti趕上Nextg。意味著輸入速度大于計算速度,緩沖區(qū)滿,只能阻塞輸入進程等計算進程取,此情況稱為系統(tǒng)受計算限制。
2.Nextg趕上Nexti。意味著輸入速度低于計算速度,緩沖區(qū)空,只能阻塞計算進程等輸入進程放,此情況稱為系統(tǒng)受I/O限制。
3)緩沖池(Buffer Pool)
循環(huán)緩沖的問題
不能同時雙向通訊
利用率不高。緩沖區(qū)是專用緩沖。(每個進程都要維護自己的一個循環(huán)緩沖區(qū)),使用有剩余時也不給其他進程使用,消耗大量內(nèi)存空間。
系統(tǒng)并發(fā)程序很多時,許多這樣的循環(huán)緩沖需要管理,比較復雜。
為提高緩沖區(qū)的利用率,目前廣泛流行緩沖池,在池中設置多個可供若干個進程共享的緩沖區(qū)。
①緩沖池的組成
對于既可輸入又可輸出的公用緩沖池,至少應含有下列三種類型的緩沖區(qū):
1.空緩沖區(qū);
2.裝滿輸入數(shù)據(jù)的緩沖區(qū);
3.裝滿輸出數(shù)據(jù)的緩沖區(qū);
? 為方便管理,將上述類型相同的緩沖區(qū)連成隊列
¨空緩沖區(qū)隊列(所有進程都可用)
¨輸入隊列(n個進程有各自的隊列)
¨輸出隊列(n個進程有各自的隊列)
*(隊列長度不固定,根據(jù)進程實際情況靈活變動,需要多少用多少)
②緩沖區(qū)的工作方式
四種工作方式:
1.收容輸入:Getbuf(emq),hin;輸入數(shù)據(jù)填入一空緩沖區(qū);Putbuf(inq,hin)
2.提取輸入: Getbuf(inq),sin;從輸入緩沖隊列中取出一數(shù)據(jù)區(qū)的內(nèi)容;Putbuf(emq,sin)
3.收容輸出: Getbuf(emq),hout;輸出數(shù)據(jù)填入一空緩沖區(qū);Putbuf(outq,hout)
4.提取輸出: Getbuf(outq),sout;從輸出緩沖隊列中取一數(shù)據(jù)區(qū)的內(nèi)容;Putbuf(emq,sout)
磁盤調度方法
對所有請求訪問磁盤的進程進行合理調度,使對磁盤的平均訪問時間最小。
目標:使平均尋道時間最少。
算法:
¨FCFS
¨最短尋道時間優(yōu)先SSTF
¨掃描算法SCAN(磁盤電梯調度算法)
循環(huán)掃描算法CSCAN
N-Step-SCAN算法
FSCAN算法
③掃描算法SCAN(磁盤電梯調度算法)
SSTF會導致“饑餓”現(xiàn)象
¨總選擇最近的磁道訪問,遠磁道請求的進程會長時間得不到執(zhí)行。
改進:
¨考慮距離的同時,更優(yōu)先考慮方向
SCAN算法
¨規(guī)定磁頭移動方向:自里向外,再自外向里移動。
¨后續(xù)的I/O磁道請求,哪個在規(guī)定方向上距離最近,就先執(zhí)行哪個。
¨如當前為100,后續(xù)要求55,86,95,180,165,105
先由內(nèi)向外:選最近的105執(zhí)行,再判斷剩余的,選165,180。
再由外向內(nèi):95,86,55
循環(huán)掃描CSCAN
SCAN的錯過問題:
¨容易錯過與當前磁道距離近,但方向不一致的磁道。
修改:將SCAN規(guī)定的移動方向改為“單向移動”
¨由里向外后,再由里向外。
N-Step-SCAN
前述最近尋道算法共同問題:
¨“磁臂粘著”——磁頭靜止在一個磁道上,導致其它進程無法及時進行磁盤I/O。(因:高密度盤,進程的讀寫可能集中在某一磁道)
¨如現(xiàn)有一系列請求:
3 5 2 3 3 3 2 3 3 2 3 3 4 4 5 2 3 3 3 4 4 2 3 3 3 2 2 2 3
不管哪種算法,從3開始向下執(zhí)行會是
3 3 3 3 3 3 3 3 3….2 2 2 2 2 2 … 4 4 ….
對磁盤的訪問總是由缺頁引起的:
¨CPU給出地址,需要訪問某存儲單元;
¨并行進行TLB查找和cache查找;
¨TLB查找后申明沒有找到;
¨停止并行查找,并通知操作系統(tǒng)處理;
¨操作系統(tǒng)檢查頁表,發(fā)現(xiàn)該頁不在內(nèi)存中,需要從硬盤調入。應該如何進行呢?
磁盤訪問:
1 操作系統(tǒng)從主存中選擇一頁準備換出,為調入的頁安排存放空間;
2 若被換出的頁是“臟”頁,需要將其寫回磁盤存儲;
3 操作系統(tǒng)申請I/O總線;
4 獲得批準后,發(fā)送寫命令給I/O 設備(磁盤)。
5 緊跟著傳送需要寫回的頁的全部數(shù)據(jù)。
6 I/O控制器發(fā)現(xiàn)發(fā)給自己的寫命令
7 加入到握手協(xié)議,并接受數(shù)據(jù)。
8 根據(jù)數(shù)據(jù)要寫入的地址,讀/寫頭移動到正確的柱面,同時,將數(shù)據(jù)接收到緩沖區(qū)。
9 尋道結束后,等待相應的扇區(qū)旋轉到磁頭下面,將數(shù)據(jù)寫入扇區(qū)中。?
10 在寫入數(shù)據(jù)間隙,計算校驗碼并寫入扇區(qū)中。
11 下一步,操作系統(tǒng)繼續(xù)申請總線(如果還保持總線控制權,則不必申請)。
12 得到授權后,向磁盤發(fā)出讀命令。?
13 然后,磁盤識別地址,并轉換為相應的地址段。
14 尋道,將讀/寫頭移動到指定位置。
15 從指定扇區(qū)中讀去數(shù)據(jù),并進行校驗。
16 磁盤申請I/O總線。
17 得到授權后,將數(shù)據(jù)通過總線送到內(nèi)存。