---
# System prepended metadata

title: Linux Kernel & C 語言
tags: [kernel, 'Ubuntu ', C, Linux]

---

最近有一種想要特別上進的心，所以上班之餘點了jserv的[課程](http://wiki.csie.ncku.edu.tw/linux/schedule)來看，發現以前學的根本不叫做是寫程式，而是背程式語言而已，秉持著jserv的名言 "今天不學kernel，明天更困難"以及 "誠實面對自己"，下定決心重頭開始學習C語言，和更進階學習Linux Kernel。

1. [安裝ubuntu系統](https://hackmd.io/@Boyan/HJoEw5Msh)
    * 因為工作就在用linux & git 所以對於這些指令算是熟門熟路了，剛好手邊有一台沒有在用的筆電，就重灌成ubuntu系統，用ssh連過去開發。
2. [你所不知道的C語言:指標篇](https://hackmd.io/@Boyan/SkkGGSQi3) 紀錄&心得
    *  C 語言中特有的指標，可以透過記憶體映射的方式直接控制硬體，這也是為什麼 C 語言在硬體系統特別強大的原因。學習指標對於kernel也是很重要的
3. [linked list 和非連續記憶體](https://hackmd.io/@Boyan/BkQc9Rwih)
    * kernel中運用大量的linked list
    * linked list (鏈結串列) 本質上就是對非連續記憶體的操作，乍看僅是一種單純的資料結構，但對應的演算法變化多端，像是「如何偵測 linked list 是否存在環狀結構？」
    * linked list 的操作，例如走訪 (traverse) 所有節點，反映出 Locality of reference (cache 用語) 的表現和記憶體階層架構 (memory hierarchy) 高度相關