从软件角度看处理器
1、微处理器与微控制器
微控制器 = 微处理器 + 片内内存 + 片内外设
如下图所示:
2、寄存器
寄存器分类
(1)CPU寄存器
- 专用指令执行、数据运算、变量处理、参数传递
(2)外设寄存器
- 用于控制外设的行为的工作方式
- 寄存器值的配置需要根据芯片手册来完成
处理器中的关键寄存器
PC和SP的使用案例:函数调用
当程序从b点执行函数a,程序会跳转到a点去执行函数,函数返回信息保存在sp与bp之间内存中;
3、处理器的I/O操作
处理器与外设之间的通信通过I/O操作来完成的
(1)内存映射IO空间
- 外设通过精密的硬件连接映射到处理器的地址空间
- 通过地址访问的方式与外设进行通信
(2)独立IO空间
- 独立于地址空间,无法通过地址访问外设
- 使用专用指令与外设进行通信
操作外设的基本方式
通过IO端口配置控制寄存器
通过IO端口读写数据寄存器
设备地址映射示例
处理器通过地址访问外设
4、处理器启动过程简介
- 处理器上电后,PC寄存器固化了一个默认值;
- PC默认值用来决定第一条执行指令;
- 第一条执行指令隶属于启动程序;
启动程序(bootloader)
根据运行阶段、体积和功能的不同,分为三个部分:BL0、BL1和BL2
示例:S3C6410启动过程图解
5、中断
中断的概念和意义
中断是一种处理器与外设进行通信的机制,用于“通知”处理器外部有“重要事件”发生;
中断服务程序(ISR)
(1)从外设中读取中断状态寄存器的值,以便了解中断类型
(2)根据中断类型具体设计处理逻辑
(3)清除外设状态寄存器中的中断标识位
(4)清除处理器中的中断标识位
如图所示,下图是一个外部中断响应执行的过程
第一步:外部中断响应
第二步:CPU保存上下文信息
第三步:CPU向外设获取中断类型
第四步:确认中断类型
第五步:执行中断服务程序
第六步:清除外设状态寄存器中的中断标识位
第七步:清除处理器中的中断标识位
第八步:恢复上下文,跳转到原程序执行处
软件工程师眼中的中断服务程序
- 不能有返回值,不能有参数传递
- 必须短小而高效,避免浮点运算
常见的嵌入式面试题有:
下面的中断服务程序中有哪些不当之处:
答:
(1)有返回值
(2)有传参
(3)有浮点运算
(4)有打印函数,会涉及IO操作,效率变低
中断的类型
- 硬中断:通过处理器中断信号线产生的中断
- 软中断:也叫异常或者陷阱,通过非法指令或特殊指令触发的中断
中断的应用:程序断点
程序断点的实现原理为:
(1)获取原程序指定行对应的代码地址
(2)把代码地址中的指令替换为中断触发指令
(3)在中断服务程序中将控制权交给调试程序
(4)调试程序读写原程序上下文信息
(5)调试程序将代码地址中的指令还原
(6)原程序从断点处继续往下运行
如下图所示:
6、内存管理单元(MMU)
操作系统利用内存管理单元可以实现:虚拟内存
虚拟内存
一个问题:下面程序两次运行的结果是否相同?
理论上,不同进程在内存中的不同位置执行;因此,全局变量的地址不同;如下图所示:
但实际的打印信息&g_v的值是一样的;
原因:
应用程序开发时,面对的内存是虚拟内存,虚拟内存模式下使用的地址是虚拟地址,每个进程拥有独立私有的虚拟地址空间;
虚拟内存的意义:虚拟内存能够支持多个大内存需求量的进程同时运行于较小的物理内存中
- 虚拟内存需要重新映射到物理内存
- 虚拟地址映射到物理内存中的实地址
- 每次只有进程的少量代码在物理内存中运行
- 大部分进程代码位于存储器中
页式内存管理
如上图所示,虚拟地址的映射是先查询虚拟页号对应的物理页号,然后将物理页号与页内偏移量拼接,这就是物理内存的地址,然后将虚拟地址开始的内存空间以页为单位向物理内存中拷贝。
问题:查询页映射表不存在该虚拟页号怎么办?
7、cache
cache的引入
(1)处理器的速度远远大于内存
(2)程序访问的局限性,即某个存储单元在短时间内会被连续访问,且某个存储单元的邻近单元也会被访问
这两点促使cache的诞生:
- cache是一种小容量高速存储器
- cache的存取速度与处理器的运算速度几乎同量级
- cache在现代计算机系统中直接内置于处理器芯片中
处理器的数据访问方式如下图所示:
内存和cache之间的映射
直接映射法:
直接映射法的优缺点:
优点:映射过程简单,所需时间短
缺点:当短时间内访问的地址有同余冲突时,会造成缓存失效