Linux 0.11源碼閱讀筆記-總覽


Linux 0.11源碼閱讀筆記-總覽

閱讀源碼的目的

加深對Linux操作系統的了解,了解Linux操作系統基本架構,熟悉進程管理、內存管理等主要模塊知識。

通過閱讀教復雜的代碼,鍛煉自己復雜項目代碼的閱讀能力。對於一般簡短的程序,可以從main函數逐行閱讀理解;對於復雜的項目,只能在了解源碼主要結構的情況下,抓住某個具體的功能進行閱讀。

選擇較早版本的理由

Linux較新版本代碼在百萬行以上,而0.11版本內核不超過2萬行代碼。比較新版本的Linux內核源碼太多且內容龐雜,自身能力不足,沒有能力閱讀。早期版本的代碼雖然功能簡陋,但基本功能都有,屬於麻雀雖小五臟俱全,對於新手來說最適合不過。

不足在於0.11版本的代碼中不包含專門的進程等待隊列、TCP/IP網絡等方面非常重要的代碼,對內存的分配和使用與先進的內核也有所區別。可以在學習0.11版本代碼之后,通過較新版本源碼學習。

內核結構框圖

內核位於用戶層與硬件層之間,向下管理底層CPU、內存、磁盤等硬件,並向上通過系統調用的方式提供服務。0.11內核主要部分包括文件子系統和進程管理子系統,進程管理子系統進一步可分為內存管理、進程調度、進程通信三個主要模塊。

image

內核代碼主要部分

代碼文件從功能上可分為三類:

  • 硬件(異常)中斷處理程序文件
  • 系統調用服務處理程序文件
  • 進程調度等通用功能文件

image

  1. 中斷處理程序

主要包括兩個代碼文件:

  • asm.s:實現了大部分硬件中斷處理程序匯編代碼
  • traps.c:實現了asm.s的中斷處理過程中調用的c函數,這些c函數會在中斷門中注冊函數地址
  1. 系統調用處理相關程序

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等相關的系統調用函數代碼實現
  1. 其它通用類程序

包括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)

image

參考

  • Linux 內核完全注釋 內核版本0.11 - 趙炯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM