zoukankan      html  css  js  c++  java
  • 软中断和硬中断(转)

    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。

  • 相关阅读:
    P6665 [清华集训2016] Alice 和 Bob 又在玩游戏
    模板库
    CSP-S2021 游记
    CSP-S2021 SD迷惑行为大赏
    博弈论总结
    LOJ6033「雅礼集训 2017 Day2」棋盘游戏(二分图最大匹配必经点)
    LOJ6065「2017 山东一轮集训 Day3」第一题
    LOJ6059「2017 山东一轮集训 Day1」Sum
    LOJ6102「2017 山东二轮集训 Day1」第三题
    python笔记:字符编码
  • 原文地址:https://www.cnblogs.com/locean/p/4729500.html
Copyright © 2011-2022 走看看