С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
«Да, архитектура с использованием немаскируемых прерываний (NMI) для доступа к портам и памяти действительно рассматривалась на ранних этапах. Более того она тестировалась в 1992 году. Однако после нескольких итераций проектирования мы отказались от этой идеи в пользу механизма маскируемых прерываний через syscall. Основная причина этого решения — строгое разделение типов прерываний: немаскируемые прерывания (NMI) будут жёстко зарезервированы для критических аппаратных исключительных ситуаций (например, сбоев по питанию или ошибок памяти). Использовать такой мощный и приоритетный механизм для рядовых системных вызовов было бы архитектурной ошибкой.
Таким образом, мы пришли к более сбалансированному и целостному решению, выдержанному в ретро-духе.
Ключевой принцип прост: всё, что работает с железом, лучше использовать через syscall, а не прямым доступом. Это не только безопаснее, но и архитектурно чище.
Третий слот адресного пространства жёстко зарезервирован для супервизора. В нём расположено MMIO-пространство, через которое отображены все аппаратные устройства. Прямой доступ к большинству функций возможен только в режиме супервизора.
Попасть в этот слот можно исключительно через вызов syscall. Клиентское ПО загружает данные в регистры и выполняет команду out в порт syscall, что вызывает маскируемое прерывание. Это переключение не оптимизировано и работает как классическое прерывание, что соответствует ретро-стилистике системы. Как только процессор переходит по вектору этого прерывания, происходит аппаратное переключение в режим супервизора с одновременным подключением третьего слота.
Возврат управления осуществляется записью в специальный регистр режима менеджера с установкой бита "отключение супервизора". При этом следующая за этой записью команда выполняется ещё в режиме супервизора, и только последующая — уже в пользовательском режиме, что обеспечивает корректный переход.
Таким образом, вместо прямого управления десятками аппаратных портов существует единственный, хорошо определённый портал — порт syscall. Делая такой вызов, клиентское ПО может запросить супервизор выполнить привилегированную операцию.
Одна из таких операций — включение "доверенного режима". По сути, это запуск кода в режиме супервизора без ограничений: можно исполнять код из любого слота (0, 1 или 2), а после возврата в пользовательский режим — сохранять полный доступ к третьему слоту и его аппаратным регистрам. Это мощный, но опасный инструмент, который предоставляется на страх и риск пользователя.»
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)