《計(jì)算機(jī)操作系統(tǒng)》湯小丹_第1頁(yè)
《計(jì)算機(jī)操作系統(tǒng)》湯小丹_第2頁(yè)
《計(jì)算機(jī)操作系統(tǒng)》湯小丹_第3頁(yè)
《計(jì)算機(jī)操作系統(tǒng)》湯小丹_第4頁(yè)
《計(jì)算機(jī)操作系統(tǒng)》湯小丹_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

湘潭大學(xué)第7章

輸入/輸出系統(tǒng)7.1I/O系統(tǒng)的功能、模型和接口I/O系統(tǒng)管理的主要對(duì)象是I/O設(shè)備和相應(yīng)的設(shè)備控制器。主要任務(wù)是完成用戶(hù)提出的I/O請(qǐng)求,提高I/O速率,以及提高設(shè)備利用率,并能為更高層的進(jìn)程方便地使用這些設(shè)備提供手段。7.1.1I/O系統(tǒng)的基本功能I/O系統(tǒng)應(yīng)具有的基本功能:隱藏物理設(shè)備的細(xì)節(jié)。與設(shè)備的無(wú)關(guān)性。提供處理機(jī)和I/O設(shè)備的利用率。對(duì)I/O設(shè)備進(jìn)行控制。能確保對(duì)設(shè)備的正確共享。錯(cuò)誤處理。7.1.2I/O系統(tǒng)的層次結(jié)構(gòu)和模型I/O軟件的層次結(jié)構(gòu)用戶(hù)層軟件產(chǎn)生I/O請(qǐng)求,格式化I/O,SPOOLing設(shè)備獨(dú)立性軟件映射、保護(hù)、分塊、緩沖、分配設(shè)備驅(qū)動(dòng)程序設(shè)置設(shè)備寄存器;檢查狀態(tài)中斷處理程序硬件執(zhí)行I/O操作I/O系統(tǒng)中各種模塊之間的層次視圖應(yīng)用軟件設(shè)備管理驅(qū)動(dòng)程序中斷處理程序控制器設(shè)備I/O系統(tǒng)接口軟硬件接口設(shè)備獨(dú)立性軟件7.1.3I/O系統(tǒng)接口塊設(shè)備接口塊設(shè)備:數(shù)據(jù)的存儲(chǔ)和傳輸以數(shù)據(jù)塊為單位的設(shè)備,典型的塊設(shè)備是磁盤(pán),可尋址,I/O常采用DMA方式。塊設(shè)備接口是塊設(shè)備管理程序與高層之間的接口,反映了大部分磁盤(pán)存儲(chǔ)器和光盤(pán)存儲(chǔ)器的本質(zhì)特征。流設(shè)備接口流設(shè)備又稱(chēng)字符設(shè)備接口是流設(shè)備管理程序與高層之間的接口,用于控制字符設(shè)備的I/O。字符設(shè)備:數(shù)據(jù)的存取和傳輸是以字符為單位的設(shè)備,不可尋址,I/O常采用中斷驅(qū)動(dòng)方式。網(wǎng)絡(luò)通信接口7.2I/O設(shè)備和設(shè)備控制器I/O設(shè)備(1)I/O設(shè)備的類(lèi)型按使用特性分類(lèi):存儲(chǔ)設(shè)備。也稱(chēng)外存、輔存,是存儲(chǔ)信息的主要設(shè)備。I/O設(shè)備。又可分為輸入設(shè)備,輸出設(shè)備和交互式設(shè)備。按傳輸速率分類(lèi):可分為低速(1~102字節(jié))、中速(103~105)、高速(105~109)三類(lèi)。(2)設(shè)備與控制器之間的接口通常設(shè)備并不是直接與CPU進(jìn)行通信,而是與設(shè)備控制器通信。因此在設(shè)備與設(shè)備控制器之間應(yīng)有一接口。在該接口中有三種類(lèi)型的信號(hào),各對(duì)應(yīng)一條信號(hào)線(xiàn):(1)數(shù)據(jù)信號(hào)線(xiàn)。傳送數(shù)據(jù)信號(hào),對(duì)輸入而言,是由設(shè)備發(fā)送給設(shè)備控制器的;對(duì)輸出而言,是由設(shè)備控制器所接收的比特流。(2)控制信號(hào)線(xiàn)。作為設(shè)備控制器向I/O設(shè)備發(fā)送控制信號(hào)的通路。由設(shè)備控制器發(fā)送給設(shè)備,用于規(guī)定設(shè)備操作的信號(hào)。(3)狀態(tài)信號(hào)線(xiàn)。用于傳送指示設(shè)備的當(dāng)前狀態(tài)的信號(hào)。設(shè)備控制器設(shè)備控制器是CPU與I/O設(shè)備之間的接口,其用途是接收從CPU發(fā)來(lái)的命令,并去控制I/O設(shè)備工作。設(shè)備控制器是一個(gè)可編址設(shè)備。依其復(fù)雜性可分成兩大類(lèi):一類(lèi)是用于控制字符設(shè)備的控制器;另一類(lèi)是用于控制塊設(shè)備的控制器。(1)設(shè)備控制器的基本功能接收和識(shí)別命令:接收和譯碼,需要控制寄存器和命令譯碼器。數(shù)據(jù)交換:實(shí)現(xiàn)CPU控制器;控制器設(shè)備的數(shù)據(jù)交換,需要數(shù)據(jù)寄存器。標(biāo)識(shí)和報(bào)告設(shè)備狀態(tài):需要狀態(tài)寄存器。地址識(shí)別:設(shè)備、寄存器有地址,需要配置地址譯碼器。數(shù)據(jù)緩沖區(qū)。差錯(cuò)控制。(2)設(shè)備控制器的組成:大多數(shù)控制器都由三部分組成:設(shè)備控制器與處理機(jī)的接口、設(shè)備控制器與設(shè)備的接口、I/O邏輯。設(shè)備控制器的組成圖示I/O邏輯控制器與設(shè)備接口1控制器與設(shè)備接口i…數(shù)據(jù)寄存器控制/狀態(tài)寄存器CPU與控制器接口控制器與設(shè)備接口數(shù)據(jù)線(xiàn)地址線(xiàn)控制線(xiàn)數(shù)據(jù)狀態(tài)控制數(shù)據(jù)狀態(tài)控制…用于實(shí)現(xiàn)對(duì)設(shè)備的控制。主要任務(wù)是:對(duì)處理機(jī)發(fā)送給控制器的I/O命令進(jìn)行譯碼;對(duì)發(fā)送給控制器的地址進(jìn)行譯碼,根據(jù)所譯出的命令對(duì)作選設(shè)備進(jìn)行控制。內(nèi)存映像I/O驅(qū)動(dòng)程序?qū)⒊橄竺钷D(zhuǎn)換出一系列具體命令、參數(shù)等數(shù)據(jù),裝入設(shè)備控制器的相應(yīng)寄存器,由控制器來(lái)執(zhí)行這些命令,具體實(shí)施對(duì)I/O設(shè)備的控制,這一工作可用兩種方法來(lái)完成。利用特定的I/O指令:訪(fǎng)問(wèn)內(nèi)存和訪(fǎng)問(wèn)設(shè)備需要兩種不同的指令。內(nèi)存映像I/O:該方式統(tǒng)一了對(duì)內(nèi)存和對(duì)控制器的訪(fǎng)問(wèn)的方法,簡(jiǎn)化了I/O編程?;咀龇ㄊ?,在編址上不再區(qū)分內(nèi)存單元地址和設(shè)備控制器地址,都采用k。當(dāng)0≤k≤n-1時(shí),認(rèn)為是內(nèi)存地址,當(dāng)k≥n時(shí),認(rèn)為是某個(gè)控制器的寄存器地址。7.3中斷機(jī)構(gòu)和中斷處理程序中斷簡(jiǎn)介中斷和陷入中斷向量表和中斷優(yōu)先級(jí)對(duì)多中斷源的處理方式屏蔽(禁止)中斷嵌套中斷142、中斷處理程序中斷處理流程:喚醒被阻塞的驅(qū)動(dòng)程序進(jìn)程中斷請(qǐng)求信號(hào)保護(hù)被中斷進(jìn)程的CPU環(huán)境分析中斷原因,轉(zhuǎn)入相應(yīng)的中斷處理程序終端中斷處理程序打印機(jī)中斷處理程序…恢復(fù)被中斷進(jìn)程的CPU現(xiàn)場(chǎng)返回被中斷的進(jìn)程,繼續(xù)執(zhí)行7.4設(shè)備處理程序7.5.1設(shè)備驅(qū)動(dòng)程序概述設(shè)備驅(qū)動(dòng)程序的功能接收由與設(shè)備無(wú)關(guān)的軟件發(fā)來(lái)的命令和參數(shù),將命令中的抽象要求轉(zhuǎn)換為與設(shè)備相關(guān)的低層操作序列。檢查用戶(hù)I/O請(qǐng)求的合法性,了解I/O設(shè)備的狀態(tài),傳遞有關(guān)參數(shù),設(shè)置設(shè)備的工作方式。發(fā)出I/O命令,若設(shè)備空閑,便立即啟動(dòng)I/O設(shè)備,完成指定的I/O操作;若設(shè)備忙,則將請(qǐng)求者的請(qǐng)求塊,掛在設(shè)備隊(duì)列上等待。及時(shí)響應(yīng)由控制器或通道發(fā)來(lái)的中斷請(qǐng)求,并根據(jù)中斷類(lèi)型調(diào)用相應(yīng)的中斷處理程序進(jìn)行處理。設(shè)備驅(qū)動(dòng)程序的特點(diǎn)驅(qū)動(dòng)程序是實(shí)現(xiàn)在與設(shè)備無(wú)關(guān)的軟件和設(shè)備控制器之間通信和轉(zhuǎn)換的程序。驅(qū)動(dòng)程序與設(shè)備控制器和I/O設(shè)備的硬件特性緊密相關(guān)。對(duì)于不同類(lèi)型的設(shè)備,應(yīng)配置不同的驅(qū)動(dòng)程序。驅(qū)動(dòng)程序與I/O設(shè)備所采用的I/O控制方式緊密相關(guān)。驅(qū)動(dòng)程序中的一部分程序必須用匯編語(yǔ)言書(shū)寫(xiě),目前有很多驅(qū)動(dòng)程序,其基本部分已固化。驅(qū)動(dòng)程序應(yīng)運(yùn)行可重入。設(shè)備處理方式根據(jù)在設(shè)備處理時(shí)是否設(shè)置進(jìn)程及設(shè)置什么樣的進(jìn)程,其方式可分為三類(lèi):為每一類(lèi)設(shè)備設(shè)置一個(gè)進(jìn)程,該進(jìn)程專(zhuān)門(mén)執(zhí)行這類(lèi)設(shè)備的I/O操作。在整個(gè)系統(tǒng)中設(shè)置一個(gè)I/O進(jìn)程,專(zhuān)門(mén)負(fù)責(zé)對(duì)系統(tǒng)中所有各類(lèi)設(shè)備的I/O操作。也可以設(shè)置一個(gè)輸入進(jìn)程和一個(gè)輸出進(jìn)程。不設(shè)置專(zhuān)門(mén)的設(shè)備處理進(jìn)程,而是為各類(lèi)設(shè)備設(shè)置相應(yīng)的設(shè)備處理程序,供用戶(hù)進(jìn)程或系統(tǒng)進(jìn)程調(diào)用。7.4.2設(shè)備處理程序的處理過(guò)程設(shè)備驅(qū)動(dòng)程序的主要任務(wù)是啟動(dòng)指定設(shè)備。但在啟動(dòng)之前還必須完成必要的準(zhǔn)備工作,在完成所有的準(zhǔn)備工作后,才向設(shè)備控制器發(fā)送一條啟動(dòng)命令。其處理過(guò)程是:將抽象要求轉(zhuǎn)換為具體要求;對(duì)服務(wù)請(qǐng)求進(jìn)行校驗(yàn);檢查設(shè)備的狀態(tài);傳送必要的參數(shù);啟動(dòng)I/O設(shè)備。驅(qū)動(dòng)程序發(fā)出I/O命令后,基本的I/O是在設(shè)備控制器的控制下進(jìn)行的。通常,I/O操作所要完成的工作較多,需要一定的時(shí)間,此時(shí)驅(qū)動(dòng)程序進(jìn)程把自己阻塞起來(lái),直至中斷到來(lái)時(shí)才將它喚醒。7.4.3對(duì)I/O設(shè)備的控制方式在I/O控制的整個(gè)發(fā)展過(guò)程中,都始終貫穿著的宗旨是:盡量減少主機(jī)對(duì)I/O控制的干預(yù),把主機(jī)從繁雜的I/O控制事務(wù)中解脫出來(lái),以便主機(jī)更多地去完成數(shù)據(jù)處理任務(wù)。I/O控制的發(fā)展經(jīng)歷了使用輪詢(xún)的可編程I/O方式、使用中斷的可編程I/O控制方式、DMA控制方式。201、使用輪詢(xún)的可編程I/O方式向I/O控制器發(fā)讀命令讀I/O控制器的狀態(tài)未就緒就緒CPU→I/OI/O→CPU向存儲(chǔ)器中寫(xiě)字從I/O控制器中讀入字檢查狀態(tài)?傳送完成?I/O→CPUCPU→內(nèi)存出錯(cuò)NY下條指令212、使用中斷的可編程I/O控制方式向I/O控制器發(fā)讀命令讀I/O控制器的狀態(tài)就緒CPU→I/OI/O→CPU向內(nèi)存中寫(xiě)字從I/O控制器中讀字檢查狀態(tài)?傳送完成?I/O→CPUCPU→內(nèi)存出錯(cuò)NY下條指令CPU做其他事中斷3、直接存儲(chǔ)器訪(fǎng)問(wèn)(DMA)方式一、DMA控制方式的引入:前述的兩種I/O方式是以字(節(jié))為單位進(jìn)行I/O的,每完成一個(gè)字的I/O,控制器便要向CPU請(qǐng)求一次中斷。這種方式用于塊設(shè)備的I/O,其效率是極低的。為進(jìn)一步減少CPU對(duì)I/O的干預(yù),而引入DMA方式,其特點(diǎn)有:1、數(shù)據(jù)傳送的基本單位是數(shù)據(jù)塊;2、所傳送的數(shù)據(jù)是從設(shè)備直接送入內(nèi)存,或相反;3、僅在傳送一個(gè)或多個(gè)數(shù)據(jù)塊的開(kāi)始和結(jié)束時(shí),才需CPU干預(yù),整塊數(shù)據(jù)的傳送是在控制器的控制下完成的。23

直接存儲(chǔ)器訪(fǎng)問(wèn)DMA控制方式二、DMA控制器的組成I/O控制邏輯DRMARDCCRCPUcountDMA控制器內(nèi)存系統(tǒng)總線(xiàn)命令DMA控制器的三個(gè)組成部分:(1)主機(jī)與DMA控制器的接口.(2)DMA控制器與塊設(shè)備的接口.(3)I/O控制邏輯.命令/狀態(tài)寄存器:用于接受從CPU發(fā)來(lái)的I/O命令或有關(guān)控制信息,或設(shè)備的狀態(tài)。主機(jī)—控制器接口控制器與塊設(shè)備接口數(shù)據(jù)寄存器:暫存從設(shè)備到內(nèi)存或從內(nèi)存到設(shè)備的數(shù)據(jù).數(shù)據(jù)計(jì)數(shù)器:用于存放本次CPU要讀或?qū)懙淖?節(jié))數(shù)。內(nèi)存地址寄存器:用于存放數(shù)據(jù)從設(shè)備傳送到內(nèi)存的目標(biāo)地址,或由內(nèi)存到設(shè)備的內(nèi)存源地址。24直接存儲(chǔ)器訪(fǎng)問(wèn)DMA控制方式設(shè)置MAR和DC初值啟動(dòng)DMA傳送命令挪用存儲(chǔ)器周期傳送數(shù)據(jù)字存儲(chǔ)器地址增1字計(jì)數(shù)寄存器減1DC=0?請(qǐng)求中斷在繼續(xù)執(zhí)行用戶(hù)程序的同時(shí),準(zhǔn)備一次傳送YN工作過(guò)程:7.5與設(shè)備無(wú)關(guān)的I/O軟件設(shè)備獨(dú)立性也稱(chēng)設(shè)備無(wú)關(guān)性。其基本含義是:應(yīng)用程序獨(dú)立于具體使用的物理設(shè)備,使用邏輯設(shè)備名來(lái)請(qǐng)求某類(lèi)設(shè)備,系統(tǒng)在執(zhí)行時(shí),則使用該類(lèi)設(shè)備的物理設(shè)備名。驅(qū)動(dòng)程序是一個(gè)與硬件(或設(shè)備)緊密相關(guān)的軟件,為實(shí)現(xiàn)設(shè)備獨(dú)立性,必須再在驅(qū)動(dòng)程序之上設(shè)置一層設(shè)備獨(dú)立性軟件。7.5.1基本概念以物理設(shè)備名使用設(shè)備早期的OS,應(yīng)用程序使用I/O設(shè)備時(shí),都使用設(shè)備的物理設(shè)備名稱(chēng),使應(yīng)用程序與系統(tǒng)中的物理設(shè)備直接相關(guān)。這種方式導(dǎo)致應(yīng)用程序不靈活,給用戶(hù)帶來(lái)不便,不利于提高設(shè)備利用率。引入邏輯設(shè)備名為了實(shí)現(xiàn)與設(shè)備的無(wú)關(guān)性,引入了邏輯設(shè)備和物理設(shè)備兩個(gè)概念。邏輯設(shè)備是抽象的設(shè)備名。在應(yīng)用程序中使用邏輯設(shè)備名來(lái)使用設(shè)備。好處是:設(shè)備分配時(shí)的靈活性。易于實(shí)現(xiàn)I/O重定向:所謂I/O重定向是指用于I/O操作的設(shè)備可以更換,而不必修改應(yīng)用程序。邏輯設(shè)備名到物理設(shè)備名的轉(zhuǎn)換7.5.2實(shí)現(xiàn)與設(shè)備無(wú)關(guān)性的軟件實(shí)現(xiàn)與設(shè)備無(wú)關(guān)性的軟件是I/O系統(tǒng)高層軟件,其下是設(shè)備驅(qū)動(dòng)程序。在與設(shè)備無(wú)關(guān)的軟件中,包括了執(zhí)行所有設(shè)備公有操作的軟件:設(shè)備驅(qū)動(dòng)程序的統(tǒng)一接口,將邏輯設(shè)備名映射為物理設(shè)備名,進(jìn)一步可找到相應(yīng)物理設(shè)備的驅(qū)動(dòng)程序,對(duì)設(shè)備進(jìn)行保護(hù),禁止用戶(hù)直接訪(fǎng)問(wèn)設(shè)備;緩沖管理;差錯(cuò)控制。獨(dú)占設(shè)備的分配與回收;提供獨(dú)立于設(shè)備的邏輯數(shù)據(jù)塊。7.5.3設(shè)備分配在多道程序環(huán)境下,系統(tǒng)中的設(shè)備不允許用戶(hù)自行使用,而必須由系統(tǒng)分配。7.4.1設(shè)備分配中的數(shù)據(jù)結(jié)構(gòu)進(jìn)行設(shè)備分配時(shí),通常借助于一些表格的幫助。表格中記錄了相應(yīng)設(shè)備或控制器的狀態(tài)以及對(duì)設(shè)備或控制器進(jìn)行控制所需的信息。在進(jìn)行設(shè)備分配時(shí)所需的數(shù)據(jù)結(jié)構(gòu)表格有設(shè)備控制表、控制器控制表、通道控制表、系統(tǒng)設(shè)備表等。291、設(shè)備分配中的數(shù)據(jù)結(jié)構(gòu)(1)一、設(shè)備控制表DCT:系統(tǒng)為每一個(gè)設(shè)備都設(shè)置一張?jiān)O(shè)備控制表,用于記錄本設(shè)備的情況。設(shè)備控制表集合DCT1DCT2DCTn設(shè)備類(lèi)型type設(shè)備標(biāo)始符deviceID設(shè)備狀態(tài):等待/不等待,忙/閑指向控制器表的指針重復(fù)執(zhí)行次數(shù)或時(shí)間設(shè)備隊(duì)列的隊(duì)首指針因請(qǐng)求本設(shè)備而未得到滿(mǎn)足的進(jìn)程,其PCB按照一定的策略排成一隊(duì)列,該隊(duì)列簡(jiǎn)稱(chēng)設(shè)備隊(duì)列。其隊(duì)首指針指向隊(duì)首PCB。當(dāng)設(shè)備本身正處于使用狀態(tài)時(shí),應(yīng)將設(shè)備的忙標(biāo)志置1。若與該設(shè)備相連接的控制器或通道正忙,不能啟動(dòng)該設(shè)備,此時(shí)將設(shè)備的等待標(biāo)志置1指向該設(shè)備所連接的控制器的控制表。在具有多條通路的情況下,一個(gè)設(shè)備將與多個(gè)控制器連接。此時(shí)在DCT中還應(yīng)設(shè)置多個(gè)控制器表指針。若發(fā)生傳送錯(cuò)誤,并不立即認(rèn)為傳送失敗,而是重新傳送,并由系統(tǒng)規(guī)定設(shè)備在工作中發(fā)生錯(cuò)誤時(shí),應(yīng)重復(fù)執(zhí)行的次數(shù)。重復(fù)執(zhí)行時(shí),若能恢復(fù)正常,則仍認(rèn)為傳送成功。當(dāng)屢次失敗而使重復(fù)執(zhí)行次數(shù)達(dá)到規(guī)定值其傳送還不成功時(shí),才認(rèn)為傳送失敗。30設(shè)備分配中的數(shù)據(jù)結(jié)構(gòu)(2)二、控制器控制表、通道表和系統(tǒng)設(shè)備表1、控制器控制表COCT:系統(tǒng)為每一個(gè)控制器都設(shè)置一張用于記錄本控制器情況的控制器控制表。(P214圖7-15(a))2、通道控制表CHCT:每個(gè)通道都配置一張通道控制表。(P214圖7-15(a))3、系統(tǒng)設(shè)備表SDT:這是系統(tǒng)范圍的數(shù)據(jù)結(jié)構(gòu),其中記錄了系統(tǒng)中全部設(shè)備的情況。每個(gè)設(shè)備占一個(gè)表目。(見(jiàn)圖)表目1…表目i…設(shè)備類(lèi)型設(shè)備標(biāo)識(shí)符DCT驅(qū)動(dòng)程序入口2、設(shè)備分配時(shí)應(yīng)考慮的因素一、考慮設(shè)備的固有屬性:設(shè)備的固有屬性可分成兩類(lèi):1、獨(dú)占,這類(lèi)設(shè)備在一段時(shí)間內(nèi),只允許一個(gè)進(jìn)程獨(dú)占。對(duì)其采用的分配策略是獨(dú)享分配,但這種分配方式使設(shè)備利用不充分,且會(huì)引起死鎖。2、共享,指一個(gè)設(shè)備允許多個(gè)進(jìn)程同時(shí)共享。對(duì)這類(lèi)設(shè)備可同時(shí)分配給多個(gè)進(jìn)程使用,但對(duì)這些進(jìn)程的訪(fǎng)問(wèn)應(yīng)合理調(diào)度。此外,還有虛擬設(shè)備,這是對(duì)獨(dú)占設(shè)備經(jīng)虛擬技術(shù)改造后的設(shè)備,已屬可共享設(shè)備。二、設(shè)備分配算法:對(duì)設(shè)備的分配算法通常有兩種,即先來(lái)先服務(wù)算法和優(yōu)先級(jí)高者優(yōu)先算法。三、設(shè)備分配中的安全性:1、安全分配方式:每當(dāng)進(jìn)程發(fā)出I/O請(qǐng)求后,便進(jìn)入阻塞狀態(tài),直到其I/O操作完成時(shí)才被喚醒。這種方式已摒棄了造成死鎖的四個(gè)必要條件之一的“請(qǐng)求和保持”條件,因而是安全的。其缺點(diǎn)是進(jìn)程進(jìn)展緩慢,即CPU與I/O設(shè)備是串行工作的。2、不安全工作方式:進(jìn)程發(fā)出I/O請(qǐng)求后仍繼續(xù)運(yùn)行,需要時(shí)又可發(fā)出第二、第三個(gè)I/O請(qǐng)求。僅當(dāng)進(jìn)程所需要的設(shè)備已被另一進(jìn)程占用時(shí),該進(jìn)程才進(jìn)入阻塞狀態(tài)。這種方式可能造成死鎖,應(yīng)進(jìn)行是否會(huì)發(fā)生死鎖的安全性計(jì)算。3、獨(dú)占設(shè)備的分配程序一、基本的設(shè)備分配程序:對(duì)于具有I/O通道的系統(tǒng),在進(jìn)程提出I/O請(qǐng)求后,系統(tǒng)的設(shè)備分配程序可按下述步驟進(jìn)行設(shè)備分配:1、分配設(shè)備;2、分配控制器;3、分配通道。二、設(shè)備分配程序的改進(jìn):上述程序中進(jìn)程是以物理設(shè)備名來(lái)提出I/O請(qǐng)求的,另外采用的是單通路的I/O系統(tǒng)結(jié)構(gòu),易產(chǎn)生“瓶頸”現(xiàn)象。為此需加以改進(jìn),可從兩方面入手:1、增加設(shè)備的獨(dú)立性;2、考慮多通路情況。347.5.4邏輯設(shè)備名到物理設(shè)備名映射的實(shí)現(xiàn)1、邏輯設(shè)備表LUT:其格式是

2、LUT的設(shè)置問(wèn)題:可采取兩種方式,一種是整個(gè)系統(tǒng)設(shè)置一張LUT,一種是為每個(gè)用戶(hù)設(shè)置一張LUT。邏輯設(shè)備名物理設(shè)備名驅(qū)動(dòng)程序入口地址/dev/tty31024/dev/print52046………整個(gè)系統(tǒng)設(shè)置一張LUT,可采用這種格式。由于系統(tǒng)中所有進(jìn)程的設(shè)備分配情況都記錄在同一張LUT中,因此不允許表中有相同的邏輯設(shè)備名,即要求所有用戶(hù)不使用相同的邏輯設(shè)備名。在多用戶(hù)環(huán)境下難以做到,主要用于單用戶(hù)系統(tǒng)。邏輯設(shè)備名系統(tǒng)設(shè)備表指針/dev/tty3/dev/print5……為每個(gè)用戶(hù)設(shè)置一張LUT,可采用這種格式。當(dāng)用戶(hù)登錄時(shí),便為用戶(hù)建立一個(gè)進(jìn)程,同時(shí)為之建立一張LUT,并將其放入進(jìn)程PCB中。由于在多用戶(hù)系統(tǒng)中都配置了系統(tǒng)設(shè)備表,故LUT可采用以上格式。7.6用戶(hù)層的I/O軟件7.6.1系統(tǒng)調(diào)用與庫(kù)函數(shù)系統(tǒng)調(diào)用應(yīng)用程序通過(guò)系統(tǒng)調(diào)用,間接調(diào)用OS中的I/O過(guò)程,對(duì)I/O設(shè)備進(jìn)行操作。庫(kù)函數(shù)用戶(hù)程序通過(guò)調(diào)用對(duì)應(yīng)的庫(kù)函數(shù)來(lái)使用系統(tǒng)調(diào)用,這些庫(kù)函數(shù)與系統(tǒng)調(diào)用連接在一起,被嵌入在運(yùn)行時(shí)裝入內(nèi)存的二進(jìn)制程序中。系統(tǒng)調(diào)用執(zhí)行過(guò)程系統(tǒng)調(diào)用命令用戶(hù)態(tài)系統(tǒng)態(tài)系統(tǒng)調(diào)用調(diào)用返回7.6.2假脫機(jī)系統(tǒng)一、什么是SPOOLing:在多道程序系統(tǒng)中,利用一道程序來(lái)模擬脫機(jī)輸入時(shí)的外圍控制機(jī)的功能,把低速I(mǎi)/O設(shè)備上的數(shù)據(jù)傳送到高速磁盤(pán)上;再利用另一道程序模擬脫機(jī)輸出時(shí)外圍控制機(jī)的功能,把數(shù)據(jù)從磁盤(pán)傳送到低速輸出設(shè)備上。這樣,在主機(jī)的直接控制下,實(shí)現(xiàn)脫機(jī)輸入輸出功能。此時(shí)的外圍操作與CPU對(duì)數(shù)據(jù)的處理同時(shí)進(jìn)行,把這種在聯(lián)機(jī)情況下實(shí)現(xiàn)的同時(shí)外圍操作稱(chēng)為SPOOLing,或稱(chēng)為假脫機(jī)操作。其特點(diǎn)有三:一是提高了I/O速度;二是將獨(dú)占設(shè)備改造為共享設(shè)備;三是實(shí)現(xiàn)了虛擬設(shè)備功能。二、SPOOLing系統(tǒng)的組成:SPOOLing系統(tǒng)由三部分組成,由于是對(duì)脫機(jī)輸入輸出工作的模擬,故必須有高速隨機(jī)外存的支持,通常采用磁盤(pán)。1、輸入井和輸出井:是磁盤(pán)上開(kāi)辟的兩個(gè)大存儲(chǔ)空間。輸入井用于收容I/O設(shè)備輸入的數(shù)據(jù)。輸出井用于收容用戶(hù)程序的輸出數(shù)據(jù)。2、輸入緩沖區(qū)和輸出緩沖區(qū):內(nèi)存中開(kāi)辟的兩個(gè)緩沖區(qū)。輸入緩沖區(qū)用于暫存由輸入設(shè)備送來(lái)的數(shù)據(jù),以后再傳送到輸入井。輸出緩沖區(qū)用于暫存從輸出井送來(lái)的數(shù)據(jù),以后再傳送給輸出設(shè)備。3、輸入進(jìn)程SPi和輸出進(jìn)程SP0:SPi模擬脫機(jī)輸入時(shí)的外圍控制機(jī),將用戶(hù)要求的數(shù)據(jù)從輸入機(jī)通過(guò)輸入緩沖區(qū)再送到輸入井。CPU需要輸入的數(shù)據(jù)時(shí),直接從輸入井讀入內(nèi)存。SP0模擬脫機(jī)輸出時(shí)的外圍控制機(jī)。4、請(qǐng)求打印隊(duì)列:由若干張請(qǐng)求打印表形成的隊(duì)列,系統(tǒng)為每個(gè)請(qǐng)求打印的進(jìn)程建立一張請(qǐng)求打印表。三、共享打印機(jī):打印機(jī)屬于獨(dú)享設(shè)備。通過(guò)SPOOLing技術(shù)可將其改造為共享設(shè)備。當(dāng)用戶(hù)進(jìn)程請(qǐng)求打印輸出時(shí),SPOOLing系統(tǒng)表示同意,但并不真正將打印機(jī)分配給該用戶(hù)進(jìn)程,只是為他做兩件事:(1)由SP0在輸出井中為之申請(qǐng)一空閑盤(pán)塊區(qū),并將要打印的數(shù)據(jù)送入其中;(2)SP0為用戶(hù)進(jìn)程申請(qǐng)一張空白的用戶(hù)請(qǐng)求打印表,并將用戶(hù)的打印要求填入其中,再將該表掛到請(qǐng)求打印隊(duì)列上。若打印機(jī)空閑,SP0

從請(qǐng)求打印隊(duì)列的對(duì)首取出一張請(qǐng)求打印表,根據(jù)表中的要求將要打印的數(shù)據(jù)從輸出井傳送到內(nèi)存緩沖區(qū),再送打印機(jī)打印。直到請(qǐng)求打印隊(duì)列空為止,SP0才將自己阻塞,到下次再有打印請(qǐng)求時(shí)才被喚醒。7.6.3守護(hù)進(jìn)程對(duì)假脫機(jī)系統(tǒng)實(shí)現(xiàn)打印機(jī)共享這一方案進(jìn)行修改,為打印機(jī)建立一個(gè)守護(hù)進(jìn)程。守護(hù)進(jìn)程是允許使用打印機(jī)的唯一進(jìn)程,所有需要使用打印機(jī)的進(jìn)程,都需將一份要求打印的文件放在假脫機(jī)文件隊(duì)列(目錄)中。如果守護(hù)進(jìn)程睡眠,便將它喚醒,由它按照目錄中的說(shuō)明進(jìn)行打印,直到全部文件打印完畢,守護(hù)進(jìn)程無(wú)事可做,又去睡眠,等待用戶(hù)進(jìn)程再次發(fā)出打印請(qǐng)求。7.7緩沖區(qū)管理要提高I/O速度和設(shè)備利用率,在很大程度上要借助緩沖技術(shù)來(lái)實(shí)現(xiàn)。緩沖管理的主要功能是組織好這些緩沖區(qū),并提供獲得和釋放緩沖區(qū)的手段。7.7.1緩沖的引入在OS中,引入緩沖的主要原因可歸結(jié)為以下幾點(diǎn):緩和CPU與I/O設(shè)備間速度不匹配的矛盾。減少對(duì)CPU的中斷頻率,放寬對(duì)中斷響應(yīng)時(shí)間的限制。解決數(shù)據(jù)粒度不匹配的問(wèn)題提高CPU和I/O設(shè)備之間的并行性。7.7.2單緩沖區(qū)和雙緩沖區(qū)單緩沖區(qū)每當(dāng)一用戶(hù)進(jìn)程發(fā)出一I/O請(qǐng)求時(shí),OS便在主存中為之分配一緩沖區(qū)。在塊設(shè)備輸入時(shí),先從磁盤(pán)把一塊數(shù)據(jù)輸入到緩沖區(qū),再由OS將緩沖區(qū)的數(shù)據(jù)送用戶(hù)區(qū),然后便是CPU對(duì)這一塊數(shù)據(jù)進(jìn)行計(jì)算。在字符設(shè)備輸入時(shí),緩沖區(qū)用于暫存用戶(hù)輸入的一行數(shù)據(jù)。輸入期間,用戶(hù)進(jìn)程被掛起以等待一行數(shù)據(jù)輸入完畢;輸出時(shí),用戶(hù)進(jìn)程將一行數(shù)據(jù)送入緩沖區(qū)后,繼續(xù)執(zhí)行計(jì)算。當(dāng)用戶(hù)進(jìn)程已有第二行數(shù)據(jù)輸出時(shí),若第一行數(shù)據(jù)尚未提取完畢,用戶(hù)進(jìn)程應(yīng)阻塞。雙緩沖區(qū)雙緩沖工作方式也稱(chēng)緩沖對(duì)換方式。塊設(shè)備輸入時(shí),先將數(shù)據(jù)輸入第一個(gè)緩沖區(qū),裝滿(mǎn)后便轉(zhuǎn)向第二個(gè)緩沖區(qū),此時(shí)OS可將第一緩沖區(qū)中的數(shù)據(jù)送用戶(hù)進(jìn)程區(qū),接著由CPU對(duì)數(shù)據(jù)進(jìn)行計(jì)算。設(shè)一塊數(shù)據(jù)從磁盤(pán)輸入到緩沖區(qū)所費(fèi)時(shí)間為T(mén),CPU對(duì)這塊數(shù)據(jù)的計(jì)算時(shí)間為C,雙緩沖時(shí),系統(tǒng)處理一塊數(shù)據(jù)的時(shí)間可粗略記為max(C,T)。若C<T,可使塊設(shè)備連續(xù)輸入;若C>T,可使CPU不必等待設(shè)備輸入。對(duì)于字符設(shè)備,若采用行輸入方式,則在雙緩沖工作方式中,通常用戶(hù)進(jìn)程不會(huì)被阻塞,即用戶(hù)在輸完一行后,在CPU執(zhí)行第一行中的命令時(shí),用戶(hù)可繼續(xù)向第二緩沖區(qū)輸入下一行數(shù)據(jù)。447.7.3環(huán)形緩沖區(qū)一、循環(huán)緩沖的組成1、多個(gè)緩沖區(qū):在循環(huán)緩沖中含有多個(gè)緩沖區(qū),每個(gè)緩沖區(qū)的大小相同。緩沖區(qū)可分成三種類(lèi)型:(1)空緩沖區(qū)R.用于存放輸入數(shù)據(jù)。(2)已滿(mǎn)緩沖區(qū)G。其中的數(shù)據(jù)提供給計(jì)算進(jìn)程使用。(3)現(xiàn)行工作緩沖區(qū)C。計(jì)算進(jìn)程正在使用的緩沖區(qū)。2、多個(gè)指針:對(duì)用于輸入的多緩沖,設(shè)置三個(gè)指針:(1)Nextg。指示計(jì)算進(jìn)程下一個(gè)可用的緩沖區(qū)G;(2)Nexti。指示輸入進(jìn)程下次可用的空緩沖區(qū)R;(3)Current。指示計(jì)算進(jìn)程正在使用的緩沖區(qū)單元。45多個(gè)緩沖區(qū)示意圖GGCRGR165423GNextgCNextgCurrentNextiNexti返回26G46GGCRGR165423多個(gè)指針示意圖CurrentNextiNextg477.3.4循環(huán)緩沖(2)二、緩沖區(qū)的使用:計(jì)算進(jìn)程和輸入進(jìn)程可利用下述兩個(gè)過(guò)程來(lái)使用循環(huán)緩沖區(qū)。1、Getbuf過(guò)程:每當(dāng)計(jì)算進(jìn)程要使用緩沖區(qū)的數(shù)據(jù)時(shí),可調(diào)用該過(guò)程。類(lèi)似地,每當(dāng)輸入進(jìn)程要使用空緩沖來(lái)裝入數(shù)據(jù)時(shí),也可調(diào)用該過(guò)程。2、Releasebuf過(guò)程:當(dāng)計(jì)算進(jìn)程把G緩沖區(qū)中的數(shù)據(jù)提完時(shí),便可調(diào)用該過(guò)程將緩沖區(qū)釋放。此時(shí)把緩沖區(qū)由C改為R。類(lèi)似地,當(dāng)輸入進(jìn)程將緩沖區(qū)裝滿(mǎn)時(shí),也調(diào)用該過(guò)程,將該緩沖區(qū)釋放,并改為G緩沖區(qū)。如圖487.3.4循環(huán)緩沖(3)三、進(jìn)程同步:使用輸入緩沖可使輸入進(jìn)程和計(jì)算進(jìn)程并行執(zhí)行。這時(shí)指針Nexti和Nextg不斷地沿順時(shí)鐘方向移動(dòng),這樣就可能出現(xiàn)下述兩種情況。1、Nexti追趕上Nextg:這意味著全部緩沖區(qū)已滿(mǎn),此時(shí)輸入進(jìn)程應(yīng)被阻塞,直至計(jì)算進(jìn)程把某個(gè)緩沖區(qū)中數(shù)據(jù)全部提完,使之成為空緩沖R,并調(diào)用Releasebuf過(guò)程將其釋放,才將輸入進(jìn)程喚醒。這種情況稱(chēng)為系統(tǒng)受計(jì)算限制。2、Nextg追趕上Nexti:意味著全部緩沖區(qū)已空。此時(shí)計(jì)算進(jìn)程只能阻塞,直至輸入進(jìn)程又裝滿(mǎn)某緩沖區(qū),并調(diào)用Releasebuf過(guò)程將它釋放,才去喚醒計(jì)算進(jìn)程。這種情況稱(chēng)為系統(tǒng)受I/O限制。7.7.4緩沖池循環(huán)緩沖區(qū)僅適用某特定的I/O進(jìn)程和計(jì)算進(jìn)程,屬專(zhuān)用緩沖區(qū)。目前廣泛流行公用緩沖池,池中的緩沖區(qū)可供多個(gè)進(jìn)程共享。一、緩沖池的組成:對(duì)于既可用于輸入又可用于輸出的公用緩沖池,其中至少應(yīng)含有三種類(lèi)型的緩沖區(qū),(1)空緩沖區(qū);(2)裝滿(mǎn)輸入數(shù)據(jù)的緩沖區(qū);(3)裝滿(mǎn)輸出數(shù)據(jù)的緩沖區(qū)。可將相同類(lèi)型的緩沖區(qū)鏈成一個(gè)隊(duì)列,于是可形成三個(gè)隊(duì)列:(1)空緩沖隊(duì)列emq,由空緩沖區(qū)所鏈成.其對(duì)首指針F(emq)和隊(duì)尾指針L(emq)分別指向隊(duì)列的首緩沖區(qū)和尾緩沖區(qū).(2)輸入隊(duì)列inq,由裝滿(mǎn)輸入數(shù)據(jù)的緩沖區(qū)所鏈成的隊(duì)列。其對(duì)首指針F(inq)和隊(duì)尾指針L(inq)分別指向隊(duì)列的首、尾緩沖區(qū)。(3)輸出隊(duì)列outq,由裝滿(mǎn)輸出數(shù)據(jù)的緩沖區(qū)所鏈成的隊(duì)列。其對(duì)首指針F(outq)和隊(duì)尾指針L(outq)分別指向隊(duì)列的首、尾緩沖區(qū)。此外,還應(yīng)具有四種工作緩沖區(qū):(1)用于收容輸入數(shù)據(jù)的工作緩沖區(qū);(2)用于提取數(shù)據(jù)的工作緩沖區(qū);(3)收容輸出數(shù)據(jù)的工作緩沖區(qū);(4)提取輸出數(shù)據(jù)的工作緩沖區(qū)。51

二、Getbuf過(guò)程和Putbuf過(guò)程SProcedureGetbuf(type)beginwait(RS(type));wait(MS(type));B(number):=

Takebuf(type);Signal(MS(type));endProcedure

Putbuf(type,number)beginwait(MS(type));Addbuf(type,number);Signal(MS(type));Signal(RS(type));end此過(guò)程是由Takebuf(type)過(guò)程改造后而形成,原因是隊(duì)列本身是臨界資源,多個(gè)進(jìn)程訪(fǎng)問(wèn)同一個(gè)隊(duì)列時(shí)應(yīng)互斥且需要同步。Takebuf(type)用于從type所指定的隊(duì)列的隊(duì)首,摘下一緩沖區(qū)?;コ庑盘?hào)量,為每個(gè)隊(duì)列設(shè)置一個(gè),使得諸進(jìn)程能互斥地訪(fǎng)問(wèn)緩沖區(qū)隊(duì)列。資源信號(hào)量,每個(gè)緩沖隊(duì)列設(shè)置一個(gè),以保證同步地使用緩沖區(qū)。由Addbuf(type,number)改造而成。Addbuf(type,number)的作用是將由參數(shù)number所指示的緩沖區(qū),掛在type隊(duì)列上。52緩沖池(4)三、緩沖區(qū)的工作方式hinsinhoutsout用戶(hù)程序收容輸入提取輸出提取輸入收容輸出緩沖池輸入進(jìn)程需要輸入時(shí),調(diào)用Getbuf(emq),從emq隊(duì)列的隊(duì)首摘下一空緩沖區(qū),作為收容輸入工作緩沖區(qū)。然后把數(shù)據(jù)輸入其中,裝滿(mǎn)后再調(diào)用Putbuf(inq,hin),將該緩沖區(qū)掛在輸入隊(duì)列inq的隊(duì)尾。計(jì)算進(jìn)程需要輸入數(shù)據(jù)時(shí),調(diào)用Getbuf(inq),從輸入隊(duì)列取得一緩沖區(qū)作為提取輸入工作區(qū)sin,計(jì)算進(jìn)程從中提取數(shù)據(jù)。計(jì)算進(jìn)程用完該數(shù)據(jù)后,調(diào)用Putbuf(emq,sin),將該緩沖區(qū)掛到空緩沖隊(duì)列emq上計(jì)算進(jìn)程需要輸出時(shí)調(diào)用Getbuf(emq),從空緩沖隊(duì)列emq的隊(duì)首取得一空緩沖區(qū),作為收容輸出工作區(qū)hout。當(dāng)其中裝滿(mǎn)輸出數(shù)據(jù)后,又調(diào)用Putbuf(outq,hout),將該緩沖區(qū)掛在輸出隊(duì)列outq末尾。當(dāng)要輸出時(shí),由輸出進(jìn)程調(diào)用Getbuf(outq),從輸出隊(duì)列的隊(duì)首取得一裝

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論