2012-11-16 46 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是存儲所有程序的。編譯器生成中斷向量。