分类:
2006-09-15 12:26:06
虚拟存储器(1)
1.虚拟存储器的主要作用是什么?
虚拟存储器有三个重要的能力:
1) 将主存看成存储在磁盘上地址空间的高速缓存,根据需要来回传递数据,高效地使用了主存。页、MMU、缺页
2) 为每个进程提供一直的地址空间,简化存储器管理。进程都有统一的虚拟地址
3) 保护每个进程的地址空间不被其他进程破坏。设置保护位
2. 虚拟存储器的基本思想是什么?
允许每个数据对象(字节)有多个独立的地址,其中每个地址都选自一个不同的地址空间。
例如,主存中每一个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。
3.虚拟页面(virtual page,VP)
VM系统将虚拟存储器分割位大小固定的块,这些块叫做虚拟页面。
在任何时刻,虚拟页面集合都划分为3个不相交的子集:
未分配的:VM系统未分配的页,未与任何数据相关联,不占任何磁盘空间。
缓存的:当前存储在物理存储器中的已分配页。
未缓存的:未缓存在物理存储器中的已分配页。
4.对几个相关概念的认识和它们所在位置
页表(page table):一个存放在物理存储器(DRAM)的数据结构,页表(DRAM上)的主要作用是将虚拟页(磁盘上)映射到物理页(DRAM上)。页表由OS来维护。虚拟存储器是位于磁盘上的。
页表条目(page table entry,PTE):页表是由PTE组成的数组。
MMU(memory management unit,存储器管理单元):负责地址翻译的专用硬件,在CPU上。
5.虚拟存储器作为缓存的工具
虚拟存储器作为对主存的一个抽象,在主存中自动缓存最近使用的存放在磁盘上的虚拟地址空间的内容。通过MMU硬件,将虚拟地址翻译成物理地址,并通过交换(swapping)或叫做页面调度(paging)来处理缺页(page fault)问题,达到了将主存作为磁盘的缓存的目的。
6.虚拟存储器作为存储器管理的工具
首先要明白:OS为每个进程提供了一个独立的页表,也就是说,每个进程都有个独立的虚拟地址空间。
1)简化链接
每个进程采用相同的存储器映像,简化了链接器的设计。
2)简化共享
多个虚拟页面可以映射到一个共享物理页面上。OS通过将不同进程中适当的虚拟页面映射到相同的物理页面,从而安排多个进程共享这部分代码的一个拷贝,而不是在每个进程中都包括单独的内核和C标准库的拷贝。简化了共享。
3)简化存储器分配
页表的工作方式,使OS在分配页面时没必要分配k个连续的物理存储器页面,而是随即分配。
4) 简化加载
加载可执行文件和已共享目标文件到存储器的时候,Linux加载程序分配一个从地址0x08048000开始的连续虚拟页面区域,将它们标识无效(即未缓存)的,并将它们的页表条目指向目标文件中的适当位置。Loader并不真正地从磁盘中拷贝任何数据到存储器中,而是在需要时再由虚拟存储器系统自动的将数据从磁盘调入到存储器。
按需页面调度(demand paging)
7.虚拟存储器作为存储器保护的工具
通过设置保护位(超级用户模式、读、写等)的方式来保护每个进程的虚拟地址空间。