0x16 文件系統接口

一、文件

文件概念

計算機中信息存儲的基本組織形式;
相關信息結合;
具有文件名。

文件名

按名存取:文件名 -> 存儲位置
文件名由一串ASCII碼或(和)漢字構成;

名字長度

  • 8.3規則:文件名8個字符,類型3個字符,之間由“.”分割
  • 長文件名:可以最多輸入255多個字符作爲文件名

文件名可能大小寫敏感;Linux,Unix系統的文件名大小寫敏感,Windows系統的不敏感。

文件結構

指文件內信息的組織方式;
目的:便於程序理解文件內容。

操作系統應用程序決定了文件的結構。如pdf文件的結構由pd閱讀器決定。可執行文件的結構由操作系統決定等。

常用文件結構

  1. 無結構:文字流、字節流等;
  2. 簡單記錄結構:線性、固定長度、可變長度等;
  3. 複雜結構:格式化文檔、多媒體文件等。

文件類型—擴展名

文件類型一般由擴展名決定;
文件擴展名也稱文件後綴名,是標識文件類型的一種機制,擴展名跟在主文件名後面,由一個分隔符“.”分隔。
在這裏插入圖片描述

文件屬性

文件名:唯一,便於記憶;
文件位置:設備上文件位置的指針;
文件類型:文件的格式;
文件大小:文件當前大小;
保護:讀、寫、執行等訪問控制信息;
時間、日期和用戶標識:保護、安全和使用跟蹤的數據;
……
文件屬性保存在目錄中

文件操作

創建文件
寫文件
讀文件
在文件內重定位
刪除文件
截斷文件
打開文件
關閉文件

爲什麼要有打開文件操作?

  • 需要數據結構
    打開文件表:跟蹤打開文件;
    文件指針:指向最後一次讀寫的位置,每個進程1個;
    打開文件計數器:打開文件次數(調用open次數);
    文件存儲位置:文件存放在存儲設備上的位置信息;
    訪問權限:每個進程的訪問權限;

  • 優點
    方便文件共享;
    提高文件存取效率。

二、邏輯文件及其訪問方法

文件訪問

文件系統以文件爲單位進行信息的組織和存儲,其主要的功能是文件訪問。也就是對文件進行檢索、讀、寫等操作。
文件訪問主要和3個方面有關,分別是

  1. 邏輯文件
    文件內容組織方式;
    面向用戶;
  2. 目錄文件
    文件組織方式;
    文件屬性;
  3. 物理文件
    文件存儲方式;面向系統。

邏輯文件

文件呈現在用戶面前的組織結構;
又稱爲文件邏輯結構;
邏輯文件決定了文件訪問方法;

在這裏插入圖片描述

邏輯文件的訪問方式

  1. 順序訪問
  • 最簡單的訪問方式;
  • 文件信息按照存放順序,一個記錄一個記錄地依次訪問
  • 順序文件
  • 典型存儲設備:磁帶
  1. 直接(隨機)訪問
  • 可以直接定位到文件的某條記錄進行訪問
  • 直接文件
  • 典型設備:磁盤

順序文件

訪問方式:順序訪問;
依次訪問數據,不能直接跳轉到文件的指定位置;
在這裏插入圖片描述
優點:節省存儲空間;
缺點:訪問效率差。
在這裏插入圖片描述

直接(隨機)文件

訪問方式:直接(隨機)訪問;
直接通過計算得到需要讀寫記錄的位置,直接跳轉進行文件讀寫。
在這裏插入圖片描述
優點:訪問效率好;
缺點:浪費存儲空間。
在這裏插入圖片描述
是否可以兼顧順序文件和直接文件的優點呢?也就是採用順序文件的存儲方式和直接文件的檢索方式。

索引文件

基本方法:爲順序文件建立索引表。
索引表中的每一個表項存放一個指針,指向順序文件中的一個記錄,順序文件中有多少條記錄,索引表就有多少個表項。索引表的每個表項等長,便於檢索。
在這裏插入圖片描述
在這裏插入圖片描述

三種邏輯文件性能對比

文件訪問方式,即邏輯文件是影響文件訪問效率的因素之一!!!
在這裏插入圖片描述
索引文件廣泛用於組織需要頻繁檢索的文件,如數據庫文件等。

另外一種索引文件

根據某個檢索項作索引;
在這裏插入圖片描述

三、文件目錄

文件控制塊(FCB)

存放操控文件所需的各類文件屬性信息,如文件名、長度、創建時間、存放位置、訪問控制權限……

在文件系統中,文件控制塊類似於索引文件中的索引表,必須通過文件控制塊來訪問文件。
在這裏插入圖片描述

目錄項和目錄

目錄

是包含着所有文件信息的節點集合,是根據文件名檢索文件的橋樑。

目錄項

目錄由目錄項有序構成。一個目錄中的目錄項組成了目錄文件,每個目錄項存放了一個文件的各類屬性,每個目錄項都是等長的。

在有的系統中,目錄項=文件控制塊。
文件與文件控制塊一一對應,文件目錄就是文件控制塊的有序集合,一個文件控制塊就是一個目錄項。通常,文件目錄也被看作是文件,稱爲目錄文件

很多操作系統把目錄組織成一個文件,這就是目錄文件。如下圖所示,就是多個目錄項組成的目錄文件,每個目錄項都是等長的。
在這裏插入圖片描述

目錄和文件

每個目錄項中存放了文件在存儲設備的存放地址,目錄和文件都駐留在存儲設備(如磁盤)
在這裏插入圖片描述

目錄相關操作

在這裏插入圖片描述
創建文件操作僅僅是爲這個文件創建了一個目錄項。

文件檢索

目錄是用戶和文件之間的一個橋樑。用戶根據文件名訪問文件,而文件是存儲在存儲設備上。文件名是一個字符串,存儲位置是一個數字,所以要將文件名的字符串轉換爲具體的數字才能去訪問這個文件。
目錄負責把文件名轉換爲文件在存儲設備上的位置。這個根據文件名我文件存儲位置信息的過程,就是文件檢索。

具體步驟

① 根據文件所在的目錄打開目錄文件;
② 從磁盤讀入該目錄文件的1個(物理)塊,該塊包含若干個目錄項;
③ 根據文件名遍歷內存中的該塊,如找到則結束;
④ 判斷該目錄文件是否還有物理塊沒有讀入,如果是轉2;否則。結束。表示該目錄中沒有此文件名的文件。

根據文件名找一個文件的目錄項,就是文件檢索的主要工作。找到目錄項後,就可以根據該目錄項得到文件的存儲位置並進行讀寫。

如下圖所示,有一個有n個目錄項的文件,平均遍歷目錄項數:(1+n)/2
最佳情況是在目錄項0就是所檢索文件的目錄項;最差情況是目錄項n-1。這還不包括文件查不到的情況。
在這裏插入圖片描述

目錄性能

(物理)塊
物理塊是內存和存儲設備數據交換基本單位,一個物理塊一般爲4KB、8KB和16KB等,每次讀寫文件都是以塊爲單位,至少1塊。

例如:
當前物理塊大小是4KB,則一個讀入文件的1個字節的操作也要從存儲設備讀入4KB。

例子:
目錄項大小 = ds bytes
最多文件數 = n         物理塊大小 = b
那麼:
目錄文件大小 = ds*n bytes
目錄文件需要的物理塊數目 = ds*n/b
檢索一個文件需要平均讀入的塊數 = (ds*n/b+1)/2

由於物理塊大小固定,所以,要想降低讀入的物理塊數量,有兩個途徑:

  1. 降低目錄項大小ds
  2. 降低文件數n

一個降低目錄項大小的方法就是Unix採用的i Node。
一個完整的目錄項就是文件控制塊,裏面包含了大量的文件屬性。
如果不讀入無關的信息,降低目錄項的大小,就可以提升文件訪問的效率。

通過分析發現

  • 文件檢索過程中需要用到的內容主要是文件名。
  • Unix爲每個文件控制塊建立一個索引項,內容爲文件名和指向文件控制塊的指針。類似於索引文件,稱爲i node索引結點。
    在這裏插入圖片描述

例子:
物理塊大小:4KB         目錄中文件數:1萬個

FCB(目錄項)大小:2KB
則:
目錄文件大小:10000*2KB = 20000KB
目錄文件需要的物理塊數量:20000KB/4KB = 5000塊
檢索文件平均需要訪問的物理塊數:(5000+1)/2 = 2500.5塊

i node:64B
那麼:
目錄文件大小:10000*64 = 625KB
目錄文件需要的物理塊數量:625KB/4KB+1 = 157塊
檢索文件平均需要訪問的物理塊數:(157+1)/2 = 79塊(僅僅是2500.5的1/32)

文件保護

文件的所有者/創建者應該有權控制:

  • 能做什麼
    指文件存取類型,有讀、寫、執行、添加、刪除和列表清單等基本操作;
    Unix等系統把用戶分爲三個層面:
    文件所有者、同組用戶、公共用戶。
    訪問模式:分爲讀、寫、執行,用R/W/X來表示。爲了方便,用三個位來代表R/W/X,用 r=4,w=2,x=1 來表示權限。
    在這裏插入圖片描述
    對特定的文件或目錄,定義適當的訪問權限。
    如Linux的命令chmod 761 game,就是賦予game的所有者R/W/X權限,同組用戶R/W權限,其他公共用戶X權限。
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 由誰來做

四、文件結構

目錄結構的設計目標

效率

  • 快速定位文件位置
  • 提高文件訪問效率

命名

  • 方便用戶使用,允許重名
  • 同名的不同文件
  • 不同名的相同文件

分組

  • 文件分組(子目錄)
  • 兼顧效率和方便性

單層目錄

所有文件在同一目錄中,只有一級目錄:根目錄;
根目錄(/):一個文件系統最頂層的目錄。
在這裏插入圖片描述
優點:結構簡單;
缺點

  • 檢索效率差(目錄下文件過多)
  • 不能有同名文件,一個文件只能有一個名稱
  • 不能分組

單層目錄一般用於早期文件數量較少的操作系統中。

雙層目錄

單層目錄的改進是爲每個用戶建立自己的目錄,使得每個用戶的文件可以分開存放。
優點
1)不同用戶可有相同文件名的文件;
2)比單層目錄提高檢索效率(文件分佈在多個用戶目錄中)
缺點
1)無法分組;
2)同一用區分引入了路徑戶不能有相同文件名的文件。
在這裏插入圖片描述
路徑名
不同目錄存在同名文件,爲了利用不同路徑區分同名文件引入了路徑。
路徑名 = 目錄名+分隔符+文件名
從根目錄開始到文件的路徑,稱爲路徑名。

樹形目錄

在這裏插入圖片描述
特點
(1)檢索高效,子目錄增多會使得每個目錄下文件數量減少;
(2)可分組,用戶可以自由建立子目錄;
(3)允許重名,不同子目錄可以有同名文件。

爲了提高訪問的效率,引入了當前目錄,也稱爲工作目錄,是指當前運行進程所在的目錄。

絕對路徑:從根目錄開始的路徑名;
相對路徑:從當前目錄開始的路徑名,提高檢索效率。

性能對比(查找文件first爲例)

如下圖,藍色是從根目錄查找first文件,黃色是從相對路徑查找first文件。
在這裏插入圖片描述
目錄項:佔一個物理塊。

目錄文件 目錄項 平均讀入塊數
/ spell 0
spell mail (1+7)/2=4
mail prt (1+4)/2=2.5
prt first (1+2)/2=1.5

絕對路徑:/spell/mail/prt/first
根目錄一般在內存;
一共需要讀入4+2.5+1.5=8個物理塊。

相對路徑:./prt/first
當前目錄在內存;
讀入1.5個物理塊。

圖形目錄

所謂文件共享是指不同目錄中的文件指向同一個物理文件,也就是它們內容相同。

很明顯,樹形目錄不能實現文件共享,圖形目錄可以。圖形目錄有兩種,無環圖目錄和通用圖目錄(有環圖)
無環圖一個特點是有向邊無環。
在這裏插入圖片描述

文件共享

兩種共享文件方式:硬鏈接和符號鏈接(軟鏈接)

硬鏈接

硬鏈接是指一個物理文件可以有幾個文件名,但是隻有一個FCB。每個文件名有自己的目錄項,也就是i node,但共享一個FCB。

創建一個文件A的時候,系統爲其創建了一個i node和FCB,以及分配存儲空間來存儲文件內容。當建立文件B和A共享同一個文件時,系統僅僅爲B建立一個i node,並讓它指向A的FCB。
爲知道每個FCB中有多少i node在使用,需要在FCB中加入計數器,記錄當前鏈接到FCB的i node數量。

刪除文件的過程正好相反,刪除文件的i node,並把計數器減1,最後刪除A的時候,需要把i node,FCB,物理文件一起刪除。
在這裏插入圖片描述

符號鏈接(軟鏈接)

Windows,Linux使用符號鏈接,符號鏈接文件是一種特殊的文件,包含另外一個共享文件的路徑名。
在這裏插入圖片描述

通用圖目錄

圖中有環就會使遍歷目錄的操作陷入陷阱導致無窮循環,下圖book和avi之間就有環。
在這裏插入圖片描述

如何保證無環

  • 僅允許指向文件的鏈接,不允許指向子目錄的鏈接
  • 垃圾回收
  • 每當加入新鏈接時,使用環路檢測算法判斷是否正確
  • 優化遍歷目錄算法,避免對環的重複搜索
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章