飞腾CPU体系结构之虚拟地址
飞腾CPU体系结构之虚拟地址
1. 基本概念
- 虚拟地址:程序运行时指令和数据对应的地址。
- 虚拟地址空间:一个进程运行时指令和数据能访问到的虚拟地址范围。
注意事项:
- 每个进程拥有自己的虚拟地址空间,进程的虚拟地址空间一般分为内核态和用户态两个范围。
- 进程内的所有线程共享该进程的虚拟地址空间。
- 进程和进程之间可以共享虚拟地址空间
- 内核态范围:所有进程共享虚拟地址空间的内核态范围全部;
- 用户态范围:
1.部分进程共享虚拟地址空间的用户态范围中的共享库部分;
2. 两个进程可以通过System V或POSIX等共享内存方式,获得用户态范围中的一部分。
2. 飞腾CPU虚拟地址空间
飞腾CPU硬件上支持最大虚拟地址宽度为48位,Linux操作系统内核可以支持36/39/42/47/48/52位虚拟地址,其中飞腾暂不支持52位虚拟地址。
整个64位虚拟地址空间分为三部分:内核态范围、地址空洞、用户态范围。其中内核态范围和用户态范围采用各自的页表,当进程上下文切换时,仅仅切换用户态页表,而内核态页表不动。
3. 虚拟页
飞腾CPU按照固定的长度将虚拟地址空间进行划分,每个固定长度的虚拟地址范围就是一个虚拟页。虚拟页有两个特点:
- 虚拟页内地址单元的所有访问属性都一致;
- 虚拟页内地址单元对于相同的物理页帧。
查看虚拟内存页长度
getconf PAGE_SIZE
地址范围的访问
飞腾CPU对虚拟地址空间的访问受限于CPU的权限级
- 当飞腾CPU处于EL1权限(操作系统内核)时,飞腾CPU可以取指令的地址范围不受限制(除了地址空洞),读写数据的地址范围也不受限制(除了地址空洞)。
- 当飞腾CPU处于EL0权限(应用程序)时,飞腾CPU可以取指令的地址范围受限于用户态范围,读写数据的地址范围也受限于用户态范围。
当飞腾CPU处于EL0权限时,飞腾CPU超出用户态范围访问时,飞腾CPU会触发地址异常。
注意:地址范围访问过程忽略了地址的页属性。
页属性
页属性是对访问操作类型进行限制的,页属性包括执行、读、写、缓冲操作、写合并操作、对齐要求等等。
飞腾CPU体系结构之虚拟地址相关推荐
- 飞腾CPU体系结构简单介绍(一)
第一章 飞腾CPU体系结构简介 ARM体系结构是一种精简指令集体系结构RISC,具有以下基本特点:通用寄存器数量较多:采用统一寻址模式,系统主存和外设分布在CPU物理地址空间的不同范围:采用load/ ...
- 飞腾CPU体系结构(十四)
飞腾CPU体系结构(十四) 1. MMU原理 MMU的大致工作原理是: 64位虚拟地址首先分成虚拟页帧号和页内偏移量两部分,虚拟页帧号即页表项索引:根据页表项索引,在进程的页表里查找到对应页表项,然后 ...
- 飞腾CPU体系结构(十三)
飞腾CPU体系结构(十三) 1. 虚拟地址到物理地址的映射 程序员编程一般都是使用虚拟地址,无论是否用到高速缓存,飞腾CPU的内存管理单元MMU都会把虚拟地址翻译成物理地址,然后根据物理地址进行数据的 ...
- 飞腾CPU体系结构(十一)
飞腾CPU体系结构(十一) 1. 预取机制 飞腾CPU为了提升性能,支持从外部内存中预取数据到L1或L2缓存中.如果某个缓存块内容不在L1/L2缓存中,当该缓存块的某个地址单元被第一访问时,就会遇到内 ...
- 飞腾CPU体系结构(九)
飞腾CPU体系结构(九) 向量访存指令主要包括LD1/ST1. LD2/ST2.LD3/ST3和LD4/ST4四种. LD1/ST1一般针对一个向量寄存器,也有两个.三个或四个向量寄存器的模式. LD ...
- 飞腾CPU体系结构(八)
飞腾CPU体系结构(八)--标量访存指令 在阅读之前,请先查看<飞腾CPU体系结构(五)>的SIMD和浮点寄存器.飞腾CPU还提供了32个128 位SIMD和浮点寄存器,这32个128位寄 ...
- 飞腾CPU体系结构(十)
飞腾CPU体系结构(十) 1.高速缓存模型 为了优化整体性能,飞腾CPU芯片内部提供L1高速缓存和L2高速缓存,有些飞腾CPU也提供芯片内部的L3高速缓存,本节不对这个情况进行赘述. 靠近流水线的高速 ...
- 飞腾CPU体系结构之低功耗指令
飞腾CPU体系结构之低功耗指令 WFE和WFI指令 当飞腾CPU核执行两类指令:WFE或WFI之后,CPU核会进入低功耗状态: 一旦CPU核进入低功耗状态,就要一直保持低功耗状态直到相应的唤醒事件发生 ...
- 飞腾CPU体系结构(十二)
飞腾CPU体系结构(十二) 1. CPU物理地址空间 飞腾CPU支持的物理地址宽度为44位,物理地址空间实际上只有16TB.系统主存(芯片外部内存)和IO外设(例如SoC设备.PCIe设备)都在这个物 ...
最新文章
- 请求拦截_实战SpringCloud通用请求字段拦截处理
- .NET程序脱离.NET Framework 运行之道
- Python的XML解析!
- 17_Android中Broadcast详解(有序广播,无序广播)最终广播,Bundle传递参数,传递参数的时候指定权限
- spring3: Aspectj后置返回通知
- react-生命周期
- 性能测试培训: 监控CPU之python
- 使用 Direct Initial Load 初始化 GoldenGate 同步数据
- Retrofit2源码分析(一)
- java数组排序的方法_Java数组排序方法详解
- Linux文件系统:ext2/ext3
- Bootstrap学习 - JavaScript插件
- SpringBoot入门项目——holleWorld
- 13步设计出一个ITSM系统
- android 优化侧滑按钮,Android 界面侧滑
- 普通人如何正确学习人工智能?
- ASAM MCD2D 笔记(1) - ODX use cases
- 解释程序和编译程序的区别
- Java 和 MySQL 数据类型对照表
- 为什么电子邮件发送失败?电子邮件发送失败的原因及解决方法
热门文章
- 微信小程序教学第二章(含视频):小程序中级实战教程之预备篇 - 提取util公用方法 |基于最新版1.0开发者工具
- 给自己的优盘做个保护,再也不怕病毒了!
- 关于安装依赖时报错 code128的问题
- Cesium 加载离线地图服务
- PS系列最新应用(包括破解的方法)
- 他华丽转身,却永远留下了六个字——在中国,为中国
- 海淀育新学校2021高考成绩查询,首师附育新“加工能力”不容小觑!海淀7000名以内可“签约”实验班...
- nginx 代理的简单配置
- 临汾市新东方计算机学校,新东方在线走进校园——全国中小学大型公益讲座“怒放青春”走进临汾...
- 暴力破解算法思想(2)