【问题标题】:why do multiprocessor systems need to disable interrupts为什么多处理器系统需要禁用中断
【发布时间】:2016-08-07 12:36:15
【问题描述】:

我了解到,由于其他处理器即使在禁用中断的情况下也可以访问多处理器系统中的共享数据,所以我们实现了自旋锁来实现多处理器系统的同步

但是教科书说如果没有为多处理器系统同步禁用中断(仅实现自旋锁,而不是“禁用中断”),则资源可能会被其他处理器占用。所以在多处理器系统同步中禁用中断也是必不可少的

我不明白为什么我们仍然必须禁用多处理器系统的中断 谁能回答我的问题?

【问题讨论】:

  • 这个问题看起来像是由一台计算机用多线程词库中的随机单词组合而成的。
  • @SergeyA 我认为语言障碍(我希望 OP 可以帮助我们克服!)和所涉及的术语混淆。

标签: linux multithreading operating-system synchronization


【解决方案1】:

即使是单处理器系统也会禁用同步中断。这是操作系统序列化的主要方法。

获得自旋锁后,尽快完成工作,然后释放。

如果你不阻止中断,你可以获得一个自旋锁然后被中断。

您的文字似乎暗示在所有处理器上都禁用了中断。并非[总是] 如此。

【讨论】:

  • 我想知道我是否清楚地理解了您的意思。是否需要阻止中断是如果一个处理器的进程(假设 A)获得一个自旋锁然后被中断,该进程进入阻塞状态,所以如果其他处理器的进程(B)试图访问临界区,它必须等待进程A回到运行状态并退出自旋锁,这会导致开销吗?
  • 理论上,处理器可以阻止自己尝试获取它已经拥有的自旋锁。它还可以增加自旋锁的持有时间。
【解决方案2】:

但是教科书说如果没有为多处理器系统同步禁用中断(仅实现自旋锁,而不是“禁用中断”),则资源可能会被其他处理器占用。所以在多处理器系统同步中禁用中断也是必不可少的

教科书过度简化的情况并不少见。

根据您的 CPU 架构,您当然可以实现一个不禁用中断的系统 - 事实上,您会发现您的多核 PC 启用了中断并且工作得很好。

但这当然需要您了解共享状态、抢占和优先级反转,这甚至比仅针对多线程单核机器更好。在这里禁用所有中断确实是一个穷人的解决方案,您的教科书可能没有描述最佳实践解决方案。

【讨论】:

  • 我什至不确定 OP 在说什么中断。任何抢占式操作系统都基于中断,没有它们就无法工作。
  • @SergeyA 是的;但我记得许多“爱好者”书籍对微控制器上的多任务处理的介绍(遗憾的是,在具有中断优先级处理的 MCU 上编写抢占式保存 ISR 的典型最小示例;似乎微控制器公司喜欢让他们的实习生编写示例)是在关键代码通过之前禁用中断(通常是等待另一个内核完成其工作),然后再激活。这很糟糕,这是一种不好的做法,它破坏了实时性,现代 CPU 支持更好的方法来解决这个问题,但它仍然被广泛宣传。
  • 有趣!我承认,我从来没有读过这些书(也从来没有为 MCU 编程过),所以我什至不明白 OP 可能在说什么。现在至少有一半意义了,谢谢!
  • 看来我自己已经过度简化了这个概念......非常感谢!
猜你喜欢
  • 2019-05-23
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 1970-01-01
  • 2013-03-09
  • 2016-04-29
  • 2012-11-16
相关资源
最近更新 更多