Zephyr内核——用户模式——内核对象

本文介绍了Zephyr内核中用户模式下的内核对象,包括核心内核对象、线程堆栈和驱动程序实例。讨论了对象放置、动态对象的创建与释放、权限管理以及初始化状态。还提到了如何创建新的内核对象类型和配置选项。

内核对象

内核对象可以是三类数据之一:

  • 一个核心内核对象,如信号量、线程、管道等。
  • 一个线程堆栈,它是一个z_thread_stack_element的数组,用K_THREAD_STACK_DEFINE()声明
  • 属于已定义的子系统集之一的设备驱动程序实例(const结构体设备)

已知的内核对象和驱动程序子系统的集合在 include/kernel.h中被定义为k_objects

内核对象对用户线程完全不透明。用户线程在进行API调用时使用到内核对象的地址,但可能永远不会取消对这些地址的引用,这样做将导致内存保护故障。所有的内核对象都必须放置在用户线程无法访问的内存中。

由于用户线程可能不直接操作内核对象,因此它们的所有使用都必须通过系统调用。为了对内核对象执行系统调用,由系统调用处理程序函数检查内核对象地址是否有效,以及调用线程是否有足够的权限来处理它。

对对象的权限还具有对对象的引用的语义。这对于某些执行临时分配的对象api或者本身已经从运行时内存池分配的对象来说非常重要。

如果对象丢失所有引用,可能会发生两个事件:

  • 如果对象具有关联的清理函数,则可以调用清理函数以释放对象正在使用的任何运行时分配的缓冲区。
  • 如果该对象本身是动态分配的,则将释放该对象的内存。

对象放置

仅被监督线程使用的内核对象没有任何限制,可以位于二进制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值