LindaTing

@LindaTing

Joined on Feb 29, 2024

  • contributed by < LindaTing0106 > TODO: 閱讀 並行程式設計: 實作輕量級的 Mutex Lock 並重現實驗,紀錄問題 前提 早期的並行程式在運行時,為了避免執行緒在 critical section 發生競爭,當執行緒進入 critical section 時有兩種處理方式,一種為每次都呼叫 system call 交給核心檢查是否有競爭發生,但這會造成不必要的成本花費。 另一種方式為使用 spinlock 將不能進入 critical section 的執行緒鎖住,但此舉造成 CPU 資源無法釋放,且在多核系統上需要另做處理。 Futex 的誕生,使得執行緒在 user space 上就可以檢查是否有競爭發生,如果有競爭發生再透過核心去處理,減少不必要的成本。 Mutex lock
     Like  Bookmark
  • contributed by < LindaTing0106 > 因為自動飲料機而延畢的那一年 看完此篇文章不經讓我思考,其實很多現在在我們日常中隨手可見的物品,一定也是經過前人不斷失敗,再不斷嘗試,最終才成為改善我們生活品質的物品。我想這也恰恰是老師從課程一開始就一直跟我們講的事情:「要誠實面對自己。」,正是因為可以誠實面對自己,才可以坦然接受失敗,再從失敗中改進並且學習。 研讀第 1 到第 6 週「課程教材」和 CS:APP 3/e 第 2 週 你所不知道的 C 語言:數值系統 [ ] DETECT 巨集 提到的 DETECT 巨集,偵測是否有 NULL 。 而在 strlen() ,也有使用到 '\0' 來判斷字串長度。其計算方式是透過迴圈,在指標遇到字元 '\0' 前,將長度 + 1 。但這樣明顯會有時間複雜度為 n 的問題。使用 (((X) - 0x01010101) & ~(X) & 0x80808080) 我們可以直接得到 '\0' 在 X 中的位置。
     Like  Bookmark
  • contributed by < LindaTing0106 > Reviewed by lintin528 在有多個節點被移動的狀況,像是 q_reverseK ,我的做法通常會是直接在原本的鏈結串列中使用 list_move 去做移動,這樣可以避免 cut 跟 splice 的使用,還有一個額外的 list_head 結構 buf ,這樣的話除了交換的動作外會多花費一些計算量,但這麼做的缺點就是程式的可讀性不如你現在的做法,我認為這邊可以做一下取捨。 開發環境 $ gcc --version gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 $ lscpu
     Like  Bookmark
  • contributed by < LindaTing0106 > 自我檢查清單 閱讀〈Linux 核心模組運作原理〉 MODULE_LICENSE 巨集指定的授權條款核心有什麼影響 :::danger 注意用語:code 作為原始程式碼的語境,翻譯為「程式碼」 ::: 需要在<s>代碼</s> 程式碼中加入 MODULE_LICENSE ,否則程式連編譯都無法。
     Like  Bookmark
  • contributed by < LindaTing0106 > 第三週測驗題 測驗 1 i_sqrt 版本一利用 log2 函式得出 N 的最高有效位元在 msb 。 隨後再迴圈內檢查該 N 為二進位表示時,將在逼近的數字加上 $2^a$ 後將其平方後,不會超過原數字。 藉由此種方式得出 N 的平方根。 [ ] 版本一 #include <math.h>
     Like  Bookmark
  • contributed by < LindaTing0106 > 第一週測驗題 測驗 1 此函式目的在於找到串列的尾端,故在 *left 和 (*left)->next 不等於 null 的情況下, left 應該要等於 &(*left)->next ,也就是 *left 下一個節點的地址。 node_t *list_tail(node_t **left) { while ((*left) && (*left)->next)
     Like  Bookmark