2015-06-18 4 views
0

Если у процессора есть некоторые новые функции, как это делает ядро ​​Linux? Из того, что я помню, PAE не нужно перестраивать всю систему, а Linux, похоже, просто устанавливает драйвер и все работает.Новые функции ядра, включенные в ядро ​​Linux

Скажем, если ЦПУ обеспечивает больше режимов выполнения, нужно ли перестраивать всю систему?

Если да, то почему PAE не нужно перестраивать, пока это может понадобиться?

+2

Это, очевидно, зависит от Особенность - что о каких особенностях вы говорите? Новые инструкции? Специальные режимы выполнения? Больше регистров --- вам нужно будет полностью перестроить свой вопрос. То, что вы спрашиваете здесь, - «если я добавлю вещь в свою машину, сможет ли машина работать с ней», не указав, что это такое, что означает «работать с ней» или генерировать автомобиль , –

+0

Отлично, это на самом деле то, о чем я прошу. Не могли бы вы дать ответ, ответив на этот вопрос и включив краткое объяснение? – user3815726

+0

Нет, так как мой комментарий не является ответом на ваш вопрос. Перефразируйте свой вопрос, и я это сделаю. –

ответ

1

Типы новых функций, которые ядро ​​Linux может поддерживать без восстановления ядра, зависят от набора команд и характера функций. Поскольку x86 предоставляет прямое средство для сохранения состояния процессора (а также указание того, сколько состояний существует), даже те функции, которые добавляют состояние уровня приложения, могут использоваться с новым ядром.

Некоторые ISA предоставляют программный уровень, который может быть несколько независим от операционной системы; например, Alpha имела PAL (привилегированная библиотека архитектуры). Такой уровень может абстрагировать аппаратное обеспечение операционной системы (как и в случае использования BIOS), позволяя операционной системе использовать это программное обеспечение для выполнения конкретных операций.

Очевидно, что даже без интерфейса, указанного в ISA, Linux может быть расширен, чтобы поддерживать использование модуля для обеспечения аналогичной абстракции. Поскольку Linux является открытым исходным кодом, существует меньше стимулов для предоставления такого интерфейса, хотя может иметь, чтобы иметь одно системное изображение с несколькими специализациями системы. В принципе, dynamic kernel patching может предоставить еще более широкий диапазон расширений, хотя он в первую очередь предназначен для критических (безопасных и надежных) обновлений. Как правило, если вы меняете аппаратное обеспечение, перезагружается и может обновлять программное обеспечение.

Чтобы использовать такой интерфейс, подсистемы, которые могут быть затронуты, должны быть известны во время компиляции ядра. Если для абстрагирования новой функции из существующего ядра требуется большое программное обеспечение уровня абстракции, то просто использование нового ядра, как правило, имеет больше смысла. Если поддержка новой функции требует частых вызовов между программным обеспечением уровня абстракции и существующим ядром, производительность будет иметь тенденцию страдать. (Linux ориентирован на монолитность в философии дизайна, предпочитая работу над абстракцией, поэтому требование того, что в конечном итоге может стать гипервизором, вряд ли будет привлекательным, даже если добавленная сложность была незначительной.)

Без такого слоя абстракции изменения, которые добавить состояние или иным образом потребовать, чтобы новые привилегированные операции не могли быть добавлены без изменения ядра. В принципе, новые режимы, которые требуют только привилегированного включения режима, но не добавляют нового состояния (например, индикатор режима использует зарезервированный бит, который ядро ​​записывает как прочитанное) и, которые безопасны для других приложений, которые были включены (потому что код переключения контекста не будет изменен) может поддерживаться относительно простым модулем ядра.

Например, модуль ядра может использоваться для поддержки совершенно новой кодировки команд, указанной ранее зарезервированным битом в записи таблицы страниц страниц с использованием новой кодировки. Поскольку изменение ограничено конкретными страницами, от ядра ядра не требуется специальной поддержки.

Поскольку PAE использовала формат записи в другой таблице, добавление поддержки потребовало нового ядра. Однако подсистемы, не поддерживающие PAE, могут быть модернизированы для поддержки PAE через модули ядра, если основное ядро ​​поддерживает PAE.

Новые непривилегированные инструкции, которые не добавляют состояние или не генерируют новые типы прерываний/исключений (которые входят в привилегированный режим), не требуют поддержки ядра при использовании прикладного программного обеспечения.

(Я даже не программист, а не разработчик операционной системы, поэтому я не знаю, обрабатывает ли Linux обработку исключений таким образом, что модуль ядра может добавлять новый код обработки исключений. Теоретически ISA может определять большая таблица обработчиков исключений, резервирование неиспользуемых записей для поддержки будущих исключений, и в этом случае, позволяя модулю добавлять обработку нового типа исключения, может быть практически. Конечно, если ядро ​​ядра позволяет произвольным обработчикам прерываний изменять модуль , любое такое прерывание, которое может включать системные вызовы, может быть направлено на код модуля, а затем вызывать основные функции ядра для обработки неизмененных аспектов. Предоставление модулю возможности захвата ядра таким образом кажется нецелесообразным.)

+0

Linux позволяет вам строить практически все как модуль. Это не так много, «позволяя модулю делать х нецелесообразно», поскольку «загрузка модуля, разработанного для исключений перехватов и системных вызовов, может быть не лучшим способом поддержки новой ISA». Linux не тратит время, пытаясь быть в безопасности, затрудняя работу модулей, чтобы они могли что-либо сделать. Если вы загружаете вредоносный модуль, вы ввернуты, потому что они могут просто перезаписать любую память, которую они хотят. Могу также сделать так, чтобы модули могли надежно и надежно быть сконструированы так, чтобы что-то делать, как я понимаю. –

Смежные вопросы