2012-11-16 42 views
3

了解中断向量是中断处理程序的内存地址,或者是数组中的索引,称为包含中断处理程序的内存地址的中断向量表。当产生中断时,操作系统通过上下文切换保存其执行状态,并开始在中断向量处执行中断处理程序。中断矢量。位置/谁设置它?

我有一些问题,我一直在寻找几乎没有答案。

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

回答

1

interrupt vector is the memory address of an interrupt handler

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

因此,无论何时发生特定中断,您的中断处理函数都会被调用。

0

这取决于硬件。

如果CPU只有一个地址可以跳到中断,那么无论是ROM还是RAM都取决于系统在CPU周围建立的内存映射。同上一个预定义的中断向量表。如果CPU允许为中断表设置一个基地址,那么它显然取决于操作系统。

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

部分或全部存储在ROM中的操作系统通常会将向量表保存在RAM中,以便可以在运行时对其进行修改。在像8位Acorn MOS这样的非常有限和定义明确的系统上,这是因为软件可能想要完全控制硬件 - 如果内存满足要求,那么由于内存映射的基本原理,该特定系统具有ROM中的硬件向量但是在那里放置一个例程,然后通过RAM来传递软媒体。所以这是一个非常慎重的决定。

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

-1

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

2

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