ARM_Linux NOTE_1
Vine Farer
2016.08.05
1、基本结构
内核 ——— CPU
软件
Linux
:功能较多,较复杂VX Works
:稳定性高,用于航天和军用μ COS
:轻量级OS,因结构简单,也较稳定
硬件
ARM
MSP430
Mips
:功耗很低PowerPC
2、计算机系统硬件组成
输入设备
输出设备
存储器
CPU
(寄存器组)<—>高速缓存cache
<—>主存储器RAM
<—>辅助存储器ROM
(速度 快———————————————–>>>慢)
cache 本身由 SRAM 组成
cache 常和 wite buffer 一起使用,起作用就是为了针对高速的CPU和低速的主存之间速率不匹配的问题,进行缓冲
MMU (存储管理单元):程序编译时将虚拟地址转为物理地址,多个程序可以有相同的虚拟地址(0~4G),但各自是不同的物理地址映射
RAM :
> SRAM
> DRAM(SDRAM)ROM:
> EPROM
> EEPROM
> Flash:nand型、nor型磁盘、硬盘
光盘
相变
运算器ALU
控制器
总线
单总线结构:效率低,低档单片机
多总线结构:效率高,成本高,高档单片机
3、数据和指令类型
ARM数据类型
byte 8bit
halfword 16bit
word 32bit
doubleword 64bit
指令集:
ARM
指令集:32bit,4字节对齐Thumb
指令集:16bit,2字节对齐cortex-a
thumb-2
:arm
+thumb
java
:8bit,4字节对齐thumb-ee
4、ARM处理器工作模式
八种内核工作模式:
user
: 用户模式(非特权模式)。正常执行时用此模式system
:系统模式,和user共享相同资源(即公用一套寄存器组)fiq
:快速中断模式。高优先级中断介入时进入此模式irq
:普通中断模式。通常中断处理supervisor{svc}
:特权模式。复位、swi软中断abort
:数据访问终止模式。读取数据失败,加载指令失败undef
:未定义指令终止模式cortex-a
:monitor
:监控模式。在安全与非安全模式间切换(除
user
,其他7种均为特权模式)fiq
比irq
快的原因FIQ
优先级比IRQ
高,不会被中断FIQ
有自己的专属寄存器:r8~r12,不用对通用寄存器入栈保护,可以加快速度FIQ
位于异常向量表的末尾0x1c,故无需跳转,可以在这里直接放置异常处理函数
5、ARM寄存器
Contex-A8
有40个32位寄存器
8种内核工作模式,每个模式对应一组相应寄存器组
32个通用寄存器
7个状态寄存器:1个
CPSR
(当前)、6个SPSR
(备份)1个PC(程序计数器)
程序状态寄存器结构(面试常考)
条件标志位:N(负数)、Z(0)、C(进位)、V(溢出)
大小端控制位:E
中断禁止位:I(普通中断)、F(快速中断)
状态位:T(选择
ARM
指令或Thumb
指令)模式控制位:M[ 4:0 ] 确定内核处于哪种工作模式(8种)
6、异常处理
———— 操作程序状态寄存器
异常类型
Reset
、Data Abort
、FIQ
、IRQ
、Prefetch Abort
、SWI
、Undefined instruction
Reset
异常优先级最高异常产生:
1)拷贝
CPSR
到SPSR_<mode>
2)设置
CPSR
:设置第 5 位,进入
ARM
态设置
M[4:0]
,改变内核模式设置第 6、7 位的中断禁止位,禁止相应中断响应
(为防止中断嵌套,一旦irq
中断执行过程中另一个irq
中断到来,pc
被保存到lr
中跳转到下个中断。但irq
模式下的lr
只有一个,一旦改变就被覆盖了,会丢失usr
下原函数的返回地址,中断结束后无法返回)3)保存返回地址到
LR_<mode>
(设置r14
)4)设置
PC
为相应的异常向量异常返回:
1)从
SPSR_<mode>
恢复CPSR
2)从
LR_<mode>
恢复PC
(这些操作仅在ARM态下进行)
7、流水线(Pipeline)
———— 改善硬件资源使用率和处理器吞吐量
3级流水线(如
ARM7
系列):取指令
fetch
:从存储器中读指令译码
decode
:解码指令中用到的寄存器执行
execute
:寄存器读、移位和ALU操作、寄存器写5级流水线:
取指令 <—> 译码 <—> 执行 <—> 缓冲 / 数据 <—> 回写
流水线工作实例
1) 最佳流水线( F—>D—>E )
6个周期执行6条指令
所有操作在寄存器中
指令周期数CPI = 1
2) LDR流水线( F、D、E、M、W )
M:将数据从内存读到CPU; W:将读到的数据写回寄存器
6个周期4条指令
CPI = 1.5
3) 分支流水线( F、D、E、L、A )
L:设置LR = PC_old; A:硬件自动PC = PC_old - 4
需要对BL跳转语句做处理,所以流水线被阻断
内核运行在ARM态
4) 中断流水线( F、D、E、DI、EI、L、A )
DI:解码中断指令; EI:处理中断
中断到来,跳转到中断向量表,执行相应地址内的跳转语句,跳转到下个地址执行中断处理函数
IRQ中断的反应时间最小是 7 个周期