第6章 6-2設備管理、用戶層IO軟件、緩沖、磁盤

6.用戶層的I/O軟件

小部分I/O系統軟件放在了用戶應用層上。

????庫函數(與應用程序鏈接)

????假脫機技術(虛擬設備)

1)系統調用與庫函數

不允許運行在用戶態的應用進程,去直接調用運行在核心態(系統態)的OS過程。

應用進程在運行時,又必須取得OS所提供的服務。

于是:

OS在用戶層中引入了系統調用,應用程序可以通過它,間接調用OS中的I/O過程,對I/O設備進行操作。

2)設備分配中的虛擬技術? —— SPOOLing技術

虛擬性是OS的四大特征之一。

多道程序技術將一臺物理CPU虛擬為多臺邏輯CPU,實現多個用戶共享一臺主機;

如何將一臺物理I/O設備虛擬為多臺邏輯I/O設備,允許多個用戶共享“同時使用” ?

回顧脫機技術

假脫機技術

多道程序技術,專門利用程序模擬脫機I/O的外圍機,完成設備I/O操作。

????稱這種聯機情況下實現的同時外圍操作為SPOOLing 技術(Simultaneaus Periphernal Operating On—Line,或稱為假脫機操作)

????一般進程對獨占設備的需求被假脫機模擬到磁盤上。所以實現設備虛擬,多道是前提,還需高速、大容量、可隨機存取的外存支持。

SPOOLing系統的組成

主要有三大部分(如下頁圖)

????輸入井和輸出井:磁盤上開辟兩大存儲空間。輸入井模擬脫機輸入的磁盤設備,輸出井模擬脫機輸出時的磁盤。

????輸入緩沖區和輸出緩沖區:為緩解速度矛盾,內存中開辟兩大緩沖空間,輸入緩沖區暫存輸入設備送來的數據,再送給輸入井;輸出緩沖區暫存輸出井送來的數據,再送輸出設備。

????輸入進程和輸出進程。

????????用一進程模擬脫機輸入時外圍設備控制器的功能,把低速輸入設備上的數據傳送到高速磁盤上;

????????用另一進程模擬脫機輸出時外圍設備控制器的功能,把數據從磁盤上傳送到低速輸出設備上。

SPOOLing系統的組成

SPOOLing技術的使用:

當用戶進程請求打印輸出時,SPOOLing系統同意為它打印輸出,但并不真正立即把打印機分配給用戶進程,而只為它做兩件事:

????①由輸出進程在輸出井中為之請求一個空閑磁盤塊區,并將要打印的數據送入其中.

????②輸出進程再為用戶進程申請一張空白的用戶請求打印表,并將用戶的打印要求填入其中,再將該表掛在請求打印隊列上.

打印輸出過程:

如果打印機空閑,輸出進程將從請求打印隊列的隊首取出一張請求打印表,根據表中的要求將要打印的數據,從輸出井傳送到輸出緩沖區,再由打印機進行打印.

打印完畢后,輸出進程再查看請求打印隊列中是否還有等待打印的請求表,如此下去,直至請求打印隊列為空,輸出進程才將自己阻塞起來.

僅當下次再由打印請求時,輸出進程才被喚醒.

守護進程

守護進程(Daemon)是運行在后臺 的一種特殊進程。它獨立于控制終端并且周期性地執行某種任務或等待處理某些發生的事件。守護進程是一種很有用的進程。

Linux的大多數服務器就是用守護進程實現的。比如,Internet服務器inetd,Web服務器httpd等。同時,守護進程完成許多系統任務。比如,作業規劃進程crond,打印進程lpd等。

利用守護進程實現打印機

①為打印機建立一個守護進程,由它執行一部分原來由假脫機管理進程功能的功能。

②由請求進程生成一份要求打印的文件,并將用戶請求打印文件放入假脫機文件隊列(目錄)中。

共享打印機

打印機屬于獨占設備,利用SPOOLing技術可將其改造為一臺可供多個用戶共享的設備。

見課本說明:

????核心就是不能交叉打印的數據,虛擬的打印在磁盤的輸出井上(而磁盤的非獨占性解決了打印機不能方便共享的問題)。

????????有打印輸出請求的進程申請“請求打印表”。

????????數據虛擬打印到“輸出井”

????????Spooling程序再按“請求表隊列”分配真正的打印機打印數據。

SPOOLing系統的特點

提高了I/O的速度。利用輸入輸出井模擬成脫機輸入輸出,緩和了CPU和I/O設備速度不匹配的矛盾。

將獨占設備改造為共享設備。并沒有為進程分配設備,而是為進程分配一存儲區和建立一張I/O請求表。

最終,實現了虛擬設備功能。多個進程可“同時”使用一臺獨占設備。

7.緩沖區管理

有”控制器”或”通道”的幫助后CPU可解放去做其他事物,提高了利用率。

但分析單個程序內的執行

????CPU計算工作需等待后續數據輸入才可繼續

????CPU計算需等待數據輸入完才能計算,雖然數據輸入不需CPU干預,但CPU的解放也只是能去做其他程序,需切換工作,會產生開銷。

一進程中“CPU計算速度”和“設備I/O速度”仍存在不匹配的矛盾。

解決:CPU進行當前計算時,設備進行后續數據的輸入(——緩沖區)。

緩沖管理

I/O控制方式減少CPU對I/O的干預提高利用率;

緩沖則通過緩和CPU和I/O設備速度不匹配矛盾,增加CPU和I/O設備的并行性,提高利用率。

現代OS中,幾乎所有的I/O設備與處理機交換數據時,都用了緩沖區。

引入緩沖區的主要原因

緩和CPU與I/O設備間速度不匹配的矛盾。

緩沖區數據成批傳入內存,也可進一步減少對CPU的中斷頻率

最終目的:提高CPU和I/O設備的并行性。

使用緩沖區的方式:

1)單緩沖、多緩沖

單緩沖(Single Buffer)

????每當用戶進程發出一I/O請求時,

????單位:字符設備輸入時,緩沖區用于暫存用戶輸入/輸出的一行數據;塊設備輸入則是成塊數據。

????OS在主存中為之分配一個緩沖區。

????CPU和外設輪流使用,一方處理完后等待對方處理。

雙緩沖(Double Buffer)

????進一步加快輸入和輸出速度,提高設備利用率制,也稱緩沖對換(Buffer Swapping)

????輸入:數據送入第一緩沖區,裝滿后轉向第二緩沖區。

????讀出:OS從第一緩沖區中移出數據,送入用戶進程,再由CPU對數據進行計算。

兩個緩沖區,CPU和外設不再針對一塊交替

可能實現連續處理無需等待對方。前提是CPU和外設對一塊數據的處理速度相近。而如下圖情況CPU仍需等待慢速設備。

雙緩沖還適合雙向通訊

僅配置單緩沖,任意時刻都只能實現單方向的數據傳輸,而不允許雙方同時向對方發送數據。

為實現雙向數據傳輸,需為兩臺機器中的通訊進程都設置兩個緩沖區。定義不同功能:一個用作發送緩沖區,另一個用作接受緩沖區。

多緩沖引入

I/O與CPU速度基本相匹配,采用雙緩沖能獲得較好的效果,基本上能并行操作。

但,若兩者的速度相差甚遠,雙緩沖的效果仍不夠理想;

為進一步協調速度差,可增加緩沖區數量,同時進行一定的多緩沖管理入和出的同步。

引入多緩沖機制。組織形式:循環緩沖、緩沖池。

2)循環緩沖(circular buffer)

循環緩沖的組成示意圖

設置多塊緩沖區

用循環結構組織,只供兩個相關進程使用

順一個方向放入或取出

①循環緩沖的組成

多個緩沖區。大小相同,三種類型:

????預備裝輸入數據的空緩沖區R

????裝滿數據的緩沖區G

????計算進程正在使用的現行工作緩沖區C

多個指針。

????指示正在使用的緩沖區C的指針Current

????指示計算進程下一個可取的緩沖區G的指針Nextg

????指示輸入進程下次可放的緩沖區R的指針Nexti

②循環緩沖區的使用

計算進程(CPU)和輸入進程(I/O操作)可利用兩個過程來使用循環緩沖區。

主要就是利用指針,操作上述不同類型緩沖區

Getbuf過程:使用緩沖區時,可調用該過程

????計算進程取:current=Nextg,G—>C,nextg下移一個。

????輸入進程放:current=nexti,R—>C,nexti下移一個

Releasebuf過程:

計算進程:C->R

輸入進程:C->G

一個時段只能用于輸入或輸出,不能同時雙向通信。

③進程同步

兩個進程的控制:輸入進程和計算進程并行執行,如何控制相應的兩個指針不斷順時針方向移動,這樣就可能出現兩種情況:

????Nexti趕上Nextg。意味著輸入速度大于計算速度,緩沖區滿,只能阻塞輸入進程等計算進程取,此情況稱為系統受計算限制。

????Nextg趕上Nexti。意味著輸入速度低于計算速度,緩沖區空,只能阻塞計算進程等輸入進程放,此情況稱為系統受I/O限制。

3)緩沖池(Buffer Pool)

循環緩沖的問題

????不能同時雙向通訊

????利用率不高。緩沖區是專用緩沖。(每個進程都要維護自己的一個循環緩沖區),使用有剩余時也不給其他進程使用,消耗大量內存空間。

????系統并發程序很多時,許多這樣的循環緩沖需要管理,比較復雜。

為提高緩沖區的利用率,目前廣泛流行緩沖池,在池中設置多個可供若干個進程共享的緩沖區。

系統將多個緩沖區形成一個緩沖池。

池中緩沖區為系統中所有的進程共享使用(如UNIX系統在塊設備管理中設置了一個15個緩沖區組成的緩沖池)

組織形式:隊列及隊列指針

①緩沖池的組成

對于既可輸入又可輸出的公用緩沖池,至少應含有下列三種類型的緩沖區:

????空緩沖區;

????裝滿輸入數據的緩沖區;

????裝滿輸出數據的緩沖區;

為方便管理,將上述類型相同的緩沖區連成隊列

????空緩沖區隊列(所有進程都可用)

????輸入隊列(n個進程有各自的隊列)

????輸出隊列(n個進程有各自的隊列)

*(隊列長度不固定,根據進程實際情況靈活變動,需要多少用多少)

工作狀態決定了current有四種工作緩沖區:

? ? ? 狀態? ? ? 操作者

收容輸入數據的工作緩沖區;hin

提取輸入數據的工作緩沖區;sin

收容輸出數據的工作緩沖區;hout

提取輸出數據的工作緩沖區;sout

②緩沖區的工作方式

四種工作方式:

收容輸入:Getbuf(emq),hin;輸入數據填入一空緩沖區;Putbuf(inq,hin)

提取輸入: Getbuf(inq),sin;從輸入緩沖隊列中取出一數據區的內容;Putbuf(emq,sin)

收容輸出: Getbuf(emq),hout;輸出數據填入一空緩沖區;Putbuf(outq,hout)

提取輸出: Getbuf(outq),sout;從輸出緩沖隊列中取一數據區的內容;Putbuf(emq,sout)

緩沖區的使用

Getbuf(隊列,工作區)

Putbuf(隊列,工作區)

同步控制

????每隊設置一個互斥信號量MS;

????判斷每個隊列是否有可用的緩沖區,需一個資源信號量RS。獲取緩沖區時P(RS),釋放時V(RS)。

緩沖池:可雙向緩沖;緩沖區整體利用率高。

8.磁盤存儲器的性能和調度

1)磁盤性能簡述

首先與格式有關

數據的組織和格式

????盤片、面、磁道、扇區

????為方便處理,每條磁道存儲容量相同,每個磁道上的每個扇區相當于一個盤塊。磁盤”格式化”的過程就是按規定的格式規劃盤塊。

與速度有關

磁盤類型

????固定磁頭(每道一磁頭)

????移動磁頭(每盤一磁頭)

訪問時間的計算

????尋道時間(到磁道)

????旋轉延遲(到扇區)

????傳輸時間

傳輸時間占總時間的比例最小,磁盤讀寫速度的提高要選擇合適的調度算法,減少前兩項用時,使所有作業的磁盤處理時間均衡。

2)磁盤調度方法

對所有請求訪問磁盤的進程進行合理調度,使對磁盤的平均訪問時間最小。

目標:使平均尋道時間最少。

算法:

①FCFS

多個進程的磁盤I/O請求構成一個隨機分布的請求隊列。

磁盤I/O執行順序按磁盤請求的先后順序。

②最短尋道時間優先SSTF?ShortestSeekTimeFirst

選擇從當前磁頭位置出發移動最少的磁盤I/O請求

????使每次磁頭移動時間最少。

????不一定是最短平均柱面定位時間,但比FIFO算法有更好的性能。

????對中間的磁道有利,但可能會有進程處于饑餓狀態(I/O請求總不被執行)。

????掃描算法SCAN(磁盤電梯調度算法)

③掃描算法SCAN(磁盤電梯調度算法)

SSTF會導致“饑餓”現象

????總選擇最近的磁道訪問,遠磁道請求的進程會長時間得不到執行。

改進:

????考慮距離的同時,更優先考慮方向

SCAN算法

????規定磁頭移動方向:自里向外,再自外向里移動。

????后續的I/O磁道請求,哪個在規定方向上距離最近,就先執行哪個。

????如當前為100,后續要求55,86,95,180,165,105

????????先由內向外:選最近的105執行,再判斷剩余的,選165,180。

????????再由外向內:95,86,55

反方向較近的55號磁道請求的進程相對“饑餓”很久

循環掃描CSCAN

????SCAN的錯過問題:

????????容易錯過與當前磁道距離近,但方向不一致的磁道。

????修改:將SCAN規定的移動方向改為“單向移動”

????????由里向外后,再由里向外。

N-Step-SCAN

????前述最近尋道算法共同問題:

????????“磁臂粘著”——磁頭靜止在一個磁道上,導致其它進程無法及時進行磁盤I/O。(因:高密度盤,進程的讀寫可能集中在某一磁道)

????????如現有一系列請求:

????????????3 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開始向下執行會是

????????????3 3 3 3 3 3 3 3 3 3….2 2 2 2 2 2 … 4 4 ….

改進:

????將磁盤請求隊列分成長為N 的子隊列

????按FCFS選擇子隊列。隊列內又按SCAN算法。

????????3 3 5 2 |3 3 3 2| 3 3 2 3| 3 4 4 5| 2 3 ….2 3

????處理子隊列過程中產生的新I/O再依次排隊列。

????N=1時,就是FCFS,N很大時就是SCAN。

F-SCAN

????N-Step-SCAN的簡化:

????????請求隊列只分為兩個子隊列

????????當前一個隊列,按SCAN算法執行;

????????掃描期間新生成的組成一個隊列,等待被掃描。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內容

  • 1. 基礎知識 1.1、 基本概念、 功能 馮諾伊曼體系結構1、計算機處理的數據和指令一律用二進制數表示2、順序執...
    yunpiao閱讀 5,364評論 1 22
  • 操作系統概論 操作系統的概念 操作系統是指控制和管理計算機的軟硬件資源,并合理的組織調度計算機的工作和資源的分配,...
    野狗子嗷嗷嗷閱讀 11,991評論 3 34
  • (2018-07-15-周日 01:15:37) Ctrl+Shift+S
    菜五閱讀 301評論 0 0
  • 我這次去南咀,因叔父澆木。澆木,是幾千年來留傳于民間的古老習俗。簡言之,就是晚輩給年長者制作棺木。使...
    仗義執言閱讀 945評論 3 2
  • 人或有一問: 何物似情濃? 西湖荷葉連天碧, 梅子黃時雨紛紛, 情濃在其中? 想當年, 小喬初嫁了, 跟隨周郎戰,...
    街西農夫閱讀 178評論 1 1