ucore lab1實驗筆記
阿新 • • 發佈:2018-05-19
閱讀 bio tool 一個 中斷 練習 時鐘 12個 調用棧
實驗目的:
操作系統是一個軟件,也需要通過某種機制加載並運行它。在這裏我們將通過另外一個更加簡單的軟件-bootloader來完成這些工作。為此,我們需要完成一個能夠切換到x86的保護模式並顯示字符的bootloader,為啟動操作系統ucore做準備。lab1提供了一個非常小的bootloader和ucore OS,整個bootloader執行代碼小於512個字節,這樣才能放到硬盤的主引導扇區中。通過分析和實現這個bootloader和ucore OS,讀者可以了解到:
-
計算機原理
- CPU的編址與尋址: 基於分段機制的內存管理
- CPU的中斷機制
- 外設:串口/並口/CGA,時鐘,硬盤
-
Bootloader軟件
- 編譯運行bootloader的過程
- 調試bootloader的方法
- PC啟動bootloader的過程
- ELF執行文件的格式和加載
- 外設訪問:讀硬盤,在CGA上顯示字符串
-
ucore OS軟件
- 編譯運行ucore OS的過程
- ucore OS的啟動過程
- 調試ucore OS的方法
- 函數調用關系:在匯編級了解函數調用棧的結構和處理過程
- 中斷管理:與軟件相關的中斷處理
- 外設管理:時鐘
練習1:理解通過make生成執行文件的過程。
- 操作系統鏡像文件ucore.img是如何一步一步生成的?
- 一個被系統認為是符合規範的硬盤主引導扇區的特征是什麽?
$ make "V="
閱讀Makefile:
$ less Makefile
主引導扇區的特征,看這裏的代碼:
$ less tools/sign.c
練習2:使用qemu執行並調試lab1中的軟件。
- 從CPU加電後執行的第一條指令開始,單步跟蹤BIOS的執行。
- 在初始化位置0x7c00設置實地址斷點,測試斷點正常。
- 從0x7c00開始跟蹤代碼運行,將單步跟蹤反匯編得到的代碼與bootasm.S和 bootblock.asm進行比較。
- 自己找一個bootloader或內核中的代碼位置,設置斷點並進行測試。
$ cd labcodes_answer/lab1_result/ $ make lab1-mon
ucore lab1實驗筆記