系统调用 与 中断

        中断(Interrupt)和系统调用(Syscall)是操作系统中两个关键机制,分别用于处理硬件事件和用户程序与内核的交互。它们虽然都涉及从用户模式到内核模式的切换,但设计目的和触发方式不同。以下是详细对比和解释:


1. 中断(Interrupt)

作用:

        处理来自硬件或软件的异步事件,强制CPU暂停当前任务,转而去执行特定的处理程序(如键盘输入、定时器到期、磁盘I/O完成等)。

类型:

  1. 硬件中断

    • 外设触发:由外部设备(如网卡、键盘)通过中断控制器(如APIC)发送信号给CPU。

    • 例子

      • 键盘按下 → 触发中断 → CPU执行键盘驱动的中断服务程序(ISR)。

      • 磁盘读写完成 → 触发中断 → 通知OS数据已就绪。

  2. 软件中断(异常)

    • CPU内部触发:由程序错误或特殊指令引发(如除零、页错误、断点调试)。

    • 例子

      • 访问非法内存地址 → 触发页错误异常 → 内核加载缺失的页面或终止进程。

处理流程

  1. 中断触发:硬件或异常条件满足。
  2. 保存上下文:CPU将当前寄存器状态压入内核栈。
  3. 跳转至ISR:根据中断号查询中断描述符表(IDT),执行对应的中断服务程序。
  4. 恢复上下文:ISR执行完毕后,恢复之前保存的寄存器状态,继续原任务。

特点

  • 异步:中断可能在任何时间点发生,与当前执行的代码无关。
  • 优先级:高优先级中断可抢占低优先级中断或用户程序。

2. 系统调用(Syscall)

作用

为用户程序提供访问内核功能的接口(如文件操作、进程创建、网络通信),是主动从用户模式切换到内核模式的唯一安全途径。

触发方式

  • 专用指令
    • x86:int 0x80(传统)或syscall/sysenter(现代)。
    • ARM:SVC(Supervisor Call)指令。
  • 参数传递:通过寄存器或栈传递系统调用号和参数(如Linux中,eax存系统调用号,ebxecx等存参数)。

处理流程

  1. 用户程序调用库函数:如write()(封装了syscall的包装函数)。
  2. 触发软中断或执行指令:切换到内核模式,跳转到统一的系统调用入口
  3. 内核验证并执行
    • 根据系统调用号查找系统调用表(如Linux的sys_call_table)。
    • 执行对应的内核函数(如sys_write)。
  4. 返回结果:内核将结果存入寄存器或内存,切换回用户模式。

特点

  • 同步:由程序显式调用,执行流程可预测。
  • 保护性:避免用户程序直接操作硬件或内核数据。

3. 关键区别

特性中断(Interrupt)系统调用(Syscall)
触发源硬件或CPU异常(异步)用户程序主动调用(同步)
目的响应外部事件或处理错误请求内核服务
权限切换用户态→内核态 或 内核态→内核态用户态→内核态
入口表中断描述符表(IDT)系统调用表(如sys_call_table
典型例子键盘输入、时钟中断、页错误open()fork()execve()

4. 交互场景示例

  1. 用户程序写文件
    • 调用write() → 触发syscall → 内核执行sys_write
    • 内核通过磁盘驱动发起I/O → 磁盘完成后触发硬件中断 → 内核处理中断并唤醒等待的进程。
  2. 进程调度
    • 时钟芯片周期性触发定时器中断 → 内核调度器决定是否切换进程。

5. 性能优化

  • 快速系统调用:现代CPU提供syscall指令(比传统int 0x80更快)。
  • 中断合并:将多个设备中断合并处理(如NAPI网络驱动)。
  • 异步I/O:用户程序无需阻塞等待syscall完成(如Linux的io_uring)。

6.总结

  • 中断是硬件或异常事件强制打断CPU执行的机制,确保实时响应。
  • 系统调用是用户程序主动请求内核服务的受控入口,保证安全隔离。 两者共同构成了操作系统响应事件和管理资源的底层基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/41822.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nara wpe去混响学习笔记

文章目录 1.WPE方法去混响的基本流程1.1.基本流程 2.离线迭代方法3.在线求法3.1.回顾卡尔曼方法3.2.在线去混响递推滤波器G方法 nara wpe git地址 博客中demo代码下载 参考论文 NARA - WPE: A Python Package for Weighted Prediction Error Dereverberation in Numpy and Ten…

JavaScript函数、箭头函数、匿名函数

1.示例代码(包括用法和注意事项) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>JS-函数</title…

练习:求平方根

需求&#xff1a;键盘录入一个大于等于2的整数x&#xff0c;计算并返回x的平方根。结果只保留整数部分&#xff0c;小数部分将被舍去。 代码一&#xff1a; //求平方根 //方法一&#xff1a; package Online; import java.util.Scanner; public class SquareRoot {public sta…

win10 安装后的 系统盘的 分区

win10 安装后的 系统盘的 分区 MBR 分区 GPT 分区

反向 SSH 隧道技术实现内网穿透

反向 SSH 隧道技术实现内网穿透 场景描述 有一台内网的 Linux PC 机&#xff0c;想在其他地方&#xff08;如家中&#xff09;使用浏览器&#xff0c;在浏览器中能够使用内网 Linux PC 机的命令行。 实现思路 内网 Linux PC 机在内网可以使用 SSH 进行连接&#xff0c;但内…

[MRCTF2020]套娃

一。 按F12看源代码 发现代码 读代码发现 1.我们传的参数中不能存在_和%5f&#xff0c;可以通过使用空格来代替_&#xff0c;还是能够上传成功。 2.正则表达式"/^23333/ " &#xff0c;开头结尾都被 " " 和 " /"&#xff0c;开头结尾都被&qu…

基于Windows11的WSL2通过Ollama平台安装部署DeepSeek-R1模型

DeepSeek-R1模型各参数版本硬件要求 一、在Windows上安装Linux子系统WSL2 检查电脑是否支持虚拟化&#xff0c;按住<font style"color:rgb(199, 37, 78);background-color:rgb(249, 242, 244);">WindowsR</font>输入<font style"color:rgb(199,…

PHP回调后门小总结

目录 1.call_user_func 函数说明 蚁剑连接 2.数组操作造成的单参数回调后门 array_filter 函数说明 蚁剑连接 array_map 函数说明 蚁剑连接 3.二参数回调函数 uasort 函数说明 uksort array_reduce array_udiff 蚁剑连接 4.三参数的回调后门 array_walk 函数说…

MinGW与使用VScode写C语言适配

压缩包 通过网盘分享的文件&#xff1a;MinGW.zip 链接: https://pan.baidu.com/s/1QB-Zkuk2lCIZuVSHc-5T6A 提取码: 2c2q 需要下载的插件 1.翻译 找到VScode页面&#xff0c;从上数第4个&#xff0c;点击扩展&#xff08;以下通此&#xff09; 搜索---Chinese--点击---安装--o…

-PHP 应用SQL 盲注布尔回显延时判断报错处理增删改查方式

#PHP-MYSQL-SQL 操作 - 增删改查 1 、功能&#xff1a;数据查询(对数据感兴趣&#xff09; 查询&#xff1a; SELECT * FROM news where id$id 2 、功能&#xff1a;新增用户&#xff0c;添加新闻等&#xff08;对操作的结果感兴趣&#xff09; 增加&#xff1a; INSERT INT…

Linux一步部署主DNS服务器

#!/bin/bash #部署DHCP服务 #userli 20250319 if [ "$USER" ! "root" ] then echo "错误&#xff1a;非root用户&#xff0c;权限不足&#xff01;" exit 0 fi #防火墙与高级权限 systemctl stop firewalld && systemctl disable …

Softmax 回归 + 损失函数 + 图片分类数据集

Softmax 回归 softmax 回归是机器学习另外一个非常经典且重要的模型&#xff0c;是一个分类问题。 下面先解释一下分类和回归的区别&#xff1a; 简单来说&#xff0c;分类问题从回归的单输出变成了多输出&#xff0c;输出的个数等于类别的个数。 实际上&#xff0c;对于分…

视频管理平台-信息泄露漏洞

一&#xff1a;漏洞描述 EasyCVR 部分版本存在用户信息泄露漏洞&#xff0c;攻击者可直接通过此漏洞获取所有用户的账号密码。 二&#xff1a;fofa查询 title"EasyCVR" 三&#xff1a;漏洞复现 在fofa中寻找有漏洞的url 并访问 poc:/api/v1/userlist?pageinde…

gz sim机器人SDF模型 [持续更新]

机器人SDF模型 linklink的一级pose材质 plugin话题信息通信键盘操作plugin Sensor传感器imu 不算教学&#xff0c;个人的记录 sdf的格式跟urdf有所不同&#xff0c;必须是完整的一个包括&#xff0c;比如< pose></ pose>这样前一个后一个&#xff0c;urdf中是有<…

极速全场景 MPP数据库starrocks介绍

目录 一、引子 二、起源 &#xff08;一&#xff09;前身 &#xff08;二&#xff09;定位 三、特点 &#xff08;一&#xff09;高性能架构 &#xff08;二&#xff09;实时分析 &#xff08;三&#xff09;高并发与扩展性 &#xff08;四&#xff09;兼容性与生态 …

计算机二级(C语言)考试高频考点总汇(二)—— 控制流、函数、数组和指针

目录 六、控制流 七、函数 八、数组和指针 六、控制流 76. if 语句可以&#xff08;嵌套&#xff09;&#xff0c; if 语句可以嵌套在另一个 if 语句内部&#xff0c;形成&#xff08;嵌套的条件判断结构&#xff09;&#xff0c;用于处理更复杂的条件判断逻辑。 77. els…

ECharts各类炫酷图表/3D柱形图

一、前言 最近鸡米花实现了各类的炫酷的图表&#xff0c;有3D柱形图、双边柱形图以及异形柱形图&#xff0c;好了&#xff0c;直接上图&#xff1a; 二、效果图 一个个来吧&#xff0c;下面就是代码啦&#xff0c;注意&#xff0c;一下图表展示的宽高均为800px*300px 三、异形横…

2024年3月全国计算机等级考试真题(二级C语言)

&#x1f600; 第1题 下列叙述中正确的是 A. 矩阵是非线性结构 B. 数组是长度固定的线性表 C. 对线性表只能作插入与删除运算 D. 线性表中各元素的数据类型可以不同 题目解析&#xff1a; A. 矩阵是非线性结构 错误。矩阵通常是二维数组&#xff0c;属…

从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.2.3预训练任务设计:掩码语言建模(MLM)与下一句预测(NSP)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 3.2.3 预训练任务设计:`掩码语言建模(MLM)`与下一句预测(NSP)1. 掩码语言建模(`Masked Language Modeling, MLM`)1.1 MLM的核心原理与数学形式1.2 高级掩码优化技术1.2.1 `Span Masking(SpanBER…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例6,TableView16_06 分页表格拖拽排序

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…