1、什么是虚拟内存?
一个进程是和其他进程共享CPU和主存的,但是主存的空间是有限的,当同时运行多个进程时,就会使内存不够用。这个时候,我们就引入了虚拟内存的概念,它是一种对主存的抽象的计算机内存管理技术。对于32位的Linux操作系统,系统为每个进程分配4G的虚拟内存。如下图所示。
2、虚拟寻址
使用虚拟寻址,CPU通过生成一个虚拟地址来访问主存,这个虚拟地址在被送到内存之前会被内存管理单元(MMU)转换成合适的物理地址,从而找到目标地址。具体过程如下图。
3、进程中虚拟内存数据结构
4、作为缓冲工具的虚拟内存
概念上组织成一个由存放那个在磁盘上的N个连续的字节大小的单元组成的数组。每个字节都有唯一的虚拟地址,作为到数组的索引。虚拟内存系统通过将虚拟内存分割为虚拟页的大小固定的块来处理这个问题。对于Linux系统,这个页的大小一般为4KB。
<1>页表
在内存中,存放这一个叫做页表的数据结构,通过这个页表,可以将虚拟页映射到物理页。每次MMU将一个虚拟地址转换成物理地址时,都会读取页表。操作系统负责维护页表的内容,以及自爱磁盘与DRAM之间来回传送