已完成:
- 拷贝旧内存区域的内容
- 读、写重映射的新内存区域
待解决问题:
由于是通过拷贝旧内存区域的页表项到新内存区域,导致两块内存区域映射到同一块物理区域,造成内存泄漏问题
已完成:
待解决问题:
由于是通过拷贝旧内存区域的页表项到新内存区域,导致两块内存区域映射到同一块物理区域,造成内存泄漏问题
遇到个很奇怪的点,对于同一块内存区域,如果是用mmap映射的,就不会报already mapped
但是如果是通过mremap重映射的话(mremap重映射新的内存区域同样调用的是map_anonymous方法),就会出问题
这个传入的size是不是内核里面得按页面大小对齐一下。
有的,检验完参数之后就对齐了
这里我好像搞错了,因为如果没有FIXED标志的话,这里的new_vaddr实际上是0。所以实际上不会调用这里的unmap,而是直接由map_anonymous返回一块空闲的内存区域(不指定起始地址),但目前返回的是一块被映射过的内存区域。
感觉有可能是VMA的合并、分割出了bug,可以尝试打印一下当前的VMA的状态看看?
已经merge: