我正在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