一,ARM TTBR0,TTBR1寄存器;
从ARMV6开始增加了TTBR1寄存器,但是在ARM32的时候,TTBR1寄存器未使用,原因如下:
TTBR0和TTBR1寄存器只支持2G,1G,512M等,但是ARM32虚拟地址空间的划分比例为1:3,用户空间是3G,内核空间是1G,所以上述寄存器硬件限制无法满足这种通用配置,所以ARM32未使用TTBR1寄存器;

二,ARM32页表复制
ARM32:由于ARM32未使用TTBR1寄存器,也就是MMU只使用了一个页表基址寄存器,同时,为了避免在用户空间和内核空间切换时,切换页表带来的性能损耗,所以,用户空间和内核空间共用一个页表,即用户空间和内核空间具有相同的页表基地址TTBR0,(

虚拟空间的低3GB部分从0-0XBFFFFFFF的虚拟线性地址,用户态和内核态都可以寻址,这部分也是每个进程的独立空间。

虚拟空间的高1G部分从0XC0000000到0XFFFFFFFF的虚拟地址,只有内核态的进程才能访问,这种限制由页目录和页表描述符的权限标志位决定,通过MMU自动控制。

)为了实现这种机制,内核在每次fork一个新的进程的时候,都会把内核页表的一级页表复制到新的进程的一级页表中,代码如下:

ARM64:ARM64使用了TTBR0和TTBR1寄存器,用户虚拟地址空间和内核虚拟地址空间都是256TB,用户虚拟地址的高位都是0,内核虚拟地址的高位都是1,MMU会自动根据高位是否为1来判断该虚拟地址是否为内核虚拟地址,所以用户虚拟地址空间和内核虚拟地址空间采用了不同的页表,即用户空间和内核空间具有不同的页表基地址,所以ARM64在fork每一个新的进程的时候不会把内核页表的一级页表复制到每一个新进程的一级页表中,代码如下:

————————————————
版权声明:本文为CSDN博主「a372048518」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a372048518/article/details/103865898

TTBR0与TTBR1ARMv7-A架构(架构不同,两个寄存器作用不同V6,ARM32,ARM64(ARMv7))

ARMv7-A架构中有两个协处理器寄存器用来存放一级页表基地址(PGD),TTBR0和TTBR1(Translation table base register: 页表基地址寄存器)。其中,TTBR0用于存放用户空间的一级页表基址,TTBR1存放内核空间的一级页表基址。

以TTBR0为例,它的具体实现可以参阅<ARM Architecture Reference Manual(ARMv7-AR)> Page1709:

如果页表按照4K对齐,那么X=12

寄存器的访问地址(以Cortex-A9为例)

写入指令:

 mcr    p15, 0, r1, c2, c0, 0    @ TTB 0mcr    p15, 0, r7, c2, c0, 1    @ TTB 1

读出指令

mrc    p15, 0, r1, c2, c0, 0    @ TTB 0
mrc    p15, 0, r7, c2, c0, 1    @ TTB 1

Trace32写入指令

per.s c15:0x2 %long 0x24178059  // TTB0
per.s c15:0x102 %long 0x22304059  //TTB1

所有的内核进程地址空间的页表是共用一套的,所以TTBR1的值不会改变,TTB1段(Bit[31:x])永远等于init_mm->pgd:

(注意:init_mm->pgd存储的是虚拟地址,TTBR1需要存储物理地址,下图中两者的映射关系为(Phy:0x22300000)<-->(Vir:0xc0000000))

TTBR0代表了当前用户进程的页表基地址,其值会随着用户进程的切换而改变。所以TTB0段(Bit[31:x])等于当前任务(task_struct)*->(mm)*->pgd,

同样需要进行虚拟地址与物理地址关系的转换。

ARMv7-A根据TTBCR寄存器的N位决定使用TTBR0还是TTBR1:

N位在TTBCR寄存器的Bit[2:0],它也决定了TTBR寄存器的X(X=14-TTBCR.N)

根据描述:

如果 N==0,也就是 系统中没有配置 TTBCR的默认值,那么 ARM 总是使用 TTBR0来翻译虚拟地址 , 所以默认情况下,TTBR1是没有用的。
如果 N==1, 那么当 ARM 遇到大于等于0x80000000的地址时,就 需要使 用 TTBR1寄存器指向的映射表来转换虚拟地址 ,相应地 落在[0x0000000, 0x8000000]范围内的虚拟地址需要使用TTBR0映射表来翻译。

N=2, 临界地址是0x40000000,其余临界地址请参阅上图。

TTBR0与TTBR1 - DF11G - 博客园

浅谈ARMv7-A协处理器CP15

2022-06-07 14:27:17 digiproto  455

协处理器,顾名思义就是协助型处理器,主要协助做一些主处理器无法执行或者执行效率不佳的事情,比如浮点、图像、音频处理这一类,随着硬件的发展,大多协处理器的功能都慢慢集成到主处理器中,但是某些特定的工作还是需要协处理器进行辅助。

ARM拥有16个协处理器,常被命名为 CP0—CP15,其中CP0—CP7由厂家定义协处理功能,而CP8—CP15预留给ARM使用:

1.CP15 提供一些系统控制功能,这包括体系结构和特征识别,以及控制、状态信息和配置支持,还提供了性能监视器寄存器。

2.CP14 主要提供 debug 系统的控制、Thumb执行环境、Java字节码执行。

3.CP10、CP11 两个协处理器一起,提供了浮点运算和向量操作,以及高级的 SIMD 指令扩展。

4.协处理器8、9、12和13预留给ARM将来使用。

01

CP15寄存器特性:

CP15 一共有 16 个寄存器,通常是需要 PL1 特权级才能访问,ARMv7 的 CP15 寄存器都是复合功能寄存器,多种功能对应多个寄存器内存实体,由访问指令的参数来决定访问的是哪种功能对应的内存。

对于 ARMv7 架构而言,A 系列和 R 系列是统一设计的,A 系列带有 MMU 相关的控制,而 R 系列带有 MPU 相关控制,针对不同的功能需要做区分,同时又因为协处理器 CP15 只支持 16 个寄存器,而需要支持的功能较多,所以通过同一寄存器不同功能的方式来满足需求。

在指令的编码中,支持 16 个寄存器只需要使用 4 位,如果需要支持 32 个寄存器,就需要多使用一位寄存器位,要知道,对于指令编码而言,每一位的资源都是非常紧缺的,关于指令编码可以参考 ARM指令集编码。

02

CP15寄存器的访问:

ARMv7 中对于协处理器的访问,使用 mcr 和 mrc 指令,(协处理器可以附属于ARM处理器。一个协处理器通过扩展指令集或提供配置寄存器来扩展内核处理功能。)分别表示将 ARM 核心寄存器中的值的写到 CP15 寄存器中和从 CP15 寄存器中读到 ARM 核心寄存器中,大部分指令都需要在 PL1 以及更高的特权级下才能正常执行,这是因为 CP15 协处理器大多都涉及到系统和内存的设置,user 模式没有操作权限,user 模式仅能访问 CP15 中有限的几个寄存器比如:ISB、DSB、DMB、TPIDRURW、TPIDRURO 寄存器。

下面以mrc和mcr指令为例,进行讲解:

MRC:

作用:将协处理器寄存器的值读取到ARM的寄存器中

实例:mrc p15, 0, r0, c0, c1, 1

将协处理器CP15的寄存器的值读取到ARM的r0寄存器中。

MCR:

作用:将ARM的寄存器的值读取到中协处理器寄存器

实例:mcr p15, 0, r0, c0, c1, 1

将ARM的r0寄存器的值读取到协处理器CP15的寄存器中。

03

CP15寄存器和操作数总览:

尽管 CP15 的寄存器是 c0—c15,但是根据上文中的介绍,实际上真正的寄存器实体完全不止 16 个,而是通过 “(通常是0),,{,#}” 来确定需要操作的目标寄存器,下表就是整个 c0—c15 寄存器以及功能的总览:

c0:

c0是标识寄存器,对应的功能列表如下表:

c1:

c1是系统控制寄存器,对应的功能列表如下表:

c2、c3:(C2 ,C3共同决定TTBR0,TTBR1   2022.11.29及其他)

c2和c3是内存保护和控制寄存器,对应的功能列表如下表:

在ARM v7-A的大型物理地址扩展或虚拟化扩展的实现中,CP15的c2寄存器包括一些64位的系统控制寄存器。

c4:

c4未使用

c5、c6:

c5和c6是内存系统错误寄存器,对应的功能列表如下表:

c7:

c7包括缓存维护、地址转换,以及其他功能,对应的功能列表如下表:

c8:

c8是TLB维护操作,对应的功能列表如下表:

c9:

c9寄存器预留了缓存、TCM控制和性能监视器,对应的功能列表如下表:

c10:

c10是内存重映射和TLB控制寄存器,对应的功能列表如下表:

c11:

c11保留给TCMDMA寄存器,对应的功能列表如下表:

c12:

c12是安全扩展寄存器,对应的功能列表如下表:

c13:

c13是进程、上下文和线程ID寄存器,对应的功能列表如下表:

c14:

c14,保留给通用计时器扩展,对应的功能列表如下表:

32位的c14寄存器:

64位的c14寄存器:

c15:

ARMv7保留CP15的c15用于实现定义的目的,并且对CP15的c15编码的使用不做任何限制。

从上述的协处理器寄存器列表可以看出,每个寄存器都对应多种功能,通过 mcr 或者 mrc 指令的参数来指定需要操作的具体寄存器,同时,CP15 协处理器的大部分寄存器功能都是和系统的内存相关,比如 MMU、TCM、TLB、DMA、Memory protection 等等。

浅谈ARMv7-A协处理器CP15

协处理器  百度百科

协处理器(coprocessor),一种芯片,用于减轻系统微处理器的特定处理任务。

协处理器,这是一种协助中央处理器完成其无法执行或执行效率、效果低下的处理工作而开发和应用的处理器。这种中央处理器无法执行的工作有很多,比如设备间的信号传输、接入设备的管理等;而执行效率、效果低下的有图形处理、声频处理等。为了进行这些处理,各种辅助处理器就诞生了。需要说明的是,由于现在的计算机中,整数运算器与浮点运算器已经集成在一起,因此浮点处理器已经不算是辅助处理器。而内建于CPU中的协处理器,同样不算是辅助处理器,除非它是独立存在。

中文名

协处理器

外文名

coprocessor

类    型

一种芯片(如果内置于CPU内部,不是独立的模块则不再称之为协处理器,如果集成在CPU内部并且还是独立的模块则还称之为协处理器(此时不是独立芯片了)2022.11.29)

用    途

用于减轻系统微处理器

功    能

协助中央处理器完成其无法执行或执行效率、效果低下的处理工作

示    例

控制数字处理;处理视频绘制等

目录

  1. 1 简介
  2. ▪ 特定处理任务
  3. ▪ 内核相连
  1. ▪ 扩展指令集
  2. ▪ 内部结构
  3. 2 现代PC协处理器
  1. 3 超级CPU
  2. ▪ 协处理器的消亡
  3. ▪ ARM 微处理器

简介

编辑 播报

特定处理任务

例如,数学协处理器可以控制数字处理;图形协处理器可以处理视频绘制。例如,intel pentium 微处理器就包括内置的数学协处理器。

内核相连

协处理器可以附属于ARM处理器。一个协处理器通过扩展指令集或提供配置寄存器来扩展内核处理功能。一个或多个协处理器可以通过协处理器接口与ARM内核相连 [1]  。

协处理器可以通过一组专门的、提供load-store类型接口的ARM指令来访问。例如协处理器15(CP15),ARM处理器使用协处理器15的寄存器来控制cache、TCM和存储器管理。

扩展指令集

协处理器也能通过提供一组专门的新指令来扩展指令集。例如,有一组专门的指令可以添加到标准ARM指令集中,以处理向量浮点(VFP)运算。

这些新指令是在ARM流水线的译码阶段被处理的。如果在译码阶段发现是一条协处理器指令,则把它送给相应的协处理器。如果该协处理器不存在,或不认识这条指令,则ARM认为发生了未定义指令异常。这也使得编程者可以用软件来仿真协处理器的行为(使用未定义指令异常服务子程序)。

内部结构

图1

协处理器80x87的内部结构如图1所示。它可分为二个主要部分:控制部件(CU)和数值执行部件(NEU)。

控制部件(CU)把协处理器接到CPU的系统总线上,协处理器和CPU都监视正在执行的指令流。如果当前将要执行的指令是协处理器指令(即:ESCape指令),那么,协处理器会自动执行它,否则,该指令将交给CPU来执行。

数值执行部件(NEU)复制执行所有的协处理器指令,它有一个用8个80位的寄存器组成的堆栈,该堆栈用于以扩展精度的浮点数据格式来存放数学指令的操作数和运算结果。在协处理器指令的执行过程中,要么指定该堆栈寄存器中的数据,要么使用压栈/出栈机制来从栈顶存放或读取数据。

在NEU部件中,还有一些记录协处理器工作状态的寄存器,如:状态寄存器、控制寄存器、标记寄存器和异常指针寄存器等。有关这些寄存器的作用将在后面给予分别介绍。

现代PC协处理器

编辑 播报

2006年,AGEIA宣布了PhysX物理加速卡, PhysX被设计来处理那些耗时复杂的物理计算。2008年,Nvidia收购了AGEIA,NVIDIA将PhysX物理引擎,利用CUDA技术,由显示核心加速运算。

2008年,Khronos Group发布OpenCL,这是一个通用语言,支持ATI/AMD和Nvidia的GPU。

2012年,Intel宣布Intel Xeon Phi协处理器。

2013年,苹果在iPhone 5s上首次推出了M7运动协处理器 [2]  。

超级CPU

编辑 播报

协处理器的消亡

80486CPU之前有协处理器,提高浮点运算能力,那时cpu较弱才有的协处理器,速度是原来数百倍不止,pc机一般不存在协处理器了。

ARM 微处理器

ARM 微处理器可支持多达 16 个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略 ARM 处理器和其他协处理器的指令。ARM 的协处理器指令主要用于 ARM 处理器初始化 ARM 协处理器的数据处理操作,以及在ARM 处理器的寄存器和协处理器的寄存器之间传送数据,和在 ARM 协处理器的寄存器和存储器之间传送数据。 ARM 协处理器指令包括以下 5 条: — CDP 协处理器数操作指令— LDC 协处理器数据加载指令— STC 协处理器数据存储指令— MCR ARM 处理器寄存器到协处理器寄存器的数据传送指令— MRC 协处理器寄存器到ARM 处理器寄存器的数据传送指令。

ARM:协处理器包括以下5条:

CDP:协处理器数据操作指令。

LDC:协处理器数据加载指令。

STC:协处理器数据存储指令。

MCR:ARM处理器寄存器到协处理器寄存器的数据传送指令。

MRC:协处理器寄存器到ARM处理器寄存器的数据传送指令 [3]

ARM TTBR0TTBR1寄存器与ARM32页表复制。TTBR0TTBR1两寄存器在ARM,ARM32,ARM64linux中分页管理页表基地址的存放不同,CP15 CP2控制TTBR01附加协处理相关推荐

  1. ARM指针寄存器——堆栈指针寄存器SP、程序计数器PC、连接寄存器LR

    参考:堆栈指针寄存器 SP详解以及栈的作用 作者:蓝色鲜橙多 网址:https://blog.csdn.net/qq_36588941/article/details/89873633?utm_sou ...

  2. Arm学习总结之 32位和64位寄存器

    32位 arm在任何模式(9种)下 都有的以下寄存器 15个通用寄存器,包括R0-R12, SP(the Stack SP), LR(Link Register) 1 个PC(Program Coun ...

  3. word表格导出html代码,(网页源代码中的表格数据怎么导出excel)如何将把从WORD、EXCEL中复制的内容转换成HTML源代码,再通过网页表单提交上传到数据库?...

    如何将ASP页面中的表格生成一个Excel表,求源码 '给你个例子吧.保存为 asp文件看看.具体就在第一句. New Page 1PJ计画 第版 案件No 案件名 主门 顾客 PJ责任者 営业担当 ...

  4. linux vim 复制一个单词,Vim复制粘贴与寄存器

    Vim复制粘贴与寄存器 在Vim中的复制,删除,替换等操作的临时内容,都会存储在寄存器中 1.无名寄存器("") 两个双引号,Vim中叫做无名寄存器.x,s,d,c,y等操作,如果 ...

  5. sse 指令xmm寄存器和内存互相复制的问题

    下面是一段可以执行的x64 的 nasm 汇编代码,类似可执行文件的外壳代码 bits 64 global start extern MessageBoxAsection .text start:pu ...

  6. Linux内存管理 - 页表的映射过程初步了解

    Linux下的页表映射分为两种,一是Linux自身的页表映射,另一种是ARM32 MMU硬件的映射. 为什么会分两种:看一下什么是MMU: MMU是Memory Management Unit的缩写, ...

  7. 【转】深入了解CPU两大架构ARM与X86

    [转]深入了解CPU两大架构ARM与X86 来自:https://blog.csdn.net/u014641018/article/details/53484565 重温下CPU是什么 中央处理单元( ...

  8. linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解?进程虚拟地址4G指拥有4G的寻址能力,需要页表转换为实际物理地址,每个进程用到的内核是直接映射,地址的进程地址-3G的关系

    linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解? 问: linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解? 每个进程所拥有的4G独立的虚拟内存空间 ...

  9. ARM嵌入式系统开发:软件设计与优化--第二章ARM处理器基础

    注:本文资料全部来源于网络或书籍,同时加上个人理解.若有侵权,告知即删.若有错误,留言商讨. 1.寄存器: 总共有37个寄存器,最多可以有17个活动寄存器(16个数据寄存器,2个状态寄存器:CPSR和 ...

最新文章

  1. VC小技巧汇总之对话框技巧
  2. php 导出word 高度,PHP导出word
  3. 微信和钉钉电脑客户端多开的解决方法(Windows 10)
  4. plsql创建表提示标识符过长_创建安全多签名钱包及高级设置
  5. 七月老师python_七月在线Python学习笔记
  6. python 取值范围的命令_python获取命令行参数的方法
  7. 蚂蚁森林:国庆节前组织网友去阿拉善等三地参与秋季验收
  8. Java 8 (5) Stream 流 - 收集数据
  9. 点云nurbs曲面重建c++代码_【科普】抢先收藏!点云数据处理技术概要
  10. 移除Win10资源管理器中OneDrive图标
  11. mysql的主从同步查询_mysql主从同步
  12. 7500 cpuz跑分 i5_Intel觉醒!i7-8700K/i5-8600K首发评测:4核变6核 跑分凶残
  13. 28款超级绿色版杀软,奉献给各位!【迅雷下载】
  14. 新手电脑硬件软件故障解答(一)
  15. UT000020: Connection terminated as request was larger than 10485760
  16. 关于java中的setOut()方法
  17. 2018年第一周APP黑马榜单
  18. 高德打车宣布上线共享雨伞:或许是醉翁之意不在酒
  19. 分享四个体验不错的云游戏平台—网易云游戏、腾讯云游戏、菜鸡云游戏、格莱云游戏
  20. Web 和http协议

热门文章

  1. wp微信小程序终极版开源下载
  2. 联合办公空间会员需要保险吗?
  3. 车桥耦合(公路梁桥,斜拉桥,悬索桥等),方法有基于MATLAB-ANSYS建模程序求解
  4. C#微信登录-手机网站APP应用
  5. 二维火 Android 云收银模块化架构实践
  6. 第24篇-极某壁纸结果参数分析
  7. 阿里云ECS服务器购买记录
  8. 电脑必备高质量软件,各有千秋,总有一款能惊艳到你
  9. webpack错误之ERROR in mainModule not found: Error: Can‘t resolve ‘./src‘ in ‘C:\Users\tuchunrong\Progr
  10. 来点色看看~SecureCRT-8.5配色方案设置