SPARC V8处理器断点调试的设计与实现研究
在嵌入式的交叉调试过程中,开发人员的调试手段有断点、触发和跟踪三种,其中断点是经常使用的调试手段。开发人员使用断点控制所要调试程序的运行和停止,使程序运行到自己想要调试的位置,通过观察在断点处的程序变量以及寄存器和存储器的值,检测所调试的程序运行是否正确。
断点按照其实现方法分为软件断点和硬件断点,本文研究对象是软件断点调试。对于不同的嵌入式处理器或调试工具而言,软件断点的实现方法基本一样,都是通过在所要设置断点的地址上将其内存内容替换为指令陷阱,当这个指令被执行时就会产生软件中断,使处理器进入调试状态(或监控状态)。
随着嵌入式计算机应用的发展,目前大部分处理器都内嵌有高速缓存(Cache)和内存管理单元(MMU),并由Cache、主存和磁盘构成三级存储系统。交叉调试中断点的实现与处理器中存储系统的构成有紧密的关系。MMU的存在使设置/移除断点时要考虑断点地址是虚拟地址还是物理地址,如果是虚拟地址则要进行虚实地址的转换。Cache的存在使设置/移除断点时要考虑Cache一致性的问题。如果所要设置的断点地址被Cache命中,则当用特定指令替换断点地址上的内存内容来实现断点功能时,就会使主存上的内容与Cache对应单元中的内容不一致,从而造成Cache与主存的不一致问题。这些问题的存在直接影响断点功能的正确实现。
断点功能是交叉调试器的重要组成部分,在开发交叉调试器的过程中不可避免地会遇到上述问题。本文分析了一款具有Cache和MMU的SPARC V8处理器,主要研究其分级存储系统对实现断点功能的影响,提出了行之有效的解决办法,并应用到该处理器的调试工具中。
1 Cache和MMU引起的断点调试问题
1.1 Cache引起的断点调试问题
Cache是一种高速缓冲存储器,在存储系统的层次结构中引入Cache是为了解决CPU与主存之间的速度差异,以提高CPU工作效率。通过在主存和高速CPU之间设置一个小容量的高速存储器,并在其中储存一份CPU最近访问的主存储器"内容拷贝",使CPU在重复读取这部分内容时可以通过访问Cache完成数据的读写。由于Cache的速度快于主存的速度,从而缩短了数据读写的等待时间,系统的整体性能也得到提高。但同时它又带来了一些其他问题,如本文提到的一致性问题。
Cache由控制部分和存储器部分组成,如图1所示,虚框内为控制部分。控制部分将来自CPU的数据读写请求传递给存储器进行相应处理。控制部分的主要功能是判断要访问的数据是否在Cache中命中。命中时进行Cache的寻址;未命中则按照替换策略将主存中的数据块载入到Cache存储器对应的数据块中。
在某个内存地址上设置软件断点时,用软中断指令替换设置断点处的内存指令后,还要考虑该地址是否曾Cache命中,否则就会造成Cache不一致的问题。Cache数据与主存不一致是指:在采用Cache的系统中,同样一个数据可能存在于Cache中,也存在于主存中,两者数据相同则具有一致性,数据不相同就叫做不一致性。如果不能保证数据的一致性,则程序的运行就会出错。因此实现软件断点必须解决Cache一致性问题。
1.2 MMU引起的断点调试问题
现代计算机系统普遍采用了分级存储与虚拟存储技术相结合的存储管理体系。虚拟存储是在存储层次结构基础上,通过存储器管理部件MMU进行虚拟地址和物理地址自动变换而实现的,对每个编程者是透明的。MMU主要完成以下工作:(1)虚拟地址到物理地址的映射;(2)存储器访问权限的控制;(3)设置虚拟存储空间的Cache特性。
在进行虚实地址转换时,处理器发出虚拟地址给MMU并被锁存于一个内部寄存器中。该虚拟地址与TLB中的虚拟地址标志进行比较。如果匹配,则TLB命中,物理地址可以直接产生;如果不匹配,则进行TLB行未命中处理,这时MMU会产生一个Table walk的动作,从CPU接管地址和数据总线,通过到主存查询页表的方法实现从虚拟地址到物理地址的转换,同时通过替换算法将新的地址信息存于TLB中[1][5]。
启用MMU存储管理单元的处理器上运行的程序采用虚拟地址,调试时设置的断点地址用的是程序中的地址,也即虚拟地址。而CPU访问数据或读取指令的地址为物理地址。通常虚拟地址和物理地址不相同,调试器需用软件实现从虚拟地址到物理地址的转换,才能使断点设置在对应的物理地址上,实现断点调试的功能。
2 存在问题的解决方法
本文以一款SPARC V8结构的处理器为例,详细分析如何解决层次存储系统对断点实现所产生的影响。该处理器包含了一个32位的整数单元(IU)、Cache子系统、SRMMU(SPARC reference MMU)、AMBA总线、存储控制器、UART和Watchdog等。
在该处理器
SPARC V8处理器 cache MMU 断点调试 相关文章:
- 基于SPARC V8 的嵌入式星载计算机(04-09)
- Cache(高速缓存)技术详解(03-06)
- ARM920T的Cache(介绍Cache最好的一篇文章)(03-08)
- 多核处理器的九大关键技术(03-02)
- 一种带Cache的嵌入式CPU的设计与实现(07-30)
- 片上多处理器中Cache一致性协议的验证(07-24)