contributed by < andy155224 >
作業說明
fibdrv.c
存在著 DEFINE_MUTEX
, mutex_trylock
, mutex_init
, mutex_unlock
, mutex_destroy
等字樣,什麼場景中會需要呢?撰寫多執行緒的 userspace 程式來測試,觀察 Linux 核心模組若沒用到 mutex,到底會發生什麼問題。嘗試撰寫使用 POSIX Thread 的程式碼來確認。 搭配閱讀〈並行和多執行緒程式設計〉在我的環境下, VSCode 的 C/C++ 延伸模組沒有抓到以下標頭檔
透過 find 指令,找到了這幾個標頭檔實際的位置
將其路徑加入到 IncludePath 中
但還是有以下錯誤
同樣透過 find 指令去找出標頭檔的位置並加到 IncludePath 中
最後經過幾次的 find 後就解決了 include 失敗的問題
一開始 clone
下來後先 make check
一次,得到預期的結果
可以發現因為原先計算 fibonacci sequence 的 function 回傳的型別是 long long
,所以當計算第 93 個 fibonacci number 後就會發生 overflow 的問題。
在 時間測量和效能分析 中有提到 hrtimer
是 2.6.16 開始有的新計時機制,裡面使用了新的資料結構 ktime_t
來計時。 ktime_t
可以做加減法和時間單位的轉換。
根據 時間測量和效能分析,在 fibdrv.c
中引入 ktime_t
並且更改 fib_read
這個 function,從原先回傳 fib_sequence(*offset)
變成回傳 fib_time_proxy(*offset)
,而後者與前者的差異是後者除了會去呼叫 fib_sequence(*offset)
來計算第 offset 個 fibonacci number 外,也會在呼叫的前後引入 ktime_get()
和 ktime_sub
以計算 fib_sequence()
的執行時間,也就是在 kernel space 中運算的時間。
而在這個核心模組中 fib_write
目前是沒有作用的,所以可以藉由此函式來回傳上述計算的在 kernel space 中運算的時間 kt
,同時也透過 ktime_to_ns()
將 kt
的時間單位轉換至 ns
。
為了要使用 4ce43c4 ,除了上述已經得到的 fib_sequence()
的計算時間 kt
外,