【发布时间】:2015-12-06 09:01:38
【问题描述】:
中断向量表是在 ROM 中还是在 RAM 中?如果它在 RAM 中,它是从哪里加载的?另外,该表是否取决于操作系统?例如,在 MS-DOS 中,“int 0x80”用于播放音乐和其他东西,但在 Linux 中,它是一个系统调用。那么,在 MS-DOS 中,中断 0x80 是由操作系统还是 ROM 处理的呢?如果它在 ROM 中,Linux 会覆盖表条目吗?
【问题讨论】:
中断向量表是在 ROM 中还是在 RAM 中?如果它在 RAM 中,它是从哪里加载的?另外,该表是否取决于操作系统?例如,在 MS-DOS 中,“int 0x80”用于播放音乐和其他东西,但在 Linux 中,它是一个系统调用。那么,在 MS-DOS 中,中断 0x80 是由操作系统还是 ROM 处理的呢?如果它在 ROM 中,Linux 会覆盖表条目吗?
【问题讨论】:
在 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 等保护模式操作系统下,中断由操作系统专门处理。
【讨论】: