飞腾CPU体系结构之虚拟地址

飞腾CPU体系结构之虚拟地址

1. 基本概念

  1. 虚拟地址:程序运行时指令和数据对应的地址。
  2. 虚拟地址空间:一个进程运行时指令和数据能访问到的虚拟地址范围。

注意事项:

  1. 每个进程拥有自己的虚拟地址空间,进程的虚拟地址空间一般分为内核态和用户态两个范围。
  2. 进程内的所有线程共享该进程的虚拟地址空间。
  3. 进程和进程之间可以共享虚拟地址空间
  1. 内核态范围:所有进程共享虚拟地址空间的内核态范围全部;
  2. 用户态范围:

1.部分进程共享虚拟地址空间的用户态范围中的共享库部分;
2. 两个进程可以通过System V或POSIX等共享内存方式,获得用户态范围中的一部分。

2. 飞腾CPU虚拟地址空间

飞腾CPU硬件上支持最大虚拟地址宽度为48位,Linux操作系统内核可以支持36/39/42/47/48/52位虚拟地址,其中飞腾暂不支持52位虚拟地址。

在这里插入图片描述
整个64位虚拟地址空间分为三部分:内核态范围、地址空洞、用户态范围。其中内核态范围和用户态范围采用各自的页表,当进程上下文切换时,仅仅切换用户态页表,而内核态页表不动。

3. 虚拟页

飞腾CPU按照固定的长度将虚拟地址空间进行划分,每个固定长度的虚拟地址范围就是一个虚拟页。虚拟页有两个特点:

  1. 虚拟页内地址单元的所有访问属性都一致;
  2. 虚拟页内地址单元对于相同的物理页帧。

查看虚拟内存页长度

getconf PAGE_SIZE

地址范围的访问

飞腾CPU对虚拟地址空间的访问受限于CPU的权限级

  1. 当飞腾CPU处于EL1权限(操作系统内核)时,飞腾CPU可以取指令的地址范围不受限制(除了地址空洞),读写数据的地址范围也不受限制(除了地址空洞)。
  2. 当飞腾CPU处于EL0权限(应用程序)时,飞腾CPU可以取指令的地址范围受限于用户态范围,读写数据的地址范围也受限于用户态范围。

当飞腾CPU处于EL0权限时,飞腾CPU超出用户态范围访问时,飞腾CPU会触发地址异常。

注意:地址范围访问过程忽略了地址的页属性。

页属性

页属性是对访问操作类型进行限制的,页属性包括执行、读、写、缓冲操作、写合并操作、对齐要求等等。

猜你喜欢

转载自blog.csdn.net/lsshao/article/details/117219550