2008-11-19 14 views
21

我最近開始潛入低級操作系統編程。我(非常緩慢)目前正在研究兩本舊書,XINU和Build Your Own 32位操作系統,以及我上一個問題How to get started in operating system development中的SO人員建議的一些資源。多核/多CPU機器中的中斷如何工作?

這可能只是因爲我還沒有在任何這些資源中遇到它,但它可能是因爲這些資源中的大部分都是在無處不在的多核系統之前編寫的,但我想知道的是中斷在多核/多處理器系統。例如,假設DMA想要發信號通知文件讀取操作已完成。哪個處理器/內核承認中斷被髮送?它是啓動文件讀取的處理器/內核嗎?無論是哪個處理器/內核首先得到它?

+0

我不知道回答你的問題的處理方式,但我強烈建議採取看看Intel® 64 and IA-32 Architectures Software Developer's Manual,第3卷,第5章。它很大且很詳細,包含的內容比您想要了解的x86架構更多。 – 2008-11-19 06:17:58

+0

@GiovanniGalbo +1提到XINU項目。 – smwikipedia 2017-11-03 00:47:44

回答

6

查看IoConnectInterrupt函數,您可以找到ProcessorEnableMask,它將選擇允許運行InterruptService例程(ISR)的cpu。
基於這些信息,我可以假定某處處於低電平(請參閱Adam's後),可以指定將中斷路由到哪裏。

旁邊的音符文件操作並不直接與中斷和/或dma相關。文件操作是文件系統的概念,翻譯成低級別取決於你的文件系統位於哪個總線上,它可能是IDE或SATA磁盤,或者它甚至可能是USB存儲器,在這種情況下,扇區讀取將被轉換爲通過USB總線的3邏輯操作,那裏將被usb主機控制器驅動程序中斷,但與原始文件讀取操作無關,可能以任何方式分割爲較小的事務。

2

在過去,中斷髮送到所有處理器。在現代,某些類型的硬件可以通過操作系統編程向一個特定的處理器發送中斷。當然,如果你可以動態而不是靜態地選擇一個處理器,你不會希望發送中斷給任何一個處理器啓動I/O,你想把它發送給目前負載最輕的處理器,並且可以最有效地啓動下一個I/O操作,和/或無論哪個處理器目前負擔最輕,並且可以最有效地執行正在等待結果的線程。

+0

感謝您的回答!你碰巧知道x86/x86-64是否允許這兩種方法? – 2008-11-19 05:25:16