計算機操作系統學習筆記——文件管理之文件系統基礎

一、基本概念

1、文件的定義

  • 文件是以計算機硬盤爲載體的存儲在計算機上的信息集合
  • 文件是指具有文件名的若干相關元素的集合;元素通常是記錄,而記錄又是一組有意義的數據項的集合
  • 基於文件系統的概念可以將數據組成分爲數據項記錄文件三級。

2、數據項

  • 數據項是文件系統中最低級的數據組織形式,可分爲基本數據項組合數據項

1)基本數據項

  • 用於描述一個對象的某種屬性的一個值,如姓名、日期等;是數據組織中可以命名的最小邏輯數據單位,即原子數據。基本數據項除了數據名外,還應有數據類型。因爲基本數據項是描述某個對象的屬性,而屬性不同需要不同的數據類型來刻畫。

2)組合數據項

  • 有若干基本數據項組成,簡稱組項。

3、記錄

  • 記錄是一組有關數據項的集合,用於描述一個對象在某方面的屬性。一個記錄包含哪些數據項取決於需要描述對象哪個方面;此外,一個對象可因爲所處環境的不同而成爲不同的對象。
  • 在諸多記錄中,爲了能夠唯一的表示一個記錄,必須在每個記錄的各個數據項中,確定一個或幾個數據項,把它們的集合稱爲關鍵字;即關鍵字是惟一能標識一個記錄的數據項。通常只需一個數據項作爲關鍵字

4、文件

  • 文件是指由創建者所定義的、具有文件名的一組相關元素的集合,邏輯上可分爲有結構和無結構兩種有結構文件中,文件由一組相似的記錄組成,如學生成績表,故又稱記錄式文件;而無結構文件則被視爲一個字符流,如一個二進制文件或字符文件,故又稱流式文件

4.1、文件的屬性

  • 文件具有一定的屬性,不同系統對文件屬性也有所不同,但通常包含以下屬性:
    ① 名稱:文件名唯一,以容易讀取的形式保存。
    ② 標識符:表示文件系統內文件的唯一標籤,通常爲數字,是對人不可讀的一種內部名稱。
    ③ 類型:被支持的不同類型的文件系統使用
    ④ 位置:指向設備和設備上文件的指針。
    ⑤ 大小:文件當前的大小,也可包含文件允許的最大值。
    ⑥ 保護:對文件進行保護的訪問控制信息。
    ⑦ 時間、日期和用戶標識:文件創建、上次修改和上次訪問的相關信息,用於保護和跟蹤文件的使用。
  • 所有文件的信息都存放在目錄結構中,而目錄結構保存在外存上。文件信息在需要時才調入內存。通常,目錄條目包括文件名名稱機器唯一標識符,而標識符定位其他屬性的信息
    在這裏插入圖片描述

5、文件類型

  • 爲了便於管理和控制文件而將文件分門別類,不同 OS 有不同的分類方法,大多數 OS 中都把文件類型作爲擴展名綴在文件名後面,在文件名和擴展名之間用“.”號隔開。常用的文件分類方法如下:

5.1、按用途分類

  • 根據文件的性質和用途分爲系統文件、用戶文件和庫文件。

1)系統文件

  • 指由系統軟件構成的文件。大多數系統文件只允許用戶調用,而不允許用戶讀,跟不允許用戶修改;還有一些系統文件不直接對用戶開放。

2)用戶文件

  • 指由用戶的源代碼、目標文件、可執行文件或數據文件等所構成的文件。用戶將這些文件委託給文件系統保管。

3)庫文件

  • 指由標準子例程及常用例程等所構成的文件。這類文件允許用戶調用,但不允許修改。

5.2、按文件中的數據形式分類

  • 可分爲源文件、目標文件和可執行文件。

1)源文件

  • 指由源程序和數據構成的文件。通常由終端或輸入設備輸入的源程序和數據所形成的文件都屬於源文件,通常由 ASCII 碼或漢字所組成。

2)目標文件

  • 指把源程序經過相應語言的編譯程序編譯過,但尚未經過鏈接程序鏈接的目標代碼所構成的文件,屬於二進制文件。通常,目標文件所使用的後綴名爲“.obj”。

3)可執行文件

  • 指編譯後所產生的目標代碼在經過鏈接程序鏈接後形成的文件。不同系統上,可執行文件的後綴是不一樣的。

5.3、按存取控制分類

  • 根據系統管理員或用戶所規定的存取控制屬性,文件可分爲:
  • 1)只執行文件:只被覈準的用戶調用執行,既不允許讀更不允許寫
  • 2)只讀文件:只允許被文件主和覈準的用戶讀取文件內容,而不允許寫
  • 3)讀寫文件:允許文件主和覈準的用戶去讀或寫文件

5.4、按組織形式和處理方式分類

1)普通文件

  • 由ASII 碼或二進制碼組成的文件。一般用戶所建立的源程序文件、數據文件、目標代碼文件以及操作系統自身的代碼文件、庫文件、實用程序文件都屬於普通文件,通常存儲在外存中。

2)目錄文件

  • 由文件目錄組成,用於管理和實現文件系統功能的系統文件,通過目錄文件可以對其他文件的信息進行檢索。由於目錄文件也是由字符序列組成,因此對其可進行與普通文件一樣的文件操作。

3)特殊文件

  • 特指系統中的各類 I/O 設備。爲了便於統一管理,系統將所有的輸入/輸出設備都視爲文件,按文件方式提供給用戶使用,如目錄的檢索、權限的驗證都與普通文件一樣,只是對這些文件的操作都是和設備驅動程序緊密相連的,系統將這些操作轉爲對具體設備的操作。根據設備數據交換單位的不同,又可分爲塊設備文件和字符設備文件;前者用於磁盤、光盤或磁帶等,後者用於終端、打印機等。

二、文件操作

  • 用戶通過文件系統所提供的系統調用實施對文件的操作。最基本的文件操作有創建文件、刪除文件、讀文件、寫文件、截斷文件和設置文件的讀/寫位置。對於一個實際的 OS,爲方便用戶還應提供如文件打開和關閉等操作功能。

1、文件基本操作

1.1、創建文件

  • 創建一個新文件時,系統首先要爲新文件分配必要的外存空間,並在文件系統的目錄中,爲之建立一個目錄項。目錄項中應記錄新文件的文件名及其在外存中的地址等屬性。

1.2、刪除文件

  • 從文件系統中刪除一個文件時,應先從目錄中找到要刪除的文件的目錄項,使之成爲空項,然後回收該文件所佔用的存儲空間

1.3、寫(修改)文件

  • 爲了寫文件,須在相應的系統調用中指明文件命名稱和要寫入文件的內容。給定文件名稱,文件系統才能搜索目錄以查找文件位置。文件系統必須爲該文件維護一個寫位置的指針。每當發生寫操作時,就更新寫指針。

1.4、讀(查看)文件

  • 同樣的,在一個系統調用中給出文件名和要讀入文件塊的內存目標地址,需要搜索目錄以找到相關目錄項,系統維護一個讀位置的指針。每當發生讀操作,更新讀指針。一個進程通常都只對一個文件讀或寫,因此當前操作位置可作爲每個進程當前文件位置的指針。由於讀和寫操作都使用同一指針,故節省了空間和降低了系統複雜度。

1.5、文件重定位(文件尋址)

  • 按條件搜索目錄,將當前文件位置設置成給定值,並且不會讀、寫文件。文件重定位可以從順序存取變爲隨機存取。

1.6、截斷文件

  • 允許文件的所有屬性不發生改變,而刪除文件內容——將其長度置零並釋放其空間。

2、文件的打開與關閉

  • 要求首次使用文件時,用系統調用 open 將指明文件的屬性——包括文件在外存上的物理位置——從外存複製到內存打開文件表的一個表目中,並將該表目的編號即索引返回給用戶。操作系統維護一個包含所有打開文件信息的表——打開文件表,Open-file Table。當用戶需要一個文件操作時,可通過該表的一個索引指定文件,省去搜索環節;當文件不再使用時,進程可以關閉它,操作系統從打開文件表中刪除這一條目。open 調用在得到操作系統允許的情況下,都會返回一個只想打開文件表中的一個條目的指針,通過該指針進行所有的 I/O 操作,以簡化步驟並節省資源。在Open 調用完成後,操作系統對該文件的任何操作都不再需要文件名,而只需 open 調用返回的指針
  • 整個系統表包含進程相關信息,如文件在磁盤的位置、訪問日期和大小。一個進程打開一個文件,系統打開文件表就會爲打開的文件增加相應的條目;當另一進程執行open時,只不過是在其進程打開表中增加一個條目,並指向整個系統表的相應條目。通常,系統打開文件表的每個文件時,還用一個文件打開計數器(Open Count),記錄多少進程打開了該文件。每個關閉操作close使count遞減,當打開計數器爲0時,表示該文件不再被使用,系統將回收分配給該文件的內存空間等資源。若文件修改過,則將文件寫回外存,並將系統打開文件表中的相應條目刪除,最後釋放文件的文件控制塊(File Control Block,FCB)

2.1、文件關聯信息

  • 每個打開文件都有如下關聯信息:
    • 文件指針,系統用於跟蹤上次的讀寫位置作爲當前文件位置的指針,這種指針對打開文件的某個進程來說是唯一的,因此必須與磁盤文件屬性分開保存。
    • 文件打開計數,文件關閉時,操作系統必須重用其打開文件表條目,否則表內空間將不夠用。因爲多個進程可能打開同一個文件,所以系統在刪除打開文件條目之前,必須等待最後一個進程關閉文件。計數器跟蹤打開和關閉的數量,計數爲0時,系統關閉文件,刪除該條目
    • 文件磁盤位置,絕大多數文件操作都要求系統修改文件數據。該信息保存在內存中,以免爲每個操作都從磁盤中讀取。
    • 訪問權限。每個進程打開文件都需要一個訪問模式:創建、只讀、讀寫、添加等。該信息保存在進程的打開文件表中,以便操作系統能夠允許或拒絕之後的I/O請求。

三、文件的邏輯結構

  • 文件的邏輯結構是從用戶觀點出發看到的文件的組織形式,不同於文件的物理結構是從實現觀點出發看到的文件在外存上的存儲組織形式。文件邏輯結構與存儲介質特性無關,文件的邏輯結構實際上是指在文件的內部,數據邏輯上是如何組織的。

1、文件邏輯結構的類型

  • 文件邏輯結構有兩大類:有結構文件和無結構文件。其中有結構文件又可細分爲順序文件、索引文件、索引順序文件、直接文件或散列文件

2、無結構文件

  • 無結構文件又稱爲流式文件,是最簡單的文件組織形式。
  • 無結構文件將數據按順序組織成記錄並積累、保存,是有序相關信息項的集合,以字節爲單位。因爲此種文件沒有結構,因而對記錄的訪問只能通過窮舉搜索的方式,故而此種文件形式對大多數應用不適用。但字符流文件的無結構文件管理簡單,用戶可以方便地對其進行操作。所以,那些對基本信息單位操作不多地文件較適於採用字符流無結構文件,如源程序文件、目標代碼文件等。

3、有結構文件

  • 有結構文件又稱爲記錄式文件。

3.1、順序文件

  • 文件中的記錄一個接着一個地順序排列,記錄通常是定長地,可以順序存儲或以鏈表形式存儲,在訪問時需要順序搜索文件。順序文件有兩種結構:串結構,記錄之間的順序與關鍵字無關,通常由存入時間的先後排列記錄;第二種是順序結構,文件中地所有記錄按關鍵字順序排列。
  • 順序文件的最佳應用場合是在對記錄進行批量存取時,即每次要讀或寫一大批記錄時,順序文件的存取效率是所有邏輯文件中最高地;也只有順序文件才能在磁帶上有效工作。順序文件的缺點就是對查找、修改、增加或刪除單條記錄的操作比較困難
  • 爲了解決順序文件增刪單條記錄,可以爲順序文件配置一個運行記錄文件(Log File),或叫做事務文件(Transaction File),把試圖增加、刪除或修改的信息記錄於其中,規定每隔一定時間,如 3 小時,將運行記錄文件與原來的主文件加以合併,產生一個按關鍵字排序的新文件。
    3.2、索引文件
    在這裏插入圖片描述
  • 如圖所示,對於定長記錄的文件,要查找第 I 條記錄,可直接根據公式:
    在這裏插入圖片描述
  • 找到第 I 條記錄相對於第 1 條記錄的地址。但是,對於可變長記錄的文件,要查找第 n 條記錄,必須順序地查找前 n-1 條記錄,從而獲得相應記錄地長度 L,進而按下面地公式:
    在這裏插入圖片描述
  • 注意:假定每條記錄前用一個字節指明該記錄的長度
  • 變長記錄文件只能順序查找,系統開銷大。爲此,可以建立一張索引表以加快檢索速度,索引表本身是定長記錄的順序文件。在記錄很多或訪問要求高的文件中,需要引入索引以提供有效的訪問。實際上,通過索引可以成百上千倍地提高訪問速度。

3.3、索引順序文件

  • 索引順序文件是順序和索引兩種組織形式的結合。索引順序文件將順序文件中的所有記錄分爲若干組,爲順序文件建立一張索引表,在索引表中每個組的第一條記錄建立一個索引項,索引項中含有該記錄的關鍵字和指向該記錄的指針。
    在這裏插入圖片描述
  • 如圖所示,主文件包含姓名和其他數據,姓名爲關鍵字,索引表中爲每個組的第一條記錄的關鍵字值,用指針指向主文件中該記錄的起始位置。索引表只包含關鍵字和指針兩個數據項,因此姓名關鍵字遞增排列。主文件中記錄分組排列,同一個組中的關鍵字可以無序,但組與組之間的關鍵字必須有序。
    查找一條記錄時,首先通過索引表找到其所在的組,然後在改組中順序查找。
  • 對於有 N 條記錄的順序文件,查找某關鍵字值的記錄時,平均需要查找 N/2 次。在索引順序文件中,設 N 條記錄分爲 N^(1/2) 組,索引表有 N^(1/2) 個表項,每組有 N^(1/2) 條記錄,在查找某個關鍵字值的記錄時,先順序查找索引表,需要 N^(1/2)/2 次,然後再在主文件中對應的組中順序查找,也需要 N^(1/2)/2 次,故共查找 N^(1/2) 次。顯然,索引文件和索引順序文件提高了存取的速度,但需要更多的存儲空間,因爲索引文件也是需要空間的。當記錄非常多時,可採取多級索引。

3.4、直接文件和哈希文件

1)直接文件

  • 採用前幾種文件結構對記錄進行存取時,都必須利用給定的記錄鍵值,先對線性表或鏈表進行檢索,以找到指定記錄的物理地址。而直接文件,則可根據給定的記錄鍵值,直接獲得指定記錄的物理地址。換言之,記錄鍵值本身就決定了記錄的物理地址
  • 這種由記錄鍵值到記錄物理地址的轉換成爲鍵值轉換(Key to address transformation)

2)哈希文件

  • 哈希文件又叫散列文件,是目前最爲廣泛的一種直接文件。利用Hash 函數即散列函數,可將記錄鍵值轉換爲相應記錄的地址。

  • 爲了能實現文件存儲空間的動態分配,通常由 Hash 函數所求得的並非是相應記錄的地址,而是隻想一目錄表相應表目的指針,該表目的內容指向相應記錄所在的物理塊。
    在這裏插入圖片描述

  • 如上圖,若令 K 爲記錄鍵值,用 A 作爲通過 Hash 函數 H 的轉換所形成的該記錄在目錄表中對應表目的位置,則有關係 A=H(K)。

  • 通常, Hash 函數作爲標準函數存於系統中,共存取文件時使用。

  • Hash 文件具有很高的存取速度,但是會引起衝突,即不同關鍵字的散列函數值相同

  • 有結構文件邏輯上的組織,是在爲文件中查找數據服務的:順序查找、索引查找、索引順序查找和哈希查找

四、目錄管理

  • 與文件管理系統和文件集合相關聯的是文件目錄,文件目錄也是一種數據結構,包好有關文件的屬性、位置和所有權等信息,這些信息主要由操作系統進行管理。
  • 對目錄管理的基本要求:
  • 從用戶的角度看,目錄在用戶所需要的文件名和文件之間提供一種映射,所以目錄管理要實現“按名存取”;目錄存取的效率直接影響到系統的性能,所以要提供對目錄的檢索速度;在共享系統中,目錄還需要提供用於控制訪問文件的信息;此外,文件允許重名也是用戶的合理和必然要求。
  • 目錄管理通過樹形結構來解決和實現。目錄管理實際上是文件”外部“的邏輯結構的相關問題。

1、文件控制塊

  • 與進程管理一樣,爲實現目錄管理,操作系統中引入了文件控制塊。
  • 文件控制塊是一種數據結構,用於存放控制文件需要的各種信息,以實現“按名存取”FCB 的有序集合稱爲文件目錄,一個 FCB 就是一個文件目錄項。爲了創建一個新文件,系統將分配一個 FCB 並存放在文件目錄中,成爲目錄項。
    FCB 主要包含以下信息:
    • 基本信息:文件名、文件的物理位置、文件的邏輯結構、文件的物理結構等。
    • 存取控制信息:文件存取權限等。
    • 使用信息:文件建立時間、修改時間等。
    以 MS-DOS 中的 FCB 爲例,FCB 結構如下:
    在這裏插入圖片描述

2、索引節點

  • 檢索目錄文件只需文件名,僅當找到一個目錄項時才需要從該目錄項讀出文件的物理地址,因此例如 UNIX 系統採用瞭如下文件名和文件描述信息分開的方法
    在這裏插入圖片描述
  • 文件描述信息單獨形成一個稱爲索引節點的數據結構,簡稱 i 節點。文件目錄中的每個目錄項僅由文件名和指向該文件所對應的 i節點的指針構成。
  • 舉例說明使用索引節點的好處:
  • 假如一個 FCB 爲 64B,一個盤塊大小爲 1KB,則一個盤塊可存放 16 個 FCB;而 UNIX 系統中一個目錄項僅佔 16B——14B 文件名和 2B i節點指針,則原來 1KB 的盤塊可存放 64 個目錄項,這可以令查找文件時的平均啓動磁盤次數減少爲原來的 1/4,節省了系統開銷。

2.1、磁盤索引節點

  • 存放在磁盤上的索引節點稱爲磁盤索引節點,UNIX 中每個文件都有一個唯一的磁盤索引節點,主要包括以下幾方面:
    • 文件標識符:擁有該文件的個人或小組的標識符
    • 文件類型:包括普通文件、目錄文件和特別文件
    • 文件存取權限:各類用戶對該文件的存取權限
    • 文件物理地址:每一個索引節點中含有 13 個地址項,即 iaddr(0)~iaddr(12),它們直接或間接方式給出數據文件所在的盤塊的編號。
    • 文件長度,以字節爲單位
    • 文件連接計數:在文件系統中所有指向該文件的文件名的指針計數
    • 文件存取時間:該文件最近被進程存取的時間、最近被修改的時間及索引節點最近被修改的時間。

2.2、內存索引節點

  • 存放在內存中的索引節點就稱爲內存索引節點。當文件被打開時,要將磁盤索引節點複製到內存的索引節點中,便於以後使用。
    內存索引節點增加了以下內容:
    • 索引節點編號:用於標識內存索引節點。
    • 狀態:指示 i節點是否被上鎖或被修改。
    • 訪問計數:每當有一進程訪問此 i節點時,計數加 1,訪問結束減 1.
    • 邏輯設備號:文件所屬文件系統的邏輯設備號。
    • 鏈接指針:設置分別指向空閒鏈表和散列隊列的指針。

3、目錄結構

  • 在目錄這個層次上,用戶常有的操作包括:
    1)搜索:搜索目錄以找到目標文件對應的目錄項,從而快速使用文件。
    2)創建和刪除:文件的創建和刪除,目錄中也要進行對應的目錄項的新建和刪除。
    3)顯示和修改:用戶可以請求顯示目錄的內容,目錄相對應文件的屬性,當文件的屬性發生變化時,目錄項也要做出相應的修改。
  • 爲了便於完成這些操作,目錄就需要一定的組織結構,常用的目錄結構由單級目錄結構、兩級目錄結構和多級目錄結構等。

3.1、單級目錄結構

  • 整個文件系統只建立一張目錄表,每個文件只佔一個目錄項,目錄項由文件名、文件擴展名、文件類型、文件物理地址以及文件屬性和一個狀態位,狀態位用於表明目錄項是否空閒。
    在這裏插入圖片描述
    • 訪問文件時,先按文件名在該目錄中查找到相應的 FCB,經合法性檢查後執行相應的操作。
    • 新建文件時,必須先檢索所有目錄項中以確保沒有“重名”的情況,然後再該目錄中增設一項,把 FCB 的信息保存在該項中。
    • 刪除文件時,先從該目錄中找到該文件對應的目錄項,回收該文件所佔用的存儲空間,然後清楚該目錄項。
    單級目錄結構實現了“按名存取”,但查找速度緩慢、文件不許重名、不便於文件共享、不適用於多用戶操作系統。

3.2、兩級目錄結構

  • 將文件目錄分爲主文件目錄(Master File Directory,MFD)用戶文件目錄(User File Directory,UFD)。主文件目錄中,每個用戶目錄文件佔有一個目錄項,其目錄項包含用戶名和指向該用戶目錄文件的指針。用戶文件目錄則有同個用戶的所有文件的文件控制塊組成。
    在這裏插入圖片描述
  • 當某用戶欲對其文件進行訪問時,只需搜索用戶對應的 UFD,既解決了不同用戶的“重名”問題,有一定程度上保證了文件的安全,因爲在目錄上可以實現訪問限制。但是兩級目錄結構缺乏靈活性,不能對文件分類

3.3、多級目錄結構

在這裏插入圖片描述

  • 將兩級目錄的層次關係加以推廣形成多級目錄結構,多級目錄結構通常是樹型目錄結構:主目錄稱爲根目錄,具體的文件就是葉子,其他目錄作爲樹的節點。
  • 用戶訪問某個文件時,用文件的路徑標識文件,文件路徑爲字符串,由根目錄到文件所在目錄的所有目錄名與文件名用分隔符“/”連接而成,例如:“D:/user/document/test.txt”。從根目錄出發的路徑稱爲絕對路徑。當層次較多時,每次都從根目錄出發進行查詢顯然浪費時間,於是加入了當前目錄,進程對各文件的訪問都是相對於當前目錄進行的。當用戶訪問某個文件時,使用相對路徑標識文件,相對路徑從當前目錄出發到所找文件通路上所有目錄名與數據文件名由分隔符“/”連接而成,例如:“./user/web/page.html”,其中的“.”就表示當前目錄。
    每個用戶都有自己的“當前目錄”,也就是用戶目錄。操作系統提供一條專門的系統調用,供用戶隨時改變“當前目錄”。例如,在 Windows 系統中,當我們啓動 CMD 窗口時,所在的目錄就是用戶目錄,然後可以用命令 “cd” 來改變當前的目錄位置。

3.4、無環圖目錄結構

  • 樹形目錄便於實現文件分類,但不便於實現文件共享,爲此在樹形目錄結構的基礎上增加了一些指向同一節點的有向邊,使整個目錄成爲一個有向無環圖。
    在這裏插入圖片描述
  • 該結構爲每個共享節點設置一個共享計數器,每當圖中增加對該節點的共享鏈時,計數器加一;每當用戶提出刪除該節點時,計數器減一;僅當共享計數器爲 0 時,才真正刪除該節點,否則只刪除請求用戶的共享鏈
  • 共享文件不同於文件複製,文件複製是形成一個副本,各自獨立,即一個文件的修改不會影響另一個文件,而共享文件只有一個文件,任何改動都會被其他用戶所看到。
  • 無環圖目錄結構方便地實現了文件的共享,但是使得系統的管理變得複雜

五、文件共享

  • 文件共享允許多個用戶或進程共享同一份文件,而系統只需保留該文件的一個副本。若系統無文件共享功能,意味着凡是需要使用該文件的用戶,都須各自備有此文件的副本,浪費存儲空間。現在的文件共享已經發展到通過網絡與世界上各個終端設備進行共享,例如分佈式文件系統、遠程文件系統、分佈式信息系統等,這些系統允許多個客戶通過C/S模型共享網絡中的服務器文件。
  • 現代常用的兩種文件共享方法有基於索引節點的共享方式和利用符號鏈實現文件共享。

1、基於索引節點的共享方式

  • 此方式又稱爲硬鏈接
  • 在樹型結構目錄中,當有多個用戶要共享一個子目錄或文件時,必須將共享文件或子目錄鏈接到多個用戶的目錄中,才能方便地找到該文件
    在這裏插入圖片描述
  • 此時該文件系統的目錄結構已不再是樹型結構,而是個有向非循環圖(Directed Acyclic Graph,DAG)
  • 此方式下,文件屬性信息存放在索引節點中,文件目錄中只設置文件名及指向索引節點的指針,而索引節點同樣設有連接計數器 count,用於標識鏈接到本索引節點上的用戶目錄項的數目,同樣當 count=0 時系統纔會執行文件刪除操作,即便是文件創建者即文件所有者,在文件被共享時請求文件刪除,系統也只是進行計數器減一,因爲若是直接刪除文件將導致其他用戶的指針懸空,導致錯誤。
    在這裏插入圖片描述

2、利用符號鏈實現文件共享

  • 此方式又稱爲軟鏈接

  • 爲了能讓用戶(A)能共享另一個用戶(B)的文件(F),系統創建一個 LINK 類型的同名新文件,並將文件F寫入用戶A的目錄中,以實現用戶 A 的目錄與文件的鏈接,而新文件中只包含被鏈接文件(F)的路徑名。這樣的鏈接方法就稱爲符號鏈接

  • 新文件中的路徑名只被視爲符號鏈,當用戶A訪問被鏈接的文件時且正要讀 LINK 類型新文件時,此要求將被 OS 攔截,OS 根據新文件中的路徑名去讀該文件,便實現了用戶 A 對文件 F 的共享

  • 此方式實現共享文件時,只有文件擁有者才擁有指向其索引節點的指針,而其他共享該文件的用戶只有該文件的路徑名,這樣便可以避免文件擁有者刪除文件後出現其他用戶指針懸空的情況。此方式下,文件擁有者刪除文件時,其他用戶再試圖通過符號鏈訪問文件系統會因爲找不到文件而訪問失敗,於是再將符號鏈刪除,此時不會產生任何影響,這也是大多數正常情況下發送的結果。但是,如果在其他用戶使用符號鏈訪問被刪除文件之前,又有人在相同路徑下創建了同名文件,則此時符號鏈仍有效,但訪問的文件已經改變,這樣會導致一些意想不到的錯誤。

  • 此外,符號鏈方式還有一個顯著問題:用戶訪問共享文件時,需要根據文件名逐個查找目錄直到找到該文件的索引節點,因此,每次訪問都可能多次讀盤,致使訪問文件開銷變大且增加了啓動磁盤的頻率;符號鏈的索引節點也是要耗費磁盤空間

  • 符號鏈有一個很大的優點就是:能夠用於鏈接計算機網絡中任何一臺計算機中的文件,在提供該文件所在的機器的網絡地址以及文件在機器中的文件路徑的情況下

  • 兩種連接方式:每個共享文件都有幾個文件名,即每增加一條鏈接便會增加一個文件名,實質上是每個用戶用自己的路徑名去訪問共享文件。於是乎,當我們遍歷整個文件系時,將出現多次遍歷到該文件的情況。
    硬鏈接和軟連接都屬於靜態共享方法,此外還有動態共享——允許兩個進程同時對同一個文件進行操作。
    文件共享需“軟”“硬”兼施。硬鏈接將多個指針指向一個索引節點,保證只要還有一個指針指向索引節點,索引節點就不能刪除;軟鏈接將共享文件的路徑記錄下來,當要訪問時,根據路徑尋找文件。

  • 硬鏈接查找速度優於軟鏈接

五、文件保護

  • 文件系統必須提供一套文件保護機制,避免在文件共享時導致文件破壞或未經覈準的用戶修改文件,因此需要對文件的操作進行權限檢查。
  • 文件保護通過口令保護、加密保護和訪問控制等方式實現。其中,口令保護和加密保護是爲了防止用戶文件被他人存取或竊取,而訪問控制用於控制用戶對文件的訪問方式

1、訪問類型

  • 可加以控制的訪問類型主要有讀文件、寫文件、執行文件(exe等可執行文件)、文件尾部添加信息和刪除文件,以及列出文件名和文件屬性、重命名、複製和編輯文件
  • 高層的功能通過調用底層的功能進行實現,保護只在底層提供。例如,複製文件可通過一系列的讀請求來完成,也就是說擁有讀訪問權限的用戶也就擁有複製和打印的權限。

2、訪問控制

2.1、訪問控制列表

  • 訪問控制的常用方法就是根據用戶身份進行控制,通過爲每個文件和目錄增加一個訪問控制列表(Access-Control List,ACL),列表中規定每個用戶名及其所允許的訪問類型;此種訪問控制列表稱爲非精簡的訪問控制列表,雖然可以使用複雜的訪問方法,但是長度無法預計並且可能導致複雜的空間管理。爲了解決普通方法的侷限,出現了一種精簡的訪問控制列表。
  • 精簡的訪問控制列表採用擁有者、組和其他三種用戶類型;擁有者就是指文件創建者,和擁有者同個用戶組的往往具有相類似的權限,而其他用戶則權限較少。
  • 此種情況下,創建文件時,系統會將創建者用戶名及其所屬組名列在文件的 FCB 中。創建者訪問文件按照擁有者的權限,與創建者同組的用戶按照同組權限訪問,否則就按照其他用戶權限訪問。

2.2、口令和密碼

  • 口令是指用戶在建立一個文件時提供一個口令,系統爲其建立 FCB 時附上相應對的口令,同時告訴允許共享該文件的其他用戶。用戶請求訪問時必須提供相應的口令。此方法的時間和空間開銷都不大,但是口令直接存在系統內部,不夠安全。
  • 密碼是指對文件進行加密,文件訪問時需要使用密鑰。這種方法保密性強,節省了存儲空間,但是編碼和譯碼需要花費一定的時間。
  • 口令和密碼都是防止用戶文件被他人存取和竊取,並沒有控制用戶對文件的訪問類型。
  • 注意:
    1)現代操作系統常用的文件保護方法是,將控制列表與用戶、組和其他成員訪問控制方案一起組合使用
    2)對於多級目錄結構而言,不僅需要保護單個文件,而且還需要保護子目錄內的文件,因此需要提高目錄保護機制——目錄操作與文件操作不一樣,故而需要不同的保護機制

上一篇

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章