中断、定时和系统调用.ppt

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

中断和异常 中断是一种触发信号,一个CPU接收到这样一种信号后会改变它执行代码的流程,一般是从一个固定的地址执行一段预先设定好的程序。 中断的种类 同步中断:异常,软中断 程序运行过程中产生 页错误,被0除,中断指令(int),... 异步中断:中断,硬中断 由设备产生 键盘中断,时钟中断,... 中断信号常被用来泛指上述各种中断。中断信号是系统的重要和稀缺的资源。 每个中断和异常都有一个编号,0-255,称为中断向量。 中断信号处理 中断信号可以由进程或外部事件产生 中断信号的处理只能由内核完成 中断当前的程序,切换到中断处理代码 中断处理代码不属于进程 同步中断与当前进程相关 异步中断与当前进程无关 中断的结果与进程相关 中断处理条件: 中断响应时间越快越好 中断处理分成top half和bottom half。 中断嵌套 中断处理过程中对临界区的处理 中断 中断 可屏蔽中断 不可屏蔽中断 中断控制器 可编程中断控制器:PIC 单处理器环境,8259A 先进可编程中断控制器:APIC 多处理器环境 中断请求和中断控制器响应 中断请求(IRQ) 对中断请求的响应 中断控制器 产生中断的设备 异常 80x86处理器约有20个异常 常见异常 Divide error:被0除异常 Invalid opcode:无效操作码异常 Page fault:页失效异常 每个异常都有相应的异常处理函数(handler) divide_error( ), invalid_op( ), page_fault( ), ... 中断门描述符 内核管理中断使用的数据结构 一个中断门描述符由8个字节组成 描述符中保存有关中断的各种信息 中断向量 中断处理函数地址 各种权限参数 i386共有3种类型的中断门描述符 Task Gate Descriptor:任务门描述符 Interrupt Gate Descriptor:中断门描述符 Trap Gate Descriptor:自陷门描述符 中断门描述符表 内核维护的一个由256个表项的表,每个表项为一个中断门描述符。 一个中断门描述符由8个字节组成,整个表共用内存空间2048字节。 中断门描述符表保存在内存中,其起始地址保存在一个专用的寄存器中。 操作系统在使能中断之前要初始化中断门描述附表。 中断门描述符表结构 Linux对中断的使用 中断指令int int指令可以产生任意向量的中断 Linux对中断的划分 中断门:interrupt gate,用于硬件中断信号产生的中断,只能在内核模式下使用。 系统门:system gate,用于实现系统调用,可由用户模式下的代码产生。 int3, into, bound, int 80. 自陷门:trap gate,用于其他异常的中断,只能在内核模式下使用。 初始化中断门描述符表 初级初始化:setup_idt() 缺省的中断处理函数:ignore_int() 打印Unknown interrupt 用ignore_int()填充中断门描述符表中所有表项的中断处理函数 ignore_int函数应该永远不会被调用,除非系统硬件或内核出现问题。 异常的处理 Linux通常将CPU发出的异常作为错误条件处理 页失效异常(page fault)作为内存管理的手段 当异常发生时,内核向当前进程发送信号,通知进程有异常状态出现。 通常情况下,进程因为错误状态的出现而退出运行。 异常的处理 将CPU的各种寄存器保存在进程的内核堆栈上 调用异常处理函数处理异常 调用ret_from_exception()从异常返回 中断的处理 中断的出现与当前进程很可能完全没有关系。 中断发生时,内核不能通过向进程发送信号的方式通知进程出现中断信号。 中断通常表示某种资源变得可用。 中断的分类 I/O中断 定时器(Timer)中断 CPU间中断 内核根据中断种类分类处理 I/O中断处理 I/O中断线是系统稀有资源 中断共享 不同设备可以共享同一个中断信号 这种情况下,只使用中断向量不足以区分中断的来源 中断动态分配 中断资源只有在使用时才真正进行分配,并在使用后予以释放。 中断处理函数中不能有任何进入阻塞的调用 I/O中断的处理 使用进程的内核堆栈保存中断向量以及各种CPU寄存器 向中断控制器发送应答信号 执行中断处理函数(中断服务程序,ISR) 使用ret_from_intr()返回 IRQ描述符 irqaction描述符 handler 指向中断服务程序 flags SA_INTERRUPT SA_SHIRQ SA_SAMPLE_RANDOM name dev_id next Softirq, Tasklet, Bottom Halves 内核对中断的处理方式会极大影响系统的效率。为提高系统效率

文档评论(0)

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

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

1亿VIP精品文档

相关文档