发布于 

30天自制操作系统(9)

DAY9_内存管理

1.整理源文件

d9.1

2.内存容量检查

  • 在最初启动时,BIOS肯定要检查内存容量,所以只要我们问一问BIOS,就能知道内存容量有多大。但是会很麻烦,我们选择自己动手检查内存。
  • 做法:
    • 首先,暂时让486以后的CPU的高速缓存(cache)功能无效。
      原理:内存检查时,要往内存里随便写入一个值,然后马上读取,来检查读取的值与写入的值是否相等。如果内存连接正常,则写入的值能够记在内存里。如果没连接上,则读出的值肯定是乱七八糟的。如果CPU里加上了缓存,写入和读出的不是内存,而是缓存。结果,所有的内存都“正常”,检查处理不能完成。
      • 通过HariMain识别3GB范围的内存

3.内存容量检查(2)

  • 编译器对程序进行了优化,无法识别内存,于是我们选择用汇编来写。

4.挑战内存管理

内存管理是什么,为什么要进行内存管理?

操作系统在工作中,有时需要分配一定大小的内存,用完以后又不再需要,这种事会频繁发生。为了应付这些需求,必须恰当管理好哪些内存可以使用(哪些内存空闲),哪些内存不可以使用(正在使用),这就是内存管理。如果不进行管理,系统会变得一塌糊涂,要么知道哪里可用,要么多个应用程序使用同一地址的内存。

内存管理的方法

  • 创建相应数量的区域,用1和0表示该区域是否被使用。但是这种方法的缺点就是,在内存区域很多的情况下,管理表很大。
  • 列表管理的方法:从xxx号开始,yyy字节的空间是空着的。优点:占用内存小。大块内存的分配和释放都非常迅速。
    缺点:程序管理变复杂了;当可用空间零散的时候,空间管理信息可能会被用完。
  • 我们的操作系统使用的方法是,当MEMMAN用完的时候,将小的内存区域舍弃,先不去管它。