Zephyr内核——用户模式——系统调用

系统调用

用户线程运行比监督线程少的特权:某些CPU指令可能不被使用,它们只能访问内存映射的有限部分。系统调用(可能)允许用户线程执行对它们不直接可用的操作。

在定义系统调用时,确保只通过系统调用接口来访问API的私有数据是非常重要的。私有内核数据不应该直接提供给用户模式线程。例如,k_queue api被故意不提供,因为它们直接将队列的登记信息存储在队列缓冲区中,从用户模式可见的登记信息。

允许用户注册在监督模式下运行的回调函数的api不应该作为系统调用公开。仅保留这些选项以供监控模式访问。

本节介绍了如何声明新的系统调用,并讨论了与它们相关的一些实现细节。

组件

所有系统调用都具有以下组件:

  • 一个前缀为__syscall的C原型。它将在include/下的某个头中声明,或在另一个SYSCALL_INCLUDE_DIRS目录中声明。这个原型从来不是手动实现的,而是由scripts/gen_syscalls.py脚本创建的。生成的是一个内联函数,它要么直接调用实现函数(如果从监督模式调用),要么通过特权提升和验证步骤(如果从用户模式调用)。
  • 一个实现函数,它是系统调用的实际实现。如果从用户模式调用,实现函数可以假设传入的所有参数都已被验证。
  • 一个验证函数,它包装实现函数,并对传入的所有参数进行验证。
  • 一个解编组函数,它是一个自动生成的处理程序,必须包含在用户源代码中。

C原型

C原型表示如何从用户模式或监督模式中调

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值