操作系統原理第十章:文件系統

1 文件概念及文件邏輯結構

文件對用戶來說是連續的邏輯地址空間,它是存儲在磁盤上的,文件是記錄在外存上的具有名字的相關信息的集合,文件裏面通常保存數據或程序。

1.1 文件的分類

文件的分類可以按照如下類別來分:

  • 按用途分類可以分爲:系統文件,庫文件,用戶文件;
  • 按按信息保存期限分類可以分爲:臨時文件,永久文件,檔案文件;
  • 按文件的保護方式分類可以分爲:只讀文件,讀寫文件,只執行文件;
  • 按文件的邏輯結構分類可以分爲:流式文件,記錄式文件;
  • 按文件的物理結構分類可以分爲:順序(連續)文件,鏈接文件,索引文件;
  • 按信息流向分類可以分爲:輸入文件,輸出文件,輸入/輸出文件(存儲設備);
  • 按文件中的數據分類可以分爲:源文件,目標文件,可執行文件;
  • 按文件的性質分類可以分爲:普通文件,目錄文件,特殊文件。

1.2 文件的屬性

無論將文件如何來分類,文件都有一些共性的東西,我們稱之爲文件的屬性,通常有如下屬性:

  • 文件名:唯一的以人們可以理解的方式保存的信息;
  • 類型:需要可以支持多種類型的系統;
  • 位置:指向文件在設備上的存儲位置的指針;
  • 大小:當前文件的大小;
  • 保護:控制對文件的讀取,改寫和執行的權限;
  • 時間,日期和用戶身份:保護和安全需要的數據。

上述的這些文件屬性信息會保存在磁盤上的目錄結構中。

1.3 文件結構

用戶和文件系統往往從不同的角度對待同一個文件的:

  • 用戶:從使用的角度,按信息的使用和處理方式組織文件;
  • 文件系統:從文件的存儲和檢索的角度,根據用戶對文件的存取方式和存儲介質的特性組織文件,決定用戶文件存放在存儲介質上的方式。

這樣就導致了文件有兩種形式的結構,即文件的邏輯結構和文件的物理結構:

  • 邏輯結構:用戶對文件的組織結構;
  • 物理結構:文件在外存儲器上的存儲結構。

物理結構直接影響存儲空間的使用和檢索文件信息的速度,邏輯文件保存到存儲介質上的工作由文件系統來做,這樣可減輕用戶的負擔。

文件從邏輯結構上分成二種形式,一種是無結構的流式文件,另一種是有結構的記錄式文件

  • 流式文件:指對文件內信息不再劃分單位,它是依次的一串字符流構成的文件;
  • 記錄式文件:是用戶把文件內的信息按邏輯上獨立的含義劃分信息單位,每個單位稱爲一個邏輯記錄(簡稱記錄)。記錄的長度可分爲定長和不定長記錄兩類。

我們重點討論的是記錄式的文件,記錄文件有順序、索引、索引順序文件幾種。

  • 順序文件:順序文件的所有記錄按鍵值的約定次序組織,記錄可以是定長的,也可以是變長的,順序文件常用於批量記錄讀取。對於定長記錄文件,若要查找第 ii 個記錄,可根據下式得到相對於第一個記錄首址的地址:Ai=idA_i =i*ddd 爲記錄的長度)。對於非定長記錄文件,若要查找第 ii 個記錄,則需要有每個記錄的長度:Ai=diA_i =∑d_idd 爲記錄的長度)。不支持直接存取。
  • 索引文件:爲解決非定長記錄文件無法直接存取問題,往往建立一張索引表,記錄下每個記錄的長度及指向該記錄的指針,從而方便了直接存取,索引表就類似於書的目錄,指明瞭每個章節都在哪一頁。索引文件對主文件中的記錄按需要的數據項(一個或幾個)建索引表,爲每個記錄設置一個表項,索引文件本身是順序文件組織。
  • 索引順序文件:事實上索引文件給每個數據項建立索引表這樣的開銷是比較大的,於是就有了索引順序文件, 索引順序文件先將順序文件中的所有記錄分爲若干個組;再爲順序文件建立一張索引表,表中記錄每個組的第一個記錄,該索引項包含記錄的鍵值和指向該記錄的指針。它是順序文件和索引文件的結合,檢索時,先根據關鍵字去檢索索引表,找到該記錄所在組的第一個記錄的位置,然後再利用順序查找法去查找主文件,找到所需記錄。如下圖,給每個姓名首字母都分了組,然後在索引表中只用保存每個組的首地址即可,找到首地址後,再在組內進行順序查找:
    在這裏插入圖片描述

2 文件訪問方式

前面提到文件有多種存儲結構,在訪問文件時,所採用的方式也是和文件的組織方式密切相關,常用的存取方式有如下兩種:

  • 順序存取 (Sequential access);
  • 直接/隨機存取 (Direct access)。

2.1 順序存取

順序存取是最簡單的訪問方式,它就是按照文件信息的邏輯順序依次存取:

  • 在記錄文件中:按記錄的排列順序來存取;
  • 在流式文件中:反映爲當前讀寫指針的變化,在存取完一段信息後,讀寫指針自動加上這段信息的長度,以便指出下次存取時的位置。

順序存儲示意圖如下圖所示,當前指針 (Current position) 可以向後讀,也可以回到起始位置:
在這裏插入圖片描述

2.2 直接/隨機存取

直接/隨機存取可以直接定位到文件中的任何一個記錄,而不需要像順序存取一樣要把路徑中的所有記錄過一遍。

對於連續文件(固定長度),第 ii 個記錄的地址(addr0addr_0 爲首記錄地址,LL 爲記錄長度): rptr=addr0+iLrptr=addr_0+i*L,在非定長文件中 LL 的值不固定,所以非定長文件不支持隨機存儲

對於索引文件,是支持隨機存取的,因爲我們可以先隨機查找索引表,再取地址。

2.3 文件的存儲設備

文件的訪問方式不僅和文件的存儲方式有關,還和文件的存儲設備有關,因爲文件時保存在存儲設備上的,文件自身也帶有物理設備的特性。

文件的存儲設備主要有磁帶,磁盤,光盤等,存儲設備的特性可以決定文件的存取方法,對於上述的幾種存儲設備,它們都是以塊爲單位存儲數據的,因此文件的存儲設備常常劃分爲若干大小相等的物理塊,以塊爲單位進行信息的存儲、傳輸。

以磁帶爲例,磁帶可以永久保存大容量數據,它是一種順序存取設備,即前面的物理塊被存取訪問之後,才能存取後續物理塊的內容。磁帶存取速度較慢:主要用於後備存儲,或存儲不經常用的信息,或用於傳遞數據的介質,現在磁帶已經基本上被淘汰了。下圖是磁帶存儲示意圖:
在這裏插入圖片描述
再以磁盤爲例,磁盤是一種隨機存儲設備,它既可以順序存取,也可以隨機存取。它可以直接定位到某個磁道上的某個扇區,如下圖所示:
在這裏插入圖片描述

3 文件的物理結構

用戶按邏輯結構使用文件,文件的物理結構對用戶來說是不必關心的,但對文件系統來說卻是至關重要的,因爲它直接影響存儲空間的使用和檢索文件信息的速度。文件系統按物理結構管理文件,當用戶請求讀寫文件時,文件系統必須實現文件的邏輯結構與物理結構之間的轉換。

文件的物理結構指的是文件在外存的存放組織形式,文件的物理結構與存儲設備的特性有很大關係,前面提到過文件的存儲設備通常劃分爲大小相等的物理塊,物理塊是分配及傳輸信息的基本單位,一個物理塊中可以存放若干個邏輯記錄,一個邏輯記錄也可以存放在若干個物理塊中。

所以文件的物理結構取決於外存的分配方式,當採用連續分配方式時,就是順序結構;當採用鏈接分配方式時,就是鏈接結構;當採用索引分配方式時,就是索引結構

3.1 順序結構

這是最簡單的物理文件結構,它將邏輯上連續的文件信息依次存放在外存連續的物理塊中。如下圖表示磁盤的存儲空間,當文件要存儲的時候,就爲它找一段連續的存儲空間存放,圖中相同顏色的物理塊表示一個文件,可以發現它們都是連續存放的。當我們需要找到某個文件的時候,要知道文件的首地址和長度,而這兩個值都是保存在目錄中的:
在這裏插入圖片描述
在這種分配方式下,每一個文件佔用一個連續的磁盤塊的集合,它的實現也非常簡單,只需要起始塊號和長度。同時它也可以隨機存取,因爲目錄中保存了起始地址和長度,可以直接定位到某個文件。若是存儲在磁盤中,其所需的磁盤尋道次數和尋道時間也比較少。

這種分配方式也有不足的地方,如現在有一個文件需要佔據10個物理塊,若查詢內存剩餘容量可以發現剩餘有15個內存卡(以上圖爲例),但是依然無法分配,因爲並沒有10個連續的物理塊,這個時候就出現了外碎片問題。

另外這種分配方式下文件不能動態增長,由於分配方式時順序的,所以存儲的方向也是固定的,如果某個文件要添加內容,可能導致物理塊不夠用,比如文件tr想增加3個物理塊,就無法完成。

3.2 鏈接結構

順序結構最大的問題就是外碎片問題,造成這個問題的主要原因就是順序分配,參照內存中解決外碎片的方法,文件的物理結構也可以採用離散的分配方式,即採用鏈接結構。

在鏈接分配方式下按所需分配磁盤塊,通過鏈接指針鏈接在一起,如下圖只需要知道起始塊和最後一塊即可:
在這裏插入圖片描述
可以發現一個文件的物理塊分散在磁盤的各個地方,在這種分配方式下消除了外碎片問題,但是缺點是無法支持隨機存取了,若想知道文件的邏輯第三個物理塊,則必須從首個物理塊開始找到第三個塊,而不能直接定位到第三個物理塊。同時由於是指針鏈接,指針佔據了一定的空間,而且存取速度較慢,物理塊離散的分佈,在磁盤存儲中會帶來更多的尋道次數和尋道時間。另外在這種分配方式下,只要磁盤中還有空間,文件時可以動態增長的。

解決指針佔據空間的問題可以將多個塊組成簇,以簇爲單位分配,指針佔用百分比減少,但增加內碎片,比如規定4個物理塊爲一個簇,每次分配都是4個物理塊爲單位分配。

爲了支持隨機存取,引入了文件分配表FAT (File allocation table ),每個磁盤會有一張文件分配表,裏面的表項是和磁盤的物理塊個數是一一對應的,每個表項存的內容就是該物理塊的下一個物理塊在什麼地方,如下圖所示,要找到某個文件只需要知道文件的起始地址就可以了,這樣就間接的實現了隨機存取,若要尋找文件邏輯上的第三個物理塊,則只需要查詢文件分配表即可,查找速度會非常快。:
在這裏插入圖片描述

3.3 索引結構

回顧順序結構和鏈接結構,順序結構支持隨機存取,但有外碎片;鏈接結構沒有外碎片,但不能直接存取,雖然引入的FAT可以隨機存取,但需要佔用較大的內存空間。

事實上,打開某個文件時,只需知道該文件所在的盤塊號, 一個文件的信息存放在若干不連續物理塊中,系統爲每個文件建立一個索引表,並將這些塊的塊號存放在索引表中,一個索引表就是磁盤塊地址數組,其中第 ii 個條目指向文件的第 ii 塊,如下圖,所有灰色的物理塊同屬於一個文件jeep,文件目錄中會保存這個文件的索引表的編號,在索引表會找到該文件對應的所有物理塊。這個索引表也是需要保存的,我們把它也保存在磁盤中,圖中的物理塊19,叫做索引塊
在這裏插入圖片描述
可以發現索引分配是支持隨機存取的,由於它也是一種離散的分配方式,所以它也沒有外碎片。索引分配顯然也是支持文件動態增長的。但是要建立索引表放在磁盤上,所以索引表是要佔據磁盤空間的,同時因爲是離散分配,也無法避免的增加了較多的尋道次數和尋道時間。

由於文件的大小是不定的,所以合理的設計索引表會提高檢索速度,也能減少空間開銷。當文件很小的時候,一張索引表就可以解決,當文件很大的時候,一張索引表可能就放不下了,因此有如下兩種方案:

  • 鏈接模式:將一個大文件的一個索引表接着一個索引表,鏈接起來,相當於將多個小的索引表拼湊成一個大索引表來滿足大文件的存儲需求;
  • 多級索引: : 將一個大文件的所有索引表(二級索引) 的地址放在另一個索引表(主索引,一級索引)中,也就是索引表的每個表項又指向了另一張索引表,如下圖所示:
    在這裏插入圖片描述

在兩級索引分配方式,若每個盤塊大小爲1KB,每個盤塊號佔4字節,則一個索引塊中可存放256個盤塊號,則兩級索引最多可包含的盤塊號總數爲64K(256*256)。因此,所允許的文件的最大長度爲64MB(64K*1KB)

4 目錄

有些系統保存了成百萬的文件,爲了管理這些數據,需要組織他們,所以引入了目錄管理,文件目錄通常分爲兩部分:

  • 磁盤可以分成一個或多個分區
  • 每個分區都包含了存儲在分區中的文件的信息,這些信息保存在設備目錄中,設備目錄記錄分區上所有文件的各種信息。

目錄是一個包含着所有文件信息的節點的集合,每一個目錄項對應着一個文件,如下圖:
在這裏插入圖片描述
目錄本身也是要保存下來的,目錄和文件都是保存在磁盤上的,在目錄中通常會保存文件的名稱、類型、地址、當前長度、最大長度、最後訪問時間、數據最後更新時間、所有者ID、保護信息等信息。

這些信息具體保存在文件控制塊FCB中,用於描述和控制文件的數據結構,它至少要包括文件名和存放文件的盤物理地址。文件控制塊的有序集合稱爲文件目錄,即一個文件控制塊FCB就是一個文件目錄項。文件控制塊FCB中保存的內容大致可以分爲如下三類:

  • 文件基本信息:文件名,用戶名,文件地址,文件長度,文件邏輯結構,物理結構;
  • 存取控制信息:文件存取權限;
  • 管理信息:共享計數,文件的建立日期,保存期限,最後修改日期,最後訪問日期。

4.1 目錄結構

目錄中就是所有文件控制塊FCB的集合,對FCB的管理應該滿足如下要求:

  • 效率:快速的定位一個文件;
  • 命名:方便用戶,兩個用戶可以有相同名字的不同文件,相同的文件可以有不同的名字。

下圖就是最簡單的單級目錄結構,所有文件對應這一個FCB表項,在單級目錄結構中,要找到一個文件則要遍歷FCB,而且由於是單級結構,不允許出現重命名,也不允許分組。:
在這裏插入圖片描述
爲解決一級目錄文件命名衝突,並提高對目錄文件檢索速度而改進,可以把目錄分爲兩級:

  • 一級稱爲主文件目錄(MFD):給出用戶名,用戶子目錄所在的物理位置;
  • 二級稱爲用戶文件目錄(UFD,又稱用戶子目錄):給出該用戶所有文件的FCB。

這樣在不同主文件目錄下的不同文件可以重名,而且用戶要查找文件只需要在自己的主目錄下查找即可,如下圖所示:
在這裏插入圖片描述
在二級目錄結構下依然是無法分組的,爲了解決這個問題引入了樹型目錄結構,如下圖所示:
在這裏插入圖片描述
在樹形目錄結構下,層次結構清晰,便於管理和保護,有利於文件分類,解決重名問題,提高文件檢索速度。但查找一個文件按路徑名逐層檢查,由於每個文件都放在外存,多次訪盤影響速度。由於樹形的葉子是不會重合的,所以不支持文件共享。

在有些系統中要求實現文件共享,這就引入了無環圖結構目錄,如下圖所示,兩個分支下的count都指向了同一個文件:
在這裏插入圖片描述
在這種方式下,當某一方去修改這個文件時,如刪除了這個文件,那麼另一方指向這個文件的指針就是一個懸掛指針,解決方案有兩種:

  • 設置一個斷點來按期檢查當前是否有懸掛指針,若有就刪除懸掛指針;
  • 通過表項保留計數來解決,文件的共享次數是通過一個計數器來實現的,當某一方刪除這個文件的時候,我們並不刪除這個文件,而是把這個計數器減一,當這個計數器爲1時,這個文件就是一個獨享文件,當這個計數器爲0時,這個文件就真正的被刪除了。

在有的系統中要求文件可以指向目錄,這就引入了普通圖結構目錄,如下圖所示:
在這裏插入圖片描述
這種結構下就會出現環,當查找某個文件時就可能陷入某個環,保證無環的方式有如下幾種:

  • 只允許鏈接到文件而不允許鏈接到子目錄;
  • 垃圾收集機制,定期檢查是否有環;
  • 每次添加一個鏈接時都用一個檢測算法判斷會不會產生環;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章