計算機啓動,首先啓動的是BIOS系統,當打開電源,BIOS開始自檢,而後出發19號中斷,在處理19號中斷時,BIOS檢測電腦是否具備軟盤、硬盤或是固定磁盤,內存,和一些啓動操做系統的必要設備,若是有使用磁盤,就把磁盤的第一個扇區MBR(512B)加載到內存的0x7C00地址處,而後跳轉到這個地方spa
(1) Linux 0.11 磁盤第一個扇區的bootsect模塊(boot/bootsect.s編譯而成),它由BIOS讀入到內存的絕對地址0x7C00(31KB)處, 而且執行,在bootsect執行期間,會將本身移動到內存絕對地址,0x90000開始處,並執行。操作系統
(2) 執行bootsect 程序執行的做用是加載位於磁盤第二個扇區到第四個扇區的setup模塊(boot/setup.s編譯而成),讀入到內存絕對地址0x90200.net
(3) 執行setup模塊,再把磁盤上的system模塊加載到內存0x10000(64kb)處,而後利用BIOS中斷0X13取磁盤參數表中當前引導盤的參數,設置顯示器顯示模式等,最後system模塊加載到內存絕對地址0x00000處,開始執行head.s圖片
(4) 執行system模塊,head.s位於system模塊頭部。從這裏開始,內核徹底是在保護模式下運行。首先是加載各個數據段寄存器,重設中斷描述符表idt,使各表項執行一個 報錯誤的啞中斷子程序ignore_int。而後重設gdt,檢測A20地址線是否已真的開啓, 若是沒開啓進入死循環。檢測數學協處理器。 設置分頁處理機制,將頁目錄表放在絕對物理地址0開始處(本程序會被覆蓋)。最後, head.s利用返回指令將預先放在堆棧中的/init/main.c程序的入口地址彈出,去運行 main()程序。內存
執行 main.cci
main.c程序首先利用前面setup.s程序取得的系統參數設置系統的根文件設備號以及一
些內存全局變量。 get
內核先進行全部方面的硬件初始化。包括陷阱門、塊設備、字符設備和tty,包括人工設置 數學
第一個任務(task 0)。待全部初始化完成後設置中斷容許標誌開啓中斷,並「手動」切換
到任務0中運行。
it