我最近开始深入研究低级OS编程.我(非常慢)目前正在编写两本较旧的书籍,XINU和构建自己的32位操作系统,以及我之前的问题,如何开始操作系统开发中的优秀SO人员建议的一些资源.
它可能只是我还没有在任何这些资源中遇到它,但可能是因为大多数这些资源是在无处不在的多核系统之前编写的,但我想知道的是中断如何在多核/多处理器系统中工作.
例如,假设DMA想要发出文件读取操作完成的信号.哪个处理器/内核确认发出中断信号?它是启动文件读取的处理器/核心吗?它是首先获得它的处理器/核心?
查看IoConnectInterrupt函数,您可以找到ProcessorEnableMask,它将选择允许运行InterruptService例程(ISR)的cpu .
根据这些信息,我可以假设在低级别的某个地方(参见Adam的帖子),可以指定路由中断的位置.
在侧面注释文件操作与中断和/或dma没有直接关系.文件操作是文件系统概念,转换为低级别取决于文件系统所在的总线,它可能是IDE或SATA磁盘,或者甚至可能是usb存储器,在这种情况下,扇区读取将转换为通过usb总线的3逻辑操作,那里将由usb主机控制器驱动程序中断服务,但它与原始文件读取操作并不真正相关,可能会以任何方式拆分为较小的事务.
这篇文章http://www.alexonlinux.com/smp-affinity-and-proper-interrupt-handling-in-linux解释了如何通过linux处理smp机器中的中断