系统调用

系统调用

  • 定义:系统调用是进程调用操作系统提供的服务的接口

    注:系统调用的实现通常使用 汇编语言 或者 C/C++ 编写

  • 类型:(1) 进程管理 (2) 文件管理 (3) I/O 管理 (4) 信息维护 (5) 进程通信 (6) 保护

  • 执行过程:

    • 进程 传递 系统调用需要的 参数
    • 进程执行陷入指令从用户态切换到内核态
    • 操作系统根据 系统调用接口 查找相应的系统调用
    • 操作系统执行系统调用的实现(操作系统提供的服务)
    • 系统调用执行完毕后提供给进程返回值 (中断处理程序将处理器从操作系统交付给进程)
  • 传递参数:

    • “值传递”:参数 较少 时可以直接存放在 ==寄存器==中

    • “引用传递”:参数 非常多 时 ==内存== 中开辟空间(栈空间)存放参数,寄存器中仅存放这块 空间的地址

      注:Linux & UNIX 采用的就是引用传递

    • 栈传递:不限制 参数的数量每次需要参数时都执行 ==出栈== 操作,填充参数时执行 ==压栈== 操作

      注:Java 虚拟机采用的就是栈结构

  • 系统调用接口

    • 定义:系统调用接口使用表结构索引具体的系统调用

      表结构以 数字编号 + 系统调用 进行构建

    • 执行过程:

      1. 用户程序需要使用系统调用
      2. ==系统调用接口== 根据表结构 ==索引== 当前需要使用的 ==系统调用的编号==
      3. 系统调用使用操作系统提供的服务完成任务
      4. ==系统调用接口== 最后 ==返回== 给用户程序系统调用的 ==返回值和状态==
    0b3f495bf0efb637ad324e08b8f757fa.png
  • 库函数(API)

    425e0c07d210a2d991496432557eb2ed.png
Author: Fuyusakaiori
Link: http://example.com/2021/09/18/os/overview/系统调用/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.