Linux核心分析(三)之從「頭」開始

2021-07-28 05:15:57 字數 1703 閱讀 2232

一、真容初現

終於走進了linux核心**了。linux作為作業系統,原始碼肯定十分十分龐大。要了解全部的實現**,這也不現實。弱水三千,只取一瓢飲。了解一些小的片段對我們來說亦是大有裨益。

傳送門

二、實驗與分析

實驗目的:使用gdb跟蹤除錯核心從start_kernel到init程序啟動

實驗步驟:

1.跟蹤除錯核心 -s 凍結cpu,-s 開啟遠端除錯埠(預設使用1234埠,若不想使用1234埠,則可以使用-gdb tcp:***x來取代-s選項)

2.使用水平分割開啟另乙個shell,跟蹤執行。

gdbfile linux-3.18.6/vmlinux # 在gdb介面中targe remote之前載入符號表

target remote:1234 # 建立gdb和gdbserver之間的連線,按c 讓qemu上的linux繼續執行

break start_kernel # 斷點的設定可以在target remote之前,也可以在之後

結果分析:

start_kernel是linux核心初始化的入口,在 start_kernel()中 linux 將完成整個系統的核心初始化。

pcb初始化

中斷與記憶體管理模組初始化

排程模組初始化

等等以及一些其它模組的初始化

在linux 核心初始化的末尾,是rest_init。

建立了 linux 系統的第乙個使用者態程序,並一直存在。

建立的kthreadd2號程序,它是所有核心態執行緒的祖先。

三、總結

start_kernel是linux核心初始化的入口, 將完成整個系統的核心初始化。核心初始化的最後一步—rest_init將啟動 所有程序的祖先(使用者程序與核心程序)。引用課程附件的一句話就是:道生一(start_kernel….cpu_idle),一生二(kernel_init和kthreadd),二生三(即前面0、1和2三個程序),三生萬物(1號程序是所有使用者態程序的祖先,2號程序是所有核心執行緒的祖先)。

linux核心分析

writen by

江明星

從頭開始之PTA

1001 害死人不償命的 3n 1 猜想 15分 卡拉茲 callatz 猜想 對任何乙個正整數 n,如果它是偶數,那麼把它砍掉一半 如果它是奇數,那麼把 3n 1 砍掉一半。這樣一直反覆砍下去,最後一定在某一步得到 n 1。卡拉茲在 1950 年的世界數學家大會上公布了這個猜想,傳說當時耶魯大學師...

linux 從頭開始 二

du h 檢視每個檔案和目錄的的磁碟使用空間 df h 檢視磁碟分割槽上可使用的的硬碟空間,相當於win的我的電腦,檢視每個分割槽使用情況 ln 原始檔 做成的硬鏈結 1 檔案有相同的 inode 及 data block 2 只能對已存在的檔案進行建立 3 不能交叉檔案系統進行硬鏈結的建立 就是只...

linux 從頭開始 四 (vim)

游標移動的方法 h 或 左箭頭 游標左移乙個字元 l 或 右箭頭 游標右移乙個字元 k或 上箭頭 游標上移乙個字元 j或 下箭頭 游標下移乙個字元 ctrl f page down 向下翻一頁 ctrl b page up 向上翻一頁 ctrl d 向下翻半頁 ctrl u 向上翻半頁 游標移動到非...