我认为微内核的意义(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。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值