具體內容參考《ulk 3rd》
1. linux核心的自解壓過程在一般軟體中不常見。它會呼叫decompress_kernel()來對kernel進行自解壓,核心實現函式為gunzip()
這一塊裡面對記憶體的搬來移去還不是很清楚。從文件來看,壓縮了的核心和未壓縮核心放置的位置是不同的。
2. 然後核心會跳來蹦去,構建一些臨時的gdt、idt等。在這段時間裡面做了一件很重要的呃事情:填充boot_params結構。這個結構佔一頁,記錄了各種啟動時期探測到的引數,為程式的後期執行提供了重要的資料參考。
這一塊不明白的地方在於感覺它的工作做得很雜亂,沒有條理,而且有些操作有重複之嫌。
3. start_kernel() 這個函式很厲害,裡面進行了大量的函式呼叫,對整個計算機環境進行了初始化,比如建立正式的idt、gdt,初始化頁面分配器,初始化排程器等。然後就進入正題:建立核心執行緒,啟動shell,然後idle之~
這裡不清楚的地方主要是start_kernel中的大量函式呼叫,那些函式的具體功能。太多了,要求很深的功底才行:(
關於驅動的初始化:
start_kernel()最末尾->rest_init()->kernel_thread(kernel_init, null, clone_fs | clone_sighand)->do_basic_setup();->driver_init();->各種init
由此可見,驅動初始化是由kernel_init執行緒建立的。
初始化 指定初始化
id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...
初始化 1 預設初始化 列表初始化
初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...
初始化 MyBatis初始化之載入初始化
在mybatis初始化過程中,大致會有以下幾個步驟 1.建立configuration全域性配置物件,會往typealiasregistry別名註冊中心新增mybatis需要用到的相關類,並設定預設的語言驅動類為xmllanguagedriver 3.構建defaultsqlsessionfacto...