论文部分内容阅读
提出了一种嵌入式处理器ARM上的操作系统设计方法,该方法将低端的2G地址空间划分为64个32M的地址空间,一个嵌入式任务使用一个这样的32M地址空间。每个任务在逻辑上使用低端的32M地址空间。借助于ARM920T的FCSE硬件机构,低端32M地址空间被重定向到2G地址空间中的一个32M地址空间,然后再经过MMU重定向到物理地址空间。由于这些32M地址空间在2G地址空间中互不重叠,使得任务在切换的时候,TLB和cache中的地址信息保持有效。TLB和cache不必被清空,从而提高了嵌入式系统的性能。
操作系统内核在任务切换的时候,需要进行地址空间的切换。在传统操作系统中,每一个任务拥有一个地址空间,并且每个任务的用户态地址空间的占据了处理器可以寻址所有用户态地址空间,这些用户态地址空间是重叠的,那么在地址空间切换的时候,转换查询表(TLB,Translation Look-aside Buffer)和虚拟缓存(virtual cache)中的地址信息对于换入的任务完全是无效信息,需要被全部清空,这个清空过程的时间代价很大。
为了较少或者避免操作系统在任务切换时候情况TLB和虚拟缓存的带来的时间消耗,在单地址空间中,系统只有一个巨大的地址空间,比如说,在64位平台上,这个地址空间可以是264字节大小。系统中的所有任务,包括内核都共享这个地址空间,它们各自占据这个地址空间中的一个段,这些段互不重叠。所以,当任务切换的时候,也就没有了地址空间切换的过程,所有缓存在TLB和虚拟缓存中的地址信息对所有任务都是有效的。然而,单地址空间也有一些问题,既然所有任务互不重叠的存在于单地址空间中,那么每个任务的虚拟地址空间起始位置都是不一样的,对于程序员而言,任务应该始终是在一个固定范围的地址空间中运行的。其中一个解决方法是在任务编译的时候加入重定向信息,在任务加载的时候,由操作系统根据任务的重定向信息将任务的地址空间重定向到特定的位置;另外一个解决方法是借助于特殊的硬件地址翻译机构,将任务的地址空间重定向到单地址空间中某个段,再由传统的内存管理单元(MMU,Memory Management Unit)将单地址空间中的地址重定向到物理地址空间。ARM920处理器平台上提供了快速上下文切换扩展(FSCE,Fast ContextSwitching Extension),该硬件机构处在处理器核心与MMU之间,负责处理器给出的寻址地址到MMU看到的虚拟地址之间的一次翻译。
根据这个思路,修改了一份嵌入式操作系统的常用引导程序vivi,加入了3个演示任务,这3个任务按照时间片轮转的策略被调度,在上下文切换的时候,ARM920T的协处理器的进程标识寄存器的值不再是默认值0,而是被设置为当前即将投入运行的任务的进程标识,从而激活FCSE对任务的地址空间进行一次重定向,于是,3个任务的地址空间根据各自的进程标识被映射到单地址空间中互不重叠的位置。代码编译连接后,运行在skyeye虚拟上。