歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux-0.11 啟動流程分析

當PC上電後,80x86架構的CPU將自動進入實模式(指尋址采用和8086相同的16位段和偏移量,最大尋址空間1MB,最大分段64KB。可以使用32位指令。32位的x86 CPU用做高速的8086),並從地址0xF000:0xFFF0開始自動執行代碼(這個地址通常是BIOS ROM中的地址)此條代碼是一個遠跳轉指令:jmp far 0xF000:0xE05B。這時BIOS開始執行某些系統檢測及設定(POST上電自檢、中斷例程、系統設置程序等等,並在物理地址0處開始初始化中斷向量。此後,它將可啟動設備的第一個扇區(磁盤引導扇區,512字節)讀入到內存絕對地址0x0000:0x7C00處 即31KB,並跳轉到這個地方開始執行。被讀入的文件就是用8086匯編編寫的(boot/bootsect.s)。

  bootsect.s 將會把自己移動到內存絕對地址0x90000(576KB)處,並把啟動設備後2KB字節代碼(boot/setup.s)讀入到內存0x90200處,而內核的其他部分(systen模塊)則被讀入到內存地址0x10000(64KB)開始處,

  setup.s 程序將會把system模塊移動到物理內存起始位置處。負責從BIOS中獲取系統數據,並將這些數據放到系統內存的適當位置。接下來加載中斷描述符表寄存器(idtr)和全局描述符表寄存器(gdtr),開啟A20地址線,重新設置兩個中斷控制芯片8259A,將硬件中斷號重新設置為0x20~0x2f。最後設置CPU的控制寄存器CR0(機器狀態字),從而進入32位保護模式,並跳轉到位於system模塊最前面部分head.s程序繼續執行。

  head.s程序執行完成後,已經正式完成了內存頁目錄和頁表的設置,並重新設置了內核實際使用的中斷描述表idt和全局描述符表gdt。另外還為軟盤驅動程序開辟了1KB字節的緩沖區。

Copyright © Linux教程網 All Rights Reserved