linux文件系統初始化過程(1)---概述

術語表:

struct task進程

struct mnt_namespace命名空間

struct mount掛載點

struct vfsmount掛載項

struct file文件

struct super_block超級塊

struct dentry目錄

struct inode索引節點


一、目的

    linux文件系統主要分爲三個部分:文件系統調用;虛擬文件系統(VFS);掛載到VFS的實際文件系統。

    其中,VFS是核心,linux文件系統的本質就是在內存中創建一棵VFS樹。當根目錄被創建後,用戶就可以使用系統調用在VFS上創建文件、刪除文件、掛載各種文件系統等操作。

    該系列文章主要分析linux3.10文件系統初始化過程,分爲三個階段:

    1、掛載根文件系統(rootfs)

    2、加載initrd

    3、掛載磁盤文件系統


二、常用數據結構

    linux文件系統中重要的數據結構有:文件、掛載點、超級塊、目錄項、索引節點等。每個數據結構的具體實現請參見源代碼,這裏不再描述。

    爲了直觀的表示數據結構之間的關係,請參見圖1:圖中含有兩個文件系統(紅色和綠色表示的部分),並且綠色文件系統掛載在紅色文件系統tmp目錄下。一般來說,每個文件系統在VFS層都是由掛載點、超級塊、目錄和索引節點組成;當掛載一個文件系統時,實際也就是創建這四個數據結構的過程,因此這四個數據結構的地位很重要,關係也很緊密。由於VFS要求實際的文件系統必須提供以上數據結構,所以不同的文件系統在VFS層可以互相訪問。

    如果進程打開了某個文件,還會創建file(文件)數據結構,這樣進程就可以通過file來訪問VFS的文件系統了。

    另外,該圖只給出了主要的關係結構,忽略了部分細節。


                               圖1


、函數調用關係

    圖2描述了文件系統初始化過程中主要的函數調用關係。linux文件系統初始化過程主要分爲三個階段:

    1vfs_caches_init()負責掛載rootfs文件系統,並創建了第一個掛載點目錄:'/';

    2rest_init()負責加載initrd文件,擴展VFS樹,創建基本的文件系統目錄拓撲

    3init程序負責掛載磁盤文件系統,並將文件系統的根目錄從rootfs切換到磁盤文件系統;


                   圖2


四、總結

    linux文件系統初始化過程主要分爲三個階段:掛載rootfs,提供第一個掛載點''/;加載initrd,擴展VFS樹;執行init程序,完成linux系統的初始化。下面會詳細介紹每個階段的主要內容。


版權聲明:

    原創作品,如非商業性轉載,請註明出處;如商業性轉載出版,請與作者聯繫。

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