系统调用过程

news/2025/2/26 8:42:27

注意:本系统调用过程基于32位操作系统

中断服务程序的寻址过程

在这里插入图片描述
1.用户态程序产生系统调用write();
2.产生中断指令ENTER_KERNEL(int $0x80=128),CPU收到中断指令去查询中断向量表,找出中断号0x80对应的中断服务程序的内存基地址(0x003498)
3.程序计数器PC设置为0x003498,CPU就会执行对应的中断服务程序(entry_INT80_32)

系统调用用户态发生的事情

在这里插入图片描述

1.用户态程序产生系统调用write()

2.保存函数参数到CPU寄存器(ebx、ecx、edx....)

3.通过方法名write()查看用户态下的文件找到对应的系统调用号(3),并将系统调用号存储到CPU的EAX寄存器中

4.通过中断指令ENTER_KERNEL进入到内核(见中断服务程序的寻址过程)

系统调用内核态发生的事情

在这里插入图片描述
经过上面系统调用用户态发生的事情这一节我们知道,当前CPU通过EAX寄存器保存了系统调用号,其它寄存器保存了函数参数
1.将用户态寄存器保存到内核pt_regs缓存中(也就是当前CPU寄存器的值)

2.在系统调用表中(sys_call_table),根据EAX寄存器传到内核态的值,找到内核对应的系统调用函数(sys_write)

3.执行系统函数(函数参数已经通过寄存器传到了内核态)

4.函数执行完毕,返回值写入CPU的Eax寄存器,通过指令iret根据pt_regs缓存恢复用户态程序

整体流程

在这里插入图片描述
注意:切换到内核态时,还会在pt_regs缓存中缓存栈指针,程序计数器PC,方便内核态切换回用户态时,恢复系统调用前的上下文信息,CPU可以接着下一条指令执行,函数也可以接着执行


http://www.niftyadmin.cn/n/5868407.html

相关文章

C# string转unicode字符

在 C# 中,将字符串转换为 Unicode 字符(即每个字符的 Unicode 码点)可以通过遍历字符串中的每个字符并获取其 Unicode 值来实现。Unicode 值是一个整数,表示字符在 Unicode 标准中的唯一编号。 以下是实现方法: 1. 获…

[H滑动窗口] lc239. 滑动窗口最大值(模拟+数据结构+单调队列+滑动窗口模板题)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接:239. 滑动窗口最大值 相关博文: [单调队列模板] 单调队列模板 题单: 待补充 2. 题目解析 一道单调队列模板题,不赘述了吧。 看看日后有没有写不出来来补题、或者有新…

深入理解 `Sinks.Empty<Void>` 和 `Mono<Void>`:如何触发完成信号并结合 WebSocket 示例

在响应式编程中&#xff0c;Sinks 是 Project Reactor 提供的一个强大工具&#xff0c;用于手动控制数据流的信号发射。Sinks.Empty<Void> 是一种特殊的 Sinks&#xff0c;它不发射任何数据&#xff0c;仅用于表示完成或错误信号。结合 Mono<Void>&#xff0c;它可…

网络基础知识-2

N个节点完全互联的网型网即N个节点的无向完全图&#xff0c;无向完全图的边数计算如下&#xff1a;每个节点都要指向其他N-1个节点&#xff0c;但是因为无向两个节点之间的边会重复&#xff0c;因此有N(N-1)/2条边HDLC&#xff08;高级数据链路控制协议&#xff09;是一种面向比…

二叉树-左叶子之和

代码随想录-刷题笔记 404. 左叶子之和 - 力扣&#xff08;LeetCode&#xff09; 内容&#xff1a; 该题仅作为搜索&#xff0c;但是其中的规则让人摸不着头脑&#xff0c;看起来似乎很头疼 但是仔细一思考&#xff0c;能发现左叶子无非是这样的定义 当发现一个节点的 左孩…

单片机裸机编程:状态机与其他高效编程框架

在单片机裸机编程中&#xff0c;状态机是一种非常强大的工具&#xff0c;能够有效管理复杂的逻辑和任务切换。除了状态机&#xff0c;还有其他几种编程模式可以在不使用 RTOS 的情况下实现高效的程序设计。以下是一些常见的方法&#xff1a; 1. 状态机编程 状态机通过定义系统…

C语言 —— 此去经年 应是良辰好景虚设 - 函数

目录 1. 函数的概念 1.1 库函数 1.2 自定义函数 2. 形参和实参 3. return 语句 4. 数组做函数参数 5. 嵌套调用和链式访问 5.1 嵌套调用 5.2 链式访问 6. 函数的声明和定义 6.1 单个文件 6.2 多个文件 7. static 和 extern 7.1 static 修饰局部变量 7.2 static 修…

Java GC 基础知识快速回顾

目录 一、Java 垃圾回收&#xff08;GC&#xff09;基本概念和重要性分析 &#xff08;一&#xff09; Java 垃圾回收&#xff08;GC&#xff09;基本概念回顾 1.GC 三种常见语义 2.Mutator&#xff1a;应用程序的内存管理角色 3.TLAB&#xff08;线程本地分配缓存&#x…