2.2.3 A RM
ARM已经进行了20多年基于RISC的CPU,并且成功地授权世界上所有的半导体厂商把它包含进他们自己的SoCs里去。Intel已经授权了第五版的ARM体系结构以建造软件兼容的XScale微处理器。
随着ARM连续开发了几代CPU,他们添加进了一些新的指令和特性,也剥离一些很少用到的旧特性。带有额外字母的ARM结构版本号,定义了特性集和指令集,以及MMU的操作,缓存和调试。
Symbian OS要求CPU支持ARM v5TE或更高的版本。ARM v5TE是所有Symbian软件的基线指令集。为了保证在多种电话上的兼容性,应用程序代码必须使用ARM v5TE指令。(目前的EKA1电话使用ARM v4T结构。)
ARM v5TE意味着什么呢?它是具有THUMB指令集和加强DSP指令集的ARM结构的第五版。ARM v5TE指令集的定义可以在ARM Architecture Reference Manual²中找到。
²ARM Architecture Reference Manual, 2nd edn by David Seal. Addison-Wesley Professional.
ARM核心和当前与Symbian OS电话工程兼容的SoCs包括:
Core | Architecture | SoC |
ARM926 | v5TE | Philips Nexperia PNX4008 |
ARM926 | v5TE | Texas Instruments OMAP 1623 |
Xscale | v5TE | Intel XScale PXA260 |
ARM1136 | v6 | Texas Instruments OMAP 2420 |
THUMB是在v4T结构中被引进的。它是ARM指令集的16位子集,被设计出来以解决全32位指令的恶劣代码密度的共同RISC问题。通过使用16位解码方案,THUMB编译的代码大约只相当于ARM的70%,但它只需要另外25%的代码去完成这项工作。使用BLX指令进行模式转换,THUMB和ARM代码可以在同一个系统上相互作用。
Symbian OS上大部分的代码都是作为THUMB编译的,这是因为ROM的大小与Symbian OS电话的成本密切相关。内核是为ARM构筑的,以提升性能,而且它还要求一些THUMB中没有包含的指令,比如用来访问MMU和CPU状态控制寄存器的协处理器指令。应用程序的代码也可以通过把ALWAYLS_BUILD_AS_ARM添加到应用程序的MMP文件中而为ARM构筑。Symbian为算法的代码作这些工作,因此,比如为ARM编译的JPEG解码器运行速度要提高30%。
增强的DSP指令使得更高效的16位信号处理算法的实现可以使用一个ARM CPU。这些指令并不会在普通的模块代码中被使用,而且在Symbian OS上执行时几乎不会产生冲突。
2.2.4 内存管理单元(MMU)
Symbian OS在开放OS之内要求一个完整的内存管理单元协调和强制执行对虚拟内存的使用。我在第七章,内存模型,讨论MMU的使用。
MMU位于CPU和系统总线之间,它把软件使用的虚拟地址转换为硬件所能理解的物理地址。在每次内存访问的时候,这种查找必须发生。
MMU把扁平且连续的物理内存分割为页面,通常这些页面都很小,只有4KB,虽然也有更大的64KB的页和1MB的片段(section)。
Symbian OS虚拟内存表把分散的物理内存页重新排列到清晰有序的虚拟内存空间。重排信息通过使用页表被压缩到MMU里。页表是一种层次形的数据,它以一种稀疏的风格编码整个4GB的虚拟地址空间。在ARM系统上,页表有两个层次,即页目录和页表。
在相似情况下,当一个物理地址由总线控制器解码,一个虚拟地址之内的位域被MMU解码到内存页里去,会被解码为页目录、页表和索引。 7.2.1 节解释了这部分的细节。
位 | 31->20 | 19->12 | 11->0 |
地址解码 | 头12位映像到页目录 | 中间8位映像到页表 | 底部12位是页内的偏移量 |
虚拟地址编码为小的页
每次内存访问MMU都要执行从虚拟地址到物理地址的查找,以取得总线地址并验证页操作的合法性。根据虚拟地址查找物理地址的过程称为“走读(walking)”页表。这一过程需要花费一些时间访问两次内存,即读取页目录和紧随其后的读取页表。
为了增加地址翻译的速度,最新的MMU缓存在一个翻译后援缓冲器(Translation Look-aside Buffer, TLB)里查找结果。如果在TLB里找不到从虚拟到物理的查找,MMU会使走读表的硬件执行一次新的虚拟查找,而且它会把结果存储到一个TLB条目里。
如果页表发生了改变,TLB也必须被清空。在上下文转换、调试期或上传代码的时候,会发生这种情况。
启动时,CPU将使用物理地址运行,并且引导代码会构筑页表的初始化设置。当MMU开始工作了,CPU会切换到虚拟内存操作,并为内核引导的时序作准备。
=====================================================================================
说明: 本文由Bequan翻译自Symbian Press的Symbian OS Internals: Real-time Kernal Programming一书。任何人需要转载或引用,请先通过Email(a-pangu@163.com或symbianchn@gmail.com)与Bequan联系,在获得许可后方可转载或引用,否则视为侵权行为。转载或引用时,请在文章中注明上述翻译信息。