linux中断机制和时钟解说.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Lecture 8 Linux Interrupt and timer;中断机制;一、 中断基本知识;中断又分为外部可屏蔽中断和外部非屏蔽中断。所有的I/O设备产生的中断请求均引起可屏蔽中断,而紧急事件引起的故障产生非屏蔽中断。 非屏蔽中断的向量和异常的向量是固定的,而可屏蔽中断的向量可以通过对中断控制器的编程来实现。 从0~31的向量对应于异常和非屏蔽中断 从32~47的向量分配给屏蔽中断 从48~255的向量用来标志软中断 (由int n指令产生), linux只用了一个:128(0x80)向量;异常和非屏蔽中断 0 除法出错 SIGFPE 故障 被0除 1 调试 SIGTRAP 故障/陷阱 对程序进行逐步调试 2 非屏蔽中断(NMI) 3 断点 SIGTRAP 陷阱 由Int 3断点指令引起 4 溢出 SIGSEGV 陷阱 当into(check for overflow)指令被执行 5 边界检查 SIGSEGV 故障 当bound指令被执行 6 非法操作码 SIGILL 故障 当CPU检查到一个无效操???码 7 设备不可用 SIGSEGV 故障 随着CR0的TS设置,ESCAPE或MMX指令被执行 8 双重故障 SIGSEGV 故障 处理器不能串行处理异常引起 9 协处理器段越界 SIGFPE 故障 因外部的数学协处理器引起的问题(仅用在80386) 10 无效TSS SIGSEGV 故障 要切换到的进程具有无效的TSS 11 段不存在 SIGBUS 故障 引用一个不存在的内存段 12 栈段异常 SIGSEGV 故障 试图超越栈段界限,或由ss标志的段不在内存 13 通用保护 SIGSEGV 故障 违反了Intel x86保护模式下的一个保护规则 14 页异常 SIGSEGV 故障 寻址的页不在内存,或违反了一种分页保护机制 15 Intel保留 16 浮点出错 SIGFPE 故障 浮点单元用信号通知一个错误情况,如溢出 17 对齐检查 SIGSEGV 故障 操作数的地址没有被正确地排列 18~31 Intel保留;2.外设可屏蔽中断 Intel x86通过两片中断控制器8259A来响应15个外部中断源,每个8259A可管理8个中断源。 并非每个设备都可以向中断线(与中断控制器相连的每条线)上发中断信号,只有拥有了某条中断线的控制权,才可以向这条中断线上发送信号。 中断线是非常宝贵的资源,必须采取只有当设备需要中断的时候才申请占用一个IRQ,或者是在申请IRQ时采用共享中断的方式。;;8259A执行的操作 监视中断线,检查产生的IRQ信号 如果在中断线上产生了一个IRQ信号 把接收的IRQ信号转换成一个对应的向量。(IRQn的缺省向量是n+32) 把这个向量存放在8259A的一个I/O端口,从而允许CPU通过数据总线读此向量。 把产生的信号发送到CPU的INTR引脚——发出一个中断。 等待,直到CPU确认这个中断信号,然后把它写进PIC的一个I/O端口,此时清INTR线 返回第一步 8259A对外部I/O请求的屏蔽可分为两种情况: a 清除EFLAGS的IF位,禁止所有外部的I/O中断请求 b 中断控制器中有一个8位的中断屏蔽寄存器,每位对应于8259A中的一条中断线,如果要禁用某条中断线,把IRM相应位置1;;3.中断描述符表IDT Intel系统利用中断描述符表将中断向量和其处理程序对应起来。 IDT是一个描述符数组,每一个元素由8个字节组成,叫做门描述符。每个中断向量对应一个门描述符。;中断描述符表 DLP 段描述符的特权级 偏移量 入口函数地址的偏移量 P 段是否在内存中的标志 段选择符 入口函数所处代码段的选择符 D 标志位,1=32位,0=16位 XXX 三位门类型码 ;任务门 类型码为101,门中包含一个进程的TSS段选择符,不使用偏移量,故不包含一个函数的入口地址,Linux中一般不用任务门进行任务切换。 中断门 类型码为110,控制权通过中断门进入处理程序时关中断。中断门中的DPL为0,所有的中断处理程序都由中断门激活,并全部限制在内核态。中断时清IF标志,关中断以防止中断嵌套。 陷阱门 类型码为111,控制权通过陷阱门进入处理程序时不关中断,即IF标志位不变。 系统门 是Linux内核特别设置的,用来让用户态的进程访问Intel的陷阱门,DPL为3。通过系统门激活3,4,5,0x80中断。;;4.IDT的初始化 Linux内核在系统的初始化阶段进行大量的初始化操作 初始化可编程控制器8259A 8259A内部有4个中断命令字寄存器,8259A初始化的目的是为了写入有

文档评论(0)

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

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

1亿VIP精品文档

相关文档