Модульная структура


 

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

Для решения этой проблемы система Linux организована в виде набора относительно независимых блоков, которые называются загружаемыми модулями (loadable modules) [GOYE99]. Загружаемые модули Linux имеют две отличитель­ные особенности.

Динамическое связывание. Любой модуль ядра может быть загружен в па­мять и подсоединен к ядру в то время, когда само ядро уже находится в
памяти и выполняется. Любой модуль может быть также отсоединен от яд­ра и удален из памяти в любой момент времени.

Стековая организация. Модули организованы в виде определенной иерархиче­ской структуры. Отдельные модули могут выполнять роль библиотек при обращении к ним модулей более высоких уровней в рамках этой структуры; они
сами также могут обращаться к модулям на более низких уровнях.

Динамическое связывание [FRAN97] облегчает настройку системы и эконо­мит память, которую занимает ядро. В системе Linux программа пользователя или сам пользователь может загружать или выгружать модули с помощью ко­манд insmod и rmmod. Само ядро управляет работой отдельных функций и по мере надобности загружает нужные модули или выгружает те, нужда в которых уже отпала. Кроме того, стековая организация позволяет задавать зависимости модулей, что дает два основных преимущества.

1. Код, являющийся общим для набора однотипных модулей (например, драй­
веры похожих устройств), можно поместить в один модуль, что позволяет
сократить количество повторений.

2. Ядро может проверить наличие в памяти нужных модулей, воздерживаясь
от выгрузки модуля, который нужен для работы других, зависимых от него, и загружая вместе с новым требуемым модулем все необходимые допол­нительные модули.

На примере, приведенном на рис. 2.18, показаны структуры, которые ис­пользуются операционной системой Linux для управления модулями. На рисун­ке приведен список модулей ядра после загрузки модулей FAT и VFAT. Каждый модуль задается двумя таблицами: таблицей модулей и таблицей символов. В таблицу модулей входят перечисленные ниже элементы.

• next. Указатель на следующий модуль. Все модули организованы в виде
связанного «писка. Этот список начинается псевдомодулем (на рис. 2.18 он
не показан).

• ref. Список модулей, которые используются данным модулем.

• symtab. Указатель на таблицу символов данного модуля.

• name. Имя модуля.

• size. Размер модуля в страницах памяти.

• addr. Начальный адрес модуля.

• state. Текущее состояние модуля.

• *cleanup(). Указатель на программу, которая запускается при выгрузке
данного модуля.

 

Рис. 2.18. Пример списка модулей ядра операционной системы Linux

 

Таблица символов определяет символы, контролируемые данным модулем и используемые где-либо еще. В таблицу входят такие элементы.

• size. Полный размер таблицы.

• n_symbols. Количество символов.

• n_refs. Количество ссылок,

• symbols. Таблица символов.

• references. Список модулей, зависящих от данного.

На рис. 2.18 модуль VFAT загружается после модуля FAT и зависит от него.

 


1 Краткое рассмотрение страничной организации памяти приведено в последую­щих разделах данной главы; более подробно этот материал изложен в главе 7, "Управление памятью".

 

2 Заштрихованная область представляет аппаратное обеспечение

4 Следует отметить, что процессы, как правило, обладают каждый своим отдельным адресным пространством, а у потоков адресное пространство общее.

5 Фирме IBM удалось собственными усилиями разработать операционную систему OS/2. Как и Windows NT, OS/2 Warp является современной многозадачной многопоточной операционной системой.

6 Только 16-битовые приложения OS/2. — Прим. ред

7 Здесь и в предыдущем пункте имеются в виду только 16-битовые приложения OS/2.

8 Подробнее об этой модели в приложении к W2K можно узнать, например, из кни­ги Оберг Р. Технология СОМ+. Основы и программирование. — М.: Издательский дом "Вильяме", 2000

9 Более полное генеалогическое дерево приведено в [MCKU96].



Дата добавления: 2016-06-05; просмотров: 1642;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.009 сек.