本质上是:
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 流动
夜雨聆风