Linux系統文件系統的結構層次詳解

轉自 http://soft.chinabyte.com/os/142/12315142.shtml


Linux系統文件系統的結構層次詳解

發佈時間:2012-04-20 00:00:00 來源:中國IT實驗室 作者:佚名
關鍵字:Linux

  Linux文件系統的整體結構模型大概可以劃分爲以下層次:

  Hard Disk => Disk Driver => Filesystem(ext3,ext4,btrfs …) => User Operation

  上面結構模型很簡單,有一塊物理硬盤,首先這塊硬盤需要有硬盤驅動的支持,然後才能在這塊硬盤上創建不同的文件系統,然後用戶才能使用這塊硬盤。但有下面兩個問題需要思考:

  (1)。 不同的物理硬盤,需要不同的驅動支持,而不同的驅動,所提供的IO操作接口是不一樣的,那麼,有沒有一個統一的IO操作接口呢?

  (2)。 不同的文件系統,如ext3, ext4, btrfs等所提供的API也是不一樣的,那麼,有沒有一個統一的東西來對這些不同的文件系統進行一個抽象,以提供一個統一的API接口呢?

  於是,上面的結構層次還可以細分爲:

  上面的結構中,從硬盤驅動,文件系統,虛擬文件系統,以及系統調用,都屬於內核空間,換言之,這些不同層次的實現,都是由內核來做的;而所謂用戶空間的操作,也就是一些對磁盤的讀寫訪問操作。

  1. 硬盤驅動

  常見的硬盤類型有PATA, SATA和AHCI等,在Linux系統中,對不同硬盤所提供的驅動模塊一般都存放在內核目錄樹drivers/ata中,而對於一般通用的硬盤驅動,也許會直接被編譯到內核中,而不會以模塊的方式出現,可以通過查看/boot/config-xxx.xxx文件來確認:

  CONFIG_SATA_AHCI=y

  2. General Block Device Layer

  這一層的作用,正是解答了上面提出的第一個問題,不同的硬盤驅動,會提供不同的IO接口,內核認爲這種雜亂的接口,不利於管理,需要把這些接口抽象一下,形成一個統一的對外接口,這樣,不管你是什麼硬盤,什麼驅動,對外而言,它們所提供的IO接口沒什麼區別,都一視同仁的被看作塊設備來處理。

  所以,如果在一層做的任何修改,將會直接影響到所有文件系統,不管是ext3,ext4還是其它文件系統,只要在這一層次做了某種修改,對它們都會產生影響。

  3. 文件系統

  文件系統這一層相信大家都再熟悉不過了,目前大多Linux發行版本默認使用的文件系統一般是ext4,另外,新一代的btrfs也呼之欲出,不管什麼樣的文件系統,都是由一系列的mkfs.xxx命令來創建,如:

  mkfs.ext4 /dev/sda

  mkfs.btrfs /dev/sdb

  內核所支持的文件系統類型,可以通過內核目錄樹 fs 目錄中的內容來查看。

  4. 虛擬文件系統(VFS)

  Virtual File System這一層,正是用來解決上面提出的第二個問題,試想,當我們通過mkfs.xxx系列命令創建了很多不同的文件系統,但這些文件系統都有各自的API接口,而用戶想要的是,不管你是什麼API,他們只關心mount/umount,或open/close等操作。

  所以,VFS就把這些不同的文件系統做一個抽象,提供統一的API訪問接口,這樣,用戶空間就不用關心不同文件系統中不一樣的API了。VFS所提供的這些統一的API,再經過System Call包裝一下,用戶空間就可以經過SCI的系統調用來操作不同的文件系統。

  VFS所提供的常用API有:

  mount(), umount() …

  open(),close() …

  mkdir() …


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