Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ядро ОС.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
874 Кб
Скачать
☆

Примеры

  • Syllable

  • BeOS

  • Haiku

  • XNU (на основе Darwin, используется в Mac OS X)

  • BSD-основанные

    • DragonFly BSD (первое из семейства BSD микроядро, основанное не на Mach)

  • NetWare[3]

  • Plan 9

  • Inferno

  • NT kernel (используется Windows NT, 2000, 2003; XP, Vista, 7, 8)

  • ReactOS

Комбинация разных подходов

Все рассмотренные подходы к построению операционных систем имеют свои достоинства и недостатки. В большинстве случаев современные операционные системы используют различные комбинации этих подходов. Так, например, сейчас ядро «Linux» представляет собой монолитную систему с отдельными элементами модульного ядра. При компиляции ядра можно разрешить динамическую загрузку и выгрузку очень многих компонентов ядра — так называемых модулей. В момент загрузки модуля его код загружается на уровне системы и связывается с остальной частью ядра. Внутри модуля могут использоваться любые экспортируемые ядром функции.

Существуют варианты ОС GNU, в которых вместо монолитного ядра применяется ядро Mach (такое же, как в Hurd), а поверх него крутятся в пользовательском пространстве те же самые процессы, которые при использовании Linux были бы частью ядра. Другим примером смешанного подхода может служить возможность запуска операционной системы с монолитным ядром под управлением микроядра. Так устроены 4.4BSD и MkLinux, основанные на микроядре Mach. Микроядро обеспечивает управление виртуальной памятью и работу низкоуровневых драйверов. Все остальные функции, в том числе взаимодействие с прикладными программами, осуществляются монолитным ядром. Данный подход сформировался в результате попыток использовать преимущества микроядерной архитектуры, сохраняя по возможности хорошо отлаженный код монолитного ядра.

Смешанное ядро, в принципе, должно объединять преимущества монолитного ядра и микроядра: казалось бы, микроядро и монолитное ядро — крайности, а смешанное — золотая середина. В них возможно добавлять драйверы устройств двумя способами: и внутрь ядра, и в пользовательское пространство. Но на практике концепция смешанного ядра часто подчёркивает не только достоинства, но и недостатки обоих типов ядер.

Примеры: Windows NT, DragonFly BSD.

Загружаемый модуль ядра

Загружаемый модуль ядра (loadable kernel module, LKM) — объектный файл, содержащий код, расширяющий возможности ядра операционной системы. Модули используются, чтобы добавить поддержку нового оборудования или файловых систем или для добавления новых системных вызовов. Когда функциональность, предоставляемая модулем больше не требуется, он может быть выгружен, чтобы освободить память и другие ресурсы.

Большинство современных Unix систем, и Windows, поддерживают загружаемые модули ядра, хотя они могут использовать для них разные названия, например, kernel loadable module (kld) во FreeBSD, kernel extension (kext) в ОС OS X. Иногда их называют Kernel Loadable Modules (KLM), или Kernel Modules (KMOD).

Преимущества

Без загружаемых модулей ядра, операционные системы должны были бы включать всю возможную функциональность в базовом ядре. Значительная часть кода не используется и лишь занимает память. Каждый раз, когда пользователю необходима новая функциональность, ещё не включенная в базовом ядре, требуется полная перекомпиляция базового ядра и перезагрузка. Использование подгружаемых модулей значительно упрощает изменение функциональности ядра и не требует ни полной перекомпиляции (модуль часто может быть собран отдельно от ядра или поставлен в предкомпилированном виде) ни перезагрузок.

Windows

Ядро Windows само по себе не поддерживает расширения с помощью загружаемых модулей. Однако, поддерживаются загружаемые драйверы, а модуль, оформленный в виде драйвера Windows, не обязан работать с каким-либо внешним устройством. Благодаря этому, «псевдодрайверы» широко используются для изменения и расширения функциональности ядра Windows — анти-руткиты, перехватчики отладочного вывода, вспомогательные «агенты» многих системных программ, выпускаемых Sysinternals и т. п.

Linux

В мире Linux модули загружаются и выгружаются утилитой modprobe. Модули хранятся в /lib/modules в файлах с расширением .ko («kernel object»), начиная с версии Linux 2.6. В предыдущих версиях использовалось расширение .o. Команда lsmod показывает список загруженных модулей ядра и зависимости между ними.