為什麼主引導記錄的內存地址是0x7C00?

為什麼主引導記錄的內存地址是0x7C00?

1 人贊了文章

《計算機原理》課本說,啟動時,主引導記錄會存入內存地址0x7C00。

這個奇怪的地址,是怎麼來的,課本就不解釋了。我一直有疑問,為什麼不存入內存的頭部、尾部、或者其他位置,而偏偏存入這個比 32KB 小1024位元組的地方?

昨天,我讀到一篇文章,終於解開了這個謎。

首先,如果你不知道,主引導記錄(Master boot record,縮寫為MBR)是什麼,可以先讀《計算機是如何啟動的?》

簡單說,計算機啟動是這樣一個過程。

  1. 通電
  2. 讀取ROM裡面的BIOS,用來檢查硬體
  3. 硬體檢查通過
  4. BIOS根據指定的順序,檢查引導設備的第一個扇區(即主引導記錄),載入在內存地址 0x7C00
  5. 主引導記錄把操作權交給操作系統

所以,主引導記錄就是引導"操作系統"進入內存的一段小程序,大小不超過1個扇區(512位元組)。

0x7C00這個地址來自Intel的第一代個人電腦晶元8088,以後的CPU為了保持兼容,一直使用這個地址。

1981年8月,IBM公司最早的個人電腦IBM PC 5150上市,就用了這個晶元。

當時,搭配的操作系統是86-DOS。這個操作系統需要的內存最少是32KB。我們知道,內存地址從0x0000開始編號,32KB的內存就是0x0000~0x7FFF

8088晶元本身需要佔用0x0000~0x03FF,用來保存各種中斷處理程序的儲存位置。(主引導記錄本身就是中斷信號INT 19h的處理程序。)所以,內存只剩下0x0400~0x7FFF可以使用。

為了把盡量多的連續內存留給操作系統,主引導記錄就被放到了內存地址的尾部。由於一個扇區是512位元組,主引導記錄本身也會產生數據,需要另外留出512位元組保存。所以,它的預留位置就變成了:

0x7FFF - 512 - 512 + 1 = 0x7C00

0x7C00就是這樣來的。

計算機啟動後,32KB內存的使用情況如下。

+--------------------- 0x0

| Interrupts vectors +--------------------- 0x400

| BIOS data area +--------------------- 0x5??

| OS load area +--------------------- 0x7C00

| Boot sector +--------------------- 0x7E00

| Boot data/stack +--------------------- 0x7FFF

| (not used) +--------------------- (...)

(完)


推薦閱讀:

滲透測試的WINDOWS NTFS技巧集合(二)
Safety and Liveness Properties
python文件打包成.exe文件
node實現圖片的上傳功能
快速學習-如何部署Windows容器

TAG:科技 | 指針編程 | 計算機科學 |