Типы новых функций, которые ядро Linux может поддерживать без восстановления ядра, зависят от набора команд и характера функций. Поскольку x86 предоставляет прямое средство для сохранения состояния процессора (а также указание того, сколько состояний существует), даже те функции, которые добавляют состояние уровня приложения, могут использоваться с новым ядром.
Некоторые ISA предоставляют программный уровень, который может быть несколько независим от операционной системы; например, Alpha имела PAL (привилегированная библиотека архитектуры). Такой уровень может абстрагировать аппаратное обеспечение операционной системы (как и в случае использования BIOS), позволяя операционной системе использовать это программное обеспечение для выполнения конкретных операций.
Очевидно, что даже без интерфейса, указанного в ISA, Linux может быть расширен, чтобы поддерживать использование модуля для обеспечения аналогичной абстракции. Поскольку Linux является открытым исходным кодом, существует меньше стимулов для предоставления такого интерфейса, хотя может иметь, чтобы иметь одно системное изображение с несколькими специализациями системы. В принципе, dynamic kernel patching может предоставить еще более широкий диапазон расширений, хотя он в первую очередь предназначен для критических (безопасных и надежных) обновлений. Как правило, если вы меняете аппаратное обеспечение, перезагружается и может обновлять программное обеспечение.
Чтобы использовать такой интерфейс, подсистемы, которые могут быть затронуты, должны быть известны во время компиляции ядра. Если для абстрагирования новой функции из существующего ядра требуется большое программное обеспечение уровня абстракции, то просто использование нового ядра, как правило, имеет больше смысла. Если поддержка новой функции требует частых вызовов между программным обеспечением уровня абстракции и существующим ядром, производительность будет иметь тенденцию страдать. (Linux ориентирован на монолитность в философии дизайна, предпочитая работу над абстракцией, поэтому требование того, что в конечном итоге может стать гипервизором, вряд ли будет привлекательным, даже если добавленная сложность была незначительной.)
Без такого слоя абстракции изменения, которые добавить состояние или иным образом потребовать, чтобы новые привилегированные операции не могли быть добавлены без изменения ядра. В принципе, новые режимы, которые требуют только привилегированного включения режима, но не добавляют нового состояния (например, индикатор режима использует зарезервированный бит, который ядро записывает как прочитанное) и, которые безопасны для других приложений, которые были включены (потому что код переключения контекста не будет изменен) может поддерживаться относительно простым модулем ядра.
Например, модуль ядра может использоваться для поддержки совершенно новой кодировки команд, указанной ранее зарезервированным битом в записи таблицы страниц страниц с использованием новой кодировки. Поскольку изменение ограничено конкретными страницами, от ядра ядра не требуется специальной поддержки.
Поскольку PAE использовала формат записи в другой таблице, добавление поддержки потребовало нового ядра. Однако подсистемы, не поддерживающие PAE, могут быть модернизированы для поддержки PAE через модули ядра, если основное ядро поддерживает PAE.
Новые непривилегированные инструкции, которые не добавляют состояние или не генерируют новые типы прерываний/исключений (которые входят в привилегированный режим), не требуют поддержки ядра при использовании прикладного программного обеспечения.
(Я даже не программист, а не разработчик операционной системы, поэтому я не знаю, обрабатывает ли Linux обработку исключений таким образом, что модуль ядра может добавлять новый код обработки исключений. Теоретически ISA может определять большая таблица обработчиков исключений, резервирование неиспользуемых записей для поддержки будущих исключений, и в этом случае, позволяя модулю добавлять обработку нового типа исключения, может быть практически. Конечно, если ядро ядра позволяет произвольным обработчикам прерываний изменять модуль , любое такое прерывание, которое может включать системные вызовы, может быть направлено на код модуля, а затем вызывать основные функции ядра для обработки неизмененных аспектов. Предоставление модулю возможности захвата ядра таким образом кажется нецелесообразным.)
Это, очевидно, зависит от Особенность - что о каких особенностях вы говорите? Новые инструкции? Специальные режимы выполнения? Больше регистров --- вам нужно будет полностью перестроить свой вопрос. То, что вы спрашиваете здесь, - «если я добавлю вещь в свою машину, сможет ли машина работать с ней», не указав, что это такое, что означает «работать с ней» или генерировать автомобиль , –
Отлично, это на самом деле то, о чем я прошу. Не могли бы вы дать ответ, ответив на этот вопрос и включив краткое объяснение? – user3815726
Нет, так как мой комментарий не является ответом на ваш вопрос. Перефразируйте свой вопрос, и я это сделаю. –