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

下載本文檔

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

文檔簡介

湘潭大學(xué)第7章

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

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

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

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

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

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論