Operating system 中断向量。位置/谁设置?

Operating system 中断向量。位置/谁设置?,operating-system,interrupt,Operating System,Interrupt,知道中断向量是中断处理程序的内存地址,或者是包含中断处理程序内存地址的中断向量表数组的索引。生成中断时,操作系统通过上下文开关保存其执行状态,并在中断向量处开始执行中断处理程序 我有一些问题,我一直在努力寻找,但还没有答案 中断向量是否存储在RAM中?如果存储在RAM中,谁将其设置为RAM?操作系统中断向量是中断处理程序的内存地址 内存是RAM的同义词,因此是的中断向量存储在RAM中。如果设备驱动程序想要注册中断处理程序函数,则需要调用适当的操作系统调用(在linux中,它是request\u

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

我有一些问题,我一直在努力寻找,但还没有答案


中断向量是否存储在RAM中?如果存储在RAM中,谁将其设置为RAM?操作系统中断向量是中断处理程序的内存地址

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


因此,每当特定中断发生时,就会调用中断处理程序函数。

这取决于硬件

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

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

部分或全部存储在ROM中的操作系统通常将向量表保存在RAM中,以便在运行时对其进行修改。在非常受限且定义良好的系统上,如8位Acorn MOS,这是因为软件可能希望完全控制硬件-如果内存可用,则特定系统在ROM中具有硬件向量,这是因为内存映射的基本原理,但在那里放置了一个例程,然后软向量通过RAM。所以这是一个非常慎重的决定


在相对更宽敞的系统上,比如经典的MacOS,这是因为它允许在事后修补ROM。如果在一台机器出厂后,在一个特定的中断例程中发现了一个bug,那么可以发布一个操作系统更新,为该例程加载一个RAM替换,只需更改向量表即可。这在Mac OS中特别有用,因为所有进入系统的调用都使用类似于中断的陷阱机制。

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

它就在闪光灯下。不在公羊里。寄存器在RAM中。导致RAM存储所有数据。但是闪存是用来存储所有程序的。中断向量由编译器生成