如何禁止任何应用程序的所有线程在特定 CPU 内核上运行,除非我指定的线程(在 Win/nix 中)?
要将线程或进程绑定到特定的 CPU 内核,我们可以使用 OS-API 函数:POSIX 中的 sched_setaffinity() 和 WINAPI 中的 SetProcessAffinityMask()、SetThreadAffinityMask()。
但是如果我们想,在这些内核上不会启动许多第三方应用程序的任何其他线程,而这些第三方应用程序当前运行在操作系统上,该怎么做呢?
更新:需要一个实时系统 - 必须由我指定线程从未发生上下文切换或临时暂停。
可能的解决方案:
- 使用实时操作系统,例如 QNX
- 除了绑定到处理器内核,设置实时的优先级
- 使用 XEN 虚拟化跨操作系统分配处理器内核
使用固定内存可以轻松解决页面错误:(POSIX) mlock() 或 (WINAPI) VirtualLock()