Lab 1 Part 1: PC bootstrap
我們繼續~
PC機的物理地址空間
這一節我們將深入的探究到底PC是如何啟動的。首先我們看一下通常一個PC的物理地址空間是如何布局的:

這張圖僅僅展示了內存空間的一部分。
第一代PC處理器是16位字長的Intel 8088處理器,這類處理器只能訪問1MB的地址空間,即0x00000000~0x000FFFFF。但是這1MB也不是用戶都能利用到的,只有低640KB(0x00000000~0x000A0000)的地址空間是用戶程序可以使用的。如圖所示。
而剩下的384KB的高地址空間則被保留用作其他的目的,比如(0x000A0000~0x000C0000)被用作屏幕顯示內容緩沖區,其他的則被非易失性存儲器(ROM)所使用,里面會存放一些固件,其中最重要的一部分就是BIOS,占據了0x000F0000~0x00100000的地址空間。BIOS負責進行一些基本的系統初始化任務,比如開啟顯卡,檢測該系統的內存大小等等工作。在初始化完成后,BIOS就會從某個合適的地方加載操作系統。
雖然Intel處理器突破了1MB內存空間,在80286和80386上已經實現了16MB,4GB的地址空間,但是PC的架構必須仍舊把原來的1MB的地址空間的結構保留下來,這樣才能實現向后兼容性。所以現代計算機的地址 0x000A0000~0x00100000區間是一個空洞,不會被使用。因此這個空洞就把地址空間划分成了兩個部分,第一部分就是從0x00000000~0x000A0000,叫做傳統內存。剩下的不包括空洞的其他部分叫做擴展內存。而對於這種32位字長處理器通常把BIOS存放到整個存儲空間的頂端處。
由於xv6操作系統設計的一些限制,它只利用256MB的物理地址空間,即它假設用戶的主機只有256MB的內存。
The ROM BIOS
現在我們就開始利用Qemu和gdb去探索PC機的啟動過程。首先看一下如何利用這兩個軟件來實現對操作系統的debug。
1. 首先打開一個terminal並且來到lab目錄下,輸入命令
此時,屏幕上會打印下列信息:

2. 我們再新建一個terminal,還是來到lab目錄下,輸入gdb指令,此時屏幕輸出信息:

這樣其實就已經可以開始調試了!
這里面我們要看最下面5行
[f000:fff0] 0xffff0: ljmp $0xf000, $0xe05b
以上就是Lab 1 Part 1部分的全部內容,有問題或糾正錯誤的同學,歡迎發送到
zzqwf12345@163.com
