這裡以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,所以...