中断向量表位于哪里?

5

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

1个回答

6
在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很可能已经复制到只读阴影RAM中,该RAM位于与ROM相同的地址,因为以这种方式运行BIOS代码速度更快。)
在像Linux这样的受保护模式操作系统中,中断由操作系统独占地处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接