乐于分享
好东西不私藏

Symbian OS源码解析

Symbian OS源码解析

本质上是:

Symbian OS 最核心的一部分底层源码。

里面包括:

  • 内核
  • 实时调度
  • 文件服务
  • 用户态库
  • HAL
  • BSP
  • Bootloader
  • 驱动框架

它不是一个单独功能模块。

而是:

一整套手机操作系统底层基础设施。


一、整体架构核心思想

这个系统最核心的思想:

Message + Event + Async

也就是:

消息驱动整个系统

系统里的很多行为:

不是直接函数调用。

而是:

发送消息等待事件异步回调

这是整个设计的灵魂。


二、目录结构解析

主要结构:

brdbootldr/bsptemplate/halservices/kernel/kerneltest/userlibandfileserver/

三、kernel/

重点目录:

kernel/eka

这里是真正核心。

里面负责:

  • Thread
  • Process
  • Scheduler
  • IPC
  • Interrupt
  • Memory
  • Synchronization

四、最底层:

nanokernel

目录:

nkern/

这是系统最底层调度核心。

负责:

  • 中断响应
  • 线程切换
  • 优先级调度
  • spinlock
  • timer

这里能看到:

“实时系统” 的真正核心。


五、DThread / DProcess

源码里会大量看到:

DThreadDProcess

它们是:

内核对象。

代表:

  • 线程
  • 进程

系统调度、权限、资源管理:

都围绕这些对象进行。


六、最重要部分:

Message Passing

这个系统里:

大量模块之间通信:

不是直接调用。

而是:

message passing

也就是:

消息传递。

你会看到:

SendReceive()

这样的接口。

本质:

是:

Client 发消息Server 处理消息

七、为什么 message 如此重要

因为这个系统核心哲学是:

Everything is asynchronous

也就是:

一切尽量异步。

例如:

读取文件。

不是:

调用函数后一直卡住等待

而是:

发送请求继续运行等通知回来

这会降低:

  • 内存占用
  • 阻塞
  • CPU 空转

非常适合:

低功耗设备。


八、为什么它特别像 GUI

因为:

整个系统本身:

就是:

Event Driven

系统大量逻辑:

依赖:

Event Loop

驱动。

也就是:

收到事件分发消息处理回调

这和 GUI 的本质非常接近。


九、Active Object

最经典设计

搜索:

CActiveCActiveScheduler

这是整个系统非常核心的设计。

作用:

用极少线程处理大量异步任务。

核心思想:

一个线程多个异步请求统一调度

而不是:

一个任务一个线程

十、为什么 Active Object 很厉害

因为当时设备:

  • RAM 很小
  • CPU 很弱
  • 电池容量低

如果:

每个IO一个线程

系统很快会崩。

所以它采用:

callback + event loop

方式。

这是整个系统能运行在小内存设备上的关键。


十一、userlibandfileserver/

这个目录非常关键:

userlibandfileserver/

里面包含:


User Library

用户态接口封装。

例如:

  • Thread API
  • IPC API
  • Memory API

File Server

这里非常经典。

文件系统:

不是直接放在核心层。

而是:

独立文件服务。

应用程序:

通过消息:

连接 File Server发送文件请求接收结果

实现:

  • open
  • read
  • write

等操作。


十二、Window Server

继续往下研究:

wserv

会发现:

GUI 本质也是:

Message Dispatch

例如:

  • 按键
  • 触摸
  • 重绘
  • 焦点切换

全部是:

event → message → dispatch

十三、HAL 与 BSP

目录:

halservices/bsptemplate/

HAL

硬件抽象层。

负责统一:

  • LCD
  • UART
  • RTC
  • GPIO

接口。


BSP

板级支持包。

负责:

适配具体硬件平台。


十四、Bootloader

目录:

brdbootldr/

负责:

上电启动初始化内存加载核心

十五、为什么这个源码很值得研究

因为里面能看到:

“消息驱动系统” 的完整实现。

包括:

  • Message Queue
  • Dispatcher
  • Event Loop
  • Async IO
  • Active Object
  • GUI Event
  • IPC

这些核心思想。


十六、最值得重点看的部分

建议顺序:


第一部分

Kernel Object

看:

kernel/eka/kernel

重点:

  • DThread
  • DProcess
  • DObject

理解:

系统对象模型。


第二部分

IPC

搜索:

RMessageSessionServer

理解:

Message Passing。


第三部分

Active Object

搜索:

CActiveCActiveScheduler

这是整个系统灵魂。


第四部分

File Server

目录:

userlibandfileserver/fileserver

理解:

文件系统为什么也能做成消息服务。


第五部分

Window Server

研究:

wserv

理解:

GUI 为什么本质是事件分发。


十七、这套源码真正震撼的地方

它会让你发现:

一个复杂系统,完全可以靠:

  • Message
  • Event
  • Dispatcher
  • Async

组织起来。

而不是:

大量阻塞函数调用

十八、一句话总结

这套源码本质上是:

“一个把 Message Passing / Event Loop / Async IO 推到极致的事件驱动系统。”

它的核心世界观是:

一切都是消息一切都是事件一切都通过 dispatcher 流动