Как запретить запуск на определенных CPU-ядрах для всех потоков любого приложения, кроме указанного мною потока (в Win/nix)?
Чтобы привязать потоки или процессы к конкретным ядрам ЦП, мы можем использовать функции OS-API: sched_setaffinity() в POSIX и SetProcessAffinityMask(), SetThreadAffinityMask() в WINAPI.
Но если мы хотим, чтобы на этих ядрах не запускались никакие другие потоки многих сторонних приложений, которые в данный момент работают в операционной системе, то как это сделать?
ОБНОВЛЕНИЕ: Нужна система реального времени - необходимо, чтобы в указанных мною потоках никогда не происходило переключения контекста или временной приостановки.
Возможные решения:
- Используйте ОС реального времени, например QNX
- Помимо привязки к ядрам процессора, установить приоритет реального времени
- Используйте XEN-виртуализацию для распределения процессорных ядер между операционными системами.
Ошибка страницы легко устраняется с помощью закрепленной памяти: (POSIX) mlock() или (WINAPI) VirtualLock().