操作系統第九章文件和設備管理示例_第1頁
操作系統第九章文件和設備管理示例_第2頁
操作系統第九章文件和設備管理示例_第3頁
操作系統第九章文件和設備管理示例_第4頁
操作系統第九章文件和設備管理示例_第5頁
已閱讀5頁,還剩59頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第9章文件和設備管理示例19.1

UNIX文件系統的特點

與文件類別9.1.1UNIX操作系統的特點

P227UNIX采用樹型目錄結構。UNIX中一個文件的絕對路徑名由斜杠“/”開頭,隨后是路徑中所經過的所有目錄名,中間用斜杠分隔而成,比如:/usr/bin/spell。由于UNIX允許用戶設置“當前目錄”,因此,從當前目錄開始的文件路徑名,是它的相對路徑名。2圖9.1是它的一個典型示例,其中,根目錄下有8個子目錄:/dev—此目錄下都是設備文件,比如鍵盤終端(con)、打印機(lp)等;/bin—此目錄下是UNIX外殼(shell)中主要程序的二進制代碼文件;/usr—此目錄下通常為已安裝的各個子文件系統,如bin、tmp、lib、local、include以及用戶的各種文件;/lib—此目錄下存放的是一些庫文件,比如C、PASCAL的函數庫;/include—此目錄下存放的是一些頭文件;/etc—此目錄下存放各種管理文件;/tmp—此目錄下存放臨時性文件;/UNIX—存放UNIX的核心程序。39.1.2UNIX文件的分類按照文件的內容,UNIX把文件分成3類:普通文件:這是通常意義下的磁盤文件,即存放用戶和系統的有關數據和程序的那些文件。它們都被視為無結構、無記錄概念的字符流,文件的長度可以動態增減。目錄文件:由文件的目錄項組成的文件稱為目錄文件。這種文件在形式上與普通文件相同,只是系統將其解釋成目錄。一般地,一個文件的目錄項應該包含文件名稱、文件長度、文件類型、文件在輔存的位置以及存取權限等信息。在UNIX中,為了加快對文件目錄的搜索速度,便于文件共享,把這些內容劃分成兩個部分:一個稱為該文件的索引節點(即文件控制塊),簡稱為i節點,它的里面存放著這個文件的長度、文件類型、文件在輔存的位置、存取權限以及共享信息等內容;另一個仍稱為文件目錄項,但它的里面只包含文件名和這個文件的索引節點編號。4下圖給出了UNIX文件目錄項的格式,即用14個字節存放文件名,2個字節存放該文件的i節點號(id)。不難看出,在UNIX中,是由文件名查文件目錄,由文件目錄得到該文件的i節點編號,由這個編號得到文件的i節點,從而得到該文件的有關信息。文件名i節點編號id5設備文件:在UNIX中,把塊存儲設備(如磁盤)和字符設備(如鍵盤、打印機)都視為文件。不過它們只有文件目錄和索引節點,并不占用實際的物理存儲塊,因此,有時也稱它們為特殊文件。為了檢查和處理方便,UNIX總是把所有的特殊文件放在名為“dev”的目錄文件中。69.2.1UNIX文件系統的存儲結構UNIX中,無論是普通文件還是目錄文件,都存儲在磁盤上。另外,每個文件的i節點也存儲在磁盤上。下面講述這些信息在磁盤上如何分布,UINX怎樣來對它們實行管理。為了使整個文件系統易于擴充和更改,UNIX把文件系統分成基本文件系統和可裝卸的子文件系統(文件卷)兩個部分。基本文件系統和子文件系統都有自己獨立的目錄結構,但是基本文件系統是整個UNIX文件系統的基礎,是文件系統的“根”,它總是被固定在作為根存儲設備的磁盤上。子文件系統是指存儲在可裝卸存儲介質(如軟盤)上的文件系統,因此,子文件系統具有可裝卸的特性。當把它安裝到基本文件系統上時,自身的獨立性消失,與基本文件系統融為一體。比如,用戶可以把自己的文件系統組織在軟盤上成為子文件系統。9.2文件系統的數據結構及其關系78UNIX把文件的存儲空間——磁盤想象成是一個由連續物理塊構成的文件卷(把每個磁盤或磁帶看作是一個文件卷),每個物理塊含512個字節。在一個磁盤上,存放著普通文件的信息,存放著目錄文件的信息,存放著文件的i節點,還要存放對磁盤存儲區的管理信息(比如哪些塊是空閑的,哪些塊是已分配的等等)。整個磁盤存儲區的組織結構如下圖示。9塊0用用來來存存放放引引導導程程序序,,它它與與文文件件管管理理關關系系不不大大。。文文件件存存儲儲器器全全部部資資源源的的管管理理信信息息((即即filsys表))存存放放在在塊塊1,,它它是是磁磁盤盤的的管管理理區區。。從從第第2塊塊——K+1塊塊,,存存放放磁磁盤盤上上文文件件的的i節節點點內內容容,,這這個個區區域域稱稱為為索索引引節節點點表表((區區))。。索索引引節節點點表表的的后后面面是是一一般般數數據據存存儲儲區區,,在在那那里里存存放放普普通通文文件件和和目目錄錄文文件件的的信信息息。。顯顯然然,,在在磁磁盤盤上上,,一一般般數數據據存存儲儲區區所所占占用用的的磁磁盤盤空空間間為為最最大大。。下下面面對對管管理理區區中中的的資資源源管管理理信信息息表表filsys、索引節節點區中中的i節節點以及及文件的的目錄分分別加以以介紹。。109.2.2幾幾種常用用的數據據結構資源管理理結構filsys:用來進行行文件空空閑塊和和i節點點項的分分配與回回收,包包含文文件系統統空閑塊塊分配用用堆棧及及i節點點分配用用數據結結構。原原理見P229i節點(索引節點點):存放文文件說明明信息和和相應標標識符的的BFD.包括括:磁盤盤i節點點(dinode,以以靜態態形式存存放文件件說明信信息)、、內存活活動i節點((inode,為減減少設備備啟動次次數、提提高文件件的操作作速度而而把磁盤盤i節復復制到內內存的特特定區域域)。每個文件件都應有有一個唯唯一的磁磁盤索引引節點,,文件被被打開后后,還應應有內存存索引節節點。11目錄項:由文文件名和和磁盤i節點標標識符id組成成。系統打開開文件表表、用戶戶打開文文件表:記錄錄和控制制打開文文件的用用戶進程程以及記記錄和控控制那些些共享同同一文件件的用戶戶進程。。其中::用戶打開開文件表表:存放打開開文件的的描述符符fd;系統打開開文件表表:記錄錄打開同同一文件件的不同同進程程和不同同進程所所使用的的不同打打開路徑徑,及其其對應的的讀寫指指針。文件名i節點編號id12資源管理理的任務務:空閑磁盤盤塊的分分配i節點的的分配系統打開開文件表表的分配配空閑磁盤盤塊的回回收i節點的的回收系統打開開文件表表的回收收9.3資源管理理和地址址映射13空閑磁盤盤塊的管管理UNIX對文件件存儲空空間的管管理在磁磁盤上,,UNIX總是是把文件件安排在在一般數數據存儲儲區。因因此,UNIX對文件件存儲空空間的管管理,即即是對磁磁盤上一一般數據據存儲區區的管理理。前面面第7章章介紹使使用“空空閑塊鏈鏈”管理理磁盤上上的空閑閑塊時,,曾提及及“成組鏈接接”法,并并說UNIX操操作系統統就是采采用這種種方法來來管理磁磁盤上的的空閑塊塊的。這這種方法法是將若若干個((如100)空空閑盤塊塊劃歸為為一個組組,將每每組在中中的所有有盤塊號號存放在在其前一一組的第第一個空空閑盤塊塊中,而而僅把第第一組中中的所有有空閑塊塊號放入入超級塊塊(filsys結構構)中。。下面簡單單介紹它它的實現現過程。。14在磁盤管管理區filsys結結構中,,有兩個個內容涉涉及到磁磁盤空閑閑塊的管管理,一一個是由由數組s_free[100]構成的一一個空閑閑磁盤塊塊索引表表。當一一個文件件要申請請磁盤塊塊時,就就到這個個索引表表中去獲獲得需要要的空閑閑塊;當當一個磁磁盤塊被被釋放時時,就把把它還回回到這個個索引表表中。所所以,這這個索引引表中記記錄的是是當前系系統可以以直接分分配的空空閑磁盤盤塊。另另一個是是s_nfree,它記錄錄了s_free[]中現現有的可可分配的的空閑磁磁盤塊數數。從形式上上看,利利用數組組s_free[100]直直接管理理100個空閑閑的磁盤盤塊,與與利用數數組s_inode[100]直接接管理100個個空閑的的i節點點相類似似,但實實際上相相差很遠遠。因為為除這100個個直接管管理的空空閑塊外外,UNIX對對其余的的空閑塊塊并沒有有放置不不管,而而是將它它們分組組進行鏈鏈接。具具體做法法如下圖圖所示。。1516UNIX把磁盤盤上一般般數據存存儲區中中的所有有空閑塊塊依次分分組。為為了下面面講述方方便,對對每一組組的塊都都進行分分別編號號。具體體的辦法法是:第第1組為為99塊塊,編號號為1~99((為什么么第1組組只有99塊,,后面會會給出解解釋)。。從第2組起,,每組都都是100塊,,剩下的的塊歸并并成為最最后一組組。它們們都按0~99的順序序進行編編號。在在圖中,,從右至至左反映映了這種種分組的的結構。。在圖中中,假定定最后一一組中只只有52個空閑閑塊,各各塊的編編號為0~51。分好組以以后,總總是在后后一組的的第0塊塊中開辟辟101個位置置,依次次存放前前一組的的總塊數數以及前前一組中中每一塊塊的地址址。也就就是說,,相當于于總是在在后一組組中,開開辟s_nfree和和s_free[100]所所需要的的位置,,用于存存放前一一組的分分組信息息。17在此,有有兩組的的情況要要做特殊殊處理。。一個是是第1組組。在第第1組中中,實際際只有99個空空閑塊。。為了管管理的需需要,把把它的總總塊數仍仍記為100,,見圖中中第2組組里的s_nfree=100。另另外,第第一組磁磁盤塊編編號是從從1開始始的,因因此在相相當于第第0號磁磁盤塊的的位置存存放一個個0,而而不是某某一個磁磁盤塊的的地址,,見圖中中第2組組中的s_free[0]=0。18另一個要要特殊處處理的是是最后一一組。因因為在最最后一組組的后面面已經沒沒有下一一組了,,所以UNIX就把它它的所有有信息存存放在管管理塊的的filsys中,即即存放在在filsys的s_nfree和和s_free[100]中中。由于于現在最最后一組組只有52個空空閑塊,,因此在在filsys中的s_nfree取值為為52,,并且只只用到數數組s_free[100]的前52個元元素,即即用s_free[0]到s_free[51]存放最最后一組組的52個空閑閑塊的地地址。至此,成成組鏈接接的格局局已經完完成:在在filsys的s_free[]中,,記錄了了當前直直接可以以分配的的52個個空閑塊塊。在這這52個個空閑塊塊的第0塊中,,記錄了了下一組組100個空閑閑的磁盤盤塊地址址,下一一組100個空空閑的第第0塊中中,記錄錄了再下下一組100個個空閑的的磁盤塊塊地址,,如此等等等。19在采用““成組鏈鏈接”法法后,如如何分配配空閑塊塊,如何何回收空空閑塊??下面來來討論這這兩個問問題。無無論是磁磁盤空閑閑塊的分分配還是是回收,,都是在在filsys中的空空閑磁盤盤塊索引引表s_free[]中進進行,并并把它視視為一個個棧。分分配時,,做出棧棧操作;;回收時時,做進進棧操作作。s_nfree中記錄錄的值,,是s_free[]中當當前實際際有的空空閑塊數數,正好好也是空空閑磁盤盤塊索引引表s_free[]中下下一個可可以使用用的索引引表目的的下標。。20因此,總總是先在在s_nfree上做做減1操操作,然然后把s_free[s_nfree]中中記錄的的磁盤塊塊分配出出去。這這里要注注意的是是,如果果在s_nfree上上做減1操作后后,其值值等于0了,那那么就是是要把s_free[0]所所指向的的那一個個磁盤空空閑塊分分配出去去。由于于它是這這一組的的第0個個磁盤塊塊(按照照分配順順序,它它總是在在一組中中最后被被分配出出去),,里面包包含有它它前一組組空閑塊塊的信息息在內。。因此在在把這一一塊分配配出去之之前,應應該先把把它記錄錄的101個信信息拷貝貝到filsys結構構的s_nfree和和s_free[]里面去去,然后后才能將將它分配配出去。。21分配時還還要注意意的一個個問題是是如果分分配一直直進行,,現在要要把第2組的第第0塊分分配出去去。根據據前面所所說,先先把這塊塊中記錄錄的101個信信息拷貝貝到filsys結構構的s_nfree和和s_free[]里面去去,然后后才將它它分配出出去。這這意味著著系統現現在只有有最后99塊能能夠分配配了。如如果分配配仍然繼繼續,直直到把這這99塊塊全部分分配出去去。此時時,filsys中的的s_nfree=1,s_free[0]=0。若再再申請空空閑塊,,s_nfree減1后成為為0,即即要把s_free[0]所所指的塊塊分配出出去。此此時發現現s_free[0]=0,,而不是是一個磁磁盤塊的的地址,,表明所所有的磁磁盤空閑閑塊都分分配出去去了,提提出請求求的進程程只能阻阻塞等待待。所以以,這就就是前面面分組時時把第1組只分分99個個空閑塊塊,但仍仍然算這這組有100個個塊,并并將第0塊指針針處安放放一個0的原因因。22進行空閑塊塊的回收時時,就是將將該塊的地地址登記在在空閑磁盤盤塊索引表表的s_free[s_nfree]表目中,然后讓s_nfree加1。不過要要注意,在在把釋放塊塊的地址存存入索引表表s_free[]的表之之前,必須須檢查s_nfree的取值值。如果發發現s_nfree等于100,那么么表明這時時空閑磁盤盤塊索引表表在此之前前已經收集集滿了100個空閑閑的磁盤塊塊,它們應應該形成一一個新的鏈鏈組。現在在要釋放的的一塊,是是下一組空空閑塊的第第0塊。于于是,就把把filsys中的的s_nfree和和s_free[0]~s_free[99]共101個值存入入新釋放塊塊中,然后后將此塊的的地址填入入s_free[0]中,將將s_nfree置置為1。239.3.1磁盤i節點的管管理基本思想:在給新建建文件分配配磁盤存儲儲區之前,,為其分配配磁盤i節節點,以將將文件的有有關信息記記入其中,,并將用戶戶提供的文文件名和磁磁盤i節點點號一并組組成一個新新目錄項,,記入其父父目錄文件件中;刪刪除文件時時,回收所所分配的磁磁盤i節點點項。分配算法:借助于i節點線性性表利用ialloc算法((UNIXSystemV)進行行的,具體體分配過程程見P232回收算法:利用ifee算法法249.3.2內存i節點的管管理基本思想:系統打開開文件進行行搜索或讀讀寫等操作作時,為其其分配內存存i節點,,以存放從從磁盤i節節點拷貝過過來的信息息,方便用用戶或系統統對文件的的訪問;刪刪除文件件時,回收收所分配的的磁盤i節節點項。分配配:利利用用過過程程iget實實現現回收收:利利用用過過程程iput實實現現259.3.3系系統統打打開開文文件件表表的的管管理理系統統打打開開文文件件表表:記記錄錄打打開開同同一一文文件件的的不不同同進進程程和和不不同同進進程程所所使使用用的的不不同同打打開開路路徑徑,,及及其其對對應應的的讀讀寫寫指指針針。。分配配:利利用用getf過過程程實實現現回收收:利利用用closef過過程程實實現現269.3.4地地址址映映射射前面面提提及及,,UNIX文文件件的的物物理理結結構構采采用用的的是是索索引引結結構構,,這這種種索索引引結結構構是是通通過過每每個個文文件件i節節點點中中的的數數組組di_addr[]來來形形成成文文件件存存儲儲索索引引表表的的。。該該數數組組總總共共有有13個個元元素素,,每每個個元元素素為為一一個個索索引引項項。。前前10個個索索引引項項直直接接指指向向文文件件數數據據存存放放的的磁磁盤盤塊塊號號,,后后3個個索索引引項項分分別別構構成成一一次次間間接接索索引引、、二二次次間間接接索索引引和和三三次次間間接接索索引引的的多多級級索索引引結結構構。。這這樣樣,,UNIX可可以以根根據據文文件件的的大大小小,,通通過過使使用用這這張張存存儲儲索索引引表表,,形形成成小小型型、、中中型型、、大大型型和和巨巨型型等等不不同同規規模模的的文文件件。。27小型型文文件件的的索索引引結結構構:通通常常,,每每個個磁磁盤盤塊塊為為512個個字字節節。。當當一一個個文文件件的的長長度度在在1~10個個磁磁盤盤塊塊之之間間時時,,就就稱稱為為小小型型文文件件。。這這時時,,用用文文件件i節節點點中中數數組組di_addr[]的的前前10個個表表目目,,直直接接指指向向文文件件數數據據存存放放的的磁磁盤盤塊塊號號。。因因此此,,在在UNIX中中,,小小型型文文件件是是通通過過i節節點點中中的的數數組組di_addr[]構構成成一一級級索索引引表表而而獲獲得得文文件件在在磁磁盤盤上上的的存存儲儲位位置置的的。。如下下圖圖所所示示。。2829中型型文文件件的的索索引引結結構構:當一一個個文文件件的的長長度度在在10~138磁磁盤盤塊塊內內時時,,就就成成為為一一個個UNIX的的中中型型文文件件。。這這時時除除了了用用到到di_addr[0]~di_addr[9]外外,,還還要要用用到到di_addr[10],,如如下下圖圖所所示示。。在圖圖中中,,di_addr[0]~di_addr[9]仍仍然然直直接接指指向向文文件件數數據據存存放放的的10個個磁磁盤盤塊塊號號,,然然后后又又利利用用di_addr[10]指指向向一一個個磁磁盤盤塊塊。。這這塊塊并并不不存存放放文文件件的的數數據據,,而而是是利利用用它它形形成成又又一一級級的的索索引引。。在在UNIX中中,,用用4個個字字節節放放一一個個磁磁盤盤塊塊號號,,因因此此在在這這個個盤盤塊塊中中,,可可以以放放128個個磁磁盤盤塊塊號號。。這這樣樣一一來來,,通通過過di_addr[10]提提供供的的索索引引,,一一個個文文件件就就可可以以達達到到138個個磁磁盤盤存存儲儲塊塊這這么么大大。。3031大型和巨型文文件的索引結結構:當一個文文件的長度在在138~16522磁磁盤塊內時,,就成為一個個UNIX的的大型文件。。這時除了用用到di_addr[0]~di_addr[9]外,,要用到di_addr[10],,還要用到di_addr[11]。在圖中,di_addr[0]~di_addr[9]直直接指向文件件數據存放的的10個磁盤盤塊號。然后后如同前面那那樣,利用di_addr[10]指向一個磁磁盤塊,由它它提供128個磁盤塊的的索引,從而而使文件總共共達到138個磁盤存儲儲塊這么大。。但這還不夠夠,又利用di_addr[11]指向一個磁磁盤塊,由它它指向128個磁盤塊,,每個都是一一個索引。這這樣,通過這這128個索索引、每個指指向128個個磁盤塊,就就又可以得到到16384個磁盤塊。。于是,UNIX的大型型文件最多可可以擁有16522個磁磁盤塊(即10+128+16384)。3233當一個文件所所需的磁盤塊塊大于16522個磁盤盤塊時,就成成為UNIX的巨型文件件了。這時除除了用到di_addr[0]~di_addr[9]外外,還要用到到di_addr[10]、di_addr[11]和di_addr[12]。此時,文文件的最大長長度可以達到到約11億個個字節,但是是由于此時要要經過多次間間接索引,會會使系統的查查找速度大大大降低。349.4目錄與檢索方方法目錄的構造和和刪除創建一新文件件時,UNIX系統利用用makenode過程程在其父目錄錄文件中為之之構造一個目目錄項。目錄的檢索由namei過程利用散散列搜索法完完成,其根據據用戶給出的的文件路徑名名,從高層到到低層順序地地查找各級文文件目錄,尋尋找指定文件件的內存i節節點指針。359.5文件系統的系系統調用UNIX提供供了一些系統統調用命令,,以便用戶在在程序一級完完成對文件的的操作。有關關的系統調用用是:creat、open、read、write、close、、chdir、chown、chmod、link和unlink等等。下面對它它們各自的功功能做粗略的的描述。creat((建立文件))open(打打開文件)close((關閉文件))read(讀讀)write((寫)36link(鏈鏈接)系統調用link可以為為一個已經存存在的文件開開辟一條新的的路徑,也就就是說,可以以為一個文件件再取一個新新的名字。它它的使用格式式是:link(pathname1,pathname2);;其中參數pathname1是原文文件的路徑名名,參數pathname2為其新新取的路徑名名。link處理理程序先按照照參數pathname2的指點,,將新的文件件名登記到指指定的路徑目目錄中。然后后根據pathname1,找到原原文件所對應應的i節點編編號,將該號號填入新文件件的文件目錄錄中。由于每每個文件的i節點編號是是惟一的,因因此經過link之后,,兩個不同路路徑名的文件件就與同一個個文件相對應應了。37unlink(去鏈接)38比如考慮上圖圖的情形。zong和wang要共共同完成一項項工作。zong為了訪訪問對方的文文件x,只能能通過“/usr/wang/x””才能達到目目的。但如果果通過命令::link(/usr/wang/x,/usr/zong/k);那么,若當前前目錄為zong,則zong直接接通過k就能能夠訪問wang的文件件x了,這是是因為link命令在zong的文文件k和wang的文件件x之間建立立了鏈接的緣緣故。如圖(b)所示。。399.6UNIX的設備管理UNIX設備備管理概述UNIX是根根據設備與內內存之間信息息交換的單位位來對設備進進行分類的,,因此在整個個系統中,歸歸到設備管理理的有兩類設設備:塊設備和字符設備。前者與內存存之間以成組組信息為單位位進行信息交交換,比如硬硬盤、軟盤、、磁帶都屬于于塊設備。由由于這些設備備是用來存儲儲信息的,因因此有時把它它們稱為存儲儲設備;后者者與內存之間間以字節為單單位進行信息息交換,比如如鍵盤輸入、、顯示器和打打印機等都屬屬于字符設備備之列。由于于這些設備主主要供計算機機接收外部信信息,或把加加工完畢的信信息傳遞給外外部世界,因因此也被稱為為輸入/輸出出設備。40為了識識別每每一個個具體體的設設備,,UNIX是這這樣做做的::每一一類設設備附附有一一個編編號,,稱為為“主主設備備號””,同同類設設備中中的不不同設設備也也給予予一個個編號號,稱稱為““次設設備號號”。。在請請求設設備進進行輸輸入輸輸出時時,必必須指指定主主設備備號和和次設設備號號。這這樣,,由主主設備備號判判定由由哪個個驅動動程序序工作作;驅驅動程程序根根據次次設備備號確確定控控制哪哪臺設設備去去完成成所需需要的的I/O。。從前面面對UNIX文文件管管理的的講述述可知知,UNIX把把塊設設備和和字符符設備備都視視為特特殊文文件來來對待待,它它們的的文件件目錄錄都在在子目目錄dev下。。由于于它們們是文文件,,因此此有自自己的的i節節點。。為了了與其其他文文件加加以區區分,,在它它們的的索引引節點點中,,把““文件件類型型”欄欄置為為“塊塊”或或“字字符””。由由此表表明它它們不不是普普通文文件,,也不不是目目錄文文件,,而是是設備備文件件,并并且由由此也也能區區分是是塊設設備文文件還還是字字符設設備文文件。。41在UNIX中,,是通通過系系統調調用creat來建建立新新文件件的。。但設設備文文件不不能用用普通通的方方法來來創建建,并并且也也不是是誰都都有權權來創創建。。如果果要創創建一一個新新的設設備文文件,,則應應該由由系統統管理理員通通過系系統調調用mknod來完完成。。它的的使用用格式式是((P250):mknod(pathname,,mode,dev);其中,,參數數pathname是文文件的的路徑徑名,,mode指出出文件件的類類型((B表表示塊塊設備備,C表示示字符符設備備),,dev是是主設設備號號和次次設備備號的的組合合。比比如有有如下下命令令:mknod(/dev/abc,,C,,212);;表示要要在根根目錄錄的子子目錄錄dev下下,創創建一一個名名為abc的文文件((由于于它建建立在在子目目錄dev下,,因此此它是是一個個設備備文件件),,由于于mode=““C””,因因此是是一個個字符符設備備文件件,該該設備備的主主設備備號是是2,,次設設備號號是12。。429.6.1塊設備備的管管理UNIX在在塊設設備和和內存存之間間安放放了緩緩沖區區,通通過它它使塊塊設備備與內內存間間的數數據流流動在在速度度上能能夠匹匹配,,從而而達到到減少少內、、外存存傳輸輸次數數的目目的。。如圖圖所示示。對對于寫寫操作作,先先是把把內存存用戶戶區中中的數數據拷拷貝到到緩沖沖區,,再從從緩沖沖區輸輸出到到設備備;對對于讀讀操作作,先先從設設備接接收數數據到到緩沖沖區,,再將將緩沖沖區中中的數數據拷拷貝到到指定定的內內存用用戶區區。43塊設備的每每一個緩沖沖區長度為為512個個字節或1024個個字節,這這要由文件件系統來確確定。由一一個個緩沖沖區,組成成了供塊設設備輸入/輸出使用用的緩沖池池。為了便便于管理,,UNIX把緩沖池池中的每個個緩沖區分分成兩個部部分:一個個是真正用用于存放數數據的部分分,一個是是用于管理理的部分。。前者仍稱稱為“緩沖區”,后者稱稱為“緩沖區控制制塊”,并在緩緩沖區和緩緩沖區控制制塊之間保保持一一對對應的關系系。圖9.10給出出了緩沖區區控制塊的的內容和它它與緩沖區區的對應關關系。44451.空閑緩沖區區隊列(av隊列列)為了構成系系統中空閑閑緩沖區隊隊列,UNIX設置置了一個名名為bfreelist的控控制塊,它它的結構與與緩沖區控控制塊相同同,里面的的av_forw和和av_back就就是塊設備備空閑緩沖沖區隊列的的首指針和和尾指針,,如圖9.11所示示。4647對于空閑緩緩沖區隊列列,有兩點點要說明::第一,這這個由緩沖沖區控制塊塊構成的隊隊列是一個個雙向鏈表表,它們通通過各自的的前向指針針av_forw和和后向指針針av_back鏈鏈接在一起起,形成隊隊列。第二二,UNIX對這個個隊列采用用先進先出出(FIFO)的管管理算法。。即當釋放放一個緩沖沖區時,與與之對應的的緩沖區控控制塊就被被鏈入到空空閑緩沖區區隊列之尾尾;當申請請一個緩沖沖區時,就就把空閑緩緩沖區隊列列之首的那那個緩沖區區控制塊摘摘下分配出出去,這也也就意味著著是把這個個緩沖區控控制塊所對對應的緩沖沖區分配出出去。482.設備緩緩沖區隊列列(設備b鏈鏈,散列隊隊列)這是由緩沖沖區控制塊塊組成的第第二種隊列列,是UNIX對緩緩沖區管理理的一大特特色。下面面來說明這這是一個什什么隊列,,為什么要要組成它。。49緩沖池中的的緩沖區資資源是有限限的,為了了能夠對它它們充分地地加以利用用,以及對對它們里面面存放的數數據信息最最大限度地地加以利用用,UNIX提出了了這樣的設設想:一個個已經在空空閑緩沖區區隊列中的的緩沖區控控制塊,在在它未被挪挪為它用之之前,它對對應的緩沖沖區中保存存的仍然是是磁盤上某某塊中的數數據信息。。如果這時時根據需要要又要對該該磁盤塊進進行操作,,那么大可可不必去通通過啟動I/O獲得得盤塊上的的數據,這這些數據還還在原來的的緩沖區中中完好無損損地保存著著,只要拿拿來就可以以使用。這這樣做的結結果是減少少了I/O次數,大大大提高了了系統的工工作效率。。50出自于這些些考慮,UNIX一一方面仍然然是讓被釋釋放緩沖區區所對應的的緩沖區控控制塊鏈入入到空閑緩緩沖區隊列列之尾,以以便能夠它它用。另一一方面又設設置了一個個新的隊列列:設備緩緩沖區隊列列,即把為為某個設備備服務的緩緩沖區所對對應的緩沖沖區控制塊塊全都匯集集在一起,,形成了這這個設備的的設備緩沖沖區隊列。。一個設備備的設備緩緩沖區隊列列由緩沖區區控制塊中中的d_forw和和d_back指針針進行鏈接接,前者為為前向指針針,后者為為后向指針針。該隊列列的首、尾尾指針是設設備表中的的d_forw和d_back。整個個隊列如下下圖所示。。5152幾點說明::(1)這個個由緩沖區區控制塊構構成的隊列列是一個雙雙向鏈表,,它們通過過各自的前前向指針b_forw和后向向指針b_back鏈接在一一起,形成成隊列。(2)當一一個緩沖區區被分配給給某個塊設設備做輸入入/輸出用用時,它所所對應的緩緩沖區控制制塊就從隊隊首插入到到隊列里。。(3)當一一個緩沖區區控制塊插插入到一個個設備的設設備緩沖區區隊列中之之后,即便便該緩沖區區被釋放,,它也仍然然在這個隊隊列中排著著。這就是是說,在任任何時刻,,UNIX中的任何何一個緩沖沖區控制塊塊,總會在在空閑緩沖沖區隊列、、設備緩沖沖區隊列以以及設備輸輸入/輸出出隊列這三三個隊列中中的兩個里里排隊,或或是在空閑閑緩沖區隊隊列、設備備緩沖區隊隊列里面排排著,或是是在設備緩緩沖區隊列列、設備輸輸入/輸出出隊列里面面排著。(4)只有有當一個緩緩沖區的服服務對象改改變(比如如原來被分分配給磁盤盤1使用,,現在被分分配給磁盤盤2使用了了)時,該該緩沖區所所對應的緩緩沖區控制制塊才會從從一個設備備緩沖區隊隊列上摘下下,進入到到另一個設設備緩沖區區隊列中;;否則即便便緩沖區被被釋放,它它仍然保持持在原來的的設備緩沖沖區隊列中中。533.輸入入/輸出出請求隊隊列(塊設備av鏈))當用戶對對塊設備備提出輸輸入/輸輸出請求求時,首首先要申申請一個個空閑的的緩沖區區控制塊塊(注意意:申請請到空閑閑的緩沖沖區控制制塊,就就意味著著申請到到了存放放數據的的緩沖區區,因為為它們是是一一對對應的)),并把把這次輸輸入/輸輸出請求求具體要要完成的的任務填填入到緩緩沖區控控制塊中中(數據據源的地地址、目目的地址址、傳輸輸的個數數等等))。因此此,UNIX把把向主設設備號相相同的設設備提出出的I/O請求求所對應應的緩沖沖區控制制塊鏈接接在一起起,形成成對這個個設備的的輸入/輸出請請求隊列列。該隊隊列的首首指針就就是這個個設備的的設備表表里的d_actf,,尾指針針是d_actl。如如下圖所所示。5455對于塊設設備的輸輸入/輸輸出請求求隊列有有三點說說明:第第一,它它是一個個單鏈表表,不像像空閑緩緩沖區隊隊列,那那里給出出的是一一個雙向向鏈表。。第二,,由于一一個緩沖沖區控制制塊不可可能同時時在空閑閑緩沖區區隊列和和輸入/輸出請請求隊列列,因此此,在輸輸入/輸輸出請求求隊列中中,就借借用緩沖沖區控制制塊中的的av_forw指針針來構成成單鏈表表(這個個指針在在空閑緩緩沖區隊隊列里是是前向指指針)。。第三,,UNIX對這這個隊列列采用

溫馨提示

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

評論

0/150

提交評論