gpt4 book ai didi

linux-kernel - 禁用所有中断以保护多处理器系统上的 CPU 寄存器状态

转载 作者:行者123 更新时间:2023-12-04 05:00:13 25 4
gpt4 key购买 nike

我需要在代码部分(在内核模式下)确保没有其他人可以修改/检查 CR0 寄存器。在单处理器系统上,我认为禁用中断是最好的。但是在多处理器系统上:

  • 有没有办法在代码部分(例如使用自旋锁机制)期间禁用来自所有处理器的所有中断?
  • 这是必要的吗?修改cr0时在多处理器系统上注册,我猜这个寄存器只针对当前 CPU 进行了修改?
    --> 所以只对当前 CPU 禁用中断就足够了?
    --> 有没有办法从其他 CPU(在同一系统上)检查/修改另一个 CPU 的寄存器?

  • 非常感谢您的回答(并为我的近似英语感到抱歉)

    杰罗姆。

    最佳答案

    杰罗姆,

    您是否考虑过使用 spin_lock_irqsave()spin_unlock_irqrestore() ?这将禁用本地中断。

    我相信更全面的版本是 spin_lock_irq()spin_unlock_irq()无条件停止所有中断(如 cli()/sti() )。

    使用这些锁定机制时需要考虑许多条件。主要示例之一是无法调用可能 sleep 的内核函数。在您的 spin_lock 内时.您可能需要做一些研究,然后才能确定哪种方法最适合您的特定情况。但是从您提供的简要说明来看,上述两种方案中的一种似乎适合您。

    祝你好运!

    关于linux-kernel - 禁用所有中断以保护多处理器系统上的 CPU 寄存器状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4943810/

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