gpt4 book ai didi

x86 - SMP多线程如何共享内存和中断?

转载 作者:行者123 更新时间:2023-12-04 03:55:34 37 4
gpt4 key购买 nike

我正在为内核的输入缓冲区做一些工作,并且有一些问题。在双核计算机上,我知道可以同时运行多个“进程”。我不知道操作系统和各个程序如何保护数据冲突。

关于此主题,我想知道两件事:

(1)中断发生在哪里?是否保证它们发生在一个内核上而不发生在另一个内核上,是否可以用来确保一个内核上的实时操作不会被可以在另一内核上处理的文件IO中断? (我从逻辑上假设中断将在第一个内核上发生,但是这始终是正确的,您怎么知道?或者每个内核都有自己的中断设置?这不会导致每个内核都出现这种情况吗?内核可以对同一中断同时使用react,可能以不同的方式?)

(2)双核处理器如何处理操作码内存冲突?如果一个内核正与另一个内核正在写入存储器中的同一地址同时读取存储器中的地址,那会发生什么?是引发异常还是读取值? (我假设写操作将以任何一种方式起作用。)如果读取了一个值,是否保证在冲突时它是旧值还是新值?

我知道理想上应该编写程序来避免这些复杂的情况,但是OS当然不能期望如此,并且将需要能够处理此类事件而不会使其自身受阻。

最佳答案

在x86处理器中,这由APIC处理。您可以在Intel® 64 and IA-32 Architectures Software Developer's Manual中查看详细信息,特别是在volume 3第9章中以及在x2APIC specification中。

如果您不想进入所有详细信息,我将给出一个简短的摘要。

中断可能来自三种不同的来源:

  • 外部引脚(在最高Core i7的Intel处理器中,您具有LINT0,LINT1,SMI,INIT。我不知道它们在Core i7或AMD或Via处理器中的名称)。
  • 公交交易。这是现代系统中一个线程向另一个线程发送中断的主要方式。它们被称为IPI-处理器间中断。
  • 内部事件,例如热中断,事件监视器或内部错误。

  • 每个逻辑处理器(SMT系统中的线程,非SMT多核系统中的核心,非SMT非多核系统中的处理器)都有一个APIC。 APIC控制逻辑处理器如何响应任何此类中断。

    简而言之:

    SMI和INIT引脚始终始终分别路由至SMI或INIT。

    如果禁用了APIC,则将LINT0路由到INTR,将LINT1路由到NMI,并忽略IPI。

    如果启用:
  • LINT0,LINT1,热事件,事件监视器和错误在LVT(逻辑向量表)中都有一个条目,用于指定是否屏蔽它,如果不屏蔽它,那么它将是什么类型的中断。
  • IPI被处理。 IPI包括中断类型(即INTR,SMI,NMI,INIT,SIPI)和目的地。每个逻辑处理器都有一个APIC-ID,即。如果IPI的目的地与其ID相匹配,它将处理该中断。否则,它将忽略它。

  • 如果需要有关启用APIC,对LVT进行编程,设置APIC-ID和发送IPI的详细信息,则必须查看我链接到的手册。

    关于x86 - SMP多线程如何共享内存和中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/419486/

    37 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com