linux 原始碼學習計畫

2021-05-21 23:30:30 字數 3744 閱讀 5197

準備條件:必要的核心;必要的文件;必要的機器(虛擬機器也可)。

第一周:

1.linux和unix相比有哪些特點?

2.核心程式設計和使用者空間程式設計相比有哪些不同之處?

3.自己編譯一下核心,你編譯成功了麼?如果不成功,有什麼問題?使用你新編譯的核心,  能順利啟動麼?有什麼問題?

4.linux核心源**樹中你能找到sg裝置驅動是在那個檔案中實現的麼?sg是什麼含意?

5.清楚地了解一下核心中源**樹的結構。

第二週:

主要是lkd中文版第一版第二章(英文第二版版第三章)的內容,比較重要。

1.和程序管理相關的核心檔案都有哪些?找出來大致瀏覽一下.

2.什麼是程序和執行緒?在linux中有什麼獨特的地方?

3.什麼是程序描述符?怎樣得到當前程序的程序描述符?程序的核心棧有多大?

4.程序的狀態都有哪些?在什麼情況下發生轉化?

5.linux中所有程序之間的關係是怎麼樣的?

6.使用者執行緒和核心執行緒的區別和聯絡?

7.linux是怎樣建立程序和執行緒的?

8.linux怎樣終結程序?

9.對照相應的核心源**檔案,分析一下問題3、5、6、7。

第三週1.程序排程最基本的原理是什麼? 

2.列舉出幾個i/o消耗性和處理器消耗型的程序。 

3.linux都採用了哪些排程的演算法?詳細解釋一下這些演算法。 

4.程序什麼時間進入執行態?什麼時間進入休眠(阻塞)狀態? 

5.了解程序搶占的演算法; 

6.討論一下linux程序排程的實時性怎麼樣,還有哪些需要提高的地方? 

7.自己查詢程序排程的相關檔案,分析為題3-6。

第四周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以及工作佇列都在什麼場合下使用?

第七周計畫: 

內容:核心同步的理論知識。 

1.為什麼要進行核心的同步? 

2.核心中怎麼定義原子操作? 

3.競爭產生的條件與加鎖的順序? 

4.要保護的物件? 

5.死鎖產生的條件與解決辦法? 

6.你有什麼比較好的方法來除錯多執行緒的程式? 

7.據乙個核心中產生競爭的例子。 

第八周        

內容: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.核心棧上記憶體的靜態分配問題;

第十周虛擬檔案系統

1.為什麼要設計虛擬檔案系統?

2.linux支援哪些常見的檔案系統?各有什麼特點?

3.虛擬檔案系統和物理檔案系統是怎麼銜接起來的?

4.虛擬檔案系統的核心資料結構及其操作?

5.分析一下使用者空間中開啟或者讀寫乙個檔案的時候核心中都進行了那些操作?

6.分析一種檔案系統的實現?ext2,fat32,reiserfs。

第十一周

塊i/o層

1、什麼是塊裝置,塊裝置和字元裝置有什麼本質區別

2、塊大小是根據什麼確定的,典型值是多少?

3、i/o排程程式的目的是什麼?i/o排程和程序排程的異同?

4、i/o排程程式如何減少磁碟定址時間?

5、什麼是linus電梯?它是如何工作的?

6、最終期限排程和**排程解決了什麼問題?

第十二周:

程序位址空間

1.記憶體區域中的各種物件及其作用?

2.程序描述符和記憶體描述符聯絡?記憶體描述符的分析和使用,在對待記憶體的問題上,執行緒和程序有什麼區別?

3.struct vm_area_struct在虛擬記憶體管理管理上的作用?

4.理解/proc//map中的各種屬性並自己做實驗。

5.核心中定義的記憶體操作函式及其使用。

第十八周

頁快取記憶體和頁回寫

1.你的linux系統中,ram中的一頁和磁碟上的一塊大小各是多少?

頁快取為什麼要快取乙個ram的頁面大小?能不能改變一下?

2.理解clean_pages,dirty_pages,locked_pages.

3.提高快取的命中率的方法通常有哪些?

第15章 除錯

1.你曾經除錯過核心麼?你用什麼方法進行除錯?

2.除錯核心的方法通常有哪些?

3.怎麼提交乙個核心的bug?提交bug要注意什麼 ?

4.為什麼有的人常常說printk列印不出來資訊?怎麼解決?

5.自己造出乙個bug,並把它除錯出來。

第16章  可移植性

1.可以從linux核心的目錄結構中看出linux核心的可移植性有什麼特點?

2.資料對齊、資料型別與位元組順序在移植的時候需要注意什麼?

3.網上有大量的移植uclinux到不同平台上的文件,找乙個來看看。

第十七章 補丁、開發和社群

1.如果你寫的**風格不好,怎麼修改它?

2.訂閱linux核心郵件列表並研究它。

注意:lna:linux networking architecture

lkd:linux kernel development

ulk:understanding linux kernel

lvmm:understanding the linux virtual memory manager

情景分析:linux核心源**情景分析

mangos原始碼分析 計畫

最近無意中看到了mangos這麼個東東,它很好的反應了目前遊戲伺服器的設計,所以決定在打醬油的時候對其研究一下。現在給出參考位址 參考 1 mangos原始碼分析系列 2 mangos 原始碼閱讀筆記,十分詳細,框架流程分析的很清晰 3 綠色格線內表示物理上為一台伺服器。1 方案一 低成本 低效能 ...

Linux學習之原始碼安裝

步驟 以nginx為例 2.檢視原始碼 我們看到,src目錄下都是.c或者是.h的檔案,是c語言的原始碼 src下的內容為 3.準備安裝環境 我們看到其原始碼是c語言,那麼我們要安裝gcc等工具 我們首先通過yum進行查詢yum grouplist 找到development tools然後檢視這個...

Linux系統原始碼學習方法

原始碼目錄 一般在linux系統中的 usr src linux.代表的是核心版本,如2.4.23 目錄下就是核心源 如果沒有類似目錄,是因為還沒安裝核心 目錄結構 在閱讀原始碼之前,還應知道linux核心原始碼的整體分布情況。現代的作業系統一般由程序管理 記憶體管理 檔案系統 驅動程式和網路等組成...