Vous êtes sur la page 1sur 3

 Address space,与某段程序(片段)相关的地址空间

 Page, 一块固定大小的内存空间,通常表示虚拟内存;
 Page frame,一块固定大小的物理内存空间,用于承载虚拟内存 page;
 Page table,用于实现虚拟内存到物理的映射,也就是寻址,当代码访问
某块虚拟内存地址的时候,操作系统和硬件结构能自动根据这个对应表找到真
正读写保存在物理内存(甚至磁盘)上的数据
 Paging space,交换区,这是一块磁盘空间,目的是为了实现扩展物理内
存,使程序代码可以使用超过物理内存大小的虚拟内存
 Physical/real memory,真正的可使用的物理内存

硬件 CPU、物理内存架构及操作系统设计联合起来实现了虚拟内存到物理内
存的映射,映射有多种方案,并且在程序运行过程中可以即时转换,就是在实
模式与虚拟模式内存访问之间进行转换。

单一映射模式下的虚拟内存访问>所示,telnetd 程序中内代码访问
0x2003_1000(虚拟)内存地址与 vi 程序中访问 0x2003_1000(虚拟)内存地
址,尽管地址相同,但其实对应于不同的物理内存地址,这是进行了转换的一
个例子。程序可以运行于两种模式之一,通常能运行于虚拟模式的程序不加修改
也可以运行于实模式,既关闭了内存访问的转换功能,而反之则不可以。程序运
行时具体在哪一种模式,根据程序代码、当时调用的父进程用户和操作系统状态
都有关系。

 Real mode,实模式,关闭了内存地址转换功能(这是硬件实现的),此
时 CPU 执行的指令的地址都是真实的物理地址。
 Virtual mode,虚拟模式,打开了硬件地址转换功能,CPU 执行的指令的
地址都是虚拟地址,在执行的过程中,CPU 自动根据映射表的设定完成虚拟地
址到物理地址的转换。
 MSR,Machine state register 机器状态寄存器(各种非计算用寄存器都可
以被称为 MSR)
 MSR_IR,MSR instruction relocation 指令重定位技术,IAR 寄存器里面
的地址作为虚拟地址进行寻址
 MSR_DR,MSR data relocation 数据重定位技术, load/stores 指令所要处
理的数据地址是虚拟地址
AIX 支持两级的虚拟地址转换,使用三个独立的地址空间,这三个地址空间之
间用两级虚拟地址转换的方式进行转换,如<图 0-2 地址空间地址转换>所示。

图 0-2 地址空间地址转换
 Effective address space 有效地址空间,每个进程都有自己独立的有效地
址空间,内核同样如此。当 CPU 打开地址转换功能的时候,生成/使用的地址都
是自己进程所在的有效地址空间内的地址。当内核进程运行于 CPU 关闭了地址
转换功能(实模式)的时候,也可以使用有效地址空间内的地址。在<图 0-1 单
一映射模式下的虚拟内存访问>中 telnetd 和 vi 程序所使用的 0x2003_1000 之类
的地址就是有效地址空间内的地址,此地址也仅对程序进程自己有意义,不同
进程的有效地址空间内的地址之间是没有任何联系的,尽管他们数值可能相同。
 Virtual address space,虚拟地址空间。实际上,<图 0-1>只是示意图,
AIX 不能直接将有效地址空间内的地址映射到实地址空间,而是直接映射到全
局虚拟地址空间(System-wide Virtual Address Space)。AIX 维护着一个全局使用的
虚拟地址空间,就是全 AIX 操作系统内的所有进程都使用同一个虚拟地址空间。

图 0-3 有效地址空间到虚拟地址空间的映射

 Real/logical address space,实/物理[1]地址空间。此空间的地址真正定位到


物理内存位置,其大小为本机(分区)最大可访问的物理内存大小。当内核运行
于禁止地址转换模式(实)模式的时候,可以使用此地址空间(此时的地址可
以有有效空间地址,也可以有实空间地址,具体使用哪种地址,根据当前其它
寄存器代码设定)。虚拟地址空间的地址可以映射为实空间的地址。完整的地址
映射关系如<图 0-4 有效–虚拟–实地址映射>所示。我们可以看到,最终有效地
址还是映射到了物理地址之上,只不过中间多经历了一级虚拟地址映射的步骤
罢了。之所以有虚拟地址映射是因为 AIX 还要引入虚拟物理内存(交换区)的
概念。

图 0-4 有效–虚拟–实地址映射

 Real Page Number (RPN),一段实(物理)地址区域。

从有效地址空间到虚拟地址空间的映射
Segmentation 段,POWER 架构的 CPU 使用内存段作为内存分配单位。在虚拟地址空间,一
个内存段是 256MB。内存段是逻辑上连续的一组内存地址,内部空间被更细分为 page
(页)。因此全局虚拟空间被分为很多个内存段。
VSID Virtual Segment Identifier 虚拟段地址,每个段有唯一的 VSID 进行标记,此标记用来
进行虚拟段寻址。
ESID Effective Segment Identifier 有效段地址,有效地址空间也会被切分成段,每个段也有
一个唯一的 ESID 进行标记。虚拟内的地址都会对应到某(若干)个段内的虚拟地址。一个
32 位的有效地址空间最多可对应于 16 个虚拟段;64 位的有效空间则最多对应于 236 个虚
拟段;每个有效段对应唯一一个虚拟段,反之亦然, AIX 操作系统维护着一个 ESID<-
>VSID 的对应表。

ESID 段内地址范围
0x0 0x0000_0000 – 0x0FFF_FFFF
0x1 0x1000_0000 – 0x1FFF_FFFF
0x2 0x2000_0000 – 0x2FFF_FFFF
0x3 0x3000_0000 – 0x3FFF_FFFF
0x4 0x4000_0000 – 0x4FFF_FFFF
0x5 0x5000_0000 – 0x5FFF_FFFF
0x6 0x6000_0000 – 0x6FFF_FFFF
0x7 0x7000_0000 – 0x7FFF_FFFF
0x8 0x8000_0000 – 0x8FFF_FFFF
0x9 0x9000_0000 – 0x9FFF_FFFF
0xA 0xA000_0000 – 0xAFFF_FFFF
0xB 0xB000_0000 – 0xBFFF_FFFF
0xC 0xC000_0000 – 0xCFFF_FFFF
0xD 0xD000_0000 – 0xDFFF_FFFF
0xE 0xE000_0000 – 0xEFFF_FFFF
0xF 0xF000_0000 – 0xFFFF_FFFF
表 0-1 ESID 标记与地址范围对应关系表

段内的数据根据其用途被赋予几种不同的名称,例如工作段、永久数据段等,其含义如下:
Working storage segment 工作段、计算段(内存),保存变化的数据,可以被交换到交换区,
例如用户进程的变量数据、堆栈、某些内核进程的数据、堆栈等;
Persistent storage segment: 永久段(内存),用于保存 JFS 文件系统的(缓存)数据;
Client storage segment: 用户(文件)段(内存),用于保存 JFS2, NFS, Veritas 等文件系统
的(缓存)数据;
Mapping segment: 共享段,用于 mmap()函数调用访问的内存;
RMMAP segment: IO(DMA)段,用于设备驱动的 I/O 使用;
SCB segment control block:用于 AIX 管理各个内存段的一小块内存数据;

Vous aimerez peut-être aussi