Linux 0.11原始碼閱讀筆記-總覽
閱讀原始碼的目的
加深對Linux作業系統的了解,了解Linux作業系統基本架構,熟悉行程管理、記憶體管理等主要模塊知識,
通過閱讀教復雜的代碼,鍛煉自己復雜專案代碼的閱讀能力,對于一般簡短的程式,可以從main函式逐行閱讀理解;對于復雜的專案,只能在了解原始碼主要結構的情況下,抓住某個具體的功能進行閱讀,
選擇較早版本的理由
Linux較新版本代碼在百萬行以上,而0.11版本內核不超過2萬行代碼,比較新版本的Linux內核原始碼太多且內容龐雜,自身能力不足,沒有能力閱讀,早期版本的代碼雖然功能簡陋,但基本功能都有,屬于麻雀雖小五臟俱全,對于新手來說最適合不過,
不足在于0.11版本的代碼中不包含專門的行程等待佇列、TCP/IP網路等方面非常重要的代碼,對記憶體的分配和使用與先進的內核也有所區別,可以在學習0.11版本代碼之后,通過較新版本原始碼學習,
內核結構框圖
內核位于用戶層與硬體層之間,向下管理底層CPU、記憶體、磁盤等硬體,并向上通過系統呼叫的方式提供服務,0.11內核主要部分包括檔案子系統和行程管理子系統,行程管理子系統進一步可分為記憶體管理、行程調度、行程通信三個主要模塊,

內核代碼主要部分
代碼檔案從功能上可分為三類:
- 硬體(例外)中斷處理程式檔案
- 系統呼叫服務處理程式檔案
- 行程調度等通用功能檔案

- 中斷處理程式
主要包括兩個代碼檔案:
- asm.s:實作了大部分硬體中斷處理程式匯編代碼
- traps.c:實作了asm.s的中斷處理程序中呼叫的c函式,這些c函式會在中斷門中注冊函式地址
- 系統呼叫處理相關程式
Linux中應用程式呼叫內核的功能是通過中斷呼叫int 0x80進行的,暫存器eax中放呼叫號,每個呼叫號對應一個系統呼叫函式,實作系統呼叫的相關檔案包括system_call.s、fork.c、signal.c和exit.c檔案,
- system_call.s:int 80中斷呼叫處理程式,根據系統呼叫號呼叫相應的系統呼叫函式
- fork.c、signal.c、exit.c:分別包含行程fork、信號、行程exit等相關的系統呼叫函式代碼實作
- 其它通用類程式
包括schedule.c、mktime.c、panic.c、printk.c和vsprintf.c,
- schedule.c:行程調度代碼
- mktime.c:內核使用的時間函式mktime(),僅在init/main.c中被呼叫一次
- panic.c:包含panic()函式,用于內核運行出現錯誤時顯示出錯資訊并停機
- printk.c、vsprintf.c:內核顯示資訊的支持程式,實作了內核專用顯示函式printk()和字串格式化輸出函式vsprintf()
內核函式呼叫關系圖(Linux 2.6.26)

參考
- Linux 內核完全注釋 內核版本0.11 - 趙炯
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/451212.html
標籤:其他
