1. 虚拟内存介绍
我们知道系统中的所有进程都是共享CPU和主存资源,但这样就会存在一个问题,这么多进程怎么知道主存上的一块内存是已分配给了其它进程还是空闲状态。所有我们需要一种机制来专门负责操作系统上内存资源的管理,而虚拟内存就充当这样一个角色。
虚拟内存是操作系统提供的一种内存管理技术,是对主存的一种抽象。由硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。
虚拟内存提供了三个重要的能力:
- 它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存。
- 它为每个进程提供了一致的地址空间(如每个进程的地址空间都是[0, 4G]),从而简化内存管理。
- 它保护了每个进程的地址空间不被其他进程破坏:1)每个进程只能使用它已分配的内存,否则会出现“段错误”;2)页表为每块虚拟内存指定了访问权限,如果权限不对会出现“保护错误”;3)CPU引用不在主存上的虚拟页会触发缺页中断,中断处理程序会把主存中牺牲也换出到磁盘中。
2. 虚拟寻址
CPU 直接访问内存的方式就是使用物理地址,我们把这种方式称为物理寻址 (physical addressing),然而,现代处理器使用的是一种称为虚拟寻址 (virtual addressing) 的寻址形式,使用虚拟寻址, CPU 通过生成一个虚拟地址 (Virtual Address, VA) 来访问主存,这个虚拟地址在被送到内存之前先转换成适当的物理地址 个虚拟地址转换为物理地址的任务叫做地址翻译 (address translation) 。地址翻译需要 CPU 硬件和操作系统之间的紧密合作。 CPU 芯片上叫做内存管理单元 (Memory Management Unit,MMU) 的专用硬件,利用存放在主存中的查询表来动态翻译虚拟地址,该表的内容由操作系统管理。
3. 虚拟地址空间
虚拟地址和物理地址是一样,是一个非负整数的地址