linux檔案系統的系統分析 五 路徑名的查詢

2021-06-05 14:28:29 字數 1303 閱讀 9811

do_path_lookup是檔案系統中最基本的函式,也是非常重要的,裡面各種情況,各種goto,總之各種坑爹。。

沒能把所有的goto都理清,只看了標準情況下的路徑查詢,但主要的關鍵點都是一樣的,弄清了關鍵點,心中對檔案系統的路徑名查詢就有了概念。不管絕對路徑名,相對路徑名,還是帶符號鏈結的,又有什麼質的區別呢?

do_path_lookup分為兩步:

1、path_init根據絕對路徑或者相對路徑來初始化nameidata結構體;

2、path_work-->link_path_walk

link_path_walk才是路徑查詢操作中的核心:

link_path_walk處理代表name的字串,最後都要通過do_lookup函式來do it

do_lookup:

1、檢查具體底層檔案系統是否有自己的hash方法(d_op->d_hash)

2、用__d_lookup函式在dentry_hashtable這個hash表中查詢

3、如果在hash表中沒有找到,就要做真正的lookup:

先根據要找的name和parent的dentry,分配乙個dentry結構體

呼叫具體檔案系統的i_op->lookup函式,比如sysfs_lookup

提前看一下sysfs_lookup的查詢動作:

sysfs_lookup-->sysfs_find_dirent 根據sysfs_dirent的組織關係,在鍊錶中遍歷查詢符合name的sysfs_dirent結構體,

然後再建立inode,並將inode和dentry以及sysfs_dirent聯絡起來。

實際檔案系統的lookup方法是乙個關鍵點,它根據父層次的dentry和要查詢的name在子層次特有的方法來查詢。sysfs的lookup方法

是很簡單的,僅僅是遍歷乙個鍊錶,但實際上基於物理介質的fs的lookup應該是很複雜的,比如omfs就用hash來找,傳說的btrfs應該

會用btree來查詢吧。

另外乙個關鍵點就是:

done:

path->mnt = mnt;

path->dentry = dentry;

__follow_mount(path);

static int __follow_mount(struct path *path)

return res;

}

這個函式和上篇do_add_mount中那個不起眼的while的作用是一樣的,做檔案系統的切換操作。

理解了這兩個關鍵點,不管路徑名多長,不管跨越了多少個檔案系統系統,link_path_walk都會一直走下去的。

linux檔案系統的系統分析 開篇

在看裝置模型的時候,對sysfs devtmpfs有一定了解,也分析過linux下的乙個簡單的檔案系統 omfs。但當時的分析比較散,現在覺得還是得花時間再系統的整理一下為好。因為目前對linux的記憶體管理還不熟悉,關於vfs中快取記憶體的部分暫且略過。這次開篇,準備按照 根檔案系統掛載和 檔案系...

hadoop檔案系統分析

hadoop分布式檔案系統 架構和設計 為了容錯,檔案的所有資料塊都會有副本。每個檔案的資料塊大小和副本係數都是可配置的。應用程式可以指定某個檔案的副本數目。副本係數可以在檔案建立的時候指定,也可以在之後改變。通過乙個機架感知的過程,namenode可以確定每個datanode所屬的機架id。乙個簡...

Yaffs 檔案系統分析

1 yaffs檔案系統結構 1.1 簡介 1.1.1 應用場合 yaffs yet another flash file system 檔案系統是專門針對nand快閃儲存器設計的嵌入式檔案系統,目前有yaffs和yaffs2兩個版本,兩個版本的主要區別之一在於yaffs2能夠更好的支援大容量的nan...