《Linux操作系統原理與應用》課件-第6章_第1頁
《Linux操作系統原理與應用》課件-第6章_第2頁
《Linux操作系統原理與應用》課件-第6章_第3頁
《Linux操作系統原理與應用》課件-第6章_第4頁
《Linux操作系統原理與應用》課件-第6章_第5頁
已閱讀5頁,還剩93頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第6章 文件管理6.1文件管理技術6.2Linux文件系統概述6.3Ext文件系統6.4虛擬文件系統

6.1 文件管理技術

6.1.1 文件與文件系統1. 文件

文件是具有名字的一組相關信息的有序集合,文件的名字稱為文件名,它是文件的標識。文件的信息可以是各種各樣的,一個程序、一批數據、一張圖片、一段視頻等都可以作為文件的內容。

2. 文件系統

文件系統是操作系統的一個重要組成部分,它負責管理系統中的文件,為用戶提供使用文件的操作接口。文件系統由實施文件管理的軟件和其所管理的文件組成。文件系統軟件屬于系統內核代碼,文件則按特定的格式存放在磁盤分區中。

歸納起來,文件系統的功能包括以下幾項:

提供文件訪問接口,實現文件的“按名存取”。

實施對文件的操作,包括建立、讀寫、檢索、修改、刪除等。

管理文件的存儲空間,實施存儲空間的分配、回收與重組。

實現對文件的共享、保密和保護措施。

3. 文件的描述

為了實施和控制對文件的各種訪問操作,文件系統為每個文件都建立了一個“文件控制塊”(FileControlBlock,FCB)。文件的FCB的作用類似于進程的PCB,它記錄了文件的使用者和管理者所關心的所有信息,包括文件名、屬主、文件大小、物理存儲位置、修改和訪問時間、存取權限等。

4. 文件目錄

文件系統采用目錄來組織文件。目錄是FCB的有序集合,通過目錄將所有的FCB分層分類地組織在一起,方便了文件的檢索操作。由于目錄的信息是需要長久保存的,所以目錄也需以文件的形式存在。為此,系統定義了一種特殊的文件——?目錄文件,其內容是一個文件列表,每個表項是一個文件的FCB,在目錄里就稱為目錄項。由于目錄本身也是文件,因此目錄的FCB也可以作為另一個目錄中的目錄項,從而構成目錄的層次關系。

目錄的主要功能是實現文件的“按名存取”,即用戶只需提供文件名就可以對文件進行各種操作。目錄實現了文件名到文件物理存放位置的映射。

目錄的另一個功能是合理地組織文件。

5. 文件的結構

文件結構是文件內容的組織方式。從不同層面上看到的文件結構有所不同。圖6-1所示是文件在三個不同抽象層次上的結構。圖6-1文件的結構

1)文件的格式

終端用戶是通過應用程序來使用文件的,從他們的角度看到的是文件的應用結構,也就是文件的格式。

2)文件的邏輯結構

應用程序是文件系統的直接用戶,應用程序所看到的文件的結構就是文件的邏輯結構。

3)文件的物理結構

文件的物理結構又稱為存儲結構,是指文件在外存上的存儲形式。物理結構是文件系統內部使用的結構,文件系統負責邏輯結構與物理結構之間的映射。

6.1.2 文件的邏輯結構與存取方式

1. 文件的邏輯結構

早期文件系統采用的邏輯結構有結構化的記錄式與非結構化的流式兩種,而現代流行的文件系統均采用流式結構。流式結構的文件全部由字節序列組成,稱為流式文件。流式文件就像一張白紙,沒有任何格式。應用程序訪問流式文件時只要指定文件的讀寫位置和要讀寫的字節數,文件系統即可存取指定部分的文件內容。應用程序可任意地在字節序列上構造自己的應用格式。寫文件時,應用程序按自己定義的結構來組織數據,然后把它們作為字節流寫入文件;讀文件時,將讀出的字節流再解釋成自己使用的結構。

2. 文件的操作

對文件的操作主要有建立/刪除、打開/關閉、讀/寫、修改屬性等。

建立文件時用戶要為文件指定一個文件名。

對文件的讀寫操作都要經過文件的FCB來進行。

3. 文件的存取方式

文件存取方式是指讀寫文件的方式。對于流式文件來說,每個打開的文件都有一個指示讀寫位置的指針offset,如圖6-2所示。圖6-2流式文件的存取

應用程序對流式文件的存取方式有兩種,即順序存取和隨機存取。

1)順序存取

順序存取就是從文件頭開始順序地訪問文件的每一段信息,直到文件尾。

2)隨機存取

隨機存取也稱為直接存取,就是從文件的指定位置開始存取一段數據。

6.1.3 文件的物理結構與存儲方式

文件的物理結構是文件在外部存儲器中的組織和存放形式,與存儲設備的空間結構和尋址方式有關。典型的存儲設備是磁盤。

1. 磁盤的物理結構與尋址方式

磁盤由一組盤片組成,每個盤片有兩個盤面,經物理格式化后,盤面上被劃分出多個同心圓,稱為磁道(track)。所有盤面的相同位置的磁道組成的圓柱體,稱為柱面(cylinder)。每個磁道又劃分為多個弧段,稱為扇區(sector),通常的大小是512?B。扇區是磁盤上可尋址的最小存儲單位。

2. 磁盤空間的邏輯結構

磁盤是高速設備,一次讀寫操作可以同時訪問多個相鄰的扇區(通常是在同一柱面上)。因此,文件系統在訪問磁盤時不是以扇區為單位,而是以“塊”(block)為單位來傳輸數據的,每個塊包含1到多個相鄰扇區。Linux將這種以塊為單位傳輸數據的設備稱為“塊設備”(blockdevice)。除了磁盤外,閃存盤、固態盤、光盤等也是塊設備。

為便于大容量磁盤的管理,磁盤的存儲空間被劃分為若干個分區,每個分區由一個文件系統來管理。文件系統只能看到和管理自己所在分區內的存儲空間。在文件系統看來,磁盤分區的存儲空間是由許多在邏輯上連續的塊組成的,它們從0到n編號,如圖6-3所示。圖6-3磁盤存儲空間的邏輯結構

3. 文件的物理結構

文件的物理結構主要有3種,即連續文件、鏈接文件和索引文件。

1)連續文件

連續文件的存儲方案是將文件的內容按邏輯順序存放在連續的存儲塊中,這是最簡單的存儲分配方案。文件B的大小為10?KB,系統為它分配了連續的3塊。它們的起始塊號和占用的塊數都記錄在各自的FCB中,如圖6-4所示。圖6-4連續文件的存儲結構示意圖

連續存儲方案的優點是簡單、存取速度快。由于文件內容是連續存放的,訪問時磁頭移動較少,因而無論順序存取還是隨機存取,存取性能都很好。它的缺點之一是限制了文件的動態增長。另一個缺點是磁盤碎片問題,即經過一系列的文件空間分配和回收操作后,空閑空間逐漸變得支離破碎,無法容納新文件。磁盤碎片降低了外存空間的利用率,需要經常進行磁盤壓縮整理。由于這些缺點,連續文件不適合用于磁盤等直接存取設備。它主要用于在順序存取設備(如磁帶)或只讀存儲設備(如光盤)上存儲文件。

2)鏈接文件

鏈接文件的存儲思想是:文件內容可以存放在彼此不連續的存儲塊中,用指針拉鏈的方式表示文件內容的邏輯順序。做法是:每個塊留出一個空間來存放指向下一塊的指針。在文件的FCB中記錄了文件首塊的磁盤地址,從首塊出發可以依次找到其他各塊,如圖6-5所示。圖6-5鏈接文件的存儲結構示意圖

目前實際使用的鏈接文件是針對以上問題進行了改進的方案。改進的思想是將指針部分從存儲塊中提出來,單獨存放在一個鏈接表中。鏈接表的每一項對應一個存儲塊,其內容是該塊所鏈接的下一個塊的塊號。圖6-6所示是文件分配鏈接表方案的示意圖。圖中描述了與圖6-5的分配情形相同的兩條塊號鏈:一條是文件A的鏈,從表項1開始;另一條是文件B的鏈,從表項5開始。圖6-6文件分配鏈接表示意圖

鏈接文件的優點是允許文件長度動態變化,外存空間利用率高;缺點是存取效率(尤其是直接存取的效率)較連續文件低。對小文件來說沒有問題,但文件越大存取效率就越低。因此,鏈接文件更適合于小型文件系統。

3)索引文件

索引文件的存儲方案也是允許將文件內容存放在不連續的存儲塊中,但它是用索引表來建立文件內容與存儲塊之間的聯系的。索引文件的分配思想與頁式內存分配很相似,索引表就如同頁表。圖6-7所示為索引文件的存儲結構示意圖,文件A占用了4塊,依次是第7、0、9、14塊。通過文件的索引表可以直接找到各塊。圖6-7索引文件的存儲結構示意圖

索引文件具有鏈接文件的優點,文件定位速度更快,順序存取和隨機存取效率都比較高。索引文件的缺點是占用的存儲空間較多,因為索引表本身需占用一定的存儲空間。對于只有1~2塊的小文件來說,雖然其索引表很小,但也要占用同樣的存儲空間。因此,對于小文件較多的系統來說,空間的浪費比較明顯,索引表的查找速度優勢也并不明顯。

6.1.4 文件的共享與保護

1. 文件的共享

文件共享是指允許一個文件被多個用戶或進程共同使用。這樣可以節省存儲空間和傳輸時間,并可避免因存在多個文件副本而可能發生的內容不一致現象。

實現文件共享的方法是鏈接法。

2. 文件的保護

文件保護的目的是防止文件被未授權的用戶訪問,造成泄密或意外的破壞。在開放的多用戶系統環境下,文件保護尤為重要。

保護文件的主要手段是控制用戶對文件的存取權限。

通常有兩種用戶分類方法:一是將用戶分為系統管理員和普通用戶兩類,所有普通用戶具有相同的訪問權限。這是一種比較粗糙的分類。另一種是UNIX/Linux采用的分類方法,將用戶分為超級用戶、文件屬主、組用戶和其他用戶4類。

6.1.5 文件存儲空間的管理

文件系統的職能之一是對文件的存儲空間進行管理。管理工作包括:建立文件時為文件分配存儲塊;刪除文件時回收文件占用的存儲塊;修改文件時動態地分配和回收文件的存儲塊。常用的文件存儲空間管理方案有以下3種:

1. 位圖法

位圖是由若干個連續的字節組成的一張表,用于記錄存儲塊的分配情況,如圖6-8所示。圖6-8存儲分配位圖

2. 空閑區表法

空閑區表是記錄連續的空閑區域的表格,表格中的每一項記錄一個空閑區的起始塊號和塊數,如圖6-9所示。圖6-9空閑區表

3. 空閑塊鏈表法

將所有空閑塊的塊號用鏈表形式鏈在一起就形成了一個空閑塊鏈表,如圖6-10所示。圖6-10空閑塊鏈表

6.2 Linux文件系統概述

6.2.1 Linux文件系統的特點Linux文件系統有以下幾個主要特征。1. 支持多種文件系統2. 樹形可掛裝目錄結構3. 文件、設備統一管理

6.2.2 Linux文件系統的結構

圖6-11描述了Linux文件系統的組成及其與相關內核模塊的結構關系。圖6-11?Linux文件系統的結構

Linux文件系統主要由以下部分組成:

1. 磁盤文件系統

磁盤文件系統(diskfilesystem)是存在于磁盤上的實際文件系統,這里的磁盤(disk)泛指各種介質的存儲設備。

2. 虛擬文件系統

磁盤文件系統通常是為某個特定的操作系統設計,不同的文件系統具有不同的文件組織結構和操作接口函數,相互之間往往差別很大。

3. 磁盤高速緩存

VFS使用磁盤高速緩存作為文件讀寫的緩存機制。

4. I/O系統

文件系統需要利用磁盤等塊設備來存儲文件。

6.3 Ext文件系統

Ext(Extended)文件系統是專為Linux系統設計的一族文件系統。Ext2的弱點是它沒有“日志”(journaling)機制。日志式文件系統具有故障自動恢復能力,可以在系統發生意外斷電或其他故障時保證文件數據的完整性,這對于關鍵行業的應用是十分重要的。

6.3.1 Ext文件的結構

Ext文件的邏輯結構是無結構的流式文件。基于字節流的概念,Linux系統可以把目錄、設備等都當作文件來統一對待。Ext文件的物理結構采用易于擴展的多重索引方式,便于文件動態增長,同時也可以有效地實現順序和隨機訪問。

1. Ext文件的描述

Ext文件系統采用了改進的FCB結構來描述文件。

FCB要描述的信息比較多,所以一般要占較多的空間。當目錄下的文件很多時,目錄文件就會很大,往往需要占用多個存儲塊,這將導致目錄檢索的效率下降。改進的方法是將FCB分解為兩個部分:主部和次部。FCB主部包含除文件名之外的全部信息,稱為“索引節點”(indexnode),簡稱為i節點。FCB次部只包含文件名和主部的標識號,即i節點號。文件目錄中只保存文件的FCB次部,主要實現按名檢索功能。

Ext目錄項(dirent)主要包括文件名和索引節點號兩部分。

Ext索引節點包含了除文件名之外的所有文件描述信息,分為文件屬性信息和索引表兩部分。文件屬性信息部分包括模式(訪問權限與類型)、所有者(屬主和屬組)、長度、時間戳、連接數等信息。索引表部分是指向文件數據所在的存儲塊的索引指針。每個Ext文件都有一個索引節點,它是文件的代表。索引節點毀壞則文件無法被訪問。一個索引節點可以對應多個目錄項,也就是多個文件名連接到同一個文件上。

圖6-12是Ext文件的目錄項和索引節點的結構示意圖。圖6-12?Ext文件的描述

2. Ext索引結構

1)Ext3的索引結構

一個文件中可能會包含許多數據塊,如果用一個索引表描述的話,表的長度就會很長,不便存儲且查找效率低。為此,Ext3采用了多重索引結構,如圖6-13所示。圖6-13?Ext3文件的多重索引結構

2)Ext4的索引結構

Ext4支持的文件大小可以達到2?TB。要描述如此大的文件,還要確保文件訪問的效率,索引機制是個關鍵因素。為此,Ext4修改了Ext3的多重間接索引方式,引入了現代文件系統中普遍采用的區段索引技術。

區段(extent)是指存放文件數據的若干個連續的數據塊。在Ext4的i節點中,原來的索引表存放位置被區段樹取代了。

3. Ext目錄文件的描述

目錄文件的描述結構與普通文件一樣。每個目錄文件都有一個i節點,還對應一到多個目錄項。不同之處是目錄文件的數據塊中存放的是一個目錄項列表,其中包含了該目錄下的所有文件的目錄項,頭兩個目錄項是“.”和“..”。Ext3的目錄下最多可包含32000個子目錄,Ext4擴充到可以支持任意多個子目錄。Ext目錄結構如圖6-14所示。圖6-14?Ext目錄結構

4. Ext文件的定位

按名查找是文件系統的一項重要功能。當需要打開某個文件時,只要指定文件的路徑名即可。文件系統根據路徑名,從根目錄或當前目錄開始逐級查找到文件所在的目錄,再找到文件的i節點。這個查找過程就是文件定位。隨后的文件訪問操作都將通過這個i節點進行。

以/home/zhuge/memo文件為例,它的查找定位過程如下:

(1)通過文件系統的超級塊(見6.3.2節介紹)找到根目錄“/”的i節點(Ext系統的根目錄是2號i節點),通過它找到根目錄文件的數據塊,其中包含了根目錄的目錄項列表,如圖6-15(a)所示。

(2)在根目錄項列表中查找home目錄的i節點(此例中是654083號i節點),通過home的i節點找到/home目錄的目錄項列表,如圖6-15(b)所示。

(3)在/home目錄項列表中查找zhuge目錄的i節點(此例中是654360號i節點),通過它找到/home/zhuge目錄的目錄項列表,如圖6-15(c)所示。

(4)在/home/zhuge目錄項列表中查找memo文件的i節點(此例中是655091號i節點),通過它找到/home/zhuge/memo文件的數據塊,如圖6-15(d)所示。圖6-15?Ext文件的定位過程圖6-15?Ext文件的定位過程

5. 文件的鏈接

文件鏈接是實現文件共享的主要方式。

1)鏈接方式

Linux系統提供了兩種文件鏈接方式,即符號鏈接和硬鏈接。

(1)符號鏈接。符號鏈接(symboliclink)也稱為軟鏈接,在功能上很像Windows系統中的快捷方式。符號鏈接文件是一種特殊的文件,其內容是所鏈接的目標文件的路徑名。

符號鏈接的優點是靈活,能夠實現跨越文件系統的鏈接以及目錄鏈接。它的缺點是空間開銷較大,因為每個符號鏈接都要建立一個新的文件。

(2)硬鏈接。硬鏈接(hardlink)是將兩個或多個文件通過i節點物理地鏈接在一起。硬鏈接的文件具有不同的文件路徑名和同一個i節點,通過其中任何一個路徑名訪問得到的都是同一內容,這就如同一個文件具有多個別名。圖6-14中的文件D和E就是硬鏈接的一個例子。

硬鏈接是Linux系統整合文件系統結構的基本機制,它允許了一個文件具有多個訪問路徑。與符號鏈接相比,硬鏈接的優點是節省空間且訪問效率高。缺點是受文件系統范圍的限制,也不能對目錄進行硬鏈接操作。

2)鏈接文件的建立與刪除

建立符號鏈接的系統調用是symlink(),它的操作是創建符號鏈接文件,在其中寫入目標文件的路徑名;建立硬鏈接的系統調用是link(),它的操作是在指定目錄中添加一個目錄項,寫入鏈接文件名,連到目標文件的i節點上,并將該i節點的連接數增1。

建立文件鏈接的命令是ln(link),刪除文件鏈接的命令是rm。

例6.1文件鏈接的建立與刪除。

6.3.2 Ext文件系統的磁盤布局

1. Ext3文件系統的布局

Ext3文件系統在格式化時把磁盤分區分為一個引導區和若干個塊組。所有塊組的大小相同(最后一組可能不足),順序排列。每個塊組中都由超級塊、組描述符表、塊位圖、索引節點位圖、索引節點表和數據塊區組成,如圖6-16所示。圖6-16?Ext3文件系統的磁盤布局

1)塊組

文件系統以存儲塊為單位劃分磁盤分區的存儲空間。Ext文件系統的存儲塊大小可以是1?KB、2?KB或者4?KB,在創建文件系統的時候指定。塊大小要根據盤的大小合理選取,過大會降低存儲空間的利用率,過小則會降低文件系統的時間效率。

每個塊組中都有一部分塊用來保存管理信息,這些管理信息稱為元數據(metadata),包括超級塊、組描述符表、塊位圖和索引節點位圖。其余的塊是用于保存文件的,包括索引節點表和數據塊區。

2)超級塊和組描述符

每個Ext3的磁盤分區有一個“超級塊”(SuperBlock),它位于塊組之首,占用一個存儲塊。超級塊用于記錄整個文件系統的全局配置參數和管理信息,如文件系統標識、數據塊大小、塊組大小、總的塊數和i節點數、空閑的塊數和i節點數等。

3)位圖

Ext3系統采用位圖方式來管理i節點和數據塊的分配。用于記錄數據塊的分配情況的位圖稱為“塊位圖”(BlockBitmap);用于記錄i節點的分配情況的位圖稱為“索引節點位圖”(InodeBitmap)。它們各占用一個存儲塊。

4)索引節點表和數據塊區

索引節點表和數據塊區是真正用于存放文件的區域。塊組中所有可用的i節點都集中存放在一起,形成“索引節點表”(InodeTable)。索引節點表要占用多個連續的存儲塊。塊組中的每個文件都在此表中占有一個i節點。

2. Ext4文件系統的布局

Ext4的主要目標是解決Ext3所面臨的可擴展性問題。索引方式的改進使得Ext4能夠有效地支持更大型的文件,而磁盤布局的改進則是擴展文件系統容量的必要途徑。Ext4在布局方面的改進主要有兩點:一是將塊號從32位擴充為48位,以增大塊號尋址范圍;二是引入元塊組的概念,以方便大型文件系統空間的管理與擴充。

啟用元塊組后,Ext4的磁盤布局格式如圖6-17所示。圖6-17?Ext4文件系統的磁盤布局

6.3.3 Ext文件存儲分配策略

當建立一個新的文件時,文件系統要為它分配一個i節點和一定數目的數據塊。當該文件被刪除時,文件系統將回收其占有的i節點和數據塊。當文件在讀寫過程中擴充或縮減了內容時,文件系統也需要動態地為它分配或回收數據塊。

分配的方法是根據位圖中的記錄找到空閑的i節點和數據塊,分配給文件。分配策略在一定程度上決定著文件系統的效率。文件系統會盡可能地把同一個文件所使用的數據塊或同一個目錄所關聯的i節點存放在相鄰的塊中,至少是在同一個塊組內,這樣就可以提高文件的訪問速度了。

另外,Ext文件系統還采用稱為預分配的機制來保證文件空間擴展時的分配效率和效果。在文件建立的時候,如果有足夠的空閑塊,就在相鄰的位置為文件分配多于當前使用的塊,稱為預分配塊。當文件內容擴展時優先使用這些塊。這樣做既提高了分配效率,也可以保證文件數據塊的連續性。如果預分配的塊用完或者是根本沒有啟動預分配機制,分配新塊時也要盡可能保證與原有塊相鄰。

6.4 虛擬文件系統

虛擬文件系統VFS位于整個文件系統的最上層。它為用戶進程及內核其他模塊提供使用文件系統的統一接口。VFS接受來自系統調用層的文件操作請求,利用下層的實際文件系統和I/O系統對請求進行處理,然后再把操作結果返回給調用者。此外,VFS還要負責管理文件系統的緩存,保證文件系統的整體效率。

虛擬文件系統之所以稱為虛擬,是因為它只存在于內存中,在系統啟動時建立起來,在系統關閉時消失。VFS不能直接操作磁盤上的文件,所有對文件的實際操作都要通過存在于磁盤分區的實際文件系統來完成。因此,虛擬文件系統必須和某個或某些實際的文件系統一起才能實現完整的文件系統功能。

6.4.1 VFS的對象

VFS采用了面向對象的設計思想,將文件系統看作是由一些對象構成。VFS依據這些對象提供的信息和操作函數來完成所有的文件操作。

構成VFS文件系統的基本對象有以下4類:

VFS超級塊(superblock),代表一個已掛裝的文件系統;

VFS目錄項(dentry),代表文件路徑中的一個分量;

VFS索引節點(inode),代表一個實際的文件;

VFS文件(file),代表進程打開的一個文件。

1. VFS超級塊

VFS超級塊代表一個特定的文件系統,它與實際文件系統的超級塊相對應,包含了操作該文件系統的所有信息。VFS超級塊的描述符是super_block,如圖6-18所示。圖6-18?VFS超級塊的描述符

2. VFS索引節點

VFS索引節點對象代表實際文件系統中的一個具體文件,它與實際文件系統中的i節點相對應,包含了操作文件所需的全部信息。VFS索引節點的描述符是inode,見圖6-19。圖6-19?VFS索引節點的描述符

3. VFS目錄項

從圖6-15所示的例子可以看出,在定位一個文件時需要沿該文件的路徑名逐級訪問路徑中的各個目錄。如果每次都要從磁盤讀取目錄文件的話,訪問文件的效率就會很低。為了方便查找操作,VFS引入了目錄項(dentry)的概念。dentry代表的是一個路徑分量。路徑由一系列的分量組成,每個分量都是一個目錄或文件。

例如,路徑名/home/zhuge/memo中包含了“/”“home”“zhuge”和“memo”4個分量。當VFS首次解析一個路徑名時,它依次讀取路徑中的每個目錄或文件,逐一為它們建立相應的dentry結構,并將其與該文件或目錄

的inode關聯起來。VFS將這些已建立的dentry按目錄的結構關系鏈接在一起。在后續的文件查找操作中,VFS只需沿dentry的鏈接結構進行查找,可以很快地找到目標文件的dentry結構,然后得到它的inode。圖6-20是VFS目錄項的描述符dentry。圖6-20?VFS目錄項的描述符

4. VFS文件

從用戶進程的角度來看VFS,直接看到的是文件,而不是超級塊、索引節點或目錄項。進程關心的只是文件的訪問模式、讀寫位置等文件屬性以及讀、寫等操作。VFS用file對象來描述這樣一個進程所關心的文件。每當進程打開一個文件,VFS都將為它建立一個file結構,如圖6-21所示。圖6-21?VFS文件的描述符

6.4.2 VFS對象的關聯結構

VFS的各類對象之間并非獨立存在,而是通過指針相互聯系,相互協作,實現各項文件操作功能。VFS對象之間的結構關系如圖6-22所示。圖6-22?VFS文件系統對象的結構關系

6.4.3 VFS文件與進程的接口

VFS為進程提供了訪問文件系統的統一接口,這個接口由fs_struct和files_struct結構構成。在進程的描述符task_struct中包括兩個指針:一個是指向fs_struct的指針fs,另一個是指向files_struct的指針files。進程通過這兩個指針建立起與文件系統以及打開文件之間的聯系。圖6-23描述了這個接口的結構。圖6-23進程與VFS文件系統的接口

6.4.4 VFS文件與緩存的接口

1. 頁面緩存的作用

文件內容的讀寫是一項耗時的操作。為減少實際訪問磁盤的次數,VFS利用磁盤高速緩存來保存從磁盤中讀出的文件數據。由于位于內存,這個緩存的空間是以內存頁為單位來存放文件數據的,因而稱為頁面緩存。頁面緩存中保存了最近被訪問過的那些文件的頁面。當文件系統與磁盤設備交換數據時,頁面緩存將傳輸的數據保存起來。每次讀文件時,VFS會首先在緩存區中查找,若找到則直接使用,否則再啟動設備傳輸數據。寫入磁盤的數據也是先放入緩存區中,然后再在適當的時候分批寫出到磁盤中。

2. 頁面緩存的接口結構

頁面緩存的核心數據結構是地址空間對象address_space,它是文件與頁面緩存的接口。圖6-24描述了address_space的結構以及文件與頁面緩存的接口方式。圖6-24文件與頁面緩存的接口

3. 緩存的查找與定位

在訪問文件時,進程所使用的是按字節編址的文件地址空間,而緩存所使用的是以頁為單位的頁面地址空間。兩者之間需要建立一個映射。address_space的功能就是將文件的地址空間映射到頁面緩存的地址空間上,這是通過一個稱為Xarray的索引結構來實現的。Xarray索引的作用就如同內存分頁機制的頁表,只不過這種索引機制對文件更為有效,能滿足大型文件高達幾千兆個頁面的檢索需求。一旦確定了要訪問的文件位置和字節數,通過Xarray索引就可以快速地求出該段文件數據所對應的緩存頁面號。

4. 緩存的讀寫操作

地址空間操作集的類型為address_space_operations,其中包含了針對緩存頁面的各種操作的函數指針。最主要的操作是readpage()、writepage()、write_begin()和write_end()等。其中,readpage()和writepage()分別是讀頁和寫頁。當需要執行實際的磁盤讀寫操作時,內核將調用這兩個函數,將文件數據從磁盤讀入緩存頁,或從緩存頁寫入磁盤

溫馨提示

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

評論

0/150

提交評論