虚拟内存管理
分页管理
将用户程序的地址空间分为若干个固定大小的区域,称为“页面”。典型的页面大小为 1KB。相应地,也将内存空间分为若干个物理块,页和块的大小相同。然后通过映射表,把连续的虚拟内存空间,映射到离散的物理内存空间。
两级页表:针对难于找到大的连续的内存空间来存放页表的问题,可利用将页表进行分页的方法,使每个页面的大小与内存物理块的大小,并为它们进行编号,然后离散地将各个页面存放在不同的物理块中。
swap
把内存中暂时不能运行的进程或者暂时不用的程序或数据换到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序或数据换入内存。
内存映射(mmap)
一文说清mmap内存映射底层原理
把磁盘文件直接映射到内存,在内存中修改这部分映射到内存的文件时,操作系统会直接将修改内容同步到磁盘上。避免了将文件内容从用户态拷贝到内核态到性能损失。
操作mmap返回指针的流程示意图:
- 使用mmap映射物理内存到进程的虚拟内存
- 会自动更新页表,添加新的虚拟内存到物理内存的映射页表项
- 当操作mmap返回的指针时,CPU能看到的是进程的虚拟地址,CPU获取到虚拟地址
- MMU通过该进程的用户空间页表查询到该虚拟地址对应的真实物理地址,然后告诉给CPU
- CPU无需切换到内核态,直接操作对应的物理地址上的数据
容器和CPU那些事儿