zoukankan      html  css  js  c++  java
  • 深入理解Linux内核-中断和异常

     Linux内核代码查看

    http://androidxref.com/
    中断:被定义位一个事件,它能改变处理器执行指令的顺序。它对应硬件(CPU、其他硬件设备)电路产生的电信号。
    
    同步中断:指令执行时CPU控制单元产生;称为同步,是因为只有在一条指令终止执行后CPU才回发出中断。也被称为异常

    异步中断:其他硬件设备按照CPU时钟信号随机产生的。
    也被简称中断

    中断的约束:1、中断必须尽快处理完成;中断一般被分两部分执行:关键而且紧急的部分,内核立即执行;其余部分内核稍后执行;
         2、中断的处理必须能满足嵌套,即当正在处理一个中断时,另一个中断又发生了的情况,必须尽量支持
          3、中断可以被禁止,但必须尽可能的限制使用

    中断:可屏蔽中断、非屏蔽中断
    异常:处理器探测异常(故障、陷阱、异常终止),编程异常

    引入信号的动机:

    IRQ(Interrupt Request)如何引起中断:

    IRQ:能发出中断请求的硬件设备都又一条名为IRQ都输出线;
    IRQ line:与可编程中断控制器的硬件电路的输入引脚相连。

    可编程中断控制器(IPC):
    1、监视IRQ线,如果两条或者以上的IRQ线产生信号,选择引脚编号较小
    2、如果只有一个引发信号 a、将它转化为对应的向量;b、将向量存放到中断控制器的IO端口,允许CPU通过数据总线读取;c、把引发信号发送到处理器的INTR引脚,即产生中断
      d、等待,直到CPU通过吧这个中断信号写入可编程中断控制器的一个IO端口来确认它,清除INTR线;
    3、返回第一步。

    I/O APIC(I/O 高级可编程中断控制器):

    80x86微处理器如何在硬件级处理中断和异常:

    异常处理程序的结构:
    1、在内核堆栈中保存大多数寄存器的内容
    2、用高级的c函数处理异常
    3、通过ret_from_exception() 函数从异常处理程序退出。

    如果初始化中断结构必须的数据结构:

    内核启用中断前,必须把IDT(中断描述符表)的初始地址装到idtr寄存器,并初始化其中的每一项。系统初始化时就需要完成。

    IDT的初始化:
    1、当计算机还运行在实模式的时候IDT被初始化,由BIOS例程使用,
    2、当linux接管之后,IDT被移到RAM的一个区域,进行二次初始化。

    内核初始化的过程中,先用一个中断门填充IDT的256个表项,然后用有意义的陷阱和中断处理程序替换它。

    完成初始化之后,对于每一个PIC确认的IRQ,IDT都有一个专门的中断门。

    如何在软件级处理中断信号:

    中断处理流程:
    1、硬件通过IRQ线通知PIC
    2、PIC将中断向量放到寄存器
    3、处理器读取寄存器,存如RAM。由中断处理例程处理(ISR)
    4、通知PIC

    注意:内核启用中断之前,必须知道IRQ号与I/O设备之间的对应关系,否则内核不知道那个向量对应哪个设备,如果处理。
    IRQ号与设备之间的对应关系,在初始化设备驱动程序的时候建立的。
  • 相关阅读:
    windows下面安装Python和pip终极教程
    windows下面安装Python和pip终极教程
    JSON格式的服务接口
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/lipeil/p/4646617.html
Copyright © 2011-2022 走看看