30天自制操作系统(9)
DAY9_内存管理
1.整理源文件
2.内存容量检查
- 在最初启动时,BIOS肯定要检查内存容量,所以只要我们问一问BIOS,就能知道内存容量有多大。但是会很麻烦,我们选择自己动手检查内存。
- 做法:
- 首先,暂时让486以后的CPU的高速缓存(cache)功能无效。
原理:内存检查时,要往内存里随便写入一个值,然后马上读取,来检查读取的值与写入的值是否相等。如果内存连接正常,则写入的值能够记在内存里。如果没连接上,则读出的值肯定是乱七八糟的。如果CPU里加上了缓存,写入和读出的不是内存,而是缓存。结果,所有的内存都“正常”,检查处理不能完成。- 通过HariMain识别3GB范围的内存
- 首先,暂时让486以后的CPU的高速缓存(cache)功能无效。
3.内存容量检查(2)
- 编译器对程序进行了优化,无法识别内存,于是我们选择用汇编来写。
4.挑战内存管理
内存管理是什么,为什么要进行内存管理?
操作系统在工作中,有时需要分配一定大小的内存,用完以后又不再需要,这种事会频繁发生。为了应付这些需求,必须恰当管理好哪些内存可以使用(哪些内存空闲),哪些内存不可以使用(正在使用),这就是内存管理。如果不进行管理,系统会变得一塌糊涂,要么知道哪里可用,要么多个应用程序使用同一地址的内存。
内存管理的方法
- 创建相应数量的区域,用1和0表示该区域是否被使用。但是这种方法的缺点就是,在内存区域很多的情况下,管理表很大。
- 列表管理的方法:从xxx号开始,yyy字节的空间是空着的。优点:占用内存小。大块内存的分配和释放都非常迅速。
缺点:程序管理变复杂了;当可用空间零散的时候,空间管理信息可能会被用完。 - 我们的操作系统使用的方法是,当MEMMAN用完的时候,将小的内存区域舍弃,先不去管它。