В Linux вы можете использовать kexec jump для полной передачи управления другому ядру (т.е. вашей программе). Конечно, с большой силой приходит большая ответственность - от вас зависит только обслуживание прерываний и избежание повреждения памяти старого ядра. Для этого вам придется написать собственное ядро ОС. Кроме того, передача управления занимает довольно много времени, поскольку ядру необходимо деинициализировать все оборудование, а затем повторно инициализировать его, когда пришло время возобновить работу. Поскольку kexec jump изначально был разработан для поддержки гибернации, в исходном контексте это не проблема, но в зависимости от того, что вы делаете, это может быть проблемой.
Возможно, вы захотите вместо этого работать в рамках, предоставленном вам ОС - просто напишите обычный драйвер для всего, что вы делаете.
Наконец, еще одним вариантом будет использование linux Real-Time patchset . Это позволяет назначать статические приоритеты всем, даже обработчикам прерываний; запустив процесс с более высоким приоритетом, чем все остальное, вы можете приостановить / почти / все - система все равно будет обслуживать небольшую заглушку для прерываний, а также некоторые прерывания, которые нельзя отложить, например прерывания по времени, но для большинства часть тяжелой работы будет отложена до тех пор, пока вы не откажетесь от управления процессором.
Обратите внимание, что набор исправлений RT не остановит виртуальную память и т. П. - mlockall предотвратит сбои страниц на допустимых страницах, если этого достаточно для вас.
Кроме того, имейте в виду, что, что бы вы ни делали, BIOS системы по-прежнему может вызывать прерывания SMM , которые нельзя отключить, кроме как методами, специфичными для модели материнской платы.