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

    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。

  • 相关阅读:
    POJ 1953 World Cup Noise
    POJ 1995 Raising Modulo Numbers (快速幂取余)
    poj 1256 Anagram
    POJ 1218 THE DRUNK JAILER
    POJ 1316 Self Numbers
    POJ 1663 Number Steps
    POJ 1664 放苹果
    如何查看DIV被设置什么CSS样式
    独行DIV自适应宽度布局CSS实例与扩大应用范围
    python 从入门到精通教程一:[1]Hello,world!
  • 原文地址:https://www.cnblogs.com/jingzhishen/p/4414348.html
Copyright © 2011-2022 走看看