計算機啟動過程

BIOS

以intel8086為例,8086有20根地址線。一共可以訪問到0x00000 - 0xFFFFF的地址空間,剛好1MB范圍,但并未全部用于訪問DRAM。其中大部分用于訪問DRAM,一小部分用于訪問只讀存儲器ROM(那里固化了開機時需要執行的指令。)和外圍的板卡。如圖所示:

1.jpg

8086加電或者復位時,CS = 0XFFFF,IP = 0X0000,所以第一條指令位于物理地址0xFFFF0正好位于ROM中,一般是一個跳轉指令,跳轉到ROM低端區域。ROM內容包括很多部分,主要進行硬件的診斷,檢測和初始化。當它完成自己工作后,最后要做的就是從輔存中讀取指令數據(內核自舉代碼),然后轉到那里執行。

主引導扇區

接上文,BIOS要從輔存中加載指令數據,然后再跳轉到那里加載的地址,執行指令。這里輔存以硬盤為例,硬盤的第一個扇區稱之為主引導扇區,BIOS將把該扇區的內容加載到0X0000:0X7C00,即物理地址:0x07C00。然后判斷該扇區是否有效,有效的主引導扇區最后的2字節內容是0x550xAA。如果有效就會使用jmp指令跳轉至0x07C00。主引導扇區里面應該是內核自舉的代碼指令。然后內核接管一切,完成后續操作。

這里也有點意思,想像一下,我們的程序執行一定需要操作系統(內核)嗎?不一定,假設主引導扇區內容不是內核,而是一段小程序。只要最后2字節數據是0x55和0xAA,那么這段程序依然能運行。所以程序使能夠脫離操作系統(內核)而執行的。這也從另一個側面說明了為什么操作系統會被發明出來。

顯卡和顯存

順帶說下顯示的東西。

  • 圖形模式
    顯卡有自己的存儲即顯存,顯存里面放的二進制數據,比如第1個字節對應屏幕左上角連續的8個像素,第二個字節對應后續的8個像素,以此類推。(1個二進制位對應像素的亮暗)。-
  • 文本模式
    與之對應的還有中方式是:顯存里第一字節存放字符編碼(ACISS),第二字節存放編碼控制字符顯示樣式。以此類推。

為了顯示數據,CPU需要訪問顯存,但顯存位于顯卡上,訪問顯存則需要和顯卡設備打交道,這樣總會影響速度和效率。于是后來就決定把顯存也映射至處理器可以直接訪問的地址空間。傳統上,0xB8000 ~ 0xBFFFF時留給顯卡的。這樣就可以直接用mov指令直接寫數據。當我們把字符寫在這一塊時,屏幕上就會顯示出我們想要的內容。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容