网站大量收购独家精品文档,联系QQ:2885784924

Linux下的中断.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux下的中断.ppt

Linux下的中断(1) 梁冰 2004.10.28 1.概述 中断到达时,CPU 保存当前程序计数器值(eip与cs)到内核堆栈,然后把与中断类型相关的地址放进程序计数器 中断分两种: 同步(synchronous)中断,指令执行时由CPU控制单元产生,一条指令执行完后CPU才发中断,这通常成为异常 异步(asynchronous)中断,由其他硬件设备依照CPU时钟信号随机产生,通常称为中断. 中断处理与进程切换的差异在于:由中断或异常执行的代码不是一个进程,而是一个内核控制路径,代表中断发生时正在运行的进程执行,因此中断处理的切换开销远比进程切换少 中断满足的约束: 内核必须让中断尽快完成,尽其所能把更多处理向后推迟 应该尽可能地允许内核正在处理一个中断,另一个不同类型中断发生可以被嵌套发生 必须尽可能地限制中断被禁止的临界区的大小,中断处理程序应当尽可能地开中断运行 1.1中断和异常分类 中断 可屏蔽中断:I/O设备发出的所有中断请求都产生可屏蔽中断 非屏蔽中断:硬件故障等有限几个危急事件才引起,总是由CPU辨认 异常 处理器探测异常:CPU执行指令时探测到的反常条件产生 故障: 通常可纠正,一旦纠正,程序就可以在不失连贯性的情况下重新开始,如缺页异常(eip保存当前指令) 陷阱: 陷阱指令执行后立即报告(eip保存下一指令),内核把控制权交回程序,如调试时 异常中止: 用于报告严重错误(eip指向异常中止程序头指令) 编程异常: 编程者发出请求时产生,如地址越界,溢出等等 1.2 IRQ与中断 每一设备都有IRQ线与中断控制器相连 监视IRQ线,对引发信号检查 若一个引发信号出现在IRQ线上: 把引发信号换成对应的向量 把向量存放在中断控制器端口的I/O口,允许CPU通过数据总线读此向量 引发信号送到CPU的INTR引脚,产生一个中断 等待,直到CPU确认中断,请INTR线 禁止与屏蔽中断 禁止:可以有选择地对PIC来禁止IRQ,禁止的中断是丢失不了的,激活后可被重新送到CPU 屏蔽: cli和sti分别修改eflag寄存器使得CPU或者是否对PIC发过来的中断响应或者不理 1.3 高级可编程中断控制器 在SMP机器中引入一个全局的I/O APIC,然后每一个CPU都有一个本地APIC,外部设备通过I/O APIC 中的可编程中断重定向表把中断负载均衡到各个CPU上处理 静态分发: IRQ信号传递给重定向表中定义好的CPU的本地APIC 动态分发: 往执行最低优先级进程的CPU发送IRQ信号,如有多个同处于最低优先级进程处理的CPU,则通过仲裁机制来分配负荷 处理器间中断 1.5 中断描述符表 IDT是一个系统表,它与每一个中断或者异常向量相联系,每一个向量在表中有相应的中断或者异常处理程序入口地址 中断向量表的首地址在idtr中 IDT有三种描述符 任务门 Linux保留未用 中断门 包含段选择符和中断或异常处理程序的段内偏移量,控制权交给一个适当段时处理器修改 陷阱门 与中断门相似,但控制权传递到一个适当的段时处理器不修改IF标志 2.中断和异常的处理 CPU执行完一条指令后,控制单元都要去看看是否有中断和异常,若有,执行如下操作 确定与中断或异常关联的向量 读由idtr寄存器指向的IDT表中第i项(它是中断门或陷阱门) 重gdtr寄存器获得GDT基地址,再GDT中查找,找到IDT表项的描述符(中断,陷阱门)所标识的段描述符 确信中断源由授权的发生源发出 看看特权级别是否变化如果CPL(cs后两位)不同于所选择的段描述符的DPL,则必须使用新特权栈 读tr寄存器,访问运行进程的任务状态段(TSS) 用与新特权级相关的栈段和栈指针装入ss和esp寄存器 在新栈中保存以前的ss和esp以前的值,保护原特权级别的栈和栈指针 2.中断和异常的处理 如果故障发生,用引起异常的指令地址装载cs和eip,使得它可以重新执行 栈中保存eflag,cs及eip地址 最后装载cs和eip寄存器,其值分别是IDT表中第i项门描述符的段选择符和偏移量字段 2.1中断处理完后 中断或异常被处理完后,相应的处理程序必须产生一条iret指令,控制权交回来给被中断进程 用保存在栈中的值装载cs,eip和eflag寄存器。 检查处理程序的CPL是否等于cs最低两位,如果是说明中断处理程序和被中断进程处于同一特权级,iret中止运行,否则执行下一步 从栈中装载参数ss和esp寄存器,返回原来特权级别的栈 检查ds, es, fs, 和gs段寄存器内容(略) 2.2 IDT的初始化 IDT的初步初始化 开机时处于实模式,IDT被初始化由BIOS使用 Linux初始化后由它再进一步初始化 Idt变量指向IDT表,IDT放在idt_t

文档评论(0)

wuyouwulu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档