Linux系統啓動過程

注:袁帥+ 原創作品轉載請註明出處 + 《Linux內核分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000 

linux內核分析的第二課:完成一個簡單的時間片輪轉多道程序內核代碼

linux內核分析的第三課:Linux系統啓動過程


首先從計算機上電是說起,對於X86CPU,bios會首先把磁盤硬盤的第一個扇區的內容(即bootloader)讀到內存,然後把CPU控制權交給

bootloader,bootloader負責把內核讀到內存,然後啓動內核,內核啓動時,先執行一段彙編指令,做硬件相關的初始化操作,然後跳到start_kernel()處執行。


分析start_kernel()的執行:在這個函數裏面,是內核在啓動第一個進程之前做的各種初始化,爲接下來的進程創建好各種數據結構。

這裏面的schedule_init()調用init_idle()函數,將當前進程初始化成就緒態。



最後是調用rest_init()函數,該函數首先調用kernel_thread()[會調用到fork()]創建init進程,創建kthreadd,然後idel調用schedule_preempt_disabled(),一個包含schedule()的函數,讓啓動過程進行下去,最後調用cpu_start_entry()。



總結:idel進程是在start_kernel()函數初始化的時候手工創建的,在rest_init()中調用kernel_thread()創建第一個進程,對內核啓動過程還不是十分清楚,還需要花更多時間來深入理解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章