做承諾的網(wǎng)站上海百度推廣排名
輸入/輸出(I/O)管理
考綱內(nèi)容
- I/O管理基礎(chǔ)
設(shè)備:設(shè)備的基本概念,設(shè)備的分類,I/O接口
I/O控制方式:輪詢方式,中斷方式,DMA方式
I/O軟件層次結(jié)構(gòu):中斷處理程序,驅(qū)動程序,設(shè)備獨(dú)立性軟件,用戶層I/O軟件
輸入/輸出應(yīng)用程序接口:字符設(shè)備接口,塊設(shè)備接口,網(wǎng)絡(luò)設(shè)備接口,阻塞/非阻塞I/O - 設(shè)備獨(dú)立軟件
緩沖區(qū)管理:設(shè)備分配與回收;假脫機(jī)技術(shù)(SPOOLing);設(shè)備驅(qū)動程序接口 - 外存管理
磁盤:磁盤結(jié)構(gòu),格式化,分區(qū),磁盤調(diào)度算法
固態(tài)硬盤:讀/寫性能特效,磨損均衡
復(fù)習(xí)提示
重點(diǎn)掌握I/O接口、I/O軟件、三種I/O控制方式、高速緩存與緩沖區(qū)、SPOOLing技術(shù),磁盤特性和調(diào)度算法。本章很多知識點(diǎn)與硬件高度相關(guān)
I/O管理概述
I/O設(shè)備
1、設(shè)備的分類
I/O設(shè)備是指**可以將數(shù)據(jù)輸入計(jì)算機(jī)的外部設(shè)備
,或者可以接收計(jì)算機(jī)輸出數(shù)據(jù)的外部設(shè)備
**
I/O設(shè)備的類型繁多,從不同的?度可將它們分為不同的類型:
按信息交換的單位
分類
I/O設(shè)備可分為:
- 塊設(shè)備。信息交換以**
數(shù)據(jù)塊
為單位,如磁盤、磁帶等
磁盤設(shè)備的基本特征是傳輸速率較高、可尋址
,即對它可隨機(jī)地讀/寫任意一塊
** - 字符設(shè)備。信息交換以**
字符
為單位,如交互式終端機(jī)、打印機(jī)等
它們的基本特征是傳輸速率低、不可尋址
,并且時(shí)常采用中斷I/O方式
**
按設(shè)備的傳輸速率
分類
I/O設(shè)備可分為:
- 低速設(shè)備。傳輸速率僅為每秒幾字節(jié)到數(shù)百字節(jié),如鍵盤、鼠標(biāo)等
- 中速設(shè)備。傳輸速率為每秒數(shù)千字節(jié)至數(shù)萬字節(jié),如激光打印機(jī)等
- 高速設(shè)備。傳輸速率在數(shù)百千字節(jié)至千兆字節(jié),如磁盤機(jī)、光盤機(jī)等
按設(shè)備的使用特性
分類
I/O設(shè)備可分為:
- 存儲設(shè)備。
用于存儲信息的外部設(shè)備
,如磁盤、磁帶、光盤等 - 輸入/輸出設(shè)備。又可分為**
輸入設(shè)備、輸出設(shè)備和交互式設(shè)備
**
輸入設(shè)備用于向計(jì)算機(jī)輸入外部信息,如鍵盤、鼠標(biāo)、掃描儀等
輸出設(shè)備用于計(jì)算機(jī)向外輸出數(shù)據(jù)信息,如打印機(jī)等
交互式設(shè)備則集成了上述兩類設(shè)備的功能,如觸控顯示器等
按設(shè)備的共享屬性
分類
I/O設(shè)備可分為:
- 獨(dú)占設(shè)備。
同一時(shí)刻只能由一個(gè)進(jìn)程占用的設(shè)備同一時(shí)刻只能由一個(gè)進(jìn)程占用的設(shè)備
。一旦將這類設(shè)備分配給某進(jìn)程,便由該進(jìn)程獨(dú)占,直至用完釋放。低速設(shè)備一般是獨(dú)占設(shè)備,如打印機(jī) - 共享設(shè)備。
同一時(shí)間段內(nèi)允許多個(gè)進(jìn)程同時(shí)訪問的設(shè)備
。對于共享設(shè)備,可同時(shí)分配給多個(gè)進(jìn)程,通過分時(shí)的方式共享使用。典型的共享設(shè)備是磁盤 - 虛擬設(shè)備。通過**
SPOOLing技術(shù)
將獨(dú)占設(shè)備改造為共享設(shè)備,將一個(gè)物理設(shè)備變?yōu)槎鄠€(gè)邏輯設(shè)備
**,從而可將設(shè)備同時(shí)分配給多個(gè)進(jìn)程
2、I/O接口
I/O接口(又稱設(shè)備控制器
)是**CPU與設(shè)備之間的接口
,以實(shí)現(xiàn)設(shè)備和計(jì)算機(jī)之間的數(shù)據(jù)交換
**
它接收發(fā)自CPU的命令,控制設(shè)備工作,使CPU能從繁雜的設(shè)備控制事務(wù)中解脫出來。設(shè)備控制器主要由三部分組成:
- 設(shè)備控制器與CPU的接口。用于**
實(shí)現(xiàn)CPU與設(shè)備控制器之間的通信
**
該接口有三類信號線:數(shù)據(jù)線、地址線和控制線
數(shù)據(jù)線傳送的是**讀/寫數(shù)據(jù)、控制信息和狀態(tài)信息
**
地址線傳送的是**要訪問I/O接口中的寄存器編號
**
控制線傳送的是**讀/寫等控制信號
** - 設(shè)備控制器與設(shè)備的接口。一個(gè)設(shè)備控制器可以連接一個(gè)或多個(gè)設(shè)備,因此控制器中有一個(gè)或多個(gè)設(shè)備接口
每個(gè)接口都可傳輸數(shù)據(jù)、控制和狀態(tài)三種類型的信號
- I/O邏輯。用于**
實(shí)現(xiàn)對設(shè)備的控制
**。它通過一組控制線與CPU交互,對從CPU收到的I/O命令進(jìn)行譯碼
CPU啟動設(shè)備時(shí),將啟動命令發(fā)送給控制器,同時(shí)通過地址線將地址發(fā)送給控制器,由控制器的I/O邏輯對地址進(jìn)行譯碼,并對所選設(shè)備進(jìn)行控制
設(shè)備控制器的主要功能有:
1、接收和識別命令,如磁盤控制器能接收CPU發(fā)來的讀、寫、查找等命令
2、數(shù)據(jù)交換,包括CPU和控制器之間的數(shù)據(jù)傳輸,以及控制器和設(shè)備之間的數(shù)據(jù)傳輸
3、標(biāo)識和報(bào)告設(shè)備的狀態(tài),以供CPU處理
4、地址識別
5、數(shù)據(jù)緩沖
6、差錯控制
3、I/O接口的類型
從不同的?度看,I/O接口可以分為不同的類型:
- 按**
數(shù)據(jù)傳送方式
(外設(shè)和接口一側(cè)),可分為并行接口
(一個(gè)字節(jié)或者一個(gè)字的所有位同時(shí)傳送)和串行接口
**(一位一位地有序傳送),接口要完成數(shù)據(jù)格式的轉(zhuǎn)換 - 按**
主機(jī)訪問I/O設(shè)備的控制方式
,可分為程序查詢接口
、中斷接口
和DMA接口
**等 - 按**
功能選擇的靈活性
,可分為可編程接口
(通過編程改變接口功能)和不可編程接口
**
4、I/O端口
I/O端口是指**設(shè)備控制器中可被CPU直接訪問的寄存器
**,主要有以下三類寄存器:
- 數(shù)據(jù)寄存器:
用于緩存從設(shè)備送來的輸入數(shù)據(jù)
,或**從CPU送來的輸出數(shù)據(jù)
** - 狀態(tài)寄存器:
保存設(shè)備的執(zhí)行結(jié)果或狀態(tài)信息
,以**供CPU讀取
** - 控制寄存器:由CPU寫入,
以便啟動命令或更改設(shè)備模式
I/O端口要想能夠被CPU訪問,就要**對各個(gè)端口進(jìn)行編址
,每個(gè)端口對應(yīng)一個(gè)端口地址。而對I/O端口的編址方式有與存儲器獨(dú)立編址
和統(tǒng)一編址
**兩種
- 獨(dú)立編址
獨(dú)立編址是指**為每個(gè)端口分配一個(gè)I/O端口號
。I/O端口的地址空間與主存地址空間是兩個(gè)獨(dú)立的地址空間
**,它們的范圍可以重疊,相同地址可能屬于不同的地址空間
普通用戶程序不能對端口進(jìn)行訪問
,只有操作系統(tǒng)使用特殊的I/O指令才能訪問端口
優(yōu)點(diǎn):I/O端口數(shù)比主存單元少得多,只需少量地址線,使得**I/O端口譯碼簡單,尋址速度更快
。使用專用I/O指令,可使程序更加清晰,便于理解和檢查
缺點(diǎn):I/O指令少,只提供簡單的傳輸操作
,所以程序設(shè)計(jì)的靈活性較差
。此外,CPU需要提供兩組獨(dú)立的存儲器和設(shè)備的讀/寫控制信號,增加了控制的復(fù)雜性
**
- 統(tǒng)一編址
統(tǒng)一編址又稱內(nèi)存映射I/O
,是指**將主存地址空間分出一部分給I/O端口進(jìn)行編址
,I/O端口和主存單元在同一地址空間的不同分段中
**,用統(tǒng)一的訪存指令就可訪問I/O端口
優(yōu)點(diǎn):不需要專?的I/O指令,使得CPU訪問I/O的操作更加**靈活和方便
,還使得端口有較大的編址空間
。I/O訪問的保護(hù)機(jī)制可由虛擬存儲管理系統(tǒng)來實(shí)現(xiàn)
,無須專?設(shè)置
缺點(diǎn):端口地址占用了部分主存地址空間,使主存的可用容量變小
。此外,由于在識別I/O端口時(shí)全部地址線都需參加譯碼,使得譯碼電路更復(fù)雜,降低了尋址速度
**
I/O控制方式
I/O控制是指**控制設(shè)備和主機(jī)之間的數(shù)據(jù)傳送
**
在I/O控制方式的發(fā)展過程中,始終貫穿著這樣一個(gè)宗旨:盡量減少CPU對I/O控制的干預(yù),將CPU從繁雜的I/O控制事務(wù)中解脫出來,以便其能更多地去執(zhí)行運(yùn)算任務(wù)。I/O控制方式共有4種:
1、程序直接控制方式
CPU對I/O設(shè)備的控制采取**輪詢的I/O方式
,又稱程序輪詢方式
**
CPU向設(shè)備控制器發(fā)出一條I/O指令,啟動從I/O設(shè)備讀取一個(gè)字(節(jié)),然后**不斷地循環(huán)測試設(shè)備狀態(tài)
(稱為輪詢),直到確定該字(節(jié))已在設(shè)備控制器的數(shù)據(jù)寄存器中
**
于是CPU將數(shù)據(jù)寄存器中的數(shù)據(jù)取出,送入內(nèi)存的指定單元,這樣便完成了一個(gè)字(節(jié))的I/O操作
這種方式簡單且易于實(shí)現(xiàn)
但由于在CPU中未采用中斷機(jī)構(gòu),使I/O設(shè)備無法向CPU報(bào)告它已完成了一個(gè)字(節(jié))的輸入操作。因此CPU的絕大部分時(shí)間都處于等待I/O設(shè)備狀態(tài)的循環(huán)測試中,CPU和I/O設(shè)備只能串行工作
,由于**CPU和I/O設(shè)備的速度差異很大
,導(dǎo)致CPU的利用率相當(dāng)?shù)?/code>**
2、中斷驅(qū)動方式
中斷驅(qū)動方式的思想是:允許I/O設(shè)備主動打斷CPU的運(yùn)行并請求服務(wù),從而“解放”CPU
,使得**CPU向設(shè)備控制器發(fā)出一條I/O指令后可以繼續(xù)做其他有用的工作
**
- 從**
設(shè)備控制器的?度
**來看:
設(shè)備控制器從CPU接收一個(gè)讀命令,然后從設(shè)備讀數(shù)據(jù)
一旦數(shù)據(jù)讀入設(shè)備控制器的數(shù)據(jù)寄存器,便通過控制線給CPU發(fā)出中斷信號,表示數(shù)據(jù)已準(zhǔn)備好,然后等待CPU請求該數(shù)據(jù)
設(shè)備控制器收到CPU發(fā)出的取數(shù)據(jù)請求后,將數(shù)據(jù)放到數(shù)據(jù)總線上,傳到CPU的寄存器中
至此,本次I/O操作完成,設(shè)備控制器又可開始下一次I/O操作
- 從**
CPU的?度
**來看:
當(dāng)前運(yùn)行進(jìn)程發(fā)出讀命令,該進(jìn)程將被阻塞,然后保存該進(jìn)程的上下文,轉(zhuǎn)去執(zhí)行其他程序
在每個(gè)指令周期的末尾,CPU檢查中斷信號。當(dāng)有來自設(shè)備控制器的中斷時(shí),CPU保存當(dāng)前運(yùn)行進(jìn)程的上下文,轉(zhuǎn)去執(zhí)行中斷處理程序以處理該中斷請求。這時(shí),CPU從設(shè)備控制器讀一個(gè)字的數(shù)據(jù)傳送到寄存器,并存入主存
中斷處理完后解除發(fā)出I/O命令的進(jìn)程的阻塞狀態(tài),然后恢復(fù)該進(jìn)程(或其他進(jìn)程)的上下文,然后繼續(xù)運(yùn)行
相比于程序輪詢I/O方式,在中斷驅(qū)動I/O方式中,設(shè)備控制器通過中斷主動向CPU報(bào)告I/O操作已完成,不再需要輪詢,在設(shè)備準(zhǔn)備數(shù)據(jù)期間,CPU和設(shè)備并行工作,CPU的利用率得到明顯提升
但是,中斷驅(qū)動方式仍有兩個(gè)明顯的問題:
1、設(shè)備與內(nèi)存之間的數(shù)據(jù)交換都必須經(jīng)過CPU中的寄存器
2、CPU是以字(節(jié))為單位進(jìn)行干預(yù)的,若將這種方式用于塊設(shè)備的I/O操作,則顯然是極其低效的
因此,中斷驅(qū)動I/O方式的速度仍然受限
3、DMA方式
DMA(直接存儲器存取)方式的基本思想是,在I/O設(shè)備和內(nèi)存之間開辟直接的數(shù)據(jù)交換通路,徹底“解放”CPU
DMA方式的特點(diǎn)如下:
- 基本傳送單位是數(shù)據(jù)塊,而不再是字(節(jié))
- 所傳送的數(shù)據(jù),是從設(shè)備直接送入內(nèi)存的,或者相反,而不再經(jīng)過CPU
- 僅在傳送一個(gè)或多個(gè)數(shù)據(jù)塊的開始和結(jié)束時(shí),才需要CPU干預(yù)
DMA控制器的組成:
為了實(shí)現(xiàn)主機(jī)和控制器之間直接交換成塊的數(shù)據(jù),須在DMA控制器中設(shè)置如下4類寄存器:
- 命令/狀態(tài)寄存器(CR)。接收從CPU發(fā)來的I/O命令、有關(guān)控制信息,或設(shè)備的狀態(tài)
- 內(nèi)存地址寄存器(MAR)。在輸入時(shí),它存放將數(shù)據(jù)從設(shè)備傳送到內(nèi)存的起始目標(biāo)地址;在輸出時(shí),它存放由內(nèi)存到設(shè)備的內(nèi)存源地址
- 數(shù)據(jù)寄存器(DR)。暫存從設(shè)備到內(nèi)存或從內(nèi)存到設(shè)備的數(shù)據(jù)
- 數(shù)據(jù)計(jì)數(shù)器(DC)。存放本次要傳送的字(節(jié))數(shù)
如上所示,DMA方式的工作過程是:
CPU接收到設(shè)備的DMA請求時(shí),它向DMA控制器發(fā)出一條命令,同時(shí)設(shè)置MAR和DC初值,啟動DMA控制器,然后繼續(xù)其他工作
之后CPU就將I/O控制權(quán)交給DMA控制器,由DMA.控制器負(fù)責(zé)數(shù)據(jù)傳送
DMA控制器直接與內(nèi)存交互,每次傳送一個(gè)字,這個(gè)過程不需要CPU參與
整個(gè)數(shù)據(jù)傳送結(jié)束后,DMA控制器向CPU發(fā)送一個(gè)中斷信號
因此**只有在傳送開始和結(jié)束時(shí)才需要CPU的參與
**
DMA方式的優(yōu)點(diǎn):數(shù)據(jù)傳輸**以“塊”為單位
,CPU介入的頻率進(jìn)一步降低
;數(shù)據(jù)傳送不再經(jīng)過CPU的寄存器,CPU和設(shè)備的并行操作程度得到了進(jìn)一步提升
**
4、通道控制方式
I/O通道是一種特殊的處理機(jī),它可執(zhí)行一系列通道指令
設(shè)置通道后,CPU只需向通道發(fā)送一條I/O指令,指明通道程序在內(nèi)存中的位置和要訪問的I/O設(shè)備,通道收到該指令后,執(zhí)行通道程序,完成規(guī)定的I/O任務(wù)后,向CPU發(fā)出中斷請求
通道方式**可以實(shí)現(xiàn)CPU、通道和I/O設(shè)備三者的并行工作
**,從而更有效地提高整個(gè)系統(tǒng)的資源利用率
通道與一般處理機(jī)的區(qū)別是:通道指令的類型單一,沒有自己的內(nèi)存,通道所執(zhí)行的通道程序是放在主機(jī)的內(nèi)存中的,也就是說通道與CPU共享內(nèi)存通道與DMA方式的區(qū)別是:DMA方式需要CPU來控制傳輸?shù)臄?shù)據(jù)塊大小、傳輸?shù)膬?nèi)存位置,而通道方式中這些信息是由通道控制的。另外,每個(gè)DMA控制器對應(yīng)一臺設(shè)備與內(nèi)存?zhèn)鬟f數(shù)據(jù),而一個(gè)通道可以控制多臺設(shè)備與內(nèi)存的數(shù)據(jù)交換
I/O軟件層次結(jié)構(gòu)
I/O軟件涉及的面很寬,往下與硬件有著密切關(guān)系,往上又與虛擬存儲器系統(tǒng)、文件系統(tǒng)和用戶直接交互
,它們都需要I/O軟件來實(shí)現(xiàn)I/O操作
為使復(fù)雜的I/O軟件能具有清晰的結(jié)構(gòu)、良好的可移植性和易適應(yīng)性,目前普遍采用**層次式結(jié)構(gòu)
的I/O軟件。將系統(tǒng)中的設(shè)備管理模塊分為若干層次,每層都是利用其下層提供的服務(wù)
**,完成輸入/輸出功能中的某些子功能,并屏蔽這些功能實(shí)現(xiàn)的細(xì)節(jié),向高層提供服務(wù)
在層次式結(jié)構(gòu)的I/O軟件中,只要層次間的接口不變,對某一層次中的軟件的修改都不會引起其下層或高層代碼的變更,僅最低層才涉及硬件的具體特性
一個(gè)比較合理的層次劃分如下所示:
整個(gè)I/O軟件可以視為具有4個(gè)層次的系統(tǒng)結(jié)構(gòu),各層次及其功能如下:
- 用戶層軟件
實(shí)現(xiàn)與用戶交互的接口
,用戶可直接調(diào)用在用戶層提供的、與I/O操作有關(guān)的庫函數(shù),對設(shè)備進(jìn)行操作
通常大部分的I/O軟件都在操作系統(tǒng)內(nèi)核,但仍有一小部分在用戶層,包括與用戶程序鏈接在一起的庫函數(shù)
用戶層I/O軟件必須通過一組系統(tǒng)調(diào)用來獲取操作系統(tǒng)服務(wù)
- 設(shè)備獨(dú)立性軟件
用于**實(shí)現(xiàn)用戶程序與設(shè)備驅(qū)動器的統(tǒng)一接口、設(shè)備命名、設(shè)備保護(hù)以及設(shè)備的分配與釋放等
,同時(shí)為設(shè)備管理和數(shù)據(jù)傳送提供必要的存儲空間
**
設(shè)備獨(dú)立性
也稱設(shè)備無關(guān)性
,其含義是指**應(yīng)用程序所用的設(shè)備不局限于某個(gè)具體的物理設(shè)備
**
為實(shí)現(xiàn)設(shè)備獨(dú)立性而引入了**邏輯設(shè)備
和物理設(shè)備
這兩個(gè)概念
在應(yīng)用程序中,使用邏輯設(shè)備名來請求使用某類設(shè)備
;而在系統(tǒng)實(shí)際執(zhí)行時(shí),必須將邏輯設(shè)備名映射成物理設(shè)備名
**
使用邏輯設(shè)備名的好處:
增加設(shè)備分配的靈活性
易于實(shí)現(xiàn)I/O重定向所謂I/O重定向,是指用于I/O操作的設(shè)備可以更換(重定向),而不必改變應(yīng)用程序
為了實(shí)現(xiàn)設(shè)備獨(dú)立性,必須再在驅(qū)動程序之上設(shè)置一層設(shè)備獨(dú)立性軟件,設(shè)備獨(dú)立性軟件的主要功能可分為以下兩個(gè)方面:
執(zhí)行所有設(shè)備的公有操作
,包括:對設(shè)備的分配與回收;將邏輯設(shè)備名映射為物理設(shè)備名;對設(shè)備進(jìn)行保護(hù),禁止用戶直接訪問設(shè)備;緩沖管理;差錯控制;提供獨(dú)立于設(shè)備的大小統(tǒng)一的邏輯塊,屏蔽設(shè)備之間信息交換單位大小和傳輸速率的差異向用戶層(或文件層)提供統(tǒng)一接口
。無論何種設(shè)備,它們向用戶所提供的接口應(yīng)是相同的。例如,對各種設(shè)備的讀/寫操作,在應(yīng)用程序中都統(tǒng)一使用read/write
命令等
- 設(shè)備驅(qū)動程序
與硬件直接相關(guān),負(fù)責(zé)具體實(shí)現(xiàn)系統(tǒng)對設(shè)備發(fā)出的操作指令,驅(qū)動I/O設(shè)備工作的驅(qū)動程序
通常,每類設(shè)備配置一個(gè)設(shè)備驅(qū)動程序
,它是I/O進(jìn)程與設(shè)備控制器之間的通信程序,通常以進(jìn)程的形式存在
設(shè)備驅(qū)動程序向上層用戶程序提供一組標(biāo)準(zhǔn)接口,設(shè)備具體的差別被設(shè)備驅(qū)動程序所封裝,用于接收上層軟件發(fā)來的抽象I/O要求,如read/write
命令,轉(zhuǎn)換為具體要求后,發(fā)送給設(shè)備控制器,控制I/O設(shè)備工作;它也將由設(shè)備控制器發(fā)來的信號傳送給上層軟件,從而為I/O內(nèi)核子系統(tǒng)隱藏設(shè)備控制器之間的差異
- 中斷處理程序
用于保存被中斷進(jìn)程的CPU環(huán)境,轉(zhuǎn)入相應(yīng)的中斷處理程序進(jìn)行處理,處理完畢再恢復(fù)被中斷進(jìn)程的現(xiàn)場后,返回到被中斷進(jìn)程
中斷處理層的主要任務(wù)有:進(jìn)行進(jìn)程上下文的切換,對處理中斷信號源進(jìn)行測試,讀取設(shè)備狀態(tài)和修改進(jìn)程狀態(tài)等
由于中斷處理與硬件緊密相關(guān),對用戶而言,應(yīng)盡量加以屏蔽,因此應(yīng)放在操作系統(tǒng)的底層,系統(tǒng)的其余部分盡可能少地與之發(fā)生聯(lián)系
用戶對設(shè)備的一次命令各層次的處理過程:
- 當(dāng)用戶要讀取某設(shè)備的內(nèi)容時(shí),通過操作系統(tǒng)提供的
read
命令接口,這就經(jīng)過了**用戶層
** - 操作系統(tǒng)提供給用戶使用的接口一般是統(tǒng)一的通用接口,也就是**
幾乎每個(gè)設(shè)備都可以響應(yīng)的統(tǒng)一命令
,如read
命令,用戶發(fā)出的read
命令,首先經(jīng)過設(shè)備獨(dú)立層
**進(jìn)行解析,然后交往下層 - 接下來,不同類型的設(shè)備對
read
命令的行為有所不同,如磁盤接收read
命令后的行為與打印機(jī)接收read
命令后的行為是不同的。因此,需要針對不同的設(shè)備,將read
命令解析成不同的指令,這就經(jīng)過了**設(shè)備驅(qū)動層
** - 命令解析完畢后,需要中斷正在運(yùn)行的進(jìn)程,轉(zhuǎn)而執(zhí)行**
read
命令,這就需要中斷處理程序
** - 最后,命令真正抵達(dá)硬件設(shè)備,硬件設(shè)備的控制器按照上層傳達(dá)的命令操控硬件設(shè)備,完成相應(yīng)的功能
應(yīng)用程序I/O接口
1、I/O接口的分類
在I/O系統(tǒng)與高層之間的接口中,根據(jù)**設(shè)備類型的不同
**,又進(jìn)一步分為若干類:
- 字符設(shè)備接口
字符設(shè)備是指數(shù)據(jù)的存取和傳輸是**以字符為單位
**的設(shè)備,如鍵盤、打印機(jī)等
基本特征是**傳輸速率較低
、不可尋址
,并且在輸入/輸出時(shí)通常采用中斷驅(qū)動方式
**
get
和put
操作。由于字符設(shè)備不可尋址,只能采取順序存取方式
,通常為字符設(shè)備**建立一個(gè)字符緩沖區(qū)
,用戶程序通過get
操作從緩沖區(qū)獲取字符
,通過put
操作將字符輸出到緩沖區(qū)
**
in-control
指令。字符設(shè)備類型繁多,差異甚大,因此在接口中提供一種通用的in-control
指令來處理它們(包含了許多參數(shù),每個(gè)參數(shù)表示一個(gè)與具體設(shè)備相關(guān)的特定功能)。字符設(shè)備都屬于獨(dú)占設(shè)備,為此接口中還需要提供打開和關(guān)閉操作,以實(shí)現(xiàn)互斥共享
- 塊設(shè)備接口
塊設(shè)備是指數(shù)據(jù)的存取和傳輸是**以數(shù)據(jù)塊為單位
**的設(shè)備,典型的塊設(shè)備是磁盤
基本特征是**傳輸速率較高、可尋址
。磁盤設(shè)備的I/O常采用DMA方式
**
隱藏了磁盤的二維結(jié)構(gòu)
。在二維結(jié)構(gòu)中,每個(gè)扇區(qū)的地址需要用磁道號和扇區(qū)號來表示。塊設(shè)備接口將磁盤的所有扇區(qū)從0
到n-1
依次編號,這樣,就將二維結(jié)構(gòu)變?yōu)橐环N線性序列
將抽象命令映射為低層操作
。塊設(shè)備接口支持上層發(fā)來的對文件或設(shè)備的打開、讀、寫和關(guān)閉等抽象命令,該接口將上述命令映射為設(shè)備能識別的較低層的具體操作
內(nèi)存映射接口通過內(nèi)存的字節(jié)數(shù)組來訪問磁盤,而不提供讀/寫磁盤操作
。映射文件到內(nèi)存的系統(tǒng)調(diào)用返回包含文件副本的一個(gè)虛擬內(nèi)存地址。只在需要訪問內(nèi)存映像時(shí),才由虛擬存儲器實(shí)際調(diào)?。內(nèi)存映射文件的訪問如同內(nèi)存讀/寫一樣簡單,極大地方便了程序員
- 網(wǎng)絡(luò)設(shè)備接口
現(xiàn)代操作系統(tǒng)都提供面向網(wǎng)絡(luò)的功能,因此還需要提供相應(yīng)的網(wǎng)絡(luò)軟件和網(wǎng)絡(luò)通信接口,使計(jì)算機(jī)能夠通過網(wǎng)絡(luò)與網(wǎng)絡(luò)上的其他計(jì)算機(jī)進(jìn)行通信或上網(wǎng)瀏覽
許多操作系統(tǒng)提供的網(wǎng)絡(luò)I/O接口網(wǎng)絡(luò)套接字接口,套接字接口的系統(tǒng)調(diào)用使應(yīng)用程序創(chuàng)建的本地套接字連接到遠(yuǎn)程應(yīng)用程序創(chuàng)建的套接字,通過此連接發(fā)送和接收數(shù)據(jù)
2、阻塞I/O和非阻塞I/O
操作系統(tǒng)的I/O接口還涉及兩種模式:阻塞和非阻塞
- 阻塞I/O
指**當(dāng)用戶進(jìn)程調(diào)用I/O操作時(shí),進(jìn)程就被阻塞,并移到阻塞隊(duì)列,I/O操作完成后,進(jìn)程才被喚醒,移到就緒隊(duì)列
**
當(dāng)進(jìn)程恢復(fù)執(zhí)行時(shí),它收到系統(tǒng)調(diào)用的返回值,并繼續(xù)處理數(shù)據(jù)。大多數(shù)操作系統(tǒng)提供的I/O接口都是采用阻塞I/O
優(yōu)點(diǎn):操作簡單,實(shí)現(xiàn)難度低,適合并發(fā)量小的應(yīng)用開發(fā)
缺點(diǎn):I/O執(zhí)行階段進(jìn)程會一直阻塞下去
- 非阻塞I/O
指**當(dāng)用戶進(jìn)程調(diào)用I/O操作時(shí),不阻塞該進(jìn)程,但進(jìn)程需要不斷詢問I/O操作是否完成,在I/O執(zhí)行階段,進(jìn)程還可以做其他事情
**
當(dāng)問到I/O操作完成后,系統(tǒng)將數(shù)據(jù)從內(nèi)核復(fù)制到用戶空間,進(jìn)程繼續(xù)處理數(shù)據(jù)
優(yōu)點(diǎn):進(jìn)程在等待IO期間不會阻塞,可以做其他事情,適合并發(fā)量大的應(yīng)用開發(fā)
缺點(diǎn):輪詢方式詢問I/O結(jié)果,會占用CPU的時(shí)間
本節(jié)小結(jié)
I/O管理要完成哪些功能?
I/O管理需要完成以下4部分內(nèi)容:
狀態(tài)跟蹤。要能實(shí)時(shí)掌握外部設(shè)備的狀態(tài)
設(shè)備存取。要實(shí)現(xiàn)對設(shè)備的存取操作
設(shè)備分配。在多用戶環(huán)境下,負(fù)責(zé)設(shè)備的分配與回收
設(shè)備控制。包括設(shè)備的驅(qū)動、完成和故障的中斷處理
提醒:
共享設(shè)備必須是可尋址的可隨機(jī)訪問的設(shè)備,若不是,則不能保證數(shù)據(jù)的完整性和一致性
DMA主要用于塊設(shè)備,因此磁盤設(shè)備的I/O控制主要采取DMA方式
設(shè)備的固有屬性決定了設(shè)備的使用方式
設(shè)備獨(dú)立性可以提高設(shè)備分配的靈活性和設(shè)備的利用率
設(shè)備安全性可以保證分配設(shè)備時(shí)不會導(dǎo)致永久阻塞
設(shè)備分配時(shí)一般無需考慮及時(shí)性,及時(shí)性是一個(gè)與系統(tǒng)性能和用戶需求相關(guān)的因素,設(shè)備分配時(shí)應(yīng)該考慮的問題是如何再保證系統(tǒng)安全和正確運(yùn)行的前提下,合理地分配和利用設(shè)備資源
系統(tǒng)為每臺設(shè)備確定一個(gè)編號以便區(qū)分和識別設(shè)備的編號稱為絕對號
通道控制設(shè)備控制器、設(shè)備控制器控制設(shè)備工作,三者關(guān)系層層遞進(jìn)
將系統(tǒng)調(diào)用參數(shù)翻譯成設(shè)備操作命令的工作由設(shè)備無關(guān)的操作系統(tǒng)軟件完成
設(shè)備無關(guān)的操作系統(tǒng)軟件是I/O軟件的一部分,它向上層提供系統(tǒng)調(diào)用的接口,根據(jù)設(shè)備類型選擇調(diào)用相應(yīng)的驅(qū)動程序
設(shè)備驅(qū)動程序負(fù)責(zé)執(zhí)行操作系統(tǒng)發(fā)出的I/O命令,因設(shè)備的不同而不同
在程序直接控制方式下,用戶進(jìn)程在I/O過程中不會被阻塞,驅(qū)動程序完成用戶進(jìn)程的I/O請求后才結(jié)束,CPU和I/O操作串行
在中斷控制方式下,驅(qū)動程序啟動第一次I/O操作后,將調(diào)出其他進(jìn)程執(zhí)行,而當(dāng)前用戶進(jìn)程被阻塞,CPU和設(shè)備準(zhǔn)備并行
在DMC方式下,驅(qū)動程序執(zhí)行調(diào)度程序,轉(zhuǎn)其他進(jìn)程執(zhí)行,當(dāng)前用戶進(jìn)程被阻塞時(shí),CPU和是數(shù)據(jù)傳送并行
中斷處理結(jié)束后,是否返回到被中斷的進(jìn)程,有兩種情況:
1、采用的是屏蔽中斷方式(單重中斷),此時(shí)會返回被中斷的進(jìn)程
2、采用的是中斷嵌套方式(多重中斷),若沒有更搞優(yōu)先級的中斷請求,則會返回被中斷的進(jìn)程;否則系統(tǒng)將處理更高優(yōu)先級的中斷請求
設(shè)備獨(dú)立性軟件
設(shè)備獨(dú)立性軟件
也稱與設(shè)備無關(guān)的軟件
,是**I/O系統(tǒng)的最高層軟件
,它的下層是設(shè)備驅(qū)動程序
,其界限因操作系統(tǒng)和設(shè)備的不同而有所差異??傮w而言,設(shè)備獨(dú)立性軟件包括執(zhí)行所有設(shè)備公有操作的軟件
**
高速緩存與緩沖區(qū)
1、磁益高速媛存(Disk Cache)
操作系統(tǒng)中**使用磁盤高速緩存技術(shù)來提高磁盤的I/O速度
,訪問高速緩存比訪問原始磁盤數(shù)據(jù)更為高效
**
磁盤高速緩存技術(shù)是指**利用內(nèi)存中的存儲空間來暫存從磁盤中讀出的一系列盤塊中的信息
。因此,磁盤高速緩存邏輯上屬于磁盤
,物理上則是駐留在內(nèi)存中的盤塊
**
磁盤高速緩存在內(nèi)存中分為兩種形式:
一種是**在內(nèi)存中開辟一個(gè)單獨(dú)的空間作為緩存區(qū),大小固定
**
另一種是**將未利用的內(nèi)存空間作為一個(gè)緩沖池,供請求分?系統(tǒng)和磁盤I/O時(shí)共享
**
2、緩沖區(qū)(Buffer)
在設(shè)備管理子系統(tǒng)中,引入緩沖區(qū)的目的主要如下:
緩和CPU與I/O設(shè)備間速度不匹配的矛盾
減少對CPU的中斷頻率
,放寬對CPU中斷響應(yīng)時(shí)間的限制- 解決基本數(shù)據(jù)單元大小(數(shù)據(jù)粒度)不匹配的問題
提高CPU和I/O設(shè)備之間的并行性
緩沖區(qū)的實(shí)現(xiàn)方法如下:
采用硬件緩沖器
,但由于成本太高,除一些關(guān)鍵部位外,一般不采用硬件緩沖器利用內(nèi)存作為緩沖區(qū)
根據(jù)系統(tǒng)設(shè)置緩沖區(qū)的個(gè)數(shù),緩沖技術(shù)可以分為如下幾種:
- 單緩沖
每當(dāng)用戶進(jìn)程發(fā)出一個(gè)I/O請求,操作系統(tǒng)便在內(nèi)存中之分配一個(gè)緩沖區(qū)
。通常,一個(gè)緩沖區(qū)的大小就是一個(gè)塊
在塊設(shè)備輸入時(shí),假定從設(shè)備將一塊數(shù)據(jù)輸入到緩沖區(qū)的時(shí)間
為T
,操作系統(tǒng)將該緩沖區(qū)中的數(shù)據(jù)傳送到工作區(qū)的時(shí)間
為M
,而CPU對這一塊數(shù)據(jù)進(jìn)行處理的時(shí)間
為C
。注意,必須等緩沖區(qū)沖滿后才能從緩沖區(qū)中取出數(shù)據(jù)
在單緩沖區(qū)中,T是可以和C并行的
當(dāng)T>C
時(shí),CPU處理一塊完數(shù)據(jù)后,暫時(shí)不能將下一塊數(shù)據(jù)傳送到工作區(qū),必須等待緩沖區(qū)裝滿數(shù)據(jù),再將下一塊數(shù)據(jù)從緩沖區(qū)傳送到工作區(qū),平均處理一塊數(shù)據(jù)的時(shí)間為T+M
當(dāng)T<C
時(shí),緩沖區(qū)中裝滿數(shù)據(jù)后,暫時(shí)不能繼續(xù)送入下一塊數(shù)據(jù),必須等待CPU處理完上一塊數(shù)據(jù),再將下一塊數(shù)據(jù)從緩沖區(qū)傳送到工作區(qū),平均處理一塊數(shù)據(jù)的時(shí)間為C+M
總結(jié):單緩沖區(qū)處理每塊數(shù)據(jù)的平均時(shí)間為Max(C,T)+M
由于緩沖區(qū)是共享資源,因此**使用時(shí)必須互斥
**。若CPU尚未取走緩沖區(qū)中的數(shù)據(jù),則即使設(shè)備又生產(chǎn)出新的數(shù)據(jù),也無法將其送入緩沖區(qū),此時(shí)設(shè)備需要等待
- 雙緩沖
為了加快輸入和輸出速度,提高設(shè)備利用率,引入了雙緩沖機(jī)制
,也稱緩沖對換
當(dāng)設(shè)備輸入數(shù)據(jù)時(shí),先將數(shù)據(jù)送入緩沖區(qū)1,裝滿后便轉(zhuǎn)向緩沖區(qū)2
此時(shí),操作系統(tǒng)可以從緩沖區(qū)1中取出數(shù)據(jù),送入用戶進(jìn)程,并由CPU對數(shù)據(jù)進(jìn)行處理
當(dāng)緩沖區(qū)1中取出的數(shù)據(jù)處理完后,若緩沖區(qū)2已沖滿,則操作系統(tǒng)又從緩沖區(qū)2中取出數(shù)據(jù)送入用戶進(jìn)程處理,而設(shè)備又可以開始將數(shù)據(jù)送入緩沖區(qū)1
雙緩沖機(jī)制提高了設(shè)備和CPU的并行程度
設(shè)備輸入數(shù)據(jù)到緩沖區(qū)、數(shù)據(jù)傳送到用戶進(jìn)程和處理的時(shí)間分別為T
、M
和C
在雙緩沖區(qū)中,C和M是可以與T并行的
當(dāng)T>C+M
時(shí),說明**設(shè)備輸入的時(shí)間比數(shù)據(jù)傳送和處理的時(shí)間多,可使設(shè)備連續(xù)輸入
。假設(shè)在某個(gè)時(shí)刻,緩沖區(qū)1是空的,緩沖區(qū)2是滿的,緩沖區(qū)2開始向工作區(qū)傳送數(shù)據(jù),緩沖區(qū)1開始裝入數(shù)據(jù)。傳送并處理的時(shí)間為C+M
,但緩沖區(qū)1還未裝滿,必須等待緩沖區(qū)1裝滿數(shù)據(jù),再將下一塊數(shù)據(jù)從緩沖區(qū)1傳送到工作區(qū),平均處理一塊數(shù)據(jù)的時(shí)間為T
當(dāng)T<C+M
時(shí),說明設(shè)備輸入的時(shí)間比數(shù)據(jù)傳送和處理的時(shí)間少,可使CPU不必等待設(shè)備輸入
**。假設(shè)在某個(gè)時(shí)刻,緩沖區(qū)1是空的,緩沖區(qū)2是滿的,緩沖區(qū)2開始向工作區(qū)傳送數(shù)據(jù),緩沖區(qū)1開始裝入數(shù)據(jù)。緩沖區(qū)1裝滿數(shù)據(jù)的用時(shí)為T
,必須等待緩沖區(qū)2中的數(shù)據(jù)傳送并處理完后,才能將下一塊數(shù)據(jù)從緩沖區(qū)1傳送到工作區(qū),平均處理一塊數(shù)據(jù)的時(shí)間為C+M
總結(jié):雙緩沖區(qū)處理每塊數(shù)據(jù)的平均時(shí)間為Max(C+M,T)
若兩臺機(jī)器之間僅配置了單緩沖
則它們**在任意時(shí)刻都只能實(shí)現(xiàn)單方向的數(shù)據(jù)傳輸
,而絕不允許雙方同時(shí)向?qū)Ψ桨l(fā)送數(shù)據(jù)
**
為了實(shí)現(xiàn)雙向數(shù)據(jù)傳輸,必須在兩臺機(jī)器中都設(shè)置兩個(gè)緩沖區(qū),一個(gè)用作發(fā)送緩沖區(qū),另一個(gè)用作接收緩沖區(qū)
注:
在雙緩沖機(jī)制中,當(dāng)輸入與輸出的速度基本匹配時(shí),能取得較好的效果
但若兩者的速度相差甚遠(yuǎn),則雙緩沖區(qū)的效果不會太理想
- 循環(huán)緩沖
多緩沖機(jī)制,讓多個(gè)緩沖區(qū)組成循環(huán)緩沖區(qū)的形式
?;疑硎疽蜒b滿數(shù)據(jù)的緩沖區(qū),白色表示空緩沖區(qū)
循環(huán)緩沖**包含多個(gè)大小相等的緩沖區(qū)
**,每個(gè)緩沖區(qū)中有一個(gè)鏈接指針指向下一個(gè)緩沖區(qū),最后一個(gè)緩沖區(qū)指針指向第一個(gè)緩沖區(qū),多個(gè)緩沖區(qū)鏈接成一個(gè)循環(huán)隊(duì)列
循環(huán)緩沖中還需設(shè)置in
和out
兩個(gè)指針,in
指向**第一個(gè)可以輸入數(shù)據(jù)的空緩沖區(qū)
,out
指向第一個(gè)可以提取數(shù)據(jù)的滿緩沖區(qū)
。輸入/輸出時(shí),in和out指針沿鏈接方向循環(huán)移動
**
- 緩沖池
相比于緩沖區(qū)(僅是一塊內(nèi)存空間),緩沖池是**包含一個(gè)用于管理自身的數(shù)據(jù)結(jié)構(gòu)和一組操作函數(shù)的管理機(jī)制,用于管理多個(gè)緩沖區(qū)
。緩沖池可供多個(gè)進(jìn)程共享使用
**
緩沖池由多個(gè)系統(tǒng)公用的緩沖區(qū)組成,緩沖區(qū)按其使用狀況可以分為:
- 空緩沖隊(duì)列,由空緩沖區(qū)鏈接而成的隊(duì)列
- 輸入隊(duì)列,由裝滿輸入數(shù)據(jù)的緩沖區(qū)鏈接而成的隊(duì)列
- 輸出隊(duì)列,由裝滿輸出數(shù)據(jù)的緩沖區(qū)所鏈接成的隊(duì)列
此外還應(yīng)具有4種工作緩沖區(qū):
- 用于**
收容輸入
**數(shù)據(jù)的工作緩沖區(qū)(hin)
- 用于**
提取輸入
**數(shù)據(jù)的工作緩沖區(qū)(sin)
- 用于**
收容輸出
**數(shù)據(jù)的工作緩沖區(qū)(hout)
- 用于**
提取輸出
**數(shù)據(jù)的工作緩沖區(qū)(sout)
緩沖池中的緩沖區(qū)有以下4種工作方式:
- 收容輸入。
輸入進(jìn)程
需要輸入數(shù)據(jù)
時(shí),從空緩沖隊(duì)列的隊(duì)首摘下一個(gè)空緩沖區(qū)
,作為收容輸入工作緩沖區(qū),然后**將數(shù)據(jù)輸入
其中,裝滿
后再將它掛到輸入隊(duì)列的隊(duì)尾
** - 提取輸入。
計(jì)算進(jìn)程
需要輸入數(shù)據(jù)
時(shí),從輸入隊(duì)列的隊(duì)首取得一個(gè)緩沖區(qū)
,作為提取輸入工作緩沖區(qū),從中**提取數(shù)據(jù)
,用完該數(shù)據(jù)
后將它掛到空緩沖隊(duì)列的列尾
** - 收容輸出。
計(jì)算進(jìn)程
需要輸出數(shù)據(jù)
時(shí),從空緩沖隊(duì)列的隊(duì)首取得一個(gè)空緩沖區(qū)
,作為收容輸出工作緩沖區(qū),當(dāng)其中**裝滿數(shù)據(jù)后
,再將它掛到輸出隊(duì)列的隊(duì)尾
** - 提取輸出。
輸出進(jìn)程
需要輸出數(shù)據(jù)
時(shí),從輸出隊(duì)列的隊(duì)首取得一個(gè)裝滿輸出數(shù)據(jù)的緩沖區(qū)
,作為提取輸出工作緩沖區(qū),當(dāng)**數(shù)據(jù)提取完后
,再將它掛到空緩沖隊(duì)列的隊(duì)尾
**
高速緩存與緩沖區(qū)的對比:
高速緩存是**可以保存數(shù)據(jù)拷?的高速存儲器
**,訪問高速緩存比訪問原始數(shù)據(jù)更高效,速度更快
設(shè)備分配與回收
1、設(shè)備分配概述
設(shè)備分配是指**根據(jù)用戶的I/O請求分配所需的設(shè)備
**
分配的總原則:充分發(fā)揮設(shè)備的使用效率,盡可能地讓設(shè)備忙碌,又要避免由于不合理的分配方法造成進(jìn)程死鎖
2、設(shè)備分配的數(shù)據(jù)結(jié)構(gòu)
在系統(tǒng)中,可能存在多個(gè)通道,每個(gè)通道可以連接多個(gè)控制器,每個(gè)控制器可以連接多個(gè)物理設(shè)備
設(shè)備分配的數(shù)據(jù)結(jié)構(gòu)要能體現(xiàn)出這種從屬關(guān)系,各數(shù)據(jù)結(jié)構(gòu)的介紹如下:
- 設(shè)備控制表(DCT)
系統(tǒng)為**每個(gè)設(shè)備配置一張DCT
**,表中的表項(xiàng)就是設(shè)備的各個(gè)屬性
在DCT中,應(yīng)該有下列字段:
設(shè)備類型:表示設(shè)備類型,如打印機(jī)、掃描儀、鍵盤等
設(shè)備標(biāo)識符:即物理設(shè)備名,每個(gè)設(shè)備在系統(tǒng)中的物理設(shè)備名是唯一的
設(shè)備狀態(tài):表示當(dāng)前設(shè)備的狀態(tài)(忙/閑)
指向控制器表的指針:每個(gè)設(shè)備由一個(gè)控制器控制,該指針指向?qū)?yīng)的控制器表
重復(fù)執(zhí)行次數(shù)或時(shí)間:重復(fù)執(zhí)行次數(shù)達(dá)到規(guī)定值仍不成功時(shí),才認(rèn)為此次I/O失敗
設(shè)備隊(duì)列的隊(duì)首指針:指向正在等待該設(shè)備的進(jìn)程隊(duì)列(由進(jìn)程PCB組成)的隊(duì)首
注:當(dāng)某個(gè)進(jìn)程釋放某個(gè)設(shè)備,且無其他進(jìn)程請求該設(shè)備時(shí),系統(tǒng)將該設(shè)備DCT中的設(shè)備狀態(tài)改為空閑,即可實(shí)現(xiàn)“設(shè)備回收”
- 控制器控制表(COCT)
每個(gè)設(shè)備控制器都對應(yīng)一張COCT
操作系統(tǒng)根據(jù)COCT的信息**對控制器進(jìn)行操作和管理
。每個(gè)控制器由一個(gè)通道控制
**,通過表項(xiàng)與控制器連接的通道表指針
可以找到相應(yīng)通道的信息
- 通道控制表(CHCT)
每個(gè)通道都對應(yīng)一張CHCT
操作系統(tǒng)根據(jù)CHCT的信息**對通道進(jìn)行操作和管理
。一個(gè)通道可為多個(gè)控制器服務(wù)
**,通過表項(xiàng)與通道連接的控制器表首址
可以找到該通道管理的所有控制器的信息
- 系統(tǒng)設(shè)備表(SDT)
整個(gè)系統(tǒng)只有一張SDT
它**記錄已連接到系統(tǒng)中的所有物理設(shè)備的情況
,每個(gè)物理設(shè)備對應(yīng)一個(gè)表目
**
3、設(shè)備分配時(shí)應(yīng)考慮的因素
在多道程序系統(tǒng)中,進(jìn)程數(shù)多于資源數(shù),因此要有一套合理的分配原則,主要考慮的因素有設(shè)備的固有屬性、設(shè)備的分配算法、設(shè)備分配的安全性以及設(shè)備的獨(dú)立性
- 設(shè)備的固有屬性
設(shè)備的固有屬性可分成三種,對它們應(yīng)采取不同的分配策略:
- 獨(dú)占設(shè)備:將它分配給某個(gè)進(jìn)程后,便由該進(jìn)程獨(dú)占,直至進(jìn)程完成或釋放該設(shè)備
- 共享設(shè)備:可將它同時(shí)分配給多個(gè)進(jìn)程,需要合理調(diào)度各個(gè)進(jìn)程訪問該設(shè)備的先后次序
- 虛擬設(shè)備:虛擬設(shè)備**
屬于可共享設(shè)備
**,可將它同時(shí)分配給多個(gè)進(jìn)程使用
- 設(shè)備分配算法
針對設(shè)備分配,通常只采用以下兩種分配算法:
- FCFS算法。該算法根據(jù)各個(gè)進(jìn)程對某個(gè)設(shè)備提出請求的先后次序,將這些進(jìn)程**
排成一個(gè)設(shè)備請求隊(duì)列
,設(shè)備分配程序總是將設(shè)備首先分配給隊(duì)首進(jìn)程
** - 最高優(yōu)先級優(yōu)先算法。在用該算法形成設(shè)備隊(duì)列時(shí),
優(yōu)先級高的進(jìn)程排在設(shè)備隊(duì)列前面
,而**對于優(yōu)先級相同的I/O請求,則按FCFS原則排隊(duì)
**
- 設(shè)備分配中的安全性
設(shè)備分配中的安全性是指**在設(shè)備分配中應(yīng)防止發(fā)生進(jìn)程死鎖
**
- 安全分配方式
每當(dāng)進(jìn)程發(fā)出I/O請求后,便進(jìn)入阻塞態(tài),直到其I/O操作完成時(shí)才被喚醒
這樣,進(jìn)程一旦獲得某種設(shè)備后便會阻塞
,不能再請求任何資源,而在它阻塞時(shí)也不保持任何資源
其優(yōu)點(diǎn)是**設(shè)備分配安全
;缺點(diǎn)是CPU和I/O設(shè)備是串行工作的
** - 不安全分配方式
進(jìn)程**在發(fā)出I/O請求后仍繼續(xù)運(yùn)行
,需要時(shí)又會發(fā)出第二個(gè)、第三個(gè)I/O請求等
僅當(dāng)進(jìn)程所請求的設(shè)備已被另一進(jìn)程占用時(shí),才進(jìn)入阻塞態(tài)
優(yōu)點(diǎn)是一個(gè)進(jìn)程可同時(shí)操作多個(gè)設(shè)備,使進(jìn)程推進(jìn)迅速
;缺點(diǎn)是有可能造成死鎖
**
4、設(shè)備分配的步驟
下面以獨(dú)占設(shè)備為例,介紹設(shè)備分配的過程
- 分配設(shè)備。首先根據(jù)I/O請求中的物理設(shè)備名,查找SDT,從中找出該設(shè)備的DCT,再根據(jù)DCT中的設(shè)備狀態(tài)字段,可知該設(shè)備的狀態(tài)。若忙,則將進(jìn)程PCB掛到設(shè)備等待隊(duì)列中;若不忙,則根據(jù)一定的策略將設(shè)備分配給該進(jìn)程
- 分配控制器。設(shè)備分配后,根據(jù)DCT找到COCT,查詢控制器的狀態(tài)。若忙,則將進(jìn)程PCB掛到控制器等待隊(duì)列中;若不忙,則將控制器分配給該進(jìn)程
- 分配通道??刂破鞣峙浜?#xff0c;根據(jù)COCT找到CHCT,查詢通道的狀態(tài)。若忙,則將進(jìn)程PCB掛到通道等待隊(duì)列中;若不忙,則將通道分配給該進(jìn)程
- 只有設(shè)備、控制器和通道都分配成功時(shí),這次的設(shè)備分配才算成功,之后便可啟動設(shè)備進(jìn)行數(shù)據(jù)傳送
在上面的例子中,進(jìn)程是以物理設(shè)備名提出I/O請求的
。若指定設(shè)備已分配給其他進(jìn)程,則該進(jìn)程分配失敗,或者說上面的設(shè)備分配程序不具有設(shè)備無關(guān)性。為了獲得設(shè)備的獨(dú)立性,進(jìn)程應(yīng)使用邏輯設(shè)備名
。這樣,系統(tǒng)首先從SDT中找出第一個(gè)**該類
**設(shè)備的DCT。若該設(shè)備忙,則查找第二個(gè)該類設(shè)備的DCT,僅當(dāng)所有該類設(shè)備都忙時(shí),才將進(jìn)程掛到該類設(shè)備的等待隊(duì)列上。而只要有一個(gè)該類設(shè)備可用,系統(tǒng)便進(jìn)入進(jìn)一步的分配操作
5、邏輯設(shè)備名到物理設(shè)備名的映射
為了**實(shí)現(xiàn)設(shè)備的獨(dú)立性
,進(jìn)程中應(yīng)使用邏輯設(shè)備名
來請求某類設(shè)備
因?yàn)橄到y(tǒng)只識別物理設(shè)備名,因此在系統(tǒng)中需要配置一張邏輯設(shè)備表
,用于將邏輯設(shè)備名映射為物理設(shè)備名
**
**邏輯設(shè)備表(LUT)
**的每個(gè)表項(xiàng)中包含3項(xiàng)內(nèi)容:邏輯設(shè)備名
、物理設(shè)備名
和設(shè)備驅(qū)動程序的入口地址
當(dāng)進(jìn)程用邏輯設(shè)備名來請求分配設(shè)備時(shí),系統(tǒng)會為它分配一臺相應(yīng)的物理設(shè)備,并在LUT中建立一個(gè)表目,填上相應(yīng)的信息,當(dāng)以后進(jìn)程再利用該邏輯設(shè)備名請求I/O操作時(shí),系統(tǒng)通過查找LUT來尋找對應(yīng)的物理設(shè)備及其驅(qū)動程序
在系統(tǒng)中,可采取兩種方式設(shè)置邏輯設(shè)備表:
整個(gè)系統(tǒng)中只設(shè)置一張LUT
。所有進(jìn)程的設(shè)備分配情況都記錄在同一張LUT中,這就**要求所有用戶不能使用相同的邏輯設(shè)備名
,主要適用于單用戶系統(tǒng)
**為每個(gè)用戶設(shè)置一張LUT
。系統(tǒng)為每個(gè)用戶設(shè)置一張LUT,同時(shí)在多用戶系統(tǒng)中都配置系統(tǒng)設(shè)備表。因此,不同用戶可以使用相同的邏輯設(shè)備名
SPOOLing技術(shù)(假脫機(jī)技術(shù))
為了緩和CPU的高速性與I/O設(shè)備的低速性之間的矛盾
,引入了假脫機(jī)技術(shù)
,它是操作系統(tǒng)中采用的一項(xiàng)**將獨(dú)占設(shè)備改造成共享設(shè)備的技術(shù)
**
該技術(shù)利用**專?的外圍控制機(jī)
,先將低速I/O設(shè)備上的數(shù)據(jù)傳送到高速磁盤上,或者相反
**
當(dāng)**CPU需要輸入數(shù)據(jù)時(shí)
,便可直接從磁盤中讀取數(shù)據(jù)
;當(dāng)CPU需要輸出數(shù)據(jù)時(shí)
,也能以很快的速度將數(shù)據(jù)先輸出到磁盤上
**
引入多道程序技術(shù)后,系統(tǒng)便**可利用程序來模擬脫機(jī)輸入/輸出時(shí)的外圍控制機(jī),在主機(jī)的直接控制下實(shí)現(xiàn)脫機(jī)輸入/輸出功能
**
SPOOLing系統(tǒng)的組成如下所示:
- 輸入井和輸出井
在**磁盤上
**開辟出的兩個(gè)存儲區(qū)域
輸入井模擬脫機(jī)輸入時(shí)的磁盤,用于收容I/O設(shè)備輸入的數(shù)據(jù)
輸出井模擬脫機(jī)輸出時(shí)的磁盤,用于收容用戶程序的輸出數(shù)據(jù)
一個(gè)進(jìn)程的輸入(或輸出)數(shù)據(jù)保存為一個(gè)文件,所有進(jìn)程的輸入(或輸出)文件鏈接成一個(gè)輸入(或輸出)隊(duì)列
- 輸入緩沖區(qū)和輸出緩沖區(qū)
在**內(nèi)存中
**開辟的兩個(gè)緩沖區(qū)
輸入緩沖區(qū)用于暫存由輸入設(shè)備送來的數(shù)據(jù),以后再傳送到輸入井
輸出緩沖區(qū)用于暫存從輸出井送來的數(shù)據(jù),以后再傳送到輸出設(shè)備
起到暫存作用,暫存在內(nèi)存中
- 輸入進(jìn)程和輸出進(jìn)程
輸入進(jìn)程
用于模擬脫機(jī)輸入時(shí)的外圍控制機(jī)
,將用戶要求的數(shù)據(jù)從輸入設(shè)備傳送到輸入緩沖區(qū),再存放到輸入井中
。當(dāng)CPU需要輸入數(shù)據(jù)時(shí),直接從輸入井中讀入內(nèi)存
輸出進(jìn)程
用于模擬脫機(jī)輸出時(shí)的外圍控制機(jī)
,將用戶要求輸入的數(shù)據(jù)從內(nèi)存?zhèn)魉偷捷敵鼍?#xff0c;待輸出設(shè)備空閑時(shí),再將輸出井中的數(shù)據(jù)經(jīng)輸出緩沖區(qū)輸出至輸出設(shè)備
- 井管理程序
用于控制作業(yè)與磁盤井之間信息的交換
打印機(jī)是典型的獨(dú)占設(shè)備,利用SPOOLing技術(shù)可將它改造為一臺可供多個(gè)用戶共享的打印設(shè)備
當(dāng)多個(gè)用戶進(jìn)程發(fā)出打印輸出請求時(shí),SPOOLing系統(tǒng)同意它們的請求,但并不真正立即將打印機(jī)分配給它們,而由假脫機(jī)管理進(jìn)程為每個(gè)進(jìn)程做如下兩項(xiàng)工作:
在磁盤緩沖區(qū)中為進(jìn)程申請一個(gè)空閑盤塊
,并將要打印的**數(shù)據(jù)送入其中暫存
**- 為用戶進(jìn)程**
申請一張空白的用戶請求打印表
,并將用戶的打印要求填入其中,再將該表掛到假脫機(jī)文件隊(duì)列上
**
對每個(gè)用戶進(jìn)程而言,系統(tǒng)并非即時(shí)執(zhí)行真實(shí)的打印操作,而只是即時(shí)將數(shù)據(jù)輸出到緩沖區(qū),這時(shí)的數(shù)據(jù)并未被真正打印,而只讓用戶感覺系統(tǒng)已為它打印,真正的打印操作是在打印機(jī)空閑且該打印任務(wù)在等待隊(duì)列中己排到隊(duì)首時(shí)進(jìn)行的
以上過程用戶是不可?的。雖然系統(tǒng)中只有一臺打印機(jī),但是當(dāng)進(jìn)程提出打印請求時(shí),系統(tǒng)都在輸出井中為其分配一個(gè)緩沖區(qū)(相當(dāng)于分配一臺邏輯設(shè)備),使每個(gè)進(jìn)程都覺得自己正在獨(dú)占一臺打印機(jī),從而實(shí)現(xiàn)對打印機(jī)的共享
SPOOLing系統(tǒng)的特點(diǎn):
提高了I/O速度
,將對低速I/O設(shè)備執(zhí)行的操作演變?yōu)閷Υ疟P緩沖區(qū)中數(shù)據(jù)的存取操作,如同脫機(jī)輸入/輸出一樣,緩和了CPU和低速I/O設(shè)備之間速度不匹配的矛盾
獨(dú)占設(shè)備改造為共享設(shè)備
,在假脫機(jī)打印機(jī)系統(tǒng)中,實(shí)際上并沒有為任何進(jìn)程分配設(shè)備
實(shí)現(xiàn)了虛擬設(shè)備功能
,對每個(gè)進(jìn)程而言,它們都認(rèn)為自己獨(dú)占了一臺設(shè)備
設(shè)備驅(qū)動程序接口
設(shè)備驅(qū)動程序是I/O系統(tǒng)的上層與設(shè)備控制器之間的通信程序
,其主要任務(wù)是**接收上層應(yīng)用發(fā)來的抽象I/O請求
,如read
或write
命令,將它們轉(zhuǎn)換為具體要求后發(fā)送給設(shè)備控制器,進(jìn)而使其啟動設(shè)備去執(zhí)行任務(wù)
;反之,它也將設(shè)備控制器發(fā)來的信號傳送給上層應(yīng)用
**
為了實(shí)現(xiàn)上層應(yīng)用與設(shè)備控制器之間的通信,設(shè)備驅(qū)動程序應(yīng)具有以下功能:
接收
由上層軟件發(fā)來的命令和參數(shù)
,并**將抽象要求轉(zhuǎn)換為與設(shè)備相關(guān)的具體要求
**。例如,將抽象要求中的盤塊號轉(zhuǎn)換為磁盤的盤面號、磁道號及扇區(qū)號檢查
用戶I/O請求的合法性
,了解
設(shè)備的工作狀態(tài)
,傳遞
與設(shè)備操作有關(guān)的參數(shù)
,設(shè)置
設(shè)備的工作方式
- 發(fā)出I/O命令,若設(shè)備**
空閑
,則立即啟動
它,完成指定的I/O操作;若設(shè)備忙
,則將請求者的PCB掛到設(shè)備隊(duì)列上等待
** - 及時(shí)響應(yīng)由設(shè)備控制器發(fā)來的中斷請求,并根據(jù)其中斷類型,調(diào)用相應(yīng)的中斷處理程序進(jìn)行處理
相比于普通的應(yīng)用程序和系統(tǒng)程序,設(shè)備驅(qū)動程序具有以下差異:
- 設(shè)備驅(qū)動程序?qū)⒊橄蟮腎/O請求轉(zhuǎn)換成具體的I/O操作后,傳送給設(shè)備控制器,并將設(shè)備控制器中記錄的設(shè)備狀態(tài)和I/O操作的完成情況及時(shí)地反饋給請求進(jìn)程
- 設(shè)備驅(qū)動程序**
與設(shè)備采用的I/O控制方式緊密相關(guān)
,常用的I/O控制方式是中斷驅(qū)動方式
和DMA方式
** - 設(shè)備驅(qū)動程序**
與硬件密切相關(guān)
,對于不同類型的設(shè)備,應(yīng)配置不同的設(shè)備驅(qū)動程序
** - 由于設(shè)備驅(qū)動程序與硬件緊密相關(guān),目前很多設(shè)備驅(qū)動程序的基本部分已固化在ROM中
- 設(shè)備驅(qū)動程序應(yīng)**
允許同時(shí)多次調(diào)用執(zhí)行
**
為了使所有的設(shè)備驅(qū)動程序都有統(tǒng)一的接口:
- 一方面,要求**
每個(gè)設(shè)備驅(qū)動程序與操作系統(tǒng)之間都有相同或相近的接口
**,以便更容易地添加一個(gè)新的設(shè)備驅(qū)動程序,同時(shí)更容易地編制設(shè)備驅(qū)動程序 - 另一方面,要**
將抽象的設(shè)備名轉(zhuǎn)換為具體的物理設(shè)備名
**,并且進(jìn)一步找到相應(yīng)的設(shè)備驅(qū)動程序入口 - 此外,還應(yīng)**
對設(shè)備進(jìn)行保護(hù),防止無權(quán)訪問的用戶使用設(shè)備
**
本節(jié)小結(jié)
當(dāng)處理機(jī)和外部設(shè)備的速度差距較大時(shí),有什么辦法可以解決問題?
可采用緩沖技術(shù)來緩解CPU與外設(shè)速度上的矛盾
即在某個(gè)地方(一般為主存)設(shè)立一片緩沖區(qū),外設(shè)與CPU的輸入/輸出都經(jīng)過緩沖區(qū),這樣外設(shè)和CPU就都不用互相等待
什么是設(shè)備的獨(dú)立性?引入設(shè)備的獨(dú)立性有什么好處?
設(shè)備獨(dú)立性是指用戶在編程序時(shí)使用的設(shè)備與實(shí)際設(shè)備無關(guān)
一個(gè)程序應(yīng)獨(dú)立于分配給它的某類設(shè)備的具體設(shè)備,即在用戶程序中只指明I/O使用的設(shè)備類型即可設(shè)備獨(dú)立性有以下優(yōu)點(diǎn):
1、方便用戶編程
2、使程序運(yùn)行不受具體機(jī)器環(huán)境的限制
3、便于程序移植
提醒:
設(shè)備的獨(dú)立性是指用戶使用設(shè)備的透明性,因此用戶編程時(shí)使用的設(shè)備與實(shí)際使用的設(shè)備無關(guān)
緩沖池是系統(tǒng)的共用資源,可供多個(gè)進(jìn)程共享,并且既能用于輸入,又能用于輸出。一般包含三種類型的緩沖:1、空閑緩沖區(qū);2、裝滿輸入數(shù)據(jù)的緩沖區(qū);3、裝滿輸出數(shù)據(jù)的緩沖區(qū)。為了管理上的方便,可將相同類型的緩沖區(qū)鏈成一個(gè)隊(duì)列
支持雙向發(fā)送和接收數(shù)據(jù)的設(shè)備應(yīng)使用雙緩沖區(qū),雙緩沖區(qū)可以實(shí)現(xiàn)同一時(shí)刻的雙向數(shù)據(jù)傳輸,提高設(shè)備的效率和利用率
單緩沖區(qū)只能實(shí)現(xiàn)單向數(shù)據(jù)傳輸
多緩沖區(qū)和緩沖池是用于提高I/O性能的技術(shù),但不是必須的,也不一定適合所有的雙向設(shè)備
使用單緩沖或雙緩沖進(jìn)行通信時(shí),都可以實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸。單緩沖只是不同時(shí)刻收發(fā)數(shù)據(jù),是可以進(jìn)行雙向傳輸?shù)?在鼠標(biāo)移動式,若有高優(yōu)先級的操作產(chǎn)生,為例記錄鼠標(biāo)活動的情況,必須使用緩沖技術(shù)
由于磁盤驅(qū)動器和目標(biāo)或源I/O設(shè)備間的吞吐量不同,必須采用緩沖技術(shù)
為了能使數(shù)據(jù)從用戶作業(yè)空間傳送到磁盤或從磁盤傳送到用戶作業(yè)空間,必須采用緩沖技術(shù)
單機(jī)資源利用率最關(guān)鍵的資源使處理器資源,最大化地提高處理器利用率就能最大化的提高系統(tǒng)效率
多道程序設(shè)計(jì)技術(shù)使提高處理器利用率的關(guān)鍵技術(shù),而如SPOOLing技術(shù)、虛擬技術(shù)、交換技術(shù)這些都屬于設(shè)備和內(nèi)存的相關(guān)技術(shù)
SPOOLing技術(shù)需要使用磁盤空間(輸入井和輸出井)和內(nèi)存空間(輸入/輸出緩沖區(qū)),不需要外圍計(jì)算機(jī)的支持
SPOOLing系統(tǒng)由預(yù)輸入程序(輸入進(jìn)程和輸入緩沖區(qū))、井管理程序(輸入井和輸出井)和緩輸出程序(輸出進(jìn)程和輸出緩沖區(qū))組成
構(gòu)成SPOOLing系統(tǒng)的基本條件:不僅要有大容量、高速度的外村作為輸入井和輸出井,而且還要有SPOOLing軟件的支持
利用SPOOLing技術(shù)提高了系統(tǒng)和I/O設(shè)備的利用率,不必等待I/O操作完成
SPOOLing技術(shù)將獨(dú)占設(shè)備虛擬成共享設(shè)備,因此必須先有獨(dú)占設(shè)備才行
設(shè)備寄存器寫命令是由設(shè)備驅(qū)動程序完成的
檢查用戶是否有權(quán)使用設(shè)備屬于設(shè)備保護(hù),使由設(shè)備獨(dú)立性軟件完成的
將二進(jìn)制整數(shù)轉(zhuǎn)換成ASCII碼的格式打印時(shí)通過I/O庫函數(shù)完成的,屬于用戶層軟件
緩沖區(qū)管理屬于輸入/輸出的共有操作,是由設(shè)備獨(dú)立性軟件完成的
對I/O設(shè)備傳回的數(shù)據(jù)進(jìn)行分析和緩沖由操作系統(tǒng)完成
設(shè)備驅(qū)動程序的處理過程:
1、將抽象要求轉(zhuǎn)化為具體要求
2、對服務(wù)請求進(jìn)行校驗(yàn)
3、檢查設(shè)備狀態(tài)
4、傳送必要的參數(shù)
5、啟動I/O設(shè)備
計(jì)算柱面號、磁頭號和扇區(qū)號的工作是由設(shè)備驅(qū)動程序完成的
磁盤和內(nèi)存速度差異,決定了可以將內(nèi)存經(jīng)常訪問的文件調(diào)入磁盤緩沖區(qū),高速緩存中復(fù)制的訪問比磁盤I/O的機(jī)械操作要塊很多
SPOOLing利用專門的外圍控制機(jī),將低速I/O設(shè)備上的數(shù)據(jù)傳送到高速磁盤上,或者相反
SPOOLing技術(shù)建立在多道程序設(shè)計(jì)技術(shù)的基礎(chǔ)上,在一個(gè)時(shí)間段內(nèi),輸入進(jìn)程、輸出進(jìn)程是可以和運(yùn)行的作業(yè)進(jìn)程并發(fā)執(zhí)行的
設(shè)備輸入井/輸出井之間數(shù)據(jù)的傳送是由系統(tǒng)實(shí)現(xiàn)的
磁盤和固態(tài)硬盤
磁盤
磁盤通過一個(gè)稱為磁頭的導(dǎo)體線圈從磁盤存取數(shù)據(jù),在讀/寫操作期間,磁頭固定,磁盤在下面高速旋轉(zhuǎn)
磁盤盤面上的數(shù)據(jù)存儲在一組同心圓中,稱磁道
。每個(gè)磁道與磁頭一樣寬,一個(gè)盤面有上千個(gè)磁道。磁道又劃分為幾百個(gè)扇區(qū)
,每個(gè)扇區(qū)固定存儲大小
,一個(gè)扇區(qū)稱為一個(gè)盤塊
相鄰磁道及相鄰扇區(qū)間通過一定的間隙分隔開,以避免精度錯誤
由于扇區(qū)按固定圓心?度劃分,所以密度從最外道向里道增加,磁盤的存儲能力受限于最內(nèi)道的最大記錄密度
注:
為了提高磁盤的存儲容量,充分利用磁盤外層磁道的存儲能力,現(xiàn)代磁盤不再將內(nèi)外磁道劃分為相同數(shù)目的扇區(qū),而將盤面劃分為若干環(huán)帶,同一環(huán)帶內(nèi)的所有磁道具有相同的扇區(qū)數(shù),顯然,外層環(huán)帶的磁道擁有較內(nèi)層環(huán)帶的磁道更多的扇區(qū)
磁盤安裝在一個(gè)磁盤驅(qū)動器中,它由磁頭臂、用于旋轉(zhuǎn)磁盤的轉(zhuǎn)軸和用于數(shù)據(jù)輸入/輸出的電子設(shè)備組成:
多個(gè)盤片垂直堆疊,組成磁盤組,每個(gè)盤面對應(yīng)一個(gè)磁頭,所有磁頭固定在一起,與磁盤中心的距離相同且只能共進(jìn)退
所有盤片上相對位置相同的磁道組成柱面
扇區(qū)是磁盤可尋址的最小單位
,磁盤上能存儲的物理塊數(shù)目由**扇區(qū)數(shù)、磁道數(shù)及磁盤面數(shù)
決定,磁盤地址用柱面號-盤面號-扇區(qū)號
**表示
磁盤按不同的方式可分為若干類型:
- 固定頭磁盤,磁頭相對于盤片的徑向方向固定,這種磁盤中的每個(gè)磁道有一個(gè)磁頭
- 活動頭磁盤,磁頭可移動,磁頭臂可來回伸縮定位磁道
- 固定盤磁盤,盤片永久固定在磁盤驅(qū)動器內(nèi)
- 可換盤磁盤,盤片可移動和替換
磁盤的管理
1、磁盤初始化
一個(gè)新的磁盤只是一個(gè)磁性記錄材料的空白盤
在磁盤可以存儲數(shù)據(jù)之前,必須將它分成扇區(qū),以便磁盤控制器能夠進(jìn)行讀/寫操作
,這個(gè)過程稱為低級格式化
(或稱物理格式化
)
每個(gè)扇區(qū)通常由頭部、數(shù)據(jù)區(qū)域和尾部組成
頭部和尾部包含了一些磁盤控制器的使用信息,其中**利用磁道號、磁頭號和扇區(qū)號來標(biāo)志一個(gè)扇區(qū)
,利用CRC字段對扇區(qū)進(jìn)行校驗(yàn)
**
2、分區(qū)
在可以使用磁盤存儲文件之前,還要完成兩個(gè)步驟:
將磁盤分區(qū)
,每個(gè)分區(qū)由一個(gè)或多個(gè)柱面組成,每個(gè)分區(qū)的起始扇區(qū)和大小都記錄在磁盤主引導(dǎo)記錄的分區(qū)表中對物理分區(qū)進(jìn)行邏輯格式化
(也稱**高級格式化
**),將初始文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)存儲到磁盤上,這些數(shù)據(jù)結(jié)構(gòu)包括空閑空間和已分配空間,以及一個(gè)初始為空的目錄,建立根目錄、對保存空閑磁盤塊信息的數(shù)據(jù)結(jié)構(gòu)進(jìn)行初始化
因扇區(qū)的單位太小,為了提高效率,操作系統(tǒng)將多個(gè)相鄰的扇區(qū)組合在一起
,形成一**簇
(在Linux中稱為塊
)
為了更高效地管理磁盤,一簇只能存放一個(gè)文件的內(nèi)容
,文件所占用的空間只能是簇的整數(shù)倍
**
3、引導(dǎo)塊
計(jì)算機(jī)啟動時(shí)需要運(yùn)行一個(gè)初始化程序
(自舉程序
),它初始化CPU、寄存器、設(shè)備控制器和內(nèi)存等,接著啟動操作系統(tǒng)
自舉程序**找到磁盤上的操作系統(tǒng)內(nèi)核
,將它加載到內(nèi)存
,并轉(zhuǎn)到起始地址
,從而開始操作系統(tǒng)的運(yùn)行
**。
自舉程序**通常存放在ROM
中,為了避免改變自舉代碼而需要改變ROM硬件的問題,通常只在ROM中保留很小的自舉裝入程序,而將完整功能的引導(dǎo)程序保存在磁盤的啟動塊上
,啟動塊位于磁盤
**的固定位置。具有啟動分區(qū)的磁盤稱為啟動磁盤
或系統(tǒng)磁盤
引導(dǎo)ROM中的代碼指示磁盤控制器將引導(dǎo)塊讀入內(nèi)存,然后開始執(zhí)行,它可以從非固定的磁盤位置加載整個(gè)操作系統(tǒng),并且開始運(yùn)行操作系統(tǒng)
下面以Windows為例來分析引導(dǎo)過程:
- Windows允許將磁盤分為多個(gè)分區(qū),有一個(gè)分區(qū)引導(dǎo)分區(qū),它包含操作系統(tǒng)和設(shè)備驅(qū)動程序
- Windows系統(tǒng)將引導(dǎo)代碼存儲在磁盤的第0號扇區(qū),它稱主引導(dǎo)記錄(MBR)
- 引導(dǎo)首先運(yùn)行ROM中的代碼,這個(gè)代碼指示系統(tǒng)從MBR中讀取引導(dǎo)代碼
- 除了包含引導(dǎo)代碼,MBR還包含一個(gè)磁盤分區(qū)表和一個(gè)標(biāo)志(以指示從哪個(gè)分區(qū)引導(dǎo)系統(tǒng))
- 當(dāng)系統(tǒng)找到引導(dǎo)分區(qū)時(shí),讀取分區(qū)的第一個(gè)扇區(qū),稱為引導(dǎo)扇區(qū),并繼續(xù)余下的引導(dǎo)過程,包括加載各種系統(tǒng)服務(wù)
4、壞塊
由于磁盤有移動部件且容錯能力弱,因此容易導(dǎo)致一個(gè)或多個(gè)扇區(qū)損壞。根據(jù)所用的磁盤和控制器,對這些塊有多種處理方式
對于簡單磁盤,如采用IDE控制器的磁盤,壞塊可手動處理,如MS-DOS
的Format
命令執(zhí)行邏輯格式化時(shí)會掃描磁盤以檢查壞塊。壞塊在FAT
表上會標(biāo)明,因此程序不會使用它們
對于復(fù)雜的磁盤,控制器維護(hù)磁盤內(nèi)的壞塊列表。這個(gè)列表在出廠低級格式化時(shí)就已初始化,并在磁盤的使用過程中不斷更新。低級格式化將一些塊保留作為備用,操作系統(tǒng)看不到這些塊??刂破骺梢?*采用備用塊來邏輯地替代壞塊
**,這種方案稱為扇區(qū)備用
對壞塊的處理實(shí)質(zhì)上就是用某種機(jī)制使系統(tǒng)不去使用壞塊
磁盤調(diào)度算法
1、磁盤的存取時(shí)間
一次磁盤讀/寫操作的時(shí)間**由尋找(尋道)時(shí)間、旋轉(zhuǎn)延遲時(shí)間和傳輸時(shí)間決定
**
- 尋道時(shí)間
Ts
活動頭磁盤在讀/寫信息前,將磁頭移動到目的磁道所需的時(shí)間
,這個(gè)時(shí)間除**跨越 n 條磁道的時(shí)間
外,還包括啟動磁頭臂的時(shí)間 s
,m
是與磁盤驅(qū)動器速度有關(guān)的常數(shù)
**(越為2ms)
T s = m ? n + s Ts = m*n+s Ts=m?n+s
- 旋轉(zhuǎn)延遲時(shí)間
Tr
磁頭**定位到要讀/寫扇區(qū)所需的時(shí)間
,設(shè)磁盤的旋轉(zhuǎn)速度為 r
,有:
T r = 1 / 2 r Tr={1}/{2r} Tr=1/2r
注:題目中一般是告訴你轉(zhuǎn)速,最好別太依賴公式,最好求一下轉(zhuǎn)一周需要的時(shí)間
**
- 傳輸時(shí)間
Tt
從磁盤讀出或向磁盤寫入數(shù)據(jù)所需的時(shí)間
,這個(gè)時(shí)間**取決于每次所讀/寫的字節(jié)數(shù) b 和磁盤的旋轉(zhuǎn)速度 r
,N
一個(gè)磁道上的字節(jié)數(shù)
**
T t = b / r N Tt=b/rN Tt=b/rN
**總平均存取時(shí)間Ta
**可以表示為:
T a = T s + 1 / 2 r + b / r N Ta=Ts+1/2r+b/rN Ta=Ts+1/2r+b/rN
2、磁盤調(diào)度算法
在磁盤的存取時(shí)間中,尋道時(shí)間
占大頭,它與磁盤調(diào)度算法密切相關(guān)
延遲時(shí)間和傳輸時(shí)間
都與磁盤旋轉(zhuǎn)速度線性相關(guān)
,所以轉(zhuǎn)速是磁盤性能的一個(gè)非常重要的硬件參數(shù),也很難從操作系統(tǒng)層面進(jìn)行優(yōu)化。因此,磁盤調(diào)度的**主要目標(biāo)是減少磁盤的平均尋道時(shí)間
**
目前常用的磁盤調(diào)度算法有以下幾種:
- 先來先服務(wù)(FCFS)算法
FCFS算法**根據(jù)進(jìn)程請求訪問磁盤的先后順序進(jìn)行調(diào)度
**,這是一種最簡單的調(diào)度算法
該算法的優(yōu)點(diǎn)是**具有公平性
**
若只有少量進(jìn)程需要訪問,且大部分請求都是訪問簇聚的文件扇區(qū),則有望達(dá)到較好的性能
若有大量進(jìn)程競爭使用磁盤,則這種算法在性能上往往接近于隨機(jī)調(diào)度
- 最短尋道時(shí)間優(yōu)先(SSTF)算法
SSTF算法**每次選擇調(diào)度的是與當(dāng)前磁頭最近的磁道
,使每次的尋道時(shí)間最短
**
每次選擇最小尋道時(shí)間**并不能保證平均尋道時(shí)間最小,但能提供比FCFS算法更好的性能
**
這種算法會產(chǎn)生“饑餓”現(xiàn)象
:在某個(gè)磁道附近一直出現(xiàn)新的請求,則離這個(gè)磁道較遠(yuǎn)的磁道將會一直得不到訪問
- 掃描(SCAN)算法
規(guī)定:只有磁頭移動到最外側(cè)磁道時(shí)才能向內(nèi)移動,移動到最內(nèi)側(cè)磁道時(shí)才能向外移動
,這就是SCAN算法的思想
在SSTF算法的基礎(chǔ)上規(guī)定了磁頭移動的方向
,由于磁頭移動規(guī)律與電梯運(yùn)行相似,因此又稱電梯調(diào)度算法
SCAN算法**對最近掃描過的區(qū)域不公平
,因此它在訪問局部性方面不如FCFS算法和SSTF算法好
**
采用SCAN算法時(shí),不但要知道**磁頭的當(dāng)前位置
,而且要知道磁頭的移動方向
**
- 循環(huán)掃描(C-SCAN)算法
在SCAN算法的基礎(chǔ)上規(guī)定**磁頭單向移動來提供服務(wù),返回時(shí)直接快速移動至起始端而不服務(wù)任何請求
**
由于SCAN算法偏向于處理那些接近最里或最外的磁道的訪問請求,所以使用改進(jìn)型的C-SCAN算法來避免這個(gè)問題
采用SCAN
算法和C-SCAN
算法時(shí),磁頭總是嚴(yán)格地遵循從盤面的一端到另一端
LOOK
調(diào)度和C-LOOK
調(diào)度則**磁頭只需移動到最遠(yuǎn)端的一個(gè)請求即可返回,不需要到達(dá)磁盤端點(diǎn)
**
注:若無特別說明,也可默認(rèn)SCAN算法和C-SCAN算法為LOK調(diào)度和C-LOOK調(diào)度
以上四種磁盤調(diào)度算法的優(yōu)缺點(diǎn):
3、減少延遲時(shí)間的方法
除減少尋道時(shí)間外,**減少延遲時(shí)間
**也是提高磁盤傳輸效率的重要因素
磁盤是連續(xù)自轉(zhuǎn)設(shè)備,磁頭讀入一個(gè)扇區(qū)后,需要經(jīng)過短暫的處理時(shí)間,才能開始讀入下一個(gè)扇區(qū)
若邏輯上相鄰的塊在物理上也相鄰,則讀入幾個(gè)連續(xù)的邏輯塊可能需要很?的延遲時(shí)間
為此,可**對一個(gè)盤面的扇區(qū)進(jìn)行交替編號
,即讓邏輯上相鄰的塊物理上保持一定的間隔
**,于是讀入多個(gè)連續(xù)塊時(shí)能夠減少延遲時(shí)間
此外,由于磁盤的所有盤面是同步轉(zhuǎn)動的,邏輯塊在相同柱面上也是按盤面號連續(xù)存放的
要讀入不同盤面上的連續(xù)塊,在讀完0號盤7號扇區(qū)后,還需要一段處理時(shí)間,所以當(dāng)磁頭首次劃過1號盤0號扇區(qū)(下一次要讀的塊)時(shí),并不能讀取,只能等磁頭再次劃過該扇區(qū)時(shí)才能讀取
為此,可**對不同的盤面進(jìn)行錯位命名
**,則讀入相鄰兩個(gè)盤面的連續(xù)塊時(shí)也能減少延遲時(shí)間
4、提高磁盤I/O速度的方法
磁盤的存取時(shí)間中,尋道時(shí)間和延遲時(shí)間屬于“找”的時(shí)間,凡是“找”的時(shí)間都可以通過一定的方法優(yōu)化,但傳輸時(shí)間是磁盤本身性質(zhì)所決定的,不能通過一定的措施減少
文件的訪問速度
是衡量文件系統(tǒng)性能最重要的因素,可從以下三個(gè)方面來優(yōu)化:
改進(jìn)文件的目錄結(jié)構(gòu)及檢索目錄的方法
,以減少對目錄的查找時(shí)間選取好的文件存儲結(jié)構(gòu)
,以提高對文件的訪問速度提高磁盤I/O速度
,以實(shí)現(xiàn)文件中的數(shù)據(jù)在磁盤和內(nèi)存之間快速傳送
提高磁盤I/O的速度:
- 采用磁盤高速緩存
- 調(diào)整磁盤請求順序
- 提前讀。在讀磁盤當(dāng)前塊時(shí),將下一磁盤塊也讀入內(nèi)存緩沖區(qū)
- 延遲寫。僅在緩沖區(qū)首部設(shè)置延遲寫標(biāo)志,然后釋放此緩沖區(qū)并將其鏈入空閑緩沖區(qū)鏈表的尾部,當(dāng)其他進(jìn)程申請到此緩沖區(qū)時(shí),才真正將緩沖區(qū)信息寫入磁盤塊
- 優(yōu)化物理塊的分布。除了上面介紹的扇區(qū)編號優(yōu)化,當(dāng)文件采用**
鏈接方式和索引方式
組織時(shí),應(yīng)盡量將同一個(gè)文件的盤塊安排在一個(gè)磁道上或相鄰的磁道上
,以減少尋道時(shí)間。另外,將若干盤塊組成簇,按簇對文件進(jìn)行分配
**,也可減少磁頭的平均移動距離 - 虛擬盤。是指**
用內(nèi)存空間去仿真磁盤
,又叫RAM盤
。常用于存放臨時(shí)文件
** - 采用磁盤陣列RAID。由于可采用并行交叉存取,因此能大幅提高磁盤I/O速度
固態(tài)硬盤
1、固態(tài)硬盤的特性
固態(tài)硬盤(SSD)是一種基于閃存技術(shù)的存儲器
,與U盤并無本質(zhì)差別,只是容量更大,存取性能更好
一個(gè)SSD由一個(gè)或多個(gè)**閃存芯片
和閃存翻譯層
**組成
閃存芯片替代傳統(tǒng)磁盤中的機(jī)械驅(qū)動器,
閃存翻譯層將來自CPU的邏輯塊讀/寫請求翻譯成對底層物理設(shè)備的讀/寫控制信號,相當(dāng)于扮演了磁盤控制器的?色
數(shù)據(jù)是**以?為單位讀/寫
的。只有在一?所屬的塊整個(gè)被擦除后,才能寫這一?
**
不過,一旦一個(gè)塊被擦除,塊中的每?就都可以直接再寫一次
某個(gè)塊進(jìn)行了若干重復(fù)寫后,就會磨損壞,不能再使用
隨機(jī)寫很慢,有兩個(gè)原因:
- 擦除塊比較慢,通常比訪問?高一個(gè)數(shù)量級
- 如果寫操作試圖修改一個(gè)包含已有數(shù)據(jù)的? Pi ,那么這個(gè)塊中所有含有用數(shù)據(jù)的?都必須被復(fù)制到一個(gè)新(擦除過的)塊中,然后才能進(jìn)行對? Pi 的寫操作
比起傳統(tǒng)磁盤,SSD有很多優(yōu)點(diǎn):它由半導(dǎo)體存儲器構(gòu)成,沒有移動的部件,因此隨機(jī)訪問速度比機(jī)械磁盤要快很多,也沒有任何機(jī)械噪聲和震動,能耗更低、抗震性好、安全性高等
2、磨損均衡
固態(tài)硬盤也有缺點(diǎn),閃存的擦寫壽命是有限的
,讀/寫數(shù)據(jù)時(shí)會集中在SSD的一部分閃存,一旦這部分閃存損壞,整塊SSD也就損壞了,為了彌補(bǔ)SSD的壽命缺陷,引入了磨損均衡
SSD磨損均衡技術(shù)大致分為兩種:
- 動態(tài)磨損均衡。寫入數(shù)據(jù)時(shí),
自動選擇較新的閃存塊
。老的閃存塊先歇一歇 - 靜態(tài)磨損均衡。這種技術(shù)更為先進(jìn),就算沒有數(shù)據(jù)寫入,SSD也會監(jiān)測并自動進(jìn)行數(shù)據(jù)分配,讓老的閃存塊承擔(dān)無須寫數(shù)據(jù)的存儲任務(wù),同時(shí)讓較新的閃存塊騰出空間,平常的讀/寫操作在較新的閃存塊中進(jìn)行。如此一來,各閃存塊的壽命損耗就都差不多
本節(jié)小結(jié)
在磁盤上進(jìn)行一次讀/寫操作需要哪幾部分時(shí)間?其中哪部分時(shí)間最??
在磁盤上進(jìn)行一次讀/寫操作花費(fèi)的時(shí)間由尋道時(shí)間、延遲時(shí)間和傳輸時(shí)間決定
尋道時(shí)間是將磁頭移動到指定磁道所需要的時(shí)間
延遲時(shí)間是磁頭定位到某一磁道的扇區(qū)(塊號)所需要的時(shí)間
傳輸時(shí)間是從磁盤讀出或向磁盤寫入數(shù)據(jù)所經(jīng)歷的時(shí)間一般來說,尋道時(shí)間因?yàn)橐苿哟蓬^臂,所以占用時(shí)間最?
存儲一個(gè)文件時(shí),當(dāng)一個(gè)磁道存儲不下時(shí),剩下部分是存在同一個(gè)盤面的不同磁道好,還是存在同一個(gè)柱面上的不同盤面好?
尋道時(shí)間對于一次磁盤訪問的影響是最大的,若存在同一個(gè)盤面的不同磁道,則磁頭臂勢必要移動,這樣會大大增加文件的訪向時(shí)間,而存在同一個(gè)柱面上的不同盤面就不需要移動磁道,所以一般情況下存在同一個(gè)柱面上的不同盤面更好
提醒:
磁盤是可共享設(shè)備(分時(shí)共享),是指某段時(shí)間內(nèi)可以有多個(gè)用戶進(jìn)行訪問。但某一時(shí)刻只能有一個(gè)作業(yè)可以訪問
磁盤調(diào)度中,對讀/寫時(shí)間影響最大的是尋找時(shí)間,尋找過程為機(jī)械運(yùn)動,時(shí)間較長,影響較大
硬盤的操作系統(tǒng)引導(dǎo)扇區(qū)產(chǎn)生在對硬盤進(jìn)行高級格式化時(shí)。對于高級格式化。操作系統(tǒng)將初始的文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)存儲到磁盤上
磨損均衡機(jī)制的目的是鹽城固態(tài)硬盤的壽命
當(dāng)系統(tǒng)中總是持續(xù)存在某個(gè)磁道的訪問請求時(shí),均持續(xù)慢速最短存到時(shí)間優(yōu)先、掃描算法和循環(huán)掃描算法的訪問條件,會一直服務(wù)該訪問請求,盡管系統(tǒng)中還存在其他磁道的訪問請求,但卻得不到響應(yīng)。而先來先服務(wù)請求次序進(jìn)行調(diào)度,比較公平
疑難點(diǎn)
為了增加設(shè)備分配的靈活性、成功率,可以如何改進(jìn)?
可以從以下兩方面對基本的設(shè)備分配程序加以改進(jìn):
1、增加設(shè)備的獨(dú)立性。進(jìn)程使用邏輯設(shè)備名請求I/O。這樣,系統(tǒng)首先從SDT中找出第一個(gè)該類設(shè)備的DCT。若該設(shè)備忙,則又查找第二個(gè)該類設(shè)備的DCT。僅當(dāng)所有該類設(shè)備都忙時(shí),才將進(jìn)程掛到該類設(shè)備的等待隊(duì)列上;只要有一個(gè)該類設(shè)備可用,系統(tǒng)便進(jìn)一步計(jì)算分配該設(shè)備的安全性
2、考慮多通路情況。為防止I/O系統(tǒng)的“瓶頸”現(xiàn)象,通常采用多通路的I/O系統(tǒng)結(jié)構(gòu)。此時(shí)對控制器和通道的分配同樣要經(jīng)過幾次反復(fù),即若設(shè)備(控制器)所連接的第一個(gè)控制器(通道)忙時(shí),則應(yīng)查看其所連接的第二個(gè)控制器(通道),僅當(dāng)所有控制器(通道)都忙時(shí),此次的控制器(通道)分配才算失敗,才將進(jìn)程掛到控制器(通道)的等待隊(duì)列上。而只要有一個(gè)控制器(通道)可用,系統(tǒng)便可將它分配給進(jìn)程設(shè)備分配過程中,先后分別訪問的數(shù)據(jù)結(jié)構(gòu)為:SDT -> DCT -> COCT -> CHCT
要成功分配一個(gè)設(shè)備,必須要:1、設(shè)備可用;2、控制器可用;3、通道可用
什么是用戶緩沖區(qū)、內(nèi)核緩沖區(qū)?
“內(nèi)核”其實(shí)是指內(nèi)核緩沖區(qū),“用戶空間”是指用戶緩沖區(qū)用戶緩沖區(qū)是指當(dāng)用戶進(jìn)程讀文件時(shí),通常先申請一塊內(nèi)存數(shù)組,稱為Buffer,用來存放讀取的數(shù)據(jù)
每次read調(diào)用,將讀取的數(shù)據(jù)寫入Bufter,之后程序都從Bufter中獲取數(shù)據(jù),當(dāng)Buffer使用完后,再進(jìn)行下一次調(diào)用,填充Buffer
可?,用戶緩沖區(qū)的目的是減少系統(tǒng)調(diào)用次數(shù),從而降低系統(tǒng)在用戶態(tài)與核心態(tài)之間切換的開銷內(nèi)核也有自己的緩沖區(qū)
當(dāng)用戶進(jìn)程從磁盤讀取數(shù)據(jù)時(shí),不直接讀磁盤,而將內(nèi)核緩沖區(qū)中的數(shù)據(jù)復(fù)制到用戶緩沖區(qū)中
若內(nèi)核緩沖區(qū)中沒有數(shù)據(jù),則內(nèi)核請求從磁盤讀取,然后將進(jìn)程掛起,為其他進(jìn)程服務(wù),等到數(shù)據(jù)已讀取到內(nèi)核緩沖區(qū)中時(shí),將內(nèi)核緩沖區(qū)中的數(shù)據(jù)復(fù)制到用戶進(jìn)程的緩沖區(qū),才通知進(jìn)程(當(dāng)然,I/O模型不同,處理的方式也不同)
當(dāng)用戶進(jìn)程需要寫數(shù)據(jù)時(shí),數(shù)據(jù)可能不直接寫入磁盤,而將數(shù)據(jù)寫入內(nèi)核緩沖區(qū),時(shí)機(jī)適當(dāng)時(shí)(如內(nèi)核緩沖區(qū)的數(shù)據(jù)積累到一定量后),內(nèi)核才將內(nèi)核緩沖區(qū)的數(shù)據(jù)寫入磁盤
可?,內(nèi)核緩沖區(qū)是為了在操作系統(tǒng)級別提高磁盤I/O效率,優(yōu)化磁盤寫操作