我正在C和程序集中開發一個簡單的小玩具操作系統作爲實驗,但我開始擔心自己對系統內存缺乏瞭解。簡單的玩具操作系統內存管理
我已經能夠編譯內核,在Bochs的運行(通過GRUB加載),並將它打印「你好,世界!」現在我試圖做一個簡單的內存管理器,以便我可以開始嘗試其他的東西。
我發現了一些資源上的內存管理,但他們真的沒有足夠的代碼熄滅的(在我的理解這個概念,但我是在爲實際知道如何實現它的虧損)。
我嘗試了一些或多或少複雜的策略,然後用一個荒謬簡單的策略(只是在內存中保留一個偏移量並將其增加分配對象的大小)解決,直到需要更改。沒有分割控制,保護或其他任何東西。
所以我想知道在哪裏可以找到更多的信息,當我需要一個更強大的經理。我還想了解更多關於分頁,分割和其他相關的事情。到目前爲止,我還沒有處理過分頁,但是我已經在操作系統開發網站中看到過這種情況,所以我猜測我遲早會面對它。
我也看到了有關某種形式的間接指針,其中應用程序認爲是由內存管理器重定向到它的真實位置的指針。對於我來說,這是相當方便的,但我相信,如果我想嘗試虛擬內存或碎片整理,這似乎很重要。
而且,我應該把我的記憶抵消?我不知道最好的地方是什麼,所以我隨機選擇了0x1000
,我相信稍後當我覆蓋我的內核或其他東西時它會回來。
我也想知道我應該期待的性能代價,什麼內存管理結構的實際管理存儲一個合理的比例應該是(例如,用於分配和釋放一個大O值)。
當然,隨便回答這些問題的一個子集。任何反饋非常感謝!
在內核是一個選項之後放置堆,但是您還需要確定您正在創建的內核是否將以真實或保護模式運行。如果您處於Real模式,則只能訪問1MB的內存,處於受保護狀態時您可以訪問完整的32位內存空間。 – linuxuser27 2011-03-17 00:33:28
謝謝! osdev wiki實際上就是我開始的。而且看起來好友好。這聽起來像個好主意,但是你會知道如何將變量放在內核的末尾嗎?也許寫一個C文件,並修改我的鏈接文件,以確保該文件被放置在最後? – rovaughn 2011-03-17 00:34:10
@ linuxuser27 - 我知道*關於真實和受保護的模式,但我沒有意識到會導致這種差異。這是內存限制,因爲實模式不會爲您做分頁嗎?有沒有一種方法可以告訴我,比如,你會碰巧知道GRUB是否加載到真實或保護模式中? – rovaughn 2011-03-17 00:36:52