以下為每周六實驗室核心討論課我所主講的主要內容,在百度文庫和CSDN下載頻道中上傳有我所講的PPT原稿。
現對以前做個補充,以後每次講完之後就更新。
9月29日星期六上午:
主講進程描述符結構體task_struct資料結構,由於task_struct這個結構體是系統感知進程存在的唯一標誌,linux核心涉及進程和程式的所有演算法都是圍繞這個資料結構建立的,裡面存在上百個欄位,表示了進程的狀態、標識符、進程之間的連結關係、進程調度相關的資訊、時間和定時器資訊、 檔案系統資訊、虛擬記憶體資訊、與處理序間通訊相關資訊等等等等。
可以說進程描述符是我閱讀Linux核心原始碼的起點,很多概念都沒有,因此無論是看書還是看代碼可以說是煎熬。
此次主要講解的內容包括:
- 核心中經常出現的兩個資料結構——雙向鏈表、散列表;
- 進程的狀態標誌;
- 進程的標識符;
- 進程之間的關係——父子關係、兄弟關係;
- PID與PID散列表的聯絡;
對於最後一點,由於2.6以後核心版本引入了命名空間機制,導致較2.6之前核心代碼有較大變化,網上資料也較少,完全是我一點一點摳出來,感覺還有一個點不是很明白,準備找個時間再次閱讀一遍。
PPT:
百度文庫:http://wenku.baidu.com/view/d3aa15c089eb172ded63b78d.html?st=1
CSDN:http://download.csdn.net/detail/hazir/4736028
10月20日星期六上午:
主講進程切換的一段彙編代碼switch_to,這段我精簡之後只有10行的彙編代碼,是核心完成進程切換的核心代碼,比較晦澀難懂。主要參考《情景分析》一書,才有點眉目。
此次主要講解的內容包括:
- 深入分析進程切換的核心代碼switch_to;
- 解釋為什麼使用三個參數prev,next,last;
- 對建立進程切換的特殊情況進行說明;
我們小組主講進程調度,但我由於花太長時間在幾行彙編代碼上,導致對於調度整個過程沒有做很好的理解,不過劉傑同志最後編寫的關於進程調度非常詳細的讀書筆記對我協助很大。
PPT:
百度文庫:http://wenku.baidu.com/view/f9a17542b307e87101f6968d.html?st=1
CSDN:http://download.csdn.net/detail/hazir/4736033
11月3日星期六上午:
主講訊號機制中關於訊號傳遞部分。經過近兩個月的讀核心源碼,現在讀源碼已經沒有開始時候頭大的感覺,慢慢找到一些套路,因此訊號機制這塊我自認為理解的還是不錯的,當然參考了不少書和網上的資源的前提下。
此次主要講解的內容包括:
- 訊號的處理階段;
- 訊號處理的時機及方式;
- 深入講解了處理訊號時核心態到使用者態,再由使用者態到核心態的過程;
由於電腦出現了異常狀態,後半部分都沒有使用PPT,只好在小黑板上畫出整個過程,對於這種動態過程,感覺這樣效果比放映PPT效果要好很多。這也啟示我下次要注意講解之前測試好裝置,否則耽誤大家的時間了。
PPT:
百度文庫:http://wenku.baidu.com/view/50e007cbda38376baf1fae8d.html?st=1
CSDN:http://download.csdn.net/detail/hazir/4736049
最新動向:2012.11.6
Read the Fucking Source Code!
——Linus Torvalds