小部分I/O系統(tǒng)軟件放在了用戶應(yīng)用層上绿聘。
庫函數(shù)(與應(yīng)用程序鏈接)
假脫機(jī)技術(shù)(虛擬設(shè)備)
1)系統(tǒng)調(diào)用與庫函數(shù)
¨不允許運(yùn)行在用戶態(tài)的應(yīng)用進(jìn)程岛啸,去直接調(diào)用運(yùn)行在核心態(tài)(系統(tǒng)態(tài))的OS過程奕锌。
¨應(yīng)用進(jìn)程在運(yùn)行時(shí)焙蚓,又必須取得OS所提供的服務(wù)痕寓。
于是:
¨OS在用戶層中引入了系統(tǒng)調(diào)用寝受,應(yīng)用程序可以通過它偎窘,間接調(diào)用OS中的I/O過程乌助,對(duì)I/O設(shè)備進(jìn)行操作。
2)設(shè)備分配中的虛擬技術(shù)——SPOOLing技術(shù)
虛擬性是OS的四大特征之一陌知。
多道程序技術(shù)將一臺(tái)物理CPU虛擬為多臺(tái)邏輯CPU他托,實(shí)現(xiàn)多個(gè)用戶共享一臺(tái)主機(jī);
如何將一臺(tái)物理I/O設(shè)備虛擬為多臺(tái)邏輯I/O設(shè)備仆葡,允許多個(gè)用戶共享“同時(shí)使用” 赏参?
假脫機(jī)技術(shù)
多道程序技術(shù),專門利用程序模擬脫機(jī)I/O的外圍機(jī)沿盅,完成設(shè)備I/O操作把篓。
¨稱這種聯(lián)機(jī)情況下實(shí)現(xiàn)的同時(shí)外圍操作為SPOOLing 技術(shù)(Simultaneaus Periphernal Operating On—Line,或稱為假脫機(jī)操作)
¨一般進(jìn)程對(duì)獨(dú)占設(shè)備的需求被假脫機(jī)模擬到磁盤上腰涧。所以實(shí)現(xiàn)設(shè)備虛擬韧掩,多道是前提,還需高速窖铡、大容量揍很、可隨機(jī)存取的外存支持。
SPOOLing系統(tǒng)的特點(diǎn)
1.提高了I/O的速度万伤。利用輸入輸出井模擬成脫機(jī)輸入輸出,緩和了CPU和I/O設(shè)備速度不匹配的矛盾呜袁。
2.將獨(dú)占設(shè)備改造為共享設(shè)備敌买。并沒有為進(jìn)程分配設(shè)備,而是為進(jìn)程分配一存儲(chǔ)區(qū)和建立一張I/O請(qǐng)求表阶界。
3.最終虹钮,實(shí)現(xiàn)了虛擬設(shè)備功能聋庵。多個(gè)進(jìn)程可“同時(shí)”使用一臺(tái)獨(dú)占設(shè)備。
緩沖管理
I/O控制方式減少CPU對(duì)I/O的干預(yù)提高利用率芙粱;
緩沖則通過緩和CPU和I/O設(shè)備速度不匹配矛盾祭玉,增加CPU和I/O設(shè)備的并行性,提高利用率春畔。
現(xiàn)代OS中脱货,幾乎所有的I/O設(shè)備與處理機(jī)交換數(shù)據(jù)時(shí),都用了緩沖區(qū)律姨。
①循環(huán)緩沖的組成
多個(gè)緩沖區(qū)振峻。大小相同,三種類型:
¨預(yù)備裝輸入數(shù)據(jù)的空緩沖區(qū)R
¨裝滿數(shù)據(jù)的緩沖區(qū)G
¨計(jì)算進(jìn)程正在使用的現(xiàn)行工作緩沖區(qū)C
多個(gè)指針择份。
¨指示正在使用的緩沖區(qū)C的指針Current
¨指示計(jì)算進(jìn)程下一個(gè)可取的緩沖區(qū)G的指針Nextg
¨指示輸入進(jìn)程下次可放的緩沖區(qū)R的指針Nexti
②循環(huán)緩沖區(qū)的使用
計(jì)算進(jìn)程(CPU)和輸入進(jìn)程(I/O操作)可利用兩個(gè)過程來使用循環(huán)緩沖區(qū)扣孟。
主要就是利用指針,操作上述不同類型緩沖區(qū)
Getbuf過程:使用緩沖區(qū)時(shí)荣赶,可調(diào)用該過程
計(jì)算進(jìn)程确锛邸:current=Nextg,G—>C,nextg下移一個(gè)拔创。
輸入進(jìn)程放:current=nexti利诺,R—>C,nexti下移一個(gè)
Releasebuf過程:
計(jì)算進(jìn)程:C->R
輸入進(jìn)程:C->G
③進(jìn)程同步
兩個(gè)進(jìn)程的控制:輸入進(jìn)程和計(jì)算進(jìn)程并行執(zhí)行伏蚊,如何控制相應(yīng)的兩個(gè)指針不斷順時(shí)針方向移動(dòng)立轧,這樣就可能出現(xiàn)兩種情況:
1.Nexti趕上Nextg。意味著輸入速度大于計(jì)算速度躏吊,緩沖區(qū)滿氛改,只能阻塞輸入進(jìn)程等計(jì)算進(jìn)程取,此情況稱為系統(tǒng)受計(jì)算限制比伏。
2.Nextg趕上Nexti胜卤。意味著輸入速度低于計(jì)算速度,緩沖區(qū)空赁项,只能阻塞計(jì)算進(jìn)程等輸入進(jìn)程放葛躏,此情況稱為系統(tǒng)受I/O限制。
3)緩沖池(Buffer Pool)
循環(huán)緩沖的問題
不能同時(shí)雙向通訊
利用率不高悠菜。緩沖區(qū)是專用緩沖舰攒。(每個(gè)進(jìn)程都要維護(hù)自己的一個(gè)循環(huán)緩沖區(qū)),使用有剩余時(shí)也不給其他進(jìn)程使用悔醋,消耗大量內(nèi)存空間摩窃。
系統(tǒng)并發(fā)程序很多時(shí),許多這樣的循環(huán)緩沖需要管理,比較復(fù)雜猾愿。
為提高緩沖區(qū)的利用率鹦聪,目前廣泛流行緩沖池,在池中設(shè)置多個(gè)可供若干個(gè)進(jìn)程共享的緩沖區(qū)蒂秘。
①緩沖池的組成
對(duì)于既可輸入又可輸出的公用緩沖池泽本,至少應(yīng)含有下列三種類型的緩沖區(qū):
1.空緩沖區(qū);
2.裝滿輸入數(shù)據(jù)的緩沖區(qū)姻僧;
3.裝滿輸出數(shù)據(jù)的緩沖區(qū)规丽;
? 為方便管理,將上述類型相同的緩沖區(qū)連成隊(duì)列
¨空緩沖區(qū)隊(duì)列(所有進(jìn)程都可用)
¨輸入隊(duì)列(n個(gè)進(jìn)程有各自的隊(duì)列)
¨輸出隊(duì)列(n個(gè)進(jìn)程有各自的隊(duì)列)
*(隊(duì)列長度不固定段化,根據(jù)進(jìn)程實(shí)際情況靈活變動(dòng)嘁捷,需要多少用多少)
②緩沖區(qū)的工作方式
四種工作方式:
1.收容輸入:Getbuf(emq),hin;輸入數(shù)據(jù)填入一空緩沖區(qū)显熏;Putbuf(inq,hin)
2.提取輸入: Getbuf(inq),sin雄嚣;從輸入緩沖隊(duì)列中取出一數(shù)據(jù)區(qū)的內(nèi)容;Putbuf(emq,sin)
3.收容輸出: Getbuf(emq),hout喘蟆;輸出數(shù)據(jù)填入一空緩沖區(qū)缓升;Putbuf(outq,hout)
4.提取輸出: Getbuf(outq),sout;從輸出緩沖隊(duì)列中取一數(shù)據(jù)區(qū)的內(nèi)容蕴轨;Putbuf(emq,sout)
磁盤調(diào)度方法
對(duì)所有請(qǐng)求訪問磁盤的進(jìn)程進(jìn)行合理調(diào)度港谊,使對(duì)磁盤的平均訪問時(shí)間最小。
目標(biāo):使平均尋道時(shí)間最少橙弱。
算法:
¨FCFS
¨最短尋道時(shí)間優(yōu)先SSTF
¨掃描算法SCAN(磁盤電梯調(diào)度算法)
循環(huán)掃描算法CSCAN
N-Step-SCAN算法
FSCAN算法
③掃描算法SCAN(磁盤電梯調(diào)度算法)
SSTF會(huì)導(dǎo)致“饑餓”現(xiàn)象
¨總選擇最近的磁道訪問歧寺,遠(yuǎn)磁道請(qǐng)求的進(jìn)程會(huì)長時(shí)間得不到執(zhí)行。
改進(jìn):
¨考慮距離的同時(shí)棘脐,更優(yōu)先考慮方向
SCAN算法
¨規(guī)定磁頭移動(dòng)方向:自里向外斜筐,再自外向里移動(dòng)。
¨后續(xù)的I/O磁道請(qǐng)求蛀缝,哪個(gè)在規(guī)定方向上距離最近顷链,就先執(zhí)行哪個(gè)。
¨如當(dāng)前為100屈梁,后續(xù)要求55嗤练,86,95在讶,180煞抬,165,105
先由內(nèi)向外:選最近的105執(zhí)行构哺,再判斷剩余的此疹,選165,180。
再由外向內(nèi):95蝗碎,86,55
循環(huán)掃描CSCAN
SCAN的錯(cuò)過問題:
¨容易錯(cuò)過與當(dāng)前磁道距離近旗扑,但方向不一致的磁道蹦骑。
修改:將SCAN規(guī)定的移動(dòng)方向改為“單向移動(dòng)”
¨由里向外后,再由里向外臀防。
N-Step-SCAN
前述最近尋道算法共同問題:
¨“磁臂粘著”——磁頭靜止在一個(gè)磁道上眠菇,導(dǎo)致其它進(jìn)程無法及時(shí)進(jìn)行磁盤I/O。(因:高密度盤袱衷,進(jìn)程的讀寫可能集中在某一磁道)
¨如現(xiàn)有一系列請(qǐng)求:
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í)行會(huì)是
3 3 3 3 3 3 3 3 3….2 2 2 2 2 2 … 4 4 ….
對(duì)磁盤的訪問總是由缺頁引起的:
¨CPU給出地址,需要訪問某存儲(chǔ)單元致燥;
¨并行進(jìn)行TLB查找和cache查找登疗;
¨TLB查找后申明沒有找到;
¨停止并行查找嫌蚤,并通知操作系統(tǒng)處理辐益;
¨操作系統(tǒng)檢查頁表,發(fā)現(xiàn)該頁不在內(nèi)存中脱吱,需要從硬盤調(diào)入智政。應(yīng)該如何進(jìn)行呢?
磁盤訪問:
1 操作系統(tǒng)從主存中選擇一頁準(zhǔn)備換出箱蝠,為調(diào)入的頁安排存放空間续捂;
2 若被換出的頁是“臟”頁,需要將其寫回磁盤存儲(chǔ)宦搬;
3 操作系統(tǒng)申請(qǐng)I/O總線牙瓢;
4 獲得批準(zhǔn)后,發(fā)送寫命令給I/O 設(shè)備(磁盤)床三。
5 緊跟著傳送需要寫回的頁的全部數(shù)據(jù)一罩。
6 I/O控制器發(fā)現(xiàn)發(fā)給自己的寫命令
7 加入到握手協(xié)議,并接受數(shù)據(jù)撇簿。
8 根據(jù)數(shù)據(jù)要寫入的地址聂渊,讀/寫頭移動(dòng)到正確的柱面,同時(shí)四瘫,將數(shù)據(jù)接收到緩沖區(qū)汉嗽。
9 尋道結(jié)束后,等待相應(yīng)的扇區(qū)旋轉(zhuǎn)到磁頭下面找蜜,將數(shù)據(jù)寫入扇區(qū)中饼暑。?
10 在寫入數(shù)據(jù)間隙,計(jì)算校驗(yàn)碼并寫入扇區(qū)中。
11 下一步弓叛,操作系統(tǒng)繼續(xù)申請(qǐng)總線(如果還保持總線控制權(quán)彰居,則不必申請(qǐng))。
12 得到授權(quán)后撰筷,向磁盤發(fā)出讀命令陈惰。?
13 然后,磁盤識(shí)別地址毕籽,并轉(zhuǎn)換為相應(yīng)的地址段抬闯。
14 尋道,將讀/寫頭移動(dòng)到指定位置关筒。
15 從指定扇區(qū)中讀去數(shù)據(jù)溶握,并進(jìn)行校驗(yàn)。
16 磁盤申請(qǐng)I/O總線蒸播。
17 得到授權(quán)后睡榆,將數(shù)據(jù)通過總線送到內(nèi)存。