Try   HackMD

回顧 2016q1 Homework2

tags: sysprog2016

主講人: jserv / 課程討論區: 2016 年系統軟體課程
:mega: 返回「進階電腦系統理論與實作」課程進度表

phonebook-concurrent

  • LanKuDot (李昆憶): 共筆
  • 用 valgrind 檢查有無 memory leak 的問題。他發現原本 吳彥寬 同學撰寫的程式碼中,malloc 28次,卻只有 13 次 free。
    如何修正 memory leak 呢?做了以下分析:
    • 既然 THREAD_NUM 是在 compilation 時期指定,則隨 THREAD_NUM 變動的 array 長度可以不用使用 malloc
      thread_args 的元素也是透過 malloc 取得,要 free 掉
    • 在 findName() 中會給找到的 entry 的 lastname 和 detail 配給記憶體,但是沒有處理已經被搜尋過的 entry 不需要在配置記憶體的情況,像在主程式中搜尋 zyxel 就有三次,造成前兩次配置的記憶體遺失。
  • c14006078 (吳彥寬): 共筆
  • 思考到一個很基本的問題:malloc 和 assert 往往要針對不同型態,撰寫不同版本的定義,能否透過類似 C++ template 來實做呢?C11 有 _Generic 關鍵字,可做出類似的效果。
  • 使用可以很精巧,可見共筆的 "Template in C" 一節。
  • TempoJiJi (邱靖吉): 共筆

  • tundergod (林文盛): 共筆

  • 實作lock-free thread pool
  • CheHsuan (林哲亘): 共筆
  • 整理 mmap 和 msync 的資訊。
    有了基本概念後,我們可嘗試變更 mmap() 的參數,從 MAP_SHARED 換成 MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS 再對照執行時間的變化。
  • kevinbird61 (瞿旭民): 共筆
  • 透過 setjmp / longjmp 實作 coroutine 的方式,並且實際撰寫程式來測試,他建立兩個 coroutine: A, B。
  • 在他的測試中,setjmp 把資訊儲存於 bufferA 後執行 B routine後,再藉由 longjmp 回到當初於 A routine 中呼叫 B 的位置;藉此可以達到再兩個函式中切換;把 routine A, B 換成兩條thread,便是 thread 間維持 sequential consistency 的實作。