中断和例外.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
中断和例外

第三讲 中断与例外处理 内核同步与互斥 * * 第四章 中断和例外(重点中断异步处理方法) 4.1中断和例外的作用 中断正常流程,进入核心程序运行。 4.2中断和例外(以x86为例) ? 中断: 可全屏蔽中断:eflage寄存器(相当于PSW)的IF标志清0则将这些中断 (所有I/O设备中断)屏蔽。 不可屏蔽中断:不能由IF标志屏蔽,如电源故障 ? 例外: 处理机检测出的例外 访存错,需重执行出错指令 无需重执行的指令执行出错 eip (PC寄存器)值无意义,马上结束进程 编程例外(如自陷指令int/int3指令) 4.2.1中断和例外向量 X86将每种中断和例外编号从0~255 0~31代表各例外和不可屏蔽中断,下表说明了每种例外及其处理程序,处理程序向例外进程发送一相应的signal。signal在例外处理结束后,例外进程被调度运行时处理。 32-47号对应到IRQ0~IRQ15,表示可屏蔽中断,由2个8259A PIC串成的中断控制器见图。SMP结构中,根据平台设计不同,中断可以静态或动态决定发给哪个处理机 128号用于自陷,用Int指令产生,Int 0x80(128)表示发一个系统调用。 251-255号用于SMP结构的机间中断。 4.2.2中断描述符表及中断/例外处理 IDT表共256个entry,存放对应中断/例外处理程序地址相关信息(描述中断/例外处理程序段的GDT项的索引)。IDT表的的物理地址和长度存于idtr寄存器中。 IDT表必须在系统初始化阶段在开放中断前填好。 中断/例外处理程序入口是由硬件在执行指令的最后一拍根据中断/例外号通过IDT转入的。iret指令是对应于中断/例外进入、处理完成后控制返回指令。 在中断/例外进入或返回时会修改eip(pc), eflags(psw), esp (栈寄存器),cs(程序段描述符索引寄存器), ss(栈段描述符索引寄存器)等。 4.3嵌套执行 系统调用只有一级。 除缺页外的例外只有一级,一般处理流程:填例外码,发信号给进程。 内核页访问最多只允许缺页一次(如内核模块已分配内存但未paging in)。 中断处理可多重嵌套(但不会相同中断处理嵌套)。 4.6中断处理 指I/O中断、时间中断、机间中断。2.6中断处理使用独立于进程核心栈的中断栈(per CPU)。 中断处理过程一般分三部分 Critical:如回应PIC,重置PIC屏蔽,在不可中断方式下运行 Noncritical:在可中断方式下运行(只可能发生高级中断),如修改与中断相关的数据结构 可滞后的:如就绪相应进程,将buffer内容拷入用户进程空间,利用bottom-half机制。 IRQ线(号)可以被几个设备共享或被动态申请。如软盘设备在open时(floppy_open)调用request_irq()申请IRQ6,登记ISR。 中断处理数据结构(IDT表是硬件与中断处理程序IRQn_interrupt()的接口,下表是IRQn_interrupt()与驱动程序中断服务ISR的接口,由init_IRQ()初始化) irq _desc_t表项包含: status IRQ_INPROGRESS:正在运行ISR; IRQ_DISABLED :IRQ 线被驱动程序关闭; IRQ_PENDING:IRQ 发生且已清控制器中断位但还没有处理; action 指向irqaction队列。irqaction中包含ISR。 lock 对该irq _desc_t表项进行访问时的锁。 handler 指向与中断控制器相关的函数表。 8259A中断控制器的相应函数表数据结构如下: struct hw_interrupt_type i8259A_irq_type = { XT-PIC, startup_8259A_irq, #启动控制器 shutdown_8259A_irq, #关闭控制器 enable_8259A_irq, #使能某IRQ disable_8259A_irq, #关闭某IRQ mask_and_ack_8259A, #清某IRQ并置屏蔽 end_8259A_irq, #开某IRQ屏蔽 NULL }; 中断控制器不同,这组函数就不同。中断处理框架函数do_irq()无需修改。 多处理机的考虑: 硬件设计可以将中断发送到所有CPU,由OS决定哪个CPU响应,或硬件按某种原则(如随机)选一个CPU。 几个主要机间中断:RESCHEDULE_VECTOR;INVALIDATE_TLB_VECTOR;CALL_FUNCTION_VECTOR(让其他CPUs执行某函数) 中断处理大致流程 IRQn-interrupt(): 将IRQ值和寄存器保存到核心栈; (do_IRQ(

文档评论(0)

wyjy + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档