Операционные системы. Учебное пособие
.pdf
2.1. Классическая архитектура ОС
стемными вызовами – для выполнения тех или иных действий (например, получение системного времени). Функции ядра, которые могут вызваться приложениями, образуют интерфейс прикладного программирования –API.
Поскольку производительность работы всей системы напрямую зависит от функций ядра, практически все его модули, как правило, размещаются в ОП, т. е. являются резидентными. А так как ядро является движущей силой ОС, то разработчики основное внимание уделяют надежности кодов ядра. Обычно ядро оформляется как программный модуль специального формата, который отличается от пользовательских приложений.
Остальные модули ОС выполняют полезные, но не обязательные функции (например, программа дефрагментации диска). Вспомогательные модули оформляются в виде приложений либо библиотек процедур.
Вспомогательные модули обычно делятся на следующие группы:
1)утилиты – программы управления и сопровождения системы (программа сжатия диска, архивирование);
2)системные обрабатывающие программы (компиляторы, транс-
ляторы);
3)программы предоставления пользователю дополнительных услуг (собственный вариант пользовательского интерфейса, калькулятор);
4)библиотеки процедур, упрощающие разработку приложений (библиотеки математических функций).
Все они обращаются к функциям ядра посредством системных вызовов.
Одним из свойств архитектуры ОС, основанной на ядре, является возможность защиты кодов и данных ОС за счет выполнения функций ядра в привилегированном режиме.
Для надежного управления выполнением приложений ОС должна иметь по отношению к приложениям определенные привилегии. Иначе неправильно работающее приложение может вмешаться в работу ОС. Она должна обладать исключительными полномочиями для того, чтобы выступать в качестве арбитра при конкуренции приложений за ресурсы компьютера.
Обеспечить привилегии ОС невозможно без специальных средств аппаратной поддержки. Аппаратура должна поддерживать, по крайней
21
2. Архитектура операционной системы
мере, два режима работы – пользовательский режим и привилегированный режим. Встречаются также названия «режим ядра» и «режим супервизора». Вся ОС или ее части работают в привилегированном режиме, а приложения – в пользовательском.
Поскольку ядро выполняет самые важные функции ОС, то чаще всего именно оно становится частью ОС, работающей в привилегированном режиме (рис. 2.1).
|
Системные обрабатывающие |
Пользовательские |
|
Пользовательский Утилиты программы |
приложения |
||
режим |
|
|
|
|
|
|
|
Привилегированный |
|
|
|
режим |
|
|
|
|
Ядро ОС |
|
|
Рис. 2.1. Классический подход к структурированию ОС
Приложения ставятся в подчиненное положение за счет запрета выполнения в пользовательском режиме некоторых команд, связанных с переключением процессора с одной задачи на другую, управлением устройствами ввода-вывода, доступом к механизмам распределения и защиты памяти.
Архитектура ОС, основанная на привилегированном ядре и приложениях пользовательского режима, стала классической. Ее используют многие популярные ОС, в том числе различные версии Unix, VAX/ VMS, OS/400, OS/2 и до определенной степени – Windows NT.
2.2. Многослойная структура ОС
Вычислительную систему, работающую под управлением ОС на основе ядра, можно рассматривать как систему, состоящую из трех ие- рархическирасположенныхслоев:нижнийслой–аппаратура,промежу- точный – ядро, а утилиты, обрабатывающие программы и приложения,
22
2.2. Многослойная структура ОС
составляют верхний слой системы. Слоистую структуру принято изображать в виде концентрических окружностей, показывая тем самым, что каждый слой взаимодействует только со смежными слоями.
Многослойный подход является наиболее универсальным и эффективный способом декомпозиции программных систем, в соответствии с которым система состоит из иерархии слоев. Каждый слой обслуживает вышележащий слой, выполняя для него некоторый набор функций, которые образуют межслойный интерфейс. Строгие правила касаются только взаимодействия между слоями, а межмодульные связи внутри слоя могут быть произвольными.
Поскольку ядро представляет собой сложный многофункциональный комплекс, то многослойный подход обычно распространяется и на структуру ядра. Оно может состоять из следующих слоев.
1.Средства аппаратной поддержки. Часть функций ОС может выполняться аппаратными средствами: средства поддержки привилегированного режима, система прерываний, средства защиты памяти и т. п.
2.Машинно-зависимые компоненты. Программные модули, в ко-
торых отражается специфика аппаратной платформы.
3.Базовые механизмы ядра. Наиболее примитивные операции ядра, такие как переключение контекстов процессов, диспетчеризация прерываний. Модули этого слоя не принимают решений о распределении ресурсов, а только обрабатывают решения, принятые модулями вышележащих уровней.
4.Менеджеры ресурсов. Этот слой состоит из мощных функциональных модулей, реализующих стратегические задачи по управлению ресурсами ВС. Обычно на данном слое работают диспетчеры (менеджеры) процессов, ввода-вывода, файловой системы (ФС) и ОП, однако разбиение может быть разным. Каждый из менеджеров ведет учет свободных и используемых ресурсов определенного типа и планирует их распределение в соответствии с запросами приложений. Внутри слоя менеджеров существуют тесные взаимосвязи, отражающие тот факт, что для выполнения процессу нужен доступ одновременно к нескольким ресурсам – процессору, памяти, файлу или устройству ввода-выво- да. Например, при создании процесса менеджер процессов обращается
кменеджеру памяти, который должен выделить процессу определенную область памяти для его кодов и данных.
23
2. Архитектура операционной системы
Интерфейс системных вызовов. Этот слой является самым верхним слоем ядра и взаимодействует непосредственно с приложениями исистемнымиутилитами,образуяприкладнойпрограммныйинтерфейс ОС. Функции API, обслуживающие системные вызовы, предоставляют доступкресурсамсистемывудобнойи компактнойформе,безуказания деталей их физического расположения.
Приведенное разбиение ядра ОС на слои является достаточно условным. В реальной системе количество слоев и распределение функций между ними может быть и иным. Ядро может включать и большее количество слоев. Например, менеджеры ресурсов могут обладать многослойной структурой: менеджер ввода-вывода может состоять из нескольких слоев. Нижний слой образуют драйверы устройств, а верхние слои – драйверы файловых систем.
Иногда возможно и непосредственное обращение с верхнего слоя к функциям нижних слоев, минуя промежуточные.
Выбор количества слоев ядра является очень сложным делом: увеличение числа ведет к некоторому замедлению работы ядра за счет дополнительных расходов на межслойное взаимодействие, а уменьшение числа ухудшает расширяемость и логичность системы. Многие версии ОС Unix имеют неупорядоченное ядро с небольшим числом четко выделенных слоев, а ОС Windows NT ядро разделено на большое число слоев и их взаимодействие формализовано в гораздо большей степени.
2.3. Аппаратная зависимость и переносимость ОС
Многие ОС успешно работают на различных аппаратных платформах без существенных изменений в своем составе. В ОС можно выделить слой машинно-зависимых компонентов ядра и сделать остальные слои общими для разных платформ.
Практически все современные аппаратные платформы имеют некоторый набор средств аппаратной поддержки ОС, в который входят следующие компоненты:
1)средства поддержки привилегированного режима;
2)средства трансляции адресов;
3)средства переключения процессов;
24
2.3.Аппаратная зависимость и переносимость ОС
4)система прерываний;
5)системный таймер;
6)средства защиты областей памяти.
Средства поддержки привилегированного режима обычно ос-
нованы на системном регистре процессора, часто называемом словом состояния машины или процессора. Этот регистр содержит некоторые признаки, определяющие режимы работы процессора, в том числе и признак текущего режима привилегий. Смена режима выполняется изменением слова состояния в результате прерывания или выполнения привилегированной команды. Число градаций привилегированности может быть различным у разных процессоров. В обязанности средств поддержки входит проверка допустимости выполнения программой инструкций при текущем уровне привилегированности.
Средства трансляции адресов выполняют операции преобразования виртуальных адресов, которые содержатся в кодах процесса, в адреса физической памяти.
Средства переключения процессов предназначены для быстрого сохранения контекста приостанавливаемого процесса и восстановления контекста процесса, который становится активным. Содержимое контекста обычно включает содержимое всех регистров общего назначения процессора, регистра флагов операций, а также тех системных регистров и указателей, которые связаны с отдельным процессом, а не ОС.
Система прерываний позволяет компьютеру реагировать на внешние события, синхронизировать выполнение процессов и работу устройств ввода-вывода, быстро переходить с одной программы на другую. Механизм прерываний нужен для того, чтобы оповестить процессор о возникновении в ВС некоторого непредсказуемого события. При возникновении условий прерывания его источник выставляет определенный сигнал, который прерывает выполнение процессором последовательности команд, задаваемой исполняемым кодом, и вызывает автоматический переход на заранее определенную процедуру, называемую
процедурой обработки прерываний.
Прерывания играют важнейшую роль в работе любой ОС, являясь ее движущей силой, поскольку большая часть действий ОС инициируется прерываниями различных типов. Даже системные вызовы выполняются на многих аппаратных платформах с помощью специальной
25
2. Архитектура операционной системы
инструкции прерывания, вызывающей переход к выполнению соответствующих процедур ядра.
Системный таймер, обычно реализуемый в виде регистра-счетчи- ка,необходимОСдлявыдержкиинтерваловвремени.Дляэтоговрегистр программно загружается значение требуемого интервала в у. е., из которого затем автоматически с определенной частотой начинает вычитаться по единице. Частота «тиков» таймера связана с частотой тактового генератора процессора. При достижении нулевого значения счетчика таймер инициирует прерывание, которое обрабатывается процедурой ОС. Прерывания от системного таймера используются ОС в первую очередь для слежения за тем, как отдельные процессы расходуют время процессора.
Средства защиты областей памяти обеспечивают на аппарат-
ном уровне проверку возможности программного кода производить над данными определенной области памяти такие операции, как чтение, запись или выполнение. Если аппаратура поддерживает трансляцию адресов, то средства защиты областей памяти встраиваются в этот механизм. Функции аппаратуры обычно состоят в сравнении уровней привилегий текущего кода процессора и сегмента памяти, к которому производится обращение.
Одна и та же ОС не может без изменений устанавливаться на компьютерах, отличающихся типом процессора или способом организации всей аппаратуры. В ядре не могут не отразиться такие особенности, как количество типов прерываний и формат таблицы ссылок на процедуры обработки прерываний, состав регистров, особенности подключения внешних устройств и т. д.
Однако ядро можно спроектировать так, что только часть модулей будут машинно-зависимыми. В хорошо структурированном ядре такие модули образуют программный слой, примыкающий к слою аппаратуры. Такая локализация машинно-зависимых модулей существенно упрощает перенос ОС на другую платформу. Для уменьшений количества машинно-зависимых модулей производители ОС обычно ограничивают универсальность машинно-независимых модулей, т. е. их независимость условна и распространяется на несколько типов процессоров и платформ.
Если код ОС может быть сравнительно легко перенесен с процессора одного типа на процессор другого типа и с аппаратной платформы
26
2.4. Микроядерная архитектура ОС
одного типа на аппаратную платформу другой типа, то такую ОС называют переносимой, или мобильной.
Вообще говоря, мобильность – это не двоичное состояние, а понятие степени, т. е. вопрос состоит в том, насколько легко можно перенести систему. Чтобы обеспечить свойство мобильности разработчики должны придерживаться следующих правил.
а) Большая часть кода должна быть написана на языке, трансляторы которого имеются на всех машинах, куда предполагается переносить систему. Большинство переносимых ОС написано на языке Си, который имеет много особенностей, полезных для разработки кодов ОС, и компиляторы которого широко доступны.
б) Объем машинно-зависимых частей кода, которые непосредственно взаимодействуют с аппаратными средствами, должен быть по возможности минимизирован. Аппаратно-зависимые параметры можно спрятать в программно-задаваемые данные абстрактного типа. Для осуществления действий по управлению аппаратурой, представленной этими параметрами, должен быть написан набор аппаратно-зависимых функций. Когда модулю ОС требуется выполнить некоторое действие с аппаратурой, он манипулирует абстрактными данными, используя нужную функцию имеющегося набора. Когда ОС переносится, то изменяются только эти данные и функции, которые ими манипулируют.
в) Аппаратно-зависимый код должен быть изолирован в несколькихмодулях.Изоляцииподлежатмодули,отражающиеспецификуаппаратной платформы. Низкоуровневые компоненты ОС, имеющие доступ к процессорно-зависимым структурам данных и регистрам, должны быть оформлены в виде компактных модулей, которые могут быть заменены аналогичными для других процессоров.
2.4. Микроядерная архитектура ОС
Микроядерная архитектура ОС (рис. 2.2) является альтернативой классическому способу построения ОС. Под классической архитектурой понимается организация ОС, в соответствии с которой все основные функции ОС, составляющие многослойное ядро, выполняются в привилегированном режиме.
27
2. Архитектура операционной системы
|
Пользовательские |
Утилиты ОС |
Пользовательский |
|
|
приложения |
Серверы ОС |
|
режим |
|
|
Привилегированный |
|
Микроядро |
режим |
|
|
|
|
Рис. 2.2. Микроядерный подход к структурированию ОС
Суть микроядерной архитектуры состоит в следующем. В привилегированном режиме остается работать только очень небольшая часть ОС, называемая микроядром. Микроядро защищено от остальных частей ОС и приложений. В состав микроядра обычно входят машиннозависимые модули, а также модули, выполняющие базовые функции ядра по управлению процессами, обработке прерываний, управлению виртуальной памятью, пересылке сообщений и координации устройств ввода-вывода. Набор функций микроядра обычно соответствует функциям слоя базовых механизмов обычного ядра. Все остальные функции оформляются в виде приложений, работающих в пользовательском режиме. В общем случае многие менеджеры ресурсов ФС, подсистемы управления виртуальной памятью и процессами, менеджер безопасности становятся «периферийными» модулями, работающими в пользовательском режиме. Такие менеджеры называются серверами ОС, т. е. модулями, основным назначением которых является обслуживание запросов локальных приложений и других модулей ОС. Для реализации микроядерной архитектуры необходимым условием является наличие в ОС удобного способа вызова процедур одного процесса из другого. Поддержка такого механизма и является одной из главных задач микроядра.
Обращения к функциям ОС, оформленным в виде серверов, производятся следующим образом. Клиент, которым может быть либо приложение, либо другой компонент ОС, запрашивает выполнение некоторой функции у соответствующего сервера, посылая ему сообщение. Непосредственная передача сообщений между приложениями невозможна, так как их адресные пространства изолированы друг от друга.
28
2.4. Микроядерная архитектура ОС
Микроядро, выполняющееся в привилегированном режиме, имеет доступ к адресным пространствам каждого из приложений и может работать в качестве посредника. Микроядро передает сообщение серверу, затем сервер выполняет запрошенную операцию, после чего ядро возвращает результаты клиенту с помощью другого сообщения. Таким образом, работа микроядра ОС соответствует известной модели клиентсервер, в которой роль транспортных средств выполняет микроядро.
ОС, основанные на концепции микроядра, в высокой степени удовлетворяют большинству требований, предъявляемых к современным ОС, но за эти достоинства приходится платить снижением производительности, и это является основным недостатком микроядерной архитектуры.
Высокая степень переносимости обусловлена тем, что весь ма- шинно-зависимый код изолирован в микроядре, поэтому для переноса требуется меньше изменений и все они логически сгруппированы.
Расширяемость присуща ОС с микроядерной архитектурой в очень высокой степени, так как ограниченный набор четко определенных интерфейсов микроядра открывает путь к упорядоченному росту и эволюции ОС. Добавление новой подсистемы требует разработки нового приложения, что не затрагивает при этом целостности микроядра.
Микроядерная структура позволяет не только добавлять, но и сокращать число компонентов ОС, что также бывает полезно. Например, не всем пользователям жизненно важно наличие поддержки распределенных вычислений. При микроядерном подходе конфигурируемость ОС не вызывает никаких проблем и не требует особых мер – достаточно изменить файл с начальными настройками системы или остановить ненужные больше серверы в ходе работы обычными для остановки приложений средствами.
Использование микроядерного подхода при структурировании ОС повышает надежность ОС. Каждый сервер выполняется в виде отдельного процесса в своей области памяти и защищен от других серверов. Поскольку серверы выполняются в пользовательском режиме, они не имеют прямого доступа к аппаратуре и не могут модифицировать память, в которой хранится микроядро.
Модель микроядерной архитектуры великолепно подходит для поддержки распределенных вычислений, так как использует механиз-
29
2. Архитектура операционной системы
мы, аналогичные сетевым: взаимодействие клиентов и серверов путем обмена сообщениями. Серверы ОС с микроядерной архитектурой могут работать как на одном, так и на разных компьютерах.
При классической организации ОС выполнение системного вызова сопровождается двумя переключениями режимов, а при микроядерной организации – четырьмя. Таким образом, ОС на основе микроядра при прочих равных условиях всегда будет менее производительной, чем классическое ядро. По этой причине микроядерный подход не получил предрекаемого ему широкого распространения.
В идеальном случае микроядро состоит только из средств передачи сообщений, средств взаимодействия с аппаратурой, в том числе средствдоступакмеханизмампривилегированнойзащиты.Многиеразработчики не придерживаются принципа минимизации функций ядра жестко, жертвуя этим для повышения производительности. В результате реализации ОС образуют некоторый спектр, на одном краю которого находятся системы с минимально возможным микроядром, а на другом – системы, в которых микроядро выполняет достаточно большой объем функций.
Контрольные вопросы и задания
1.На какие модули делится ОС при классической архитектуре?
2.Что такое ядро ОС, на какие слои оно может быть разделено?
3.От чего зависит количество слоев в ядре ОС?
4.Перечислите группы вспомогательных модулей.
5.Какая ОС называется переносимой?
6.Как обеспечивается мобильность ОС?
7.Перечислите и охарактеризуйте средства аппаратной поддерж-
ки ОС.
8.Раскройте суть микроядерной архитектуры.
9.Чем отличается микроядро от классического ядра?
10.Что такое серверы ОС и как они используются в микроядер-
ных ОС?
11.Приведите преимущества и недостатки микроядерной архи-
тектуры.
30
