Zircon内核是基于对象的,用户态差不多仅通过对象Handles与OS资源交互,一个Handle可以认为是一个与OS特定资源的子系统范围的活跃的回话。 Zircon动态管理的资源有:处理器时间;内存和地址空间;设备I/O内存;中断;信号和等待。 内核为应用提供的对象: IPC 通道;Socket;FIFO。 任务 进程;线程;JoB;任务。 信号 事件;事件对;Futex。 内存和地址空间 虚拟内存对象;虚拟内存地址空间;总线事务发起者(Bus Transaction Initiator BTIs,表示一个设备的总线主/DMA能力,可以被用于赋予设备访问内存的能力)。 等待:端口 内核为驱动准备的对象 中断;资源;log 内核对象和LK 一些内核对象包含一到多个LK级别的结构体,如线程对象包含一个thread_t,而通道对象则不包含任何LK级别的对象。 内核对象生命周期 内核对象是引用计数的;大多数内核对象由syscall产生,引用计数大于0则保持生存,引用计数由绑定作为syscall输出的handle值。Handle对象的保持存活需要附属于一个Handle表;关闭Handle则会从Handle表中删除对应Handle(如通过sys_close()),同样会减少内核对象的引用计数。一般来说,当最后一个关联到内核对象的Handle关闭,内核对象的引用计数将会归0,然后内核对象的析构函数将会运行。 当新Handle和(内核中)直接指向此对象指针的创建将引起引用计数的增加;因此一个内核对象的生命周期可能比创建它的进程更长。 调度器 内核对象由C++的类实现,从调度器(Dispatcher)导出,并覆盖其实现的方法。因此,线程对象的代码可在线程调度器(ThreadDispatcher)找到,有大量的代码仅关注内核对象的一般意义,对于这种情况可以到fbl::RefPtr<Dispatcher>查找。 内核对象安全 原则上,内核对象没有对安全的固有概念,不做认证检查,安全权限由Handle持有,一个进程可以含有一个对象的两个不同权限的Handle。 |
我认为微内核的意义(3)-分析zircon内核中的对象
最新推荐文章于 2024-12-02 17:47:50 发布