我认为微内核的意义(3)-分析zircon内核中的对象

 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。

发布了24 篇原创文章 · 获赞 3 · 访问量 2335

猜你喜欢

转载自blog.csdn.net/ytfy339784578/article/details/103946543