【问题标题】:Where is the Interrupt Vector Table located?中断向量表在哪里?
【发布时间】:2015-12-06 09:01:38
【问题描述】:

中断向量表是在 ROM 中还是在 RAM 中?如果它在 RAM 中,它是从哪里加载的?另外,该表是否取决于操作系统?例如,在 MS-DOS 中,“int 0x80”用于播放音乐和其他东西,但在 Linux 中,它是一个系统调用。那么,在 MS-DOS 中,中断 0x80 是由操作系统还是 ROM 处理的呢?如果它在 ROM 中,Linux 会覆盖表条目吗?

【问题讨论】:

    标签: x86 interrupt dos bios


    【解决方案1】:

    在 PC 上,中断向量表 (IVT) 始终位于 RAM 中。默认情况下,它位于内存开头的 0000:0000,但可以使用 LIDT 指令移动它。 MS-DOS 不会移动 IVT,但 Linux 可能会。无论哪种方式,它都会在某个地方的 RAM 中。

    中断 0x80 不是标准的 MS-DOS 或 BIOS 中断,因此通常在 MS-DOS 下未处理。如果它全部使用,它是由一些不属于操作系统的第三方代码(例如 TSR 或者可能是驱动程序)处理的。其他中断可能由 MS-DOS(例如 0x21)或 BIOS(例如 0x10)处理。在前一种情况下,处理中断的代码将在 RAM 中,而在后一种情况下,代码将在 ROM 中。 (虽然很可能 BIOS ROM 已被复制到只读的shadow RAM,位于 ROM 的同一地址,因为 BIOS 代码以这种方式运行得更快。)

    在 Linux 等保护模式操作系统下,中断由操作系统专门处理。

    【讨论】:

      猜你喜欢
      • 2012-05-21
      • 2023-01-03
      • 2021-08-17
      • 2015-07-17
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      相关资源
      最近更新 更多