С Linux вы можете использовать kexec jump, чтобы полностью передать управление другому ядру (т. Е. Вашей программе). Разумеется, с большой силой приходит большая ответственность - вам все же нужно обслуживать прерывания и избегать развращения памяти старого ядра. В итоге вам придется написать собственное ядро ОС для этого. Кроме того, передача управления занимает довольно много времени, так как ядро должно де-инициализировать все оборудование, а затем повторно инициализировать его, когда придет время для возобновления. Поскольку скачок kexec был первоначально разработан для поддержки гибернации, это не проблема в его исходном контексте, но в зависимости от того, что вы делаете, это может быть проблемой.
Возможно, вы захотите рассмотреть возможность работы в рамках, предоставленном вам ОС, - просто напишите обычный драйвер для того, что вы делаете.
И, наконец, еще один вариант будет использовать linux Real-Time patchset. Это позволяет назначать статические приоритеты всем, даже обработчикам прерываний; запустив процесс с более высоким приоритетом, чем что-либо еще, вы можете приостановить/почти/все - система по-прежнему будет обслуживать небольшую заглушку для прерываний, а также некоторые прерывания, которые нельзя отложить, например, временные прерывания, но для большинства часть тяжелой работы будет отложена до тех пор, пока вы не откажетесь от управления процессором.
Обратите внимание, что пакет исправлений RT не остановит виртуальную память и т. П. - mlockall предотвратит ошибки страницы на допустимых страницах, хотя этого вам и достаточно.
Также имейте в виду, что, что бы вы ни делали, системная BIOS все еще может вызвать SMM traps, что невозможно отключить, за исключением методов, ориентированных на материнскую плату.
Зачем вам это нужно? Единственная причина, по которой я могу придумать, - это объединиться с вещами, с которыми вы не должны возиться (Flash BIOS и т. Д.). – Powerlord
Я принимаю, что прецедент совершенно незначителен. Мой интерес - это прежде всего производительность. Раньше такого рода вещи были обычными в старые 8 и 16-битные дни, и я думаю, что это имеет ценность как интеллектуальное упражнение. Я подумал, возможно, что поставщики ОС оказали достаточное давление на производителей чипов, чтобы добавить аппаратное обеспечение поддержки ОС, которое сделало бы это невозможным, но эта человеческая изобретательность найдет какие-то скрытые способы обойти запреты. Некоторые интересные ответы здесь. –
Вы должны быть * реальными * старайтесь не наступать на все, что может вызвать проблемы, когда ОС вернется. По какой причине вы не можете перезагрузиться в пользовательскую ОС и перезагрузиться в исходную? Производительность кажется странной причиной того, чего вы почти никогда не делали. –