12.4.2 Symbian操作系统的寻址方式

由于Symbian操作系统是32位系统,因此寻址范围可以达到4GB。它与更大的系统一样使用同样的抽象方式:程序必须使用由操作系统映射到物理地址的虚拟地址。和大多数系统一样,Symbian操作系统把内存划分为虚拟页面和物理页框。页框的大小通常是4KB,但也是可变的。

因为最大具有4GB的地址空间,因此4KB的页框大小就意味着具有超过100万条目的页表。Symbian操作系统只有有限的内存,因此不能拿出1MB内存专用于页表。而且,对这么大的一张表的搜索和访问对系统都是很大的负担。为了解决这个问题,Symbian操作系统采用2级页表方式,如图12-2所示。称作页面目录的第一级提供一个到第二级的链接,可以使用虚拟地址的一部分进行检索(前12位)。该目录驻留在内存中,由TTBR(转换表基址寄存器)指向。每个目录条目指向第二级,也就是页表的集合。这些页表提供到某一内存中特定页的链接,由虚拟地址的一部分检索(中间8位)。最后,虚拟地址的低12位索引检索页的字。在这一虚拟-物理地址映射计算中,硬件起辅助作用。尽管Symbian操作系统不能假定任何辅助硬件的存在,但是在大多数体系中这一映射转换都是由MMU完成的。比如ARM处理器就具有扩展的MMU,带有转换后备缓冲器来辅助地址计算。

阅读 ‧ 电子书库
图 12-2 Symbian操作系统使用2级页表来减少页表访问时间和占用空间

当一个页面不在内存中时,就会出现错误状态,这是因为当一个应用程序启动的时候所有的应用程序内存页面都应该已经被加载(没有请求页面调度)。链接到可执行应用中的小的桩代码显式地把动态加载库加载到内存中,而不是通过页失效方式。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

Symbian操作系统中尽管没有页交换,但内存却不可思议地是动态的。应用程序通过内存进行上下文切换,同时正如上面所说的,当应用程序开始执行时将它们所需要的存储空间加载到内存中。每个应用程序需要的内存页面能够从操作系统中静态请求进入内存。对于堆(更确切地说是动态空间)是有界限的,因此静态请求也可以由动态空间来实现。从一个空闲页框的列表中分配页框给页面;如果没有空闲页框,那么就会出现错误。正在使用的页框不能被刚到的应用程序的页面替换,即使该页框是针对当前没有执行的应用程序的。这是由于Symbian操作系统中没有页交换,同时因为十分有限的闪存空间只给用户文件使用,也就没有空间来复制被收回空间的页面。

实际上Symbian操作系统使用的存储实现模型有四种不同的版本。每种模型都是为了特定类型的硬件配置。一个简要的列表如下:

·移动模型:该模型是为早期的ARM体系结构设计的。移动模型中的页目录是4KB长,每个条目4字节,给出一块16KB大小的目录。通过与页框相关的存取位和使用域来标志存储器访问的方式保护存储页面。域信息记录在页表目录,MMU为每个域实现访问权限。尽管没有明确使用分段,但是在内存布局上有如下结构:有用户分配数据的数据区,也有内核分配数据的内核区。

·复合模型:该模型是为ARM6或者之后的体系开发的模式。这些版本中的MMU与以前版本使用的不同。例如,由于页表目录能分成两部分,每个部分索引页表的不同部分,因此需要不同的处理方式。这两部分分别用作用户页表和内核页表。ARM体系中新的版本修订并增强了每个页框的访问位,但是不赞成使用域的概念。

·直接模型:该模型假定根本就没有MMU。这一模型很少使用,并且在智能手机上禁止使用。没有MMU会导致严重的性能问题。由于某些原因,MMU被禁止的一些场合中该模式比较有用。

·仿真模型:该模型是为了支持基于windows宿主机的Symbian操作系统仿真器。仿真器与实际的目标CPU几乎没有区别。仿真器作为一个单独的Windows进程运行,因此地址空间被限定为2GB,而不是4GB。为仿真器提供的所有内存可以被任何Symbian操作系统进程访问,因此不具有内存保护。Symbian操作系统库以Windows格式的动态链接库形式提供,因此Windows处理内存的分配和管理。