- 論壇徽章:
- 0
|
第一周:
1.linux和unix相比有哪些特點?
2.內(nèi)核編程和用戶空間編程相比有哪些不同之處?
3.自己編譯一下內(nèi)核,你編譯成功了么?如果不成功,有什么問題?使用你新編譯的內(nèi)核, 能順利啟動么?有什么問題?
4.linux內(nèi)核源代碼樹中你能找到sg設(shè)備驅(qū)動是在那個文件中實現(xiàn)的么?sg是什么含意?
清楚地了解一下內(nèi)核中源代碼樹的結(jié)構(gòu)。
第二周:
主要是lkd中文版第一版第二章(英文第二版版第三章)的內(nèi)容,比較重要。
1.和進程管理相關(guān)的內(nèi)核文件都有哪些?找出來大致瀏覽一下.
2.什么是進程和線程?在Linux中有什么獨特的地方?
3.什么是進程描述符?怎樣得到當(dāng)前進程的進程描述符?進程的內(nèi)核棧有多大?
4.進程的狀態(tài)都有哪些?在什么情況下發(fā)生轉(zhuǎn)化?
5.Linux中所有進程之間的關(guān)系是怎么樣的?
6.用戶線程和內(nèi)核線程的區(qū)別和聯(lián)系?
7.Linux是怎樣創(chuàng)建進程和線程的?
8.Linux怎樣終結(jié)進程?
9.對照相應(yīng)的內(nèi)核源代碼文件,分析一下問題3、5、6、7。
第三周
1.進程調(diào)度最基本的原理是什么?
2.列舉出幾個I/O消耗性和處理器消耗型的進程。
3.Linux都采用了哪些調(diào)度的算法?詳細解釋一下這些算法。
4.進程什么時間進入運行態(tài)?什么時間進入休眠(阻塞)狀態(tài)?
5.了解進程搶占的算法;
6.討論一下Linux進程調(diào)度的實時性怎么樣,還有哪些需要提高的地方?
7.自己查找進程調(diào)度的相關(guān)文件,分析為題3-6。
第四周
1、什么是系統(tǒng)調(diào)用?
2、為什么需要系統(tǒng)調(diào)用?
3、實現(xiàn)系統(tǒng)調(diào)用相關(guān)的代碼有哪些,找出來瀏覽一下
4、詳細閱讀getuid()這一下系統(tǒng)調(diào)用的實現(xiàn)代碼
5、如何導(dǎo)出sys_call_table,有幾種方法,注意不同內(nèi)核版本的區(qū)別
6、嘗試自己給kernel添加一個簡單的系統(tǒng)調(diào)用。 功能要求:調(diào)用這個系統(tǒng)調(diào) 用,使用戶的uid等于0。
7、采用添加系統(tǒng)調(diào)用的方式實現(xiàn)一個新功能的利弊有哪些,替代方法是什么?
第六周計劃:
1、如何理解中斷、中斷上下文和進程上下文的區(qū)別、為何中斷不能睡眠
2、關(guān)于x86中選擇子、描述符和各種門的理解
3、查閱相關(guān)資料和內(nèi)核源碼理解:
中斷是如何發(fā)生以及硬件和內(nèi)核是如何相應(yīng)的,如何返回的
x86上中斷發(fā)生時上下文(寄存器)如何保存以及中斷返回時上下文如何恢復(fù)的,系統(tǒng)的第一個任務(wù)是如何啟動的
4、內(nèi)核中安排下半部的理由
5、軟中斷及其他的下半部策略適用于什么樣的任務(wù)和場合?
6、下半部可以睡眠么?為什么?
7、2.4和2.6內(nèi)核中下半部包括哪些部分,為何2.6內(nèi)核相比2.4內(nèi)核會做這樣的改進
8、閱讀內(nèi)核中關(guān)于軟中斷、tasklet以及工作隊列的代碼、相關(guān)書籍和資料,總結(jié)如下兩個問題:
軟中斷、tasklet以及工作隊列是如何初始化,注冊以及觸發(fā)的,使用了哪些關(guān)鍵的數(shù)據(jù)結(jié)構(gòu)及內(nèi)核變量?
軟中斷、tasklet以及工作隊列都在什么場合下使用?
第七周計劃:
內(nèi)容:內(nèi)核同步的理論知識。
問題:
1.為什么要進行內(nèi)核的同步?
2.內(nèi)核中怎么定義原子操作?
3.競爭產(chǎn)生的條件與加鎖的順序?
4.要保護的對象?
5.死鎖產(chǎn)生的條件與解決辦法?
6.你有什么比較好的方法來調(diào)試多線程的程序?
7.據(jù)一個內(nèi)核中產(chǎn)生競爭的例子。
第八周
本周內(nèi)容:TIMERS AND TIME MANAGEMENT
1.HZ和jiffies值的定義?
2.內(nèi)核中怎樣解決jiffies的回繞?為什么這樣可以解決jiffies回繞?
3.時鐘中斷處理程序有哪些值得注意的地方?
4.xtime_lock鎖和seqlock鎖?
5.定時器的實現(xiàn)、使用和競爭條件?
6.udelay()&mdelay()?
第九周
內(nèi)存管理
學(xué)習(xí)內(nèi)容
內(nèi)存管理是比較龐大的一個部分,在lkd這本書中用了很少的篇幅,從這里面我們基本能看清楚 內(nèi)存管理的概貌。《情景分析》一書關(guān)于內(nèi)存管理的部分講得比較多,代碼分析比較透徹也比較深入。 但是相對的難度也比較大,建議先看看lkd這本書,然后再看《情景分析》一書的內(nèi)存管理。
問題:
1.內(nèi)核中內(nèi)存的分頁、分區(qū);
2.內(nèi)核中有哪些函數(shù)來獲得內(nèi)存?內(nèi)核中分配內(nèi)存要注意什么?
3.為什么使用slab?slab對象的詳細分析。
4.內(nèi)核棧上內(nèi)存的靜態(tài)分配問題;
第十周
虛擬文件系統(tǒng)
1.為什么要設(shè)計虛擬文件系統(tǒng)?
2.Linux支持哪些常見的文件系統(tǒng)?各有什么特點?
3.虛擬文件系統(tǒng)和物理文件系統(tǒng)是怎么銜接起來的?
4.虛擬文件系統(tǒng)的核心數(shù)據(jù)結(jié)構(gòu)及其操作?
5.分析一下用戶空間中打開或者讀寫一個文件的時候內(nèi)核中都進行了那些操作?
6.分析一種文件系統(tǒng)的實現(xiàn)?ext2,fat32,reiserfs。
第十一周
塊I/O層
1、什么是塊設(shè)備,塊設(shè)備和字符設(shè)備有什么本質(zhì)區(qū)別
2、塊大小是根據(jù)什么確定的,典型值是多少?
3、I/O調(diào)度程序的目的是什么?I/O調(diào)度和進程調(diào)度的異同?
4、I/O調(diào)度程序如何減少磁盤尋址時間?
5、什么是linus電梯?它是如何工作的?
6、最終期限調(diào)度和預(yù)測調(diào)度解決了什么問題?
內(nèi)核學(xué)習(xí)第十八周計劃
第十二周:
進程地址空間
問題:
1.內(nèi)存區(qū)域中的各種對象及其作用?
2.進程描述符和內(nèi)存描述符聯(lián)系?內(nèi)存描述符的分析和使用,在對待內(nèi)存的問題上,
線程和進程有什么區(qū)別?
3.struct vm_area_struct在虛擬內(nèi)存管理管理上的作用?
4.理解/proc//map中的各種屬性并自己做實驗。
5.內(nèi)核中定義的內(nèi)存操作函數(shù)及其使用。
第十八周
第14章 頁高速緩存和頁回寫
1.你的linux系統(tǒng)中,RAM中的一頁和磁盤上的一塊大小各是多少?
頁緩存為什么要緩存一個RAM的頁面大。磕懿荒芨淖円幌?
2.理解clean_pages,dirty_pages,locked_pages.
3.提高緩存的命中率的方法通常有哪些?
第15章 調(diào)試
1.你曾經(jīng)調(diào)試過內(nèi)核么?你用什么方法進行調(diào)試?
2.調(diào)試內(nèi)核的方法通常有哪些?
3.怎么提交一個內(nèi)核的bug?提交bug要注意什么 ?
4.為什么有的人常常說printk打印不出來信息?怎么解決?
5.自己造出一個bug,并把它調(diào)試出來。
第16章 可移植性
1.可以從linux內(nèi)核的目錄結(jié)構(gòu)中看出linux內(nèi)核的可移植性有什么特點?
2.數(shù)據(jù)對齊、數(shù)據(jù)類型與字節(jié)順序在移植的時候需要注意什么?
3.網(wǎng)上有大量的移植uclinux到不同平臺上的文檔,找一個來看看。
第十七章 補丁、開發(fā)和社區(qū)
1.如果你寫的代碼風(fēng)格不好,怎么修改它?
2.訂閱linux內(nèi)核郵件列表并研究它。
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u3/105531/showart_2144657.html |
|