操作系统的中断处理

简介: /*define SAVE_ALL "cld; \n\t""pushq %rax; \n\t""pushq %rax; \n\t""pushq %es, %rax; \n\t""pushq %rax; \n\t""pushq".

/*

define SAVE_ALL "cld; \n\t"

"pushq  %rax;   \n\t"
"pushq  %rax;   \n\t"
"pushq  %es,    %rax;   \n\t"
"pushq  %rax;   \n\t"
"pushq"
...

上面的这段汇编代码的宏定义就是在执行中断程序的时候调用的现场保留的操作, 和异常的现场保留是类似的
不同的是, 在异常中是处理器产生的任务暂停, 而在中断中是外部设备产生的任务暂停
也和异常一样, 在执行中断处理函数之前就需要执行现场保留的代码
*/

/*

  • 执行的流程, 通过处理函数的入口函数, 先执行现场保留的代码,接着下来就和异常处理程序有一点不一样了, 在中断处理中, 调用一个do_IRQ函数, do_IRQ函数寄存器中的参数调用
  • 对应的处理函数, 在异常中, 我们通过处理函数的入口函数执行了现场保留的代码之后, 在调用明确的异常处理函数, 当然程序的返回地址都是要记录的, 这样才能返回我们原来的程序
    */

/*

  • 上面讲到的是在遇到了异常的时候CPU是怎么处理的, 前提是我们现在为中断提供了入口函数 --> 注意: 入口函数和程序处理函数不是完全一样的, 入口函数中包含有程序处理函数,
  • 在入口函数中调用程序处理函数, 在异常和中断中都是这样的, 只不过正如上面提到的那样, 在中断中的程序处理函数都是交给了一个do_IRQ函数通过参数判断要调用对应的中断处理函数
  • 我们现在就是要使用set_intr_gate函数将中断的入口函数们一一注册好, 注意: 这里的set_intr_gate函数虽然接受的参数是我们入口函数的地址, 但是他在中断向量表对应的index
  • 写入的数据是一个门描述符, 该门描述符不仅仅是简单的是入口函数的地址在Linux中, 有一个函数指针数组, 在该数组中保存这的就是所有的中断处理函数的入口函数的地址, 也就是
  • 函数指针, 需要注意的是, 我们使用for循环进行注册的时候, 起始的i是应该为32, 因为前32个中断向量号已经被异常时候, 但是有不是32个异常, 用到的是20个异常, 剩下的12个异常中断
  • 向量号为Intel所保留
    */

/*

  • 注册好了之后, 我们需要初始化好ICW和OCW寄存器中的数据
  • */

/*

  • 下面是一个do_IRQ的demo示例
  • 功能: 在屏幕上打印出时钟中断的中断向量号
    */

void do_IRQ(unsigned long regs, unsigned long nr) {
color_printk(RED, BLACK, "do_IRQ:%#08x\t", nr);
io_out(0x20, 0x20);
}

/*

  • 通过阅读建议的键盘驱动, 发现所以的驱动编写就是在编写一个中断处理函数, 我们已经知道了, CPU根据中断向量表中的index找到键盘中断的入口函数, 在该入口函数中调用do_IRQ函数, 在
  • do_IRQ函数中调用驱动程序, 就是这样而已, 所以编写驱动程序仅仅是内核中的冰山一角
    */
目录
相关文章
|
1天前
|
云安全 人工智能 运维
阿里云SecOps Agent,全新安全跨产品执行体验
自然语言驱动 云安全中心/WAF/CFW/ 等多款安全产品联动
1563 0
|
11天前
|
缓存 测试技术 API
Qwen 3.7 Plus 与 Max 实测:性价比与多模态能力差异解析(2026)
2026 年 6 月 1 日,阿里悄无声息地发布了 Qwen 3.7 Plus,距 Qwen 3.7 Max 上线刚好 11 天。同样的 1M 上下文,同样的 35 小时自治上限。但价格才是头条:Plus 是 0.40/M输入,Max是 2.50/M——便宜约 6 倍——并且还能看图、看视频。Vision Arena 上 Plus 已经排到 #16。所以这周真正值得讨论的问题不是”要不要为视觉能力买单”,而是”Max 凭什么用 6 倍价格换来 2 个百分点的 benchmark 领先”。
|
12天前
|
JavaScript 定位技术 API
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
CodeGraph 是一款爆火的本地代码智能工具,通过 tree-sitter 解析 AST 构建结构化知识图谱(存于 SQLite),为编程 Agent 提前生成“代码地图”。它显著降低 Agent 在中大型项目中的探索成本——实测工具调用减少71%、Token 降57%、速度提升46%,支持19+语言及主流框架路由识别,完全离线、无需 API Key。
853 11
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
|
12天前
|
人工智能 运维 JavaScript
阿里云Qoder CN(原通义灵码)全解析 产品形态、版本划分与技术适配说明
在AI辅助开发与智能办公工具持续普及的当下,阿里云旗下原通义灵码正式更名为Qoder CN,同时延伸出QoderWork CN、Qoder CN CLI、Qoder CN Mobile等多款配套产品,形成覆盖代码开发、日常办公、终端交互、移动端使用的完整工具矩阵。Qoder CN核心定位为AI智能编码助手,深度适配主流代码编辑器、集成开发环境以及终端场景;QoderWork CN则偏向桌面端综合办公辅助,二者面向不同使用场景,划分了多个版本档位,搭配差异化资源配额、功能权限与计费规则,同时兼容多款主流大模型。
878 8
|
1天前
|
机器学习/深度学习 人工智能 调度
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
HappyHorse 1.1 是新一代视频生成大模型,全面升级动态表现力、角色一致性、指令遵循、视觉质感与音画协同能力。支持I2V/T2V/R2V三类生成,适配短剧、电商广告、品牌营销等场景,提供高质、流畅、可控的AI视频生产力。
314 1
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
|
12天前
|
JSON 缓存 安全
通过 CC Switch 本地路由让 Codex CLI 接入 DeepSeek 等第三方模型
CC Switch 通过本地路由(`127.0.0.1:15721`)实现协议转换:将 Codex 的 Responses API 请求自动映射为 DeepSeek 等厂商的 Chat Completions 接口,兼容流式响应与工具调用,无需修改 Codex 源码,安全隔离 API Key。(239字)
2385 7
通过 CC Switch 本地路由让 Codex CLI 接入 DeepSeek 等第三方模型
|
12天前
|
存储 安全 Java
AgentScope Java 2.0:打造分布式、企业级智能体底座
AgentScope 2.0 面向分布式部署、稳定运行、权限安全等企业级需求全面升级,打造支持多租户隔离与长期稳定运行的企业级智能体底座。
|
8天前
|
人工智能 自然语言处理 算法
阿里云百炼Qwen 3.7 Plus与Max实测全解:性价比与多模态能力、成本深度对比
2026年,阿里云百炼平台推出的Qwen 3.7系列成为企业与开发者落地AI应用的核心选择,其中Qwen 3.7 Max与Plus作为两大旗舰版本,定位差异显著:Max是纯文本推理旗舰,专注高强度智能体与复杂逻辑任务;Plus则是多模态全能版,在保留强大文本能力的同时,补齐图像、视频理解能力,且价格大幅降低。本文基于2026年最新实测数据,从核心参数、文本能力、多模态能力、智能体表现、性价比与场景选型六大维度,全面解析两款模型的差异,为用户提供精准选型参考。
419 0