我目前正在嘗試撰寫一個基本的引導加載程式。引導扇區是使用匯編撰寫的,然后它會加載并呼叫放置在其他扇區中的一些 C 代碼。我還寫了一個簡單的 puts 函式。現在作為下一步,我嘗試實作一些基本的記憶體管理。
我試著寫一個像malloc這樣的函式,它不應該做那么多,只是提供一個空閑的存盤地址。我認為最簡單的方法是只使用一個指向空閑地址的指標并增加函式呼叫時的指標。我唯一的問題是在哪里放置資料。我認為最好使用最高可用地址并遞減指標(這樣只有在 RAM 已滿時才會發生與堆疊的沖突)。但是我如何得到那個地址?
我正在使用以下命令來編譯/運行引導加載程式:
nasm -f elf32 boot.asm -o boot.o
gcc -fno-PIC -ffreestanding -m16 -c main.c -o main.o
ld -melf_i386 --build-id=none -T link.ld main.o boot.o -o kernel.elf
objcopy -O binary kernel.elf kernel.bin
qemu-system-i386 -fda kernel.bin
我沒有找到任何東西,我找到的所有組裝指南都使用底層作業系統(malloc/brk/...)
uj5u.com熱心網友回復:
對于 UEFI,您可以只使用 UEFI 的記憶體管理器來分配/釋放記憶體。
對于 BIOS;你首先假設有可用記憶體從 0x0001000(或者如果你不關心頁面對齊,或者稍微低一點)到 0x0007FFFF,除了你的引導加載程式已經使用的區域。然后通過獲取記憶體映射(例如,從“int 0x15, eax=0xE820”)詢問 BIOS 哪些區域實際上是 RAM。請注意,此記憶體映射是可變大小的(例如,可以是 10 個條目,每個條目 20 個位元組或 200 個位元組,或者可以是 300 個條目,每個條目 24 個位元組或 7200 個位元組,或者......)。
一般來說; 在很早的啟動期間所需的記憶體將被靜態分配(例如
上一篇:如何從檔案中讀取并決議它
