上一節主要對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-***.***檔案來確認:
config_sata_ahci=y
2. general block device layer
這一層的作用,正是解答了上面提出的第乙個問題,不同的硬碟驅動,會提供不同的io介面,核心認為這種雜亂的介面,不利於管理,需要把這些介面抽象一下,形成乙個統一的對外介面,這樣,不管你是什麼硬碟,什麼驅動,對外而言,它們所提供的io介面沒什麼區別,都一視同仁的被看作塊裝置來處理。
所以,如果在一層做的任何修改,將會直接影響到所有檔案系統,不管是ext3,ext4還是其它檔案系統,只要在這一層次做了某種修改,對它們都會產生影響。
3. 檔案系統
檔案系統這一層相信大家都再熟悉不過了,目前大多linux發行版本預設使用的檔案系統一般是ext4,另外,新一代的btrfs也呼之欲出,不管什麼樣的檔案系統,都是由一系列的mkfs.***命令來建立,如:
mkfs.ext4 /dev/sda
mkfs.btrfs /dev/sdb
核心所支援的檔案系統型別,可以通過核心目錄樹 fs 目錄中的內容來檢視。
4. 虛擬檔案系統(vfs)
virtual file system這一層,正是用來解決上面提出的第二個問題,試想,當我們通過mkfs.***系列命令建立了很多不同的檔案系統,但這些檔案系統都有各自的api介面,而使用者想要的是,不管你是什麼api,他們只關心mount/umount,或open/close等操作。
所以,vfs就把這些不同的檔案系統做乙個抽象,提供統一的api訪問介面,這樣,使用者空間就不用關心不同檔案系統中不一樣的api了。vfs所提供的這些統一的api,再經過system call包裝一下,使用者空間就可以經過sci的系統呼叫來操作不同的檔案系統。
vfs所提供的常用api有:
mount(), umount() ...
open(),close() ...
mkdir() ...
**:
Linux體系結構 五 檔案系統
上一節主要對linux系統中的核心空間與使用者空間做了簡單的分析,在這一節裡,將從核心空間和使用者空間對linux檔案系統進行一定的剖析。談及檔案系統,很多linux使用者都會有乙個比較模糊和神秘的概念,如果對檔案系統的來龍去脈有一定的了解,相信大家就能走出迷霧,linux檔案系統的整體結構模型大概...
Linux體系結構 五 檔案系統
談及檔案系統,很多linux使用者都會有乙個比較模糊和神秘的概念,如果對檔案系統的來龍去脈有一定的了解,相信大家就能走出迷霧,linux檔案系統的整體結構模型大概可以劃分為以下層次 hard disk disk driver filesystem ext3,ext4,btrfs user opera...
Linux檔案系統的體系結構
一 硬碟分割槽與檔案系統 1 通常在拿到一塊新的硬碟時,會將硬碟分割成幾個不同的分割槽 partition 2 分好分割槽後,要把這些分割槽格式化 format 成特定的檔案系統格式 file system format 才能夠用來儲存檔案。格式化就是把分割槽切割成乙個個小單位 稱為block 並且...