文件和設(shè)備管理示例ppt課件_第1頁
文件和設(shè)備管理示例ppt課件_第2頁
文件和設(shè)備管理示例ppt課件_第3頁
文件和設(shè)備管理示例ppt課件_第4頁
文件和設(shè)備管理示例ppt課件_第5頁
已閱讀5頁,還剩122頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第9章章 文件和設(shè)備管理例如文件和設(shè)備管理例如9.1 文件系統(tǒng)的特點與文件類別文件系統(tǒng)的特點與文件類別9.2 文件系統(tǒng)的數(shù)據(jù)構(gòu)造及其關(guān)系文件系統(tǒng)的數(shù)據(jù)構(gòu)造及其關(guān)系9.3 資源管理和地址映射資源管理和地址映射9.4 目錄與搜索方法目錄與搜索方法9.5 文件系統(tǒng)的系統(tǒng)調(diào)用文件系統(tǒng)的系統(tǒng)調(diào)用9.6 UNIX System 的中斷和圈套總控程序的中斷和圈套總控程序9.7 緩沖區(qū)管理緩沖區(qū)管理9.8 塊設(shè)備驅(qū)動塊設(shè)備驅(qū)動9.9 字符設(shè)備驅(qū)動字符設(shè)備驅(qū)動本章小結(jié)本章小結(jié)習(xí)題習(xí)題9.1 文件系統(tǒng)的特點與文件類別文件系統(tǒng)的特點與文件類別 9.1.1 特點特點 本章經(jīng)過本章經(jīng)過 UNIX 的文件系統(tǒng)來進一步深

2、化了解的文件系統(tǒng)來進一步深化了解文件系統(tǒng)與操作系統(tǒng)其他部分的關(guān)系以及文文件系統(tǒng)與操作系統(tǒng)其他部分的關(guān)系以及文件系統(tǒng)的設(shè)計方法。從用戶的角度看,件系統(tǒng)的設(shè)計方法。從用戶的角度看,UNIX文件系統(tǒng)具有如圖文件系統(tǒng)具有如圖9.1所示的樹形層次所示的樹形層次構(gòu)造:構(gòu)造:在圖在圖9.1中,根目錄中,根目錄root之下有之下有dev設(shè)備子目錄,設(shè)備子目錄,bin適用程序子目錄,適用程序子目錄,lib庫文件子目錄,庫文件子目錄,etc 根本數(shù)據(jù)和維護適用程序子目錄,根本數(shù)據(jù)和維護適用程序子目錄,tmp暫時暫時文件子目錄,文件子目錄,usr通用子目錄和通用子目錄和include 根本根本數(shù)據(jù)子目錄等。而數(shù)據(jù)子

3、目錄等。而 UNIX 子目錄那么存放子目錄那么存放UNIX操作系統(tǒng)中心程序本身。這些子目錄操作系統(tǒng)中心程序本身。這些子目錄又由各自的子目錄構(gòu)成。又由各自的子目錄構(gòu)成。圖圖9.1 UNIX文件系統(tǒng)的層次構(gòu)造例文件系統(tǒng)的層次構(gòu)造例文件系統(tǒng)被組織成樹形構(gòu)造之后,文件名由途徑名文件系統(tǒng)被組織成樹形構(gòu)造之后,文件名由途徑名給出。途徑名確定一個文件在文件系統(tǒng)中的位置。給出。途徑名確定一個文件在文件系統(tǒng)中的位置。一個完好的途徑名由代表根目錄的斜杠開場,到所一個完好的途徑名由代表根目錄的斜杠開場,到所指定的文件為止。例如在圖指定的文件為止。例如在圖9.1中,中,“/usr/users/shi/b.exe確定了

4、文件確定了文件 b.exe在文件系統(tǒng)在文件系統(tǒng)中的位置。另外,途徑名也可從正在執(zhí)行進程的當(dāng)中的位置。另外,途徑名也可從正在執(zhí)行進程的當(dāng)前目錄開場指定,例如,假設(shè)在圖前目錄開場指定,例如,假設(shè)在圖9.1中的當(dāng)前目中的當(dāng)前目錄是錄是zhang 的話,途徑名的話,途徑名 a.exe與與/usr/users/zhang/a.exe具有一樣的效果。具有一樣的效果。普通來說,普通來說,UNIX文件系統(tǒng)還具有如下特點:文件系統(tǒng)還具有如下特點: UNIX的文件是無構(gòu)造的字符流式文件。的文件是無構(gòu)造的字符流式文件。 文件可以動態(tài)地增長或減少。文件可以動態(tài)地增長或減少。 文件數(shù)據(jù)可由文件擁有者設(shè)置相應(yīng)的訪問權(quán)限而

5、遭文件數(shù)據(jù)可由文件擁有者設(shè)置相應(yīng)的訪問權(quán)限而遭到維護。到維護。 外部設(shè)備,例如終端用磁帶、磁盤設(shè)備、鍵盤等都外部設(shè)備,例如終端用磁帶、磁盤設(shè)備、鍵盤等都被看作文件。從而,設(shè)備可經(jīng)過文件系統(tǒng)隱蔽掉設(shè)被看作文件。從而,設(shè)備可經(jīng)過文件系統(tǒng)隱蔽掉設(shè)備特性。在文件系統(tǒng)中,設(shè)備文件占據(jù)著文件系統(tǒng)備特性。在文件系統(tǒng)中,設(shè)備文件占據(jù)著文件系統(tǒng)目錄構(gòu)造中相應(yīng)的位置,用戶程序按與存取其他文目錄構(gòu)造中相應(yīng)的位置,用戶程序按與存取其他文件時所運用的系統(tǒng)調(diào)用和語法來讀、寫設(shè)備文件。件時所運用的系統(tǒng)調(diào)用和語法來讀、寫設(shè)備文件。因此,用戶程序既沒有必要知道設(shè)備的內(nèi)部特性,因此,用戶程序既沒有必要知道設(shè)備的內(nèi)部特性,也不用在

6、改換或添加設(shè)備之后修正本人。也不用在改換或添加設(shè)備之后修正本人。9.1.2 文件的分類文件的分類UNIX文件可分為普通文件、目錄文件和設(shè)備文件。文件可分為普通文件、目錄文件和設(shè)備文件。普通文件即存儲用戶和系統(tǒng)的有關(guān)數(shù)據(jù)和程序的文普通文件即存儲用戶和系統(tǒng)的有關(guān)數(shù)據(jù)和程序的文件。它是無構(gòu)造、無記錄概念的字符流式文件。件。它是無構(gòu)造、無記錄概念的字符流式文件。目錄文件那么是由文件系統(tǒng)中的各個目錄所構(gòu)成的目錄文件那么是由文件系統(tǒng)中的各個目錄所構(gòu)成的文件。這種文件在方式上同普通文件一樣,由系統(tǒng)文件。這種文件在方式上同普通文件一樣,由系統(tǒng)將其解釋成目錄。在將其解釋成目錄。在UNIX系統(tǒng)中,一個目錄文件系統(tǒng)

7、中,一個目錄文件由多個目錄項組成,而每個目錄項那么由文件名及由多個目錄項組成,而每個目錄項那么由文件名及指示相應(yīng)的文件闡明信息表指示相應(yīng)的文件闡明信息表(i節(jié)點節(jié)點) 的標(biāo)識符的標(biāo)識符id組成。組成。普通文件和目錄文件都是無構(gòu)造、無記錄概念的字普通文件和目錄文件都是無構(gòu)造、無記錄概念的字符流式文件。文件系統(tǒng)以符流式文件。文件系統(tǒng)以512 字節(jié)為一塊,文件在字節(jié)為一塊,文件在塊內(nèi)延續(xù)存放。對于普通文件和目錄文件來說,文塊內(nèi)延續(xù)存放。對于普通文件和目錄文件來說,文件的存放方式既可以是順序存取的,也可以是直接件的存放方式既可以是順序存取的,也可以是直接存取的。存取的。UNIX文件在文件系統(tǒng)中的存放采

8、用的是文件在文件系統(tǒng)中的存放采用的是索引構(gòu)造方法,從而,對文件存儲塊的分配可以是索引構(gòu)造方法,從而,對文件存儲塊的分配可以是非延續(xù)的,且文件長度可以動態(tài)變化。非延續(xù)的,且文件長度可以動態(tài)變化。設(shè)備文件與普通文件和目錄文件不同,它除了在目設(shè)備文件與普通文件和目錄文件不同,它除了在目錄文件和文件闡明信息表,也就是錄文件和文件闡明信息表,也就是 i結(jié)點中占據(jù)相結(jié)點中占據(jù)相應(yīng)的位置之外,并不占有實踐的物理存儲塊。因此,應(yīng)的位置之外,并不占有實踐的物理存儲塊。因此,對設(shè)備文件的讀、寫操作將實踐上變?yōu)閷υO(shè)備的操對設(shè)備文件的讀、寫操作將實踐上變?yōu)閷υO(shè)備的操作,而對設(shè)備文件的維護也將變成對設(shè)備的維護。作,而對

9、設(shè)備文件的維護也將變成對設(shè)備的維護。例如:例如: cp /dev/tty terminalread把在終端上敲進的字符把在終端上敲進的字符(設(shè)備文件設(shè)備文件/dev/tty是用戶終端是用戶終端) 讀入,并把它們復(fù)制到文件讀入,并把它們復(fù)制到文件 terminalread上。上。9.2 文件系統(tǒng)的數(shù)據(jù)構(gòu)造及其關(guān)系文件系統(tǒng)的數(shù)據(jù)構(gòu)造及其關(guān)系9.2.1 文件系統(tǒng)的存儲構(gòu)造文件系統(tǒng)的存儲構(gòu)造 UNIX系統(tǒng)把文件信息存儲在磁盤或磁帶上,系統(tǒng)把文件信息存儲在磁盤或磁帶上,不過,不過,UNIX系統(tǒng)的磁盤文件組織也可以當(dāng)系統(tǒng)的磁盤文件組織也可以當(dāng)作一個延續(xù)的物理塊構(gòu)成的磁帶作一個延續(xù)的物理塊構(gòu)成的磁帶文件卷文

10、件卷對待。在對待。在 UNIX 系統(tǒng)中,一個物理存儲器可系統(tǒng)中,一個物理存儲器可包含一個或多個文件系統(tǒng)。這些文件系統(tǒng)可包含一個或多個文件系統(tǒng)。這些文件系統(tǒng)可以被動態(tài)裝卸。為了簡單起見,假定在一個以被動態(tài)裝卸。為了簡單起見,假定在一個計算機系統(tǒng)中只存在一個文件系統(tǒng)。計算機系統(tǒng)中只存在一個文件系統(tǒng)。文件系統(tǒng)由每塊文件系統(tǒng)由每塊 512字節(jié)或字節(jié)或 512字節(jié)的恣意倍數(shù)所構(gòu)字節(jié)的恣意倍數(shù)所構(gòu)成的邏輯塊序列組成。在同一個文件系統(tǒng)中,這些成的邏輯塊序列組成。在同一個文件系統(tǒng)中,這些邏輯塊的大小完全一樣。塊長的選取將直接影響設(shè)邏輯塊的大小完全一樣。塊長的選取將直接影響設(shè)備與主存之間的數(shù)據(jù)傳輸速率和內(nèi)存的存

11、儲才干。備與主存之間的數(shù)據(jù)傳輸速率和內(nèi)存的存儲才干。大的塊長將使得內(nèi)存和設(shè)備之間的數(shù)據(jù)傳輸更加容大的塊長將使得內(nèi)存和設(shè)備之間的數(shù)據(jù)傳輸更加容易,但反過來又使得內(nèi)存頁面長度添加,從而影響易,但反過來又使得內(nèi)存頁面長度添加,從而影響內(nèi)存的有效存儲才干。在內(nèi)存的有效存儲才干。在 UNIX 的許多版本中,大的許多版本中,大都采用每塊都采用每塊 512字節(jié)。字節(jié)。文件卷的構(gòu)造如圖文件卷的構(gòu)造如圖9.2所示。其中第所示。其中第 0# 塊是引導(dǎo)塊塊是引導(dǎo)塊(boot block)。 引導(dǎo)塊中裝有引導(dǎo)或初啟操作系統(tǒng)引導(dǎo)塊中裝有引導(dǎo)或初啟操作系統(tǒng)的引導(dǎo)代碼。的引導(dǎo)代碼。圖圖9.2 文件系統(tǒng)存儲構(gòu)造文件系統(tǒng)存儲構(gòu)

12、造顯然,在有多個文件系統(tǒng)的計算機系統(tǒng)中,只需一顯然,在有多個文件系統(tǒng)的計算機系統(tǒng)中,只需一個文件系統(tǒng)的引導(dǎo)塊中裝有引導(dǎo)代碼,而其他的引個文件系統(tǒng)的引導(dǎo)塊中裝有引導(dǎo)代碼,而其他的引導(dǎo)塊那么是空的。導(dǎo)塊那么是空的。塊是超級塊塊是超級塊(superblock)。超級塊用來描畫文件。超級塊用來描畫文件系統(tǒng)的形狀,例如文件系統(tǒng)的大小、有關(guān)空閑區(qū)分系統(tǒng)的形狀,例如文件系統(tǒng)的大小、有關(guān)空閑區(qū)分配和回收用的堆棧等。有關(guān)超級塊的構(gòu)造將在后面配和回收用的堆棧等。有關(guān)超級塊的構(gòu)造將在后面部分進一步引見。部分進一步引見。從從2塊開場到塊開場到 K+1# 塊為止的區(qū)域被用來存放文件塊為止的區(qū)域被用來存放文件闡明信息,也

13、就是闡明信息,也就是 BFD表。表。UNIX系統(tǒng)把一個文件系統(tǒng)把一個文件的闡明信息稱為的闡明信息稱為 i節(jié)點或索引節(jié)點節(jié)點或索引節(jié)點(inode list)。索引。索引節(jié)點表的大小由系統(tǒng)管理人員在進展系統(tǒng)配置時指節(jié)點表的大小由系統(tǒng)管理人員在進展系統(tǒng)配置時指定。定。K+2# 以后的塊稱為數(shù)據(jù)塊,其中存放文件數(shù)據(jù),包以后的塊稱為數(shù)據(jù)塊,其中存放文件數(shù)據(jù),包括目錄文件數(shù)據(jù)。括目錄文件數(shù)據(jù)。UNIX系統(tǒng)中文件系統(tǒng)的任一數(shù)系統(tǒng)中文件系統(tǒng)的任一數(shù)據(jù)塊只能屬于文件系統(tǒng)中某一個文件或空閑。據(jù)塊只能屬于文件系統(tǒng)中某一個文件或空閑。9.2.2 幾種常用的數(shù)據(jù)構(gòu)造幾種常用的數(shù)據(jù)構(gòu)造1.資源管理構(gòu)造資源管理構(gòu)造 fi

14、lsys超級塊中存放的最重要的數(shù)據(jù)構(gòu)造是資源管理構(gòu)造超級塊中存放的最重要的數(shù)據(jù)構(gòu)造是資源管理構(gòu)造 filsys。該構(gòu)造中含有文件系統(tǒng)空閑塊分配用堆棧。該構(gòu)造中含有文件系統(tǒng)空閑塊分配用堆棧及及 i節(jié)點分配用數(shù)據(jù)構(gòu)造。在塊設(shè)備作為文件卷安節(jié)點分配用數(shù)據(jù)構(gòu)造。在塊設(shè)備作為文件卷安裝時,構(gòu)造裝時,構(gòu)造filsys 的內(nèi)容被復(fù)制到內(nèi)存公用區(qū)中,的內(nèi)容被復(fù)制到內(nèi)存公用區(qū)中,以使得對空閑塊和以使得對空閑塊和 i節(jié)點的分配與回收能在內(nèi)存進節(jié)點的分配與回收能在內(nèi)存進展。當(dāng)文件卷被卸下或需求重新讀入或?qū)懗鲇嘘P(guān)堆展。當(dāng)文件卷被卸下或需求重新讀入或?qū)懗鲇嘘P(guān)堆棧的內(nèi)容時,那么將內(nèi)存中的棧的內(nèi)容時,那么將內(nèi)存中的 fil

15、sys 構(gòu)造復(fù)制回超構(gòu)造復(fù)制回超級塊中。級塊中。UNIX System 中的中的 filsys 構(gòu)造如下:構(gòu)造如下:struct filsys 文件卷總塊數(shù);文件卷總塊數(shù);i 節(jié)點表塊數(shù);節(jié)點表塊數(shù);空閑塊棧區(qū)空閑塊棧區(qū)(小于或等于小于或等于50);空閑塊棧指針;空閑塊棧指針;空閑塊棧互斥標(biāo)志;空閑塊棧互斥標(biāo)志;空閑塊總數(shù);空閑塊總數(shù);空閑空閑 i節(jié)點數(shù)組指針;節(jié)點數(shù)組指針;空閑磁盤空閑磁盤 i節(jié)點指針;節(jié)點指針;空閑空閑 i節(jié)點數(shù)組互斥標(biāo)志;節(jié)點數(shù)組互斥標(biāo)志;空閑空閑 i節(jié)點總數(shù);節(jié)點總數(shù);filsys 的修正標(biāo)志,等;的修正標(biāo)志,等; filsys 構(gòu)造被用來進展文件空閑塊和構(gòu)造被用來進展

16、文件空閑塊和 i節(jié)點項的分配與回收。節(jié)點項的分配與回收。2. i節(jié)點節(jié)點UNIX文件系統(tǒng)采用文件系統(tǒng)采用 SFD和和 BFD方式管理文件。其中方式管理文件。其中 SFD稱為符號文件目錄,存放文件名以及指示該文稱為符號文件目錄,存放文件名以及指示該文件的文件闡明信息表標(biāo)識符件的文件闡明信息表標(biāo)識符id。由文件名和指示文。由文件名和指示文件闡明信息表的標(biāo)識符件闡明信息表的標(biāo)識符id稱為目錄,把存放文件闡稱為目錄,把存放文件闡明信息和相應(yīng)標(biāo)識符的明信息和相應(yīng)標(biāo)識符的 BFD稱為稱為 i節(jié)點。節(jié)點。 i節(jié)點又節(jié)點又分為磁盤分為磁盤 i節(jié)點和內(nèi)存活動節(jié)點和內(nèi)存活動 i節(jié)點。其中磁盤節(jié)點。其中磁盤 i節(jié)點

17、節(jié)點以靜態(tài)方式存放文件闡明信息。磁盤以靜態(tài)方式存放文件闡明信息。磁盤 i節(jié)點節(jié)點 dinode 構(gòu)造包括:構(gòu)造包括:struct dinode 文件方式;文件方式;與該與該 i節(jié)點聯(lián)接的文件數(shù);節(jié)點聯(lián)接的文件數(shù);用戶標(biāo)識用戶標(biāo)識;文件大小文件大小;存取權(quán)限存取權(quán)限;同組用戶標(biāo)識同組用戶標(biāo)識;該文件所用物理塊的塊號該文件所用物理塊的塊號;文件存取時間、修正時間和建立時間;文件存取時間、修正時間和建立時間; 其中,文件方式表示文件類型,而用戶標(biāo)識符以及同組用戶其中,文件方式表示文件類型,而用戶標(biāo)識符以及同組用戶標(biāo)識定義對該文件具有存取權(quán)的用戶集合,與該標(biāo)識定義對該文件具有存取權(quán)的用戶集合,與該 i

18、節(jié)點聯(lián)接節(jié)點聯(lián)接的文件數(shù)表示有多少個不同的文件名指向該文件。另外,的文件數(shù)表示有多少個不同的文件名指向該文件。另外,該文件所用的物理塊號是一個由該文件所用的物理塊號是一個由 40 個字節(jié)組成的字符數(shù)組個字節(jié)組成的字符數(shù)組 di_addr40,它指明文件數(shù)據(jù)安放在邏輯盤上的位置。,它指明文件數(shù)據(jù)安放在邏輯盤上的位置。在在 UNIX System 中磁盤中磁盤 i節(jié)點的項占用節(jié)點的項占用64個字節(jié)。個字節(jié)。因此,一個長因此,一個長 512個字節(jié)的塊可存放個字節(jié)的塊可存放 8 個個 i節(jié)點項。節(jié)點項。系統(tǒng)在對文件進展各種操作時,為了減少設(shè)備的啟系統(tǒng)在對文件進展各種操作時,為了減少設(shè)備的啟動次數(shù)以及提

19、高操作速度,總是把相應(yīng)的磁盤動次數(shù)以及提高操作速度,總是把相應(yīng)的磁盤 i節(jié)節(jié)點復(fù)制到內(nèi)存的特定區(qū)域點復(fù)制到內(nèi)存的特定區(qū)域內(nèi)存內(nèi)存 i節(jié)點表中。節(jié)點表中。內(nèi)存內(nèi)存 i節(jié)點構(gòu)造節(jié)點構(gòu)造 inode除了包含磁盤除了包含磁盤 i節(jié)點構(gòu)造的各項節(jié)點構(gòu)造的各項之外,還包含了當(dāng)前翻開文件的形狀信息。例如,之外,還包含了當(dāng)前翻開文件的形狀信息。例如,內(nèi)存內(nèi)存 i節(jié)點的形狀:包括該節(jié)點能否已被鎖住,能節(jié)點的形狀:包括該節(jié)點能否已被鎖住,能否有進程等待訪問該否有進程等待訪問該 i節(jié)點等。節(jié)點等。總之,與總之,與 filsys 用于空閑區(qū)的分配與回收不一樣,用于空閑區(qū)的分配與回收不一樣, i節(jié)點主要用來存放文件的闡

20、明信息,以便進程利用節(jié)點主要用來存放文件的闡明信息,以便進程利用 i節(jié)點中的邏輯構(gòu)造和物理構(gòu)造信息搜索查找文件節(jié)點中的邏輯構(gòu)造和物理構(gòu)造信息搜索查找文件信息以及完成對文件信息的維護和共享。信息以及完成對文件信息的維護和共享。3.目錄項目錄項UNIX系統(tǒng)的目錄項由文件名和磁盤系統(tǒng)的目錄項由文件名和磁盤 i節(jié)點標(biāo)識符節(jié)點標(biāo)識符id組組成。其中文件名長度占成。其中文件名長度占14個字節(jié),標(biāo)識符個字節(jié),標(biāo)識符id占占 2個個字節(jié)。從而,在一個字節(jié)。從而,在一個 512字節(jié)的磁盤塊中可以存放字節(jié)的磁盤塊中可以存放32個目錄項。個目錄項。4.系統(tǒng)翻開文件表和用戶翻開文件表系統(tǒng)翻開文件表和用戶翻開文件表在在

21、UNIX系統(tǒng)中,文件系統(tǒng)主要描畫程序和數(shù)據(jù)的靜系統(tǒng)中,文件系統(tǒng)主要描畫程序和數(shù)據(jù)的靜的概念,而進程那么反響這些程序和數(shù)據(jù)的動的特的概念,而進程那么反響這些程序和數(shù)據(jù)的動的特性。進程怎樣才干對文件發(fā)生作用呢?從用戶的角性。進程怎樣才干對文件發(fā)生作用呢?從用戶的角度來看,用戶程序可運用對文件系統(tǒng)進展操作的系度來看,用戶程序可運用對文件系統(tǒng)進展操作的系統(tǒng)調(diào)用來完成。但是,從系統(tǒng)內(nèi)部的角度來說,那統(tǒng)調(diào)用來完成。但是,從系統(tǒng)內(nèi)部的角度來說,那么需求有相應(yīng)的數(shù)據(jù)構(gòu)造來記錄和控制翻開文件的么需求有相應(yīng)的數(shù)據(jù)構(gòu)造來記錄和控制翻開文件的用戶進程以及記錄和控制那些共享同一文件的用戶用戶進程以及記錄和控制那些共享同

22、一文件的用戶進程。為此進程。為此 UNIX系統(tǒng)設(shè)置了用戶翻開文件表和系系統(tǒng)設(shè)置了用戶翻開文件表和系統(tǒng)翻開文件表。統(tǒng)翻開文件表。用戶翻開文件表普通放在用戶翻開文件表普通放在 user 數(shù)據(jù)構(gòu)造中。運用用數(shù)據(jù)構(gòu)造中。運用用戶翻開文件表,一個進程可同時翻開戶翻開文件表,一個進程可同時翻開 20 個左右的個左右的文件??煞_的文件表項文件??煞_的文件表項 u_ofile中含有翻開文件的中含有翻開文件的描畫符描畫符fd,以及系統(tǒng)翻開文件表的入口指針,以及系統(tǒng)翻開文件表的入口指針fp等。等。系統(tǒng)翻開文件表主要用來指明翻開同一文件的不同系統(tǒng)翻開文件表主要用來指明翻開同一文件的不同進程和不同進程所運用的不同

23、翻開途徑,以及這些進程和不同進程所運用的不同翻開途徑,以及這些不同進程和不同翻開途徑所對應(yīng)的讀寫指針。因此不同進程和不同翻開途徑所對應(yīng)的讀寫指針。因此可以以為系統(tǒng)翻開文件表是可以以為系統(tǒng)翻開文件表是 i節(jié)點表的補充。系統(tǒng)節(jié)點表的補充。系統(tǒng)翻開文件表的每一項包括文件標(biāo)識、文件訪問計數(shù)、翻開文件表的每一項包括文件標(biāo)識、文件訪問計數(shù)、文件讀寫指針和文件內(nèi)存文件讀寫指針和文件內(nèi)存 i節(jié)點入口指針和訪問標(biāo)節(jié)點入口指針和訪問標(biāo)志等。其中文件標(biāo)識與用戶翻開文件中志等。其中文件標(biāo)識與用戶翻開文件中fp相連;文相連;文件訪問計數(shù)指示共享該文件的進程數(shù),當(dāng)文件訪問件訪問計數(shù)指示共享該文件的進程數(shù),當(dāng)文件訪問計數(shù)為

24、計數(shù)為 0時,那么闡明已沒有用戶進程在運用該文時,那么闡明已沒有用戶進程在運用該文件,從而可以釋放有關(guān)資源。文件讀寫指針那么分件,從而可以釋放有關(guān)資源。文件讀寫指針那么分別指出各進程在同一文件中的讀寫位置。別指出各進程在同一文件中的讀寫位置。資源管理構(gòu)造、資源管理構(gòu)造、i節(jié)點以及用戶翻開文件表和系統(tǒng)翻節(jié)點以及用戶翻開文件表和系統(tǒng)翻開文件表的關(guān)系如圖開文件表的關(guān)系如圖9.3所示:所示:圖圖9.3 文件系統(tǒng)中主要數(shù)據(jù)構(gòu)造之間的關(guān)系文件系統(tǒng)中主要數(shù)據(jù)構(gòu)造之間的關(guān)系在圖在圖9.3中,用戶進程經(jīng)過用戶翻開文件表中的文件中,用戶進程經(jīng)過用戶翻開文件表中的文件描畫符描畫符fd,找到系統(tǒng)翻開文件表的入口地址,

25、找到系統(tǒng)翻開文件表的入口地址fp,再,再由系統(tǒng)翻開文件表中對應(yīng)項找到相關(guān)由系統(tǒng)翻開文件表中對應(yīng)項找到相關(guān) i節(jié)點的入口節(jié)點的入口指針,從而得到操作該文件所需的控制信息。有了指針,從而得到操作該文件所需的控制信息。有了 i節(jié)點中的控制信息,文件系統(tǒng)就可對磁盤數(shù)據(jù)區(qū)節(jié)點中的控制信息,文件系統(tǒng)就可對磁盤數(shù)據(jù)區(qū)中的文件進展所必需求的操作。另外,在圖中的文件進展所必需求的操作。另外,在圖9.3中,中,給出了兩個不同用戶進程共享同一文件的例子。這給出了兩個不同用戶進程共享同一文件的例子。這兩個進程經(jīng)過各自不同的文件描畫符兩個進程經(jīng)過各自不同的文件描畫符fdA和和fdB,找到系統(tǒng)翻開文件表中不同的對應(yīng)項,并

26、經(jīng)過系統(tǒng)找到系統(tǒng)翻開文件表中不同的對應(yīng)項,并經(jīng)過系統(tǒng)翻開文件表中的翻開文件表中的 i節(jié)點指針而找到同一個內(nèi)存節(jié)點指針而找到同一個內(nèi)存i節(jié)點,節(jié)點,從而完成文件共享。從而完成文件共享。9.3 資源管理和地址映射資源管理和地址映射UNIX文件系統(tǒng)的資源管理包括空閑磁盤塊的文件系統(tǒng)的資源管理包括空閑磁盤塊的分配與回收、分配與回收、 i節(jié)點和系統(tǒng)翻開文件表的分節(jié)點和系統(tǒng)翻開文件表的分配與回收等。關(guān)于空閑磁盤塊的分配與回收,配與回收等。關(guān)于空閑磁盤塊的分配與回收,UNIX系統(tǒng)采用成組鏈法來管理空閑區(qū)。本系統(tǒng)采用成組鏈法來管理空閑區(qū)。本節(jié)主要引見磁盤節(jié)點和內(nèi)存節(jié)點以及系節(jié)主要引見磁盤節(jié)點和內(nèi)存節(jié)點以及系統(tǒng)

27、翻開文件表的分配和釋放方法。統(tǒng)翻開文件表的分配和釋放方法。9.3.1 磁盤節(jié)點的分配與釋放磁盤節(jié)點的分配與釋放當(dāng)一個新文件被建立時,在給該文件分配磁盤存儲當(dāng)一個新文件被建立時,在給該文件分配磁盤存儲區(qū)之前,應(yīng)為該文件分配存放該文件闡明信息的磁區(qū)之前,應(yīng)為該文件分配存放該文件闡明信息的磁盤節(jié)點。反之,當(dāng)從文件系統(tǒng)中刪除某個文件時,盤節(jié)點。反之,當(dāng)從文件系統(tǒng)中刪除某個文件時,那么要首先刪除它的磁盤節(jié)點項。那么要首先刪除它的磁盤節(jié)點項。UNIX System 中的算法中的算法 ialloc 被用來為新建立的文件分配磁盤被用來為新建立的文件分配磁盤節(jié)點項。文件系統(tǒng)包含一個節(jié)點線性表,且每節(jié)點項。文件系

28、統(tǒng)包含一個節(jié)點線性表,且每個磁盤節(jié)點被順序編號。節(jié)點線性表中存放這個磁盤節(jié)點被順序編號。節(jié)點線性表中存放這些被編號的節(jié)點的類型字段。假設(shè)一個節(jié)點的些被編號的節(jié)點的類型字段。假設(shè)一個節(jié)點的類型字段為,那么闡明這個節(jié)點是空閑的。顯然,類型字段為,那么闡明這個節(jié)點是空閑的。顯然,當(dāng)一個進程需求一個新的節(jié)點時,它可以經(jīng)過搜當(dāng)一個進程需求一個新的節(jié)點時,它可以經(jīng)過搜索節(jié)點線性表得到它所要得到的節(jié)點項。為改索節(jié)點線性表得到它所要得到的節(jié)點項。為改善系統(tǒng)性能,善系統(tǒng)性能,UNIX System 在資源管理構(gòu)造在資源管理構(gòu)造 filsys 中設(shè)置了一個磁盤節(jié)點數(shù)組。該數(shù)組在系中設(shè)置了一個磁盤節(jié)點數(shù)組。該數(shù)組在

29、系統(tǒng)初啟時隨統(tǒng)初啟時隨 filsys 構(gòu)造一同被復(fù)制到內(nèi)存的特定區(qū)構(gòu)造一同被復(fù)制到內(nèi)存的特定區(qū)中。中。算法算法 ialloc 首先檢查能否有其他進程在對磁盤節(jié)點首先檢查能否有其他進程在對磁盤節(jié)點數(shù)組進展操作。假設(shè)有其他進程正在對磁盤節(jié)點數(shù)組進展操作。假設(shè)有其他進程正在對磁盤節(jié)點數(shù)組進展操作,那么當(dāng)前進程等待直到其他進程操數(shù)組進展操作,那么當(dāng)前進程等待直到其他進程操作終了。在沒有其他進程對磁盤節(jié)點數(shù)組進展操作終了。在沒有其他進程對磁盤節(jié)點數(shù)組進展操作且磁盤節(jié)點數(shù)組非空時,系統(tǒng)從節(jié)點數(shù)組中作且磁盤節(jié)點數(shù)組非空時,系統(tǒng)從節(jié)點數(shù)組中分配一個節(jié)點給新創(chuàng)建的文件,然后,修正節(jié)分配一個節(jié)點給新創(chuàng)建的文件,然

30、后,修正節(jié)點數(shù)組指針。緊接著,點數(shù)組指針。緊接著,ialloc調(diào)用內(nèi)存節(jié)點分配調(diào)用內(nèi)存節(jié)點分配算法為新建立的文件分配內(nèi)存節(jié)點后將內(nèi)存節(jié)算法為新建立的文件分配內(nèi)存節(jié)點后將內(nèi)存節(jié)點初始化。在對內(nèi)存節(jié)點進展了初始化之后,再點初始化。在對內(nèi)存節(jié)點進展了初始化之后,再將內(nèi)存節(jié)點的內(nèi)容寫回到磁盤節(jié)點中并修正磁將內(nèi)存節(jié)點的內(nèi)容寫回到磁盤節(jié)點中并修正磁盤空閑節(jié)點的計數(shù)。盤空閑節(jié)點的計數(shù)。有關(guān)有關(guān) ialloc 算法,還有幾個問題需求闡明,首先是算法,還有幾個問題需求闡明,首先是節(jié)點數(shù)組中的節(jié)點號陳列方法。系統(tǒng)從磁盤把節(jié)點數(shù)組中的節(jié)點號陳列方法。系統(tǒng)從磁盤把節(jié)點按從小到大的順序讀進節(jié)點按從小到大的順序讀進i節(jié)點

31、數(shù)組,如圖節(jié)點數(shù)組,如圖9.4:圖圖9.4 空閑節(jié)點數(shù)組空閑節(jié)點數(shù)組系統(tǒng)在為進程分配磁盤節(jié)點時,按節(jié)點序號從系統(tǒng)在為進程分配磁盤節(jié)點時,按節(jié)點序號從小到大的原那么分配。當(dāng)空閑節(jié)點數(shù)組為空時,小到大的原那么分配。當(dāng)空閑節(jié)點數(shù)組為空時,系統(tǒng)鎖住節(jié)點數(shù)組,并從低到高地一個一個將磁系統(tǒng)鎖住節(jié)點數(shù)組,并從低到高地一個一個將磁盤上的索引節(jié)點號填入節(jié)點數(shù)組中,直到節(jié)點盤上的索引節(jié)點號填入節(jié)點數(shù)組中,直到節(jié)點數(shù)組滿額或再也找不到空閑節(jié)點。在節(jié)點數(shù)組數(shù)組滿額或再也找不到空閑節(jié)點。在節(jié)點數(shù)組滿額的同時,系統(tǒng)記住它所找到的最高序號的節(jié)滿額的同時,系統(tǒng)記住它所找到的最高序號的節(jié)點,并稱之為點,并稱之為“銘刻節(jié)點。銘刻

32、節(jié)點是保管銘刻節(jié)點。銘刻節(jié)點是保管在節(jié)點數(shù)組中的最后一個節(jié)點在節(jié)點數(shù)組中的最后一個節(jié)點(最大最大) ,假設(shè)系,假設(shè)系統(tǒng)分配到銘刻節(jié)點時,那么啟動統(tǒng)分配到銘刻節(jié)點時,那么啟動 I/O設(shè)備,從銘設(shè)備,從銘刻節(jié)點開場,重新搜索磁盤上的空閑節(jié)點,然刻節(jié)點開場,重新搜索磁盤上的空閑節(jié)點,然后寫進后寫進i結(jié)點數(shù)組。這可以確保系統(tǒng)不浪費時間去結(jié)點數(shù)組。這可以確保系統(tǒng)不浪費時間去讀那些已不含空閑節(jié)點的磁盤塊。讀那些已不含空閑節(jié)點的磁盤塊。其次是在系統(tǒng)為新建立的文件分配磁盤節(jié)點和內(nèi)其次是在系統(tǒng)為新建立的文件分配磁盤節(jié)點和內(nèi)存節(jié)點之后,要檢查所分配的節(jié)點能否是真正存節(jié)點之后,要檢查所分配的節(jié)點能否是真正的空閑節(jié)點

33、。假設(shè)不是空閑節(jié)點,那么要放棄的空閑節(jié)點。假設(shè)不是空閑節(jié)點,那么要放棄本次分配。至于為什么會出現(xiàn)分配到已分配節(jié)點本次分配。至于為什么會出現(xiàn)分配到已分配節(jié)點的情況,那么主要是由于資源共享引起的。的情況,那么主要是由于資源共享引起的。綜上所述,可將算法綜上所述,可將算法 ialloc 描畫如下描畫如下:ialloc:輸入:文件系統(tǒng)設(shè)備號,文件屬性,聯(lián)接該文件的目錄數(shù)輸入:文件系統(tǒng)設(shè)備號,文件屬性,聯(lián)接該文件的目錄數(shù)輸出:上鎖的磁盤節(jié)點輸出:上鎖的磁盤節(jié)點begin if i結(jié)點數(shù)組上鎖結(jié)點數(shù)組上鎖then等待開鎖等待開鎖fiif 節(jié)點數(shù)組空節(jié)點數(shù)組空then 鎖住鎖住i結(jié)點數(shù)組結(jié)點數(shù)組為搜索空閑節(jié)

34、點取銘刻節(jié)點為搜索空閑節(jié)點取銘刻節(jié)點搜索磁盤;將空閑節(jié)點置入節(jié)點數(shù)組搜索磁盤;將空閑節(jié)點置入節(jié)點數(shù)組為為i結(jié)點數(shù)組解鎖結(jié)點數(shù)組解鎖fi從節(jié)點數(shù)組中分配一節(jié)點從節(jié)點數(shù)組中分配一節(jié)點調(diào)用調(diào)用 iget 分配內(nèi)存節(jié)點分配內(nèi)存節(jié)點if iget前往的內(nèi)存節(jié)點為非空閑節(jié)點前往的內(nèi)存節(jié)點為非空閑節(jié)點then 把該節(jié)點的內(nèi)容寫回磁盤;釋放該節(jié)點;把該節(jié)點的內(nèi)容寫回磁盤;釋放該節(jié)點;重新懇求磁盤節(jié)點重新懇求磁盤節(jié)點else 將將 iget 前往的內(nèi)存節(jié)點初始化前往的內(nèi)存節(jié)點初始化將內(nèi)容寫回磁盤節(jié)點將內(nèi)容寫回磁盤節(jié)點空閑節(jié)點數(shù)減空閑節(jié)點數(shù)減fiend磁盤節(jié)點的釋放過程磁盤節(jié)點的釋放過程 ifree是是 iall

35、oc 的反過程。但相的反過程。但相對來說,對來說,ifree 比較簡單。比較簡單。ifree 首先把空閑節(jié)點首先把空閑節(jié)點數(shù)加,假設(shè)超級塊的節(jié)點數(shù)組未被鎖住且有空數(shù)加,假設(shè)超級塊的節(jié)點數(shù)組未被鎖住且有空表項,那么表項,那么 ifree把釋放的節(jié)點號放入節(jié)點數(shù)把釋放的節(jié)點號放入節(jié)點數(shù)組后前往。假設(shè)節(jié)點數(shù)組已處于滿額形狀,那么組后前往。假設(shè)節(jié)點數(shù)組已處于滿額形狀,那么 ifree將新釋放的節(jié)點與銘刻節(jié)點相比校。假設(shè)將新釋放的節(jié)點與銘刻節(jié)點相比校。假設(shè)新釋放的節(jié)點小于銘刻節(jié)點,那么新釋放的節(jié)點小于銘刻節(jié)點,那么 ifree將新將新釋放的節(jié)點作為銘刻節(jié)點,并丟掉原來的銘刻釋放的節(jié)點作為銘刻節(jié)點,并丟掉

36、原來的銘刻節(jié)點,否那么丟掉新釋放的節(jié)點節(jié)點,否那么丟掉新釋放的節(jié)點(為什么?為什么?)。假設(shè)超級塊節(jié)點數(shù)組是被鎖住的,那么此時系統(tǒng)假設(shè)超級塊節(jié)點數(shù)組是被鎖住的,那么此時系統(tǒng)正在進展磁盤節(jié)點搜索任務(wù)。正在進展磁盤節(jié)點搜索任務(wù)。ifree 直接前往,直接前往,以防止競爭條件以防止競爭條件(有能夠漏掉節(jié)點有能夠漏掉節(jié)點)。9.3.2 內(nèi)存節(jié)點的分配與釋放內(nèi)存節(jié)點的分配與釋放當(dāng)系統(tǒng)翻開文件并對其進展搜索、讀寫等操作時,當(dāng)系統(tǒng)翻開文件并對其進展搜索、讀寫等操作時,為相應(yīng)的文件分配一個內(nèi)存節(jié)點,以便把對應(yīng)磁為相應(yīng)的文件分配一個內(nèi)存節(jié)點,以便把對應(yīng)磁盤節(jié)點信息復(fù)制到內(nèi)存。普通來說,當(dāng)系統(tǒng)創(chuàng)建盤節(jié)點信息復(fù)制到

37、內(nèi)存。普通來說,當(dāng)系統(tǒng)創(chuàng)建一個文件之后,假設(shè)未封鎖該文件的話,那么該文一個文件之后,假設(shè)未封鎖該文件的話,那么該文件已擁有了相應(yīng)的內(nèi)存節(jié)點。此時,假設(shè)用戶要件已擁有了相應(yīng)的內(nèi)存節(jié)點。此時,假設(shè)用戶要對該文件進展相應(yīng)的操作的話,系統(tǒng)只需添加已有對該文件進展相應(yīng)的操作的話,系統(tǒng)只需添加已有內(nèi)存節(jié)點的訪問計數(shù)和做互斥處置即可。內(nèi)存節(jié)點的訪問計數(shù)和做互斥處置即可。內(nèi)存節(jié)點的分配由過程內(nèi)存節(jié)點的分配由過程 iget 完成,完成,iget的輸入是文的輸入是文件系統(tǒng)所在的設(shè)備名和磁盤節(jié)點號。輸出是對應(yīng)件系統(tǒng)所在的設(shè)備名和磁盤節(jié)點號。輸出是對應(yīng)的上了鎖的內(nèi)存節(jié)點。的上了鎖的內(nèi)存節(jié)點。首先,首先,iget根據(jù)給

38、定的磁盤節(jié)點號從內(nèi)存節(jié)點數(shù)根據(jù)給定的磁盤節(jié)點號從內(nèi)存節(jié)點數(shù)組中搜索相應(yīng)的內(nèi)存節(jié)點。組中搜索相應(yīng)的內(nèi)存節(jié)點。假設(shè)該節(jié)點已在內(nèi)存,那么只需添加援用計數(shù)并鎖假設(shè)該節(jié)點已在內(nèi)存,那么只需添加援用計數(shù)并鎖定該節(jié)點即可。否那么,應(yīng)從內(nèi)存節(jié)點數(shù)組中定該節(jié)點即可。否那么,應(yīng)從內(nèi)存節(jié)點數(shù)組中分配一個節(jié)點并啟動設(shè)備,將對應(yīng)磁盤節(jié)點信分配一個節(jié)點并啟動設(shè)備,將對應(yīng)磁盤節(jié)點信息復(fù)制到內(nèi)存節(jié)點后上鎖前往。息復(fù)制到內(nèi)存節(jié)點后上鎖前往。另外,當(dāng)一個文件被封鎖時,系統(tǒng)釋放其內(nèi)存節(jié)另外,當(dāng)一個文件被封鎖時,系統(tǒng)釋放其內(nèi)存節(jié)點。點。UNIX系統(tǒng)中,釋放內(nèi)存節(jié)點的過程是系統(tǒng)中,釋放內(nèi)存節(jié)點的過程是iput。iput首先判內(nèi)存節(jié)點的

39、訪問計數(shù)能否等于,假首先判內(nèi)存節(jié)點的訪問計數(shù)能否等于,假設(shè)訪問計數(shù)等于的話,那么表示當(dāng)前沒有其他用設(shè)訪問計數(shù)等于的話,那么表示當(dāng)前沒有其他用戶運用該文件,只需把內(nèi)存節(jié)點項的內(nèi)容復(fù)制回戶運用該文件,只需把內(nèi)存節(jié)點項的內(nèi)容復(fù)制回磁盤節(jié)點后就可釋放該內(nèi)存節(jié)點項。假設(shè)訪問磁盤節(jié)點后就可釋放該內(nèi)存節(jié)點項。假設(shè)訪問計數(shù)大于,那么只需將訪問計數(shù)減即可。計數(shù)大于,那么只需將訪問計數(shù)減即可。再者,假設(shè)表示與該文件相聯(lián)接的目錄數(shù)的聯(lián)接計再者,假設(shè)表示與該文件相聯(lián)接的目錄數(shù)的聯(lián)接計數(shù)值為的話,那么表示該文件已不再需求,數(shù)值為的話,那么表示該文件已不再需求,iput釋放與該文件有關(guān)的一切磁盤塊和磁盤節(jié)點。釋放與該文件

40、有關(guān)的一切磁盤塊和磁盤節(jié)點。9.3.3 系統(tǒng)翻開文件表的分配與釋放系統(tǒng)翻開文件表的分配與釋放在在 UNIX 系統(tǒng)中,用戶之間除了采用存取權(quán)限控制系統(tǒng)中,用戶之間除了采用存取權(quán)限控制方式共享文件信息之外,對于享有存取權(quán)限的用戶,方式共享文件信息之外,對于享有存取權(quán)限的用戶,還可以采用如下方式共享文件:子進程共享父進程還可以采用如下方式共享文件:子進程共享父進程翻開的一切文件;由系統(tǒng)調(diào)用翻開的一切文件;由系統(tǒng)調(diào)用 link 將不同的文件將不同的文件進展聯(lián)接等。對于這些不同的共享方式,用戶和系進展聯(lián)接等。對于這些不同的共享方式,用戶和系統(tǒng)都需求有相應(yīng)的數(shù)據(jù)構(gòu)造與之相應(yīng)。統(tǒng)都需求有相應(yīng)的數(shù)據(jù)構(gòu)造與之相

41、應(yīng)。UNIX系統(tǒng)系統(tǒng)中設(shè)置有系統(tǒng)翻開文件表,存放各進程共享同一文中設(shè)置有系統(tǒng)翻開文件表,存放各進程共享同一文件時的讀寫指針;用戶翻開文件表經(jīng)過指針件時的讀寫指針;用戶翻開文件表經(jīng)過指針fp指向指向系統(tǒng)翻開文件表。系統(tǒng)翻開文件表。用戶在讀寫、翻開一個文件時,首先由用戶在讀寫、翻開一個文件時,首先由iget在內(nèi)存在內(nèi)存i節(jié)節(jié)點數(shù)組中分配一空閑項,并根據(jù)用戶提供的文件名,點數(shù)組中分配一空閑項,并根據(jù)用戶提供的文件名,找到與此文件對應(yīng)的磁盤找到與此文件對應(yīng)的磁盤i節(jié)點,然后將磁盤節(jié)點,然后將磁盤i節(jié)點節(jié)點復(fù)制到已分得的內(nèi)存復(fù)制到已分得的內(nèi)存i節(jié)點中。節(jié)點中。此時,此時,i節(jié)點訪問計數(shù)等于節(jié)點訪問計數(shù)等

42、于1。假設(shè)磁盤。假設(shè)磁盤i節(jié)點已在內(nèi)節(jié)點已在內(nèi)存中,那么對存中,那么對i節(jié)點訪問計數(shù)加節(jié)點訪問計數(shù)加1。接著系統(tǒng)在系統(tǒng)。接著系統(tǒng)在系統(tǒng)翻開文件表中為訪問該文件的用戶分配一系統(tǒng)翻開翻開文件表中為訪問該文件的用戶分配一系統(tǒng)翻開文件表項。在分得系統(tǒng)翻開文件表項后對該表項賦文件表項。在分得系統(tǒng)翻開文件表項后對該表項賦初值以建立系統(tǒng)翻開文件表和內(nèi)存初值以建立系統(tǒng)翻開文件表和內(nèi)存i節(jié)點的聯(lián)絡(luò)。節(jié)點的聯(lián)絡(luò)。同時,在用戶翻開文件表中填寫指向系統(tǒng)翻開文件同時,在用戶翻開文件表中填寫指向系統(tǒng)翻開文件表的指針表的指針fp和把對應(yīng)的用戶翻開文件表項的序號和把對應(yīng)的用戶翻開文件表項的序號fd送給用戶。經(jīng)過上述操作,兩個

43、以上的用戶共享某送給用戶。經(jīng)過上述操作,兩個以上的用戶共享某一文件時,將會分配得到與用戶數(shù)相等的系統(tǒng)翻開一文件時,將會分配得到與用戶數(shù)相等的系統(tǒng)翻開文件表項,且這些表項指向同一內(nèi)存文件表項,且這些表項指向同一內(nèi)存i節(jié)點。但在節(jié)點。但在父、子進程共享同一文件時,由于子進程是直接承父、子進程共享同一文件時,由于子進程是直接承繼父進程翻開文件,因此,繼父進程翻開文件,因此,i節(jié)點訪問計數(shù)不變。節(jié)點訪問計數(shù)不變。為了指明父、子進程共享同一文件的情況,在系統(tǒng)為了指明父、子進程共享同一文件的情況,在系統(tǒng)翻開文件表項中設(shè)有共享文件計數(shù)項以指明父、子翻開文件表項中設(shè)有共享文件計數(shù)項以指明父、子進程的個數(shù)。系統(tǒng)

44、翻開文件表項的分配由過程進程的個數(shù)。系統(tǒng)翻開文件表項的分配由過程getf完成。完成。封鎖文件時,根據(jù)用戶提供的文件標(biāo)識符封鎖文件時,根據(jù)用戶提供的文件標(biāo)識符fd找到對應(yīng)找到對應(yīng)的用戶翻開文件表項,從而得到指向系統(tǒng)翻開文件的用戶翻開文件表項,從而得到指向系統(tǒng)翻開文件表的指針表的指針fp。然后就可去除用戶翻開文件表項和把。然后就可去除用戶翻開文件表項和把系統(tǒng)翻開文件表項共享文件計數(shù)項減系統(tǒng)翻開文件表項共享文件計數(shù)項減1。JP1當(dāng)共當(dāng)共享計數(shù)項為享計數(shù)項為0時,那么去除系統(tǒng)翻開文件表項和將時,那么去除系統(tǒng)翻開文件表項和將內(nèi)存內(nèi)存i節(jié)點中共享計數(shù)項減節(jié)點中共享計數(shù)項減1。用戶翻開文件表項和。用戶翻開文

45、件表項和系統(tǒng)翻開文件表項的釋放分別由過程系統(tǒng)翻開文件表項的釋放分別由過程close和和closef完成。完成。9.3.4 地址映射地址映射UNIX系統(tǒng)采用索引構(gòu)造存放文件物理塊的地址。即系統(tǒng)采用索引構(gòu)造存放文件物理塊的地址。即在文件對應(yīng)的在文件對應(yīng)的i節(jié)點中,放有存放文件物理塊號的節(jié)點中,放有存放文件物理塊號的索引構(gòu)造。由對應(yīng)文件的邏輯字節(jié)偏移量計算出邏索引構(gòu)造。由對應(yīng)文件的邏輯字節(jié)偏移量計算出邏輯塊號之后,就可搜索內(nèi)存輯塊號之后,就可搜索內(nèi)存i節(jié)點中的地址索引構(gòu)節(jié)點中的地址索引構(gòu)造而得到文件的物理塊號。造而得到文件的物理塊號。UNIX system 把常規(guī)把常規(guī)文件分為小型、中型、大型和巨型

46、文件分為小型、中型、大型和巨型4種。文件長度種。文件長度小于小于5K的為小型文件。對于小型文件,索引數(shù)組的為小型文件。對于小型文件,索引數(shù)組中的前中的前30個字節(jié)被用來存放其物理塊塊號。文件長個字節(jié)被用來存放其物理塊塊號。文件長度大于度大于5K但小于但小于90K的文件為中型文件。對于中型的文件為中型文件。對于中型文件,文件,i節(jié)點的索引數(shù)組所指的前節(jié)點的索引數(shù)組所指的前10個物理塊中存?zhèn)€物理塊中存放文件信息,而索引數(shù)組所指的第放文件信息,而索引數(shù)組所指的第11個物理塊中存?zhèn)€物理塊中存放的那么是存放文件信息的物理塊塊號放的那么是存放文件信息的物理塊塊號(不包括前不包括前10個物理塊塊號個物理塊塊

47、號)。文件長度大于文件長度大于90K但小于但小于14.54M的文件為大型文件。的文件為大型文件。于大型文件,于大型文件,UNIX System 采用二次間接尋址的采用二次間接尋址的方法。即索引數(shù)組的和經(jīng)第方法。即索引數(shù)組的和經(jīng)第12項所指的物理塊中存項所指的物理塊中存放的既不是文件信息,也不是存放文件信息的物理放的既不是文件信息,也不是存放文件信息的物理塊號,而是那些進展二次間接存放文件信息的物理塊號,而是那些進展二次間接存放文件信息的物理塊號。塊號。對于更大的文件,稱之為巨型文件。巨型文件采用對于更大的文件,稱之為巨型文件。巨型文件采用三次間接的方法存放。三次間接的方法存放。索引數(shù)組中的直接

48、塊和間接塊的關(guān)系如圖索引數(shù)組中的直接塊和間接塊的關(guān)系如圖9.5所示。所示。在用戶進程搜索文件時,根據(jù)相應(yīng)的在用戶進程搜索文件時,根據(jù)相應(yīng)的i節(jié)點信息,可節(jié)點信息,可根據(jù)上述地址變換關(guān)系由邏輯文件中的相對地址找根據(jù)上述地址變換關(guān)系由邏輯文件中的相對地址找到實踐文件信息所在的物理塊。該轉(zhuǎn)換算法由過程到實踐文件信息所在的物理塊。該轉(zhuǎn)換算法由過程bmap完成。完成。圖圖9.5 文件映射關(guān)系文件映射關(guān)系9.4 目錄與搜索方法目錄與搜索方法UNIX系統(tǒng)中的目錄文件是以普通文件存放,系統(tǒng)中的目錄文件是以普通文件存放,且文件的目錄和闡明信息采用了且文件的目錄和闡明信息采用了SFD和和BFD構(gòu)造方式以利于共享。

49、這樣,當(dāng)用戶搜索當(dāng)構(gòu)造方式以利于共享。這樣,當(dāng)用戶搜索當(dāng)前目錄下的文件時,可以直接從當(dāng)前目錄開前目錄下的文件時,可以直接從當(dāng)前目錄開場搜索,而當(dāng)被搜索文件不在當(dāng)前目錄下時,場搜索,而當(dāng)被搜索文件不在當(dāng)前目錄下時,那么從根目錄開場按指定途徑搜索那么從根目錄開場按指定途徑搜索(已做過聯(lián)已做過聯(lián)接的其他目錄下的文件被看作當(dāng)前目錄下文接的其他目錄下的文件被看作當(dāng)前目錄下文件件)。由于。由于UNIX的文件系統(tǒng)采用樹型構(gòu)造,的文件系統(tǒng)采用樹型構(gòu)造,且只需最低一級的葉才代表文件信息,因此,且只需最低一級的葉才代表文件信息,因此,對文件信息的搜索的大部分任務(wù)是對對文件信息的搜索的大部分任務(wù)是對i節(jié)點和節(jié)點和對

50、目錄文件的搜索。對目錄文件的搜索。UNIX System 對內(nèi)存對內(nèi)存i節(jié)點的搜索采用散列節(jié)點的搜索采用散列搜索法。搜索法。首先,系統(tǒng)把空閑內(nèi)存首先,系統(tǒng)把空閑內(nèi)存i節(jié)點組成一個頭指針為節(jié)點組成一個頭指針為ifreelist鏈的鏈表,而已分配的內(nèi)存鏈的鏈表,而已分配的內(nèi)存i節(jié)點那么按給節(jié)點那么按給定的散列函數(shù)分成不同的組。系統(tǒng)定義的散列函數(shù)定的散列函數(shù)分成不同的組。系統(tǒng)定義的散列函數(shù)為為ihash(x)=&hinode(int)(x)&128。這里,。這里,x代代表要搜索的表要搜索的i節(jié)點號;節(jié)點號;ihash的功能是將那些與的功能是將那些與128進進展模運算后余數(shù)一樣的展模運

51、算后余數(shù)一樣的i節(jié)點編為一組,每組的頭節(jié)點編為一組,每組的頭指針為指針為hinode。ihash的值即是的值即是i節(jié)點節(jié)點x的頭指針的頭指針hinode的地址。的地址。hinode是一個數(shù)據(jù)構(gòu)造,其定義為是一個數(shù)據(jù)構(gòu)造,其定義為 struct hinode struct inode *i_forw; hinode128; 其中,其中,i_forw 是內(nèi)存是內(nèi)存i節(jié)點中定義的散列函數(shù)指針,節(jié)點中定義的散列函數(shù)指針,有了該項就可使散列隊列與相應(yīng)的有了該項就可使散列隊列與相應(yīng)的i節(jié)點對應(yīng)起來。節(jié)點對應(yīng)起來。顯然,只需給定了顯然,只需給定了i節(jié)點號,就可由上述散列函數(shù)找節(jié)點號,就可由上述散列函數(shù)找到該

52、到該i節(jié)點所在散列隊列的頭指針地址。然后,可節(jié)點所在散列隊列的頭指針地址。然后,可進一步采用順序搜索法從該散列隊列中找出所要搜進一步采用順序搜索法從該散列隊列中找出所要搜索的索的i節(jié)點地址。節(jié)點地址。至于對目錄文件的搜索,即從目錄文件中找到與指至于對目錄文件的搜索,即從目錄文件中找到與指定分量相匹配的文件名的搜索,那么采用順序搜索定分量相匹配的文件名的搜索,那么采用順序搜索法。這是由于一個目錄文件中的內(nèi)容總是較少的,法。這是由于一個目錄文件中的內(nèi)容總是較少的,從而不會占用太多的搜索時間。從而不會占用太多的搜索時間。對文件的存取搜索是經(jīng)過過程對文件的存取搜索是經(jīng)過過程namei完成的。完成的。n

53、amei將給定的途徑名轉(zhuǎn)換為所要搜索文件的內(nèi)存將給定的途徑名轉(zhuǎn)換為所要搜索文件的內(nèi)存i節(jié)點節(jié)點指針。指針。首先,首先,namei斷定搜索途徑名是從根目錄開場的絕對斷定搜索途徑名是從根目錄開場的絕對途徑名,還是從當(dāng)前目錄開場的相對途徑名。假設(shè)途徑名,還是從當(dāng)前目錄開場的相對途徑名。假設(shè)是絕對途徑名,那么將根目錄置為目錄變量,否那是絕對途徑名,那么將根目錄置為目錄變量,否那么將當(dāng)前目錄置為目錄變量。其次,么將當(dāng)前目錄置為目錄變量。其次,namei以目錄以目錄變量為根據(jù),搜索到該目錄變量所對應(yīng)的內(nèi)存變量為根據(jù),搜索到該目錄變量所對應(yīng)的內(nèi)存i節(jié)節(jié)點,并驗證存取答應(yīng)權(quán)。假設(shè)該目錄文件是可以存點,并驗證存

54、取答應(yīng)權(quán)。假設(shè)該目錄文件是可以存取的,那么依次將該目錄變量所對應(yīng)的目錄文件塊取的,那么依次將該目錄變量所對應(yīng)的目錄文件塊讀入內(nèi)存,并且順序搜索與途徑名中目錄變量的下讀入內(nèi)存,并且順序搜索與途徑名中目錄變量的下一個分量相匹配的文件名。假設(shè)未找到相應(yīng)的分量,一個分量相匹配的文件名。假設(shè)未找到相應(yīng)的分量,那么闡明文件系統(tǒng)中不存在相應(yīng)的文件或途徑名有那么闡明文件系統(tǒng)中不存在相應(yīng)的文件或途徑名有錯。否那么,假設(shè)途徑名未搜索終了的話,那么錯。否那么,假設(shè)途徑名未搜索終了的話,那么namei反復(fù)將目錄變量沿途徑名下移,且反復(fù)從搜反復(fù)將目錄變量沿途徑名下移,且反復(fù)從搜索目錄變量對應(yīng)索目錄變量對應(yīng)i節(jié)點開場的上

55、述操作。當(dāng)途徑名節(jié)點開場的上述操作。當(dāng)途徑名搜索終了,且已找到對應(yīng)文件名時,前往該文件名搜索終了,且已找到對應(yīng)文件名時,前往該文件名所對應(yīng)的內(nèi)存所對應(yīng)的內(nèi)存i節(jié)點指針。節(jié)點指針。 算法算法namei可描畫如下可描畫如下:namei : 輸入輸入 : 途徑名途徑名 輸出輸出 : 上了鎖的內(nèi)存上了鎖的內(nèi)存i節(jié)點節(jié)點 beginif 途徑名從根目錄開場途徑名從根目錄開場then 目錄變量目錄變量 = 根目錄根目錄 i節(jié)點變量節(jié)點變量 = 根根i節(jié)點節(jié)點else 目錄變量目錄變量 = 當(dāng)前目錄當(dāng)前目錄i節(jié)點變量節(jié)點變量 = 當(dāng)前目錄當(dāng)前目錄i節(jié)點節(jié)點fiwhile(還有途徑分量未搜索終了還有途徑分量未

56、搜索終了)do 目錄變量目錄變量 = 下一個分量下一個分量驗證存取權(quán)限驗證存取權(quán)限根據(jù)根據(jù)i節(jié)點變量中的闡明信息,讀入對應(yīng)節(jié)點變量中的闡明信息,讀入對應(yīng)的目錄文件塊的目錄文件塊順序搜索目錄文件塊中的項順序搜索目錄文件塊中的項if 目錄文件塊中的一個登記項與目錄變目錄文件塊中的一個登記項與目錄變量一樣量一樣then 得到目錄變量的內(nèi)存得到目錄變量的內(nèi)存i節(jié)點號節(jié)點號釋放釋放i節(jié)點變量中的節(jié)點變量中的i節(jié)點節(jié)點散列法搜索內(nèi)存散列法搜索內(nèi)存i節(jié)點節(jié)點i節(jié)點變量節(jié)點變量 = 目錄變量對應(yīng)的目錄變量對應(yīng)的i節(jié)點節(jié)點else 目錄中無該分量,前往有關(guān)信息目錄中無該分量,前往有關(guān)信息fii節(jié)點變量中節(jié)點變量

57、中i節(jié)點上鎖前往節(jié)點上鎖前往odend9.5 文件系統(tǒng)的系統(tǒng)調(diào)用文件系統(tǒng)的系統(tǒng)調(diào)用本節(jié)從用戶運用文件系統(tǒng)的角度引見文件系統(tǒng)本節(jié)從用戶運用文件系統(tǒng)的角度引見文件系統(tǒng)的動作。的動作。UNIX文件系統(tǒng)為用戶提供的系統(tǒng)調(diào)用有翻開文件系統(tǒng)為用戶提供的系統(tǒng)調(diào)用有翻開和封鎖文件用的和封鎖文件用的open與與close,創(chuàng)建文件用的,創(chuàng)建文件用的creat,對翻開文件進展讀寫操作的,對翻開文件進展讀寫操作的read和和write,對文件樹進展操作的,對文件樹進展操作的chdir和和chown,改動文件屬性的改動文件屬性的chown,chmod和有關(guān)文件和有關(guān)文件聯(lián)接的聯(lián)接的link,unlink以及進展通訊操

58、作的以及進展通訊操作的pipe等。無論用戶運用何種有關(guān)文件系統(tǒng)的系統(tǒng)等。無論用戶運用何種有關(guān)文件系統(tǒng)的系統(tǒng)調(diào)用,都必需指定該系統(tǒng)調(diào)用所要進展操作調(diào)用,都必需指定該系統(tǒng)調(diào)用所要進展操作的文件途徑名的文件途徑名(文件名文件名)或者文件描畫符或者文件描畫符fd。只需在指定了文件途徑名或文件描畫符只需在指定了文件途徑名或文件描畫符fd之之后,系統(tǒng)調(diào)用才干對有關(guān)文件進展操作。后,系統(tǒng)調(diào)用才干對有關(guān)文件進展操作。在用戶進程運用系統(tǒng)調(diào)用時,首先,執(zhí)行該系統(tǒng)調(diào)在用戶進程運用系統(tǒng)調(diào)用時,首先,執(zhí)行該系統(tǒng)調(diào)用將使得系統(tǒng)產(chǎn)生一條稱為圈套用將使得系統(tǒng)產(chǎn)生一條稱為圈套(trap)指令的信息,指令的信息,從而啟動中斷和圈

59、套總控程序從而啟動中斷和圈套總控程序(后述后述),使得系統(tǒng)由,使得系統(tǒng)由用戶態(tài)進入系統(tǒng)態(tài)執(zhí)行。在圈套指令啟動中斷和圈用戶態(tài)進入系統(tǒng)態(tài)執(zhí)行。在圈套指令啟動中斷和圈套總控程序的同時,系統(tǒng)調(diào)用的各參數(shù)寫入套總控程序的同時,系統(tǒng)調(diào)用的各參數(shù)寫入user構(gòu)構(gòu)造中對應(yīng)部分。然后,由中斷和圈套總控程序,系造中對應(yīng)部分。然后,由中斷和圈套總控程序,系統(tǒng)進入執(zhí)行與系統(tǒng)調(diào)用有關(guān)的文件系統(tǒng)內(nèi)部過程和統(tǒng)進入執(zhí)行與系統(tǒng)調(diào)用有關(guān)的文件系統(tǒng)內(nèi)部過程和緩沖區(qū)管理過程等。文件系統(tǒng)的系統(tǒng)調(diào)用與其內(nèi)部緩沖區(qū)管理過程等。文件系統(tǒng)的系統(tǒng)調(diào)用與其內(nèi)部過程的執(zhí)行關(guān)系如圖過程的執(zhí)行關(guān)系如圖9.6所示。所示。下面,以系統(tǒng)調(diào)用下面,以系統(tǒng)調(diào)用r

60、ead為例,進一步闡明系統(tǒng)調(diào)用的為例,進一步闡明系統(tǒng)調(diào)用的執(zhí)行過程。執(zhí)行過程。圖圖9.6 文件系統(tǒng)的系統(tǒng)調(diào)用與低層算法文件系統(tǒng)的系統(tǒng)調(diào)用與低層算法在運用系統(tǒng)調(diào)用在運用系統(tǒng)調(diào)用read之前,預(yù)備進展讀操作的文件必之前,預(yù)備進展讀操作的文件必需是翻開的。也就是說,在需是翻開的。也就是說,在read之前必需先運用系之前必需先運用系統(tǒng)調(diào)用統(tǒng)調(diào)用open或或creat(非管道文件時非管道文件時),并將該文件的,并將該文件的訪問答應(yīng)權(quán)設(shè)置成可讀的,否那么無法進展讀操作。訪問答應(yīng)權(quán)設(shè)置成可讀的,否那么無法進展讀操作。在調(diào)用了系統(tǒng)調(diào)用在調(diào)用了系統(tǒng)調(diào)用open之后,用戶得到前往的進程之后,用戶得到前往的進程標(biāo)識符標(biāo)識符fd,且

溫馨提示

  • 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

提交評論