系统调用学习卡片

📌 什么是系统调用?
📌 系统调用定义
  • 系统调用是操作系统提供给应用程序请求内核服务的编程接口
  • 作用:作为用户程序和硬件之间的桥梁,实现资源管理和服务请求
  • 接口类型:
    • 命令接口:包括GUI和命令行接口,面向终端用户
    • 程序接口:由系统调用组成,面向应用程序开发者

层级关系:

  1. 模拟硬件层
  2. 操作系统层(提供系统调用)
  3. 高级语言库函数层
  4. 应用程序层
🖨️ 为什么需要系统调用?
🖨️ 系统调用的必要性

打印机资源占用案例:

  • 场景:WPS和Word两个进程同时请求打印服务
  • 问题:打印内容混杂(先打印一行WPS内容,再打印一行Word内容)
  • 原因:进程对共享资源(打印机)的无序竞争访问
  • 解决方案
    • 操作系统统一管理共享资源
    • 通过系统调用实现资源的互斥访问
    • 内核协调处理并发请求

关键结论:
系统调用是保证资源共享安全性的必要机制

🔄 系统调用 vs 库函数
🔄 系统调用与库函数的区别

关键区别:

提供者
系统调用:操作系统内核
库函数:高级语言
特权需求
系统调用:需要特权指令的功能必须通过系统调用
库函数:部分无需特权
封装关系
系统调用:底层接口
库函数:可能封装系统调用或完全用户态实现

示例:

  • 必须使用系统调用:文件创建、内存分配、设备I/O、进程控制等
  • 无需系统调用:取绝对值、三角函数等数学运算
⚙️ 系统调用执行过程
⚙️ 系统调用执行步骤
  1. 传参阶段:通过寄存器传递参数(系统调用类型和具体参数)
  2. 陷入指令:执行trap/访管指令(非特权指令但会引发中断)
  3. 权限转换:CPU从用户态切换到内核态
  4. 入口程序:执行系统调用对应的内核处理程序
  5. 服务执行:内核完成请求的服务
  6. 返回恢复:切换回用户态继续执行应用程序

关键细节:

  • 陷入指令是用户态到内核态的唯一合法入口
  • 参数1通常指明系统调用类型
  • 系统调用入口程序本质是特殊的中断处理程序
🗂️ 系统调用分类
🗂️ 系统调用功能分类

典型功能分类:

  • 设备管理:请求/释放设备
  • 文件管理:创建/删除文件
  • 进程控制:创建/终止进程
  • 进程通信:消息传递
  • 内存管理:分配/回收内存

核心要点:

  • 所有共享资源操作必须通过系统调用实现
  • 陷入指令的三个名称:trap指令/访管指令/陷入指令
  • 系统调用请求在用户态发起,处理在内核态完成