禁用所有中断

时间:2016-02-23 13:39:42

标签: java multithreading

我正在阅读Stallings的“操作系统内部和设计原则”,并在关于并发和互斥的章节中读到:

  

在单处理器系统中,并发进程不能重叠   执行;它们只能交错。此外,一个过程将   继续运行,直到它调用OS服务或直到它   因此,为了保证相互排斥,这就足够了   防止进程被中断。这种能力可以   以OS内核定义的原语形式提供   禁用和启用中断。

我在SO中发现this post似乎解决了这个问题,但是OP并没有详细说明他想要停止的中断类型,并且该帖子已经死了但没有得到接受的答案(除了OP删除了个人资料),所以我希望在这里找到底部。 假设我希望CPU完全专用于我的代码(这只是理论上,我知道这是非常 dangereous),我怎么能用Java实现这个?

1 个答案:

答案 0 :(得分:6)

我在实践中发现的最佳解决方案是隔离CPU,即将isolcpus=添加到Linux启动,配置IRQ Balance以不使用它,并将特定线程绑定到这些隔离的CPU。这将抖动降低到大约10-40微秒。这是我写的一个支持此https://github.com/OpenHFT/Java-Thread-Affinity的库。它通常用于低延迟交易系统,以最大限度地减少抖动。

注意:有不可屏蔽的中断不能以这种方式关闭,我怀疑这样做是不安全的。

您可以使用机器代码指令来禁用中断并再次启用它们,但是您必须是特权用户,并且几乎可以肯定,如果您在任何时间内执行此操作,操作系统中的内容都会中断。

相关问题