




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第9章文件和設(shè)備管理示例19.1
UNIX文件系統(tǒng)的特點(diǎn)
與文件類別9.1.1UNIX操作系統(tǒng)的特點(diǎn)
P227UNIX采用樹型目錄結(jié)構(gòu)。UNIX中一個文件的絕對路徑名由斜杠“/”開頭,隨后是路徑中所經(jīng)過的所有目錄名,中間用斜杠分隔而成,比如:/usr/bin/spell。由于UNIX允許用戶設(shè)置“當(dāng)前目錄”,因此,從當(dāng)前目錄開始的文件路徑名,是它的相對路徑名。2圖9.1是它的一個典型示例,其中,根目錄下有8個子目錄:/dev—此目錄下都是設(shè)備文件,比如鍵盤終端(con)、打印機(jī)(lp)等;/bin—此目錄下是UNIX外殼(shell)中主要程序的二進(jìn)制代碼文件;/usr—此目錄下通常為已安裝的各個子文件系統(tǒng),如bin、tmp、lib、local、include以及用戶的各種文件;/lib—此目錄下存放的是一些庫文件,比如C、PASCAL的函數(shù)庫;/include—此目錄下存放的是一些頭文件;/etc—此目錄下存放各種管理文件;/tmp—此目錄下存放臨時性文件;/UNIX—存放UNIX的核心程序。39.1.2UNIX文件的分類按照文件的內(nèi)容,UNIX把文件分成3類:普通文件:這是通常意義下的磁盤文件,即存放用戶和系統(tǒng)的有關(guān)數(shù)據(jù)和程序的那些文件。它們都被視為無結(jié)構(gòu)、無記錄概念的字符流,文件的長度可以動態(tài)增減。目錄文件:由文件的目錄項(xiàng)組成的文件稱為目錄文件。這種文件在形式上與普通文件相同,只是系統(tǒng)將其解釋成目錄。一般地,一個文件的目錄項(xiàng)應(yīng)該包含文件名稱、文件長度、文件類型、文件在輔存的位置以及存取權(quán)限等信息。在UNIX中,為了加快對文件目錄的搜索速度,便于文件共享,把這些內(nèi)容劃分成兩個部分:一個稱為該文件的索引節(jié)點(diǎn)(即文件控制塊),簡稱為i節(jié)點(diǎn),它的里面存放著這個文件的長度、文件類型、文件在輔存的位置、存取權(quán)限以及共享信息等內(nèi)容;另一個仍稱為文件目錄項(xiàng),但它的里面只包含文件名和這個文件的索引節(jié)點(diǎn)編號。4下圖給出了UNIX文件目錄項(xiàng)的格式,即用14個字節(jié)存放文件名,2個字節(jié)存放該文件的i節(jié)點(diǎn)號(id)。不難看出,在UNIX中,是由文件名查文件目錄,由文件目錄得到該文件的i節(jié)點(diǎn)編號,由這個編號得到文件的i節(jié)點(diǎn),從而得到該文件的有關(guān)信息。文件名i節(jié)點(diǎn)編號id5設(shè)備文件:在UNIX中,把塊存儲設(shè)備(如磁盤)和字符設(shè)備(如鍵盤、打印機(jī))都視為文件。不過它們只有文件目錄和索引節(jié)點(diǎn),并不占用實(shí)際的物理存儲塊,因此,有時也稱它們?yōu)樘厥馕募榱藱z查和處理方便,UNIX總是把所有的特殊文件放在名為“dev”的目錄文件中。69.2.1UNIX文件系統(tǒng)的存儲結(jié)構(gòu)UNIX中,無論是普通文件還是目錄文件,都存儲在磁盤上。另外,每個文件的i節(jié)點(diǎn)也存儲在磁盤上。下面講述這些信息在磁盤上如何分布,UINX怎樣來對它們實(shí)行管理。為了使整個文件系統(tǒng)易于擴(kuò)充和更改,UNIX把文件系統(tǒng)分成基本文件系統(tǒng)和可裝卸的子文件系統(tǒng)(文件卷)兩個部分?;疚募到y(tǒng)和子文件系統(tǒng)都有自己獨(dú)立的目錄結(jié)構(gòu),但是基本文件系統(tǒng)是整個UNIX文件系統(tǒng)的基礎(chǔ),是文件系統(tǒng)的“根”,它總是被固定在作為根存儲設(shè)備的磁盤上。子文件系統(tǒng)是指存儲在可裝卸存儲介質(zhì)(如軟盤)上的文件系統(tǒng),因此,子文件系統(tǒng)具有可裝卸的特性。當(dāng)把它安裝到基本文件系統(tǒng)上時,自身的獨(dú)立性消失,與基本文件系統(tǒng)融為一體。比如,用戶可以把自己的文件系統(tǒng)組織在軟盤上成為子文件系統(tǒng)。9.2文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)及其關(guān)系78UNIX把文件的存儲空間——磁盤想象成是一個由連續(xù)物理塊構(gòu)成的文件卷(把每個磁盤或磁帶看作是一個文件卷),每個物理塊含512個字節(jié)。在一個磁盤上,存放著普通文件的信息,存放著目錄文件的信息,存放著文件的i節(jié)點(diǎn),還要存放對磁盤存儲區(qū)的管理信息(比如哪些塊是空閑的,哪些塊是已分配的等等)。整個磁盤存儲區(qū)的組織結(jié)構(gòu)如下圖示。9塊0用用來來存存放放引引導(dǎo)導(dǎo)程程序序,,它它與與文文件件管管理理關(guān)關(guān)系系不不大大。。文文件件存存儲儲器器全全部部資資源源的的管管理理信信息息((即即filsys表))存存放放在在塊塊1,,它它是是磁磁盤盤的的管管理理區(qū)區(qū)。。從從第第2塊塊——K+1塊塊,,存存放放磁磁盤盤上上文文件件的的i節(jié)節(jié)點(diǎn)點(diǎn)內(nèi)內(nèi)容容,,這這個個區(qū)區(qū)域域稱稱為為索索引引節(jié)節(jié)點(diǎn)點(diǎn)表表((區(qū)區(qū)))。。索索引引節(jié)節(jié)點(diǎn)點(diǎn)表表的的后后面面是是一一般般數(shù)數(shù)據(jù)據(jù)存存儲儲區(qū)區(qū),,在在那那里里存存放放普普通通文文件件和和目目錄錄文文件件的的信信息息。。顯顯然然,,在在磁磁盤盤上上,,一一般般數(shù)數(shù)據(jù)據(jù)存存儲儲區(qū)區(qū)所所占占用用的的磁磁盤盤空空間間為為最最大大。。下下面面對對管管理理區(qū)區(qū)中中的的資資源源管管理理信信息息表表filsys、索引節(jié)節(jié)點(diǎn)區(qū)中中的i節(jié)節(jié)點(diǎn)以及及文件的的目錄分分別加以以介紹。。109.2.2幾幾種常用用的數(shù)據(jù)據(jù)結(jié)構(gòu)資源管理理結(jié)構(gòu)filsys:用來進(jìn)行行文件空空閑塊和和i節(jié)點(diǎn)點(diǎn)項(xiàng)的分分配與回回收,包包含文文件系統(tǒng)統(tǒng)空閑塊塊分配用用堆棧及及i節(jié)點(diǎn)點(diǎn)分配用用數(shù)據(jù)結(jié)結(jié)構(gòu)。原原理見P229i節(jié)點(diǎn)(索引節(jié)點(diǎn)點(diǎn)):存放文文件說明明信息和和相應(yīng)標(biāo)標(biāo)識符的的BFD.包括括:磁盤盤i節(jié)點(diǎn)點(diǎn)(dinode,以以靜態(tài)態(tài)形式存存放文件件說明信信息)、、內(nèi)存活活動i節(jié)點(diǎn)((inode,為減減少設(shè)備備啟動次次數(shù)、提提高文件件的操作作速度而而把磁盤盤i節(jié)復(fù)復(fù)制到內(nèi)內(nèi)存的特特定區(qū)域域)。每個文件件都應(yīng)有有一個唯唯一的磁磁盤索引引節(jié)點(diǎn),,文件被被打開后后,還應(yīng)應(yīng)有內(nèi)存存索引節(jié)節(jié)點(diǎn)。11目錄項(xiàng):由文文件名和和磁盤i節(jié)點(diǎn)標(biāo)標(biāo)識符id組成成。系統(tǒng)打開開文件表表、用戶戶打開文文件表:記錄錄和控制制打開文文件的用用戶進(jìn)程程以及記記錄和控控制那些些共享同同一文件件的用戶戶進(jìn)程。。其中::用戶打開開文件表表:存放打開開文件的的描述符符fd;系統(tǒng)打開開文件表表:記錄錄打開同同一文件件的不同同進(jìn)程程和不同同進(jìn)程所所使用的的不同打打開路徑徑,及其其對應(yīng)的的讀寫指指針。文件名i節(jié)點(diǎn)編號id12資源管理理的任務(wù)務(wù):空閑磁盤盤塊的分分配i節(jié)點(diǎn)的的分配系統(tǒng)打開開文件表表的分配配空閑磁盤盤塊的回回收i節(jié)點(diǎn)的的回收系統(tǒng)打開開文件表表的回收收9.3資源管理理和地址址映射13空閑磁盤盤塊的管管理UNIX對文件件存儲空空間的管管理在磁磁盤上,,UNIX總是是把文件件安排在在一般數(shù)數(shù)據(jù)存儲儲區(qū)。因因此,UNIX對文件件存儲空空間的管管理,即即是對磁磁盤上一一般數(shù)據(jù)據(jù)存儲區(qū)區(qū)的管理理。前面面第7章章介紹使使用“空空閑塊鏈鏈”管理理磁盤上上的空閑閑塊時,,曾提及及“成組鏈接接”法,并并說UNIX操操作系統(tǒng)統(tǒng)就是采采用這種種方法來來管理磁磁盤上的的空閑塊塊的。這這種方法法是將若若干個((如100)空空閑盤塊塊劃歸為為一個組組,將每每組在中中的所有有盤塊號號存放在在其前一一組的第第一個空空閑盤塊塊中,而而僅把第第一組中中的所有有空閑塊塊號放入入超級塊塊(filsys結(jié)構(gòu)構(gòu))中。。下面簡單單介紹它它的實(shí)現(xiàn)現(xiàn)過程。。14在磁盤管管理區(qū)filsys結(jié)結(jié)構(gòu)中,,有兩個個內(nèi)容涉涉及到磁磁盤空閑閑塊的管管理,一一個是由由數(shù)組s_free[100]構(gòu)成的一一個空閑閑磁盤塊塊索引表表。當(dāng)一一個文件件要申請請磁盤塊塊時,就就到這個個索引表表中去獲獲得需要要的空閑閑塊;當(dāng)當(dāng)一個磁磁盤塊被被釋放時時,就把把它還回回到這個個索引表表中。所所以,這這個索引引表中記記錄的是是當(dāng)前系系統(tǒng)可以以直接分分配的空空閑磁盤盤塊。另另一個是是s_nfree,它記錄錄了s_free[]中現(xiàn)現(xiàn)有的可可分配的的空閑磁磁盤塊數(shù)數(shù)。從形式上上看,利利用數(shù)組組s_free[100]直直接管理理100個空閑閑的磁盤盤塊,與與利用數(shù)數(shù)組s_inode[100]直接接管理100個個空閑的的i節(jié)點(diǎn)點(diǎn)相類似似,但實(shí)實(shí)際上相相差很遠(yuǎn)遠(yuǎn)。因?yàn)闉槌@100個個直接管管理的空空閑塊外外,UNIX對對其余的的空閑塊塊并沒有有放置不不管,而而是將它它們分組組進(jìn)行鏈鏈接。具具體做法法如下圖圖所示。。1516UNIX把磁盤盤上一般般數(shù)據(jù)存存儲區(qū)中中的所有有空閑塊塊依次分分組。為為了下面面講述方方便,對對每一組組的塊都都進(jìn)行分分別編號號。具體體的辦法法是:第第1組為為99塊塊,編號號為1~99((為什么么第1組組只有99塊,,后面會會給出解解釋)。。從第2組起,,每組都都是100塊,,剩下的的塊歸并并成為最最后一組組。它們們都按0~99的順序序進(jìn)行編編號。在在圖中,,從右至至左反映映了這種種分組的的結(jié)構(gòu)。。在圖中中,假定定最后一一組中只只有52個空閑閑塊,各各塊的編編號為0~51。分好組以以后,總總是在后后一組的的第0塊塊中開辟辟101個位置置,依次次存放前前一組的的總塊數(shù)數(shù)以及前前一組中中每一塊塊的地址址。也就就是說,,相當(dāng)于于總是在在后一組組中,開開辟s_nfree和和s_free[100]所所需要的的位置,,用于存存放前一一組的分分組信息息。17在此,有有兩組的的情況要要做特殊殊處理。。一個是是第1組組。在第第1組中中,實(shí)際際只有99個空空閑塊。。為了管管理的需需要,把把它的總總塊數(shù)仍仍記為100,,見圖中中第2組組里的s_nfree=100。另另外,第第一組磁磁盤塊編編號是從從1開始始的,因因此在相相當(dāng)于第第0號磁磁盤塊的的位置存存放一個個0,而而不是某某一個磁磁盤塊的的地址,,見圖中中第2組組中的s_free[0]=0。18另一個要要特殊處處理的是是最后一一組。因因?yàn)樵谧钭詈笠唤M組的后面面已經(jīng)沒沒有下一一組了,,所以UNIX就把它它的所有有信息存存放在管管理塊的的filsys中,即即存放在在filsys的s_nfree和和s_free[100]中中。由于于現(xiàn)在最最后一組組只有52個空空閑塊,,因此在在filsys中的s_nfree取值為為52,,并且只只用到數(shù)數(shù)組s_free[100]的前52個元元素,即即用s_free[0]到s_free[51]存放最最后一組組的52個空閑閑塊的地地址。至此,成成組鏈接接的格局局已經(jīng)完完成:在在filsys的s_free[]中,,記錄了了當(dāng)前直直接可以以分配的的52個個空閑塊塊。在這這52個個空閑塊塊的第0塊中,,記錄了了下一組組100個空閑閑的磁盤盤塊地址址,下一一組100個空空閑的第第0塊中中,記錄錄了再下下一組100個個空閑的的磁盤塊塊地址,,如此等等等。19在采用““成組鏈鏈接”法法后,如如何分配配空閑塊塊,如何何回收空空閑塊??下面來來討論這這兩個問問題。無無論是磁磁盤空閑閑塊的分分配還是是回收,,都是在在filsys中的空空閑磁盤盤塊索引引表s_free[]中進(jìn)進(jìn)行,并并把它視視為一個個棧。分分配時,,做出棧棧操作;;回收時時,做進(jìn)進(jìn)棧操作作。s_nfree中記錄錄的值,,是s_free[]中當(dāng)當(dāng)前實(shí)際際有的空空閑塊數(shù)數(shù),正好好也是空空閑磁盤盤塊索引引表s_free[]中下下一個可可以使用用的索引引表目的的下標(biāo)。。20因此,總總是先在在s_nfree上做做減1操操作,然然后把s_free[s_nfree]中中記錄的的磁盤塊塊分配出出去。這這里要注注意的是是,如果果在s_nfree上上做減1操作后后,其值值等于0了,那那么就是是要把s_free[0]所所指向的的那一個個磁盤空空閑塊分分配出去去。由于于它是這這一組的的第0個個磁盤塊塊(按照照分配順順序,它它總是在在一組中中最后被被分配出出去),,里面包包含有它它前一組組空閑塊塊的信息息在內(nèi)。。因此在在把這一一塊分配配出去之之前,應(yīng)應(yīng)該先把把它記錄錄的101個信信息拷貝貝到filsys結(jié)構(gòu)構(gòu)的s_nfree和和s_free[]里面去去,然后后才能將將它分配配出去。。21分配時還還要注意意的一個個問題是是如果分分配一直直進(jìn)行,,現(xiàn)在要要把第2組的第第0塊分分配出去去。根據(jù)據(jù)前面所所說,先先把這塊塊中記錄錄的101個信信息拷貝貝到filsys結(jié)構(gòu)構(gòu)的s_nfree和和s_free[]里面去去,然后后才將它它分配出出去。這這意味著著系統(tǒng)現(xiàn)現(xiàn)在只有有最后99塊能能夠分配配了。如如果分配配仍然繼繼續(xù),直直到把這這99塊塊全部分分配出去去。此時時,filsys中的的s_nfree=1,s_free[0]=0。若再再申請空空閑塊,,s_nfree減1后成為為0,即即要把s_free[0]所所指的塊塊分配出出去。此此時發(fā)現(xiàn)現(xiàn)s_free[0]=0,,而不是是一個磁磁盤塊的的地址,,表明所所有的磁磁盤空閑閑塊都分分配出去去了,提提出請求求的進(jìn)程程只能阻阻塞等待待。所以以,這就就是前面面分組時時把第1組只分分99個個空閑塊塊,但仍仍然算這這組有100個個塊,并并將第0塊指針針處安放放一個0的原因因。22進(jìn)行空閑塊塊的回收時時,就是將將該塊的地地址登記在在空閑磁盤盤塊索引表表的s_free[s_nfree]表目中,然后讓s_nfree加1。不過要要注意,在在把釋放塊塊的地址存存入索引表表s_free[]的表之之前,必須須檢查s_nfree的取值值。如果發(fā)發(fā)現(xiàn)s_nfree等于100,那么么表明這時時空閑磁盤盤塊索引表表在此之前前已經(jīng)收集集滿了100個空閑閑的磁盤塊塊,它們應(yīng)應(yīng)該形成一一個新的鏈鏈組。現(xiàn)在在要釋放的的一塊,是是下一組空空閑塊的第第0塊。于于是,就把把filsys中的的s_nfree和和s_free[0]~s_free[99]共101個值存入入新釋放塊塊中,然后后將此塊的的地址填入入s_free[0]中,將將s_nfree置置為1。239.3.1磁盤i節(jié)點(diǎn)的管管理基本思想:在給新建建文件分配配磁盤存儲儲區(qū)之前,,為其分配配磁盤i節(jié)節(jié)點(diǎn),以將將文件的有有關(guān)信息記記入其中,,并將用戶戶提供的文文件名和磁磁盤i節(jié)點(diǎn)點(diǎn)號一并組組成一個新新目錄項(xiàng),,記入其父父目錄文件件中;刪刪除文件時時,回收所所分配的磁磁盤i節(jié)點(diǎn)點(diǎn)項(xiàng)。分配算法:借助于i節(jié)點(diǎn)線性性表利用ialloc算法((UNIXSystemV)進(jìn)行行的,具體體分配過程程見P232回收算法:利用ifee算法法249.3.2內(nèi)存i節(jié)點(diǎn)的管管理基本思想:系統(tǒng)打開開文件進(jìn)行行搜索或讀讀寫等操作作時,為其其分配內(nèi)存存i節(jié)點(diǎn),,以存放從從磁盤i節(jié)節(jié)點(diǎn)拷貝過過來的信息息,方便用用戶或系統(tǒng)統(tǒng)對文件的的訪問;刪刪除文件件時,回收收所分配的的磁盤i節(jié)節(jié)點(diǎn)項(xiàng)。分配配:利利用用過過程程iget實(shí)實(shí)現(xiàn)現(xiàn)回收收:利利用用過過程程iput實(shí)實(shí)現(xiàn)現(xiàn)259.3.3系系統(tǒng)統(tǒng)打打開開文文件件表表的的管管理理系統(tǒng)統(tǒng)打打開開文文件件表表:記記錄錄打打開開同同一一文文件件的的不不同同進(jìn)進(jìn)程程和和不不同同進(jìn)進(jìn)程程所所使使用用的的不不同同打打開開路路徑徑,,及及其其對對應(yīng)應(yīng)的的讀讀寫寫指指針針。。分配配:利利用用getf過過程程實(shí)實(shí)現(xiàn)現(xiàn)回收收:利利用用closef過過程程實(shí)實(shí)現(xiàn)現(xiàn)269.3.4地地址址映映射射前面面提提及及,,UNIX文文件件的的物物理理結(jié)結(jié)構(gòu)構(gòu)采采用用的的是是索索引引結(jié)結(jié)構(gòu)構(gòu),,這這種種索索引引結(jié)結(jié)構(gòu)構(gòu)是是通通過過每每個個文文件件i節(jié)節(jié)點(diǎn)點(diǎn)中中的的數(shù)數(shù)組組di_addr[]來來形形成成文文件件存存儲儲索索引引表表的的。。該該數(shù)數(shù)組組總總共共有有13個個元元素素,,每每個個元元素素為為一一個個索索引引項(xiàng)項(xiàng)。。前前10個個索索引引項(xiàng)項(xiàng)直直接接指指向向文文件件數(shù)數(shù)據(jù)據(jù)存存放放的的磁磁盤盤塊塊號號,,后后3個個索索引引項(xiàng)項(xiàng)分分別別構(gòu)構(gòu)成成一一次次間間接接索索引引、、二二次次間間接接索索引引和和三三次次間間接接索索引引的的多多級級索索引引結(jié)結(jié)構(gòu)構(gòu)。。這這樣樣,,UNIX可可以以根根據(jù)據(jù)文文件件的的大大小小,,通通過過使使用用這這張張存存儲儲索索引引表表,,形形成成小小型型、、中中型型、、大大型型和和巨巨型型等等不不同同規(guī)規(guī)模模的的文文件件。。27小型型文文件件的的索索引引結(jié)結(jié)構(gòu)構(gòu):通通常常,,每每個個磁磁盤盤塊塊為為512個個字字節(jié)節(jié)。。當(dāng)當(dāng)一一個個文文件件的的長長度度在在1~10個個磁磁盤盤塊塊之之間間時時,,就就稱稱為為小小型型文文件件。。這這時時,,用用文文件件i節(jié)節(jié)點(diǎn)點(diǎn)中中數(shù)數(shù)組組di_addr[]的的前前10個個表表目目,,直直接接指指向向文文件件數(shù)數(shù)據(jù)據(jù)存存放放的的磁磁盤盤塊塊號號。。因因此此,,在在UNIX中中,,小小型型文文件件是是通通過過i節(jié)節(jié)點(diǎn)點(diǎn)中中的的數(shù)數(shù)組組di_addr[]構(gòu)構(gòu)成成一一級級索索引引表表而而獲獲得得文文件件在在磁磁盤盤上上的的存存儲儲位位置置的的。。如下下圖圖所所示示。。2829中型型文文件件的的索索引引結(jié)結(jié)構(gòu)構(gòu):當(dāng)一一個個文文件件的的長長度度在在10~138磁磁盤盤塊塊內(nèi)內(nèi)時時,,就就成成為為一一個個UNIX的的中中型型文文件件。。這這時時除除了了用用到到di_addr[0]~di_addr[9]外外,,還還要要用用到到di_addr[10],,如如下下圖圖所所示示。。在圖圖中中,,di_addr[0]~di_addr[9]仍仍然然直直接接指指向向文文件件數(shù)數(shù)據(jù)據(jù)存存放放的的10個個磁磁盤盤塊塊號號,,然然后后又又利利用用di_addr[10]指指向向一一個個磁磁盤盤塊塊。。這這塊塊并并不不存存放放文文件件的的數(shù)數(shù)據(jù)據(jù),,而而是是利利用用它它形形成成又又一一級級的的索索引引。。在在UNIX中中,,用用4個個字字節(jié)節(jié)放放一一個個磁磁盤盤塊塊號號,,因因此此在在這這個個盤盤塊塊中中,,可可以以放放128個個磁磁盤盤塊塊號號。。這這樣樣一一來來,,通通過過di_addr[10]提提供供的的索索引引,,一一個個文文件件就就可可以以達(dá)達(dá)到到138個個磁磁盤盤存存儲儲塊塊這這么么大大。。3031大型和巨型文文件的索引結(jié)結(jié)構(gòu):當(dāng)一個文文件的長度在在138~16522磁磁盤塊內(nèi)時,,就成為一個個UNIX的的大型文件。。這時除了用用到di_addr[0]~di_addr[9]外,,要用到di_addr[10],,還要用到di_addr[11]。在圖中,di_addr[0]~di_addr[9]直直接指向文件件數(shù)據(jù)存放的的10個磁盤盤塊號。然后后如同前面那那樣,利用di_addr[10]指向一個磁磁盤塊,由它它提供128個磁盤塊的的索引,從而而使文件總共共達(dá)到138個磁盤存儲儲塊這么大。。但這還不夠夠,又利用di_addr[11]指向一個磁磁盤塊,由它它指向128個磁盤塊,,每個都是一一個索引。這這樣,通過這這128個索索引、每個指指向128個個磁盤塊,就就又可以得到到16384個磁盤塊。。于是,UNIX的大型型文件最多可可以擁有16522個磁磁盤塊(即10+128+16384)。3233當(dāng)一個文件所所需的磁盤塊塊大于16522個磁盤盤塊時,就成成為UNIX的巨型文件件了。這時除除了用到di_addr[0]~di_addr[9]外外,還要用到到di_addr[10]、di_addr[11]和di_addr[12]。此時,文文件的最大長長度可以達(dá)到到約11億個個字節(jié),但是是由于此時要要經(jīng)過多次間間接索引,會會使系統(tǒng)的查查找速度大大大降低。349.4目錄與檢索方方法目錄的構(gòu)造和和刪除創(chuàng)建一新文件件時,UNIX系統(tǒng)利用用makenode過程程在其父目錄錄文件中為之之構(gòu)造一個目目錄項(xiàng)。目錄的檢索由namei過程利用散散列搜索法完完成,其根據(jù)據(jù)用戶給出的的文件路徑名名,從高層到到低層順序地地查找各級文文件目錄,尋尋找指定文件件的內(nèi)存i節(jié)節(jié)點(diǎn)指針。359.5文件系統(tǒng)的系系統(tǒng)調(diào)用UNIX提供供了一些系統(tǒng)統(tǒng)調(diào)用命令,,以便用戶在在程序一級完完成對文件的的操作。有關(guān)關(guān)的系統(tǒng)調(diào)用用是:creat、open、read、write、close、、chdir、chown、chmod、link和unlink等等。下面對它它們各自的功功能做粗略的的描述。creat((建立文件))open(打打開文件)close((關(guān)閉文件))read(讀讀)write((寫)36link(鏈鏈接)系統(tǒng)調(diào)用link可以為為一個已經(jīng)存存在的文件開開辟一條新的的路徑,也就就是說,可以以為一個文件件再取一個新新的名字。它它的使用格式式是:link(pathname1,pathname2);;其中參數(shù)pathname1是原文文件的路徑名名,參數(shù)pathname2為其新新取的路徑名名。link處理理程序先按照照參數(shù)pathname2的指點(diǎn),,將新的文件件名登記到指指定的路徑目目錄中。然后后根據(jù)pathname1,找到原原文件所對應(yīng)應(yīng)的i節(jié)點(diǎn)編編號,將該號號填入新文件件的文件目錄錄中。由于每每個文件的i節(jié)點(diǎn)編號是是惟一的,因因此經(jīng)過link之后,,兩個不同路路徑名的文件件就與同一個個文件相對應(yīng)應(yīng)了。37unlink(去鏈接)38比如考慮上圖圖的情形。zong和wang要共共同完成一項(xiàng)項(xiàng)工作。zong為了訪訪問對方的文文件x,只能能通過“/usr/wang/x””才能達(dá)到目目的。但如果果通過命令::link(/usr/wang/x,/usr/zong/k);那么,若當(dāng)前前目錄為zong,則zong直接接通過k就能能夠訪問wang的文件件x了,這是是因?yàn)閘ink命令在zong的文文件k和wang的文件件x之間建立立了鏈接的緣緣故。如圖(b)所示。。399.6UNIX的設(shè)備管理UNIX設(shè)備備管理概述UNIX是根根據(jù)設(shè)備與內(nèi)內(nèi)存之間信息息交換的單位位來對設(shè)備進(jìn)進(jìn)行分類的,,因此在整個個系統(tǒng)中,歸歸到設(shè)備管理理的有兩類設(shè)設(shè)備:塊設(shè)備和字符設(shè)備。前者與內(nèi)存存之間以成組組信息為單位位進(jìn)行信息交交換,比如硬硬盤、軟盤、、磁帶都屬于于塊設(shè)備。由由于這些設(shè)備備是用來存儲儲信息的,因因此有時把它它們稱為存儲儲設(shè)備;后者者與內(nèi)存之間間以字節(jié)為單單位進(jìn)行信息息交換,比如如鍵盤輸入、、顯示器和打打印機(jī)等都屬屬于字符設(shè)備備之列。由于于這些設(shè)備主主要供計(jì)算機(jī)機(jī)接收外部信信息,或把加加工完畢的信信息傳遞給外外部世界,因因此也被稱為為輸入/輸出出設(shè)備。40為了識識別每每一個個具體體的設(shè)設(shè)備,,UNIX是這這樣做做的::每一一類設(shè)設(shè)備附附有一一個編編號,,稱為為“主主設(shè)備備號””,同同類設(shè)設(shè)備中中的不不同設(shè)設(shè)備也也給予予一個個編號號,稱稱為““次設(shè)設(shè)備號號”。。在請請求設(shè)設(shè)備進(jìn)進(jìn)行輸輸入輸輸出時時,必必須指指定主主設(shè)備備號和和次設(shè)設(shè)備號號。這這樣,,由主主設(shè)備備號判判定由由哪個個驅(qū)動動程序序工作作;驅(qū)驅(qū)動程程序根根據(jù)次次設(shè)備備號確確定控控制哪哪臺設(shè)設(shè)備去去完成成所需需要的的I/O。。從前面面對UNIX文文件管管理的的講述述可知知,UNIX把把塊設(shè)設(shè)備和和字符符設(shè)備備都視視為特特殊文文件來來對待待,它它們的的文件件目錄錄都在在子目目錄dev下。。由于于它們們是文文件,,因此此有自自己的的i節(jié)節(jié)點(diǎn)。。為了了與其其他文文件加加以區(qū)區(qū)分,,在它它們的的索引引節(jié)點(diǎn)點(diǎn)中,,把““文件件類型型”欄欄置為為“塊塊”或或“字字符””。由由此表表明它它們不不是普普通文文件,,也不不是目目錄文文件,,而是是設(shè)備備文件件,并并且由由此也也能區(qū)區(qū)分是是塊設(shè)設(shè)備文文件還還是字字符設(shè)設(shè)備文文件。。41在UNIX中,,是通通過系系統(tǒng)調(diào)調(diào)用creat來建建立新新文件件的。。但設(shè)設(shè)備文文件不不能用用普通通的方方法來來創(chuàng)建建,并并且也也不是是誰都都有權(quán)權(quán)來創(chuàng)創(chuàng)建。。如果果要創(chuàng)創(chuàng)建一一個新新的設(shè)設(shè)備文文件,,則應(yīng)應(yīng)該由由系統(tǒng)統(tǒng)管理理員通通過系系統(tǒng)調(diào)調(diào)用mknod來完完成。。它的的使用用格式式是((P250):mknod(pathname,,mode,dev);其中,,參數(shù)數(shù)pathname是文文件的的路徑徑名,,mode指出出文件件的類類型((B表表示塊塊設(shè)備備,C表示示字符符設(shè)備備),,dev是是主設(shè)設(shè)備號號和次次設(shè)備備號的的組合合。比比如有有如下下命令令:mknod(/dev/abc,,C,,212);;表示要要在根根目錄錄的子子目錄錄dev下下,創(chuàng)創(chuàng)建一一個名名為abc的文文件((由于于它建建立在在子目目錄dev下,,因此此它是是一個個設(shè)備備文件件),,由于于mode=““C””,因因此是是一個個字符符設(shè)備備文件件,該該設(shè)備備的主主設(shè)備備號是是2,,次設(shè)設(shè)備號號是12。。429.6.1塊設(shè)備備的管管理UNIX在在塊設(shè)設(shè)備和和內(nèi)存存之間間安放放了緩緩沖區(qū)區(qū),通通過它它使塊塊設(shè)備備與內(nèi)內(nèi)存間間的數(shù)數(shù)據(jù)流流動在在速度度上能能夠匹匹配,,從而而達(dá)到到減少少內(nèi)、、外存存?zhèn)鬏斴敶螖?shù)數(shù)的目目的。。如圖圖所示示。對對于寫寫操作作,先先是把把內(nèi)存存用戶戶區(qū)中中的數(shù)數(shù)據(jù)拷拷貝到到緩沖沖區(qū),,再從從緩沖沖區(qū)輸輸出到到設(shè)備備;對對于讀讀操作作,先先從設(shè)設(shè)備接接收數(shù)數(shù)據(jù)到到緩沖沖區(qū),,再將將緩沖沖區(qū)中中的數(shù)數(shù)據(jù)拷拷貝到到指定定的內(nèi)內(nèi)存用用戶區(qū)區(qū)。43塊設(shè)備的每每一個緩沖沖區(qū)長度為為512個個字節(jié)或1024個個字節(jié),這這要由文件件系統(tǒng)來確確定。由一一個個緩沖沖區(qū),組成成了供塊設(shè)設(shè)備輸入/輸出使用用的緩沖池池。為了便便于管理,,UNIX把緩沖池池中的每個個緩沖區(qū)分分成兩個部部分:一個個是真正用用于存放數(shù)數(shù)據(jù)的部分分,一個是是用于管理理的部分。。前者仍稱稱為“緩沖區(qū)”,后者稱稱為“緩沖區(qū)控制制塊”,并在緩緩沖區(qū)和緩緩沖區(qū)控制制塊之間保保持一一對對應(yīng)的關(guān)系系。圖9.10給出出了緩沖區(qū)區(qū)控制塊的的內(nèi)容和它它與緩沖區(qū)區(qū)的對應(yīng)關(guān)關(guān)系。44451.空閑緩沖區(qū)區(qū)隊(duì)列(av隊(duì)列列)為了構(gòu)成系系統(tǒng)中空閑閑緩沖區(qū)隊(duì)隊(duì)列,UNIX設(shè)置置了一個名名為bfreelist的控控制塊,它它的結(jié)構(gòu)與與緩沖區(qū)控控制塊相同同,里面的的av_forw和和av_back就就是塊設(shè)備備空閑緩沖沖區(qū)隊(duì)列的的首指針和和尾指針,,如圖9.11所示示。4647對于空閑緩緩沖區(qū)隊(duì)列列,有兩點(diǎn)點(diǎn)要說明::第一,這這個由緩沖沖區(qū)控制塊塊構(gòu)成的隊(duì)隊(duì)列是一個個雙向鏈表表,它們通通過各自的的前向指針針av_forw和和后向指針針av_back鏈鏈接在一起起,形成隊(duì)隊(duì)列。第二二,UNIX對這個個隊(duì)列采用用先進(jìn)先出出(FIFO)的管管理算法。。即當(dāng)釋放放一個緩沖沖區(qū)時,與與之對應(yīng)的的緩沖區(qū)控控制塊就被被鏈入到空空閑緩沖區(qū)區(qū)隊(duì)列之尾尾;當(dāng)申請請一個緩沖沖區(qū)時,就就把空閑緩緩沖區(qū)隊(duì)列列之首的那那個緩沖區(qū)區(qū)控制塊摘摘下分配出出去,這也也就意味著著是把這個個緩沖區(qū)控控制塊所對對應(yīng)的緩沖沖區(qū)分配出出去。482.設(shè)備緩緩沖區(qū)隊(duì)列列(設(shè)備b鏈鏈,散列隊(duì)隊(duì)列)這是由緩沖沖區(qū)控制塊塊組成的第第二種隊(duì)列列,是UNIX對緩緩沖區(qū)管理理的一大特特色。下面面來說明這這是一個什什么隊(duì)列,,為什么要要組成它。。49緩沖池中的的緩沖區(qū)資資源是有限限的,為了了能夠?qū)λ鼈兂浞值氐丶右岳糜茫约皩λ鼈兝锩婷娲娣诺臄?shù)數(shù)據(jù)信息最最大限度地地加以利用用,UNIX提出了了這樣的設(shè)設(shè)想:一個個已經(jīng)在空空閑緩沖區(qū)區(qū)隊(duì)列中的的緩沖區(qū)控控制塊,在在它未被挪挪為它用之之前,它對對應(yīng)的緩沖沖區(qū)中保存存的仍然是是磁盤上某某塊中的數(shù)數(shù)據(jù)信息。。如果這時時根據(jù)需要要又要對該該磁盤塊進(jìn)進(jìn)行操作,,那么大可可不必去通通過啟動I/O獲得得盤塊上的的數(shù)據(jù),這這些數(shù)據(jù)還還在原來的的緩沖區(qū)中中完好無損損地保存著著,只要拿拿來就可以以使用。這這樣做的結(jié)結(jié)果是減少少了I/O次數(shù),大大大提高了了系統(tǒng)的工工作效率。。50出自于這些些考慮,UNIX一一方面仍然然是讓被釋釋放緩沖區(qū)區(qū)所對應(yīng)的的緩沖區(qū)控控制塊鏈入入到空閑緩緩沖區(qū)隊(duì)列列之尾,以以便能夠它它用。另一一方面又設(shè)設(shè)置了一個個新的隊(duì)列列:設(shè)備緩緩沖區(qū)隊(duì)列列,即把為為某個設(shè)備備服務(wù)的緩緩沖區(qū)所對對應(yīng)的緩沖沖區(qū)控制塊塊全都匯集集在一起,,形成了這這個設(shè)備的的設(shè)備緩沖沖區(qū)隊(duì)列。。一個設(shè)備備的設(shè)備緩緩沖區(qū)隊(duì)列列由緩沖區(qū)區(qū)控制塊中中的d_forw和和d_back指針針進(jìn)行鏈接接,前者為為前向指針針,后者為為后向指針針。該隊(duì)列列的首、尾尾指針是設(shè)設(shè)備表中的的d_forw和d_back。整個個隊(duì)列如下下圖所示。。5152幾點(diǎn)說明::(1)這個個由緩沖區(qū)區(qū)控制塊構(gòu)構(gòu)成的隊(duì)列列是一個雙雙向鏈表,,它們通過過各自的前前向指針b_forw和后向向指針b_back鏈接在一一起,形成成隊(duì)列。(2)當(dāng)一一個緩沖區(qū)區(qū)被分配給給某個塊設(shè)設(shè)備做輸入入/輸出用用時,它所所對應(yīng)的緩緩沖區(qū)控制制塊就從隊(duì)隊(duì)首插入到到隊(duì)列里。。(3)當(dāng)一一個緩沖區(qū)區(qū)控制塊插插入到一個個設(shè)備的設(shè)設(shè)備緩沖區(qū)區(qū)隊(duì)列中之之后,即便便該緩沖區(qū)區(qū)被釋放,,它也仍然然在這個隊(duì)隊(duì)列中排著著。這就是是說,在任任何時刻,,UNIX中的任何何一個緩沖沖區(qū)控制塊塊,總會在在空閑緩沖沖區(qū)隊(duì)列、、設(shè)備緩沖沖區(qū)隊(duì)列以以及設(shè)備輸輸入/輸出出隊(duì)列這三三個隊(duì)列中中的兩個里里排隊(duì),或或是在空閑閑緩沖區(qū)隊(duì)隊(duì)列、設(shè)備備緩沖區(qū)隊(duì)隊(duì)列里面排排著,或是是在設(shè)備緩緩沖區(qū)隊(duì)列列、設(shè)備輸輸入/輸出出隊(duì)列里面面排著。(4)只有有當(dāng)一個緩緩沖區(qū)的服服務(wù)對象改改變(比如如原來被分分配給磁盤盤1使用,,現(xiàn)在被分分配給磁盤盤2使用了了)時,該該緩沖區(qū)所所對應(yīng)的緩緩沖區(qū)控制制塊才會從從一個設(shè)備備緩沖區(qū)隊(duì)隊(duì)列上摘下下,進(jìn)入到到另一個設(shè)設(shè)備緩沖區(qū)區(qū)隊(duì)列中;;否則即便便緩沖區(qū)被被釋放,它它仍然保持持在原來的的設(shè)備緩沖沖區(qū)隊(duì)列中中。533.輸入入/輸出出請求隊(duì)隊(duì)列(塊設(shè)備av鏈))當(dāng)用戶對對塊設(shè)備備提出輸輸入/輸輸出請求求時,首首先要申申請一個個空閑的的緩沖區(qū)區(qū)控制塊塊(注意意:申請請到空閑閑的緩沖沖區(qū)控制制塊,就就意味著著申請到到了存放放數(shù)據(jù)的的緩沖區(qū)區(qū),因?yàn)闉樗鼈兪鞘且灰粚?yīng)的)),并把把這次輸輸入/輸輸出請求求具體要要完成的的任務(wù)填填入到緩緩沖區(qū)控控制塊中中(數(shù)據(jù)據(jù)源的地地址、目目的地址址、傳輸輸?shù)膫€數(shù)數(shù)等等))。因此此,UNIX把把向主設(shè)設(shè)備號相相同的設(shè)設(shè)備提出出的I/O請求求所對應(yīng)應(yīng)的緩沖沖區(qū)控制制塊鏈接接在一起起,形成成對這個個設(shè)備的的輸入/輸出請請求隊(duì)列列。該隊(duì)隊(duì)列的首首指針就就是這個個設(shè)備的的設(shè)備表表里的d_actf,,尾指針針是d_actl。如如下圖所所示。5455對于塊設(shè)設(shè)備的輸輸入/輸輸出請求求隊(duì)列有有三點(diǎn)說說明:第第一,它它是一個個單鏈表表,不像像空閑緩緩沖區(qū)隊(duì)隊(duì)列,那那里給出出的是一一個雙向向鏈表。。第二,,由于一一個緩沖沖區(qū)控制制塊不可可能同時時在空閑閑緩沖區(qū)區(qū)隊(duì)列和和輸入/輸出請請求隊(duì)列列,因此此,在輸輸入/輸輸出請求求隊(duì)列中中,就借借用緩沖沖區(qū)控制制塊中的的av_forw指針針來構(gòu)成成單鏈表表(這個個指針在在空閑緩緩沖區(qū)隊(duì)隊(duì)列里是是前向指指針)。。第三,,UNIX對這這個隊(duì)列列采用
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 化學(xué)原料藥工程設(shè)計(jì)行業(yè)直播電商戰(zhàn)略研究報告
- 14一丁烯二醇行業(yè)跨境出海戰(zhàn)略研究報告
- 2025-2030高鐵市場前景分析及投資策略與風(fēng)險管理研究報告
- 2025-2030防水燈具行業(yè)市場現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評估規(guī)劃分析研究報告
- 2025-2030鐵路運(yùn)輸設(shè)備行業(yè)發(fā)展分析及前景趨勢與投資研究報告
- 2025-2030造口引流袋行業(yè)市場現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評估規(guī)劃分析研究報告
- 特殊教育數(shù)學(xué)教師指導(dǎo)計(jì)劃
- 重癥監(jiān)護(hù)室護(hù)理流程管理
- 中小學(xué)教師校本研修計(jì)劃
- 體育-王文兵-《中長跑的技術(shù)動作分析與訓(xùn)練》教學(xué)設(shè)計(jì)
- YDT 4492-2023工業(yè)互聯(lián)網(wǎng) 時間敏感網(wǎng)絡(luò)技術(shù)要求
- 徐州2024年江蘇徐州睢寧縣招聘教師306人筆試歷年典型考題及考點(diǎn)附答案解析
- 設(shè)計(jì)和開發(fā)控制程序-國軍標(biāo)
- 紀(jì)念中國第一顆原子彈爆炸50周年
- 江西省南昌二十八中教育集團(tuán)2023-2024學(xué)年八年級下學(xué)期期中考試數(shù)學(xué)試卷
- 中考數(shù)學(xué)專題復(fù)習(xí)《代數(shù)推理題》知識點(diǎn)梳理及典例講解課件
- 第十六章-中國文化的基本精神
- 小學(xué)語文六年級下冊第三單元作業(yè)設(shè)計(jì)
- 醫(yī)院感染防控月度考核檢查表(稿)
- 三重一大培訓(xùn)課件
- 綿竹事業(yè)單位筆試試題2024
評論
0/150
提交評論