禁用所有中断

Ped*_*rdo 3 java multithreading

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

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

我在SO中发现这篇文章似乎解决了这个问题,但是OP没有给出他想要停止的中断类型的细节,而且帖子已经死了而没有得到一个接受的答案(除了OP删除了简介),所以我希望在这里找到底部.假设我希望CPU完全专用于我的代码(这只是理论上,我知道这非常危险),我怎么能用Java实现这个?

Pet*_*rey 6

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

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

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