版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第五章設(shè)備管理5.1引言5.2操作系統(tǒng)與中斷處理5.3操作系統(tǒng)與時(shí)鐘系統(tǒng)5.4操作系統(tǒng)對I/O操作的控制5.5設(shè)備管理的數(shù)據(jù)結(jié)構(gòu)5.6磁盤調(diào)度5.7UNIX系統(tǒng)V的設(shè)備管理5.8設(shè)備分配1第五章設(shè)備管理5.1引言1第五章設(shè)備管理5.1引言設(shè)備管理是指計(jì)算機(jī)系統(tǒng)中,除中央處理器、主存儲器以外的設(shè)備的管理,是操作系統(tǒng)的主要功能之一。通常把這些設(shè)備及其接口線路、控制部件和管理軟件統(tǒng)稱為I/O系統(tǒng)。
2第五章設(shè)備管理5.1引言2在I/O系統(tǒng)中,普遍地使用中斷、通道、緩沖區(qū)等各種技術(shù),使主機(jī)和外設(shè)并行工作,改善了設(shè)備的使用效率。但是,在另一方面卻給用戶帶來困難。用戶想使用一臺外部設(shè)備,除了需掌握相關(guān)I/O部分的原理之外,還要求對接口、控制器以及設(shè)備的物理特性都要有一定了解。為了使用戶擺脫這些限制,操作系統(tǒng)承擔(dān)了這項(xiàng)任務(wù),凡是有關(guān)外設(shè)的驅(qū)動(dòng)、控制、分配等技術(shù)問題都統(tǒng)一由設(shè)備管理程序負(fù)責(zé)。3在I/O系統(tǒng)中,普遍地使用中斷、通道、緩沖區(qū)等各種技術(shù),使主5.1.1設(shè)備的概念和分類1.設(shè)備的概念它既指進(jìn)行實(shí)際輸入/輸出操作的物理設(shè)備,也指控制這些設(shè)備并進(jìn)行I/O操作的支持設(shè)備和支持部件,也指為提高設(shè)備利用率,采用某種I/O技術(shù)形成的邏輯設(shè)備和虛擬設(shè)備。因此可以說,輸入/輸出設(shè)備可指計(jì)算機(jī)系統(tǒng)所能控制的一切控制對象或者與控制對象相聯(lián)系的媒體。45.1.1設(shè)備的概念和分類1.設(shè)備的概念它既指進(jìn)行實(shí)2.設(shè)備的分類①按照功能分類:可以分為輸入設(shè)備、輸出設(shè)備、存儲設(shè)備、供電設(shè)備、網(wǎng)絡(luò)聯(lián)網(wǎng)設(shè)備等。②從設(shè)備的數(shù)據(jù)組織方式分類:可以分為塊設(shè)備(blockdevice)和字符設(shè)備(characterdevice)。塊設(shè)備以數(shù)據(jù)塊為單位組織和傳送數(shù)據(jù)。它將數(shù)據(jù)存儲在定長塊中,每個(gè)數(shù)據(jù)塊都有自己的地址,塊的大小與設(shè)備和具體的操作系統(tǒng)有關(guān),一般在512~4096字節(jié)之間。塊設(shè)備的基本特征是能夠單獨(dú)地讀寫每一個(gè)數(shù)據(jù)塊,所讀寫的塊與其他數(shù)據(jù)塊無關(guān)。字符設(shè)備以字符為單位組織和傳送數(shù)據(jù)。它傳送或接收一連串字符,數(shù)據(jù)組織不考慮塊結(jié)構(gòu),也不能單獨(dú)尋址。52.設(shè)備的分類①按照功能分類:可以分為輸入設(shè)備、輸出設(shè)備③從設(shè)備的管理模式分類,可以分為物理設(shè)備和邏輯設(shè)備。物理設(shè)備指計(jì)算機(jī)系統(tǒng)硬件配置的實(shí)際設(shè)備。這些設(shè)備在操作系統(tǒng)內(nèi)具有一個(gè)惟一的符號名稱,系統(tǒng)可以按照該名稱對相應(yīng)的設(shè)備進(jìn)行物理操作。邏輯設(shè)備是指一種在邏輯意義上存在的設(shè)備,在未加以定義前,它不代表任何硬件設(shè)備和實(shí)際設(shè)備。邏輯設(shè)備是系統(tǒng)提供的,它也是獨(dú)立于物理設(shè)備而進(jìn)行輸入輸出操作的一種“虛擬設(shè)備”。6③從設(shè)備的管理模式分類,可以分為物理設(shè)備和邏輯設(shè)備。6④從設(shè)備的資源屬性分類,可以分為獨(dú)占設(shè)備、共享設(shè)備和虛擬設(shè)備。獨(dú)占設(shè)備在用戶作業(yè)或者進(jìn)程運(yùn)行期間為該用戶所獨(dú)享,只有等它用完,才能讓別的用戶和進(jìn)程使用;共享設(shè)備是指能被多個(gè)用戶或進(jìn)程交替共用的設(shè)備,宏觀上似乎多個(gè)用戶同時(shí)在使用,如磁盤等隨機(jī)存儲設(shè)備。虛擬設(shè)備具有將一種物理設(shè)備模擬成另一種設(shè)備的能力。用戶進(jìn)行輸入輸出所使用的設(shè)備并不是他所指定的設(shè)備,系統(tǒng)用另一種設(shè)備代替了用戶指定的設(shè)備。7④從設(shè)備的資源屬性分類,可以分為獨(dú)占設(shè)備、共享設(shè)備和虛擬設(shè)備SPOOLING技術(shù)系統(tǒng)采用某種I/O技術(shù)(如SPOOLING),將某個(gè)獨(dú)占設(shè)備改進(jìn)為多用戶共享的設(shè)備,以提高系統(tǒng)運(yùn)行效率和資源利用率。隨著SPOOLING技術(shù)的引入,I/O設(shè)備不再被看做僅僅是一個(gè)孤立的物理設(shè)備,而且把它們與文件系統(tǒng)聯(lián)系起來,看做是一種流式文件(數(shù)據(jù)流的I/O),建立了設(shè)備文件的概念,采用了直接I/O端口控制語句和文件操作語句來進(jìn)行I/O設(shè)備操作,使I/O設(shè)備的操作更加靈活。8SPOOLING技術(shù)85.1.2I/O設(shè)備控制與驅(qū)動(dòng)I/O設(shè)備的控制和驅(qū)動(dòng)技術(shù)包括了硬件控制驅(qū)動(dòng)技術(shù)和驅(qū)動(dòng)軟件。前者是I/O設(shè)備廠商設(shè)計(jì)建立的與設(shè)備密切相關(guān)的技術(shù),這些技術(shù)根據(jù)不同的設(shè)備依賴性很大。后者涉及系統(tǒng)所有I/O處理的軟件,通過它們完成整個(gè)I/O操作。95.1.2I/O設(shè)備控制與驅(qū)動(dòng)I/O設(shè)備的控制和驅(qū)動(dòng)技術(shù)操作系統(tǒng)中的I/O驅(qū)動(dòng)(處理)軟件一般分為幾個(gè)層次,如中斷處理程序、設(shè)備驅(qū)動(dòng)程序、操作系統(tǒng)I/O原語和用戶級軟件。中斷處理程序位于最底層,它作為系統(tǒng)和I/O操作的激勵(lì),響應(yīng)來自系統(tǒng)內(nèi)部和外部的I/O請求。設(shè)備驅(qū)動(dòng)程序處理一種設(shè)備類型或者一類密切相關(guān)的設(shè)備,程序代碼依賴于設(shè)備操作,其任務(wù)是接收來自與設(shè)備無關(guān)的上層軟件的抽象請求,確保操作的具體實(shí)施。操作系統(tǒng)I/O原語是系統(tǒng)和用戶進(jìn)程請求I/O操作的抽象的高級的操作,它們不針對某個(gè)具體設(shè)備,而在I/O處理過程中由設(shè)備控制表和設(shè)備驅(qū)動(dòng)程序轉(zhuǎn)接到物理設(shè)備。用戶級軟件是用戶程序中負(fù)責(zé)處理I/O操作的程序部分,經(jīng)編譯后產(chǎn)生對I/O的高級處理,操作再逐層下交。10操作系統(tǒng)中的I/O驅(qū)動(dòng)(處理)軟件一般分為幾個(gè)層次,如中斷處5.1.3設(shè)備管理的設(shè)計(jì)要求和任務(wù)1.設(shè)計(jì)要求第一,為用戶提供方便、統(tǒng)一的設(shè)備使用界面;第二,提高外部設(shè)備的利用率,盡量提高并行程度。第三,用戶程序應(yīng)獨(dú)立于設(shè)備,即實(shí)現(xiàn)程序與設(shè)備的無關(guān)性,當(dāng)物理設(shè)備發(fā)生意外或有更改時(shí),用戶程序不必修改,就可使用系統(tǒng)分配的其他設(shè)備115.1.3設(shè)備管理的設(shè)計(jì)要求和任務(wù)1.設(shè)計(jì)要求112.設(shè)備管理的任務(wù)為了達(dá)到上述目標(biāo),管理功能通常包括設(shè)備的配置和資源分配、設(shè)備的控制和驅(qū)動(dòng)、系統(tǒng)與設(shè)備之間的緩沖協(xié)調(diào)、設(shè)備的調(diào)度與分配等。(1)設(shè)備配置和資源分配是針對I/O設(shè)備本身的。由于系統(tǒng)要配置各種I/O設(shè)備和部件,它們都要使用一定的系統(tǒng)資源,包括I/O通道、I/O地址、I/O端口、存儲器地址、中斷請求號及DMA通道等,它們的共享在硬件和軟件上可能會(huì)產(chǎn)生沖突,必須由操作系統(tǒng)對I/O設(shè)備進(jìn)行正確的配置和分配。122.設(shè)備管理的任務(wù)12(2)設(shè)備控制和驅(qū)動(dòng)主要是按照I/O控制的方式,對不同的設(shè)備完成相應(yīng)的I/O中斷、設(shè)備控制器操作、讀寫操作等物理過程。針對不同的設(shè)備請求,通過設(shè)備處理程序或設(shè)備驅(qū)動(dòng)程序完成對設(shè)備的直接控制。(3)系統(tǒng)與設(shè)備間的協(xié)調(diào)主要是速度上的協(xié)調(diào),通常要解決快速的處理器與慢速的I/O設(shè)備之間的操作匹配的問題,在操作系統(tǒng)中采用緩沖區(qū)的方式來緩解這個(gè)矛盾,設(shè)備管理要實(shí)現(xiàn)這些緩沖區(qū)的建立、分配、釋放與回收。(4)設(shè)備調(diào)度與分配是針對兩種不同情況:對等待設(shè)備和I/O操作的進(jìn)程進(jìn)行調(diào)度;對多個(gè)進(jìn)程爭用設(shè)備進(jìn)行分配。13(2)設(shè)備控制和驅(qū)動(dòng)主要是按照I/O控制的方式,對不同的UNIX設(shè)備管理在UNIX操作系統(tǒng)中,采用比較統(tǒng)一的方法對外設(shè)進(jìn)行管理。首先將各種外部設(shè)備分成特性迥然不同的兩大類,即塊設(shè)備和字符設(shè)備;接著又把與設(shè)備物理特性密切相關(guān)的部分與設(shè)備管理的基本方式和使用的基本技術(shù)分離開來。系統(tǒng)為各個(gè)設(shè)備設(shè)置單獨(dú)的數(shù)據(jù)結(jié)構(gòu),然后用基本相同的方式和技術(shù)對同類設(shè)備的I/O操作進(jìn)行處理。14UNIX設(shè)備管理145.2操作系統(tǒng)與中斷處理中斷是參與計(jì)算機(jī)系統(tǒng)設(shè)備管理的一個(gè)重要因素和重要結(jié)構(gòu)。它是操作系統(tǒng)中與硬件最接近的一部分,是操作系統(tǒng)和硬件的界面,是由軟、硬件結(jié)合形成的一套中斷機(jī)構(gòu)實(shí)施的。155.2操作系統(tǒng)與中斷處理中斷是參與計(jì)算機(jī)系統(tǒng)設(shè)備管理的一個(gè)5.2.1中斷的基本概念當(dāng)一個(gè)正在運(yùn)行的過程被另外一個(gè)過程打斷,停止運(yùn)行過程而轉(zhuǎn)向執(zhí)行另一過程的活動(dòng)稱為中斷。中斷的過程是打斷目前正在進(jìn)行的工作,轉(zhuǎn)而處理更緊急的事務(wù),處理完成后再繼續(xù)原來的工作。計(jì)算機(jī)系統(tǒng)的中斷既來自系統(tǒng)內(nèi)部,也來自系統(tǒng)外部,分別稱為內(nèi)(部)中斷和外(部)中斷。內(nèi)部中斷是計(jì)算機(jī)系統(tǒng)本身在工作過程中出現(xiàn)的各種需要緊急處理的事務(wù),如出錯(cuò)中斷、程序中斷等,也稱為軟件中斷。內(nèi)部中斷多采用程序陷入(trap)的方式。外部中斷主要是來自I/O設(shè)備的中斷,如設(shè)備請求中斷、打印中斷、掉電中斷、數(shù)據(jù)傳輸中斷等,大部分是硬件中斷。165.2.1中斷的基本概念當(dāng)一個(gè)正在運(yùn)行的過程被另外一個(gè)過程17175.2.2中斷的類型(1)I/O中斷這是來自通道或者各種外部設(shè)備的中斷,用于反映通道或設(shè)備的工作情況。例如,打印機(jī)打印結(jié)束、磁盤傳輸完成、利用終端進(jìn)行I/O操作等,也包括外設(shè)在執(zhí)行I/O操作時(shí)出錯(cuò)而引起的中斷。185.2.2中斷的類型(1)I/O中斷18(2)時(shí)鐘中斷一類特殊的I/O完成中斷,它不一定與具體的I/O相連,既可由硬件引起,也可由軟件引起。經(jīng)由硬件定時(shí)芯片產(chǎn)生規(guī)則的時(shí)鐘間隔(時(shí)間片)或者由軟件計(jì)數(shù)產(chǎn)生的時(shí)間間隔,每一次中斷都意味著一段固定時(shí)間已到,時(shí)鐘中斷需要定時(shí)、復(fù)位和更新。19(2)時(shí)鐘中斷一類特殊的I/O完成中斷,它不一定與具體的(3)系統(tǒng)請求中斷向操作系統(tǒng)提出的請求服務(wù),是由系統(tǒng)指令產(chǎn)生的。系統(tǒng)調(diào)用指令是這一類中斷的特例。各種I/O指令,如TRAP、IOT等均可產(chǎn)生系統(tǒng)請求。該中斷把命令傳送到操作系統(tǒng),以確定一個(gè)進(jìn)程需要什么樣的服務(wù),操作系統(tǒng)對請求做出分析并提供所需要的服務(wù)。20(3)系統(tǒng)請求中斷向操作系統(tǒng)提出的請求服務(wù),是由系統(tǒng)指令產(chǎn)生(4)報(bào)警中斷一般由計(jì)算機(jī)系統(tǒng)的外部條件引起,如計(jì)算機(jī)的中斷鍵、啟動(dòng)鍵、求助鍵等,以及由外部通信信號和網(wǎng)絡(luò)傳輸信號到達(dá)產(chǎn)生的中斷。(5)程序錯(cuò)誤中斷因編程錯(cuò)誤、邏輯條件判斷或分支錯(cuò)誤、運(yùn)行參數(shù)錯(cuò)誤而產(chǎn)生的中斷。它通常會(huì)通過用戶終端或顯示器給予提示。這類中斷的類型包括:除數(shù)為零、浮點(diǎn)運(yùn)算溢出、存儲器使用無效、地址越界、使用特權(quán)或非法指令、越權(quán)訪問、錯(cuò)誤的格式化數(shù)據(jù)等21(4)報(bào)警中斷一般由計(jì)算機(jī)系統(tǒng)的外部條件引起,如計(jì)算機(jī)的中斷(6)機(jī)器錯(cuò)誤中斷對應(yīng)于系統(tǒng)硬件的錯(cuò)誤中斷。如存儲器錯(cuò)誤、I/O設(shè)備錯(cuò)誤、顯示器錯(cuò)誤、接口通道錯(cuò)誤等。一般操作系統(tǒng)只報(bào)告這些錯(cuò)誤,并終止操作。22(6)機(jī)器錯(cuò)誤中斷對應(yīng)于系統(tǒng)硬件的錯(cuò)誤中斷。如存儲器錯(cuò)誤、IUNIX中斷機(jī)構(gòu)處理一切外部設(shè)備的I/O中斷。陷入機(jī)構(gòu)處理在系統(tǒng)內(nèi)發(fā)生的需要立即干預(yù)的事件,包括使用指令的陷入(自陷)和由于軟、硬件故障或錯(cuò)誤造成的陷入。系統(tǒng)調(diào)用是UNIX操作系統(tǒng)面向在用戶態(tài)下運(yùn)行的程序的界面,在C語言和匯編語言級上都允許用戶態(tài)程序使用系統(tǒng)調(diào)用。23UNIX中斷機(jī)構(gòu)處理一切外部設(shè)備的I/O中斷。23(補(bǔ)充)系統(tǒng)調(diào)用命令操作系統(tǒng)里預(yù)先編制了很多不同功能的子程序。用戶可以在自己的程序里調(diào)用這些子程序,請求操作系統(tǒng)提供服務(wù)。這些子程序稱為“系統(tǒng)功能調(diào)用”程序。系統(tǒng)調(diào)用是操作系統(tǒng)程序模塊的一部分,它應(yīng)該在管態(tài)下執(zhí)行。不能直接被用戶程序調(diào)用,用戶程序只有通過系統(tǒng)提供的“訪管”指令,才能實(shí)現(xiàn)由目態(tài)轉(zhuǎn)為管態(tài)、進(jìn)而調(diào)用這些功能程序的目的。24(補(bǔ)充)系統(tǒng)調(diào)用命令操作系統(tǒng)里預(yù)先編制了很多不同功能的子程序訪管指令訪管指令:是一條非特權(quán)指令,功能是執(zhí)行它就會(huì)產(chǎn)生一個(gè)軟中斷,促使處理器由目態(tài)轉(zhuǎn)換到管態(tài),進(jìn)入操作系統(tǒng),并處理中斷。利用訪管指令的這種功能,編譯程序就把源程序中的系統(tǒng)調(diào)用都轉(zhuǎn)換成訪管指令,把具體的功能轉(zhuǎn)換成不同的編碼。這樣,就能使處理機(jī)執(zhí)行訪管指令由目態(tài)進(jìn)入管態(tài),再根據(jù)編碼,轉(zhuǎn)到相應(yīng)的功能處理程序去執(zhí)行。25訪管指令訪管指令:是一條非特權(quán)指令,功能是執(zhí)行它就會(huì)產(chǎn)生一個(gè)例:在c語言中,write(fd,buf,count)系統(tǒng)調(diào)用命令。C編譯程序在編譯C的源程序時(shí),總把系統(tǒng)調(diào)用命令翻譯成能夠引起軟中斷的訪管指令trap.該指令長兩個(gè)字節(jié),第一個(gè)字節(jié)為操作碼,第二個(gè)字節(jié)為系統(tǒng)調(diào)用命令的功能編碼。Trap功能碼FdBufcountTrap的16進(jìn)制操作碼89;Write的功能碼04;Write的機(jī)器指令:二進(jìn)制1000100100000100;八進(jìn)制10440426例:在c語言中,write(fd,buf,count)系統(tǒng)調(diào)Trap指令中的功能碼是用來區(qū)分不同的功能調(diào)用的。在UNIX操作系統(tǒng)中,有一張“系統(tǒng)調(diào)用程序入口地址表”。該表表目從0開始、以系統(tǒng)調(diào)用命令所對應(yīng)的功能碼為順序排列。自帶參數(shù)個(gè)數(shù)該系統(tǒng)調(diào)用處理程序的入口地址表目內(nèi)容27Trap指令中的功能碼是用來區(qū)分不同的功能調(diào)用的。自帶參數(shù)個(gè)系統(tǒng)調(diào)用處理過程語言編譯程序產(chǎn)生中斷查看入口表Write處理程序Write入口3write(fd,buf,count)104404(trap04)C語言源程序目標(biāo)程序Trap中斷處理程序34528系統(tǒng)調(diào)用處理過程語言編譯程序產(chǎn)生中斷查看入口表Write處理系統(tǒng)調(diào)用與一般過程調(diào)用的區(qū)別(1)一般過程調(diào)用,調(diào)用者與被調(diào)用者都運(yùn)行在相同的cpu狀態(tài)。但發(fā)生系統(tǒng)調(diào)用時(shí),發(fā)出調(diào)用命令的調(diào)用者運(yùn)行在目態(tài),而被調(diào)用者運(yùn)行在管態(tài)。(2)一般過程調(diào)用,是直接通過轉(zhuǎn)移指令轉(zhuǎn)向被調(diào)用程序的;但發(fā)生系統(tǒng)調(diào)用時(shí),只能通過軟中斷指令提供的一個(gè)統(tǒng)一入口,由目態(tài)進(jìn)入管態(tài),經(jīng)分析后,才轉(zhuǎn)向相應(yīng)的命令處理程序。(3)一般過程調(diào)用,在被調(diào)用者執(zhí)行完后,就徑直返回?cái)帱c(diǎn)繼續(xù)執(zhí)行;但系統(tǒng)調(diào)用可能會(huì)招致進(jìn)程狀態(tài)的變化,從而引起系統(tǒng)重新分配處理機(jī)。因此,系統(tǒng)調(diào)用結(jié)束后,不一定是返回調(diào)用者斷點(diǎn)處繼續(xù)執(zhí)行。29系統(tǒng)調(diào)用與一般過程調(diào)用的區(qū)別(1)一般過程調(diào)用,調(diào)用者與被調(diào)1.與進(jìn)程管理和控制有關(guān)的系統(tǒng)調(diào)用屬于這一類的有21種?!M(jìn)程的創(chuàng)建和消亡:fork、exit。進(jìn)程間的同步:wait、pause等。2.與文件系統(tǒng)有關(guān)的系統(tǒng)調(diào)用屬于這一類的有28種?!募珊腿∠篶reat、unlink。文件打開、關(guān)閉及控制:open、close、fcntl。UNIXSVR4提供了53種系統(tǒng)調(diào)用,它們大致可分為3類。301.與進(jìn)程管理和控制有關(guān)的系統(tǒng)調(diào)用屬于這一類的有21種。2.3.其他系統(tǒng)調(diào)用屬于這一類的有4種?!O(shè)置和獲得系統(tǒng)或進(jìn)程時(shí)間:stime、time、times?!谥付〞r(shí)間后發(fā)告警信號:alarm313.其他系統(tǒng)調(diào)用屬于這一類的有4種。315.2.3中斷的響應(yīng)和實(shí)現(xiàn)過程中斷是在中斷控制機(jī)構(gòu)的管理下實(shí)現(xiàn)的。設(shè)備提出的中斷請求信號由中斷控制機(jī)構(gòu)響應(yīng),然后予以實(shí)施。中斷控制機(jī)構(gòu)的主要功能如下。①記錄各中斷源的中斷請求信號,以便于分別處理。②在CPU硬件中,每當(dāng)執(zhí)行完一條指令,或開始取一條指令前,檢測有無中斷請求,若有則硬件自動(dòng)轉(zhuǎn)入中斷處理周期。325.2.3中斷的響應(yīng)和實(shí)現(xiàn)過程中斷是在中斷控制機(jī)構(gòu)的管理下③系統(tǒng)對不同的中斷類型規(guī)定了不同的優(yōu)先級,當(dāng)同時(shí)存在多個(gè)中斷請求時(shí),選優(yōu)先級最高的予以響應(yīng)。如果兩個(gè)中斷的優(yōu)先級相等,將按照一定算法,如先來先服務(wù)(FIFO)等進(jìn)行處理。優(yōu)先級機(jī)制可能使中斷服務(wù)形成嵌套,即優(yōu)先級低的中斷處理程序的執(zhí)行會(huì)被優(yōu)先級高的中斷打斷,從而又調(diào)用了另一個(gè)處理程序。在有的操作系統(tǒng)(如實(shí)時(shí)系統(tǒng))中是不允許中斷嵌套的。33③系統(tǒng)對不同的中斷類型規(guī)定了不同的優(yōu)先級,當(dāng)同時(shí)存在多個(gè)中④響應(yīng)中斷后,根據(jù)中斷源找出相應(yīng)的中斷處理程序入口地址,以便轉(zhuǎn)去執(zhí)行。如何轉(zhuǎn)入相應(yīng)的中斷處理程序,目前常用的結(jié)構(gòu)是中斷矢量(interruptvector)結(jié)構(gòu)。中斷矢量結(jié)構(gòu)是一類地址指針的集合,在主存中開辟了一個(gè)特殊的存儲區(qū)域來存放這種結(jié)構(gòu),其中的某一個(gè)或者幾個(gè)存儲單元存放一個(gè)指向中斷處理程序的地址,它被稱為中斷矢量。一個(gè)中斷發(fā)生,總可以在固定的位置找到這個(gè)指針,再根據(jù)指針?biāo)傅奈恢茫粗羔樀膬?nèi)容)獲得相應(yīng)的處理程序或者驅(qū)動(dòng)程序入口地址。34④響應(yīng)中斷后,根據(jù)中斷源找出相應(yīng)的中斷處理程序入口地址,以⑤保護(hù)現(xiàn)場,以便中斷返回時(shí)可以在斷點(diǎn)處繼續(xù)執(zhí)行。中斷現(xiàn)場主要指:相應(yīng)中斷時(shí)指令計(jì)數(shù)器PC的內(nèi)容(即下一條指令的地址,也稱為斷點(diǎn));進(jìn)程運(yùn)行參數(shù)和條件;現(xiàn)運(yùn)行程序狀態(tài)寄存器PS的內(nèi)容以及累加器或通用寄存器的內(nèi)容和標(biāo)記,有的計(jì)算機(jī)也把PC和PS合起來統(tǒng)稱為程序狀態(tài)字PSW?,F(xiàn)場保護(hù)是把它們保存到主存中的特殊區(qū)域(一般是堆棧)中,并保證中斷過程中原有現(xiàn)場不做任何改變。35⑤保護(hù)現(xiàn)場,以便中斷返回時(shí)可以在斷點(diǎn)處繼續(xù)執(zhí)行。35⑥當(dāng)正在進(jìn)行某一中斷處理時(shí),或在執(zhí)行程序的某些階段,有時(shí)不允許響應(yīng)某些中斷,所以應(yīng)該在程序控制下,禁止響應(yīng)某些中斷,即屏蔽這些中斷。當(dāng)不需要屏蔽時(shí),又能及時(shí)在程序控制下撤銷屏蔽。在實(shí)時(shí)系統(tǒng)中中斷屏蔽必須小型化,并且嚴(yán)格限制中斷處理程序的執(zhí)行時(shí)間。36⑥當(dāng)正在進(jìn)行某一中斷處理時(shí),或在執(zhí)行程序的某些階段,有時(shí)不5.2.4中斷處理程序和驅(qū)動(dòng)程序中斷處理程序也叫做中斷服務(wù)程序,它是與設(shè)備硬件密切相關(guān)的處理程序,一般情況下,處理設(shè)備的各個(gè)I/O操作的細(xì)節(jié)是采用匯編語言和機(jī)器語言編寫。為了將這種與設(shè)備有關(guān)的程序?qū)τ脩敉该?,使用戶不必去了解每一種設(shè)備操作的具體細(xì)節(jié),通常采用統(tǒng)一的簡單方式,如上述的中斷矢量方式來進(jìn)行。375.2.4中斷處理程序和驅(qū)動(dòng)程序中斷處理程序也叫做中斷服務(wù)在微型機(jī)和個(gè)人計(jì)算機(jī)中,常常把I/O中斷處理程序以設(shè)備驅(qū)動(dòng)程序的方式作為操作系統(tǒng)設(shè)備管理和控制的依據(jù),用戶采用一種通用的界面和操作來使用這些設(shè)備。例如,UNIX和DOS操作系統(tǒng)中都把設(shè)備作為一種虛擬的文件對待,每個(gè)設(shè)備有一個(gè)像文件名那樣的名字,并對它像一個(gè)文件那樣存取。設(shè)備驅(qū)動(dòng)程序被作為一種特殊的文件存放在系統(tǒng)輔助存儲設(shè)備(如磁盤)中,在需要時(shí)由操作系統(tǒng)裝入使用。38在微型機(jī)和個(gè)人計(jì)算機(jī)中,常常把I/O中斷處理程序以設(shè)備驅(qū)動(dòng)在操作系統(tǒng)設(shè)計(jì)時(shí),考慮了所有可能與計(jì)算機(jī)系統(tǒng)配置的設(shè)備,所有設(shè)備的驅(qū)動(dòng)程序隨操作系統(tǒng)軟件一起提供給用戶,用戶在安裝操作系統(tǒng)時(shí),根據(jù)當(dāng)時(shí)配置的I/O設(shè)備情況,調(diào)入相應(yīng)的設(shè)備驅(qū)動(dòng)程序文件,將它們設(shè)置并嵌入操作系統(tǒng)中,做好系統(tǒng)運(yùn)行操作的環(huán)境準(zhǔn)備。如果操作系統(tǒng)的設(shè)備配置有變化,則需要重新引導(dǎo)或者重新配置安裝操作系統(tǒng)。39在操作系統(tǒng)設(shè)計(jì)時(shí),考慮了所有可能與計(jì)算機(jī)系統(tǒng)配置的設(shè)備,所有在UNIX系統(tǒng)中,將設(shè)備分成兩類:塊設(shè)備和字符設(shè)備。核心與驅(qū)動(dòng)程序的接口是由塊設(shè)備開關(guān)表和字符設(shè)備開關(guān)表描述的.40在UNIX系統(tǒng)中,將設(shè)備分成兩類:塊設(shè)備和字符設(shè)備。核心與驅(qū)5.2.5中斷的返回與恢復(fù)當(dāng)中斷請求操作完成時(shí),系統(tǒng)必須返回被中斷的程序。此時(shí),必須將中斷開始保存下來的原來程序的狀態(tài)、寄存器內(nèi)容和標(biāo)記、進(jìn)程運(yùn)行參數(shù)和條件等一一恢復(fù),復(fù)原到中斷未出現(xiàn)時(shí)的狀態(tài),稱為現(xiàn)場恢復(fù)。415.2.5中斷的返回與恢復(fù)當(dāng)中斷請求操作完成時(shí),系統(tǒng)必須返UNIX操作系統(tǒng)中,中斷處理都是在核心態(tài)下進(jìn)行的。如果中斷前處理機(jī)狀態(tài)為核心態(tài),則在執(zhí)行完設(shè)備處理子程序后就恢復(fù)現(xiàn)場,然后用中斷返回指令回到中斷前狀態(tài),繼續(xù)執(zhí)行被中斷的操作系統(tǒng)程序。如果中斷前為用戶態(tài),則在執(zhí)行完設(shè)備處理子程序后,先要檢查重新調(diào)度標(biāo)志runrun是否設(shè)置。如若已經(jīng)設(shè)置,則調(diào)用進(jìn)程切換調(diào)度程序進(jìn)行進(jìn)程調(diào)度,中斷時(shí)被保護(hù)的現(xiàn)場就不必立即恢復(fù)。如果runrun標(biāo)志沒有設(shè)置,則恢復(fù)保護(hù)在堆棧中的現(xiàn)場,繼續(xù)在用戶態(tài)下執(zhí)行被中斷的程序。42UNIX操作系統(tǒng)中,中斷處理都是在核心態(tài)下進(jìn)行的。425.4操作系統(tǒng)對I/O操作的控制外圍設(shè)備與內(nèi)存或CPU間常用的數(shù)據(jù)傳送控制方式:程序循環(huán)測試方式中斷控制方式直接存儲器存?。―MA)方式通道方式435.4操作系統(tǒng)對I/O操作的控制1.程序I/O方式等待發(fā)Start指令Test測試,設(shè)備標(biāo)志觸發(fā)器為“Done”?CPU執(zhí)行下一條指令開始數(shù)據(jù)傳送否是外圍設(shè)備接收到Start指令作接收或發(fā)送數(shù)據(jù)準(zhǔn)備準(zhǔn)備好?標(biāo)志觸發(fā)器置為“Done”等待CPU來的下一條指令是否441.程序I/O方式等待發(fā)Start指令Test測試,設(shè)備程序I/O方式在程序I/O方式中,由于CPU的高速性和I/O設(shè)備的低速性,致使CPU的絕大部分時(shí)間都處于等待I/O設(shè)備完成數(shù)據(jù)I/O的循環(huán)測試中,造成對CPU的極大浪費(fèi)。在該方式中,CPU之所以要不斷地測試I/O設(shè)備的狀態(tài),就是因?yàn)樵贑PU中無中斷機(jī)構(gòu),使I/O設(shè)備無法向CPU報(bào)告它已完成了一個(gè)字符的輸入操作。45程序I/O方式在程序I/O方式中,由于CP2.中斷驅(qū)動(dòng)I/O控制方式I/O操作由程序發(fā)起,在操作完成時(shí)(如數(shù)據(jù)可讀或已經(jīng)寫入)由外設(shè)向CPU發(fā)出中斷,通知該程序。數(shù)據(jù)的每次讀寫通過CPU。硬件要求:
要在CPU與控制器之間連有中斷請求線路;
要在設(shè)備控制器的狀態(tài)寄存器中增設(shè)“中斷允許位”462.中斷驅(qū)動(dòng)I/O控制方式I/O操作由程序發(fā)起,在操作完數(shù)據(jù)傳輸?shù)牟襟E通過CPU發(fā)出start指令。啟動(dòng)設(shè)備,將中斷允許位加以設(shè)置發(fā)出I/O請求的進(jìn)程由運(yùn)行狀態(tài)改變?yōu)樽枞麪顟B(tài),等待輸入/輸出的完成。輸入/輸出完成時(shí),設(shè)備控制器通過中斷請求線向CPU發(fā)出中斷請求信號。CPU響應(yīng)該中斷后,就轉(zhuǎn)向中斷處理程序,對數(shù)據(jù)的傳輸工作進(jìn)行相應(yīng)的處理。輸入/輸出請求全部完成后,進(jìn)程被解除阻塞,改變狀態(tài)為“就緒態(tài)”,以便進(jìn)入它的下一步工作。47數(shù)據(jù)傳輸?shù)牟襟E通過CPU發(fā)出start指令。啟動(dòng)設(shè)備,將中斷中斷控制方式的處理過程接收到CPU發(fā)來的Start指令緩沖寄存器滿?設(shè)備控制器發(fā)中斷信號是準(zhǔn)備數(shù)據(jù)并將其置入緩沖寄存器否CPU調(diào)度程序調(diào)度其它進(jìn)程收到中斷信號了嗎?中斷處理被中斷進(jìn)程執(zhí)行是否向設(shè)備發(fā)Start指令,置中斷允許位為“1”其它進(jìn)程執(zhí)行48中斷控制方式的處理過程接收到CPU發(fā)來的Start指令緩沖寄在I/O設(shè)備輸入每個(gè)數(shù)據(jù)的過程中,由于無須CPU干預(yù),因而可使CPU與I/O設(shè)備并行工作。僅當(dāng)輸完一個(gè)數(shù)據(jù)時(shí),才需CPU花費(fèi)極短的時(shí)間去做些中斷處理。可見,這樣可使CPU和I/O設(shè)備都處于忙碌狀態(tài),從而提高了整個(gè)系統(tǒng)的資源利用率及吞吐量。例如,從終端輸入一個(gè)字符的時(shí)間約為100ms,而將字符送入終端緩沖區(qū)的時(shí)間小于0.1ms。若采用程序I/O方式,CPU約有99.9ms的時(shí)間處于忙—等待中。采用中斷驅(qū)動(dòng)方式后,CPU可利用這99.9ms的時(shí)間去做其它事情,而僅用0.1ms的時(shí)間來處理由控制器發(fā)來的中斷請求??梢?,中斷驅(qū)動(dòng)方式可以成百倍地提高CPU的利用率。49在I/O設(shè)備輸入每個(gè)數(shù)據(jù)的過程中,由于無須CP3.直接存儲器訪問DMAI/O控制方式1)DMA(DirectMemoryAccess)控制方式的引入該方式的特點(diǎn)是:①數(shù)據(jù)傳輸?shù)幕締挝皇菙?shù)據(jù)塊,即在CPU與I/O設(shè)備之間,每次傳送至少一個(gè)數(shù)據(jù)塊;②所傳送的數(shù)據(jù)是從設(shè)備直接送入內(nèi)存的,或者相反;③僅在傳送一個(gè)或多個(gè)數(shù)據(jù)塊的開始和結(jié)束時(shí),才需CPU干預(yù),整塊數(shù)據(jù)的傳送是在控制器的控制下完成的??梢?,DMA方式較之中斷驅(qū)動(dòng)方式,又是成百倍地減少了CPU對I/O的干預(yù),進(jìn)一步提高了CPU與I/O設(shè)備的并行操作程度。503.直接存儲器訪問DMAI/O控制方式1)DMA(D2).DMA控制器的組成512).DMA控制器的組成51為了實(shí)現(xiàn)在主機(jī)與控制器之間成塊數(shù)據(jù)的直接交換,必須在DMA控制器中設(shè)置如下四類寄存器:(1)命令/狀態(tài)寄存器CR。用于接收從CPU發(fā)來的I/O命令或有關(guān)控制信息,或設(shè)備的狀態(tài)。(2)內(nèi)存地址寄存器MAR。在輸入時(shí),它存放把數(shù)據(jù)從設(shè)備傳送到內(nèi)存的起始目標(biāo)地址;在輸出時(shí),它存放由內(nèi)存到設(shè)備的內(nèi)存源地址。(3)數(shù)據(jù)寄存器DR。用于暫存從設(shè)備到內(nèi)存,或從內(nèi)存到設(shè)備的數(shù)據(jù)。(4)數(shù)據(jù)計(jì)數(shù)器DC。存放本次CPU要讀或?qū)懙淖?節(jié))數(shù)。52為了實(shí)現(xiàn)在主機(jī)與控制器之間成塊數(shù)據(jù)的直接交換,當(dāng)進(jìn)程要求輸入數(shù)據(jù)時(shí),CPU將準(zhǔn)備存放輸入數(shù)據(jù)的內(nèi)存起始地址、要傳送的字節(jié)數(shù)送入DMA控制器的內(nèi)存地址寄存器和傳送字節(jié)計(jì)數(shù)器,將中斷允許位和啟動(dòng)位置成1,啟動(dòng)設(shè)備。CPU將總線讓給DMA控制器,在DMA控制器進(jìn)行數(shù)據(jù)傳輸期間,CPU不再使用總線,而是DMA控制器獲得總線控制權(quán)。發(fā)出傳輸要求的進(jìn)程進(jìn)入等待狀態(tài),執(zhí)行指令被暫時(shí)掛起,進(jìn)程調(diào)度其他進(jìn)程占據(jù)CPUDMA工作原理53當(dāng)進(jìn)程要求輸入數(shù)據(jù)時(shí),CPU將準(zhǔn)備存放輸入數(shù)據(jù)的內(nèi)存起始地址DMA控制器按照地址寄存器的指示,不斷與內(nèi)存儲器進(jìn)行直接的數(shù)據(jù)傳輸,并隨時(shí)修改地址寄存器和字節(jié)計(jì)數(shù)器的值。輸入設(shè)備不斷竊取CPU工作周期,數(shù)據(jù)不斷寫入內(nèi)存?zhèn)魉屯戤叄l(fā)出中斷信號CPU接到中斷信號轉(zhuǎn)入中斷處理程序處理中斷處理結(jié)束,CPU返回原進(jìn)程或切換到新的進(jìn)程DMA工作原理54DMA控制器按照地址寄存器的指示,不斷與內(nèi)存儲器進(jìn)行直接的數(shù)DMA方式的工作流程設(shè)置MAR和DC初值啟動(dòng)DMA傳送命令挪用存儲器周期傳送數(shù)據(jù)字存儲器地址增1字計(jì)數(shù)寄存器減1DC=0?請求中斷在繼續(xù)執(zhí)行用戶程序的同時(shí),準(zhǔn)備又一次傳送55DMA方式的工作流程設(shè)置MAR和DC初值啟動(dòng)DMA傳送命令挪DMA方式與中斷方式的主要區(qū)別中斷方式是在數(shù)據(jù)緩沖寄存器滿后,發(fā)中斷請求,CPU進(jìn)行中斷處理;DMA方式則是在所要求傳送的數(shù)據(jù)塊全部傳送結(jié)束時(shí)要求CPU進(jìn)行中斷處理大大減少了CPU進(jìn)行中斷處理的次數(shù)中斷方式的數(shù)據(jù)傳送是由CPU控制完成的而DMA方式則是在DMA控制器的控制下不經(jīng)過CPU控制完成的,因此避免了因速度不匹配而造成數(shù)據(jù)丟失的現(xiàn)象。(DMA硬件比較復(fù)雜)56DMA方式與中斷方式的主要區(qū)別中斷方式是在數(shù)據(jù)緩沖寄存器滿后4.I/O通道控制方式1)I/O通道控制方式的引入I/O通道方式是DMA方式的發(fā)展,它可進(jìn)一步減少CPU的干預(yù),即把對一個(gè)數(shù)據(jù)塊的讀(或?qū)?為單位的干預(yù),減少為對一組數(shù)據(jù)塊的讀(或?qū)?及有關(guān)的控制和管理為單位的干預(yù)。同時(shí),又可實(shí)現(xiàn)CPU、通道和I/O設(shè)備三者的并行操作,從而更有效地提高整個(gè)系統(tǒng)的資源利用率。例如,當(dāng)CPU要完成一組相關(guān)的讀(或?qū)?操作及有關(guān)控制時(shí),只需向I/O通道發(fā)送一條I/O指令,以給出其所要執(zhí)行的通道程序的首址和要訪問的I/O設(shè)備,通道接到該指令后,通過執(zhí)行通道程序便可完成CPU指定的I/O任務(wù)。574.I/O通道控制方式1)I/O通道控制方式的引入5.4.1I/O設(shè)備的資源分配計(jì)算機(jī)系統(tǒng)的各類I/O設(shè)備及其控制部件具有不同的連接方式和接口,需要使用和占據(jù)系統(tǒng)的某些資源,這些資源是I/O設(shè)備正常工作必不可少的,也是由設(shè)備所共享的。操作系統(tǒng)應(yīng)當(dāng)檢測和確認(rèn)哪些I/O設(shè)備使用哪些系統(tǒng)資源,如何分配協(xié)調(diào)這些資源以避免沖突。下面介紹這些資源的含義。585.4.1I/O設(shè)備的資源分配計(jì)算機(jī)系統(tǒng)的各類I/O設(shè)備1.I/O地址I/O地址是I/O設(shè)備或控制卡所在的位置,處理器通過這個(gè)地址找到對應(yīng)的I/O部件和設(shè)備寄存器,并對它進(jìn)行控制和數(shù)據(jù)傳輸操作。由于很多設(shè)備共享某個(gè)I/O地址,這樣就會(huì)產(chǎn)生I/O地址沖突。因此,需要在系統(tǒng)啟動(dòng)時(shí)進(jìn)行正確的I/O地址設(shè)置,或者在應(yīng)用軟件運(yùn)行時(shí)進(jìn)行I/O地址的重新設(shè)置591.I/O地址I/O地址是I/O設(shè)備或控制卡所在的位2.I/O中斷請求每個(gè)I/O設(shè)備在工作過程中都會(huì)向處理器發(fā)出各種I/O中斷請求,例如數(shù)據(jù)就緒、數(shù)據(jù)到達(dá)、發(fā)送結(jié)束、紙張用完、操做出錯(cuò)等。處理器接收這些I/O請求后將轉(zhuǎn)入I/O中斷處理程序,完成相應(yīng)的I/O處理。然而,系統(tǒng)擁有的I/O中斷請求號是有限的,其中一些已經(jīng)用于系統(tǒng)的標(biāo)準(zhǔn)功能性中斷,如時(shí)鐘中斷、除零中斷、系統(tǒng)異常中斷等。I/O設(shè)備可能爭用剩余的中斷請求,也會(huì)產(chǎn)生沖突。因此,這也是I/O資源分配的重要問題。602.I/O中斷請求每個(gè)I/O設(shè)備在工作過程中都會(huì)向處理3.DMA數(shù)據(jù)傳輸通道直接存儲器訪問(DMA)通道提供了I/O設(shè)備與系統(tǒng)間有效的數(shù)據(jù)傳輸機(jī)制,在設(shè)備與主存儲器之間進(jìn)行直接的數(shù)據(jù)傳輸,而無需處理器干預(yù)。由硬件組成的DMA通道數(shù)是有限的,對爭用同一個(gè)DMA通道的I/O設(shè)備需要進(jìn)行協(xié)調(diào)和重新配置。613.DMA數(shù)據(jù)傳輸通道直接存儲器訪問(DMA)通道提供了I4.I/O緩沖區(qū)輸入輸出緩沖區(qū)是為了加快I/O設(shè)備的數(shù)據(jù)傳輸、協(xié)調(diào)快速處理器和慢速設(shè)備間的一個(gè)有效機(jī)制。緩沖區(qū)的設(shè)置要占用主存儲器一定的空間,各種I/O設(shè)備開設(shè)的緩沖區(qū)的大小和位置可能不一樣,也可能一樣,這個(gè)系統(tǒng)資源也是I/O設(shè)備爭用的。系統(tǒng)必須保證各個(gè)I/O設(shè)備開辟的緩沖區(qū)不相互沖突,并不影響主存儲器的使用。624.I/O緩沖區(qū)輸入輸出緩沖區(qū)是為了加快I/O設(shè)備的數(shù)據(jù)5.4.2I/O通道技術(shù)I/O通道是一種硬件設(shè)施,帶有專用處理器的、有很強(qiáng)I/O處理功能的智能部件,它可以獨(dú)立地完成系統(tǒng)處理器交付的I/O操作任務(wù),此時(shí),I/O總線直接與通道相連而不與處理器相連。通道具有自己專門的指令集,即通道指令,用于與連接到總線上的I/O控制器通信,在設(shè)備與存儲器之間傳送數(shù)據(jù)。采用這種方式,系統(tǒng)主處理器只需進(jìn)行I/O操作的委托,其后的所有I/O操作均由通道自己進(jìn)行。通道執(zhí)行來自主處理器的通道程序,完成后只需向系統(tǒng)處理器發(fā)出中斷,請求結(jié)束。可見,這種方式可以形成系統(tǒng)處理器與I/O設(shè)備之間的并行操作。635.4.2I/O通道技術(shù)I/O通道是一種硬件設(shè)施,帶有I/O設(shè)備與系統(tǒng)的數(shù)據(jù)交換通常采用程序查詢、I/O中斷和直接存儲器存?。―MA)的方式,這3種控制方式也同樣適用于通道機(jī)制。根據(jù)信息交換方式,通道可以分成3種類型:字節(jié)多路通道、數(shù)據(jù)選擇通道和成組多路通道。64I/O設(shè)備與系統(tǒng)的數(shù)據(jù)交換通常采用程序查詢、I/O中斷和通道類型1)字節(jié)多路通道(ByteMultiplexorChannel)這是一種按字節(jié)交叉方式工作的通道。它通常都含有許多非分配型子通道,其數(shù)量可從幾十個(gè)到數(shù)百個(gè),每一個(gè)子通道連接一臺I/O設(shè)備,并控制該設(shè)備的I/O操作。這些子通道按時(shí)間片輪轉(zhuǎn)方式共享主通道。這樣,只要字節(jié)多路通道掃描每個(gè)子通道的速率足夠快,而連接到子通道上的設(shè)備的速率不是太高時(shí),便不致于丟失信息。65通道類型1)字節(jié)多路通道(ByteMultiplexo66662)數(shù)據(jù)選擇通道(BlockSelectorChannel)字節(jié)多路通道不適于連接高速設(shè)備,這推動(dòng)了按數(shù)組方式進(jìn)行數(shù)據(jù)傳送的數(shù)據(jù)選擇通道的形成。這種通道雖然可以連接多臺高速設(shè)備,但由于它只含有一個(gè)分配型子通道,在一段時(shí)間內(nèi)只能執(zhí)行一道通道程序,控制一臺設(shè)備進(jìn)行數(shù)據(jù)傳送,致使當(dāng)某臺設(shè)備占用了該通道后,便一直由它獨(dú)占,即使是它無數(shù)據(jù)傳送,通道被閑置,也不允許其它設(shè)備使用該通道,直至該設(shè)備傳送完畢釋放該通道。可見,這種通道的利用率很低。672)數(shù)據(jù)選擇通道(BlockSelectorChann3)成組多路通道(BlockMultiplexorChannel)數(shù)據(jù)選擇通道雖有很高的傳輸速率,但它卻每次只允許一個(gè)設(shè)備傳輸數(shù)據(jù)。成組多路通道是將數(shù)據(jù)選擇通道傳輸速率高和字節(jié)多路通道能使各子通道(設(shè)備)分時(shí)并行操作的優(yōu)點(diǎn)相結(jié)合而形成的一種新通道。它含有多個(gè)非分配型子通道,先為一臺設(shè)備執(zhí)行一條通道指令,然后自動(dòng)轉(zhuǎn)接,為另一臺設(shè)備執(zhí)行一條通道指令。因而這種通道既具有很高的數(shù)據(jù)傳輸速率,又能獲得令人滿意的通道利用率。也正因此,才使該通道能被廣泛地用于連接多臺高、中速的外圍設(shè)備,其數(shù)據(jù)傳送是按數(shù)組方式進(jìn)行的。683)成組多路通道(BlockMultip5.4.3I/O緩沖技術(shù)提高中央處理器與外設(shè)的并行程度的另一項(xiàng)技術(shù)措施是緩沖技術(shù)。減少了I/O設(shè)備對處理器的中斷請求次數(shù);簡化了中斷機(jī)制;節(jié)省了系統(tǒng)開銷;提高了處理機(jī)與外設(shè)的并行程度695.4.3I/O緩沖技術(shù)提高中央處理器與外設(shè)的并行程度的另圖利用緩沖寄存器實(shí)現(xiàn)緩沖70圖利用緩沖寄存器實(shí)現(xiàn)緩沖705.4.3I/O緩沖技術(shù)緩沖技術(shù)可以采用硬件緩沖和軟件緩沖兩種方式。硬件緩沖是利用專門的硬件寄存器作為緩沖器。而軟件緩沖是借助操作系統(tǒng)的管理,采用內(nèi)存中的一個(gè)或者多個(gè)區(qū)域作為緩沖區(qū)。目前采用最多的是軟件緩沖,它由緩沖區(qū)和對緩沖區(qū)的管理兩部分組成。軟件緩沖可以改變緩沖區(qū)的大小和數(shù)量,但也占據(jù)了一定的存儲空間。715.4.3I/O緩沖技術(shù)緩沖技術(shù)可以采用硬件緩沖和軟件緩沖5.4.4設(shè)備的驅(qū)動(dòng)為了將設(shè)備的硬件復(fù)雜性與用戶隔離,也為了建立一種通用的I/O接口,操作系統(tǒng)采用設(shè)備驅(qū)動(dòng)程序來完成設(shè)備的驅(qū)動(dòng)。設(shè)備驅(qū)動(dòng)程序常用匯編語言編寫,它向上與高級I/O操作系統(tǒng)調(diào)用相對應(yīng),向下與I/O硬件設(shè)備相對應(yīng),完成兩者間的相互通信。一般每一類設(shè)備有一個(gè)相應(yīng)的驅(qū)動(dòng)程序,能控制同一類中多臺設(shè)備的工作。每個(gè)設(shè)備生產(chǎn)廠商和軟件開發(fā)商都必須按照設(shè)備驅(qū)動(dòng)程序的標(biāo)準(zhǔn)結(jié)構(gòu)編寫?yīng)毩⒌脑O(shè)備驅(qū)動(dòng)程序,當(dāng)系統(tǒng)需要時(shí),再將它安裝配置到系統(tǒng)中。725.4.4設(shè)備的驅(qū)動(dòng)為了將設(shè)備的硬件復(fù)雜性與用戶隔離,也為5.4.4設(shè)備的驅(qū)動(dòng)目前,設(shè)備驅(qū)動(dòng)程序是作為操作系統(tǒng)所提供的選擇項(xiàng),用戶可以根據(jù)需要配置設(shè)備,靈活地選擇、裝載、卸載驅(qū)動(dòng)程序,從而極大地增強(qiáng)了系統(tǒng)的開放性和可擴(kuò)展性。設(shè)備驅(qū)動(dòng)程序一般不由用戶執(zhí)行,也不能被用戶進(jìn)程直接執(zhí)行,只能通過I/O請求和調(diào)用方式,由系統(tǒng)或者I/O處理器執(zhí)行。735.4.4設(shè)備的驅(qū)動(dòng)目前,設(shè)備驅(qū)動(dòng)程序是作為操作系統(tǒng)所提供5.5設(shè)備管理的數(shù)據(jù)結(jié)構(gòu)操作系統(tǒng)提供了若干高級I/O系統(tǒng)調(diào)用,它包含了對I/O設(shè)備的操作請求、響應(yīng)、處理、控制、緩沖、恢復(fù)等,從而用這些抽象的I/O操作把用戶與復(fù)雜的I/O設(shè)備操作隔離開來。將抽象的I/O操作映射到專門的設(shè)備驅(qū)動(dòng)程序,由此隱藏設(shè)備操作細(xì)節(jié),有利于編寫與設(shè)備無關(guān)的程序。要完成抽象到實(shí)際的映射,操作系統(tǒng)通常采用一個(gè)數(shù)據(jù)結(jié)構(gòu)來完成,稱為設(shè)備控制表(DCT),簡稱設(shè)備表。它記錄每一個(gè)抽象設(shè)備描述、對應(yīng)的實(shí)際設(shè)備的地址和所使用的設(shè)備驅(qū)動(dòng)程序等參數(shù)。用戶和進(jìn)程對設(shè)備的調(diào)用通過設(shè)備表映射到物理設(shè)備,使I/O操作與設(shè)備無關(guān),與硬件接口和硬件地址無關(guān)。5.5.1設(shè)備控制表745.5設(shè)備管理的數(shù)據(jù)結(jié)構(gòu)操作系統(tǒng)提供了若干高級I/O系統(tǒng)調(diào)設(shè)備表設(shè)備表有多個(gè)表項(xiàng),每個(gè)表項(xiàng)對應(yīng)一個(gè)設(shè)備;表項(xiàng)的內(nèi)容包括設(shè)備標(biāo)識符、設(shè)備地址、設(shè)備屬性、設(shè)備狀態(tài)、設(shè)備驅(qū)動(dòng)程序地址、設(shè)備等待隊(duì)列指針等。圖5-4給出了設(shè)備表的一個(gè)簡單示例。表中包含了若干抽象的I/O操作系統(tǒng)調(diào)用,每個(gè)調(diào)用以函數(shù)指針的形式映射到實(shí)際的I/O處理程序,再經(jīng)過對應(yīng)的設(shè)備驅(qū)動(dòng)程序?qū)ξ锢碓O(shè)備進(jìn)行操作。75設(shè)備表設(shè)備表有多個(gè)表項(xiàng),每個(gè)表項(xiàng)對應(yīng)一個(gè)設(shè)備;表項(xiàng)的內(nèi)容包括7676Structdevtab{ intdvid; intdvadd; int*dvec; int*dvbuf; int*dvque; int(*dvinit)(); int(*dvopen)(); int(*dvclose)(); int(*dvread)(); int(*dvwrite)(); int(*dvseek)(); int(*dvcntl)(); int(*dvgetc)(); int(*dvputc)();}dct[];77Structdevtab{77設(shè)備讀read抽象操作read(dvcrp,buf,size)/*系統(tǒng)調(diào)用接收3個(gè)傳遞來的參數(shù)*/intdvcrp,size;/*參數(shù)為設(shè)備標(biāo)識符、數(shù)據(jù)塊大小和緩沖區(qū)指針char*buf;{structdevtab*devptr;/*定義一個(gè)指向設(shè)備表的指針*/
if(isbaddev(dvcrp))/*確認(rèn)設(shè)備標(biāo)識符是否有效*/
return(SYSERR);/*無效,系統(tǒng)返回出錯(cuò)*/devptr=&dct[dvcrp];/*有效,找到對應(yīng)的設(shè)備表項(xiàng)*/
return((*devptr->dvread)(devptr,buf,size));/*將參數(shù)傳向設(shè)備驅(qū)動(dòng)程序并返回*/}78設(shè)備讀read抽象操作read(dvcrp,buf,size5.5.2設(shè)備開關(guān)表針對各類設(shè)備不同的物理特性,系統(tǒng)為它們各自設(shè)置了一套子程序,它們包括打開、關(guān)閉和啟動(dòng)子程序。系統(tǒng)為每類設(shè)備又設(shè)置了一數(shù)據(jù)結(jié)構(gòu),存放這些程序的入口地址,該數(shù)據(jù)結(jié)構(gòu)稱為設(shè)備開關(guān)。各類設(shè)備的開關(guān)構(gòu)成設(shè)備開關(guān)表。為使設(shè)備開關(guān)表與設(shè)備控制表建立聯(lián)系,在設(shè)備開關(guān)表中還設(shè)立了該設(shè)備的控制表指針或設(shè)備控制表在系統(tǒng)中的編號,即設(shè)備號。795.5.2設(shè)備開關(guān)表針對各類設(shè)備不同的物理特性,系統(tǒng)為它們5.6磁盤調(diào)度磁盤的特點(diǎn)是存儲容量大,存取速度快,并且能夠順序或隨機(jī)存取。磁盤系統(tǒng)硬件可分為兩大部分:一部分是磁盤驅(qū)動(dòng)器,它是機(jī)械部分,包括驅(qū)動(dòng)電機(jī)、讀/寫磁頭和相應(yīng)的邏輯電路;另一部分是磁盤控制器,實(shí)現(xiàn)與計(jì)算機(jī)的邏輯接口。磁盤控制器接收來自CPU的指令,命令盤驅(qū)動(dòng)器執(zhí)行該指令。這樣,一個(gè)磁盤控制器就可以控制多個(gè)磁盤驅(qū)動(dòng)器的工作805.6磁盤調(diào)度磁盤的特點(diǎn)是存儲容量大,存取速度快,并且能磁盤結(jié)構(gòu)示意圖每個(gè)盤片有正反兩個(gè)盤面,若干個(gè)盤片組成一個(gè)磁盤組。每個(gè)盤面有一個(gè)讀寫磁頭,所有的讀寫磁頭被固定在移動(dòng)臂上,同時(shí)進(jìn)行內(nèi)、外的運(yùn)動(dòng)。81磁盤結(jié)構(gòu)示意圖每個(gè)盤片有正反兩個(gè)盤面,若干個(gè)盤片組成一個(gè)磁盤硬盤俯視圖82硬盤俯視圖82硬盤的磁頭臂83硬盤的磁頭臂83數(shù)據(jù)的組織和格式磁盤設(shè)備可包括一或多個(gè)盤片,每片分兩面,每面可分成若干條磁道(500-2000),各磁道之間留有必要的間隙。每條磁道上可存儲相同數(shù)目的二進(jìn)制位。每條磁道又分成若干各扇區(qū)(10-100)。每個(gè)扇區(qū)的大小相當(dāng)于一個(gè)盤塊。各扇區(qū)之間保留一定的間隙。盤上信息的地址是多重編址的,通常包括驅(qū)動(dòng)器號、面號、道號和扇區(qū)號。84數(shù)據(jù)的組織和格式磁盤設(shè)備可包括一或多個(gè)盤片,每片分兩面,8585磁盤訪問時(shí)間1)尋道時(shí)間這是指把磁臂(磁頭)移動(dòng)到指定磁道上所經(jīng)歷的時(shí)間。該時(shí)間是啟動(dòng)磁臂的時(shí)間s與磁頭移動(dòng)n條磁道所花費(fèi)的時(shí)間之和,即尋道時(shí)間=m×n+s其中,m是一常數(shù),與磁盤驅(qū)動(dòng)器的速度有關(guān),對一般磁盤,m=0.2;對高速磁盤,m≤0.1,磁臂的啟動(dòng)時(shí)間約為2ms。這樣,對一般的溫盤,其尋道時(shí)間將隨尋道距離的增加而增大,大體上是5~30ms。86磁盤訪問時(shí)間1)尋道時(shí)間862)旋轉(zhuǎn)延遲時(shí)(等待時(shí)間)這是指定扇區(qū)移動(dòng)到磁頭下面所經(jīng)歷的時(shí)間。對于硬盤,典型的旋轉(zhuǎn)速度大多為5400r/min,每轉(zhuǎn)需時(shí)11.1ms,平均旋轉(zhuǎn)延遲時(shí)間為5.55ms;對于軟盤,其旋轉(zhuǎn)速度為300r/min或600r/min,這樣,平均旋轉(zhuǎn)延遲時(shí)間為50~100ms。872)旋轉(zhuǎn)延遲時(shí)(等待時(shí)間)873)傳送時(shí)間這是指把數(shù)據(jù)從磁盤讀出或向磁盤寫入數(shù)據(jù)所經(jīng)歷的時(shí)間。傳送時(shí)間的大小與每次所讀/寫的字節(jié)數(shù)b和旋轉(zhuǎn)速度有關(guān):其中,r為磁盤每秒鐘的轉(zhuǎn)數(shù);N為一條磁道上的字節(jié)數(shù)。883)傳送時(shí)間其中,r為磁盤每秒鐘的轉(zhuǎn)數(shù);N由上式可以看出,在訪問時(shí)間中,尋道時(shí)間和旋轉(zhuǎn)延遲時(shí)間基本上都與所讀/寫數(shù)據(jù)的多少無關(guān),而且它通常占據(jù)了訪問時(shí)間中的大頭。例如,我們假定尋道時(shí)間和旋轉(zhuǎn)延遲時(shí)間平均為20ms,而磁道的傳輸速率為10MB/s,如果要傳輸10KB,此時(shí)總的訪問時(shí)間為21ms,可見傳輸時(shí)間所占比例非常小。目前磁盤的傳輸速率已達(dá)80MB/s以上,數(shù)據(jù)傳輸時(shí)間所占的比例更低。可見適當(dāng)?shù)募袛?shù)據(jù)(不要太零散)傳輸,將有利于提高傳輸效率。89由上式可以看出,在訪問時(shí)間中,尋道時(shí)間和旋轉(zhuǎn)操作系統(tǒng)要提供合適的調(diào)度算法,以改善磁盤服務(wù)的平均時(shí)間。進(jìn)程需要與磁盤交換信息時(shí)必須向操作系統(tǒng)發(fā)出系統(tǒng)調(diào)用,對磁盤的請求一般要有下述幾個(gè)部分內(nèi)容:輸入或輸出、盤地址(驅(qū)動(dòng)器、柱面、面號、扇區(qū))、內(nèi)存地址和傳送長度。如果所需磁盤驅(qū)動(dòng)器和控制器是可用的,則該請求可立即得到服務(wù);如果它們正在為別的進(jìn)程服務(wù),該進(jìn)程就要排隊(duì)等待。在多道程序系統(tǒng)中,往往有很多進(jìn)程在磁盤隊(duì)列中等待,當(dāng)一個(gè)進(jìn)程的請求完成之后,必須選一個(gè)新的請求,并為它服務(wù)。90操作系統(tǒng)要提供合適的調(diào)度算法,以改善磁盤服務(wù)的平均時(shí)間。905.6.2磁盤調(diào)度由于在訪問磁盤的時(shí)間中,主要是尋道時(shí)間,因此,磁盤調(diào)度的目標(biāo),是使磁盤的平均尋道時(shí)間最少。目前常用的磁盤調(diào)度算法有:先來先服務(wù);最短尋道時(shí)間優(yōu)先掃描等算法。915.6.2磁盤調(diào)度由于在訪問磁盤的時(shí)間中,主要是尋道時(shí)間1.先來先服務(wù)FCFS(First-Come,FirstServed)原理:磁盤I/O執(zhí)行順序?yàn)榇疟PI/O請求的先后順序。該算法的特點(diǎn)是公平性;在磁盤I/O負(fù)載較輕且每次讀寫多個(gè)連續(xù)扇區(qū)時(shí),性能較好。缺點(diǎn):效率不高,相臨兩次請求可能會(huì)造成最內(nèi)到最外的柱面尋道,使磁頭反復(fù)移動(dòng),增加了服務(wù)時(shí)間,對機(jī)械也不利921.先來先服務(wù)FCFS(First-Come,First例:假設(shè)磁盤訪問序列:98,183,37,122,14,124,65,67讀寫頭起始位置:53安排磁頭服務(wù)序列計(jì)算磁頭移動(dòng)總距離(道數(shù))例如:93例:假設(shè)磁盤訪問序列:例如:93總共移動(dòng)了640個(gè)磁道。14375365679812212418345851468510811059294總共移動(dòng)了640個(gè)磁道。1437536567981221242.最短尋道時(shí)間優(yōu)先SSTF(ShortestSeekTimeFirst)考慮磁盤I/O請求隊(duì)列中各請求的磁頭定位位置,選擇從當(dāng)前磁頭位置出發(fā),移動(dòng)最少的磁盤I/O請求。該算法的目標(biāo)是使每次磁頭移動(dòng)時(shí)間最少。它不一定是最短平均柱面定位時(shí)間,但比FIFO算法有更好的性能。對中間的磁道有利,可能會(huì)有進(jìn)程處于饑餓狀態(tài)。952.最短尋道時(shí)間優(yōu)先SSTF(ShortestSeek總共移動(dòng)了236個(gè)磁道。1437536567981221241831223023842425996總共移動(dòng)了236個(gè)磁道。1437536567981221243.掃描(SCAN)算法1)進(jìn)程“饑餓”現(xiàn)象SSTF算法雖然能獲得較好的尋道性能,但卻可能導(dǎo)致某個(gè)進(jìn)程發(fā)生“饑餓”(Starvation)現(xiàn)象。因?yàn)橹灰粩嘤行逻M(jìn)程的請求到達(dá),且其所要訪問的磁道與磁頭當(dāng)前所在磁道的距離較近,這種新進(jìn)程的I/O請求必須優(yōu)先滿足。對SSTF算法略加修改后所形成的SCAN算法,即可防止老進(jìn)程出現(xiàn)“饑餓”現(xiàn)象。973.掃描(SCAN)算法1)進(jìn)程“饑餓”現(xiàn)象2)SCAN算法選擇在磁頭前進(jìn)方向上從當(dāng)前位置移動(dòng)最少的磁盤I/O請求執(zhí)行,直至到達(dá)磁盤的另一端時(shí)才改變方向。該算法是對SSTF算法的改進(jìn),磁盤I/O較好,且沒有進(jìn)程會(huì)餓死。由于這種算法中磁頭移動(dòng)規(guī)律類似電梯的運(yùn)行,因而又常稱之為電梯調(diào)度算法。982)SCAN算法選擇在磁頭前進(jìn)方向上從當(dāng)前位置移動(dòng)最少的1437536567981221241831623146523124259991437536567981221241831623146524.循環(huán)掃描(C-SCAN)算法在一個(gè)方向上使用掃描算法,當(dāng)?shù)竭_(dá)邊沿時(shí)直接移動(dòng)到另一沿的第一個(gè)位置。單向反復(fù)地掃描,將磁盤各磁道視為一個(gè)環(huán)形緩沖區(qū),首尾相連,最后一個(gè)磁道與第一個(gè)磁道相連該算法可改進(jìn)掃描算法對中間磁道的偏好。實(shí)驗(yàn)表明,該算法在中負(fù)載或重負(fù)載時(shí),磁盤I/O性能比掃描算法好1004.循環(huán)掃描(C-SCAN)算法在一個(gè)方向上使用掃描算法1437536567981221241831623169592243121011437536567981221241831623169595.N-Step-SCAN和FSCAN調(diào)度算法1)N-Step-SCAN算法在SSTF、SCAN及CSCAN幾種調(diào)度算法中,都可能出現(xiàn)磁臂停留在某處不動(dòng)的情況,例如,有一個(gè)或幾個(gè)進(jìn)程對某一磁道有較高的訪問頻率,即這個(gè)(些)進(jìn)程反復(fù)請求對某一磁道的I/O操作,從而壟斷了整個(gè)磁盤設(shè)備。我們把這一現(xiàn)象稱為“磁臂粘著”(Armstickiness)。在高密度磁盤上容易出現(xiàn)此情況。1025.N-Step-SCAN和FSCAN調(diào)度算法N步SCAN算法是將磁盤請求隊(duì)列分成若干個(gè)長度為N的子隊(duì)列,磁盤調(diào)度將按FCFS算法依次處理這些子隊(duì)列。而每處理一個(gè)隊(duì)列時(shí)又是按SCAN算法,對一個(gè)隊(duì)列處理完后,再處理其他隊(duì)列。當(dāng)正在處理某子隊(duì)列時(shí),如果又出現(xiàn)新的磁盤I/O請求,便將新請求進(jìn)程放入其他隊(duì)列,這樣就可避免出現(xiàn)粘著現(xiàn)象。當(dāng)N值取得很大時(shí),會(huì)使N步掃描法的性能接近于SCAN算法的性能;當(dāng)N=1時(shí),N步SCAN算法便蛻化為FCFS算法。103N步SCAN算法是將磁盤請求隊(duì)列分成若干個(gè)長度為N的子隊(duì)隊(duì)列1:98,183,37,122;隊(duì)列2:14,124,65,67;隊(duì)列3:1437536567981221241833799104隊(duì)列1:98,183,37,122;1437536567982)FSCAN算法FSCAN算法實(shí)質(zhì)上是N步SCAN算法的簡化,即FSCAN只將磁盤請求隊(duì)列分成兩個(gè)子隊(duì)列。一個(gè)是由當(dāng)前所有請求磁盤I/O的進(jìn)程形成的隊(duì)列,由磁盤調(diào)度按SCAN算法進(jìn)行處理。在掃描期間,將新出現(xiàn)的所有請求磁盤I/O的進(jìn)程,放入另一個(gè)等待處理的請求隊(duì)列。這樣,所有的新請求都將被推遲到下一次掃描時(shí)處理。1052)FSCAN算法105隊(duì)列1:98,183,37,122;隊(duì)列2:14,124,65,67,14375365679812212418337106隊(duì)列1:98,183,37,122;1437536567984.磁盤調(diào)度算法的選擇SSTF相當(dāng)通用,很有吸引力。Scan和C-Scan對磁盤負(fù)荷很重的系統(tǒng)來說更為合適。然而,任何調(diào)度算法的性能都緊緊地依賴于請求的數(shù)量和類型。在極個(gè)別情況下,若隊(duì)列中很少有多于一個(gè)未完成的請求,那么所有算法都是實(shí)際等效的。1074.磁盤調(diào)度算法的選擇SSTF相當(dāng)通用,很有吸引力。107磁盤服務(wù)的請求受文件分配方式的影響很大。讀連續(xù)文件的程序?qū)a(chǎn)生大量的在盤上擠在一起的請求,磁頭的移動(dòng)有限。而在鏈接或檢索文件時(shí),可能涉及在盤上廣泛分布的盤塊,要靠減少磁頭移動(dòng)來獲取較好的磁盤利用。磁盤的調(diào)度算法像其他算法一樣,應(yīng)作為操作系統(tǒng)的單獨(dú)模塊來編寫,允許清除它并重新?lián)Q入不同算法。最后,無論FCFS、SSTF,還是Scan,都是可供選擇的算法108磁盤服務(wù)的請求受文件分配方式的影響很大。讀連續(xù)文件的程序?qū)a(chǎn)5.6.3系統(tǒng)設(shè)計(jì)應(yīng)考慮的幾個(gè)問題1.磁盤存儲是有限資源當(dāng)磁盤存儲成為“瓶頸”時(shí),不能盲目增加系統(tǒng)內(nèi)的磁盤數(shù)量。問題很可能來自調(diào)度不當(dāng):大量的請求都壓在少量的磁盤上。在這種情況下,采用合適的磁盤調(diào)度策略可以改善性能和消除瓶頸問題。1095.6.3系統(tǒng)設(shè)計(jì)應(yīng)考慮的幾個(gè)問題1.磁盤存儲是有限資源12.多道程序的級別隨多道程序級別的提高,磁盤負(fù)荷和隨機(jī)請求也增加了。在批處理系統(tǒng)中,多道程序級別相對比較低,磁盤調(diào)度就沒有太大用處。而在分時(shí)系統(tǒng),特別是在信息處理系統(tǒng)中,它就顯得很有意義。1102.多道程序的級別1103.多磁盤系統(tǒng)在大型系統(tǒng)中,常用到多個(gè)物理磁盤設(shè)備。為了經(jīng)濟(jì)和標(biāo)準(zhǔn)化,往往用一臺控制器驅(qū)動(dòng)幾臺磁盤機(jī),再通過通道和中央處理機(jī)聯(lián)系。此時(shí)出現(xiàn)的瓶頸問題可能來自控制器或者通道,如果情況是這樣,可減少各自的負(fù)荷。此外,文件系統(tǒng)的構(gòu)造形式和存取方法也影響到磁盤調(diào)度策略的選擇。1113.多磁盤系統(tǒng)1115.7UNIX系統(tǒng)V的設(shè)備管理UNIX系統(tǒng)中包含兩類設(shè)備:塊設(shè)備和字符設(shè)備。用戶是通過文件系統(tǒng)與設(shè)備接口的。文件系統(tǒng)與設(shè)備驅(qū)動(dòng)程序之間的接口是設(shè)備開關(guān)表:塊設(shè)備開關(guān)表和字符設(shè)備開關(guān)表。硬件與驅(qū)動(dòng)程序之間的接口包括與機(jī)器有關(guān)的控制寄存器或I/O指令,用來管理設(shè)備和中斷矢量:當(dāng)出現(xiàn)設(shè)備中斷時(shí),系統(tǒng)要確定中斷來源,并且調(diào)用相應(yīng)的中斷處理程序。1125.7UNIX系統(tǒng)V的設(shè)備管理UNIX系統(tǒng)中包含兩類設(shè)備5.7.1塊設(shè)備管理的主要數(shù)據(jù)結(jié)構(gòu)UNIX系統(tǒng)采用多重緩沖技術(shù)來平滑和加快文件信息在內(nèi)存與磁盤之間的傳輸。緩沖管理模塊處在文件系統(tǒng)和塊設(shè)備驅(qū)動(dòng)模塊之間。當(dāng)從盤上讀數(shù)據(jù)時(shí),如果數(shù)據(jù)已經(jīng)在緩沖區(qū)中,則核心就直接從中讀出,而不必從盤上讀;僅當(dāng)所需數(shù)據(jù)不在緩沖區(qū)中時(shí),核心才把數(shù)據(jù)從盤上讀到緩沖區(qū),然后再由緩沖區(qū)讀出。核心盡量使數(shù)據(jù)在緩沖區(qū)停留較長時(shí)間,以減少磁盤I/O的次數(shù)。1135.7.1塊設(shè)備管理的主要數(shù)據(jù)結(jié)構(gòu)UNIX系統(tǒng)采用多重緩1.緩沖控制塊buf在系統(tǒng)初啟時(shí),核心根據(jù)內(nèi)存大小和系統(tǒng)性能要求分配若干緩沖區(qū)。一個(gè)緩沖區(qū)由兩部分組成:存放數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)(一般稱為緩沖區(qū))和一個(gè)緩沖控制塊。緩沖區(qū)和緩沖控制塊是一一對應(yīng)的。系統(tǒng)通過緩沖控制塊實(shí)現(xiàn)對緩沖區(qū)的管理。1141.緩沖控制塊buf在系統(tǒng)初啟時(shí),核心根據(jù)內(nèi)存大小和系統(tǒng)性115115緩沖池共由NBUF(200)個(gè)緩沖區(qū)組成,每個(gè)緩沖區(qū)的容量為SBUFSIZE字節(jié)。SBUFSIZE可取兩個(gè)值:512或2048,具體值由文件系統(tǒng)類型FSTYPE的值而定,在系統(tǒng)生成時(shí)選擇。b_flags反映緩沖區(qū)的使用情況和I/O方式,如忙或閑、數(shù)據(jù)有效性、“延遲寫”、正在讀/寫、等待緩沖區(qū)空閑等。116緩沖池共由NBUF(200)個(gè)緩沖區(qū)組成,每個(gè)緩沖區(qū)的容量為從buf的組成可見,它不僅包含了與使用緩沖區(qū)有關(guān)的信息,也記錄了I/O請求及其執(zhí)行結(jié)果。所以一般而言,buf既是緩存控制塊,同時(shí)又可以是針對該緩存進(jìn)行的I/O請求塊。為管理方便,系統(tǒng)還設(shè)置了自由緩存隊(duì)列控制塊bfreelist和進(jìn)程圖像傳送控制塊swbuf。這兩個(gè)塊結(jié)構(gòu)與buf結(jié)構(gòu)相同,但只用部分項(xiàng),其余則棄之不用。117從buf的組成可見,它不僅包含了與使用緩沖區(qū)有關(guān)的信息,2.塊設(shè)備表structiobuf{ intb_flags;/*該設(shè)備隊(duì)列的狀況標(biāo)志*/ structbuf*b_forw; /*指向本設(shè)備的第一個(gè)緩沖區(qū)*/ structbuf*b_back; /*指向本設(shè)備的最后一個(gè)緩沖區(qū)*/ structbuf*b_actf; /*指向本設(shè)備I/O請求隊(duì)列中第一個(gè)緩沖區(qū)*/ structbuf*b_actl; /*指向本設(shè)備I/O請求隊(duì)列中最后一個(gè)緩沖區(qū)*/ dev_tb_dev;/*設(shè)備名*/ charb_active; /*設(shè)備正在執(zhí)行一個(gè)I/O請求的標(biāo)志*/ chatb_errcnt;/*出錯(cuò)計(jì)數(shù)*/1182.塊設(shè)備表structiobuf1182.塊設(shè)備表structeblock*io_erec;/*指向塊設(shè)備錯(cuò)誤記錄塊*/intio_nreg;/*設(shè)備寄存器的個(gè)數(shù)*/physadrio_addr;/*設(shè)備控制狀態(tài)寄存器地址*/physadrio_mba;/*MBA(管理啟動(dòng)代理)配置結(jié)構(gòu)寄存器地址*/structiostat*io_stp;/*指向部件I/O統(tǒng)計(jì)塊*/time_tio_start;/*輸入輸出啟動(dòng)時(shí)間*/intio_s1;/*驅(qū)動(dòng)程序留用位置*/intio_s2;/*驅(qū)動(dòng)程序留用位置*/};1192.塊設(shè)備表structeblock*io_erec;3.塊設(shè)備開關(guān)表UNIX系統(tǒng)V為各類塊設(shè)備設(shè)置塊設(shè)備開關(guān)表,存放設(shè)備管理程序的入口地址,其結(jié)構(gòu)如下:structbdevsw
{
int(*d_open)();/*打開函數(shù)入口*/
int(*d_close)();/*關(guān)閉函數(shù)入口*/
int(*d_strategy)();/*啟動(dòng)函數(shù)入口*/
int(*d_print)();/*打印函數(shù)入口*/
};設(shè)備表和設(shè)備開關(guān)表集中了與設(shè)備有關(guān)的特性及其管理和使用的信息,也體現(xiàn)了UNIX中把設(shè)備的物理特性和使用情況與設(shè)備管理的基本方式分隔開來的主要思想。1203.塊設(shè)備開關(guān)表UNIX系統(tǒng)V為各類塊設(shè)備設(shè)置塊設(shè)備開5.7.2緩沖管理1.多種緩沖區(qū)管理隊(duì)列系統(tǒng)設(shè)置了多種隊(duì)列對所有緩沖區(qū)進(jìn)行管理。因?yàn)閎uf記錄了與緩沖區(qū)有關(guān)的各種管理信息,所以緩沖區(qū)管理隊(duì)列實(shí)際上是緩存控制塊buf隊(duì)列。(1)自由buf隊(duì)列系統(tǒng)把空閑緩沖區(qū)的buf組成空閑buf隊(duì)列,即自由buf隊(duì)列。這個(gè)隊(duì)列是雙向鏈結(jié)構(gòu),隊(duì)首塊為bfreelist,bfreelist和自由buf通過av_forw和av_back作為雙向指針,1215.7.2緩沖管理1.多種緩沖區(qū)管理隊(duì)列121av_forwav_backav_forwav_backav_forwav_backav_forwav_backbfreelistbuf[...]buf[...]buf[...]122av_forwav_backav_forwav_backav(2)設(shè)備緩沖區(qū)隊(duì)列設(shè)備緩沖區(qū)隊(duì)列連接所有各類設(shè)備使用過的緩沖區(qū),這也是一個(gè)雙向隊(duì)列,buf中的b_forw和b_back分別為該隊(duì)列的前指針和后指針,頭部為hbuf,共64個(gè)隊(duì)列。b_forwb_backb_forwb_backb_forwb_backb_forwb_backhbufbuf[...]buf[...]buf[...]123(2)設(shè)備緩沖區(qū)隊(duì)列設(shè)備緩沖區(qū)隊(duì)列連接所有各類設(shè)備使用過的緩(2)設(shè)備緩沖區(qū)隊(duì)列一個(gè)緩沖區(qū)被分配用于讀、寫某個(gè)設(shè)備的字符塊時(shí),其相應(yīng)的buf就進(jìn)入該設(shè)備的設(shè)備buf隊(duì)列,并一直保留在該設(shè)備buf隊(duì)列中,除非被移做它用。但是系統(tǒng)V與第6版有所不同,不是每個(gè)塊設(shè)備一個(gè)緩沖隊(duì)列,同一個(gè)塊設(shè)備的緩沖區(qū)可以分布在不同隊(duì)列,不同設(shè)備的緩沖分布均勻,以加快緩沖區(qū)的搜索速度。系統(tǒng)中平均每個(gè)隊(duì)列只不過有兩三個(gè)緩沖區(qū)。這就提高了搜索速度,減少系統(tǒng)開銷。124(2)設(shè)備緩沖區(qū)隊(duì)列一個(gè)緩沖區(qū)被分配用于讀、寫某個(gè)設(shè)備的字符(3)空設(shè)備隊(duì)列(NODEV隊(duì)列)NODEV隊(duì)列是一個(gè)特殊的設(shè)備buf隊(duì)列。當(dāng)系統(tǒng)需要緩存,但它不與特定的設(shè)備字符塊相關(guān)聯(lián)時(shí),將分配到的緩存控制塊buf送入NODEV隊(duì)列。其隊(duì)列控制塊也是bfreelist,但它與自由buf隊(duì)列不同,用的隊(duì)首、隊(duì)尾指針是b_forw和b_back。125(3)空設(shè)備隊(duì)列(NODEV隊(duì)列)NODEV隊(duì)列是一個(gè)特殊(3)空設(shè)備隊(duì)列(NODEV隊(duì)列)在UNIX中有兩種情況將buf送入NODEV隊(duì)列。一種是在進(jìn)程執(zhí)行一個(gè)目標(biāo)程序的開始階段,它用緩存存放傳向該目標(biāo)程序的參數(shù);另一種情況是用緩存存放文件系統(tǒng)的資源管理塊。在系統(tǒng)初啟時(shí),所有空閑緩沖區(qū)的buf既在自由buf隊(duì)列,又在NODEV的設(shè)備buf隊(duì)列中126(3)空設(shè)備隊(duì)列(NODEV隊(duì)列)在UNIX中有兩種情況將b(4)設(shè)備I/O請求隊(duì)列每個(gè)塊設(shè)備有一個(gè)設(shè)備I/O請求隊(duì)列,單向連接,頭部為iobuf,b_actf和b_actl分別指向隊(duì)首和隊(duì)尾。127(4)設(shè)備I/O請求隊(duì)列每個(gè)塊設(shè)備有一個(gè)設(shè)備I/O請求隊(duì)列,av_forwav_backav_forwav_backav_forwav_backav_forwav_backbfreelistbuf[...]buf[...]buf[...]b_backb_forwb_forwb_backb_forwb_backb_forwb_backbuf[...]buf[...]buf[...]自由buf隊(duì)列空設(shè)備隊(duì)列128av_forwav_backav_forwav_backavb_actfb_actlav_forwav_backav_forwav_backav_forwav_backiobufbuf[...]buf[...]buf[...]b_backb_forwb_forwb_backb_forwb_backb_forwb_backbuf[...]buf[...]buf[...]設(shè)備I/O請求隊(duì)列設(shè)備緩沖區(qū)隊(duì)列129b_actfb_actlav_forwav_backav_f4個(gè)隊(duì)列所屬緩沖區(qū)之間關(guān)系總結(jié)—任何一個(gè)緩沖區(qū)在穩(wěn)定的狀態(tài)下,同時(shí)屬于兩個(gè)隊(duì)列。—在自由buf隊(duì)列中緩沖區(qū)可能同時(shí)屬于NODEV隊(duì)列(未分配給指定設(shè)備),也可能屬于設(shè)備buf隊(duì)列(已經(jīng)分配給某設(shè)備用過,因I/O結(jié)束而釋放)?!谠O(shè)備buf隊(duì)列中的緩沖區(qū),可能掛在自由buf隊(duì)列(已用過被釋放),也可能掛在設(shè)備I/O請求隊(duì)列(正在使用)。—在NODEV隊(duì)列中的緩沖區(qū)若已被釋放肯定在自由buf隊(duì)列中,而在設(shè)備I/O請求隊(duì)列中的緩沖區(qū)則肯定屬于設(shè)備buf隊(duì)列1304個(gè)隊(duì)列所屬緩沖區(qū)之間關(guān)系總結(jié)—任何一個(gè)緩沖區(qū)在穩(wěn)定的狀態(tài)2.緩沖區(qū)管理算法(1)當(dāng)分配一個(gè)緩沖區(qū)用于某個(gè)設(shè)備的讀寫操作時(shí),要求被分配的緩沖區(qū)是最久未使用的。具體實(shí)現(xiàn)情況是:當(dāng)要求分配一個(gè)緩沖區(qū)時(shí),系統(tǒng)從自由buf隊(duì)列的隊(duì)首取出一個(gè)空閑的buf,并把buf的標(biāo)志位b_flags置為“忙”,因?yàn)閎uf同時(shí)存在于某個(gè)設(shè)備buf隊(duì)列中,這時(shí)要從原設(shè)備的buf隊(duì)列中取出這個(gè)buf,將其插入申請?jiān)摼彌_區(qū)的設(shè)備buf隊(duì)列中。所以,當(dāng)一個(gè)緩沖區(qū)剛被分配用于讀、寫某塊設(shè)備上某字符塊時(shí),它的b_flags標(biāo)志位被置為“忙”,它一定位于相應(yīng)的設(shè)備buf隊(duì)列中,而不在自由buf隊(duì)列中。1312.緩沖區(qū)管理算法(1)當(dāng)分配一個(gè)緩沖區(qū)用于某個(gè)設(shè)備的讀寫操(2)當(dāng)一個(gè)讀/寫操作完成后,就要求立即釋放所占用的緩沖區(qū),把這個(gè)緩沖區(qū)buf的b_flags標(biāo)志位置為“空閑”,并加入自由buf隊(duì)列的隊(duì)尾,表示它可以被考慮移作它用。這個(gè)buf仍留在原設(shè)備buf隊(duì)列中,也就是說一個(gè)緩沖區(qū)的buf處于空閑狀態(tài)時(shí),總是同時(shí)存在于兩個(gè)隊(duì)列中,一是自由buf隊(duì)列,二是相應(yīng)的設(shè)備buf隊(duì)列。132(2)當(dāng)一個(gè)讀/寫操作完成后,就要求立即釋放所占用的緩沖區(qū),所謂讀操作結(jié)束,就是將所需的字符塊從指定的設(shè)備上讀入緩沖區(qū),并傳送到用戶指定的內(nèi)存區(qū)。若該字符塊已被讀到某個(gè)緩沖區(qū)中,則不需對物理設(shè)備進(jìn)行讀操作,只是將這個(gè)緩沖區(qū)的信息傳到指定的內(nèi)存區(qū)。寫操作結(jié)束是指把某個(gè)內(nèi)存區(qū)的信息傳到緩沖區(qū),然后把緩沖區(qū)的信息寫到指定的物理設(shè)備上去。但當(dāng)一次寫操作未寫滿緩沖區(qū)時(shí),就采用“延遲寫”,即不急于寫到設(shè)備上去,而是把這個(gè)緩沖區(qū)的標(biāo)志位置上延遲寫的標(biāo)志,表示具體寫操作延遲到以后的某個(gè)時(shí)機(jī)進(jìn)行,并把這個(gè)buf掛到自由buf隊(duì)尾,同時(shí)留在這個(gè)設(shè)備的buf隊(duì)列中。133所謂讀操作結(jié)束,就是將所需的字符塊從指定的設(shè)備上讀入緩沖區(qū),(3)好處:其一,在自由buf隊(duì)列中的緩沖區(qū)中,只要未重新分配使用,其內(nèi)容不會(huì)改變。因此若再次需使用這個(gè)緩沖區(qū)的信息,只是簡單地從自由buf隊(duì)列中抽出相應(yīng)的buf,仍按原狀使用緩沖區(qū)的信息,從而減少了對設(shè)備的I/O操作,提高了文件系統(tǒng)工作的效率。其二,若將一個(gè)緩沖區(qū)移作他用,則只需從自由buf隊(duì)列和原設(shè)備buf隊(duì)列中同時(shí)抽出,插入新的設(shè)備buf隊(duì)列。這就實(shí)現(xiàn)了進(jìn)程對有限緩沖區(qū)的共享。134(3)好處:其一,在自由buf隊(duì)列中的緩沖區(qū)中,只要未重新(4)為了使釋放的緩沖區(qū)盡可能長地保留原來的使用信息,每次釋放緩沖區(qū)時(shí)總是將其buf插入到自由buf隊(duì)列的隊(duì)尾。分配緩沖區(qū)時(shí),總是從自由buf隊(duì)列隊(duì)首抽出一個(gè)空閑的buf(FIFO)。(5)并且當(dāng)一個(gè)buf在自由隊(duì)列內(nèi)移動(dòng)時(shí),只要有按原狀使用的需要時(shí),就立即從自由buf隊(duì)列中抽出,使用完畢后釋放該緩沖區(qū),又將其buf插入到自由buf隊(duì)列隊(duì)尾。這就保證了在所有自由緩沖區(qū)中被重新分配的是最久未使用的,且精確地實(shí)現(xiàn)了LRU算法。135(4)為了使釋放的緩沖區(qū)盡可能長地保留原來的使用信息,每次釋(6)已經(jīng)設(shè)置“延遲寫”標(biāo)志的緩存,雖然已經(jīng)在自由buf隊(duì)列中,實(shí)際上其內(nèi)容尚未寫到相應(yīng)設(shè)備上。當(dāng)它已經(jīng)移到自由buf隊(duì)列隊(duì)首準(zhǔn)備移作他用時(shí),不應(yīng)將其按一般自由buf處理,即不能立即對它進(jìn)行重新分配,而是要提出I/O請求,以便將其內(nèi)容寫到相應(yīng)設(shè)備的指定字符塊上。為此將它從自由buf隊(duì)列中抽,而只留在原設(shè)備buf隊(duì)列中。寫操作結(jié)束后,這種緩存又被釋放進(jìn)入自由buf隊(duì)列的末尾(也有插到隊(duì)列首),同時(shí)仍保留在原設(shè)備buf隊(duì)列中。136(6)已經(jīng)設(shè)置“延遲寫”標(biāo)志的緩存,雖然已經(jīng)在自由buf隊(duì)列3.緩沖區(qū)的分配和釋放當(dāng)進(jìn)程想從特定盤塊上讀取數(shù)據(jù)或打算把數(shù)據(jù)寫到特定盤塊上時(shí),核心要查看該塊是否已在緩沖池中。如果未在,則為該塊分配一個(gè)空閑的緩沖區(qū)。輸入:文件系統(tǒng)號(即邏輯設(shè)備號)dev,盤塊號blkno輸出:bp——可供該盤塊使用的buf(被封鎖)getblk(dev,blkno){
while(未找到相應(yīng)buf){
if(盤塊在設(shè)備buf隊(duì)列中){
if(buf忙){1373.緩沖區(qū)的分配和釋放當(dāng)進(jìn)程想從特定盤塊上讀取數(shù)據(jù)或打算把數(shù)
sleep(buf成為空閑);
continue;/*回到while循環(huán)*/ } 標(biāo)記buf忙; 從自由buf隊(duì)列中移走該buf;
return(buf);}else{/*盤塊不在設(shè)備buf隊(duì)列中*/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 衛(wèi)生系統(tǒng)平安建設(shè)活動(dòng)方案(3篇)
- 質(zhì)控小組職責(zé)模版(2篇)
- 施工人員管理制度(3篇)
- 二零二五年度建筑工程施工服務(wù)外包合同2篇
- 課題申報(bào)書:大語言模型驅(qū)動(dòng)三語教學(xué)的能動(dòng)性分析和應(yīng)用路徑研究
- 裝飾圖案課程設(shè)計(jì)理念
- 二零二五年度新能源設(shè)備技術(shù)出口服務(wù)協(xié)議3篇
- 2024年規(guī)范化勞務(wù)輸出協(xié)議模板
- 材料員崗位的具體職責(zé)說明范文(2篇)
- 課題申報(bào)書:大學(xué)生數(shù)字化生存境況及優(yōu)化路向研究
- JCT587-2012 玻璃纖維纏繞增強(qiáng)熱固性樹脂耐腐蝕立式貯罐
- 大足石刻十八講
- 小學(xué)音樂-鈴兒響叮當(dāng)教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 055風(fēng)險(xiǎn)管理計(jì)劃表
- 邊境貿(mào)易與經(jīng)濟(jì)發(fā)展
- 公司供應(yīng)商大會(huì)策劃方案
- 2022事業(yè)單位財(cái)務(wù)規(guī)則解讀PPT
- “簡約與繁復(fù)”二元思辨【 審題立意+范文精評 】 語文高分寫作 多元思辨
- 計(jì)算物理課件
- 公路水泥穩(wěn)定碎石基層振動(dòng)成型法施工技術(shù)規(guī)范
- 配電箱柜進(jìn)場驗(yàn)收表
評論
0/150
提交評論