计算机系统中的RAM资源有限,由系统上所有运行的进程竞争共享。当系统运行多个应用程序时,所有进程分配的内存总量会超过系统上RAM的数量,这很正常。 操作系统支持虚拟内存,这样进程就可以分配和使用比系统上安装的RAM数量还要多的内存。也就是说,进程的地址空间不受物理RAM数量的限制。有了虚拟内存,操作系统便可以使用次级存储器(如硬盘)上的后备存储空间,保存无法放到RAM中的进程的地址空间。然而,CPU仍然只能访问RAM中的地址,因此,操作系统必须在磁盘后备存储空间和RAM之间交换数据,以便能在进程运行时访问内存。 在特定时刻,进程可能只需要使用分配的总内存的一小部分,我们称之为进程的工作集。只要操作系统将这一工作集保存在RAM中,就可以忽略虚拟内存对执行速度的影响。工作集是一个动态实体,根据进程运行时当前使用的数据而变化。如果进程访问RAM外的内存地址,则需要从磁盘的后备存储中读取对应的数据,放入RAM中。如果当前没有空闲的RAM用于数据载入,就需要预先将RAM中现存的一些数据换出并保存到磁盘,释放物理RAM。 虚拟内存由操作系统处理。用户进程并不参与这一过程的实现,它不用关心地址空间是否在RAM中,也不用关心访问的数据是否转到了主存中。 使用虚拟内存的后果是,进程使用的地址与物理RAM中的地址并不对应。只要想一想进程地址空间比系统的RAM大,你就明白了。因此,需要将进程读取/写入的地址从进程的虚拟地址空间转换成物理RAM地址。由于访问每个内存都需要进行地址转换,为了减少对执行速度的影响,这些工作全由CPU执行。 操作系统通常使用一种称为“分页”的方案,来实现虚拟地址到物理地址的转换。使用分页内存方案时,物理内存被划分成固定长度的块,称为页帧。大多数操作系统,包括Mac OS X和iOS,使用的帧长度均为4096字节。类似地,每个进程的虚拟地址空间也都被划分成固定长度的块,称之为页。每页的字节数与每帧的字节数始终相同。这样便可以将进程中的每页映射到物理内存中的一个帧里,如图1-5所示。 虚拟内存的另一个优点是,进程虚拟地址空间中页码连续的缓冲区,可以分布到物理内存中多个不连续的帧里,如图1-5所示。这就解决了物理内存的碎片问题,因为一个进程分配的内存可以分布到多个物理内存段,而且不受最长的连续物理页帧组的大小限制。 作为启动进程的一部分,操作系统会创建一个表,保存进程的虚拟地址空间及其对应的物理地址之间的映射关系,这个表称为“分页表”。从概念上讲,页表项对应进程地址空间中的每页,以及每页对应的物理页帧地址。页表项还包含访问控制位和一个比特位,CPU根据前者来判断页是否只读,根据后者来判断页是在内存中还是已经换到后备存储器中。图1-6描述了CPU将虚拟地址转换为物理地址时需要执行的步骤。 如果CPU无法将进程访问的地址转换为物理地址,就会发生错误,我们称之为“缺页异常”。缺页异常运行在特权执行层,由操作系统处理。操作系统确定异常是否由地址不在进程地址空间而引起,如果是,则说明进程试图访问无效的地址,因而会被终止。如果是因为包含该地址的页已经换出到后备存储器而发生异常,操作系统将会执行一下操作。 (1) 分配一个物理内存中的帧,保存请求页;如果内存中没有空闲的帧可用,则将现有的帧换出到后备存储器中,腾出空间。 (2) 将请求页从后备存储器读取到内存中。 (3) 更新进程的页表,以便将请求的页映射到分配的帧。 (4) 将控制权返回给调用进程。 调用进程重新执行引起异常的指令,但这次,CPU可以找到页表中请求页的映射,此时指令成功完成。 对内核开发者来说,理解虚拟内存和分页必不可少。尽管内核代表用户进程处理请求,但它还有自己的地址空间,因此常常需要复制参数或将其从进程的地址空间映射到内核的地址空间。此外,直接同硬件设备交互的内核代码常常需要获得内存的物理地址。就拿处理用户进程读请求的磁盘驱动程序来说吧。从磁盘读取的数据将保存到一个缓冲区中,该缓冲区位于进程地址空间。与CPU一样,驱动程序控制的硬件只可以写入主内存的地址,而不是后备存储器中的地址。因此,为了处理该读请求,驱动程序需要确保用户缓冲区换入到主内存,并在整个读操作期间一直位于主内存中。最后,驱动程序需要将目标缓冲区的地址从虚拟内存地址转换为硬件可以访问的物理地址。第6章将详细讲述这部分内容。 尽管iOS为每个进程都提供了一个页表,但它并不支持后备存储器。乍一看,也许你会认为这完全背离了分页的初衷,但这样其实有两个非常重要的目的。第一,让每个进程可以完全访问内存。第二,避免了由物理内存碎片造成的问题。
OS X与iOS内核编程——1.5 虚拟内存
书名: OS X与iOS内核编程
作者:
出版社: 人民邮电出版社
原作名: OS X and iOS kernel programming
译者: 贾 伟 | Douglas Clarke
出版年: 2013-6
页数: 400
定价: 89.00
装帧: 平装
ISBN: 9787115318244