計算機(jī)操作系統(tǒng)教程_第四版_第9章 設(shè)備管理_第1頁
計算機(jī)操作系統(tǒng)教程_第四版_第9章 設(shè)備管理_第2頁
計算機(jī)操作系統(tǒng)教程_第四版_第9章 設(shè)備管理_第3頁
計算機(jī)操作系統(tǒng)教程_第四版_第9章 設(shè)備管理_第4頁
計算機(jī)操作系統(tǒng)教程_第四版_第9章 設(shè)備管理_第5頁
已閱讀5頁,還剩144頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第9章 設(shè)備管理9.1 引 言9.2 數(shù)據(jù)傳送控制方式9.3 中斷技術(shù)9.4 緩沖管理9.5 設(shè)備分配9.6 I/O進(jìn)程控制9.7 設(shè)備驅(qū)動程序本章小結(jié)習(xí)題9.1 引 言9.1.1 設(shè)備的類別在計算機(jī)系統(tǒng)中,除了CPU和內(nèi)存之外,其他的大部分硬設(shè)備稱為外部設(shè)備。它包括常用的輸入輸出設(shè)備、外存設(shè)備以及終端設(shè)備等。這些設(shè)備種類繁多,特性各異,操作方式的區(qū)別也很大,從而使得操作系統(tǒng)的設(shè)備管理變得十分復(fù)雜。早期的計算機(jī)系統(tǒng)由于速度慢、應(yīng)用面窄,外部設(shè)備主要以紙帶、卡片等作為輸入輸出介質(zhì),相應(yīng)的設(shè)備管理程序也比較簡單。進(jìn)入80年代以來,由于個人計算機(jī)、工作站以及計算機(jī)網(wǎng)絡(luò)系統(tǒng)等的發(fā)展,外部設(shè)備開始走向多

2、樣化、復(fù)雜化和智能化。近年來最為流行的窗口系統(tǒng)中的X WINDOW等都是作為一種設(shè)備和操作系統(tǒng)相連的。這使得設(shè)備管理變得越來越復(fù)雜化。設(shè)備的分類按設(shè)備的使用特性分,可分為存儲設(shè)備、輸入輸出設(shè)備、終端設(shè)備以及脫機(jī)設(shè)備等。按設(shè)備的從屬關(guān)系,可把設(shè)備劃分為系統(tǒng)設(shè)備和用戶設(shè)備。系統(tǒng)設(shè)備是指那些在操作系統(tǒng)生成時就已配置好的各種標(biāo)準(zhǔn)設(shè)備。如,鍵盤、打印機(jī)以及文件存儲設(shè)備等。用戶設(shè)備則是那些在系統(tǒng)生成時沒有配置,而由用戶自己安裝配置后由操作系統(tǒng)統(tǒng)一管理的設(shè)備。例如,網(wǎng)絡(luò)系統(tǒng)中的各種網(wǎng)板、實(shí)時系統(tǒng)中的A/D、D/A變換器、圖像處理系統(tǒng)的圖像設(shè)備等。有的系統(tǒng)中還按信息組織方式來劃分設(shè)備。例如,UNIX系統(tǒng)就把外

3、部設(shè)備劃分為字符設(shè)備和塊設(shè)備。鍵盤、終端、打印機(jī)等以字符為單位組織和處理信息的設(shè)備被稱為字符設(shè)備;而磁盤、磁帶等以字符塊為單位組織和處理信息的設(shè)備被稱為塊設(shè)備。圖9.1 按使用特性對外部設(shè)備的分類對設(shè)備分類的目的在于簡化設(shè)備管理程序。由于設(shè)備管理程序是和硬件打交道的,因此,不同的設(shè)備硬件對應(yīng)于不同的管理程序。不過,對于同類設(shè)備來說,由于設(shè)備的硬件特性十分相似,從而可以利用相同的管理程序或只需做很少的修改即可。9.1.2 設(shè)備管理的功能和任務(wù)設(shè)備管理是對計算機(jī)輸入輸出系統(tǒng)的管理,這是操作系統(tǒng)中最具有多樣性和復(fù)雜性的部分。其主要任務(wù)是:選擇和分配輸入輸出設(shè)備以便進(jìn)行數(shù)據(jù)傳輸操作;控制輸入輸出設(shè)備和

4、CPU(或內(nèi)存)之間交換數(shù)據(jù);為用戶提供一個友好的透明接口,把用戶和設(shè)備硬件特性分開,使得用戶在編制應(yīng)用程序時不必涉及具體設(shè)備,系統(tǒng)按用戶要求控制設(shè)備工作。另外,這個接口還為新增加的用戶設(shè)備提供一個和系統(tǒng)核心相連接的入口,以便用戶開發(fā)新的設(shè)備管理程序;提高設(shè)備和設(shè)備之間、CPU和設(shè)備之間,以及進(jìn)程和進(jìn)程之間的并行操作度,以使操作系統(tǒng)獲得最佳效率。9.1.2 設(shè)備管理的功能和任務(wù)設(shè)備管理程序的功能:提供和進(jìn)程管理系統(tǒng)的接口。當(dāng)進(jìn)程要求設(shè)備資源時,該接口將進(jìn)程要求轉(zhuǎn)達(dá)給設(shè)備管理程序;進(jìn)行設(shè)備分配。按照設(shè)備類型和相應(yīng)的分配算法把設(shè)備和其他有關(guān)的硬件分配給請求該設(shè)備的進(jìn)程,并把未分配到所請求設(shè)備或其他

5、有關(guān)硬件的進(jìn)程放入等待隊列;實(shí)現(xiàn)設(shè)備和設(shè)備、設(shè)備和CPU等之間的并行操作。除控制狀態(tài)寄存器、數(shù)據(jù)緩沖寄存器等的控制器之外,對應(yīng)于不同的I/O控制方式,還要DMA( Directed Memory Access)通道等硬件支持。在設(shè)備分配程序根據(jù)進(jìn)程要求分配設(shè)備、控制器和通道或DMA等之后,通道或DMA將自動完成設(shè)備和內(nèi)存之間的數(shù)據(jù)傳送工作,從而完成并行操作。在無通道或DMA時,由設(shè)備管理程序利用中斷技術(shù)來完成操作;進(jìn)行緩沖區(qū)管理。一般CPU的執(zhí)行速度和訪問內(nèi)存速度都比較高,而外設(shè)的數(shù)據(jù)流通速度則低得多(如鍵盤),為減少外設(shè)和內(nèi)存與CPU之間的數(shù)據(jù)速度不匹配的問題,系統(tǒng)中一般設(shè)有緩沖區(qū)(器)來暫

6、放數(shù)據(jù)。設(shè)備管理程序負(fù)責(zé)進(jìn)行緩沖區(qū)分配、釋放及有關(guān)的管理工作。9.2 數(shù)據(jù)傳送控制方式設(shè)備管理的主要任務(wù)之一是控制設(shè)備和內(nèi)存或CPU之間的數(shù)據(jù)傳送,選擇和衡量數(shù)據(jù)傳送控制方式有幾條原則: 數(shù)據(jù)傳送速度足夠高,能滿足用戶的需要但又不丟失數(shù)據(jù);系統(tǒng)開銷小,所需的處理控制程序少;能充分發(fā)揮硬件資源的能力,使得I/O設(shè)備盡量忙,而CPU等待時間少。為了控制I/O設(shè)備和內(nèi)存之間的數(shù)據(jù)交換,每臺外圍設(shè)備都是按照一定的規(guī)律編碼的。而且,設(shè)備和內(nèi)存與CPU之間有相應(yīng)的硬件接口支持同步控制、設(shè)備選擇以及中斷控制等。因此,假定本節(jié)的數(shù)據(jù)傳送控制方式都是基于這些硬件基礎(chǔ)的,從而不再討論有關(guān)硬件部分。9.2 數(shù)據(jù)傳送

7、控制方式外圍設(shè)備和內(nèi)存之間的常用數(shù)據(jù)傳送控制方式有4種:程序直接控制方式;中斷控制方式;DMA方式;通道方式。9.2.1 程序直接控制方式程序直接控制方式(programmed direct control)就是由用戶進(jìn)程來直接控制內(nèi)存或CPU和外圍設(shè)備之間的信息傳送。控制者是用戶進(jìn)程。當(dāng)用戶進(jìn)程需要數(shù)據(jù)時,它通過CPU發(fā)出啟動設(shè)備準(zhǔn)備數(shù)據(jù)的啟動命令“Start”,然后,用戶進(jìn)程進(jìn)入測試等待狀態(tài)。在等待時間內(nèi),CPU不斷地用一條測試指令檢查描述外圍設(shè)備的工作狀態(tài)的控制狀態(tài)寄存器。而外圍設(shè)備只有將數(shù)據(jù)傳送的準(zhǔn)備工作作好之后,才將該寄存器置為完成狀態(tài)。從而,當(dāng)CPU檢測到控制狀態(tài)寄存器為完成狀態(tài),

8、也就是該寄存器發(fā)出“Done”信號之后,設(shè)備開始往內(nèi)存或CPU傳送數(shù)據(jù)。反之,當(dāng)用戶進(jìn)程需要向設(shè)備輸出數(shù)據(jù)時,也必須同樣發(fā)啟動命令啟動設(shè)備和等待設(shè)備準(zhǔn)備好之后才能輸出數(shù)據(jù)。除了控制狀態(tài)寄存器之外,在I/O控制器中還有一類稱為數(shù)據(jù)緩沖寄存器的寄存器。在CPU與外圍設(shè)備之間傳送數(shù)據(jù)時,輸入設(shè)備每進(jìn)行一次操作,首先把所輸入的數(shù)據(jù)送入該寄存器,然后,CPU再把其中數(shù)據(jù)取走。反之,當(dāng)CPU輸出數(shù)據(jù)時,也是先把數(shù)據(jù)輸出到該寄存器之后,再由輸出設(shè)備將其取走。只有數(shù)據(jù)裝入該寄存器之后,控制狀態(tài)寄存器的值才會發(fā)生變化。如圖9.2所示。圖9.2 程序直接控制方式程序直接控制方式雖然控制簡單,也不需要多少硬件支持,

9、但是,程序直接控制方式明顯地存在下述缺點(diǎn):CPU和外圍設(shè)備只能串行工作。由于CPU的處理速度要大大高于外圍設(shè)備的數(shù)據(jù)傳送和處理速度,所以,CPU的大量時間都處于等待和空閑狀態(tài)。這使得CPU的利用率大大降低;CPU在一段時間內(nèi)只能和一臺外圍設(shè)備交換數(shù)據(jù)信息,從而不能實(shí)現(xiàn)設(shè)備之間的并行工作;由于程序直接控制方式依靠測試設(shè)備標(biāo)志觸發(fā)器的狀態(tài)位來控制數(shù)據(jù)傳送,因此無法發(fā)現(xiàn)和處理由于設(shè)備或其他硬件所產(chǎn)生的錯誤。所以,程序直接控制方式只適用于那些CPU執(zhí)行速度較慢,而且外圍設(shè)備較少的系統(tǒng)。9.2. 2 中斷方式為了減少程序直接控制方式中CPU等待時間以及提高系統(tǒng)的并行工作程度,中斷(interrupt)方

10、式被用來控制外圍設(shè)備和內(nèi)存與CPU之間的數(shù)據(jù)傳送。這種方式要求CPU與設(shè)備(或控制器)之間有相應(yīng)的中斷請求線,而且在設(shè)備控制器的控制狀態(tài)寄存器的相應(yīng)的中斷允許位。中斷方式的傳送結(jié)構(gòu)如圖9.3所示。圖9.3 中斷方式數(shù)據(jù)的輸入可按如下步驟操作:首先,進(jìn)程需要數(shù)據(jù)時,通過CPU發(fā)出“Start”指令啟動外圍設(shè)備準(zhǔn)備數(shù)據(jù)。該指令同時還將控制狀態(tài)寄存器中的中斷允許位打開,以便在需要時,中斷程序可以被調(diào)用執(zhí)行;在進(jìn)程發(fā)出指令啟動設(shè)備之后,該進(jìn)程放棄處理機(jī),等待輸入完成。從而,進(jìn)程調(diào)度程序調(diào)度其他就緒進(jìn)程占據(jù)處理機(jī);當(dāng)輸入完成時,I/O控制器通過中斷請求線向CPU發(fā)出中斷信號。CPU在接收到中斷信號之后,

11、轉(zhuǎn)向預(yù)先設(shè)計好的中斷處理程序?qū)?shù)據(jù)傳送工作進(jìn)行相應(yīng)的處理。在以后的某個時刻,進(jìn)程調(diào)度程序選中提出請求并得到了數(shù)據(jù)的進(jìn)程,該進(jìn)程從約定的內(nèi)存特定單元中取出數(shù)據(jù)繼續(xù)工作。中斷控制方式的處理過程可由圖9.4表示。圖9.4 中斷控制方式的處理過程由圖9.4可以看出,當(dāng)CPU發(fā)出啟動設(shè)備和允許中斷指令之后,它沒有像程序直接控制方式那樣循環(huán)測試狀態(tài)控制寄存器的狀態(tài)是否已處于“Done”。反之,CPU已被調(diào)度程序分配給其他進(jìn)程在另外的進(jìn)程上下文中執(zhí)行。當(dāng)設(shè)備將數(shù)據(jù)送入緩沖寄存器并發(fā)出中斷信號之后,CPU接收中斷信號進(jìn)行中斷處理。顯然,CPU在另外的進(jìn)程上下文中執(zhí)行時,也可以發(fā)啟動不同設(shè)備的啟動指令和允許中斷

12、指令,從而做到設(shè)備與設(shè)備間的并行操作以及設(shè)備和CPU間的并行操作。盡管中斷方式與程序直接控制方式相比,使CPU的利用率大大提高且能支持多道程序和設(shè)備的并行操作,但仍然存在著許多問題:首先,由于在I/O控制器的數(shù)據(jù)緩沖寄存器裝滿數(shù)據(jù)之后將會發(fā)生中斷,而且數(shù)據(jù)緩沖寄存通常較小,因此,在一次數(shù)據(jù)傳送過程中,發(fā)生中斷次數(shù)較多,這將耗去大量的CPU處理時間。其次,現(xiàn)代計算機(jī)系統(tǒng)通常配置有各種各樣的外圍設(shè)備。如果這些設(shè)備通過中斷處理方式進(jìn)行并行操作,則由于中斷次數(shù)的急劇增加而造成CPU無法響應(yīng)中斷和出現(xiàn)數(shù)據(jù)丟失現(xiàn)象。再次,在中斷控制方式時,我們都是假定外圍設(shè)備的速度非常低,而CPU處理速度非常高。也就是說

13、,當(dāng)設(shè)備把數(shù)據(jù)放入數(shù)據(jù)緩沖寄存器并發(fā)出中斷信號之后,CPU有足夠的時間在下一個(組)數(shù)據(jù)進(jìn)入數(shù)據(jù)緩沖寄存器之前取走這些數(shù)據(jù)。如果外圍設(shè)備的速度也非常高,則可能造成數(shù)據(jù)緩沖寄存器的數(shù)據(jù)由于CPU來不及取走而丟失。DMA方式和通道方式不會造成上述問題。9.2.3 DMA方式直接存取(direct memory access)方式基本思想是在外圍設(shè)備和內(nèi)存之間開辟直接的數(shù)據(jù)交換通路。采用竊取或挪用CPU的一個工作周期把數(shù)據(jù)緩沖寄存器中的數(shù)據(jù)直接送到內(nèi)存地址寄存器所指向的內(nèi)存區(qū)域中在DMA方式中,I/O控制器具有比中斷方式和程序直接控制方式時更強(qiáng)的功能。除了控制狀態(tài)寄存器和數(shù)據(jù)緩沖寄存器之外,DMA控

14、制器中還包括傳送字節(jié)計數(shù)器、內(nèi)存地址寄存器等??捎糜贑PU控制內(nèi)存和設(shè)備之間批量數(shù)據(jù)交換。由計數(shù)器逐個計數(shù),并由內(nèi)存地址寄存器確定內(nèi)存地址。除了在數(shù)據(jù)塊傳送開始時需要CPU的啟動指令和在整個數(shù)據(jù)塊傳送結(jié)束時需發(fā)中斷通知CPU進(jìn)行中斷處理之外,不再像中斷控制方式時那樣需要CPU的頻繁干涉。DMA存取方式的結(jié)構(gòu)如圖9.5所示。圖9.5 DMA方式的傳送結(jié)構(gòu)DMA方式的數(shù)據(jù)輸入處理過程如下:當(dāng)進(jìn)程要求設(shè)備輸入數(shù)據(jù)時,CPU把準(zhǔn)備存放輸入數(shù)據(jù)的內(nèi)存始址以及要傳送的字節(jié)數(shù)分別送入DMA控制器中的內(nèi)存地址寄存器和傳送字節(jié)計數(shù)器;另外,還把控制狀態(tài)寄存器中的中斷允許位和啟動位置1;從而啟動設(shè)備開始進(jìn)行數(shù)據(jù)輸

15、入。發(fā)出數(shù)據(jù)要求的進(jìn)程進(jìn)入等待狀態(tài),進(jìn)程調(diào)度程序調(diào)度其他進(jìn)程占據(jù)CPU。輸入設(shè)備不斷地挪用CPU工作周期,將數(shù)據(jù)緩沖寄存器中的數(shù)據(jù)源源不斷地寫入內(nèi)存,直到所要求的字節(jié)全部傳送完畢。DMA控制器在傳送字節(jié)數(shù)完成時通過中斷請求線發(fā)出中斷信號,CPU在接收到中斷信號后轉(zhuǎn)中斷處理程序進(jìn)行善后處理。 中斷處理結(jié)束時,CPU返回被中斷進(jìn)程處執(zhí)行或被調(diào)度到新的進(jìn)程上下文環(huán)境中執(zhí)行。DMA方式的處理過程如圖9.6所示。圖9. 6 DMA方式的數(shù)據(jù)傳送處理過程DMA方式與中斷方式的主要區(qū)別:中斷方式時是在數(shù)據(jù)緩沖寄存器滿之后發(fā)中斷要求CPU進(jìn)行中斷處理,而DMA方式則是在所要求轉(zhuǎn)送的數(shù)據(jù)塊全部傳送結(jié)束時要求CP

16、U進(jìn)行中斷處理。這就大大減少了CPU進(jìn)行中斷處理的次數(shù)。中斷方式的數(shù)據(jù)傳送是在中斷處理時由CPU控制完成的,而DMA方式是在DMA控制器的控制下不經(jīng)過CPU控制完成的。這就排除了因并行操作設(shè)備過多時CPU來不及處理或因速度不匹配而造成數(shù)據(jù)丟失等現(xiàn)象。DMA方式仍存在著一定的局限性:DMA方式對外圍設(shè)備的管理和某些操作仍由CPU控制。在大中型計算機(jī)中,系統(tǒng)所配置的外設(shè)種類越來越多,數(shù)量也越來越大,因而,對外圍設(shè)備的管理的控制也就愈來愈復(fù)雜。多個DMA控制器的同時使用顯然會引起內(nèi)存地址的沖突并使得控制過程進(jìn)一步復(fù)雜化。多個DMA控制器的同時使用也是不經(jīng)濟(jì)的。因此,在大中型計算機(jī)系統(tǒng)中(近年來甚至在

17、那些要求I/O能力強(qiáng)的微機(jī)系統(tǒng)中,例如在COMPAQ的System pro386系列微機(jī)系統(tǒng)中),除了設(shè)置DMA器件之外,還設(shè)置專門的硬件裝置通道。9. 2.4 通道控制方式(channel control)是一種以內(nèi)存為中心,實(shí)現(xiàn)設(shè)備和內(nèi)存直接交換數(shù)據(jù)的控制方式。與DMA方式不同的是,在DMA方式中,數(shù)據(jù)的傳送方向、存放數(shù)據(jù)的內(nèi)存始址以及傳送的數(shù)據(jù)塊長度等都由CPU控制,而在通道方式中,這些都由專管輸入輸出的硬件通道來進(jìn)行控制。另外,與DMA方式時每臺設(shè)備至少一個DMA控制器相比,通道控制方式可以做到一個通道控制多臺設(shè)備與內(nèi)存進(jìn)行數(shù)據(jù)交換,從而,通道方式進(jìn)一步減輕了CPU的工作負(fù)擔(dān)和增加了計

18、算機(jī)系統(tǒng)的并行工作程度。通道:是一個獨(dú)立于CPU的專管輸入輸出控制的處理機(jī),它控制設(shè)備與內(nèi)存直接進(jìn)行數(shù)據(jù)交換。它有自己的通道指令,這些通道指令受CPU啟動,并在操作結(jié)束時向CPU發(fā)中斷信號。通道控制方式的基本思想。在通道控制方式中,I/O控制器中沒有傳送字節(jié)計數(shù)器和內(nèi)存地址寄存器;但多了通道設(shè)備控制器和指令執(zhí)行機(jī)構(gòu)。在通道方式下,CPU只需發(fā)出啟動指令,指出通道相應(yīng)的操作和I/O設(shè)備,該指令就可啟動通道并使該通道從內(nèi)存中調(diào)出相應(yīng)的通道指令執(zhí)行。通道指令一般包含有被交換數(shù)據(jù)在內(nèi)存中應(yīng)占據(jù)的位置、傳送方向、數(shù)據(jù)塊長度以及被控制的I/O設(shè)備的地址信息、特征信息(例如是磁帶設(shè)備還是磁盤設(shè)備)等,通道指

19、令在通道中沒有存儲部件時存放在內(nèi)存中。通道指令的格式一般由操作碼、讀、寫或控制、計數(shù)段(數(shù)據(jù)塊長度)以及內(nèi)存地址段和結(jié)束標(biāo)志等組成。通道指令在進(jìn)程要求數(shù)據(jù)時由系統(tǒng)自動生成。例: write 0 0 250 1850 write 1 1 250 720一個通道可以以分時方式同時執(zhí)行幾個通道指令程序。按照信息交換方式不同,一個系統(tǒng)中可設(shè)立三種類型的通道,即字節(jié)多路通道、數(shù)組多路通道和選擇通道。由這三種通道組成的數(shù)據(jù)傳送控制結(jié)構(gòu)如圖9.7所示。9.7 通道方式的數(shù)據(jù)傳送結(jié)構(gòu)字節(jié)多路通道以字節(jié)為單位傳送數(shù)據(jù),它主要用來連接大量的低速設(shè)備,如終端、打印機(jī)等。數(shù)組多路通道以塊為單位傳送數(shù)據(jù),它具有傳送速率

20、高和能分時操作不同的設(shè)備等優(yōu)點(diǎn)。數(shù)組多路通道主要用來連接中速塊設(shè)備,如磁帶機(jī)等。數(shù)組多路通道和字節(jié)多路通道都可以分時執(zhí)行不同的通道指令程序。但是,選擇通道一次只能執(zhí)行一個通道指令程序。所以,選擇通道一次只能控制一臺設(shè)備進(jìn)行I/O操作。不過,選擇通道具有傳送速度高的特點(diǎn),因而它被用來連接高速外部設(shè)備,并以塊為單位成批傳送數(shù)據(jù)。受選擇通道控制的外設(shè)有磁盤機(jī)等。通道控制方式的數(shù)據(jù)輸入處理過程可描述如下:第一步,當(dāng)進(jìn)程要求設(shè)備輸入數(shù)據(jù)時,CPU發(fā)Start指令指明I/O操作、設(shè)備號和對應(yīng)通道。第二步,對應(yīng)通道接收到CPU發(fā)來的啟動指令Start之后,把存放在內(nèi)存中的通道指令程序讀出,設(shè)置對應(yīng)設(shè)備的I/

21、O控制器中的控制狀態(tài)寄存器。第三步,設(shè)備根據(jù)通道指令的要求,把數(shù)據(jù)送往內(nèi)存中指定區(qū)域。第四步,若數(shù)據(jù)傳送結(jié)束,I/O控制器通過中斷請求線發(fā)中斷信號請求CPU做中斷處理。第五步,與DMA方式時相同,即中斷處理結(jié)束后CPU返回被中斷進(jìn)程處繼續(xù)執(zhí)行。在(1)中要求數(shù)據(jù)的進(jìn)程只有在調(diào)度程序選中它之后,才能對所得到的數(shù)據(jù)進(jìn)行加工處理。另外,在許多情況下,人們可從CPU執(zhí)行的角度描述中斷控制方式、DMA方式或通道控制方式的控制處理過程。例:通道控制方式的描述過程。Channel control procedure:repeatIRMpcpc pc+1execute(IR)if require access

22、ing with I/O Devicethen Command(I/O operation, Address of i/O device, channel) fiif I/O Done interruptthen Call interrupt processing control fiuntil machine haltInterrupt processing control procedure其中,IR代表指令寄存器,pc代表程序計數(shù)器,而fi則表示if.then.條件語句的結(jié)束。9.3 中 斷 技 術(shù)除了程序直接控制方式之外,無論是中斷控制方式、DMA方式還是通道控制方式,都需在設(shè)備和CP

23、U之間進(jìn)行通信,由設(shè)備向CPU發(fā)中斷信號之后,CPU接收相應(yīng)的中斷信號進(jìn)行處理。這幾種方式的區(qū)別只是中斷處理的次數(shù)、數(shù)據(jù)傳送方式以及控制指令的執(zhí)行方式等。在計算機(jī)系統(tǒng)中,除了上述I/O中斷之外,還存在著許多其他的突發(fā)事件,例如電源掉電、程序出錯等,這些也會發(fā)出中斷信號通知CPU做相應(yīng)的處理。9.3.1 中斷的基本概念中斷(Interrupt)是指計算機(jī)在執(zhí)行期間,系統(tǒng)內(nèi)發(fā)生任何非尋常的或非預(yù)期的急需處理事件,使得CPU暫時中斷當(dāng)前正在執(zhí)行的程序而轉(zhuǎn)去執(zhí)行相應(yīng)的事件處理程序,待處理完畢后又返回原來被中斷處繼續(xù)執(zhí)行或調(diào)度新的進(jìn)程執(zhí)行的過程。引起中斷發(fā)生的事件被稱為中斷源,中斷源向CPU發(fā)出的請求中

24、斷處理信號稱為中斷請求,而CPU收到中斷請求后轉(zhuǎn)相應(yīng)的事件處理程序稱為中斷響應(yīng)。在有些情況下,盡管產(chǎn)生了中斷源和發(fā)出了中斷請求,但CPU內(nèi)部的處理機(jī)狀態(tài)字PSW的中斷允許位已被清除,從而不允許CPU響應(yīng)中斷。這種情況稱為禁止中斷。CPU禁止中斷后只有等到PSW的中斷允許位被重新設(shè)置后才能接收中斷。禁止中斷也稱為關(guān)中斷,PSW的中斷允許位的設(shè)置也被稱為開中斷。中斷請求、關(guān)中斷、開中斷等都是由硬件實(shí)現(xiàn)。開中斷和關(guān)中斷是為了保證某些程序執(zhí)行的原子性。中斷屏蔽是指在中斷請求產(chǎn)生之后,系統(tǒng)用軟件方式有選擇地封鎖部分中斷而允許其余部分的中斷仍能得到響應(yīng)。中斷屏蔽是通過每一類中斷源設(shè)置一個中斷屏蔽觸發(fā)器來屏

25、蔽它們的中斷請求而實(shí)現(xiàn)的。不過,有些中斷請求是不能屏蔽甚至不能禁止的,也就是說,這些中斷具有最高優(yōu)先級。不管CPU是否是關(guān)中斷的,只要這些中斷請求一旦提出,CPU必須立即響應(yīng)。例如,電源掉電事件所引起的中斷就是不可禁止和屏蔽中斷。9.3.2 中斷的分類與優(yōu)先級根據(jù)系統(tǒng)對中斷處理的需要,操作系統(tǒng)一般對中斷進(jìn)行分類并對不同的中斷賦予不同的處理優(yōu)先級,以便在不同的中斷同時發(fā)生時,按輕重緩急進(jìn)行處理。根據(jù)中斷源產(chǎn)生的條件,可把中斷分為外中斷和內(nèi)中斷。外中斷時指來自處理機(jī)和內(nèi)存外部的中斷,包括I/O設(shè)備發(fā)出的I/O中斷、外部信號中斷(例如用戶鍵入ESC鍵)、各種定時器引起的時鐘中斷以及調(diào)試程序中設(shè)置的斷

26、點(diǎn)等引起的調(diào)試中斷等。外中斷在狹義上一般被稱為中斷。內(nèi)中斷主要指在處理機(jī)和內(nèi)存內(nèi)部產(chǎn)生的中斷。內(nèi)中斷一般稱為陷阱(trap)。它包括程序運(yùn)算引起的各種錯誤,如地址非法、校驗(yàn)錯、頁面失效、存取訪問控制錯、算術(shù)操作溢出、數(shù)據(jù)格式非法、除數(shù)為零、非法指令、用戶程序執(zhí)行特權(quán)指令、分時系統(tǒng)中的時間片中斷以及從用戶態(tài)到核心態(tài)的切換等都是陷阱的例子。為了按中斷源的輕重緩急處理響應(yīng)中斷,操作系統(tǒng)對不同的中斷賦予不同的優(yōu)先級。例如,在UNIX系統(tǒng)中,外中斷和陷阱的優(yōu)先級共分為8級。為了禁止中斷或屏蔽中斷,CPU的處理機(jī)狀態(tài)字PSW中也設(shè)置有相應(yīng)的優(yōu)先級。如果中斷源的優(yōu)先級高于PSW的優(yōu)先級,則CPU響應(yīng)該中斷源

27、的中斷請求,反之,CPU屏蔽該中斷源的中斷請求。各中斷源的優(yōu)先級在系統(tǒng)設(shè)計時給定,在系統(tǒng)運(yùn)行時是固定的。而處理機(jī)的優(yōu)先級則根據(jù)執(zhí)行情況由系統(tǒng)程序動態(tài)設(shè)定。中斷和陷阱還有如下主要區(qū)別:陷阱通常由處理機(jī)正在執(zhí)行的現(xiàn)行指令引起,而中斷則是由與現(xiàn)行指令無關(guān)的中斷源引起的。陷阱處理程序提供的服務(wù)為當(dāng)前進(jìn)程所用,而中斷處理程序提供的服務(wù)則不是為了當(dāng)前進(jìn)程的。CPU在執(zhí)行完一條指令之后,下一條指令開始之前響應(yīng)中斷,而在一條指令執(zhí)行中也可以響應(yīng)陷阱。例如執(zhí)行指令非法時,盡管被執(zhí)行的非法指令不能執(zhí)行結(jié)束,但CPU仍可對其進(jìn)行處理。另外,在有的系統(tǒng)中,陷阱處理程序被規(guī)定在各自的進(jìn)程上下文中執(zhí)行,而中斷處理程序則在

28、系統(tǒng)上下文中執(zhí)行。9.3.3 軟中斷中斷和陷阱都可以看作是硬中斷,因?yàn)檫@些中斷和陷阱要通過硬件產(chǎn)生相應(yīng)的中斷請求。而軟中斷則不然,它是通信進(jìn)程之間用來模擬硬中斷的一種信號通信方式。軟中斷與硬中斷相同的地方是:其中斷源發(fā)中斷請求或軟中斷信號后,CPU或接收進(jìn)程在適當(dāng)?shù)臅r機(jī)自動進(jìn)行中斷處理或完成軟中斷信號所對應(yīng)的功能。用“適當(dāng)?shù)臅r機(jī)”幾個字是表示接收軟中斷信號的進(jìn)程不一定正好在接收時占有處理機(jī),而相應(yīng)的處理必須等到該接收進(jìn)程得到處理機(jī)之后才能進(jìn)行。如果該接收進(jìn)程是占據(jù)處理機(jī)的,那么,與中斷處理相同,該接收進(jìn)程在接收到軟中斷信號后將立即轉(zhuǎn)去執(zhí)行該軟中斷信號所對應(yīng)的功能。軟中斷的概念主要來源于UNIX

29、系統(tǒng)。在有些系統(tǒng)中,大部分的陷阱是轉(zhuǎn)化為軟中斷處理的。由于陷阱主要與當(dāng)前執(zhí)行進(jìn)程有關(guān),因此,如果當(dāng)前執(zhí)行指令產(chǎn)生陷阱的話,則向當(dāng)前執(zhí)行進(jìn)程自身發(fā)出一個軟中斷信號從而立即進(jìn)入陷阱處理程序。9.3.4 中斷處理過程圖9.8 中斷處理過程一旦CPU響應(yīng)中斷,轉(zhuǎn)入中斷處理程序,系統(tǒng)就開始進(jìn)行中斷處理。中斷處理過程如下:首先,CPU檢查響應(yīng)中斷的條件是否滿足。CPU響應(yīng)中斷的條件是:有來自于中斷源的中斷請求、CPU允許中斷。如果中斷響應(yīng)條件不滿足,則中斷處理無法進(jìn)行。如果CPU響應(yīng)中斷,則CPU關(guān)中斷,使其進(jìn)入不可再次響應(yīng)中斷的狀態(tài)。保存被中斷進(jìn)程現(xiàn)場。為了在中斷處理結(jié)束后能使進(jìn)程正確地返回到中斷點(diǎn),系

30、統(tǒng)必須保存當(dāng)前處理機(jī)狀態(tài)字PSW和程序計數(shù)器PC等的值。這些值一般保存在特定堆?;蛴布拇嫫髦小7治鲋袛嘣?,調(diào)用中斷處理子程序。在多個中斷請求同時發(fā)生時,處理優(yōu)先級最高的中斷源發(fā)出的中斷請求。執(zhí)行中斷處理子程序。對陷阱來說,在有些系統(tǒng)中則是通過陷阱指令向當(dāng)前執(zhí)行進(jìn)程發(fā)軟中斷信號后調(diào)用對應(yīng)的處理子程序執(zhí)行。退出中斷,恢復(fù)被中斷進(jìn)程的現(xiàn)場或調(diào)度新進(jìn)程占據(jù)處理機(jī)。開中斷,CPU繼續(xù)執(zhí)行。在系統(tǒng)中,為了處理上的方便,通常都是針對不同的中斷源編制有不同的中斷處理子程序(陷阱處理子程序)。這些子程序的入口地址(或陷阱指令的入口地址)存放在內(nèi)存的特定單元中。再者,不同的中斷源也對應(yīng)著不同的處理機(jī)狀態(tài)字PS

31、W。這些不同的PSW被放在相應(yīng)的內(nèi)存單元中。存放的PSW與中斷處理子程序入口地址一起構(gòu)成中斷向量。顯然,根據(jù)中斷或陷阱的種類,系統(tǒng)可由中斷向量表迅速地找到該中斷響應(yīng)的優(yōu)先級、中斷處理子程序(或陷阱指令)的入口地址和對應(yīng)的PSW。有些系統(tǒng)中只在保存和恢復(fù)現(xiàn)場時禁止中斷,而在執(zhí)行中斷處理子程序時屏蔽中斷。從CPU處理的角度出發(fā)來形式化地描述I/O中斷處理的控制過程:I/O interrupt processing control:beginunusable I/Ointerrupt flagsave status of interrupt programif input Devicei Ready

32、then Callinput Devicei Control fiif Output Devicei Readythen Call Output Devicei Control fiif Data Deliver Donethen Call Data Deliver Done Control firestore CPU statusreset I/O interrupt flagendInput Devicei Control:Output Devicei Control: Data Deliver Done Control: 9.4 緩 沖 技 術(shù)9.4.1 緩沖的引入雖然中斷、DMA和通道

33、控制技術(shù)使得系統(tǒng)中設(shè)備和設(shè)備、設(shè)備和CPU等得以并行工作,但是,正如在前面幾節(jié)所講述的那樣,外圍設(shè)備和CPU的處理速度不匹配的問題是客觀存在的。這限制了和處理機(jī)連接的外設(shè)臺數(shù),且在中斷方式時造成數(shù)據(jù)丟失。從而,外圍設(shè)備和CPU處理速度不匹配的問題極大地制約了計算機(jī)系統(tǒng)性能的進(jìn)一步提高和限制了系統(tǒng)的應(yīng)用范圍。外圍設(shè)備與處理機(jī)速度不匹配的問題可以采用設(shè)置緩沖區(qū)(器)的方法解決。在設(shè)置了緩沖區(qū)之后,計算進(jìn)程可把數(shù)據(jù)首先輸出到緩沖區(qū),然后繼續(xù)執(zhí)行;而打印機(jī)則可以從緩沖區(qū)取出數(shù)據(jù)慢慢打印。再者,從減少中斷的次數(shù)看,也存在著引入緩沖區(qū)的必要性。在中斷方式時,如果在I/O控制器中增加一個100個字符緩沖器,

34、則由前面各字對中斷方式的描述可知,I/O控制器對處理機(jī)的中斷次數(shù)將降低100倍,即等到能存放100個字符的字符緩沖區(qū)裝滿之后才向處理機(jī)發(fā)一次中斷。這將大大減少處理機(jī)的中斷處理時間。即使是使用DMA方式或通道方式控制數(shù)據(jù)傳送時,如果不劃分專用的內(nèi)存區(qū)或?qū)S镁彌_器來存放數(shù)據(jù)的話,也會因?yàn)橐髷?shù)據(jù)的進(jìn)程所擁有的內(nèi)存區(qū)不夠或存放數(shù)據(jù)的內(nèi)存始址計算困難等原因而造成某個進(jìn)程長期占有通道或DMA控制器及設(shè)備,從而產(chǎn)生所謂瓶頸問題。因此,為了匹配外設(shè)與CPU之間的處理速度,為了減少中斷次數(shù)和CPU的中斷處理時間,同時也是為了解決DMA或通道方式時的瓶頸問題,在設(shè)備管理中引入了用來暫存數(shù)據(jù)的緩沖技術(shù)。根據(jù)I/O

35、控制方式,緩沖的實(shí)現(xiàn)方法有兩種:一種是采用專用硬件緩沖器,例如I/O控制器中的數(shù)據(jù)緩沖寄存器。另一種方法是在內(nèi)存畫出一個具有n個單元的專用緩沖區(qū),以便存放輸入輸出的數(shù)據(jù)。內(nèi)存緩沖區(qū)又稱軟件緩沖。9.4.2 緩沖的種類根據(jù)系統(tǒng)設(shè)置的緩沖器的個數(shù),可把緩沖技術(shù)分為單緩沖、雙緩沖和多緩沖以及緩沖池幾種:單緩沖是在設(shè)備和處理機(jī)之間設(shè)置一個緩沖器。設(shè)備和處理機(jī)交換數(shù)據(jù)時,先把被交換數(shù)據(jù)寫入緩沖器,然后,需要數(shù)據(jù)的設(shè)備或處理機(jī)從緩沖器取走數(shù)據(jù)。由于緩沖器屬于臨界資源,即不允許多個進(jìn)程同時對一個緩沖器操作,因此,盡管單緩沖能匹配設(shè)備和處理機(jī)的處理速度,但是,設(shè)備和設(shè)備之間不能通過單緩沖達(dá)到并行操作。解決兩臺

36、外設(shè)、打印機(jī)和終端之間的并行操作問題的辦法是設(shè)置雙緩沖。有了兩個緩沖器之后,CPU可把輸出到打印機(jī)的數(shù)據(jù)放入其中一個緩沖器(區(qū)),讓打印機(jī)慢慢打??;然后,它又可以從另一個為終端設(shè)置的緩沖器(區(qū))中讀取所需要的輸入數(shù)據(jù)。雙緩沖只是一種說明設(shè)備和設(shè)備、CPU和設(shè)備并行操作的簡單模型,并不能用于實(shí)際系統(tǒng)中的并行操作。這是因?yàn)橛嬎銠C(jī)系統(tǒng)中的外圍設(shè)備較多,另外,雙緩沖也很難匹配設(shè)備和處理機(jī)的處理速度。因此,現(xiàn)代計算機(jī)系統(tǒng)中一般使用多緩沖或緩沖池結(jié)構(gòu)。多緩沖是把多個緩沖區(qū)連接起來組成兩部分,一部分專門用于輸入,另一部分專門用于輸出的緩沖結(jié)構(gòu)。緩沖池則是把多個緩沖區(qū)連接起來統(tǒng)一管理,既可用于輸入又可用于輸出

37、的緩沖結(jié)構(gòu)。無論是多緩沖,還是緩沖池,由于緩沖器是臨界資源,在使用緩沖區(qū)時都有一個申請、釋放和互斥的問題。下面以緩沖池為例,介紹緩沖的管理。9.4.3 緩沖池的管理1. 緩沖池的結(jié)構(gòu)緩沖池由多個緩沖區(qū)組成。一個緩沖區(qū)由兩部分組成:一部分是用來標(biāo)識該緩沖器和用于管理的緩沖首部,另一部分是用于存放數(shù)據(jù)的緩沖體。這兩部分有一一對應(yīng)的映射關(guān)系。對緩沖池的管理是通過對每一個緩沖器的緩沖首部進(jìn)行操作實(shí)現(xiàn)的。緩沖首部如圖9.9所示,它包括設(shè)備號、設(shè)備上的數(shù)據(jù)塊號(塊設(shè)備時)、互斥標(biāo)識位以及緩沖隊列連接指針和緩沖器號等。圖9.9 緩沖首部設(shè)備號數(shù)據(jù)塊號緩沖器號互斥標(biāo)識位連接指針系統(tǒng)把各緩沖區(qū)按其使用狀況連成三

38、種隊列,其隊列構(gòu)成如圖9.10所示:空白緩沖隊列em,其隊首指針為F(em),隊尾指針為L(em);裝滿輸入數(shù)據(jù)的輸入緩沖隊列in,其隊首指針為F(in),隊尾指針為L(in);裝滿輸出數(shù)據(jù)的輸出緩沖隊列out,其隊首指針為F(out),隊尾指針為L(out)。圖9.10 緩沖區(qū)隊列除了三種緩沖隊列之外,系統(tǒng)(或用戶進(jìn)程)從這三種隊列中申請和取出緩沖區(qū),并用得到的緩沖區(qū)進(jìn)行存數(shù)、取數(shù)操作,在存數(shù)、取數(shù)操作結(jié)束后,再將緩沖區(qū)放入相應(yīng)的隊列。這些緩沖區(qū)被稱為工作緩沖區(qū)。在緩沖池中,有4種工作緩沖區(qū),即:用于收容設(shè)備輸入數(shù)據(jù)的收容輸入緩沖區(qū)hin;用于提取設(shè)備輸入數(shù)據(jù)的提取輸入緩沖區(qū)sin;用于收容

39、CPU輸出數(shù)據(jù)的收容輸出緩沖區(qū)hout;用于提取CPU輸出數(shù)據(jù)的提取輸出緩沖區(qū)sout。如圖9.11所示。圖9.11緩沖池的工作緩沖區(qū)2. 緩沖池管理對緩沖池的管理由如下幾個操作組成:從三種緩沖區(qū)隊列中按一定的選取規(guī)則取出一個緩沖區(qū)的過程take_buf(type);把緩沖區(qū)按一定的選取規(guī)則插入相應(yīng)的緩沖區(qū)隊列的過程add_buf(type,number);供進(jìn)程申請緩沖區(qū)用的過程get_buf(type,number);供進(jìn)程將緩沖區(qū)放入相應(yīng)緩沖區(qū)隊列的過程put_buf(type,work_buf)。其中,參數(shù)type表示緩沖隊列類型,number為緩沖區(qū)號,而work_buf則表示工作緩

40、沖區(qū)類型。緩沖池的工作過程可描述如下:首先,輸入進(jìn)程調(diào)用get_buf(em,number)過程從空白緩沖區(qū)隊列中取出一個緩沖號為number的空白緩沖區(qū),將其作為收容輸入緩沖區(qū)hin,當(dāng)hin中裝滿了由輸入設(shè)備輸入的數(shù)據(jù)之后,系統(tǒng)調(diào)用過程put_buf(in,hin)將該緩沖區(qū)插入輸入緩沖區(qū)隊列in中。當(dāng)進(jìn)程需要輸出數(shù)據(jù)時,輸出進(jìn)程經(jīng)過緩沖管理程序調(diào)用過程get_buf(em,number)從空白緩沖區(qū)隊列中取出一個空白緩沖區(qū)number作為收容輸出緩沖區(qū)hout,待hout中裝滿輸出數(shù)據(jù)之后,系統(tǒng)再調(diào)用過程put_buf(out,hout)將該緩沖區(qū)插入輸出緩沖區(qū)隊列out。對緩沖區(qū)的輸入

41、數(shù)據(jù)和輸出數(shù)據(jù)的提取也是由過程get_buf和put_buf實(shí)現(xiàn)的。get_buf(out,number)從輸出緩沖隊列中取出裝滿輸出數(shù)據(jù)的緩沖區(qū)number,將其作為sout。當(dāng)sout中數(shù)據(jù)輸出完畢時,系統(tǒng)調(diào)用過程put_buf(em,sout)將該緩沖區(qū)插入空白緩沖隊列。而get_buf(in,number)則從輸入緩沖隊列中取出一個裝滿輸入數(shù)據(jù)的緩沖區(qū)number作為輸入緩沖區(qū)sin,當(dāng)CPU從中提取完所需數(shù)據(jù)之后,系統(tǒng)調(diào)用過程put_buf(em,sin)將該緩沖區(qū)釋放和插入空白緩沖隊列em中。顯然,對于各緩沖隊列中緩沖區(qū)的排列以及每次取出和插入緩沖隊列區(qū)的順序都應(yīng)有一定的規(guī)則。最簡

42、單的方法是FIFO,即先進(jìn)先出的排列方法。采用FIFO方法,過程put_buf每次把緩沖區(qū)插入相應(yīng)緩沖隊列的隊尾,而過程get_buf則取出相應(yīng)緩沖隊列的第一個緩沖區(qū),從而get_buf中的第二個參數(shù)number可以省略。而且,采用FIFO方法也省略了對緩沖隊列的搜索時間。過程add_buf(type,number)和take_buf(type,number)分別用來把緩沖區(qū)number插入type隊列和從type隊列中取出緩沖區(qū)number。它們分別被過程get_buf和put_buf調(diào)用,其中,take_buf返回所取緩沖區(qū)number的指針,而add_buf則將給定緩沖區(qū)number的指

43、針鏈入隊列。get_buf和put_buf的描述如下:設(shè)互斥信號量S(type),其初值為1。設(shè)描述資源數(shù)目的信號量RS(type),其初值為n(n為type隊列長度)。get_buf(type,number): beginP(RS(type)P(S(type)Pointer of buffer(number) = take_buf(type,number)V(S(type) endput_buf(type,number): beginP(S(type)add_buf(type,number)V(S(type)V(RS(type)end9.5 設(shè) 備 分 配9.5.1 設(shè)備分配用數(shù)據(jù)結(jié)構(gòu)1.

44、設(shè)備控制表DCT(Device Control Table)設(shè)備控制表DCT反映設(shè)備的特性、設(shè)備和I/O控制器的連接情況。包括設(shè)備標(biāo)識、使用狀態(tài)和等待使用該設(shè)備的進(jìn)程隊列等。系統(tǒng)中每個設(shè)備都必須有一張DCT,且在系統(tǒng)中生成時或在該設(shè)備和系統(tǒng)連接時創(chuàng)建,但表中的內(nèi)容則根據(jù)系統(tǒng)執(zhí)行情況而被動態(tài)地修改。DCT包括以下內(nèi)容:設(shè)備標(biāo)識符,設(shè)備標(biāo)識符用來區(qū)別設(shè)備。 設(shè)備類型,反映設(shè)備的特性,例如終端設(shè)備、塊設(shè)備或字符設(shè)備等。設(shè)備地址或設(shè)備號,每個設(shè)備都有相應(yīng)的地址或設(shè)備號。地址既可以是和內(nèi)存統(tǒng)一編址的,也可以是單獨(dú)編址的。設(shè)備狀態(tài),指設(shè)備是處理工作還是空閑中。等待隊列指針,等待使用該設(shè)備的進(jìn)程組成等待隊列

45、,其隊首和隊尾指針存放在DCT中。I/O控制器指針,該指針指向該設(shè)備相連接的I/O控制器。2. 系統(tǒng)設(shè)備表SDT(System Device Table)系統(tǒng)設(shè)備表SDT整個系統(tǒng)一張,它記錄已被連接到系統(tǒng)中的所有物理設(shè)備的情況,并為每個物理設(shè)備設(shè)一表項。SDT的每個表項包括的內(nèi)容有:DCT指針,該指針指向有關(guān)設(shè)備的設(shè)備控制表。正在使用設(shè)備的進(jìn)程標(biāo)識。設(shè)備類型和設(shè)備標(biāo)識符,該項的意義與DCT中的相同。SDT的主要意義在于反映系統(tǒng)中設(shè)備資源的狀態(tài),即系統(tǒng)中有多少設(shè)備,有多少是空閑的,而又有多少已分配給了哪些進(jìn)程。3. 控制器表COCT(COntroler Control Table)COCT是每個

46、控制器一張,反映I/O控制器的使用狀態(tài)以及和通道的連接情況等。4. 通道控制表CHCT(CHannel Control Table)該表只在通道控制方式的系統(tǒng)中存在,每個通道一張。CHCT包括通道標(biāo)識符、通道忙/閑標(biāo)識、等待獲得該通道的進(jìn)程等待隊列的隊首指針與隊尾指針等。圖9.12 數(shù)據(jù)結(jié)構(gòu)表一個進(jìn)程只有獲得了通道、控制器和所需設(shè)備三者之后,才具備了進(jìn)行I/O操作的物理條件。9.5.2 設(shè)備分配的原則1. 設(shè)備分配原則設(shè)備分配的原則是根據(jù)設(shè)備特性、用戶要求和系統(tǒng)配置情況決定的。設(shè)備分配的總原則是既要充分發(fā)揮設(shè)備的使用效率,盡可能的讓設(shè)備忙,但又要避免由于不合理的分配方法造成進(jìn)程死鎖;另外還要做

47、到把用戶程序和具體物理設(shè)備隔離開來,即用戶程序面對的是邏輯設(shè)備,而分配程序?qū)⒃谙到y(tǒng)把邏輯設(shè)備轉(zhuǎn)換成物理設(shè)備之后,再根據(jù)要求的物理設(shè)備號進(jìn)行分配如圖9.13所示。圖9.13 設(shè)備分配流程圖設(shè)備分配方式有兩種,即靜態(tài)分配和動態(tài)分配。靜態(tài)分配方式是在用戶作業(yè)開始執(zhí)行之前,由系統(tǒng)一次分配該作業(yè)所要求的全部設(shè)備、控制器和通道。一旦分配之后,這些設(shè)備、控制器和通道就一直為該作業(yè)所占用,直到該作業(yè)被撤消。靜態(tài)分配方式不會出現(xiàn)死鎖,但設(shè)備的使用效率低。因此,靜態(tài)分配方式并不符合設(shè)備分配的總原則。動態(tài)分配在進(jìn)程執(zhí)行過程中根據(jù)執(zhí)行需要進(jìn)行。當(dāng)進(jìn)程需要設(shè)備時,通過系統(tǒng)調(diào)用命令向系統(tǒng)提出設(shè)備請求,由系統(tǒng)按照事先規(guī)定的

48、策略給進(jìn)程分配所需要的設(shè)備、I/O控制器和通道,一旦用完之后,便立即釋放。動態(tài)分配方式有利于提高設(shè)備的利用率,但如果分配算法使用不當(dāng),則有可能造成進(jìn)程死鎖。2. 設(shè)備分配策略與進(jìn)程調(diào)度相似,動態(tài)設(shè)備分配也是基于一定的分配策略的。常用的分配策略有先請求先分配、優(yōu)先級高者先分配策略等。 先請求先分配:當(dāng)有多個進(jìn)程對某一設(shè)備提出I/O請求時,或者是在同一設(shè)備上進(jìn)行多次I/O操作時,系統(tǒng)按提出I/O請求的先后順序,將進(jìn)程發(fā)出的I/O請求命令排成隊列,其隊首指向被請求設(shè)備的DCT。當(dāng)該設(shè)備空閑時,系統(tǒng)從該設(shè)備的請求隊列的隊首取下一個I/O請求消息,將設(shè)備分配給發(fā)出這個請求消息的進(jìn)程。優(yōu)先級高者先分配:優(yōu)

49、先級高者指發(fā)出I/O請求命令的進(jìn)程。這種策略和進(jìn)程調(diào)度的優(yōu)先數(shù)法是一致的,即進(jìn)程的優(yōu)先級高,它的I/O請求也優(yōu)先予以滿足。對于相同優(yōu)先級的進(jìn)程來說,則按先請求先分配策略分配。因此,優(yōu)先級高者先分配策略把請求某設(shè)備的I/O請求命令按進(jìn)程的優(yōu)先級組成隊列,從而保證在該設(shè)備空閑時,系統(tǒng)能從I/O請求隊列隊首取下一個具有最高優(yōu)先級進(jìn)程發(fā)來的I/O請求命令,并將設(shè)備分配給發(fā)出該命令的進(jìn)程。9.5.3 設(shè)備分配算法根據(jù)設(shè)備分配策略和原則,使用系統(tǒng)提供的SDT、DCT、COCT及CHCT等數(shù)據(jù)結(jié)構(gòu),當(dāng)某個進(jìn)程提出I/O設(shè)備請求之后,就可按上圖9.13所示流程進(jìn)行設(shè)備分配。9.6I/O進(jìn)程控制9.6.1I/O

50、控制的引入從用戶進(jìn)程的輸入輸出請求開始,給用戶進(jìn)程分配設(shè)備和啟動有關(guān)設(shè)備進(jìn)行I/O操作,以及在I/O操作完成之后響應(yīng)中斷,進(jìn)行善后處理為止的整個系統(tǒng)控制過程稱為I/O控制。9.6.2I/O控制的功能I/O控制過程首先收集和分析調(diào)用I/O控制過程的原因:是外設(shè)來的中斷請求?還是進(jìn)程來的I/O請求?然后,根據(jù)不同的請求,分別調(diào)用不同的程序模塊進(jìn)行處理。I/O控制的功能如圖9.14所示。圖9.14 I/O控制的功能圖9.14中各子模塊的功能可簡單地說明如下:I/O請求處理是用戶進(jìn)程和設(shè)備管理程序接口的一部分,它把用戶進(jìn)程的I/O請求變換為設(shè)備管理程序所能接受的信息。一般來說,用戶的I/O請求包括:所

51、申請進(jìn)行I/O操作的邏輯設(shè)備名、要求的操作、傳送數(shù)據(jù)的長度和起始地址等。I/O請求處理模塊對用戶的I/O請求進(jìn)行處理。它首先將I/O請求中的邏輯設(shè)備名轉(zhuǎn)換為對應(yīng)的物理設(shè)備名;然后,檢查I/O請求命令中是否有參數(shù)錯誤;在I/O請求命令參數(shù)正確時,它把該命令插入指向相應(yīng)DCT的I/O請求隊列;然后啟動設(shè)備分配程序。在有通道的系統(tǒng)中,I/O請求處理模塊還將按I/O請求命令的要求編制出通道程序。在設(shè)備分配程序?yàn)镮/O請求分配了相應(yīng)的設(shè)備、控制器和通道之后,I/O控制模塊還將啟動緩沖管理模塊為此次I/O傳送申請必要的緩沖區(qū),以保證I/O傳送的順利完成。緩沖區(qū)的申請也可在設(shè)備分配之前進(jìn)行。例如UNIX系統(tǒng)

52、首先請求緩沖區(qū),然后把I/O請求命令寫到緩沖區(qū)中并將該緩沖區(qū)掛到設(shè)備的I/O請求隊列上。另外,在數(shù)據(jù)傳送結(jié)束后,外設(shè)發(fā)出中斷請求,I/O控制過程將調(diào)用中斷處理程序和做出中斷響應(yīng)。對于不同的中斷,其善后處理也不同。例如處理結(jié)束中斷時,要釋放相應(yīng)的設(shè)備、控制器和通道,并喚醒正在等待該操作完成的進(jìn)程。另外,還要檢查是否還有等待該設(shè)備的I/O請求命令。如有,則要通知I/O控制過程進(jìn)行下一個I/O傳送。 9.6.3I/O控制的實(shí)現(xiàn)I/O控制過程在系統(tǒng)中可以按三種方式實(shí)現(xiàn):作為請求I/O操作的進(jìn)程的一部分實(shí)現(xiàn)。這種情況下,請求I/O操作的進(jìn)程應(yīng)具有良好的實(shí)時性,且系統(tǒng)應(yīng)能根據(jù)中斷信號的內(nèi)容準(zhǔn)確地調(diào)度到請求

53、所對應(yīng)I/O操作的進(jìn)程占據(jù)處理機(jī),因?yàn)樵诖蠖鄶?shù)情況下,當(dāng)一個進(jìn)程發(fā)出I/O請求命令之后,都被阻塞睡眠。作為當(dāng)前進(jìn)程的一部分實(shí)現(xiàn)。作為當(dāng)前進(jìn)程的一部分實(shí)現(xiàn)時,不要求系統(tǒng)具有高的實(shí)時性。但由于當(dāng)前進(jìn)程與完成的I/O操作無關(guān),所以當(dāng)前進(jìn)程不能接受I/O請求命令的啟動I/O操作。不過,當(dāng)前進(jìn)程可以在接收到中斷信號后,將中斷信號轉(zhuǎn)交給I/O控制模塊處理,因此,如果讓請求I/O操作的進(jìn)程調(diào)用I/O操作控制部分(I/O請求處理、設(shè)備分配、緩沖區(qū)分配等),而讓當(dāng)前進(jìn)程負(fù)責(zé)調(diào)用中斷處理部分也是一種可行的I/O控制方案。I/O控制由專門的系統(tǒng)進(jìn)程I/O進(jìn)程完成。在用戶進(jìn)程發(fā)出I/O請求命令之后,系統(tǒng)調(diào)度I/O進(jìn)程

54、執(zhí)行,控制I/O操作。同樣,在外設(shè)發(fā)出中斷請求之后,I/O進(jìn)程也被調(diào)度執(zhí)行以響應(yīng)中斷。I/O請求處理模塊、設(shè)備分配模塊以及緩沖區(qū)管理模塊和中斷原因分析、中斷處理模塊和后述的設(shè)備驅(qū)動程序模塊等都是I/O進(jìn)程的一部分。I/O進(jìn)程也可分為三種方式實(shí)現(xiàn)。即:每類(個)設(shè)備設(shè)一專門的I/O進(jìn)程,且該進(jìn)程只能在系統(tǒng)態(tài)下執(zhí)行。整個系統(tǒng)設(shè)一I/O進(jìn)程,全面負(fù)責(zé)系統(tǒng)的數(shù)據(jù)傳送工作。由于現(xiàn)代計算機(jī)系統(tǒng)設(shè)備十分復(fù)雜,I/O進(jìn)程的負(fù)擔(dān)很重,因此,又可把I/O進(jìn)程分為輸入進(jìn)程和輸出進(jìn)程。每類(個)設(shè)備設(shè)一個專門的I/O進(jìn)程,但該進(jìn)程既可在用戶態(tài)也可在系統(tǒng)態(tài)下執(zhí)行。9.7 設(shè)備驅(qū)動程序設(shè)備驅(qū)動程序是驅(qū)動物理設(shè)備和DMA控

55、制器或I/O控制器等直接進(jìn)行I/O操作的子程序的集合。負(fù)責(zé)設(shè)置相應(yīng)設(shè)備有關(guān)寄存器的值,啟動設(shè)備進(jìn)行I/O操作,指定操作的類型和數(shù)據(jù)流向等。為了對驅(qū)動程序進(jìn)行管理,系統(tǒng)中設(shè)置有設(shè)備開關(guān)表DST(Device Switch Table)。設(shè)備開關(guān)表中給出相應(yīng)設(shè)備的各種操作子程序的入口地址,例如打開、關(guān)閉、讀、寫和啟動設(shè)備子程序的入口地址。一般來說,設(shè)備開關(guān)表是二維結(jié)構(gòu),其中的行和列分別表示設(shè)備類型和驅(qū)動程序類型。設(shè)備開關(guān)表也是I/O進(jìn)程的一個數(shù)據(jù)結(jié)構(gòu)。I/O控制過程為進(jìn)程分配設(shè)備和緩沖區(qū)之后,可以使用設(shè)備開關(guān)表調(diào)用所需的驅(qū)動程序進(jìn)行I/O操作。習(xí) 題9.1 設(shè)備管理的目標(biāo)和功能是什么?9.2 數(shù)據(jù)

56、傳送控制方式有哪幾種?試比較它們各自的優(yōu)缺點(diǎn)。9.3 什么是通道?試畫出通道控制方式時的CPU、通道和設(shè)備的工作流程圖。9.4 什么叫中斷?什么叫中斷處理?什么叫中斷響應(yīng)?9.5 什么叫關(guān)中斷?什么叫開中斷?什么叫中斷屏蔽?9.6 什么是陷阱?什么是軟中斷?試述中斷,陷阱和軟中斷之間異同。9.7 描述中斷控制方式時的CPU動作過程。9.8 什么是緩沖?為什么要引入緩沖?9.9 設(shè)在對緩沖隊列em,in和out進(jìn)行管理時,采用最近最少使用算法存取緩沖區(qū),即在一個緩沖區(qū)分配給進(jìn)程之后,只要不是所有其他的緩沖區(qū)都在更近的時間內(nèi)被使用過了,則該緩沖區(qū)不再分配出去。試描述過程take_buf(type,

57、number)和add_buf(type,number)。9.10 試述對緩沖隊列em,in和out采用最近最少使用算法對改善I/O操作性能有什么好處?9.11 用于設(shè)備分配的數(shù)據(jù)結(jié)構(gòu)有哪些?它們之間的關(guān)系是什么?9.12 設(shè)計一個設(shè)備分配的安全檢查程序,以保證把某臺設(shè)備分配給某進(jìn)程時不會出現(xiàn)死鎖。9.13 什么是I/O控制?它的主要任務(wù)是什么?9.14I/O控制可用哪幾種方式實(shí)現(xiàn)?各有什么優(yōu)缺點(diǎn)?9.15 設(shè)備驅(qū)動程序是什么?為什么要有設(shè)備驅(qū)動程序?用戶進(jìn)程怎樣使用驅(qū)動程序?read(fd1,buffer,count);在系統(tǒng)執(zhí)行該系統(tǒng)調(diào)用時,首先產(chǎn)生陷阱指令而進(jìn)入硬件陷阱處理機(jī)構(gòu),并根據(jù)包

58、含陷阱向量入口地址的中斷與陷阱總控程序來選擇相應(yīng)的處理程序和調(diào)用文件系統(tǒng)的低層程序。在陷阱指令發(fā)生后,硬件將有關(guān)參數(shù)從用戶區(qū)送到user結(jié)構(gòu)的u.u_arg數(shù)組中,以便系統(tǒng)調(diào)用程序在核心棧上執(zhí)行時能夠使用這些參數(shù)。在執(zhí)行read調(diào)用時,置入u.u_arg的參數(shù)是buffer和count等。除此之外,系統(tǒng)還將user結(jié)構(gòu)中的讀寫方式設(shè)置為“讀”,以及將user結(jié)構(gòu)中的偏移量設(shè)置為系統(tǒng)打開文件表中讀指針?biāo)傅闹狄员阒该髯x該文件時的起始位置。在設(shè)置了有關(guān)參數(shù)之后,系統(tǒng)由fd1找到fp1,并由fp1找到對應(yīng)的內(nèi)存i節(jié)點(diǎn)。該搜索過程由過程getf完成。在找到了對應(yīng)的內(nèi)存i節(jié)點(diǎn)之后,為了避免競爭條件,系統(tǒng)

59、將該i節(jié)點(diǎn)鎖定之后進(jìn)入讀操作。讀操作是一個循環(huán)過程。系統(tǒng)首先用算法bmap將文件的字節(jié)偏移量映射為磁盤塊塊號,并計算出在該塊中的起始位置和應(yīng)讀寫字符長度。在把該塊讀入內(nèi)存用戶地址buffer之后,系統(tǒng)根據(jù)已讀入的字符數(shù),修改user結(jié)構(gòu)中的有關(guān)參數(shù),然后重復(fù)讀操作過程,直到完全滿足用戶要求或fd1所指文件中不再含有數(shù)據(jù)。讀操作過程是由后述設(shè)備管理程序完成的。系統(tǒng)調(diào)用read的實(shí)現(xiàn)過程可描述如下:read :輸入 :文件描述符fd用戶內(nèi)存地址buffer要讀字節(jié)數(shù)count輸出 :復(fù)制到用戶區(qū)的字節(jié)數(shù)begin 在user結(jié)構(gòu)中設(shè)置用戶區(qū)地址,字節(jié)偏移與字節(jié)計數(shù)等由文件描述符fd得到系統(tǒng)打開文件

60、表指針檢查文件的可存取性由系統(tǒng)打開文件表得到內(nèi)存i節(jié)點(diǎn)指針鎖定內(nèi)存i節(jié)點(diǎn)repeat將磁盤中數(shù)據(jù)讀入內(nèi)存buffer中until 讀完count字節(jié)或文件中不再存在字符將內(nèi)存i節(jié)點(diǎn)解鎖返回已讀入字符總數(shù)end9.6 UNIX System 的中斷和陷阱總控程序1. 中斷和陷阱總控過程通常,在系統(tǒng)執(zhí)行期間內(nèi),系統(tǒng)內(nèi)發(fā)生的一些突發(fā)事件要求處理機(jī)改變其控制流程去執(zhí)行處理這些突發(fā)事件的特定軟件。這些突發(fā)事件被分為兩類:與當(dāng)前執(zhí)行進(jìn)程有關(guān)的事件稱為陷入或陷阱,例如系統(tǒng)調(diào)用指令、指令錯、溢出等;與當(dāng)前執(zhí)行進(jìn)程無關(guān)但與整個系統(tǒng)或其他進(jìn)程有關(guān)的事件稱為中斷,例如I/O數(shù)據(jù)傳送完成、時間片到等事件。在UNIX

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論