linux2 4核心 path walk流程簡析

2021-07-13 06:12:10 字數 808 閱讀 3926

這裡以path_walk解析/usr/lib/glibc為例:

int path_walk(const char * name, struct nameidata *nd)

while (c && (c != '/'));

/*計算每個分量的長度*/

this.len = name - (const char *) this.name;

this.hash = end_name_hash(hash)

/*nd->dentry代表父節點,第一輪for迴圈的父節點就是根目錄dnode結構.

每個dnode結構下掛在其子dnode結構,為了統一管理,父節點引入dnode佇列陣列,

子目錄name的hash值相同,掛入同乙個陣列中的佇列

*//*為了簡單起見,假設每個目錄分量的dnode結構都在記憶體中快取著,因此cached_lookup

返回值都非空,即找到了子dnode結構

*/dentry = cached_lookup(nd->dentry, &this, lookup_continue);

if (!dentry)

/*找到子dnode結構後,取出inode,然後進行下一次for迴圈*/

inode = dentry->d_inode;

nd->dentry = dentry;

}}

由這段壓縮版的path_walk及注釋,可以清晰的看到path_walk的任務就是分解並取出路徑中的子目錄,取出子目錄的dnode結構,以這個dnode為父節點,再找到這個節點下的子節點。周而復始直到找到目標。

Linux 2 4 核心學習筆記 訊號

版權申明 0 31 這 32 個訊號稱為標準訊號。從 32 到 63 之間的 32 個訊號稱為實時訊號。可以通過 man 7 signal 檢視對 標準訊號 和 實時訊號 詳細的描述。每個程序擁有乙個訊號等待佇列。在 task struct 中有乙個 struct sigpending pendin...

linux2 4到linux2 6核心排程(1)

本文從 linux 2.4 排程系統的缺陷入手,詳細分析了 linux 2.6 排程系統的原理和實現細節,並對與排程系統相關的負載平衡 numa 結構以及實時效能進行了分析和評價。文末,作者從排程系統的發展和實現出發,對 linux 的發展特點和方向提出了自己的看法。1 前言 linux 的市場非常...

linux2 4到linux2 6核心排程(4)

7 struct mm struct prev mm 儲存程序切換後被排程下來的程序 稱之為 prev 的 active mm 結構指標。因為在 2.6 中 prev 的 active mm 是在程序切換完成之後釋放的 mmdrop 而此時 prev 的 active mm 項可能為 null,所以...