Zircon内核对象


英文原文快照


Zircon是一个基于对象的内核。 用户空间代码几乎完全通过对象句柄与OS资源交互。 句柄可被认为是具有作用于特定资源的特定OS子系统的活动会话。

Zircon积极地管理以下资源:

  • 处理器时间
  • 内存和地址空间
  • 设备IO内存
  • 中断
  • 信号和等待

应用程序可用的内核对象

IPC

任务

信号

内存和地址空间

等待原语

驱动程序可用的内核对象

内核对象和LK

一些内核对象封装一个或多个LK层的结构,例如,Thread对象封装了thread_t。 但Channel未封装任何LK级别的对象。

内核对象生命周期

内核对象采用引用计数的方式追踪。 大多数内核对象在系统调用期间生成,并通过作为系统调用输出值的句柄将refcount保持在大小为1。 只要句柄对象依然挂载到句柄表上,它就会保持活跃状态。 如果句柄与关闭它们的句柄表相分离(例如,通过sys_close()调用),这将会同时减少内核对象的引用次数。 通常,当最后一个句柄关闭时,内核对象引用计数将减至0,并触发析构函数的运行。

当创建(引用到对象)的新句柄和(通过某些内核代码)获取直接指针引用时,引用值都会增加。 因此,内核对象的生命周期可能比创建它的进程的生命周期更长。

Dispatcher

内核对象以C++的类方式实现,它们派生自Dispatcher并覆盖其已实现的方法。 例如,Thread对象的代码可以在ThreadDispatcher中找到。 有很多代码只关注一般意义上的内核对象,在这种情况下,你看到的名称是fbl::RefPtr<Dispatcher>

内核对象安全

原则上,内核对象没有内在的安全概念,也不进行授权检查,安全权限由每个句柄进行控制。 单个进程可以提供两个不同权限的句柄,它们指向同一对象。

另见

句柄