操作系统系统调用执行过程

步骤1:传递系统调用参数

  • 应用程序在用户空间中准备系统调用所需的参数

  • 这些参数通常通过寄存器或栈传递给内核

  • 例如,文件读写调用需要传递文件描述符、缓冲区地址、读取字节数等

步骤2:执行陷入(trap)指令

  • 这是从用户态切换到内核态的关键一步

  • 陷入指令(如x86的int 0x80syscall)会触发一个软中断

  • 发生的重要变化:

    1. CPU模式从用户态切换到内核态

    2. 保存当前程序计数器(返回地址)

    3. 保存处理器状态(寄存器等)

    4. 跳转到预先定义的中断处理程序

步骤3:执行相应的服务程序

  • 操作系统内核根据系统调用号查找对应的服务程序

  • 内核验证参数的有效性和安全性

  • 在内核态执行请求的服务(如文件操作、进程管理等)

  • 这个过程中,内核拥有完全的硬件访问权限

步骤4:返回用户态

  • 服务程序执行完毕后,恢复之前保存的处理器状态

  • 将控制权交还给用户程序

  • CPU模式从内核态切换回用户态

  • 系统调用的结果通过寄存器或特定内存位置返回

相关推荐
葡萄成熟时 !19 小时前
JAVA 常用API学习笔记
java·笔记·学习
DevOpenClub20 小时前
个人公开市场研究笔记功能需求文档
笔记
不会代码的小猴1 天前
7. JSON
开发语言·c++·笔记·qt·算法·json
GGMM7891 天前
富士 EP‑3955D 变频器主板维修调试笔记
笔记·变频器·变频器维修
今儿敲了吗1 天前
CN——网络层(上)
网络·笔记
PC2005-cloud1 天前
Go学习笔记:基本概念与项目结构——GOPATH、Go Modules 与常用命令
笔记·学习·golang
_Narcissus_1 天前
排序算法总结表格
c语言·数据结构·c++·笔记·算法·排序算法·总结
Shell运维手记1 天前
Linux (挂载|rpm|yum|源码编译)
linux·运维·笔记·网络协议·bash
2kπ1 天前
QT开发笔记
开发语言·笔记·qt
江屿风1 天前
【STM32基础篇】【嵌入式生态问题及历史追溯】流食般投喂
大数据·开发语言·人工智能·笔记·stm32·嵌入式硬件