自己動手從零寫桌面操作系統GrapeOS系列教程——11.MBR介紹

學習操作系統原理最好的方法是自己寫一個簡單的操作系統。


前面我們介紹過電腦的啓動過程:

上電->BIOS->MBR(boot)->loader->kernel->交互界面(圖形/命令行)

本講我們要介紹的是MBR(Master Boot Record,主引導記錄)。在電腦中對磁盤的讀寫是按扇區爲基本單位的,一般每個扇區爲512個字節。也就是說每讀一次磁盤,讀取的字節數是512字節的整數倍。同樣每寫一次磁盤,寫入的字節數也是512字節的整數倍。MBR是磁盤的第一個扇區,又叫做主引導扇區,特點是最後2個字節的內容必須是0x55和0xAA。

下面我們來做幾個實驗來加深對MBR的瞭解。

1.不加載虛擬磁盤啓動QEMU

Windows鍵+R鍵打開運行窗口,輸入cmd並回車打開命令行窗口。

在命令行中輸入qemu-system-i386並回車:

此時會打開QEMU窗口:

注意最後會輸出一行話“No bootable device.”,意思是沒有可引導啓動的設備。

2.創建空虛擬硬盤

在CentOS中我們輸入如下一行命令:

dd if=/dev/zero of=/media/VMShare/GrapeOS.img bs=1M count=4

dd命令簡單來說是一個複製命令。參數if是指input file輸入文件,參數of是指output file輸出文件,意思就是將輸入文件複製到輸出文件中。這裏的輸入文件/dev/zero是Linux中的一個特殊文件,它可以提供無限的零。參數bs表示一次複製多少字節數據,也就是一個數據塊的大小,count表示複製多少個塊。bs乘以count表示總共複製多少數據,我們這裏總共複製1M✖4=4M數據。運行上面這行命令的結果就是生成了一個4M大小的文件GrapeOS.img,該文件中每個字節都是0。截圖如下:

由於GrapeOS.img是在Windows和CentOS的共享文件夾中,所以我們在Windows也能看到:

每個字節都是0的文件也叫空白文件,我們下面用hexdump命令來驗證一下:

hexdump GrapeOS.img -C

從上面的截圖可以看到GrapeOS.img這個文件中每個字節都是0。

3.加載空虛擬硬盤啓動QEMU

在cmd命令行中輸入如下命令:

qemu-system-i386 d:\GrapeOS\VMShare\GrapeOS.img

上面這行命令是爲QEMU指定虛擬硬盤文件並啓動QEMU。截圖如下:

從上面截圖可以看到,雖然給QEMU指定了虛擬硬盤,但最後的提示還是“No bootable device.”

4.將虛擬硬盤的第一個扇區變爲MBR

我們在Lesson11文件夾下新建文件mbr.asm,並輸入如下代碼:

;生成一個空的MBR
times 510 db 0 ;前510個字節全爲0
db 0x55,0xaa   ;最後兩個字節是0x55和0xaa。

在VSCode中的截圖如下:

使用nasm彙編器彙編:

nasm mbr.asm -o mbr.bin

從上面的截圖我們看到,生成了一個叫mbr.bin的文件,大小爲512字節。下面來看一下mbr.bin文件中的數據:

hexdump mbr.bin -C

從上圖可以看到mbr.bin文件中共512字節,除最後2個字節是0x55和0xaa,其它字節都是0。
下面我們將mbr.bin寫入到虛擬硬盤文件的頭512個字節中:

dd conv=notrunc if=mbr.bin of=/media/VMShare/GrapeOS.img

上面這裏命令中多了個參數conv=notrunc,表示不截斷。如果不寫該參數,執行完命令,GrapeOS.img就只剩512字節了。
執行完上面這行命令,我們驗證一下是否寫入成功:

hexdump /media/VMShare/GrapeOS.img -C

從上面截圖可以看到總共4MB的文件,其中第511個字節爲0x55,第512個字節0xaa,其它字節都爲0。此時虛擬硬盤GrapeOS.img中第一個扇區已經是MBR了。

5.加載帶MBR的虛擬硬盤啓動QEMU

在cmd命令行中輸入和剛纔一樣的命令:

qemu-system-i386 d:\GrapeOS\VMShare\GrapeOS.img

截圖如下:

從上面的截圖中可以看到,在QEMU中的提示信息已經和剛纔不一樣了。最後一行顯示的是“Booting from Hard Disk...”,意思是從硬盤啓動中,也就是說程序已經從BIOS跳轉到MBR了。

通過上面的實驗我們證明只要磁盤第一個扇區中的最後兩個字節是0x55和0xaa,BIOS就會認爲該扇區是一個有效的MBR,同時認爲該磁盤是一個有效的啓動項。
如果大家的實驗做到這裏會發現CPU佔用率高,如果是筆記本電腦能聽到CPU風扇呼呼的轉。這是因爲CPU跑飛了,我們後面會解決這個問題。

本講小結:BIOS將電腦的控制權交棒給了MBR,我們可以在MBR中寫程序,MBR是我們程序的起點,之後電腦的運行都由我們來控制。


本講對應的視頻版地址:https://www.bilibili.com/video/BV1pe4y1w7Co/
GrapeOS操作系統交流QQ羣:643474045

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章