我最近开始深入研究低级操作系统编程。我目前正在(非常缓慢地)阅读两本较老的书,XINU和Build Your older 32位OS,以及fine SO朋友在我之前的问题How to get started in operating system development中建议的一些资源。
这可能只是因为我还没有在这些资源中遇到过它,但这可能是因为这些资源中的大多数都是在无处不在的多核系统之前编写的,但我想知道的是中断在多核/多处理器系统中是如何工作的。
例如,假设DMA想要发出文件读取操作已完成的信号。哪个处理器/核心确认已发出中断信号?是处理器/核心启动了文件读取吗?是不是哪一个处理器/核心最先到达它?
发布于 2008-11-19 08:28:34
查看IoConnectInterrupt函数,您可以找到选择允许运行InterruptService例程(ISR)的ProcessorEnableMask。
基于这些信息,我可以假设在较低级别的某个地方(参见Adam's post),可以指定将中断路由到何处。
另外,文件操作并不真正与中断和/或dma直接相关。文件操作是文件系统的概念,根据你的文件系统所在的总线,它可能是IDE或SATA磁盘,甚至可能是usb存储,在这种情况下,扇区读取将被转换为usb总线上的3个逻辑操作,usb主机控制器驱动程序将提供中断服务,但它与原始文件读取操作并不相关,原始文件读取操作可能以任何方式被拆分为较小的事务。
发布于 2008-11-19 05:11:47
在过去,中断是由所有处理器执行的。在现代,某些类型的硬件可以由操作系统编程来向某个特定的处理器发送中断。当然,如果您可以动态地而不是静态地选择一个处理器,您不会希望将中断发送到启动I/O的任何处理器,您可能希望将其发送到当前负担最轻并且可以最有效地启动下一个I/O操作的处理器,和/或当前负担最轻并且可以最有效地执行正在等待结果的线程的任何处理器。
https://stackoverflow.com/questions/301018
复制相似问题