操作系統原理(三)——文件系統(File system)


文件系統(File system)

1. 文件

  首先要說文件的定義,文件是進程創建的信息邏輯單元。

  由於磁帶和光盤的性能較低,磁盤使用的較多。這里討論文件儲存在磁盤中的情況。磁盤可被認為是固定塊兒大小的線性序列。

  在操作系統看來,文件就是一個個字節流,操作系統不管這個文件的內容(不管它是.mp3音頻文件,或者.jpg圖片文件,在應用程序看來才有這種區分)。文件在操作系統眼中只有3種:普通文件、目錄文件、特殊文件。

  文件的命名:

    在Linux中,文件名大小寫敏感;目錄分隔符“/”絕對不能出現在文件名中。

    在Windows中,文件名大小寫不敏感;盤符“:”絕對不能出現在文件名中(其實還有很多符號不能出現在文件名中...Linux不清楚其他限制)。

  應用程序識別文件類型:

    Windows:擴展名;

    Linux:文件頭部。

 

2. inode

  文件系統中,有一個叫inode的結構,它與真實的文件一一對應,用來記錄這個文件的各種屬性:權限、所有者、創建時間、最近修改時間等等。

 

2.1 inode的作用

  已經提過inode用來記錄文件屬性,更用來記錄文件在磁盤中的位置,要找到文件必須通過它的inode。每一個inode都有唯一的編號。目錄文件的內容就是文件名和其對應的inode。沒錯,文件名是儲存在它的上層目錄中的,所以對文件夾有寫權限的用戶可以任意刪除此文件夾中的內容,即使這個用戶對被刪除的文件沒有任何權限。

  inode中還保存着文件的大小,以及文件在系統中的儲存位置,那么它怎么儲存文件在磁盤上的位置呢?進一步看inode的結構。

 

2.2 inode的結構

  一個文件的可能會占一個、多個或很多很多的塊兒。在ext2文件系統中,一個磁盤塊兒的大小為1K,一個inode占用128Bytes,其中60個字節用來存指針,指向文件在磁盤中的位置。每個指針需要4個字節,共15個指針。文件可能占用很多很多的塊兒,15個指針被設計為:

  前12個指針:直接指針,指向文件在磁盤中的位置,可表示最大12K的文件;

  第13個指針:間接指針,指向一個磁盤塊,這個內存塊中儲存着1024 / 4 = 256個直接指針,容量256K;

  第14個指針:二級間接指針,指向一個磁盤塊,這個內存塊中儲存着1024 / 4 = 256個間接指針,容量256 * 256K = 64M;

  第15個指針:三級間接指針,指向一個磁盤塊,這個內存塊中儲存着1024 / 4 = 256個二級間接指針,容量256 * 256 * 256K = 16G;

  故ext2文件系統最大支持12K + 256K + 64M + 16G ≈ 16G的文件。

 

3. 硬連接(Hard links)和軟連接(Soft links)

  連接用於文件共享。連接分為硬連接和軟連接。

  硬連接,多個文件名對應同一個inode。當一個inode對應的文件名個數為0時,這個inode和對應的文件才會被真正刪除。即若文件a和b指向同一個inode,這時刪除文件a,這個文件並不會被真正刪除,因為還有文件名b指向這個inode。硬鏈接不能跨磁盤,不能跨文件系統。

  軟連接,又叫符號連接(symbolic link),創建一個文件,這個文件包含了另一個文件的路徑名,這個文件對應一個inode。即文件a指向一個inode,創建一個軟連接b指向a。這時刪除a,文件會被真正刪除。b依然存在,但是已經失效。符號連接只是一個引用,或者一個快捷方式。符號連接可以跨磁盤,可以跨文件系統。

  

  


免責聲明!

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



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