本章和第5章的内容都与ARM处理器中CP15协处理器的寄存器有密切关系,所以咱们这儿先介绍一下CP15寄存器以及拜访CP15寄存器的汇编指令。
3128 | 2724 | 2321 | 20 | 1916 | 1512 | 118 | 75 | 4 | 30 |
cond | 1 1 1 0 | opcode_1 | L | cr n | rd | 1 1 1 1 | opcode_2 | 1 | crm |
指令
阐明
语法格局
mcr
将ARM处理器的寄存器中的数据写到CP15中的寄存器中
mcr{}p15,,,,, {}
mrc
将CP15中的寄存器中的数据读到ARM处理器的寄存器中
mcr{}p15,,,,, {}
4.1.2CP15寄存器介绍CP15的寄存器列表如表4-1所示。
表4-1ARM处理器中CP15协处理器的寄存器
寄存器编号 | 根本效果 | 在MMU中的效果 | 在PU中的效果 |
0 | ID编码(只读) | ID编码和cache类型 | |
1 | 操控位(可读写) | 各种操控位 | |
2 | 存储维护和操控 | 地址转化表基地址 | Cachability的操控位 |
3 | 存储维护和操控 | 域拜访操控位 | Bufferablity操控位 |
4 | 存储维护和操控 | 保存 | 保存 |
5 | 存储维护和操控 | 内存失效状况 | 拜访权限操控位 |
6 | 存储维护和操控 | 内存失效地址 | 维护区域操控 |
7 | 高速缓存和写缓存 | 高速缓存和写缓存操控 | |
8 | 存储维护和操控 | TLB操控 | 保存 |
9 | 高速缓存和写缓存 | 高速缓存确认 | |
10 | 存储维护和操控 | TLB确认 | 保存 |
11 | 保存 | ||
12 | 保存 | ||
13 | 进程标识符 | 进程标识符 | |
14 | 保存 | ||
15 | 因不同规划而异 | 因不同规划而异 | 因不同规划而异 |
opcode_2编码
对应的标识符号寄存器
0b000
主标识符寄存器
0b001
cache类型标识符寄存器
其他
保存
1)主标识符寄存器
拜访主标识符寄存器的指令格局如下所示:
mrcp15, 0, r0, c0, c0, 0;将主标识符寄存器C0,0的值读到r0中
ARM不同版别体系处理器中主标识符寄存器的编码格局阐明如下。
ARM7之后处理器的主标识符寄存器编码格局如下所示:
31242320191615430 | ||||
由出产商确认 | 产品子编号 | ARM体系版别号 | 产品主编号 | 处理器版别号 |
位 | 阐明 |
位[3: 0] | 出产商界说的处理器版别号 |
位[15: 4] | 出产商界说的产品主编号,其间最高4位即位[15:12]或许的取值为0~7但不能是0或7 |
位[19: 16] | ARM体系的版别号,或许的取值如下: 0x1ARM体系版别4 0x2ARM体系版别4T 0x3ARM体系版别5 0x4ARM体系版别5T 0x5ARM体系版别5TE 其他由ARM公司保存将来运用 |
位[23: 20] | 出产商界说的产品子编号,当产品主编号相一起,运用子编号来区别不同的产品子类,如产品中不同的高速缓存的巨细等 |
位[31: 24] | 出产厂商的编号,现在现已界说的有以下值: 0x41=AARM公司 0x44=DDigital Equipment公司 0x69=Iintel公司 |
ARM7处理器的主标识符寄存器编码格局如下所示:
3124232216 15430 | ||||
由出产商确认 | A | 产品子编号 | 产品主编号 | 处理器版别号 |
位 | 阐明 |
位[3: 0] | 出产商界说的处理器版别号 |
位[15: 4] | 出产商界说的产品主编号,其间最高4位即位[15:12]的值为0x7 |
位[22: 16] | 出产商界说的产品子编号,当产品主编号相一起,运用子编号来区别不同的产品子类,如产品中不同的高速缓存的巨细等 |
续表
位 | 阐明 |
位[23] | ARM7支撑下面两种ARM体系的版别号: 0x0ARM体系版别3 0x1ARM体系版别4T |
位[31: 24] | 出产厂商的编号,现在现已界说的有以下值: 0x41=AARM公司 0x44=DDigital Equipment公司 0x69=IIntel公司 |
ARM7之前处理器的主标识符寄存器编码格局如下所示:
312423221615430 | ||||
由出产商确认 | A | 产品子编号 | 产品主编号 | 处理器版别号 |
位 | 阐明 |
位[3: 0] | 出产商界说的处理器版别号 |
位[15: 4] | 出产商界说的产品主编号,其间最高4位即为[15:12]的值为0x7 |
位[22: 16] | 出产商界说的产品子编号,当产品主编号相一起,运用子编号来区别不同的产品子类,如产品中不同的高速缓存的巨细等 |
位[23] | ARM7支撑下面两种ARM体系的版别号: 0x0ARM体系版别3 0x1ARM体系版别4T |
位[31: 24] | 出产厂商的编号,现在现已界说的有以下值: 0x41=AARM公司 0x44=DDigital Equipment公司 0x69=Iintel公司 |
2)cache类型标识符寄存器
拜访cache类型标识符寄存器的指令格局如下所示:
mrcp15, 0, r0, c0, c0, 1;将cache类型标识符寄存器C0,1的值读到r0中
ARM处理器中cache类型标识符寄存器的编码格局如下所示:
31292825242312110 | ||||
000 | 特点字段 | S | 数据cache相关特点 | 指令cache相关特点 |
位 | 阐明 |
位[28: 25] | 指定操控字段位[24: 0]指定的特点之外的cache的其他特点,详见表4-2 |
位[24] | 界说体系中的数据cache和指令cache是分隔的仍是一致的: 0体系的数据cache和指令cache是一致的; 1体系的数据cache和指令cache是分隔的 |
位[23: 12] | 界说数据cache的相关特点,假如位[24]为0,本字段界说整个cache的特点 |
位[31: 24] | 界说指令cache的相关特点,假如位[24]为0,本字段界说整个cache的特点 |
其间操控字段位[28:25]的意义阐明如下:
表4-2cache类型标识符寄存器的操控字段位[28:25]
编码 | cache类型 | cache内容铲除办法 | cache内容确认办法 |
0b0000 | 写通类型 | 不需要内容铲除 | 不支撑内容确认 |
0b0001 | 写回类型 | 数据块读取 | 不支撑内容确认 |
0b0010 | 写回类型 | 由寄存器C7界说 | 不支撑内容确认 |
0b0110 | 写回类型 | 由寄存器C7界说 | 支撑格局A |
0b0111 | 写回类型 | 由寄存器C7界说 | 支撑格局B |
操控字段位[23:12]和操控字段位[11:0]的编码格局相同,意义如下所示:
1198653210 | ||||
000 | cache容量 | cache相联特性 | M | 块巨细 |
cache容量字段bits[8: 6]的意义如下所示:
编码 | M=0时意义(单位KB) | M=1时意义(单位KB) |
0b000 | 0.5 | 0.75 |
0b001 | 1 | 1.5 |
0b010 | 2 | 3 |
0b011 | 4 | 6 |
0b100 | 8 | 12 |
0b101 | 16 | 24 |
0b110 | 32 | 48 |
0b111 | 64 | 96 |
cache相联特性字段bits[5: 3]的意义如下所示:
编码 | M=0时意义 | M=1时意义 |
0b000 | 1路相联(直接映射) | 没有cache |
0b001 | 2路相联 | 3路相联 |
0b010 | 4路相联 | 6路相联 |
0b011 | 8路相联 | 12路相联 |
0b100 | 16路相联 | 24路相联 |
0b101 | 32路相联 | 48路相联 |
0b110 | 64路相联 | 96路相联 |
0b111 | 128路相联 | 192路相联 |
cache块巨细字段bits[1: 0]的意义如下所示:
编码 | cache块巨细 |
0b00 | 2个字(8字节) |
0b01 | 4个字(16字节) |
0b10 | 8个字(32字节) |
0b11 | 16个字(64字节) |
31 16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
附加
L4
RR
V
I
Z
F
R
S
B
L
D
P
W
C
A
M
位 | 阐明 |
M | 0:制止MMU或许PU;1:使能MMU或许PU |
A | 0:制止地址对齐查看;1:使能地址对齐查看 |
C | 0:制止数据/整个cache;1:使能数据/整个cache |
W | 0:制止写缓冲;1:使能写缓冲 |
P | 0:反常中断处理程序进入32位地址形式;1:反常中断处理程序进入26位地址形式 |
D | 0:制止26位地址反常查看;1:使能26位地址反常查看 |
L | 0:挑选前期间断模型;1:挑选后期间断模型 |
B | 0:little endian;1:big endian |
S | 在依据MMU的存储体系中,本位用作体系维护 |
R | 在依据MMU的存储体系中,本位用作ROM维护 |
F | 0:由出产商界说 |
Z | 0:制止跳转猜测功用;1:使能跳转猜测指令 |
I | 0:制止指令cache;1:使能指令cache |
V | 0:挑选低端反常中断向量0x0~0x1c;1:挑选高端反常中断向量0xffff0000~ 0xffff001c |
RR | 0:惯例的cache筛选算法,如随机筛选;1:猜测性筛选算法,如round-robin筛选算法 |
L4 | 0:坚持ARMv5以上版别的正常功用;1:将ARMv5以上版别与曾经版别处理器兼容,不依据跳转地址的bit[0]进行ARM指令和Thumb状况切换:bit[0]等于0表明ARM指令,等于1表明Thumb指令 |
附加: |
310
一级映射描述符表的基地址(物理地址)
310
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
31987430
UNP/SBZP
0
域标识
状况标识
其间,域标识bit[7:4]表明寄存引起存储拜访失效的存储拜访所属的域。
状况标识bit[3:0]表明放引起存储拜访失效的存储拜访类型,该字段意义如表4-3所示(优先级由上到下递减)。
表4-3状况标识字段意义
引起拜访失效的原因 | 状况标识 | 域标识 | C6 |
终端反常(Terminal Exception) | 0b0010 | 无效 | 出产商界说 |
中断向量拜访反常(Vector Exception) | 0b0000 | 无效 | 有用 |
地址对齐 | 0b00x1 | 无效 | 有用 |
一级页表拜访失效 | 0b1100 | 无效 | 有用 |
二级页表拜访失效 | 0b1110 | 有用 | 有用 |
依据段的地址改换失效 | 0b0101 | 无效 | 有用 |
依据页的地址改换失效 | 0b0111 | 有用 | 有用 |
依据段的存储拜访中域操控失效 | 0b1001 | 有用 | 有用 |
依据页的存储拜访中域操控失效 | 0b1101 | 有用 | 有用 |
依据段的存储拜访中拜访权限操控失效 | 0b1111 | 有用 | 有用 |
依据页的存储拜访中拜访权限操控失效 | 0b0100 | 有用 | 有用 |
依据段的cache预取时外部存储体系失效 | 0b0110 | 有用 | 有用 |
依据页的cache预取时外部存储体系失效 | 0b1000 | 有用 | 有用 |
依据段的非cache预取时外部存储体系失效 | 0b1010 | 有用 | 有用 |
310
失效地址(虚拟地址)
3132-W 31-W0
cache组内块序号index
0
其间index表明当下一次产生cache未射中时,将预取的存储块存入cache中该块对应的组中序号为index的cache块中。此刻序号为0~index-1的cache块被确认,当产生cache替换时,从序号为index到ASSOCIATIVITY的块中挑选被替换的块。
编码格局B如下所示:
3130WW-10 | ||
L | 0 | cache组内块序号index |
位 | 阐明 |
L=0 | 当产生cache未射中时,将预取的存储块存入cache中该块对应的组中序号为index的cache块中 |
续表
位 | 阐明 |
L=1 | 假如本次写操作之前L=0,而且index值小于本次写入的index,本次写操作履行的成果不行预知;不然,这时被确认的cache块包含序号为0~index-1的块,当产生cache替换时,从序号为index到ASSOCIATIVITY的块中挑选被替换的块 |
31 3032-W31-W32-2W31-2W10
可被替换的条目开始地址的base
下一个将被替换的条目地址victim
0
P
位 | 阐明 |
victim | 指定下一次TLB没有射中(所需的地址改换条目没有包含在TLB中)时,从内存页表中读取所需的地址改换条目,并把该地址改换条目保存在TLB中地址victim处 |
base | 指定TLB替换时,所运用的地址规模,从(base)到(TLB中条目数-1);字段victim的值应该包含在该规模内 |
P | 1:写入TLB的地址改换条目不会受使整个TLB无效操作的影响,一向坚持有用;0:写入TLB的地址改换条目将会遭到使整个TLB无效操作的影响 |
3125240
PID
0
其间,PID表明当时进程的地点的进程空间块的编号,即当时进程的进程标识符,取值为0~127。
0:MVA(改换后的虚拟地址)= VA(虚拟地址),制止FCSE(快速上下文切换技能),体系复位后PID=0;
非0:使能FCSE。