linux檔案系統初始化過程 1 概述

2021-10-22 08:50:43 字數 1236 閱讀 3502

術語表:

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上建立檔案、刪除檔案、掛載各種檔案系統等操作。

1、掛載根檔案系統(rootfs);

2、載入initrd;

3、掛載磁碟檔案系統;

linux檔案系統中重要的資料結構有:檔案、掛載點、超級塊、目錄項、索引節點等。每個資料結構的具體實現請參見源**,這裡不再描述。

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

如果程序開啟了某個檔案,還會建立file(檔案)資料結構,這樣程序就可以通過file來訪問vfs的檔案系統了。

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

圖2描述了檔案系統初始化過程中主要的函式呼叫關係。linux檔案系統初始化過程主要分為三個階段:

1、vfs_caches_init()負責掛載rootfs檔案系統,並建立了第乙個掛載點目錄:'/';

2、rest_init()負責載入initrd檔案,擴充套件vfs樹,建立基本的檔案系統目錄拓撲;

3、init程式負責掛載磁碟檔案系統,並將檔案系統的根目錄從rootfs切換到磁碟檔案系統;

linux檔案系統初始化過程主要分為三個階段:掛載rootfs,提供第乙個掛載點''/;載入initrd,擴充套件vfs樹;執行init程式,完成linux系統的初始化。下面會詳細介紹每個階段的主要內容。

RTEMS IMFS檔案根檔案系統的初始化過程

boot card bootcard bsp libc helper bsp libc init init the rtems libio facility to provide unix like system calls for use by newlib ie provide open,clo...

Ubuntu配置檔案系統環境初始化

ubuntu配置檔案系統初始化 1.etc timezone 時區 2.etc inetd.conf 超級程序 ubuntu配置檔案檔案系統 1.etc fstab 開機時掛載的檔案系統 2.etc mtab 當前掛載的檔案系統 ubuntu配置檔案使用者系統 1.etc passwd 使用者資訊 ...

初始化 1 預設初始化 列表初始化

初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...