Symbian OS Internals——Symbian OS内核结构

来源:互联网 发布:易语言远控源码2017 编辑:程序博客网 时间:2024/05/18 03:18

Symbian OS Internals——Symbian OS内核结构
基于这些设计目标,我们设计了这个操作系统,在高层次上看,它的结构就像图1.1所示。在本书中可以看到内核的主要构成。我也包括了另外两个通常被认为是操作系统部分的主要系统组件,这就是在本书中将提到的文件服务器和窗口服务器。本书中将提到这两个部分并介绍其基本功能。

 

1.3.2.1 微内核

微内核的主要功能是提供简便的管理者模式线程,以及对操作进行调度和同步。我们把它命名为微内核,是因为它提供的服务要比大部分的嵌入式实时操作系统(RTOSes)要单纯得多。不过,我们仍然很谨慎地采用了那些服务以足够支持GSM信号栈。

微内核是所有中断最初的处理器,然后它将大部分的中断传递到变量层进行分发。微内核也提供简单的计时功能,比如微内核计时器(NTimer)API——它在指定数量的滴答(tick)后发送一个回调信号,还有睡眠API(NKern::Sleep)——它使当前线程等待指定数量的滴答。

上述的简单同步对象就是微内核的互斥量和微内核信号量。它们都禁止一个以上线程等待它们。

最后,微内核还提供了滞缓函数调用(Defered Function Calls,DFCs)和被奇特命名的立即滞缓函数调用(Immediate Defered Function Calls,IDFCs)。如果想找到更多相关信息,请翻到第六章,中断和异常。

必须提及一个EKA2区别于EKA1的重要差异,那就是微内核和Symbian OS内核都不链接到用户库EUSER。相反地,微内核使用它自己的功能函数库,并且也对内核的其他部分和设备驱动开放这些函数库。

另外一个与EKA1的主要差异与我刚讨论过的那个问题有点关系:EKA2不支持内核侧的退出机制,这意味着错误通过返回一个错误码被反馈——或者使线程panic。

大部分时间里,微内核是抢占式的。它运行的时候常常不被锁定并且可以设置中断,但是我们必须阻止其他的线程在一些代码区中运行,比如线程状态的改变和访问等待列表。我们把这些临界区设计得尽可能的短,并且让它们只能被有限次地执行,其目的是为了维护确定的实时性能。我们通过阻止抢占把临界区保护在微内核里——这是可能地,因为这些临界区很短。通常,我们使用被当成系统锁的互斥量把临界代码保护在Symbian OS内核和内存模型里,但是微内核使用互斥量的唯一场合,就是在移动内存模型上保护调度器的寻址空间开关。

微内核的局限性是什么呢?主要的就是它不执行动态内存分配;也就是它不能分配和释放内存。在所有的微内核操作中,它假定内存已经被操作系统的其他部分预分配了。

 

1.3.2.2 Symbian OS 内核

Symbian OS内核提供了Symbian OS所需要的内核功能,它建立在简易进程和微内核提供的服务的基础上,以提供更多的对象,比如用户模式线程,引用被计数对象和句柄,动态装载库,交互线程以及其他的一些对象。

这些对象还包括一些更复杂的异步对象:Symbian OS信号量和互斥量。Symbian OS信号量是标准的计数信号量,它支持多个等待的线程并根据优先级释放等待的线程。Symbian OS互斥量可以完全嵌套的,一个线程可以同时获得多个资源的互斥量,也可以多次获得同一资源的互斥量。它也支持优先级继承:如果所有等待线程的最高优先级高于独占资源的线程的一般优先级,那么独占资源的线程继承等待线程的最高优先级。

比起微内核,Symbian OS内核允许动态内存分配。它提供一个内核内存分配器——即内核堆,使用内存模型实体提供的低级别内存服务的。Symbian OS完全是MMU不可知论者,我们把所有关于内存的假设都隔离到内存模型里,下面的章节将详细描述这个问题。

Symbian OS内核完全是抢占式的:一个中断可以导致它在执行期的任何时刻重新进行任务调度,甚至在上下文转换期间也可以这样做。这意味着Symbian OS内核可能在线程的持续期间不产生任何作用。

我们使用微内核提供的系统锁互斥量保护多数Symbian OS内核的基本部分,比如:

(i)D线程对象的状态。当Symbian OS线程通过信号量和互斥量相互影响时,它们要经历被系统锁保护起来的状态转换。

(ii)大部分Symbian OS同步对象的状态:IPC(服务和会话),信号量,互斥量,消息队列,发布和订阅所有权。

(iii)当系统锁被设置时句柄集可读但不可写。所有拥有句柄的可执行函数在翻译系统锁的时候都设置了系统锁。


=====================================================================================

说明: 本文由Bequan翻译自Symbian Press的Symbian OS Internals: Real-time Kernal Programming一书。任何人需要转载或引用,请先通过Email(a-pangu@163.com或symbianchn@gmail.com)与Bequan联系,在获得许可后方可转载或引用,否则视为侵权行为。转载或引用时,请在文章中注明上述翻译信息。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/huozi19820418/archive/2007/05/30/1630374.aspx

原创粉丝点击