MIT 6.828 JOS學習筆記2. Lab 1 Part 1.2: PC bootstrap


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目錄下,輸入命令

           make qemu-gdb

    此時,屏幕上會打印下列信息:

    

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

    

  這樣其實就已經可以開始調試了!

  這里面我們要看最下面5行

      [f000:fff0]  0xffff0: ljmp   $0xf000, $0xe05b

  這條指令就是整個PC啟動后,執行BIOS的第一條指令。
  
  Exercise 2: 使用GDB的'si'命令,去追蹤ROM BIOS幾條指令,並且試圖去猜測,它是在做什么。但是不需要把每個細節都弄清楚。
  
  關於Exercise 2的分析,可以看我的這篇博文: MIT 6.828 JOS學習筆記3. Exercise 1.2 http://www.cnblogs.com/fatsheep9146/p/5078179.html
 
    綜上,我們可以看到BIOS的操作就是在控制,初始化,檢測各種底層的設備,比如時鍾,GDTR寄存器。以及設置中斷向量表。這都和Lab 1 Part 1.2最后兩段說的一樣。但是作為PC啟動后運行的第一段程序, 它最重要的功能是把操作系統從磁盤中導入內存,然后再把控制權轉交給操作系統。所 以BIOS在運行的最后會去檢測可以從當前系統的哪個設備中找到操作系統,通常來說是我們的磁盤。也有可能是U盤等等。當BIOS確定了,操作系統位於磁 盤中,那么它就會把這個磁盤的第一個扇區,通常把它叫做啟動區(boot sector)先加載到內存中,這個啟動區中包括一個非常重要的程序--boot loader,它會負責完成整個操作系統從磁盤導入內存的工作,以及一些其他的非常重要的配置工作。最后操作系統才會開始運行。
 
  可見PC啟動后的運行順序為 BIOS --> boot loader --> 操作系統內核

  以上就是Lab 1 Part 1部分的全部內容,有問題或糾正錯誤的同學,歡迎發送到

    zzqwf12345@163.com

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM