Linux 核心設計
成大課程
contributed by < hbr890627
>
並未看到預期的輸出,還以為是前面某個步驟做錯了,仔細觀察錯誤訊息
檢查是否尚未安裝 gcc
gcc 安裝完成後,再次進行 make check,成功編譯,出現預期輸出
TODO:
為何 $ cat /sys/class/fibonacci/fibonacci/dev 的結果是 510 ?
此實驗環境的CPU核心數的確為 12
並未開啟 CAP_SYS_NICE 這個權限
TODO: 要怎麼開啟?
修改 /etc/default/grub
,讓第 12 個 CPU 核心被保留
並依照文件中的說明,輸入指令更新
再重新開機後,使用 htop
確認第 12 個 CPU 核心並沒有再使用,也使用 taskset
再確認一次
之後再用 $ sudo sh performance.sh
執行
原本給予計算 Fibonacci 數的程式碼如下,是最基本的算法
發現有一段註解 FIXME: C99 variable-length array (VLA) is not allowed in Linux kernel.
,在編譯時也會跳出警告訊息
修改程式碼,將 VLA 的部份移除
以下為虛擬碼
對應的實作
TODO: 比較使用 Fast Doubling 後帶來的效能提升
lsmod
的輸出結果有一欄名為 Used by
,這是 "each module's use count and a list of referring modules",但如何實作出來呢?模組間的相依性和實際使用次數 (reference counting) 在 Linux 核心如何追蹤呢?
搭配閱讀 The Linux driver implementer’s API guide » Driver Basics
fibdrv.c
存在著 DEFINE_MUTEX
, mutex_trylock
, mutex_init
, mutex_unlock
, mutex_destroy
等字樣,什麼場景中會需要呢?撰寫多執行緒的 userspace 程式來測試,觀察 Linux 核心模組若沒用到 mutex,到底會發生什麼問題。嘗試撰寫使用 POSIX Thread 的程式碼來確認。