最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

操作系統(tǒng)(七)——輸入輸出管理

2023-04-18 17:42 作者:UCLmsc  | 我要投稿

一、IO管理概述

(一)、IO設(shè)備

IO設(shè)備管理是操作系統(tǒng)設(shè)計中最凌亂也最具挑戰(zhàn)性的部分。由于它包含了很多領(lǐng)域的不同設(shè)備以及與設(shè)備相關(guān)的應(yīng)用程序,因此很難有一個通用且一致的設(shè)計方案。所以在理解設(shè)備管理之前,應(yīng)該先了解具體的IO設(shè)備類型。

(1)按使用特性分類

1)人機(jī)交互類外部設(shè)備,又稱慢速IO設(shè)備,用于桶計算機(jī)用戶之間交互的設(shè)備,如打印機(jī)、顯示器、鼠標(biāo)、鍵盤等。這類設(shè)備數(shù)據(jù)交換速度相對較慢,通常是以字節(jié)為單位進(jìn)行數(shù)據(jù)交換。

2)存儲設(shè)備,用于存儲程序和數(shù)據(jù)的設(shè)備,如磁盤、磁帶、光盤等。這類設(shè)備用于數(shù)據(jù)交換,速度較快,通常以多字節(jié)組成的塊為單位進(jìn)行數(shù)據(jù)交換。

3)網(wǎng)絡(luò)通信設(shè)備,用于與遠(yuǎn)程設(shè)備通信的設(shè)備,如各種網(wǎng)絡(luò)接口、調(diào)制解調(diào)器等。其數(shù)據(jù)交換速度介于外部設(shè)備與存儲設(shè)備之間。網(wǎng)絡(luò)通信設(shè)備在使用和管理上與前兩者設(shè)備有很大的不同。

1)低速設(shè)備,傳輸速率僅為每秒鐘幾個字節(jié)至數(shù)百個字節(jié)的一類設(shè)備,如鍵盤、鼠標(biāo)等。

2)中速設(shè)備,傳輸速率在每秒數(shù)千個字節(jié)至數(shù)萬個字節(jié)的一類設(shè)備,如行式打印機(jī)、激光打印機(jī)等。

3)高速設(shè)備,傳輸速率在數(shù)百個千字節(jié)至千兆字節(jié)的一類設(shè)備,如磁帶機(jī)、磁盤機(jī)、光盤機(jī)等。

(2)按信息交換的單位分類

1)塊設(shè)備

由于信息的存取總是以數(shù)據(jù)塊為單位,所以存儲信息的設(shè)備稱為塊設(shè)備。它屬于有結(jié)構(gòu)設(shè)備,如磁盤等。磁盤設(shè)備的基本特征是傳輸速率高,以及可尋址,即對它先可隨機(jī)地讀寫任意塊。

2)字符設(shè)備

用于數(shù)據(jù)輸入輸出的設(shè)備為字符設(shè)備,因?yàn)槠鋫鬏數(shù)幕締挝皇亲址?。它屬于無結(jié)構(gòu)類型,如交互式終端機(jī)、打印機(jī)等。他們的傳輸速率低、不可尋址、并且在輸入輸出時常采用中斷驅(qū)動方式。

對于IO設(shè)備,有以下三種不同類型的使用方式:

獨(dú)占式使用設(shè)備。獨(dú)占式使用設(shè)備是指在申請?jiān)O(shè)備是,如果設(shè)備空閑,就將其獨(dú)占,不再允許其他進(jìn)程申請使用,一直等到該設(shè)備被釋放才允許其他進(jìn)程申請使用。例如:打印機(jī)。

分時式共享使用設(shè)備。獨(dú)占式使用設(shè)備時,設(shè)備利用率低,當(dāng)設(shè)備沒有獨(dú)占使用的要求時,可以通過分時共享使用,提高利用率。例如:對磁盤設(shè)備的IO操作,各進(jìn)程每次IO操作請求可以通過分時來交替進(jìn)行。

以SPOOLing方式使用外部設(shè)備。SPOOLing技術(shù)是在批處理操作系統(tǒng)時代引入的,即假脫機(jī)IO技術(shù)。這種技術(shù)用于對設(shè)備的操作,實(shí)質(zhì)上就是對IO操作進(jìn)行批處理。具體的內(nèi)容后面有單獨(dú)講解。

采用上面三種使用方式的設(shè)備分別稱為獨(dú)占設(shè)備、共享設(shè)備和虛擬設(shè)備。

(二)、IO管理目標(biāo)

IO設(shè)備管理的主要目標(biāo)有以下三個方面。

方便使用:方便用戶使用外部設(shè)備,控制設(shè)備工作完成用戶的輸入輸出要求。

提高效率:提高系統(tǒng)的并行工作能力,提高設(shè)備的使用效率。

方便控制:提高外圍設(shè)備和系統(tǒng)的可靠性和安全性,以使系統(tǒng)能正常工作。

(三)、IO管理功能

IO設(shè)備管理的功能是按照輸入輸出子系統(tǒng)的結(jié)構(gòu)和設(shè)備類型制定分配和使用設(shè)備的策略,主要包括:

設(shè)備的分配和回收、外圍設(shè)備的啟動、對磁盤的驅(qū)動調(diào)度、外部設(shè)備中斷處理、虛擬設(shè)備的實(shí)現(xiàn)。

(四)、IO應(yīng)用接口

IO應(yīng)用接口就是從不同的輸入輸出設(shè)備中抽象出一些通用類型。每個類型都可以通過一組標(biāo)準(zhǔn)函數(shù)(即接口)來訪問。具體的差別被內(nèi)核模塊(也稱設(shè)備驅(qū)動程序)所封裝。這些設(shè)備驅(qū)動程序一方面可以定制,以適合各種設(shè)備,另一方面也提供了一些標(biāo)準(zhǔn)接口。

IO應(yīng)用接口的具體實(shí)現(xiàn)方式是:先把IO設(shè)備劃分為若干種類的通用類型;然后對每一種類型提供一組標(biāo)準(zhǔn)函數(shù)來訪問,這里的標(biāo)準(zhǔn)函數(shù)就是接口;為每個IO設(shè)備提供各自的設(shè)備驅(qū)動程序,各種設(shè)備間的差異就體現(xiàn)在設(shè)備驅(qū)動程序的不同之中,而對于訪問這些設(shè)備的接口卻是按照該設(shè)備分?jǐn)?shù)的類型而統(tǒng)一。

劃分IO設(shè)備所屬的通用類型的依據(jù):

· 字符設(shè)備還是塊設(shè)備。

·?順序訪問還是隨機(jī)訪問。

·?IO傳輸是同步還是異步。

·?共享設(shè)備還是獨(dú)占設(shè)備。

·?操作速度的高低。

·?訪問模式是讀寫、只讀還是只寫。

(五)、設(shè)備控制器(IO部件)

IO設(shè)備通常包括一個機(jī)械部件和一個電子部件。為了達(dá)到設(shè)計的模塊性和通用性,一般將其分開。電子部件成為設(shè)備控制器(或適配器),在個人計算機(jī)中,通常是一塊插入主板擴(kuò)充槽的印制電路板;機(jī)械部件即設(shè)備本身。

由于具體的設(shè)備操作涉及硬件接口,且不同的設(shè)備有不同的硬件特性和參數(shù),所以這些復(fù)雜的操作交由操作系統(tǒng)用戶編寫程序來操作是不實(shí)際的。引入控制器后,系統(tǒng)可以通過幾個簡單的參數(shù)完成對控制器的操作,而具體的硬件操作則由控制器調(diào)用相應(yīng)的設(shè)備接口完成。設(shè)備控制器的引入大大簡化了操作系統(tǒng)的設(shè)計,特別是有利于計算機(jī)系統(tǒng)和操作系統(tǒng)對各類控制器和設(shè)備的兼容;同時也實(shí)現(xiàn)了主存和設(shè)備之間的數(shù)據(jù)傳輸操作,使CPU從繁重的設(shè)備控制操作中解放出來。

設(shè)備控制器通過寄存器與CPU通信,在某些計算機(jī)上,這些寄存器占用內(nèi)存地址的一部分,稱為內(nèi)存映像IO;另一些計算機(jī)則采用IO專用地址,寄存器獨(dú)立編址。操作系統(tǒng)通過向控制器寄存器寫命令字來執(zhí)行IO功能??刂破魇盏揭粭l命令后,CPU可以轉(zhuǎn)向進(jìn)行其他工作,而讓設(shè)備控制器自行完成具體IO操作。當(dāng)命令執(zhí)行完畢后,控制器發(fā)出一個中斷信號,操作系統(tǒng)重新獲得CPU的控制權(quán)并檢查執(zhí)行結(jié)果,此時,CPU仍舊是從控制器寄存器中讀取信息來獲得執(zhí)行結(jié)果和設(shè)備的狀態(tài)信息。

設(shè)備控制器的主要功能為:

· 接收和識別CPU或通道發(fā)來的命令,如磁盤控制器能就收讀、寫、查找、搜索等命令。

·?實(shí)現(xiàn)數(shù)據(jù)交換,包括設(shè)備和控制器之間的數(shù)據(jù)傳輸;通過數(shù)據(jù)總線或通道,控制器和主存之間的數(shù)據(jù)傳輸。

·?發(fā)現(xiàn)和記錄設(shè)備及自身的狀態(tài)信息,供CPU處理使用。

·?設(shè)備地址識別。

為實(shí)現(xiàn)上述功能,設(shè)備控制器必須包含以下組成部分:

該接口有三類信號線:數(shù)據(jù)線、地址線和控制線。數(shù)據(jù)線通常與兩類寄存器相連接:數(shù)據(jù)存儲器(存放從設(shè)備送來的輸入數(shù)據(jù)或從CPU送來的輸出數(shù)據(jù))和控制/狀態(tài)寄存器(存放從CPU送來的控制信息或設(shè)備的狀態(tài)信息)。

設(shè)備控制器鏈接設(shè)備需要相應(yīng)數(shù)量的接口,一個接口鏈接一臺設(shè)備。每個接口中都存在數(shù)據(jù)、控制和狀態(tài)三種類型的信號。

用于實(shí)現(xiàn)對設(shè)備的控制。它通過一組控制線與處理器交互,對從處理器收到的IO命令進(jìn)行譯碼。CPU啟動設(shè)備時,將啟動命令發(fā)送給控制器,并同時通過地址線把地址發(fā)送給控制器,由控制器的IO邏輯對地址進(jìn)行譯碼,并相應(yīng)地對所選設(shè)備進(jìn)行控制。

(六)、IO控制方式

設(shè)備管理的主要任務(wù)之一是控制設(shè)備和內(nèi)存或處理器之間的數(shù)據(jù)傳送,外圍設(shè)備和內(nèi)存之間的輸入輸出控制方式有四種,下面分別介紹。

計算機(jī)從外部設(shè)備讀取數(shù)據(jù)到存儲器,每次讀一個字的數(shù)據(jù)。對讀入的每個字,CPU需要對狀態(tài)循環(huán)檢查,知道確定該字已經(jīng)在IO控制器的數(shù)據(jù)寄存器中。在程序IO方式中,由于CPU的高速型和IO設(shè)備的低速性,致使CPU的絕大部分時間都處于等待IO設(shè)備完成數(shù)據(jù)IO的循環(huán)測試中,造成CPU的極大浪費(fèi)。在該方式中,CPU之所以要不斷地測試IO設(shè)備的狀態(tài),就是因?yàn)樵贑PU中無中斷機(jī)構(gòu),使IO設(shè)備無法向CPU報告它已完成了一個字符的輸入操作。

程序直接控制方式雖然簡單易于實(shí)現(xiàn),但是其缺點(diǎn)也是顯然的,由于CPU和外部設(shè)備只能串行工作,導(dǎo)致CPU的利用率相當(dāng)?shù)汀?/p>

中斷驅(qū)動方式的思想是:允許IO設(shè)備主動打斷CPU的運(yùn)行并請求服務(wù),從而“解放”CPU,使得其向IO控制器發(fā)送命令后可以繼續(xù)做其他有用的工作。從IO控制器和CPU兩個角度分別來看中斷驅(qū)動方式的工作過程: 從IO控制器的角度來看,IO控制器從CPU接受一個讀命令,然后從外圍設(shè)備讀數(shù)據(jù)。一旦數(shù)據(jù)讀入到該IO控制器的數(shù)據(jù)寄存器,便通過控制線給CPU發(fā)出一個中斷信號,表示數(shù)據(jù)已準(zhǔn)備好,然后等待CPU請求該數(shù)據(jù)。IO控制器收到CPU發(fā)出的取數(shù)據(jù)請求后,將數(shù)據(jù)放到數(shù)據(jù)總線上,傳到CPU的寄存器中。至此,本次IO操作完成,IO控制器又可以開始下一次IO操作。

從CPU的角度來看,CPU發(fā)送讀命令,然后保存當(dāng)前運(yùn)行程序的上下文(現(xiàn)場,包括程序計數(shù)器及處理器寄存器),轉(zhuǎn)去執(zhí)行其他程序。在每個指令周期的末尾,CPU檢查中斷。當(dāng)有來自IO控制器的中斷時,CPU保存當(dāng)前正在運(yùn)行程序的上下文,轉(zhuǎn)去執(zhí)行中斷處理程序處理該中斷。這時,CPU從IO控制器讀一個字的數(shù)據(jù)傳送到寄存器,并存入主存。接著,CPU恢復(fù)發(fā)出IO命令的程序(或其他程序)的上下文,然后繼續(xù)運(yùn)行。

中斷驅(qū)動方式比程序直接控制方式有效,但由于數(shù)據(jù)中的每個字在存儲器與IO控制器之間的傳輸都必須通過CPU處理,這就導(dǎo)致了中斷驅(qū)動方式仍然會花費(fèi)較多的CPU時間。

中斷驅(qū)動方式中,CPU仍然需要主動處理在存儲器和IO設(shè)備之間的數(shù)據(jù)傳送,所以速度還是受限,而直接內(nèi)存存取(DMA)方式的基本思想是在外圍設(shè)備和內(nèi)存之間開辟直接的數(shù)據(jù)交換通路,徹底解放CPU。該方式的特點(diǎn)是:

· 基本單位是數(shù)據(jù)塊。

·?所傳送的數(shù)據(jù),是從設(shè)備直接送入內(nèi)存的,或者相反。

·?僅在傳送一個或多個數(shù)據(jù)塊的開始和結(jié)束時,才需CPU干預(yù),整塊數(shù)據(jù)的傳送是在DMA控制器的控制下完成的。

為了實(shí)現(xiàn)在主機(jī)與控制器之間成塊數(shù)據(jù)的直接交換,必須在DMA控制器中設(shè)置如下四類寄存器:

·?命令/狀態(tài)寄存器(CR)。用于接收從CPU發(fā)來的IO命令或有關(guān)控制信息,或設(shè)備的狀態(tài)。

·?內(nèi)存地址寄存器(MAR)。在輸入時,它存放把數(shù)據(jù)從設(shè)備傳送到內(nèi)存的起始目標(biāo)地址;在輸出時,它存放由內(nèi)存到設(shè)備的內(nèi)存源地址。

·?數(shù)據(jù)寄存器(DR)。用于暫存從設(shè)備到內(nèi)存或從內(nèi)存到設(shè)備的數(shù)據(jù)。

·?數(shù)據(jù)計數(shù)器(DC)。存放本次CPU要讀或?qū)懙淖止?jié)數(shù)。

DMA的工作過程是:CPU讀寫數(shù)據(jù)時,他給IO控制器發(fā)出一條命令,啟動DMA控制器,然后繼續(xù)其他工作。之后CPU就把這個操作委托給DMA控制器,由該控制器負(fù)責(zé)處理。DMA控制器直接與存儲器交互,傳送整個數(shù)據(jù)塊,這個過程不需要CPU參與。當(dāng)傳送完成后,DMA控制器發(fā)送一個中斷信號給處理器。因此,只有在傳送開始和結(jié)束時才需要CPU的參與。

DMA控制方式與中斷驅(qū)動方式的主要區(qū)別是中斷驅(qū)動方式在每個數(shù)據(jù)傳送完后中斷CPU,而DMA控制方式則是在所要求傳送的一批數(shù)據(jù)全部傳送結(jié)束時中斷CPU;此外,中斷驅(qū)動方式數(shù)據(jù)傳送的是在中斷處理時由CPU控制完成,而DMA控制方式則是在DMA控制器的控制下完成的。

IO通道方式是DMA方式的發(fā)展,它可以進(jìn)一步減少CPU的干預(yù),即把對一個數(shù)據(jù)塊的讀或?qū)憺橐粋€單位的干預(yù),減少為對一組數(shù)據(jù)塊的讀或?qū)懠坝嘘P(guān)的控制和管理為單位的干預(yù)。同時,又可以實(shí)現(xiàn)CPU、通道和IO設(shè)備三者的并行操作,從而更有效的提高整個系統(tǒng)的資源利用率。

例如,當(dāng)CPU要完成一組相關(guān)的讀或?qū)懖僮骷坝嘘P(guān)控制時,只需向IO通道發(fā)送一條IO指令,已給出其所要執(zhí)行的通道程序的首址和要訪問的IO設(shè)備,通道接到該指令后,通過執(zhí)行通道程序便可完成CPU指定的IO任務(wù)。

IO通道和一般處理器的區(qū)別是:通道指令的類型單一,沒有自己的內(nèi)存,通道所執(zhí)行的通道程序釋放在主機(jī)內(nèi)存中的,也就是說通道與CPU共享內(nèi)存。

IO通道與DMA的區(qū)別是:DMA方式需要CPU來控制傳輸?shù)臄?shù)據(jù)塊大小、傳輸?shù)膬?nèi)存位置,而通道方式中這些信息是由通道控制的。另外,每個DMA控制器對應(yīng)一臺設(shè)備與內(nèi)存?zhèn)鬟f數(shù)據(jù),而一個通道可以控制多臺設(shè)備與內(nèi)存的數(shù)據(jù)交換。

二、IO核心子系統(tǒng)

(一)、IO層次結(jié)構(gòu)

IO實(shí)現(xiàn)普遍采用了層次式的結(jié)構(gòu)。其基本思想與計算機(jī)網(wǎng)絡(luò)中的層次結(jié)構(gòu)相同:將系統(tǒng)IO的功能組織成一系列的層次,每一層完成整個系統(tǒng)功能的一個子集,其實(shí)現(xiàn)依賴于下層完成更原始的功能,并屏蔽這些功能的實(shí)現(xiàn)細(xì)節(jié),從而為上層提供各種服務(wù)。

一個比較合理的層次劃分為四個層次的系統(tǒng)結(jié)構(gòu),各層次及其功能如下:

1)用戶層IO軟件:實(shí)現(xiàn)與用戶交互的接口,用戶可直接調(diào)用在用戶層提供的、與IO操作有關(guān)的庫函數(shù),對設(shè)備進(jìn)行操作。

2)設(shè)備獨(dú)立性軟件:用于實(shí)現(xiàn)用戶程序與設(shè)備驅(qū)動器的統(tǒng)一接口、設(shè)備命令、設(shè)備保護(hù),以及設(shè)備分配與釋放等,同時為設(shè)備管理和數(shù)據(jù)傳送提供必要的存儲空間。

3)設(shè)備驅(qū)動程序:與硬件直接相關(guān),用于具體實(shí)現(xiàn)系統(tǒng)對設(shè)備發(fā)出的操作指令,驅(qū)動IO設(shè)備工作的驅(qū)動程序。

4)中斷處理程序:用于保存被中斷進(jìn)程的CPU環(huán)境,轉(zhuǎn)入相應(yīng)的中斷處理程序進(jìn)行處理,處理完并回復(fù)被中斷進(jìn)程的現(xiàn)場后,返回到被中斷進(jìn)程。

(二)、IO管理

1.IO應(yīng)用程序接口

2.設(shè)備驅(qū)動程序接口

(三)、IO核心子系統(tǒng)

1.IO調(diào)度

調(diào)度一組IO請求就是確定確定一個好的順序來執(zhí)行這些請求。應(yīng)用程序所發(fā)布的系統(tǒng)調(diào)用的順序不一定總是最佳選擇,所以需要調(diào)度來改善系統(tǒng)整體性能,是進(jìn)程之間公平的共享設(shè)備訪問,減少IO完成所需要的平均等待時間。

操作系統(tǒng)開發(fā)人員通過為每個設(shè)備維護(hù)一個請求隊(duì)列來實(shí)現(xiàn)調(diào)度。當(dāng)一個應(yīng)用程序執(zhí)行阻塞IO系統(tǒng)調(diào)用時,該請求就加到相應(yīng)設(shè)備的隊(duì)列上。IO調(diào)度會重新安排隊(duì)列順序以改善系統(tǒng)總體效率和應(yīng)用程序的平均響應(yīng)時間。

IO子系統(tǒng)還可以使用主存或磁盤上的存儲空間的技術(shù),如緩沖、高速緩沖、假脫機(jī)等。

2.設(shè)備維護(hù)

(四)、SPOOLing(假脫機(jī)技術(shù))

為了緩和CPU的高速型與IO設(shè)備低速性之間的矛盾而引入了脫機(jī)輸入、脫機(jī)輸出技術(shù)。該技術(shù)是利用專門的外圍控制機(jī),將低速IO設(shè)備上的數(shù)據(jù)傳送到高速磁盤上;或者相反。SPOOLing的意思是外部設(shè)備同時聯(lián)機(jī)操作,又稱為假脫機(jī)輸入輸出操作,是操作系統(tǒng)中采用的一項(xiàng)將獨(dú)占設(shè)備改造成共享設(shè)備的技術(shù)。

在磁盤上開辟出的兩個存儲區(qū)域。輸入井模擬脫機(jī)輸入時的磁盤,用于收容IO設(shè)備輸入的數(shù)據(jù)。輸出井模擬脫機(jī)輸出的磁盤,用于收容用戶程序的輸出數(shù)據(jù)。

在內(nèi)存中開辟的兩個緩沖區(qū)。出入緩沖區(qū)用于暫存由輸入設(shè)備送來的數(shù)據(jù),以后再傳送到輸入井。輸出緩沖區(qū)用于暫存從輸出井送來的數(shù)據(jù),以后再傳送到輸出設(shè)備。

輸入進(jìn)程模擬脫機(jī)輸入時的外圍控制機(jī),將用戶要求的數(shù)據(jù)從輸入機(jī)通過輸入緩沖區(qū)再送到輸入井。當(dāng)CPU需要輸入數(shù)據(jù)時,直接將數(shù)據(jù)從輸入井讀入內(nèi)存。輸入進(jìn)程模擬脫機(jī)輸出時的外圍控制機(jī),把用戶要求輸出的數(shù)據(jù)先從內(nèi)存送到輸出井,待輸出設(shè)備空閑時,再將輸出井中的數(shù)據(jù)經(jīng)過輸出緩沖區(qū)送到輸出設(shè)備。

共享打印機(jī)是使用SPOOLing技術(shù)的一個實(shí)例,這項(xiàng)技術(shù)已被廣泛的用于多用戶系統(tǒng)和局域網(wǎng)絡(luò)中。當(dāng)用戶進(jìn)程請求打印輸出時,SPOOLing系統(tǒng)統(tǒng)一為它打印輸出,但并不真正立即把打印機(jī)分配給該用戶進(jìn)程,而只為它做兩件事:

1)由輸出進(jìn)程在輸出井中為之申請一個空閑磁盤塊區(qū),并將要打印的數(shù)據(jù)送入其中。

2)輸出進(jìn)程再為用戶進(jìn)程申請一張空白的用戶請求打印表,并將用戶的打印要求填入其中,再將該表掛到請求打印隊(duì)列中。

SPOOLing系統(tǒng)的特點(diǎn)是:提高了IO速度;將獨(dú)占設(shè)備改造為共享設(shè)備;實(shí)現(xiàn)了虛擬設(shè)備功能。

出錯處理

操作系統(tǒng)可以采用內(nèi)存保護(hù),這樣一來就可以預(yù)防許多硬件和應(yīng)用程序的錯誤,即便有一些設(shè)備硬件上的失靈也不會導(dǎo)致系統(tǒng)的完全崩潰。

IO設(shè)備傳輸中出現(xiàn)的錯誤很多,如網(wǎng)絡(luò)上的堵塞和傳輸過載等。操作系統(tǒng)可以對一些短暫的出錯進(jìn)行處理,比如讀取磁盤出錯,那么可以選擇重新嘗試對磁盤進(jìn)行read操作;再比如在網(wǎng)絡(luò)上發(fā)送數(shù)據(jù)出錯,那么只要網(wǎng)絡(luò)通信協(xié)議允許,就可以做resend操作。但是,如果計算機(jī)系統(tǒng)中的重要組件出現(xiàn)了永久性錯誤,那么操作系統(tǒng)將無法恢復(fù)。

作為一個規(guī)則,IO系統(tǒng)調(diào)用通常返回一位調(diào)用狀態(tài)信息,以表示成功或失敗。在UNIX系統(tǒng)中,用一個名為errno的全局變量來表示出錯代碼,以表示出錯原因。

注意:read、send和resend都是操作系統(tǒng)的基本輸入輸出命令,分別用來讀、發(fā)送和重發(fā)數(shù)據(jù)。

(五)、設(shè)備的分配與回收

設(shè)備分配的基本任務(wù)是根據(jù)用戶的IO請求,為他們分配所需的設(shè)備。設(shè)備分配的總原則是充分發(fā)揮設(shè)備的使用效率,盡可能地讓設(shè)備忙碌,又要避免由于不合理的分配方法造成進(jìn)程死鎖。從設(shè)備的特性來看,可以把設(shè)備分成獨(dú)占設(shè)備、共享設(shè)備和虛擬設(shè)備三類。

對于獨(dú)立設(shè)備,將一個設(shè)備分配給某進(jìn)程后,便由該進(jìn)程獨(dú)占,直至該進(jìn)程完成或釋放該設(shè)備。對于共享設(shè)備,可以同時分配給多個進(jìn)程使用,但需要對這些進(jìn)程訪問該設(shè)備的先后次序進(jìn)程合理的調(diào)度。虛擬設(shè)備屬于可共享設(shè)備,可以將它同時分配給多個進(jìn)程使用。

設(shè)備分配依據(jù)的主要數(shù)據(jù)結(jié)構(gòu)有設(shè)備控制表(DCT)、控制器控制表(COCT)、通道控制表(CHCT)和系統(tǒng)設(shè)備表(SDT),各數(shù)據(jù)結(jié)構(gòu)功能如下:

設(shè)備控制表:系統(tǒng)為每一個設(shè)備配置一張DCT,它用于記錄設(shè)備的特性以及與IO控制器連接的情況。DCT包括設(shè)備標(biāo)示符、設(shè)備類型、設(shè)備狀態(tài)、指向COCT的指針等。其中,設(shè)備隊(duì)列指針指向等待使用該設(shè)備的進(jìn)程組成的等待隊(duì)列,控制表指針指向于該設(shè)備相連接的設(shè)備控制器。

控制器控制表:每個控制器都配有一張COCT,它反映設(shè)備控制器的使用狀態(tài)以及和通道的連接情況等。

通道控制表:每個通道配有一張CHCT。

系統(tǒng)設(shè)備表:整個系統(tǒng)只有一張SDT,它記錄已連接到系統(tǒng)中的所有物理設(shè)備的情況,每個物理設(shè)備占一個表目。

由于在多道程序系統(tǒng)中,進(jìn)程數(shù)多于資源數(shù),會引起資源的競爭。因此,要有一套合理的分配原則,主要考慮的因素有:IO設(shè)備的固有屬性,IO設(shè)備的分配算法,設(shè)備分配的安全性,以及設(shè)備獨(dú)立性。

1)設(shè)備分配原則。設(shè)備的分配原則應(yīng)根據(jù)設(shè)備特性、用戶要求和系統(tǒng)配置的情況來決定。設(shè)備分配的總原則既要充分發(fā)揮設(shè)備的使用效率,又要避免造成進(jìn)程死鎖,還要將用戶程序和具體設(shè)備隔離開。

2)設(shè)備分配方式。設(shè)備分配方式有靜態(tài)分配和動態(tài)分配兩種。

靜態(tài)分配主要用于對獨(dú)占設(shè)備的分配,它在用戶作業(yè)開始執(zhí)行前,有系統(tǒng)一次性分配該作業(yè)所要求的全部設(shè)備、控制器(和通道)。一旦分配后,這些設(shè)備、控制器(和通道)就一直為高作業(yè)所占用,直到該作業(yè)被撤銷。靜態(tài)分配方式不會出現(xiàn)死鎖,但設(shè)備的使用效率較低。因此,靜態(tài)分配方式并不符合分配的總原則。

動態(tài)分配是在進(jìn)程執(zhí)行過程中根據(jù)執(zhí)行需要進(jìn)行。當(dāng)進(jìn)程需要設(shè)備時,通過系統(tǒng)調(diào)用命令向系統(tǒng)提出設(shè)備請求,由系統(tǒng)按照事先規(guī)定的策略給進(jìn)程分配所需要的設(shè)備、IO控制器,一旦用完之后,便立即釋放。動態(tài)分配方式有利于提高設(shè)備的利用率,但如果分配算法使用不當(dāng),則有可能造成進(jìn)程死鎖。

3)設(shè)備分配算法。常用的動態(tài)設(shè)備分配算法有先請求先分配、優(yōu)先級高者優(yōu)先等。

對于獨(dú)占設(shè)備,即可以采用動態(tài)分配方式也可以靜態(tài)分配方式,往往采用靜態(tài)分配方式,即在作業(yè)執(zhí)行前,將作業(yè)所要用到的這一類設(shè)備分配給它。共享設(shè)備可被多個進(jìn)程所共享,一般采用動態(tài)分配方式,但在每個IO傳輸?shù)膯挝粫r間內(nèi)只被一個進(jìn)程所占有,通常采用先請求先分配和優(yōu)先級高者先分的分配算法。

設(shè)備分配的安全性是指設(shè)備分配中應(yīng)防止發(fā)生進(jìn)程死鎖。

1)安全分配方式。每當(dāng)進(jìn)程發(fā)出IO請求后便進(jìn)入阻塞狀態(tài),直到其IO操作完成時才被喚醒。這樣,一旦進(jìn)程已經(jīng)獲得某種設(shè)備后便阻塞,不能再請求任何資源,而且在它阻塞時也不保持任何資源。優(yōu)點(diǎn)是設(shè)備分配安全;缺點(diǎn)是CPU和IO設(shè)備是串行工作的。

2)不安全分配方式。進(jìn)程在發(fā)出IO請求后繼續(xù)運(yùn)行,需要時發(fā)出第二個、第三個IO請求等。僅當(dāng)進(jìn)程所請求的設(shè)備已被另一進(jìn)程占用時,才進(jìn)入阻塞狀態(tài)。有點(diǎn)事一個進(jìn)程可以同時操作幾個設(shè)備,從而使進(jìn)程推進(jìn)迅速;缺點(diǎn)是這種設(shè)備分配有可能產(chǎn)生死鎖。

為了提高設(shè)備分配的靈活性和設(shè)備的利用率、方便實(shí)現(xiàn)IO重定向,因此引入了設(shè)備獨(dú)立性。設(shè)備獨(dú)立性是指應(yīng)用程序獨(dú)立于具體使用的物理設(shè)備。

為了實(shí)現(xiàn)設(shè)備獨(dú)立性,在應(yīng)用程序中使用邏輯設(shè)備名來請求使用某類設(shè)備,在系統(tǒng)中設(shè)置一張邏輯設(shè)備表(LUT),用于將邏輯設(shè)備名映射為物理設(shè)備名。LUT表項(xiàng)包括邏輯設(shè)備名、物理設(shè)備名和設(shè)備驅(qū)動程序入口地址;當(dāng)進(jìn)程用邏輯設(shè)備名來請求分配設(shè)備時,系統(tǒng)為它分配相應(yīng)的物理設(shè)備,并在LUT中建立一個表項(xiàng),以后進(jìn)程再利用邏輯設(shè)備名請求IO操作時,系統(tǒng)通過查找LUT來尋找相應(yīng)的物理設(shè)備和驅(qū)動程序。

在系統(tǒng)中可采取兩種方式建立邏輯設(shè)備表:

1)在整個系統(tǒng)中只設(shè)置一張LUT表。這樣,所有進(jìn)程的設(shè)備分配情況都記錄在這張表中,故不允許有相同的邏輯設(shè)備名,主要適用于單用戶系統(tǒng)中。

2)為每個用戶設(shè)置一張LUT。當(dāng)用戶登錄時,系統(tǒng)便為用戶建立一個進(jìn)程,同時也為其建立一張LUT,放入進(jìn)程的PCB中。

(六)、高速緩存與緩沖區(qū)

操作系統(tǒng)總是用磁盤高速緩存技術(shù)來提高磁盤的IO速度,對高速緩存復(fù)制的訪問要比原始數(shù)據(jù)訪問更為高效。例如,正在運(yùn)行的進(jìn)程的指令既存儲在磁盤上,也存儲在物理內(nèi)存上,也被復(fù)制到CPU的二級和一級高速緩存中。

不過,磁盤高速緩存技術(shù)不同于通常意義下的介于CPU與內(nèi)存之間的小容量高速存儲器,而是利用內(nèi)存中的存儲空間來暫存從磁盤中讀出的一系列盤塊中的信息,因此,磁盤高速緩存在邏輯上屬于磁盤,物理上則是駐留在內(nèi)存中的盤塊。

高速緩存在內(nèi)存中分為兩種形式:一種是在內(nèi)存中開辟一個單獨(dú)的存儲空間作為磁盤高速緩存,大小固定;另一種是把未利用的內(nèi)存空間作為一個緩沖池,供請求分頁系統(tǒng)和磁盤IO時共享。

在設(shè)備管理子系統(tǒng)中,引入緩沖區(qū)的目的有:

1)緩和CPU與IO 設(shè)備間速度不匹配的矛盾。

2)減少對CPU的中斷頻率,放寬對CPU 中斷響應(yīng)時間的限制。

3)解決基本數(shù)據(jù)單元大小不匹配的問題。

4)提高CPU和IO設(shè)備之間的并行性。

其實(shí)現(xiàn)方法有:

1)采用硬件緩沖器,但由于成本太高,除一些關(guān)鍵部位外,一般情況下不采用硬件緩沖器。

2)采用緩沖區(qū)(位于內(nèi)存區(qū)域)

根據(jù)系統(tǒng)設(shè)置緩沖器的個數(shù),緩沖技術(shù)可以分為:

1)單緩沖。在設(shè)備和處理器之間設(shè)置一個緩沖區(qū)。設(shè)備和處理器交換數(shù)據(jù)時,先把被交換數(shù)據(jù)寫入緩沖區(qū),然后把需要數(shù)據(jù)的設(shè)備或處理器從緩沖區(qū)取走數(shù)據(jù)。

在塊設(shè)備輸入時,假定從磁盤把一塊數(shù)據(jù)輸入到緩沖區(qū)的時間為T,操作系統(tǒng)將該緩沖區(qū)中的數(shù)據(jù)局傳送到用戶區(qū)的時間為M,而CPU對這一塊數(shù)據(jù)處理的時間為C。由于T和C是可以并行的,所以可把系統(tǒng)對每一塊數(shù)據(jù)的處理時間表示為Max(C,T)+M。

2)雙緩沖。雙緩沖區(qū)機(jī)制又稱緩沖對換。IO設(shè)備輸入數(shù)據(jù)時先輸入到緩沖區(qū)1,直到緩沖區(qū)1滿后才輸入到緩沖區(qū)2,此時操作系統(tǒng)可以從緩沖區(qū)1中取出數(shù)據(jù)放入用戶進(jìn)程,并由CPU計算。雙緩沖的使用提高了處理器和輸入設(shè)備的并行操作的程度。

系統(tǒng)處理一塊數(shù)據(jù)的時間可以粗略地認(rèn)為是Max(T, C + M)。如果C>T,則可使CPU不必等待設(shè)備輸入。對于字符設(shè)備,若采用行輸入方式,則采用雙緩沖可使用戶再輸入完第一行之后,在CPU執(zhí)行第一行中的命令的同時,用戶可繼續(xù)向第二緩沖區(qū)輸入下一行數(shù)據(jù)。而單緩沖情況下則必須等待一行數(shù)據(jù)被提取完畢才可輸入下一行的數(shù)據(jù)。

如果兩臺機(jī)器之間通信僅配置了單緩沖,那么,他們在任意時刻都只能實(shí)現(xiàn)單方向的數(shù)據(jù)傳輸。為了實(shí)現(xiàn)雙向數(shù)據(jù)傳輸,必須在兩臺機(jī)器中都設(shè)置兩個緩沖區(qū),一個用作發(fā)送緩沖區(qū),另一個用作接收緩沖區(qū)。

3)循環(huán)緩沖:包含多個大小相等的緩沖區(qū),每個緩沖區(qū)中有一個緩沖區(qū),最后一個緩沖區(qū)指針指向第一個緩沖區(qū),多個緩沖區(qū)構(gòu)成一個環(huán)形。用于輸入輸出時,還需要有兩個指針in和out。對輸入而言,首先要從設(shè)備接收數(shù)據(jù)到緩沖區(qū)中,in指針指向可以輸入數(shù)據(jù)的第一個空緩沖區(qū);當(dāng)運(yùn)行進(jìn)程需要數(shù)據(jù)時,從循環(huán)緩沖去中去一個裝滿數(shù)據(jù)的緩沖區(qū),并從此緩沖區(qū)中提取數(shù)據(jù),out指針指向可以提取數(shù)據(jù)的第一個滿緩沖區(qū)。輸出正好相反。

4)緩沖池:由多個系統(tǒng)共用的緩沖區(qū)組成,緩沖區(qū)按其使用狀況可以形成三個隊(duì)列:空緩沖隊(duì)列、裝滿輸入數(shù)據(jù)的緩沖隊(duì)列(輸入隊(duì)列)和裝滿輸出數(shù)據(jù)的緩沖隊(duì)列(輸出隊(duì)列)。還應(yīng)具有四種緩沖區(qū):用于收容輸入數(shù)據(jù)的工作緩沖區(qū)、用于提取輸入數(shù)據(jù)的工作緩沖區(qū)、用于收容輸出數(shù)據(jù)的工作緩沖區(qū)、用于提取輸出數(shù)據(jù)的工作緩沖區(qū)。

5)高速緩存與緩沖區(qū)的對比

高速緩存是可以保存復(fù)制數(shù)據(jù)的高速存儲器。訪問高速緩存比訪問原始數(shù)據(jù)更高效,速度更快。

(七)、疑難點(diǎn)

1)分配設(shè)備。首先根據(jù)IO請求中的物理設(shè)備名查找系統(tǒng)設(shè)備表(SDT),從中找出該設(shè)備的DCT,再根據(jù)DCT中的設(shè)備狀態(tài)字段,可知該設(shè)備是否正忙。若忙,便將請求IO進(jìn)程的PCB掛在設(shè)備隊(duì)列上;空閑則按照一定算法計算設(shè)備分配的安全性,安全則將設(shè)備分配給請求進(jìn)程,否則仍將其PCB掛到設(shè)備隊(duì)列。

2)分配控制器。系統(tǒng)把設(shè)備分配給請求IO的進(jìn)程后,再到其DCT中找出與該設(shè)備連接的控制器的COCT,從COCT中的狀態(tài)字段中可知該控制器是否忙碌。若忙,便將請求IO進(jìn)程的PCB掛在該控制器的等待隊(duì)列上;空閑便將控制器分配給進(jìn)程。

3)分配通道。在該COCT中又可找到與該控制器連接的通道CHCT,再根據(jù)CHCT內(nèi)的狀態(tài)信息,可知該通道是否忙碌。若忙,便將請求IO的進(jìn)程掛在該通道的等待隊(duì)列上;空閑便將該通道分配給進(jìn)程。只有在上述三者都分配成功時,這次設(shè)備分配才算成功。然后,便可啟動該IO設(shè)備進(jìn)行數(shù)據(jù)傳送。

為使獨(dú)占設(shè)備的分配具有更強(qiáng)的靈活性,提高分配的成功率,還可以從以下兩方面對基本的設(shè)備分配程序加以改進(jìn):

1)增加設(shè)備的獨(dú)立性。進(jìn)程使用邏輯設(shè)備名請求IO。這樣,系統(tǒng)首先從SDT中找出第一個該類設(shè)備的DCT。若該設(shè)備忙,又查找出第二個該設(shè)備的DCT。僅當(dāng)所有該類設(shè)備都忙時,才把進(jìn)程掛在該類設(shè)備的等待隊(duì)列上;只要有一個該類設(shè)備可用,系統(tǒng)便進(jìn)一步計算分配該設(shè)備的安全性。

2)考慮多通路情況。為防止IO系統(tǒng)的“瓶頸”現(xiàn)象,通常采用多通路的IO系統(tǒng)結(jié)構(gòu)。此時對控制器和通道的分配同樣要經(jīng)過幾次反復(fù),即若設(shè)備(控制器)所連接的第一個控制器(通道)忙時,應(yīng)查看其所連接的第二個控制器(通道),僅當(dāng)所有的控制器(通道)都忙時,此次的控制器(通道)分配才算失敗,才把進(jìn)程掛在控制器(通道)的等待隊(duì)列上。而只要有一個控制器(通道)可用,系統(tǒng)便可將它分配給進(jìn)程。

操作系統(tǒng)(七)——輸入輸出管理的評論 (共 條)

分享到微博請遵守國家法律
赞皇县| 祁门县| 东城区| 铁岭县| 安溪县| 肇庆市| 秦皇岛市| 九江县| 理塘县| 西盟| 三江| 布拖县| 湘潭市| 开封县| 闽侯县| 湘阴县| 海丰县| 安溪县| 横山县| 钟祥市| 临海市| 石狮市| 万载县| 长葛市| 吴桥县| 腾冲县| 无为县| 福建省| 昔阳县| 吉木萨尔县| 柳州市| 鹤壁市| 新竹县| 丹江口市| 井陉县| 大宁县| 荔浦县| 财经| 顺昌县| 天镇县| 团风县|