1.虚拟存储器
作用
1.为了给每个进程提供一致的地址空间(都从0开始),方便内存管理。
2.保护每个进程的数据不会因为其它进程而被破坏。
基于以上的原因,有了虚拟存储器,虚拟存储器是在硬盘上的一个文件,例如我们申请20G内存,其实只是在硬盘上创建了一个20g的文件,内存中只会有我们频繁读写的数据,换句话说内存是这个文件的缓存。
这是一个32操作系统的虚拟存储器图
结构
为了对所有进程一致,下方是低地址从0开始。
堆指针从低地址为向高地址为移动,通过malloc申请内存,通过free释放。一般适合零散内存的申请。
映射区域可以把外部的文件映射到虚拟存储器中,可以实现不同进程的内存共享,但调用成本高,适合大块内存的申请。
管理
1.硬盘到物理内存
内存管理
其实虚拟存储器的内存管理还是要依赖cpu的支持,在上一篇文章中我们提到,cpu为了实现虚拟地址到物理地址的映射,提供了mmu单元,支持多级页表,这就是他支持页式管理的基础。现在高端的cpu一般提供3种内存管理方式,页式管理、段式管理、段页式管理。
页式管理的内存页大小固定(4k),管理简单、没有碎片,但大小不能兼容程序需求。
段式管理大小不固定,可以保证程序一次需要的数据