1. 程式人生 > >第六章 裝置管理(2)

第六章 裝置管理(2)

與裝置無關的I/O軟體

1.裝置獨立性(無關性)
使用者程式設計時所用的裝置名(邏輯上的)與實際物理裝置無關;
好處:
裝置分配時的靈活性
3個物理裝置(如印表機),程式中申請一臺印表機,執行時不拘泥必須是某臺(如第2個)印表機
易於實現I/O重定向
指用於I/O操作的裝置可以更換(重定向),而不必改變應用程式。 程式除錯、執行中的“列印”,可通過修改邏輯裝置表的顯示終端,實現不同時候的不同的裝置使用。
2.裝置分配
多道環境下,系統中裝置是所有程序共享的。要防止無序競爭,提高外設資源的利用率。需由OS進行統一、合理的裝置分配。
1)資料結構
記錄相應裝置或控制器的狀態,及對裝置或控制器進行控制所需的資訊。所需資料結構:
裝置控制表(DCT)
系統為每一裝置都配置一張
記錄本裝置的情況。
在這裡插入圖片描述


控制器控制表(COCT)
系統為每一控制器都配置一張
記錄本控制器的情況。
在這裡插入圖片描述
通道控制表(CHCT)
在這裡插入圖片描述
系統裝置(總)表(SDT)

在這裡插入圖片描述
系統根據程序對裝置的請求進行裝置分配的過程:
在這裡插入圖片描述
2)裝置分配需考慮的因素
裝置固有屬性:獨佔、共享、獨佔但可虛擬。根據屬性採取互斥、次序排程、虛擬等不同分配策略。
裝置分配演算法(對不同程序的裝置請求序列,如何進行選擇),常採用兩種:
FCFS
優先順序高者優先

裝置分配的安全性:程序開始I/O後就阻塞直到I/O完成。不“請求和保持”(安全的);允許連續I/O請求,是不安全的,此類分配方式需進行安全性檢查。
裝置獨立性
使用者IO請求中使用邏輯名申請某類裝置,實際物理名稱是系統根據裝置型別分析分配後才確定的。
3)裝置的分配過程

基本分配步驟(有通道):
分配裝置
根據請求裝置名,查詢SDT,找到DCT;
狀態、安全性等因素都可能導致本申請程序阻塞,掛入DCT等待佇列中。
分配控制器
通過1步分配裝置後,從DCT找到COCT;
檢查COCT狀態字,若忙碌,程序PCB掛到其等待佇列
分配通道
COCT找到CHCT
判斷狀態,…
裝置分配程式的改進細節
1.增加裝置的獨立性
2.考慮多通路情況
分配裝置
在這裡插入圖片描述
分配控制器
在這裡插入圖片描述

使用者層的I/O軟體

1.系統呼叫與庫函式
2.裝置分配中的虛擬技術—SPOOLing技術
(1)組成
<1>輸入井和輸出井:
磁碟上開闢兩大儲存空間。輸入井模擬離線輸入的磁碟裝置,輸出井模擬離線輸出時的磁碟。
<2>輸入緩衝區和輸出緩衝區

:為緩解速度矛盾,記憶體中開闢兩大緩衝空間,輸入緩衝區暫存輸入裝置送來的資料,再送給輸入井;輸出緩衝區暫存輸出井送來的資料,再送輸出裝置。
<3>輸入程序和輸出程序
用一程序模擬離線輸入時外圍裝置控制器的功能,把低速輸入裝置上的資料傳送到高速磁碟上;
用另一程序模擬離線輸出時外圍裝置控制器的功能,把資料從磁碟上傳送到低速
在這裡插入圖片描述
(2)特點
<1>提高了I/O的速度。利用輸入輸出井模擬成離線輸入輸出,緩和了CPU和I/O裝置速度不匹配的矛盾。
<2>將獨佔裝置改造為共享裝置。並沒有為程序分配裝置,而是為程序分配一儲存區和建立一張I/O請求表。
<3>實現了虛擬裝置功能。多個程序可“同時”使用一臺獨佔裝置。

緩衝區管理

引入緩衝區的主要原因
緩和CPU與I/O裝置間速度不匹配的矛盾。
緩衝區資料成批傳入記憶體,也可進一步減少對CPU的中斷頻率
最終目的:提高CPU和I/O裝置的並行性。
使用緩衝區的方式
1)單緩衝、多緩衝
單緩衝
OS在主存中為之分配一個緩衝區。
CPU和外設輪流使用,一方處理完後等待對方處理。
雙緩衝
兩個緩衝區,CPU和外設不再針對一塊交替
可能實現連續處理無需等待對方。前提是CPU和外設對一塊資料的處理速度相近。而如下圖情況CPU仍需等待慢速裝置。
在這裡插入圖片描述
為進一步協調速度差,可增加緩衝區數量,同時進行一定的多緩衝管理入和出的同步
2)迴圈緩衝
在這裡插入圖片描述
迴圈緩衝的組成
多個緩衝區
大小相同,三種類型
預備裝輸入資料的空緩衝區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
一個時段只能用於輸入或輸出,不能同時雙向通訊。
程序同步
3)緩衝池(Buffer Pool)
①緩衝池的組成
對於既可輸入又可輸出的公用緩衝池,至少應含有下列三種類型的緩衝區:
空緩衝區;
裝滿輸入資料的緩衝區;
裝滿輸出資料的緩衝區;
為方便管理,將上述型別相同的緩衝區連成佇列
空緩衝區佇列(所有程序都可用)
輸入佇列(n個程序有各自的佇列)
輸出佇列(n個程序有各自的佇列)
工作狀態決定了current有四種工作緩衝區:
收容輸入資料的工作緩衝區
提取輸入資料的工作緩衝區
收容輸出資料的工作緩衝區
提取輸出資料的工作緩衝區
②緩衝區的工作方式
(1)收容輸入:Getbuf(emq),hin;輸入資料填入一空緩衝區;Putbuf(inq,hin)
(2)提取輸入: Getbuf(inq),sin;從輸入緩衝佇列中取出一資料區的內容;Putbuf(emq,sin)
(3)收容輸出: Getbuf(emq),hout;輸出資料填入一空緩衝區;Putbuf(outq,hout)
(4)提取輸出: Getbuf(outq),sout;從輸出緩衝佇列中取一資料區的內容;Putbuf(emq,sout)
緩衝區的使用
Getbuf(佇列,工作區)
Putbuf(佇列,工作區)
同步控制

磁碟儲存器的效能和排程

1.磁碟效能簡述
與格式有關
資料的組織和格式
碟片、面、磁軌、扇區
為方便處理,每條磁軌儲存容量相同,每個磁軌上的每個扇區相當於一個盤塊。磁碟”格式化”的過程就是按規定的格式規劃盤塊。
與速度有關
磁碟型別
固定磁頭(每道一磁頭)
移動磁頭(每盤一磁頭)

訪問時間的計算
尋道時間(到磁軌)
旋轉延遲(到扇區)
傳輸時間

傳輸時間佔總時間的比例最小,磁碟讀寫速度的提高要選擇合適的排程演算法,減少前兩項用時,使所有作業的磁碟處理時間均衡。
2.磁碟排程方法
對所有請求訪問磁碟的程序進行合理排程,使對磁碟的平均訪問時間最小
目標:使平均尋道時間最少
演算法:
FCFS
多個程序的磁碟I/O請求構成一個隨機分佈的請求佇列。
磁碟I/O執行順序按磁碟請求的先後順序。
在這裡插入圖片描述
最短尋道時間優先SSTF
選擇從當前磁頭位置出發移動最少的磁碟I/O請求
使每次磁頭移動時間最少。
不一定是最短平均柱面定位時間,但比FIFO演算法有更好的效能。
對中間的磁軌有利,但可能會有程序處於飢餓狀態(I/O請求總不被執行)。
在這裡插入圖片描述
掃描演算法SCAN(磁碟電梯排程演算法)
規定磁頭移動方向:自裡向外,再自外向裡移動。
後續的I/O磁軌請求,哪個在規定方向上距離最近,就先執行哪個。
迴圈掃描演算法CSCAN
SCAN的錯過問題:
容易錯過與當前磁軌距離近,但方向不一致的磁軌。
修改:將SCAN規定的移動方向改為“單向移動”
由裡向外後,再由裡向外。

N-Step-SCAN演算法
前述最近尋道演算法共同問題:
“磁臂粘著”——磁頭靜止在一個磁軌上,導致其它程序無法及時進行磁碟I/O。(因:高密度盤,程序的讀寫可能集中在某一磁軌)
改進:
將磁碟請求佇列分成長為N 的子佇列
按FCFS選擇子佇列。佇列內又按SCAN演算法。

FSCAN演算法
N-Step-SCAN的簡化:
請求佇列只分為兩個子佇列
當前一個佇列,按SCAN演算法執行;
掃描期間新生成的組成一個佇列,等待被掃描。
3.磁碟快取記憶體
4.提高速度的其他方法