Статья: Модульная структура
Ядра большинства версий операционной системы UNIX являются монолитными. Напомним, что монолитное ядро — это ядро, которое виртуально включает в себя все возможности операционной системы в виде одного большого блока кода, который запускается как единый процесс в едином адресном пространстве. Все функциональные компоненты такого ядра имеют доступ ко всем его внутренним структурам данных и ко всем программам. При внесении изменений в любую из частей типичной монолитной операционной системы все ее модули и подпрограммы необходимо повторно компоновать и переустанавливать, а перед тем как изменения вступят в силу, систему нужно будет перезагрузить. В результате все модификации, такие, как добавление драйвера нового устройства или новых функций файловой системы, усложняются. Особенно остро эта проблема стоит в системе Linux, глобальную разработку которой выполняют объединенные на добровольных началах группы независимых программистов.
Для решения этой проблемы система Linux организована в виде набора относительно независимых блоков, которые называются загружаемыми модулями (loadable modules) [GOYE99]. Загружаемые модули Linux имеют две отличительные особенности.
• Динамическое связывание. Любой модуль ядра может быть загружен в память и подсоединен к ядру в то время, когда само ядро уже находится в
памяти и выполняется. Любой модуль может быть также отсоединен от ядра и удален из памяти в любой момент времени.
• Стековая организация. Модули организованы в виде определенной иерархической структуры. Отдельные модули могут выполнять роль библиотек при обращении к ним модулей более высоких уровней в рамках этой структуры; они
сами также могут обращаться к модулям на более низких уровнях.
Динамическое связывание [FRAN97] облегчает настройку системы и экономит память, которую занимает ядро. В системе Linux программа пользователя или сам пользователь может загружать или выгружать модули с помощью команд insmod и rmmod. Само ядро управляет работой отдельных функций и по мере надобности загружает нужные модули или выгружает те, нужда в которых уже отпала. Кроме того, стековая организация позволяет задавать зависимости модулей, что дает два основных преимущества.
1. Код, являющийся общим для набора однотипных модулей (например, драй
веры похожих устройств), можно поместить в один модуль, что позволяет
сократить количество повторений.
2. Ядро может проверить наличие в памяти нужных модулей, воздерживаясь
от выгрузки модуля, который нужен для работы других, зависимых от него, и загружая вместе с новым требуемым модулем все необходимые дополнительные модули.
На примере, приведенном на рис. 2.18, показаны структуры, которые используются операционной системой Linux для управления модулями. На рисунке приведен список модулей ядра после загрузки модулей FAT и VFAT. Каждый модуль задается двумя таблицами: таблицей модулей и таблицей символов. В таблицу модулей входят перечисленные ниже элементы.
• next. Указатель на следующий модуль. Все модули организованы в виде
связанного «писка. Этот список начинается псевдомодулем (на рис. 2.18 он
не показан).
• ref. Список модулей, которые используются данным модулем.
• symtab. Указатель на таблицу символов данного модуля.
• size. Размер модуля в страницах памяти.
• addr. Начальный адрес модуля.
• state. Текущее состояние модуля.
• *cleanup(). Указатель на программу, которая запускается при выгрузке
данного модуля.
Рис. 2.18. Пример списка модулей ядра операционной системы Linux
Таблица символов определяет символы, контролируемые данным модулем и используемые где-либо еще. В таблицу входят такие элементы.
• size. Полный размер таблицы.
• n_symbols. Количество символов.
• references. Список модулей, зависящих от данного.
На рис. 2.18 модуль VFAT загружается после модуля FAT и зависит от него.
РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА
Написано много книг по операционным системам, в которых также описывается и архитектура компьютера. В [SILB00], [NUTT00] и [CROW97] речь идет об основных принципах (с использованием результатов исследований нескольких важнейших операционных систем).
В [VAHA96] рассматривается внутреннее устройство операционной системы UNIX, приводится сравнительный анализ нескольких ее вариантов. Полное и точное описание версии UNIX SVR4 со множеством технических подробностей представлено в [GOOD94]. Настоятельно рекомендуем популярное в академических кругах издание по UNIX 4.4BSD [MCKU96], вышедшее в Беркли. Собрание статей по операционной системе UNIX, представляющее большой интерес, было опубликовано в июле-августе 1987 года в журнале Bell System Technical Journal и в октябрьском издании 1984 года журнала AT&T Bell Laboratories Technical Journal. Эти статьи были переизданы [АТТ87а, АТТ87Ь]. В [GRAH95] дается в сжатой форме полное описание операционной системы Solaris 2.x.
О внутреннем устройстве операционной системы Linux подробно рассказано в [ВЕСК98] и [CARD97].
О внутреннем устройстве операционной системы Windows 2000 пока что написано немного. Прекрасное описание внутреннего устройства Windows NT можно найти в [SOLO98].
АТТ87а AT&T. UNIX System Readings and Examples. Volume 1, — Englewood
: Cliffs, NJ: Prentice Hall, 1987. ‘•
ATT87b AT&T. UNIX System Readings and Examples. Volume II. — Englewood Cliffs, NJ: Prentice Hall, 1987.
BECK98 Beck M. et al. Linux Kernel Internals. — Reading, MA: Addison-Wesley, 1998.
CARD97 Card R., Dumas E., Mevel F. The Linux Kernel Book. — New York: Wiley, 1997.
CROW97 Crowley C. Operating Systems: A Design-Oriented Approach. — Chicago: Ir-win, 1997.
GOOD94 Goodheart В., Сох J. The Magic Garden Explained: The Internals of UNIX System V Release 4. — Englewood Cliffs, NJ: Prentice Hall, 1994.
GRAH95 Graham J. Solaris 2.x: Internals and Architecture. — New York: McGraw-Hill, 1995.
MCKU96 McKusick M., Bostic K., Karels M., Quartermain J. The Design and Implementation of the 4.4BSD UNIX Operating System. — Reading, MA: Addison-Wesley, 1996.
NUTTOO Nutt G. Operating Systems: A Modern Perspective. — Reading, MA: Addison-Wesley, 2000.
SILBOO Silberschatz A., Galvin P., Gagne G. Applied Operating System Concepts. — I
Reading, MA: Addison-Wesley, 2000.
SOLO98 Solomon D. Inside Windows NT. — Redmond, WA: Microsoft Press, 1998. j
VAHA96 Vahalia U. UNIX Internals: The New Frontiers. — Upper Saddle River, NJ: I
Prentice Hall, 1996.
2.1.Предположим, у нас есть многозадачный компьютер, в котором каждое задание имеет идентичные характеристики. В течение цикла вычисления одного задания
Т половину времени занимает ввод-вывод, а вторую половину — работа процессора. Для выполнения каждого задания требуется N циклов. Допустим, что для
планирования используется простой алгоритм циклического обслуживания и что
ввод-вывод может выполняться одновременно с работой процессора. Определите
значения следующих величин.
• Реальное время, затрачиваемое на выполнение задания.
• Среднее количество заданий, которое выполняется в течение одного цикла Т.
• Доля времени, в течение которого процессор активен (не находится в режиме ожидания).
Вычислите зги значения для одного, двух и четырех одновременно выполняющихся заданий, считая, что время цикла Т распределяется одним из следующих способов.
а. В течение первой половины периода выполняется ввод-вывод, а в течение второй — работа процессора.
б. В течение первой и четвертой четвертей выполняется ввод-вывод, а в течение второй и третьей — работа процессора.
2.2. Перегруженной операциями ввода-вывода называется такая программа, которая, будучи запущена сама по себе, тратит больше времени на ввод-вывод, чем на
работу процессора. Программой, преимущественно использующей процессор,
называется программа, в которой соотношение затрат времени изменяется в
пользу процессора. Предположим, что в алгоритме краткосрочного планирования предпочтение отдается тем программам, которые в течение недавнего времени использовали процессор меньше других. Объясните, почему в этом алгоритме отдается предпочтение программам, перегруженным операциями ввода-
вывода, хотя тем программам, которые преимущественно используют процессор,
тоже отводится некоторое процессорное время.
2.3. В компьютере есть кэш, основная память и диск, который используется для организации виртуальной памяти. Если слово, к которому производится обращение, находится в кэше, для доступа к нему требуется 20 ns. Если это слово находится в основной памяти, но отсутствует в кэше, то оно сначала загружается в
кэш за 60 ns, а затем к нему производится обращение. Если нужного слова нет в
основной памяти, то чтобы найти его на диске и загрузить в основную память,
требуется 12 ms; еще 60 ns нужны, чтобы скопировать его в кэш, и только затем
к этому слову производится обращение. Результативность обращений к кэшу
равна 0.9, а результативность обращений к основной памяти — 0.6. Найдите
среднее время, которое требуется для доступа системы к нужному ей слову.
2.4. Сравните стратегии планирования, которые могли бы использоваться для оптимизации системы разделения времени и многозадачной пакетной системы.
2.5. В чем заключается предназначение системных вызовов и как они соотносятся с операционной системой и с концепцией работы в режиме ядра и режиме пользователя?
2.6.Одним из основных модулей ядра операционной системы OS/390 для мейнфреймов IBM является System Resource Manager (SRM). Этот модуль распределяет
ресурсы между адресными пространствами (процессами). Именно этот модуль
делает операционную систему OS/390 одной из самых интеллектуальных. Никакие другие операционные системы для мейнфреймов, а тем более другие виды
операционных систем не могут выполнять функций, аналогичных тем, которые выполняет модуль SRM. В концепцию ресурсов входят: процессор, реальная память и каналы ввода-вывода. SRM собирает статистику относительно использования процессора, каналов и различных ключевых структур данных; на основе анализа собранной статистики обеспечивается оптимальная производительность системы. Может производиться дополнительная настройка модуля для различных целей, в соответствии с которыми модуль динамически изменяет конфигурацию и характеристики производительности выполнения заданий. Модуль SRM, в свою очередь, составляет отчеты, на основании которых подготовленный оператор может улучшить производительность и изменить настройку системы с целью улучшения обслуживания клиентов.
В этой задаче идет речь об одном из видов деятельности модуля SRM. Реальная память подразделяется на блоки одинакового размера, которые называются кадрами. Компьютер может содержать многие тысячи кадров, в каждом из которых может находиться блок виртуальной памяти, называющийся страницей. Управление к модулю SRM переходит с частотой примерно 20 раз в секунду; при этом происходит проверка каждой из страниц памяти. Если данная страница не запрашивалась и не изменялась, показания счетчика увеличиваются на 1. Время от времени модуль SRM усредняет эти числа и определяет среднее время, в течение которого система не использует данную страницу кадра памяти. Для чего можно использовать эти данные, и что для этого должен предпринять модуль SRM?
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].