計(jì)算機(jī)上電復(fù)位,BIOS自檢,然后加載MBR到內(nèi)存0x7c00,跳轉(zhuǎn)到MBR中執(zhí)行,MBR引導(dǎo)程序查看各分區(qū)表項(xiàng)的情況,找到活動(dòng)分區(qū),將內(nèi)核加載器裝載到內(nèi)存中,然后將控制權(quán)轉(zhuǎn)交給內(nèi)核加載器,內(nèi)核加載器執(zhí)行操作系統(tǒng)引導(dǎo)程序,進(jìn)入內(nèi)核。
bootloader中通過BIOS的中斷0x15獲取物理內(nèi)存容量,注冊(cè)內(nèi)核的段描述符,初始化全局描述符表。
打開A20,加載全局描述符表,將cr0的pe位置1,準(zhǔn)備進(jìn)入保護(hù)模式。
jump清空流水線,進(jìn)入保護(hù)模式。
進(jìn)入保護(hù)模式后,創(chuàng)建頁(yè)目錄表和頁(yè)表,第1023個(gè)頁(yè)目錄項(xiàng)和第1023個(gè)頁(yè)表項(xiàng)指向自身頁(yè)目錄表的物理地址,用于內(nèi)核定位,修改頁(yè)目錄表和頁(yè)表。第768個(gè)頁(yè)目錄項(xiàng)映射到第0個(gè)頁(yè)目錄項(xiàng),實(shí)現(xiàn)用戶進(jìn)程的時(shí)候會(huì)將內(nèi)核的高端頁(yè)目錄項(xiàng)復(fù)制到用戶的頁(yè)目錄項(xiàng)中,以實(shí)現(xiàn)用戶能夠?qū)崿F(xiàn)操作系統(tǒng)的系統(tǒng)調(diào)用。
將硬盤上的內(nèi)核讀入內(nèi)存中,將esp指針指向主線程的內(nèi)核棧,執(zhí)行主線程的函數(shù)內(nèi)容。
主線程函數(shù)就是程序的入口,執(zhí)行主函數(shù)前會(huì)先初始化相應(yīng)的中斷設(shè)置,初始化中斷描述符表;內(nèi)存管理,比如對(duì)內(nèi)存池的分配;初始化一些鍵盤寄存器等;初始化系統(tǒng)調(diào)用等。