我正在用 C 和汇编开发一个简单的小玩具操作系统作为实验,但我开始担心自己对系统内存缺乏了解。
我已经能够编译内核,在 Bochs(由 GRUB 加载)中运行它,并让它打印“Hello, world!” 现在我开始尝试制作一个简单的内存管理器,这样我就可以开始尝试其他东西了。
我找到了一些关于内存管理的资源,但他们并没有足够的代码可以关闭(因为我理解了这个概念,但我不知道如何实现它)。
我尝试了一些或多或少复杂的策略,然后选择了一个非常简单的策略(只需在内存中保留一个偏移量并根据分配对象的大小增加它),直到需要更改。还没有碎片控制、保护或任何东西。
所以我想知道当我确实需要一个更强大的经理时,我可以在哪里找到更多信息。而且我还想了解更多关于分页、分段和其他相关内容的信息。到目前为止,我还没有处理过分页,但我在操作系统开发站点中经常提到它,所以我猜我迟早会处理它。
我还阅读了某种形式的间接指针,其中应用程序持有一个由内存管理器重定向到其实际位置的指针。我敢肯定,这对我来说还有很长的路要走,但如果我想尝试虚拟内存或碎片整理似乎很重要。
而且,我应该把我的记忆偏移量放在哪里?我不知道最好的位置是什么,所以我只是随机选择了0x1000
,而且我确信稍后当我覆盖我的内核或其他东西时它会回到我身边。
我还想知道在性能方面我应该期望什么(例如分配和释放的大 O 值)以及内存管理结构与实际托管内存的合理比率是多少。
当然,请随意回答这些问题的一部分。非常感谢任何反馈!