5.4.3  中断向量表

上节已指出CPU是根据中断号获取中断向量值,即对应中断服务程序的入口地址值。因此为了让CPU由中断号查找到对应的中断向量,就需要在内存中建立一张查询表,即中断向量表(在32位保护模式下该表称为中断描述符表)。80x86微机支持256个中断,对应每个中断需要安排一个中断服务程序。在80x86实模式运行方式下,每个中断向量由4字节组成。这4字节指明了一个中断服务程序的段值和段内偏移值。因此整个向量表的长度为1KB。当80x86微机启动时,ROM BIOS中的程序会在物理内存开始地址0x0000:0x0000处初始化并设置中断向量表,而各中断的默认中断服务程序则在BIOS中给出。由于中断向量表中的向量是按中断号顺序排列,因此给定一个中断号N,那么它对应的中断向量在内存中的位置就是0x0000:N×4,即对应的中断服务程序入口地址保存在物理内存0x0000:N×4位置处。

在BIOS执行初始化操作时,它设置了两个8259A芯片支持的16个硬件中断向量和BIOS提供的中断号为0x10~0x1f的中断调用功能向量等。对于实际没有使用的向量则填入临时的哑中断服务程序的地址。以后在系统引导加载操作系统时会根据实际需要修改某些中断向量的值。例如,对于DOS操作系统,它会重新设置中断0x20~0x2f的中断向量值。而对于Linux系统,除了在刚开始加载内核时需要用到BIOS提供的显示和磁盘读操作中断功能,在内核正常运行之前则会在setup.s程序中重新初始化8259A芯片并且在head.s程序中重新设置一张中断向量表(中断描述符表)。完全抛弃了BIOS所提供的中断服务功能。

当Intel CPU运行在32位保护模式下时,需要使用中断描述符表(Interrupt Descriptor Table,IDT)来管理中断或异常。IDT是Intel 8086~80186 CPU中使用的中断向量表的直接替代物。其作用也类似于中断向量表,只是其中每个中断描述符项中除了含有中断服务程序地址以外,还包含有关特权级和描述符类别等信息。Linux操作系统工作于80x86的保护模式下,因此它使用中断描述符表来设置和保存各中断的"向量"信息。

linux内核中断向量表,中断向量表相关推荐

  1. linux内核学习10.1:Linux内核ARM7架构异常中断向量表

    参考:https://www.cnblogs.com/douzi2/p/5112743.html 当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行.在异常中断处理程序执行完 ...

  2. Linux内核ARM架构异常中断向量表

    Linux内核ARM架构异常中断向量表 说明 ARM中异常中断的种类 ARM异常中断向量表 内核异常向量表 异常向量表跳转 vector_srub宏 内核启动建立异常向量表   当异常中断发生时,系统 ...

  3. 开源项目-基于Intel VT技术的Linux内核调试器

    本开源项目将硬件虚拟化技术应用在内核调试器上,使内核调试器成为VMM,将操作系统置于虚拟机中运行,即操作系统成为GuestOS,以这样的一种形式进行调试,最主要的好处就是调试器对操作系统完全透明.如下 ...

  4. linux 内核网络协议栈

    Linux网络协议栈之数据包处理过程  1前言 本来是想翻译<The journey of a packet through the linux 2.4 network stack>这篇文 ...

  5. Linux内核网络协议栈

    一.注册时机 1.在内核初始化时完成: 2.内核初始化过程(init/main.c):kernel_init()->do_basic_setup()->do_initcalls()-> ...

  6. 深入分析Linux内核源码oss.org.cn/kernel-book/

    本html页面地址:http://oss.org.cn/kernel-book/ 深入分析Linux内核源码 前言         第一章 走进linux 1.1 GNU与Linux的成长 1.2 L ...

  7. 初步了解Linux内核中断初始化

    在linux内核中,用struct irq_chip结构体描述一个可编程中断控制器,它的整个结构和调度器中的调度类类似,里面定义了中断控制器的一些操作: 在中断处理中所涉及的几个重要的数据结构:中断描 ...

  8. linux内核唤醒过程,Linux内核启动过程分析

    1.Linux内核启动协议 阅读文档\linux-2.6.35\Documentation\x86\boot.txt 传统支持Image和zImage内核的启动装载内存布局(2.4以前的内核装载就是这 ...

  9. Linux内核启动流程分析(一)【转】

    转自:http://blog.chinaunix.net/uid-25909619-id-3380535.html 很久以前分析的,一直在电脑的一个角落,今天发现贴出来和大家分享下.由于是word直接 ...

  10. 嵌入式Linux内核移植相关代码分析(转)

    本文通过整理之前研发的一个项目(ARM7TDMI +uCLinux),分析内核启动过程及需要修改的文件,以供内核移植者参考.整理过程中也同时参考了众多网友的帖子,在此谢过.由于整理过程匆忙,难免 错误 ...

最新文章

  1. 双屏全屏跳回到主屏_双屏双倍乐趣?华硕灵耀X2 Duo笔记本评测
  2. php实例类,php实例-对象与类
  3. Java IO - Reader
  4. unicode字符大全可复制_说说Excel不可见字符的那些事
  5. 【连载】如何掌握openGauss数据库核心技术?秘诀三:拿捏存储技术(3)
  6. 解读革命性容器集群CCE Turbo:计算、网络、调度全方位加速
  7. 变压器符号_变压器规格型号有哪些?这篇文章看完全都了解了
  8. python代码写好了怎么运行-python代码是怎样运行的
  9. 趋势网盘点:语音识别技术创新
  10. Android Studio NDK开发
  11. Palantir:野心贼大,想做世界的创新引擎(附纪要)| 国君计算机李沐华
  12. Editext编辑属性
  13. 计算机组成原理 - 系统总线
  14. 2017全球智慧城市战略指数分析
  15. 黄铮,张一鸣,宿华退居二线的背后,暗藏玄机,没那么简单
  16. java中正则表达式以及Pattern和Matcher
  17. FreeRtos--队列
  18. 视频会议检测不到摄像头,电脑打开相关功能提示无法使用-驱动人生解决方案
  19. 【algods】4.树和二叉树、完全二叉树、满二叉树、二叉查找树、平衡二叉树、堆、哈夫曼树、散列表...
  20. springboot中使用注解获取前台header信息

热门文章

  1. java中有界队列的饱和策略(reject policy)
  2. datastage 函数_DataStage_Transformer常用函数
  3. Java配置信息工具jinfo
  4. mysql navicat如何为表添加外键?
  5. 08.update_by_query操作
  6. 洛谷——P1219 八皇后
  7. jQuery——parent(),parents(),offsetParent(),closets()方法
  8. 编译原理习题(含答案)——4-7语法分析——MOOC哈尔滨工业大学陈鄞配套_学习通_慕课堂
  9. 【最优解法】1087 有多少不同的值 (20分)_17行代码AC
  10. 4行代码满分:L1-052 2018我们要赢 (5分)