1.3.4 .1 设计目标
模拟器有两个主要的用处——开发Symbian OS软件和演示这个软件。
第一个用例对内核服务提出了更多的要求,所以我们专注于什么时候草拟出需求。在最高级别上,它给我们提供模拟器的两个关键需求:
1、它需支持在主机平台上使用标准工具进行开发和调试。
2、它应当尽可能真实地提供Symbian OS在目标硬件上的模拟。
这些需求看上去是有冲突的,因为第一个需求要求使用主机平台(直到现在,基本上还是Windows)里的实体,但它并不以同样的形式存在于“真实的”Symbian OS上,比如:
1、代码级别的调试要求目标代码存储于标准Windows可执行文件里,这些文件可被Windows调试器识别的,而且通过标准Windows装载器导入。
2、调试多线程软件要求Windows调试器识别那些线程,这意味着我们应当把被模拟的线程实现为Windows线程。
最后,我们决定了实现EKA2模拟器,并把它作为EKA2内核的一部分,而没有试图让Symbian OS内核API工作于Win32 APIs之上。我们尽可能少地使用了Windows,以在模拟器和真实的手机之间共享最多的Symbian OS代码和行为。
实际上,看看图1.3,比较运行于真实设备和Win32模拟器上的代码,会发现大量的共同之处。它们都包含同样的核心内核代码,从Symbian OS内核到微内核。在更底层,专用体系结构,即微内核层,我们模拟成“Win32” CPU,而不是ARM CPU或者X86 CPU。这意味着对于不同的处理器来说是一个高效的接口。比如,模拟器有与真实设备上几乎同样的线程和调度。
图1.3 重用模拟器代码
不过,内存模型在模拟器和真实手机上就完全不同了。在模拟器上,它一直是内存模型的特殊形式,它知道在创建进程时要载入的不同的映像文件。这些都是标准的Win32 PE 可执行文件,这就满足了前面的代码级别调试的需求。理论上,这个方法使得我们在Windows上实现模拟比在硬件平台上更简单。
1.4 总结
我希望这章已经给了你Symbian OS内核在设计和历史方面的概览。下面,我应当把Symbian OS作为真实硬件的平台来看一看了。
=====================================================================================
说明: 本文由Bequan翻译自Symbian Press的Symbian OS Internals: Real-time Kernal Programming一书。任何人需要转载或引用,请先通过Email(a-pangu@163.com或symbianchn@gmail.com)与Bequan联系,在获得许可后方可转载或引用,否则视为侵权行为。转载或引用时,请在文章中注明上述翻译信息。