gpt4 book ai didi

assembly - REP INSB 是可中断的吗?

转载 作者:行者123 更新时间:2023-12-04 01:22:25 28 4
gpt4 key购买 nike

假设我做了一个长 REP INSB在普通优先级线程中从用户模式读取 PCI 设备寄存器。在它执行期间,以下哪些可以发生,哪些不能发生:

  • 中断(其他内核)
  • 中断(同核)
  • PCI 访问(其他内核)
  • PCI 访问(相同内核 - 中断和/或不同线程)
  • 上下文切换在同一个核心

  • 如果答案取决于它,请假设它是一个相当现代的处理器。感兴趣的是 Atoms 和 Core i3。

    最佳答案

    REP INSB 在每个正在执行的 INSB 指令的边界之间是可中断的。状态保存在 RCX 和 RDI 寄存器中,因此在处理中断后,指令可以在中断点恢复。

    由 REP INSB 执行的单个 INSB 指令不可中断,是原子的,并且相对于在同一内核上执行的其他指令严格按照指令顺序执行。这种原子性意味着在执行 INSB 指令时,另一个内核或 PCI 设备无法对同一 I/O 地址执行 I/O 读取或写入。但是,在每次连续执行 INSB 指令之间,另一个内核或 PCI 设备可以读取或写入相同的 I/O 地址。

    其他内核上的中断对 REP INSB 指令没有影响,只是它们可能会导致执行的代码最终同时访问相同的 I/O 地址。上下文切换只能发生在中断和异常上,因此可以在每个 INSB 指令的边界之间进行上下文切换。

    因此,换句话说,您需要通过互斥锁或某种其他机制确保没有其他线程,无论它们在哪个内核上运行,都可以访问与 REP INSB 指令使用的相同的 I/O 地址。禁用中断将阻止在同一内核上运行的其他线程执行,但不会阻止其他线程在其他内核上运行。

    事实上,您可能必须确保在您执行的整个操作中没有其他线程访问您正在使用的设备,因为在执行 REP INSB 指令时另一个线程更改设备上的寄存器可能会导致问题。

    关于assembly - REP INSB 是可中断的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62450297/

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