0.11之路(二):載入setup
BIOS將bootsect這個載入程式載入記憶體後,接下來就要靠bootsect來載入第二批和第三批程式。
bootsect首先要做的工作就是規劃記憶體。
真實模式下,定址最大範圍是1MB(0xFFFFF)。關於setup程式,在bootsect.s中要指定setup程式的扇區數和被載入到的位置(0x90200),此外還要指定啟動扇區(也就是bootsect.s)被BIOS載入的位置(0x07c00)和將要移動到的新位置(0x90000),核心被載入的位置(0x10000)和核心的末尾位置,根檔案系統裝置號(ROOT_DEV=0x306,第二個硬碟第一個分割槽)。
這就是記憶體規劃,可以確保互不重疊。
bootsect的第一步是將自身從0x07c00的位置複製到0x90000的位置。
第二步就是將setup程式載入至記憶體中。
載入bootsect,BIOS需要 int 0x19 這個中斷向量。載入setup,則要藉助BIOS提供的 int 0x13 中斷向量所指向的中斷服務程式——磁碟服務程式。二者不同的是, int 0x19指向的啟動載入服務程式是BIOS執行的,而 int 0x13指向的磁碟服務程式是linux自身的啟動程式碼bootsect執行的。前者只負責把第一扇區的程式碼載入到0x07C00位置,而後者的中斷服務程式則根據設計者的意圖,把指定扇區的程式碼載入到記憶體的指定位置。所以對於 int 0x13 來說,要事先將指定的扇區、載入的記憶體位置等資訊傳遞給中斷服務程式。
複製後的bootsect的起始位置是0x90000,佔用512B,因此,0x90200緊挨著bootsect的尾部,所以bootsect和setup是連在一起的。setup程式佔據四個扇區,這樣加上bootsect,一共載入了五個扇區。bootsect程式碼執行完畢後就開始執行setup。
相關文章
- setup.s 分析—— Linux-0.11 學習筆記(二)Linux筆記
- 0.11之路(三):system模組
- 0.11之路(一):BIOS引導過程iOS
- 【JVM進階之路】十四:類載入器和類載入機制JVM
- 專案經理成長之路-初入職場(二)
- 【JVM進階之路】十三:類載入過程JVM
- koa2 從入門到進階之路 (二)
- Python 爬蟲從入門到進階之路(二)Python爬蟲
- main 函式解析(二)—— Linux-0.11 學習筆記(六)AI函式Linux筆記
- Pytorch系列:(二)資料載入PyTorch
- Linux核心原始碼分析之setup_arch (二)Linux原始碼
- (轉)Inno Setup入門(十二)——Pascal指令碼(1)指令碼
- setup types & setup standard operation(BOM>Rountings)
- MuseMail SetupAI
- Spring——4. Bean的載入(二)SpringBean
- 玩命學JVM(二)—類載入機制JVM
- 一個簡單的載入動畫(二)動畫
- Spark下載與入門(Spark自學二)Spark
- eclipse匯入easypr時需要的jar包,javacpp-0.11.jar,opencv-windows-x86_64.jar,opencv-2.4.11-0.11.jarEclipseJARJavaOpenCVWindows
- React 進階之路(二)React
- 架構之路(二):效能架構
- PWA入門之路
- rabbitmq入坑之路MQ
- veImageX演進之路:iOS高效能圖片載入SDKiOS
- kafka 0.11檢視offset命令Kafka
- Android 基礎之圖片載入(二)Android
- Multidex(二)之 Dex 預載入優化IDE優化
- JVM的藝術—類載入器篇(二)JVM
- Spring原始碼之Bean的載入(二)Spring原始碼Bean
- 程式集載入與反射(二):例項篇反射
- Oracle Audit setupOracle
- SETUP(安裝)
- oracle dataguard setupOracle
- Vue 3 setupVue
- JVM第二篇-類載入子系統JVM
- 利用SQLLDR載入包含LOB物件的資料(二)SQL物件
- 如何建立SQL 調優集(二) 從AWR載入SQL
- 重走JAVA之路(二):面試中的單例模式(從入門到放棄)Java面試單例模式