Posted on 2007-09-24 11:22
ZelluX 閱讀(654)
評論(0) 編輯 收藏 所屬分類:
Linux
開始看lkd,不過最新可以抽出來的時間不多,下星期Java課還有project,還要寫一份robocode的項目文檔,然后編譯課也得跟上,英語高口課還得準備資料。。。先轉一篇學習計劃過來
發信人: ccedcced (turing), 信區: KernelTech
標 題: 整理的內核學習計劃
發信站: 水木社區 (Fri Jan 6 18:15:35 2006), 轉信
內核學習現在開始
方法就是:
讀書(lkd)+源代碼閱讀-->項目
先從基礎做起!
希望大家都能積極地參與討論,寫讀書筆記和源碼閱讀筆記!
------------------------------
內核學習第一周計劃--Are you ready?
時間:11月2號--11月5日
閱讀內容:前言和第一章
導讀:這是比較容易閱讀的開頭部分,內容比較少而且常識性的內容比較多。請在閱讀的過程中考慮如下的問題:
1.linux和unix相比有哪些特點?
2.內核編程和用戶空間編程相比有哪些不同之處?
3.自己編譯一下內核,你編譯成功了么?如果不成功,有什么問題?使用你新編譯的內核,
能順利啟動么?有什么問題?
4.linux內核源代碼樹中你能找到sg設備驅動是在那個文件中實現的么?sg是什么含意?
清楚地了解一下內核中源代碼樹的結構。
Are you ready?
------------------------------
內核學習第二周計劃
時間:11.7-11.13
內容:
主要是lkd中文版第一版第二章(英文第二版版第三章)的內容,比較重要。
1.和進程管理相關的內核文件都有哪些?找出來大致瀏覽一下.
2.什么是進程和線程?在Linux中有什么獨特的地方?
3.什么是進程描述符?怎樣得到當前進程的進程描述符?進程的內核棧有多大?
4.進程的狀態都有哪些?在什么情況下發生轉化?
5.Linux中所有進程之間的關系是怎么樣的?
6.用戶線程和內核線程的區別和聯系?
7.Linux是怎樣創建進程和線程的?
8.Linux怎樣終結進程?
9.對照相應的內核源代碼文件,分析一下問題3、5、6、7。
------------------------------
內核學習第三、四周計劃
內核學習第三、四周計劃:
時間:11.14-11.27
調度是操作系統中非常重要的部分,也是最核心的東西。通過學習這一章,希望大家都能大致掌握Linux的調度策略,以及為什么要這么做,Linux相比其它的系統有什么優點。重點多分析源代碼中的算法實現!!我希望我能有時間和大家一起分析代碼,也希望大家積極主動地分析一些代碼片斷。
學習內容:
1.進程調度最基本的原理是什么?
2.列舉出幾個I/O消耗性和處理器消耗型的進程。
3.Linux都采用了哪些調度的算法?詳細解釋一下這些算法。
4.進程什么時間進入運行態?什么時間進入休眠(阻塞)狀態?
5.了解進程搶占的算法;
6.討論一下Linux進程調度的實時性怎么樣,還有哪些需要提高的地方?
7.自己查找進程調度的相關文件,分析為題3-6。
------------------------------
內核學習第五周計劃
時間:11.28--12.5
1、什么是系統調用?
2、為什么需要系統調用?
3、實現系統調用相關的代碼有哪些,找出來瀏覽一下
4、詳細閱讀getuid()這一下系統調用的實現代碼
5、如何導出sys_call_table,有幾種方法,注意不同內核版本的區別
6、嘗試自己給kernel添加一個簡單的系統調用
功能要求:調用這個系統調用,使用戶的uid等于0。(這個題目取自《邊干邊學》)
7、采用添加系統調用的方式實現一個新功能的利弊有哪些,替代方法是什么?
------------------------------
內核學習第六周計劃
這一周就總結了一下中斷和下半部相關的知識點,供大家參考一下!同時附件里有我以前學習時候的筆記,寫的不好請多多指教。
內核學習第六周計劃:
1、如何理解中斷、中斷上下文和進程上下文的區別、為何中斷不能睡眠
2、關于x86中選擇子、描述符和各種門的理解
3、查閱相關資料和內核源碼理解:
中斷是如何發生以及硬件和內核是如何相應的,如何返回的
x86上中斷發生時上下文(寄存器)如何保存以及中斷返回時上下文如何恢復的,系統的第一個任務是如何啟動的
4、內核中安排下半部的理由
5、軟中斷及其他的下半部策略適用于什么樣的任務和場合?
6、下半部可以睡眠么?為什么?
7、2.4和2.6內核中下半部包括哪些部分,為何2.6內核相比2.4內核會做這樣的改進
8、閱讀內核中關于軟中斷、tasklet以及工作隊列的代碼、相關書籍和資料,總結如下兩個問題:
軟中斷、tasklet以及工作隊列是如何初始化,注冊以及觸發的,使用了哪些關鍵的數據結構及內核變量?
軟中斷、tasklet以及工作隊列都在什么場合下使用?
------------------------------
內核學習第七周計劃
內核學習第七周計劃:
時間:12月13日--12月19日
內容:內核同步的理論知識。
問題:
1.為什么要進行內核的同步?
2.內核中怎么定義原子操作?
3.競爭產生的條件與加鎖的順序?
4.要保護的對象?
5.死鎖產生的條件與解決辦法?
6.你有什么比較好的方法來調試多線程的程序?
7.據一個內核中產生競爭的例子。
------------------------------
內核學習第八周計劃
第八周:
內容:
上一周我們分析了內核中的同步,這一次我們要接觸的是內核中怎么進行同步和互斥。
問題:
1.原子操作的粒度問題;
2.自旋鎖的設計及其應用場合,分析自旋鎖;
3.信號量及其應用,信號量怎么使用?
4.鎖的粒度以及其分類;
5.內核可搶占性的實現及其與鎖的關系;
6.smp中需要考慮哪些同步與互斥;
------------------------------
內核學習第九周計劃
前面的話:
內核學習已經進行了兩個月的時間,LKD這本書我們基本上已經進行了一半。希望大家在下面多用功。
我們在這個計劃里面列出來的只是一些比較基本的問題,而且我們沒有給出問題的答案,但是只要你在下面
用功了,我想答案就在這本書里和源代碼里面。
本周內容:TIMERS AND TIME MANAGEMENT
1.HZ和jiffies值的定義?
2.內核中怎樣解決jiffies的回繞?為什么這樣可以解決jiffies回繞?
3.時鐘中斷處理程序有哪些值得注意的地方?
4.xtime_lock鎖和seqlock鎖?
5.定時器的實現、使用和競爭條件?
6.udelay()&mdelay()?
------------------------------
內核學習第十周計劃:
內存管理
學習內容
內存管理是比較龐大的一個部分,在lkd這本書中用了很少的篇幅,從這里面我們基本能看清楚 內存管理的概貌。《情景分析》一書關于內存管理的部分講得比較多,代碼分析比較透徹也比較深入。 但是相對的難度也比較大,建議先看看lkd這本書,然后再看《情景分析》一書的內存管理。
問題:
1.內核中內存的分頁、分區;
2.內核中有哪些函數來獲得內存?內核中分配內存要注意什么?
3.為什么使用slab?slab對象的詳細分析。
4.內核棧上內存的靜態分配問題;