《操作系统实战 45 讲》笔记 2——内存管理
16 | 划分土地(上):如何划分与组织内存?
在之前的几讲内存的分配都是按照 kmachbsp.mb_nextwtpadr 顺序分配。
面对之后的 MMU 分页模型,这里就需要一个新的数据结构来组织内存空间。
17 | 划分土地(中):如何实现内存页面初始化?
在 13 讲构建了 phymmarge_t 数组形式的内存视图,在 virtualbox 测试环境下运行的信息为:
可用内存: 639 + 1047488 = 1048127KB
预留区域: 1 + 64 + 4 + 4 + 256 = 329KB
硬件使用: 64K
与 1024MB 的理论值少了 56KB(为什么?)
msadsc_t 结构体大小为 40,msadsc_t 结构实例变量本身占用 1048127 / 4 * 40 = 10481270B,约 10MB。
一个疑问:
在标记内存页属于哪个内存区的 merlove_setallmarflgs_onmemarea 方法中,判断条件是内存页的物理地址与内存区的逻辑地址,按照上面的得出的内存视图,没有一个内存页属于 MA_TYPE_PROC。(为什么?)
在 find_continumsa_inbafhlst 方法中,MA_TYPE_PROC 用的是 dm_onemsalst,而不是前讲重点介绍的 dm_mdmlielst[MDIVMER_ARR_LMAX],所以这部分也不会涉及,就不深究了。
另外在 12 讲建立 MMU 页表数据时将物理地址开始的 0 ~ 0x400000000 直接线性映射给了虚拟地址 0xffff800000000000 ~ 0xffff800400000000,所以这样判断好像也没有问题。
19 | 土地不能浪费:如何管理内存对象?
内存页的粒度比较粗,在构建一个细粒度的内存对象数据结构。
一个疑问:
msomdc_t 中表示扩展内存页的 mc_lst 为什么要用个数组呢?从目前来看好像没有必要。
20 | 土地需求扩大与保障:如何表示虚拟内存?
21 | 土地需求扩大与保障:如何分配和释放虚拟内存?
在第 12 讲建立的 MMU 页表是 2MB,这不影响再建立 4KB 的页表,因为这就是个映射关系表,换一下 CR3 寄存器就是新的映射关系。
mmadrsdsc_t 中的 mmudsc_t 就是每个进程的页表:
版权声明: 本文为 InfoQ 作者【袁世超】的原创文章。
原文链接:【http://xie.infoq.cn/article/b1414b41835f57c4b375ffc67】。文章转载请联系作者。
评论