contributed by < ranvd >
Linux 核心如何找到核心模組
以下內容為 Linux 核心版本 5.15,其他版本的檔案位置與內容可以有些出入
在過去的教材中有提到 LKM 在 Linux kernel 中是透過鍊結串列維護。在 include/linux/module.h 中可以看到 module 結構體,其中可以看到有一項熟悉的結構體 struct list_head,根據註解可以猜測 Linux 核心中的 modules 是透過鍊結串列的方式儲存,同時也使用 enum 型態紀錄目前 module 的狀態。
struct module {
...
/* Member of list of modules */
contributed by < ranvd >
第一周測驗 1
測驗一中的 quicksort 採用 begin 和 end 兩個堆疊的資料結構來替代遞迴所需的額外記憶體堆疊。主要是利用 begin 和 end 分別紀錄尚未處理的鏈結串列的起始位址和結束位址。
node_t *begin[max_level], *end[max_level];
每次迭代中會分別從 begin 和 end 中提取鏈結串列的起始和結束位址,並將其設定為 L 和 R,分別代表鏈結串列的最左邊和最右邊。接著,將 L 設定為 pivot,然後透過 while(p) 掃描目前正在處理的鏈結串列 (即從 begin 到 end)。將大於pivot的節點放至 right 中,反之則放至 left 中。
如果在每次迭代時,從 begin 與 end 拿出的數值相同即代表該節點已經在正確的位置,因此可以將其加入已排序好的鏈結串列 result 中。