• (转载)软中断和硬中断


    (转载)http://www.cnblogs.com/Huayuan/archive/2012/05/18/2507150.html

    1、中断:
      通常被定义成一个事件,该事件改变处理器执行的指令顺序。这样的事件与cpu芯片外部电路产生 
      的电信号相对应。
    2、中断的产生:
      每个能够发出中断请求的硬件设备控制器都有一条称为IRQ的输出线(中断线)。所有的IRQ线都 
      与一个中断控制器的输入引脚相连,中断控制器与cpu的intr引脚相连。
    3、中断向量:
      每个中断由0-255之间的一个8位数来标识。称为中断向量。
    4、中断描述符表:
      IDT是一个系统表,它与每一个中断或者异常向量相联系,每一个向量在表中有相应的中断处理程 
      序的入口地址。cpu的idtr寄存器执行IDT表的物理基地址。
    5、中断的硬件处理:
      在内核被init进程初始化后,cpu运行在保护模式下。当执行一条指令后,sc和eip这对寄存器包 
      含了下一条将要执行的指令的逻辑地址。在执行这条指令之前,cpu控制单元会检查在运行前一条指令时是 
      否发生了一个中断。如果发生了,cpu控制单元处理中断。


    软中断:

    软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。
    硬中断是外部设备对cpu的中断。
    软中断通常是硬中断服务程序对内核的中断。(中断服务程序和中断处理程序不同)
    信号则是由内核或者其他进程对某个进程的中断。
    理解:因为每个进程空间或者线程空间都是在一定程度上相对逻辑独立的,类似于外部设备DMA相 
    对于cpu。所以从理论上说,是可以实现中断的。

    扩展:信号量与消息队列都是提供给用户程序的,是内核服务的一种封装。 

    进程内核栈和用户栈:
    每个进程都有两个栈:用户栈和内核栈。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内 
    容是用户堆栈地址。同理,进程在内核空间运行时,eip值是内核栈空间地址。
    进程用户栈和内核栈的切换,当进程因为中断或者系统调用而陷入内核态执行时,进程所使用的 
    堆栈也要从用户栈转到内核栈。
    检查信号中断时在内核态即将进入用户态的时候,而不是任何时候都检查的。
    软中断时软件实现的中断,也就是程序运行时其他程序对它的中断。
    中断源发中断请求或者软中断信号后,cpu或者接收进程在适当的时机自动进行中断处理或者完成 
    软中断信号对应的功能。
    软中断发生的时间是由程序控制的,而硬中断时随机的。
    构成软中断机制的核心元素:
    软中断状态寄存器irq_stat:
    软中断向量表:
    软中断守护daemon:这是软中断实现的核心,通过查询irq_stat判断软中断是否发生。
    软中断的工作过程模拟了硬中断过程,当某一个软中断事件发生后,首先需要设置对应的中断标 
    记位,触发中断事务,然后唤醒守护进程去检查中断状态寄存器,如果查询发现某一个软中断事务发生, 
    那么通过软中断向量表调用软中断服务程序action。

  • 相关阅读:
    30行代码让你理解angular依赖注入:angular 依赖注入原理
    图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传
    HTML5 Application cache初探和企业应用启示
    使用idea的groovy脚本自动创建Jpa的实体
    使用idea的groovy脚本自动创建MybatisPlus的实体
    判断汉字和英文
    PostgreSQL 字符串分隔函数(regexp_split_to_table、regexp_split_to_array)
    golang实现文字云算法
    Java中的String真的无法修改吗
    使用asyncio实现redis客户端
  • 原文地址:https://www.cnblogs.com/Robotke1/p/3061898.html
Copyright © 2020-2023  润新知