Try   HackMD

2023q1 Homework3 (fibdrv)

contributed by < POCHUN-CHEN >

自我檢查清單

  • 研讀上述 Linux 效能分析的提示 描述,在自己的實體電腦運作 GNU/Linux,做好必要的設定和準備工作
    從中也該理解為何不希望在虛擬機器中進行實驗;
  • 研讀上述費氏數列相關材料 (包含論文),摘錄關鍵手法,並思考 clz / ctz 一類的指令對 Fibonacci 數運算的幫助。請列出關鍵程式碼並解說
  • 複習 C 語言 數值系統bitwise operation,思考 Fibonacci 數快速計算演算法的實作中如何減少乘法運算的成本;
  • 學習指出針對大數運算的加速運算和縮減記憶體操作成本的舉措,紀錄你的認知和疑惑
  • 注意到 fibdrv.c 存在著 DEFINE_MUTEX, mutex_trylock, mutex_init, mutex_unlock, mutex_destroy 等字樣,什麼場景中會需要呢?撰寫多執行緒的 userspace 程式來測試,觀察 Linux 核心模組若沒用到 mutex,到底會發生什麼問題。嘗試撰寫使用 POSIX Thread 的程式碼來確認。
    搭配閱讀〈並行和多執行緒程式設計

Linux 核心模組

不小心在 fork 以前,clone 老師的專案該怎麼辦?

  1. 先確認專案是誰的
$ vim .git/config 

貢獻:補充共筆

觀察 fibdrv.ko 核心模組在 Linux 核心掛載後的行為(要先透過 insmod 將模組載入核心後才會有下面的裝置檔案 /dev/fibonacci)
模組載入核心:

$ sudo insmod fibdrv.ko

Reference counting

  • 核心物件被引用時:+1
  • 核心物件被釋放時:-1

理想值為"0"

確保沒有未被釋放的內存貨資源。

:::spoiler Reference counting解釋(ChatGPT) 在Linux kernel中,reference counting是一種管理核心物件(例如設備、文件等)的技術。它用於跟踪對核心物件的引用數量,以確保核心物件只有在所有引用它的代碼都釋放對它的引用之後,才會被完全釋放。

當核心物件被創建時,其引用計數器初始化為1。每當代碼複製對核心物件的引用時,引用計數器就會增加。同樣地,當代碼釋放對核心物件的引用時,引用計數器就會減少。只有當引用計數器的值為0時,核心物件才會被完全釋放。

Reference counting是Linux kernel中非常重要的技術,因為它可以防止釋放未使用的內存和資源,從而增強了系統的穩定性和可靠性。
:::

應閱讀 Linux 核心的正式文件,第一手材料優先。
:notes: jserv

緩衝區溢位(Buffer Overflow)

攻擊行為-緩衝區溢位 Buffer Overflow

計算 leading zeros

計算出最高位整數儲存,前面還有幾個沒有用到的 bit (前面有幾個 0)。

Little-Endian & Big-Endian

名稱 記憶體位置排序
Big-Endian 最高位 的位元組放在 最低 的記憶體位址上。
Little-Endian 最高位 的位元組放在 最高 的記憶體位址上。

Big-Endian 與 Little-Endian 的差異與判斷程式碼