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

问题描述 投票:21回答:3

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

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

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

operating-system kernel multicore
3个回答
6
投票

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

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


5
投票

本文http://www.alexonlinux.com/smp-affinity-and-proper-interrupt-handling-in-linux解释了如何通过linux处理smp机器中的中断


2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.