老狗——設備管理-用戶層IO軟件 緩衝 磁盤

一、用戶層的I/O軟件

系統調用與庫函數

  • 不允許運行在用戶態的應用進程,去直接調用運行在覈心態(系統態)的OS過程
  • 應用進程在運行時,又必須取得OS所提供的服務
  • OS在用戶層中引入了系統調用,應用程序可以通過它,間接調用OS中的I/O過程,對I/O設備進行操作

SPOOLing技術(假脫機操作)

  • 虛擬性是OS的四大特徵之一
  • 多道程序技術,專門利用程序模擬脫機I/O的外圍機,完成設備I/O操作。稱這種聯機情況下實現的同時外圍操作爲SPOOLing 技術。

SPOOLing系統的組成

  • 輸入井和輸出井:磁盤上開闢兩大存儲空間。輸入井模擬脫機輸入的磁盤設備,輸出井模擬脫機輸出時的磁盤。
  • 輸入緩衝區和輸出緩衝區:爲緩解速度矛盾,內存中開闢兩大緩衝空間,輸入緩衝區暫存輸入設備送來的數據,再送給輸入井;輸出緩衝區暫存輸出井送來的數據,再送輸出設備。
  • 輸入進程和輸出進程:用一進程模擬脫機輸入時外圍設備控制器的功能,把低速輸入設備上的數據傳送到高速磁盤上;
    用另一進程模擬脫機輸出時外圍設備控制器的功能,把數據從磁盤上傳送到低速輸出設備上。

在這裏插入圖片描述

SPOOLing系統的特點

  • 提高了I/O的速度。
  • 將獨佔設備改造爲共享設備。
  • 最終,實現了虛擬設備功能。多個進程可“同時”使用一臺獨佔設備。

二、緩衝管理

緩衝管理

  • I/O控制方式減少CPU對I/O的干預提高利用率;
  • 緩衝則通過緩和CPU和I/O設備速度不匹配矛盾,增加CPU和I/O設備的並行性,提高利用率。
  • 現代OS中,幾乎所有的I/O設備與處理機交換數據時,都用了緩衝區。

使用緩衝區的方式

設備速度差距越大,緩衝區容量越大

  • 單緩衝、多緩衝
  • 循環緩衝
  • 緩衝池(Buffer Pool)
單緩衝與多緩衝

1)單緩衝
OS在主存中爲之分配一個緩衝區。
CPU和外設輪流使用,一方處理完後等待對方處理。
2)雙緩衝
兩個緩衝區,CPU和外設不再針對一塊交替
輸入:數據送入第一緩衝區,裝滿後轉向第二緩衝區。
讀出:OS從第一緩衝區中移出數據,送入用戶進程,再由CPU對數據進行計算。
兩個緩衝區,CPU和外設不再針對一塊交替
可能實現連續處理無需等待對方。前提是CPU和外設對一塊數據的處理速度相近。而如下圖情況CPU仍需等待慢速設備。

循環緩衝

1)簡介
設置多塊緩衝區
用循環結構組織,只供兩個相關進程使用
順一個方向放入或取出
2)循環緩衝的組成
多個緩衝區
多個指針

主要就是利用指針,操作上述不同類型緩衝區
一個時段只能用於輸入或輸出,不能同時雙向通信。

循環緩衝的問題:
不能同時雙向通訊
利用率不高
系統併發程序很多時,許多這樣的循環緩衝需要管理,比較複雜。

緩衝池(可雙向緩衝)

緩衝區是專用緩衝。(每個進程都要維護自己的一個循環緩衝區),使用有剩餘時也不給其他進程使用,消耗大量內存空間。
系統將多個緩衝區形成一個緩衝池。
池中緩衝區爲系統中所有的進程共享使用(如UNIX系統在塊設備管理中設置了一個15個緩衝區組成的緩衝池)
組織形式:隊列及隊列指針

a.緩衝池的組成

對於既可輸入又可輸出的公用緩衝池,至少應含有下列三種類型的緩衝區:
空緩衝區;
裝滿輸入數據的緩衝區;
裝滿輸出數據的緩衝區;

爲方便管理,將上述類型相同的緩衝區連成隊列
空緩衝區隊列(所有進程都可用)
輸入隊列(n個進程有各自的隊列)
輸出隊列(n個進程有各自的隊列)
*(隊列長度不固定,根據進程實際情況靈活變動,需要多少用多少)

b.緩衝區的工作方式
收容輸入:Getbuf(emq),hin;輸入數據填入一空緩衝區;Putbuf(inq,hin)
提取輸入: Getbuf(inq),sin;從輸入緩衝隊列中取出一數據區的內容;Putbuf(emq,sin)
收容輸出: Getbuf(emq),hout;輸出數據填入一空緩衝區;Putbuf(outq,hout)
提取輸出: Getbuf(outq),sout;從輸出緩衝隊列中取一數據區的內容;Putbuf(emq,sout)

三、磁盤存儲器的性能和調度

磁盤性能簡述

數據的組織和格式:盤片、面、磁道、扇區

爲方便處理,每條磁道存儲容量相同,每個磁道上的每個扇區相當於一個盤塊。

磁盤類型

固定磁頭(每道一磁頭)
移動磁頭(每盤一磁頭)

訪問時間的計算

尋道時間(到磁道)
旋轉延遲(到扇區)
傳輸時間:傳輸時間佔總時間的比例最小,磁盤讀寫速度的提高要選擇合適的調度算法,減少前兩項用時,使所有作業的磁盤處理時間均衡。

磁盤調度算法

FCFS

多個進程的磁盤I/O請求構成一個隨機分佈的請求隊列。
磁盤I/O執行順序按磁盤請求的先後順序。

最短尋道時間優先SSTF(會導致“飢餓”現象)

選擇從當前磁頭位置出發移動最少的磁盤I/O請求
使每次磁頭移動時間最少。
不一定是最短平均柱面定位時間,但比FIFO算法有更好的性能。
對中間的磁道有利,但可能會有進程處於飢餓狀態(I/O請求總不被執行)。
問題:總選擇最近的磁道訪問,遠磁道請求的進程會長時間得不到執行。

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

規定磁頭移動方向:自裏向外,再自外向裏移動。
後續的I/O磁道請求,哪個在規定方向上距離最近,就先執行哪個。
問題:容易錯過與當前磁道距離近,但方向不一致的磁道。

循環掃描CSCAN:由裏向外後,再由裏向外。

問題:“磁臂粘着”——磁頭靜止在一個磁道上,導致其它進程無法及時進行磁盤I/O。

N-Step-SCAN

將磁盤請求隊列分成長爲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。

對磁盤的訪問總是由缺頁引起的

(1)緩衝技術中的緩衝池在:主存中。
(2)爲了實現CPU與外設的並行工作,系統引入了:中斷和通道硬件機制。
(3)引起中斷髮生的事件稱爲:中斷源。
(4)設備分配中的安全性是指:設備分配應保證不會引起進程死鎖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章