【问题标题】:How do interrupts in multicore/multicpu machines work?多核/多 CPU 机器中的中断如何工作?
【发布时间】:2010-09-22 23:53:20
【问题描述】:

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

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

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

【问题讨论】:

  • 我不知道您的问题的答案,但我强烈建议您查看 google.com/…® 64 和 IA-32 架构软件开发人员手册 a>,第 3 卷,第 5 章。内容大而详细,包含的有关 x86 架构的信息比您想知道的要多。
  • @GiovanniGalbo +1 提及 XINU 项目。

标签: operating-system kernel multicore


【解决方案1】:

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

【讨论】:

  • 感谢您的回答!您是否碰巧知道 x86/x86-64 是否允许这两种方法?
【解决方案2】:

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

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

【讨论】:

  • 谢谢。我希望有一种方法可以接受多个答案,但现实生活中的例子让我明白了。也感谢关于文件读取的说明。
  • @IIya IoConnectInterrupt 链接已损坏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 2016-04-17
  • 2012-11-06
  • 2018-06-03
  • 2015-12-17
相关资源
最近更新 更多