EKA2(Kernel Architecture 2)是Symbian OS中最主要的硬件及内核服务模块,它管理着手机的CPU、内存资源,并为设备驱动提供一个架构,使其对相应的硬件资源进行管理。Symbian OS的内核是分层结构,这使得其可以移植到不同的硬件平台,移植时必须要实现ASSP/Variant,这一层为内核提供最基本的专用硬件服务。内核还允许创建附加层,称为个性化,用来模拟传统的实时操作系统,从而使得这些操作系统的程序可以在Symbian OS上运行。
EKA2包括以下几部分:
- Nanokernel: 主要用来处理最基本的线程调度、同步及时钟功能。
- Symbian OS kernel: 利用Nanokernel提供的服务给Symbian OS提供系统要求的核心功能,包括线程、进程、内存块、进程内通信等操作系统对象。
- Memory model: 为每个进程提供地址空间以及进程内的数据传输、内存分配及映射。它封装了对硬件内存管理单元(MMU)的访问,从而使得Nanokernel和Symbian OS kernel不依赖MMU。
- Variant DLL:提供了Kernel所需的硬件相关服务,例如时钟脉冲中断和实时时钟访问。系统基于ASSP(application-specific standard product,专用标准产品),并有一个ASSP DLL来分担Variant Dll 的职责。板载支持包BSP为相关硬件提供Variant库。
- 扩展及设备驱动:用来对外设进行控制,并提供外设和Symbian OS之间的接口。
下图显示了这些部分在系统中的位置:
图1 内核架构关系图(源:SDL)
这些部分的代码实现分为硬件无关的和硬件相关的。硬件相关的代码又分为不同的层次以助于移植。这些层次包括独立层(Independent)、平台层(Platform)、模型层(Model)、CPU层及两个外设层ASSP和Variant。其中独立层(Independent)提供了60%的Nanokernel和Symbian OS Kernel的基本代码;平台层(Platform)主要是模拟器或实际设备的可执行镜像,这一层只有Memory model,其中分为模拟器和实际设备两类;模型层(Model)为每个进程的内存提供支持;CPU层根据OS中处理器的不同提供不同的代码,Nanokernel、Memory model、Symbian OS Kernel在这一层都有代码,汇编代码属于这一层。如下图所示:
图2:内核源码分层图(源:SDL)
从上图可以看出,Nanokernel代码实现一部分在Independent层,一部分在CPU层;Symbian OS Kernel代码实现一部分在Independent 层,另一部分也在CPU层;而Memory model在Platform、Model、CPU三层均有实现。
另外,Nanoknernel在CPU层包含大部分核心CPU架构的实现,诸如异常/中断处理、上下文切换机制等。还包括一些概念上是独立层功能的东西,但处于性能考虑在这一层以汇编实现,如延迟调用(DFC)处理和基于ARM的时钟处理。Memory model在CPU层的实现是为CPU专用而实现。
Variant提供了NanoKernel和Symbian OS Kernel所期望的控制专用硬件实现。