OpenHarmony之系统调用

OpenHarmony之系统调用 | DD'NotesOpenHarmony之系统调用背景对于运行L0系统的硬件一般是mcu,资源有限,L0系统没有区分内核态和用户态,所有的代码都在内核态运行,所以不需要系统调用L2系统用的是Linux内核,所以系统调用跟Linux Kernel的是一样的。可以参见我之前的博文Linux之系统调用 所以我们主要来看看L1系统中系统调用机制的是怎么实现的。 后面的分析基于如下版本: OpenHarmony v3.3.icon-default.png?t=N7T8https://notes.z-dd.online/2023/11/06/OpenHarmony%E4%B9%8B%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8/

OpenHarmony之系统调用
背景
对于运行L0系统的硬件一般是mcu,资源有限,L0系统没有区分内核态和用户态,所有的代码都在内核态运行,所以不需要系统调用
L2系统用的是Linux内核,所以系统调用跟Linux Kernel的是一样的。可以参见我之前的博文Linux之系统调用

所以我们主要来看看L1系统中系统调用机制的是怎么实现的。

后面的分析基于如下版本:

OpenHarmony v3.3.2
musl v1.2.0
L1系统调用
对于运行L1系统的硬件一般集成了MMU,而且CPU有特权级别状态(状态寄存器的某些位),可以实现进程之间的隔离、内核态和用户态的隔离。系统调用就是在有内核态和用户态隔离的操作系统上,用户态进程访问内核态资源的一种方式

用户态c库
通常我们的应用不会直接调用系统调用,而是通过c库的库函数来间接调用。

OpenHarmony上层使用的C库是musl libc, c库的一些函数接口调到最下面就是系统调用接口了。

通过third_party/musl/src/internal/syscall.h文件中,各种宏的展开,最终都会变成类似与__syscall3等这样的函数(后面可能跟着不同的数字,代表传递参数的个数),而 musl libc 对于这些函数在不同硬件架构上有着不同的实现,这里以arm为例,

代码路径:third_party/musl/arch/arm/syscall_arch.h
主要代码:


作者: Shell
链接: https://notes.z-dd.online/2023/11/06/OpenHarmony%E4%B9%8B%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8/
来源: DD'Notes
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pintos是一个教学用的操作系统,它是从头开始构建的,并且学生可以在其中进行内核修改项目。其中一个重点项目是实现系统调用系统调用是操作系统提供给应用程序的接口,它们允许应用程序请求操作系统的服务。在Pintos中,要完成系统调用的实现,需要做以下几个方面的工作: 首先,需要在内核中定义系统调用的接口。这些接口包括系统调用编号以及传递给系统调用的参数。我们可以使用枚举类型来定义不同的系统调用编号,并根据系统调用的参数类型定义相应的结构体。 其次,需要在内核中实现这些系统调用的功能。这需要在内核代码中编写实现系统调用的函数,这些函数会根据不同的系统调用编号来执行不同的操作。例如,如果是系统调用fork,就需要在内核中创建一个新的进程,并将其加入到进程管理的数据结构中。 接下来,需要在用户程序中使用系统调用。用户程序可以通过使用特定的汇编指令将系统调用的参数传递给内核,并通过中断的方式触发系统调用。在Pintos中,可以使用内置的syscall库来执行系统调用操作。 最后,需要在内核中处理系统调用的中断。当用户程序触发系统调用时,硬件会产生一个中断信号,操作系统需要捕捉到这个中断并作出相应的处理。在Pintos中,可以使用中断处理程序来捕捉和处理系统调用的中断。 通过上述步骤,我们就可以在Pintos中实现系统调用的功能。实现系统调用的项目是一个很好的学习机会,它可以帮助我们理解操作系统与应用程序的交互方式,并深入了解内核的工作原理。同时,通过这个项目,我们也可以提高我们的编程能力和操作系统的理解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值