文件系統


文件系統的布局

如圖,一個磁盤有一個MBR,MBR后面跟隨着磁盤的分區表,在計算機啟動時,BIOS將MBR載入內存中,並且把CPU的控制權交給MBR,MBR要做的就是確認有多少個活動的分區,並將Boot block載入內存中去執行。

並且一個磁盤可以被分為多個磁盤區,每個磁盤區可能包含Boot block、Superblock等等的塊。具體包含哪些塊依據不同的文件系統實現而定。

  1. Boot block是引導計算機啟動的時候,將操作系統載入內存中。
  2. Superblock是文件系統的參數,比如說文件的類型,該分區的磁盤塊數其他的管理信息。
  3. Free space mgmt是管理磁盤的空閑空間的信息,可以是位圖的形式也可以是鏈表的形式。
  4. i-nodes是一個數據結構數組,每個文件占一個位置,每個位置說明了文件的信息,比如文件占用哪些磁盤塊
  5. Root dir目錄樹的根部位置
  6. Files and directories剩下的就是存放文件和目錄了。

文件和目錄

文件其實是磁盤地址空間的一個抽象。目錄也屬於文件。我們可以通過磁盤地址空間的抽象,更容易對磁盤進行數據的存取和其他操作。

但是文件和目錄還是有所不同的:

  • 文件:是進程創建的信息邏輯單元。也就是我們平時看到的文本文件和可執行文件等等。
  • 目錄:目錄是用來保存文件所在位置信息的,是管理文件系統結構的系統文件。

文件

文件的類型有很多,依據文件系統的設計而定,但是主要的還是普通文件和目錄。

普通文件又分為ASCII文件和二進制可執行文件:

  • ASCII文件:就是可讀的,通過文本編輯器打開我們可以看到文件里的內容。

  • 二進制可執行文件不同,它是一個字節序列。只能通過特定的程序才能使用該文件。

    這個文件分為五個段,如圖所示,其中:

    • magic number是代表這個文件是一個二進制可執行文件。
    • Relocation用於程序裝入內存時對程序所在實際內存地址的重新定位。
    • Symbol table用於程序的調試。
    • Entry point是程序的執行入口。

文件的組織方式

  • 文件主要以無結構的字節序列來組織,序列具體的含義由相應的進程去解釋。

  • 還有一種組織文件的結構是,一個文件是一個固定長度記錄的序列,每個記錄有內部的結構。當我們讀操作的時候返回一個記錄就是返回一個文件,當我們寫操作的是時候在末尾追加一個記錄就是追加一個文件,注意,一個文件對應一個記錄。

  • 記錄樹形式的文件結構,每個記錄(文件)有一個特定的鍵值,文件的排序按鍵的字段進行排序,我們可以通過鍵來尋找特定的文件(這個組織方式用於數據庫)。

文件的訪問

順序訪問:就是從頭開始訪問整個文件,如果我們只想要文件的中的部分信息,那么我們就要先讀取部分信息前面的哪些信息,即使我們不需要它我們還是需要讀取。順序訪問也可以重復的讀取文件只要將讀取的點返回起點即可。

隨機訪問:訪問我們只想問訪問文件的部分,可以跳過我們不限訪問的部分。

文件的實現

  • 連續分配

    在磁盤中找到一個可以容納文件的連續的磁盤空閑塊。
    優點:簡單易於實現,訪問快速.
    缺點:容易產生磁盤碎片,就是磁盤空間利用不全。
    

  • 鏈表分配

    一個文件的各部分不用在一起,可以分散到各個空閑塊中,通過指針的方式鏈接所有的磁盤塊,組織成一個完整的文件。
    優點:提高磁盤空間利用率,減少磁盤碎片。
    缺點:訪問慢,如果要訪問文件的部分信息,就要從文件的第一部分開始找,直到找到我們想要的文件信息。
    

  • 內存中的表進行鏈表分配

    將鏈表分配方式的指針部分放入內存中的表.
    優點:使用這種方式可以避免無法隨機訪問文件內容的情況,也可以避免由於磁盤塊要預留一定空間給指針導致一個塊的大小無法全部用來描述文件的部分信息,當我們要讀一個塊大小的信息的時候,我們就要讀兩個塊,通過信息拼接得到一整個大小的塊.
    缺點:不過這種方式也有問題,就是內存中存放指向文件表的大小問題,如果文件過多,那么會導致這個表占用過多的內存空間.
    
    

  • i-nodes

    每個i-node包含了關於文件的所有信息,當我們讀一個文件的時候,我們可以將文件對應的i-node讀入內存中,通過i-node給我們提供的文件在內存中的信息,讀取文件的內容。
    優點:不會像內存中的表進行鏈表分配的方式占用大部分內容。
    缺點:i-node的大小有限,可能無法包含文件所有磁盤塊地址的信息,因此我們需要將最后一個流出來擴展。
    

目錄

目錄就是文件夾,作用就是記錄文件的位置。

一級目錄

計算只有一個根目錄,所有文件存放在根目錄上。計算機所有的用戶共享一個目錄。

多級目錄

多級目錄,可以對文件進行分類,方便檢索,如果計算機擁有多個用戶,每個用戶也可以擁有自己的磁盤空間。

路徑

在多級目錄的文件系統下,如果要打開一個文件,就要給出文件的具體路徑。這個就是絕對路徑

也可以設置工作路徑,一般來說就是用戶自己的文件下,通過相對於工作文件夾的訪問文件的路徑是相對路徑

目錄的實現

目錄的主要功能就是記錄該目錄下的文件的信息,該目錄下的文件可能是目錄,也可以是普通文件,那么目錄就要給出在這個目錄下的文件的磁盤地址。如果我們要訪問文件,我們首先有解析用戶給的文件路徑,通過逐層查找,直到找到文件存在的位置。

如果文件的名字是定長

  • 目錄項(文件名+文件的屬性)

  • 目錄項(文件名+i-node)

文件名非定長:

就是文件名可能過長,也可能補償,如果預留太多的位置給文件名,對導致目錄過大。

如果按(a)的方式組織目錄項,就是將固定長度的段放前面,不定長的文件名放在目錄項的后面。

這個方法會浪費空間,如果文件名無法填滿整個字的話,就要用其他字符填充。還有就是刪除一個目錄項是的時候,會導致磁盤碎片,因為所有文件不可能都是同樣的大小的。還有一點就是一個目錄項目在多個分頁上,那么讀取文件名的時候,就會導致缺頁異常。

(b)的方式組織目錄項,就可以避免空間的浪費,但是還是會導致缺頁中斷。

文件系統

日志結構文件系統

日志文件系統

在操作系統對磁盤做操作之前,先將要執行的操作寫入磁盤中的日志項中,寫完后才進行對磁盤的操作。這樣做是防止設備突然斷電或者操作系統崩潰時,導致文件系統的不一致性。

寫入日志中的操作一定是要冪等的,就是可以進行重復操作的。例如書上的兩個例子:
	1.重復查找一個文件並刪除一個文件。(冪等操作)
	2.把從i節點K新釋放的塊計入空閑表的末端(非冪等的)
   這里先解釋下1.為什么是冪等的,因為我們重復查找文件和刪除文件不會對文件系統本身帶來其他的影響,如果該文件存在就刪除(因為它本來就要被刪除,只是因為意外沒有被刪除),但是如果文件不存,刪除操作和查找操作就無法進行。不會對文件系統其他部分有任何的影響
   但是這里的2.操作就是非冪等的,重復做的操作會對文件系統有影響,舉例來說,如果先前釋放操作沒有完成,那么沒問題,做這個操作不會對文件系統有任何的影響,但是如果操作成功了,i節點k可能被分配給了新的文件,那么我們將這i節點k對應的文件釋放了將i節點k加入空閑節點表,顯然會對文件系統本身照成影響,因為我們對一個本不該刪除的文件做了刪除的操作。
   
磁盤操作具有和數據一樣的原子事務,就是說一組對磁盤的操作要么都成功要么都失敗。

虛擬文件系統

虛擬文件系統的實現和java的JDBC一致。
就是說虛擬文件系統也是對上層用戶提供一組API,提供給用戶操作文件的可能,但是虛擬文件系統對API的具體實現是交給不同文件系統的實現的者實現的。
這點就是和JDBC中,java為程序員提供一組對數據庫的同一操作,而具體操作的實現由數據庫開發人員提供。
對於操作系統開發人員來說,這個簡化了對操作文件功能的實現,對於java程序員來說這個簡化了他們對操作數據庫的功能實現。

虛擬文件系統就好比一個抽象類,任何想要掛載到這個操作系統的文件系統就要實現這個抽象類。

文件系統有幾個內部類,Superblock,v-node,目錄。

當文件系統注冊到虛擬文件系統上是,文件系統為VFS提供一組操作該文件系統的具體實現,這個就是上面說的,如果一個文件系統要掛載到操作系統上是,就要實現抽象類。所以VFS就知道了怎么從這個文件系統中讀一個文件。

當VFS解析一個路徑時,首先通過已經裝載文件系統的超快表中找到相應的文件系統,然后找到該文件系統對應的根目錄,就可以進行下一步的路徑解析,這是VFS創建v-node(這個v-node是在內存中的),然后找到對應文件的i-node,將i-node的信息和對該文件的操作函數的地址向量一直封裝到v-node中。VFS在文件描述符中創建一個項用來存放指向這個v-node的指針。最后VFS向調用者(進程)返回指向改文件描述符的指針。進程就可以通過文件描述符對文件進行操作。

空閑塊的管理

其實空閑塊的管理和內存中空閑地址空間的管理是一致的,都是通過鏈表或者位圖法。

磁盤塊鏈表方式

通過使用空閑塊來記錄空閑塊的塊號,為了盡量的減少占用空閑塊的個數,我們就要盡量多的在一個空閑塊中塞入空閑塊號.

位圖法

用n位位圖來表示磁盤中n個塊的使用情況,空閑塊用1表示,非空閑塊用0表示。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM