中断向量。位置/谁设置它?

时间:2012-11-16 20:35:19

标签: operating-system interrupt

知道中断向量是中断处理程序的内存地址,或者是一个称为中断向量表的数组的索引,该数组包含中断处理程序的内存地址。当产生中断时,操作系统通过上下文切换保存其执行状态,并开始在中断向量处执行中断处理程序。

我有一些问题,我一直在搜索,但还没有答案。

中断向量是否存储在RAM中?如果它存储在RAM中,谁将其设置为ram?操作系统?

4 个答案:

答案 0 :(得分:2)

interrupt vector is the memory address of an interrupt handler

内存是RAM的同义词,所以是存储在RAM中的中断向量。如果设备驱动程序想要注册中断处理程序函数,则需要调用适当的OS调用(因为它是request_irqs的linux) ,它将在中断向量表中创建一个条目。此条目将指向中断处理程序函数驻留在内存/ RAM中的任何位置。 操作系统负责管理中断向量表。

因此,只要发生特定中断,就会调用中断处理函数。

答案 1 :(得分:2)

它在FLASH中。不在RAM中。寄存器在RAM中。导致RAM存储所有数据。但是FLASH是存储所有程序的。并且中断向量由编译器生成。

答案 2 :(得分:0)

这取决于硬件。

如果CPU只能在一个中断上跳转到一个地址,那么该ROM或RAM是否取决于系统围绕CPU构建的内存映射。同上预定义的中断向量表。如果CPU允许为中断表设置一个基地址,那么它显然取决于操作系统。

一般来说,完全从磁盘加载的操作系统(如Windows)显然会将其保存在RAM中。

部分或全部存储在ROM中的操作系统通常将向量表保存在RAM中,以便可以在运行时进行修改。在非常有限且定义明确的系统(如8位Acorn MOS)上,因为软件可能会想要完全控制硬件 - 如果内存服务那么特定系统在ROM中具有硬件向量,因为存储器映射的基本原理但在那里放一个例程然后通过RAM的软矢量。所以这是一个非常慎重的决定。

在相对更宽敞的系统上,比如经典的Mac OS,因为它允许在事后修补ROM。如果在机器出厂后在特定的中断例程中发现错误,则可以发出操作系统更新,该更新将加载例程的RAM替换并仅更改向量表。这在Mac OS中特别有用,因为对系统的所有调用都使用类似于中断的陷阱机制。

答案 3 :(得分:-1)

在现代Windows操作系统下的PC上,中断向量存储在中断描述符表(IDT)中。您可以使用LIDT指令(加载中断描述符表)找出该表的位置。但是你不能在那里更改一个值,除非你可以让你的代码在Priviledge Level Zero(ring o)中运行,并且微软和英特尔密谋在Windows下使这几乎不可能,因为所有指令都会改变代码段寄存器( CS)响铃0被阻止到用户程序。这就是为什么WINTEL和Australopithicus一样,在进化方面可能被证明是一个死胡同(我希望)。 基本上,PC只不过是一个智能终端;你必须将它们用作你自己机器上的终端才能完成真正的工作,比如控制某些东西。