為什麼主開機記錄的記憶體地址是0x7C00?
《計算機原理》課本說,啟動時,主開機記錄會存入記憶體地址0x7C00。
這個奇怪的地址,是怎麼來的,課本就不解釋了。我一直有疑問,為什麼不存入記憶體的頭部、尾部、或者其他位置,而偏偏存入這個比 32KB 小1024位元組的地方?
昨天,我讀到一篇文章,終於解開了這個謎。
首先,如果你不知道,主開機記錄(Master boot record,縮寫為MBR)是什麼,可以先讀《計算機是如何啟動的?》。
簡單說,計算機啟動是這樣一個過程。
- 通電
- 讀取ROM裡面的BIOS,用來檢查硬體
- 硬體檢查通過
- BIOS根據指定的順序,檢查引導裝置的第一個扇區(即主開機記錄),載入在記憶體地址 0x7C00
- 主開機記錄把操作權交給作業系統
所以,主開機記錄就是引導”作業系統”進入記憶體的一段小程式,大小不超過1個扇區(512位元組)。
0x7C00這個地址來自Intel的第一代個人電腦晶片8088,以後的CPU為了保持相容,一直使用這個地址。
1981年8月,IBM公司最早的個人電腦IBM PC 5150上市,就用了這個晶片。
當時,搭配的作業系統是86-DOS。這個作業系統需要的記憶體最少是32KB。我們知道,記憶體地址從0×0000開始編號,32KB的記憶體就是0×0000~0x7FFF。
8088晶片本身需要佔用0×0000~0x03FF,用來儲存各種中斷處理程式的儲存位置。(主開機記錄本身就是中斷訊號INT 19h的處理程式。)所以,記憶體只剩下0×0400~0x7FFF可以使用。
為了把儘量多的連續記憶體留給作業系統,主開機記錄就被放到了記憶體地址的尾部。由於一個扇區是512位元組,主開機記錄本身也會產生資料,需要另外留出512位元組儲存。所以,它的預留位置就變成了:
0x7FFF – 512 – 512 = 0x7C00
0x7C00就是這樣來的。
計算機啟動後,32KB記憶體的使用情況如下。
+——————— 0×0
| Interrupts vectors
+——————— 0×400
| BIOS data area
+——————— 0×5??
| OS load area
+——————— 0x7C00
| Boot sector
+——————— 0x7E00
| Boot data/stack
+——————— 0x7FFF
| (not used)
+——————— (…)
相關文章
- 為什麼主開機記錄的記憶體地址是 0x7C00?記憶體
- 什麼是記憶體記憶體
- Java記憶體模型是什麼,為什麼要有Java記憶體模型,Java記憶體模型解決了什麼問題?Java記憶體模型
- Python如何管理記憶體?記憶體分配機制是什麼?Python記憶體
- 什麼是記憶體管理?其最主要作用?OC記憶體管理機制?記憶體
- Java記憶體模型FAQ(一) 什麼是記憶體模型Java記憶體模型
- 什麼是Java記憶體模型?Java記憶體模型
- 什麼是Java記憶體模型Java記憶體模型
- MongoDB 如何使用記憶體?為什麼記憶體滿了?MongoDB記憶體
- MongoDB如何使用記憶體?為什麼記憶體滿了?MongoDB記憶體
- 顯示卡的視訊記憶體是什麼?記憶體
- 物件為什麼活在記憶體的解析物件記憶體
- 為什麼說列舉更佔記憶體,列舉原理是什麼?記憶體
- Python記憶體檢視是什麼Python記憶體
- SQL Server為什麼這麼耗記憶體SQLServer記憶體
- 電腦記憶體XMP是什麼意思?電腦記憶體XMP模式的作用與開啟教程記憶體模式
- 什麼是伺服器記憶體?如何選擇伺服器記憶體?伺服器記憶體
- 詳解JVM中的記憶體模型是什麼?JVM記憶體模型
- 教你如何擴大電腦的虛擬記憶體? 什麼是虛擬記憶體?記憶體
- 什麼是堆外記憶體off-heap記憶體
- 為什麼 Linux 需要虛擬記憶體Linux記憶體
- 面試官:為什麼需要Java記憶體模型?面試Java記憶體模型
- 為什麼暫存器比記憶體快?記憶體
- AntDB記憶體管理之記憶體上下文之記憶體上下文機制是怎麼實現的記憶體
- 同樣是電晶體,為什麼暫存器比記憶體快呢?記憶體
- 檢視主機的記憶體使用情 (轉)記憶體
- 伺服器記憶體跑滿是什麼原因造成的伺服器記憶體
- 伺服器記憶體跑滿是什麼原因造成的?伺服器記憶體
- Linux 中的“大記憶體頁”(hugepage)是個什麼?Linux記憶體
- Java Object.hashCode()返回的是物件記憶體地址?JavaObject物件記憶體
- 記憶體科普:DIMM是指什麼,和DDR有什麼區別?記憶體
- 記憶體條的PCB是個啥? 宏旺半導體告訴你什麼樣的記憶體條好記憶體
- 如何向外行解釋什麼是記憶體溢位記憶體溢位
- 16g記憶體win10開機記憶體佔用高如何解決_16g記憶體win10開機記憶體就達55%怎麼辦記憶體Win10
- Java記憶體模型FAQ(五)舊的記憶體模型有什麼問題?Java記憶體模型
- 硬碟主開機記錄詳解(轉)硬碟
- Java是否可以棧上分配物件記憶體? 為什麼?Java物件記憶體
- Spark中的記憶體計算是什麼?Spark記憶體