21

我最近开始深入研究低级操作系统编程。我(非常缓慢)目前正在阅读两本较旧的书籍,XINU 和 Build Your Own 32 Bit OS,以及一些优秀的 SO 人在我之前的问题中建议的一些资源,How to get started in operating system development

可能只是我还没有在任何这些资源中遇到过它,但这可能是因为这些资源中的大多数是在无处不在的多核系统之前编写的,但我想知道中断在多核/多处理器系统中是如何工作的。

例如,假设 DMA 想要发出文件读取操作完成的信号。哪个处理器/内核确认已发出中断信号?是启动文件读取的处理器/内核吗?是哪个处理器/内核先到达它?

4

2 回答 2

6

查看IoConnectInterrupt函数,您可以找到 ProcessorEnableMask,它将选择允许运行InterruptService例程 (ISR) 的 cpu。
基于此信息,我可以假设在低级别的某个地方(请参阅Adam 的帖子)可以指定将中断路由到何处。

在旁注文件操作与中断和/或 dma 没有直接关系。文件操作是文件系统概念,它转换为低级别取决于文件系统所在的总线,它可能是 IDE 或 SATA 磁盘,甚至可能是 USB 存储,在这种情况下,扇区读取将被转换为 USB 总线上的 3 个逻辑操作,那里将由 USB 主机控制器驱动程序提供中断服务,但它与原始文件读取操作并不真正相关,这可能以任何方式拆分为较小的事务。

于 2008-11-19T08:28:33.600 回答
3

在过去,中断会发送到所有处理器。在现代,操作系统可以对某些硬件进行编程,以将中断发送到一个特定的处理器。当然,如果您可以动态而不是静态地选择处理器,您就不会希望将中断发送到启动 I/O 的任何处理器,而是希望将其发送到当前负担最小的处理器并且可以最有效地启动下一个 I/O 操作,和/或任何一个当前负担最小的处理器,并且可以最有效地执行等待结果的线程。

于 2008-11-19T05:11:47.290 回答