contributed by < visitorckw
>
fibdrv.c
存在著 DEFINE_MUTEX
, mutex_trylock
, mutex_init
, mutex_unlock
, mutex_destroy
等字樣,什麼場景中會需要呢?撰寫多執行緒的 userspace 程式來測試,觀察 Linux 核心模組若沒用到 mutex,到底會發生什麼問題。嘗試撰寫使用 POSIX Thread 的程式碼來確認。 搭配閱讀〈並行和多執行緒程式設計〉由於原本的程式碼當計算到第 92 項過後時,會造成使用 long long 型別變數儲存時出現 overflow 的錯誤。因此改以字串的形式來計算以及儲存結果。
所以首先需要一個字串相加的函數:
接著再透過上述的 string_number_add
函數用 O(N)
的時間複雜度取得費氏數列第 N 項的值:
另外由於程式是執行在 kernel space 之中,因此需要使用 copy_to_user
函數傳到 user space 之中。
其開發的思想是用陣列來儲存二補數形式的大數。
在 client.c 加入了以下程式碼,透過 timespec 以及 clock_gettime 來取得時間:
在 fibdrv.c 中則是使用教材提及的 fib_time_proxy 函數來獲取時間: