多核/多CPU机器中的中断是如何工作的?

21

我最近开始涉足低级别的操作系统编程。目前我正在缓慢地阅读两本旧书,XINU和Build Your Own 32 Bit OS,以及我之前在Stack Overflow上提问时得到的一些资源:如何开始操作系统开发

可能是因为大多数这些资源都是在普及多核系统之前编写的,所以我还没有遇到过这个问题。但我想知道的是,在多核/多处理器系统中,中断是如何工作的。

例如,假设DMA想要信号传递一个文件读取操作已经完成。哪个处理器/核心会确认已经发生了中断?是启动文件读取操作的处理器/核心吗?还是先到达的任何处理器/核心?


我不知道你问题的答案,但是我强烈推荐参考<a href="http://www.google.com/url?sa=t&source=web&ct=res&cd=1&url=http%3A%2F%2Fwww.intel.com%2Fdesign%2Fprocessor%2Fmanuals%2F253668.pdf&ei=t6sjSfTGBYXUeaOT-Vo&usg=AFQjCNFvut1w60VZyTE6Dz73qgte82sJlw&sig2=VN4L89P09KyNeSHGtGIbiw">Intel® 64和IA-32体系结构软件开发人员手册</a>,第3卷,第5章。它很详细,包含有关x86架构的超过你想知道的所有信息。 - Adam Rosenfield
@GiovanniGalbo +1 提到 XINU 项目。 - smwikipedia
2个回答

6

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

顺便说一下,文件操作与中断和/或dma没有直接关系。文件操作是文件系统概念,根据文件系统所在的总线不同,会被翻译成底层操作,可能是IDE或SATA磁盘,也可能是USB存储器,在这种情况下,扇区读取将被转换为3个逻辑操作通过USB总线进行,USB主机控制器驱动程序将提供中断服务,但这与原始文件读取操作并没有真正关系,无论如何,该操作可能已经分成较小的交易。


谢谢。我希望有一种方法可以接受多个答案,但现实生活中的例子为我解决了这个问题。还要感谢您关于文件读取的提示。 - Giovanni Galbo
@IIya,IoConnectInterrupt链接已经失效。 - smwikipedia

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

谢谢你的回答!你知道x86/x86-64是否允许这两种方法吗? - Giovanni Galbo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接