Тема 1.2 Архитектура операционных систем
1. Основные принципы построения операционных систем
Среди множества принципов построения операционных систем перечислим нескольконаиболее важных:
· принцип модульности,
· принцип виртуализации,
· принципы мобильности (переносимости) и совместимости,
· принцип открытости,
· принцип генерации операционной системы из программных компонентов и некоторые другие.
Принцип модульности
Операционная система строится из множества программных модулей. Под модулемв общем случае понимают функционально законченный элемент системы,выполненный в соответствии с принятыми межмодульными интерфейсами. Посвоему определению модуль предполагает легкий способ его замены другим приналичии заданных интерфейсов. Способы обособления составных частей операционнойсистемы в отдельные модули могут быть существенно разными, но чащевсего разделение происходит именно по функциональному признаку. Особо важное значение при построении операционных систем имеют привилегированные,повторно входимые и реентерабельные модули, ибо они позволяют болееэффективно использовать ресурсы вычислительной системы.
Во всех операционных системах можно выделить некоторую часть наиболее важныхуправляющих модулей, которые должны постоянно находиться в оперативной памяти для более скорой реакции системы на возникающие события и болееэффективной организации вычислительных процессов. Эти модули вместе с некоторыми системными структурами данных, необходимыми для функционирования операционной системы, образуют так называемое ядро операционной системы, т.к. это действительно ее самая главная, центральная часть, основа системы.
При формировании состава ядра требуется удовлетворить двум противоречивымтребованиям. В состав ядра должны войти наиболее часто используемые системныемодули. Количество модулей должно быть таким, чтобы объем памяти, занимаемыйядром, был не слишком большим. В его состав, как правило, входят модулипо управлению системой прерываний, средства по переводу программ изсостояния счета в состояние ожидания, готовности и обратно, средства по распределениюосновных ресурсов, таких как оперативная память и процессор. Операционные системы могут быть микроядерными и макроядерными (монолитными). В микроядерных операционных системах само ядроочень компактно, а остальные модули вызываются из ядра как сервисные. При этомсервисные модули могут размещаться и в оперативной памяти. В противоположностьмикроядерным в макроядерных операционных системах главная супервизорная часть включает в себя большое количество модулей. Более подробно о микроядерныхи макроядерных операционных системах см. далее.
Помимо программных модулей, входящих в состав ядра и постоянно располагающихсяв оперативной памяти, может быть много других системных программныхмодулей, которые получают название транзитных. Транзитные программные модулизагружаются в оперативную память только при необходимости и в случаеотсутствия свободного пространства могут быть замещены другими транзитнымимодулями. В качестве синонима термина «транзитный» можно использовать термин«диск-резидентный».
Принцип особого режима работы
Ядро операционной системы и низкоуровневые драйверы, управляющие работойканалов и устройств ввода-вывода, должны работать в специальном режиме работыпроцессора. Это необходимо по нескольким причинам. Во-первых, введениеспециального режима работы процессора, в котором должен исполняться толькокод операционной системы, позволяет существенно повысить надежность выполнениявычислений. Это касается выполнения как управляющих функций самойоперационной системы, так и прикладных задач пользователей. Категорическинельзя допускать, чтобы какая-нибудь прикладная программа могла вмешиваться(преднамеренно или в связи с появлением ошибок вычислений) в вычисления,связанные с супервизорной частью операционной системы. Во-вторых, ряд функцийдолжен выполняться исключительно централизованно, под управлением операционнойсистемы. К этим функциям мы, прежде всего, должны отнести функции,связанные с управлением процессами ввода-вывода данных. Все операции ввода-вывода данных объявляются привилегированными. Это легче всего сделать, если процессорможет работать, как минимум, в двух режимах: привилегированном (режим супервизора) и пользовательском. В первом режиме процессор может выполнять всекоманды, тогда как в пользовательском набор разрешенных команд ограничен.Естественно, что помимо запрета на выполнение команд ввода-вывода в пользовательском режиме работы процессор не должен позволять обращаться к своим специальным системным регистрам — эти регистры должны быть доступны тольков привилегированном режиме, то есть исключительно супервизорному коду самойоперационной системы. Попытка выполнить запрещенную команду или обратитьсяк запрещенному регистру должна вызывать прерывание (исключение), и центральный процессор должен быть предоставлен супервизорной части операционной
системы для управления выполняющимися вычислениями.
Поскольку любая программа требует операций ввода-вывода, прикладные программыдля выполнения этих (и некоторых других) операций обращаются к супервизорнойчасти операционной системы (модуль супервизора иногда называют супервизоромзадач) с соответствующим запросом. При этом процессор долженпереключиться в привилегированный режим работы. Чтобы программы не моглипроизвольным образом обращаться к супервизорному коду, который работает впривилегированном режиме, им предоставляется возможность обращаться к немув строгом соответствии с принятыми правилами. Каждый запрос имеет свой идентификатори должен сопровождаться соответствующим количеством параметров,уточняющих запрашиваемую у операционной системы функцию (операцию). Поэтомусупервизор задач при получении запроса сначала его тщательно проверяет.Если запрос корректный и программа имеет право с ним обращаться, то запрос навыполнение операции, как правило, передается соответствующему модулю операционнойсистемы. Множество запросов к операционной системе образует соответствующийсистемный интерфейс прикладного программирования (ApplicationProgram Interface, API).
Принцип виртуализации
В наше время уже не требуется пояснять значение слова «виртуальный», ибо овиртуальных мирах, о виртуальной реальности знают даже дети. Принцип виртуализациинынче используется практически в любой операционной системе. Виртуализацияресурсов позволяет не только организовать разделение тех ресурсов междувычислительными процессами, которые не должны разделяться. Виртуализацияпозволяет абстрагироваться от конкретных ресурсов, максимально обобщить ихсвойства и работать с некоторой абстракцией, вобравшей в себя наиболее значимыеособенности. Этот принцип позволяет представить структуру системы в видеопределенного набора планировщиков процессов и распределителей ресурсов (мониторов)и использовать единую централизованную схему распределения ресурсов.Следует заметить, что сама операционная система существенно изменяет нашипредставления о компьютере. Она виртуализирует его, добавляя ему функциональности,удобства управления, предоставляя средства организации параллельныхвычислений и т. д. Именно благодаря операционной системе мы воспринимаемКомпьютер совершенно иначе, чем без нее.
Наиболее законченным и естественным проявлением концепции виртуальности является понятие виртуальной машины. По сути, любая операционная система,являясь средством распределения ресурсов и организуя по определенным правим Управление процессами, скрывает от пользователя и его приложений реальные аппаратные и иные ресурсы, заменяя их некоторой абстракцией. В результатепользователи видят и используют виртуальную машину как некое устройство, способноевоспринимать их программы, написанные на определенном языке программирования,выполнять их и выдавать результатына виртуальные устройства, которые связаны с реально существующими в данной вычислительной системе. Притаком языковом представлении пользователя совершенно не интересует реальнаяконфигурация вычислительной системы, способы эффективного использованияее компонентов и подсистем. Он мыслит и работает с машиной в терминах используемогоим языка.
Чаще виртуальная машина, предоставляемая пользователю, воспроизводит архитектуруреальной машины, но архитектурные элементы в таком представлениивыступают с новыми или улучшенными характеристиками, часто упрощающимиработу с системой. Характеристики могут быть произвольными, но чаще всегопользователи желают иметь собственную «идеализированную» по архитектурнымхарактеристикам машину в следующем составе.
Ярким примером такого подхода являются операционные системыс общим названием UNIX. Реализована такая независимость и в большинствесовременных операционных систем для персональных компьютеров.
Например, в системах Windows все аппаратные ресурсы полностью виртуализированы, и прямой доступ к ним со стороны прикладных (и системных обрабатывающих)программ однозначно запрещен. В системах Windows NT/2000/XP дажебыли введены понятия HAL (Hardware Abstraction Layer — уровень абстрагированияаппаратуры) и HEL (Hardware Emulation Layer — уровень эмуляции аппаратуры),и этот шаг очень помогает в реализации идей переносимости (мобильности)операционной системы.
Принцип мобильности
Мобильность, или переносимость, означает возможность и легкость переноса операционнойсистемы на другую аппаратную платформу. Мобильная операционнаясистема обычно разрабатывается с помощью специального языка высокого уровня,предназначенного для создания системного программного обеспечения. Такойязык помимо поддержки высокоуровневых операторов, типов данных и модульныхконструкций должен позволять непосредственно использовать аппаратныевозможности и особенности процессора. Кроме этого, такой язык должен бытьшироко распространенным и реализованным в виде систем программирования.Другими словами, этот язык системногопрограммирования должен быть достаточно распространенным и технологичным.Одним из таких языков является язык С. В последние годы язык C++ такжестал использоваться для этих целей, поскольку идеи объектно-ориентированногопрограммирования оказались плодотворными не только для прикладного, но и длясистемного программирования. Большинство современных операционных систембыли созданы именно как объектно-ориентированные.
Обеспечить переносимость операционной системы достаточно сложно. Дело в томчто архитектуры разных процессоров могут очень сильно различаться. У них можетбыть разное количество рабочих регистров, различия могут быть и в реализации адресации. Более того, дляоперационной системы важной является не только архитектура центральногопроцессора, но и архитектура компьютера в целом, ибо важнейшую роль играетподсистема ввода-вывода, а она строится на дополнительных (по отношению к центральномупроцессору) аппаратных средствах. В таких условиях сделать эффективнымкод операционной системы при условии создания его на языке типа C/C++невозможно. Поэтому часть программных модулей, которые более всего зависятот аппаратных особенностей процессора, от типов поддерживаемых данных, способовадресации, системы команд и других важнейших моментов, разрабатываетсяна языке ассемблера. Очевидно, что модули, написанные на языке ассемблера,при переносе операционной системы на процессор с иной архитектурой должныбыть написаны заново. Зато остальная (большая) часть кода операционной системыможет быть просто перекомпилирована под целевой процессор. Именно по этомупринципу в свое время была создана операционная система UNIX. Относительнаялегкость переноса этой системы на другие компьютеры позволила сделатьее одной из самых распространенных. Для обеспечения мобильности был дажесоздан стандарт на интерфейс прикладного программирования, названный POSIX(Portable Operating System Interface for Computer Environments — интерфейс прикладногопрограммирования для переносимых операционных систем).
Принцип совместимости
Одним из аспектов совместимости является способность операционной системывыполнять программы, написанные для других систем или для более ранних версийданной операционной системы, а также для другой аппаратной платформы.
Необходимо разделять вопросы двоичной совместимости и совместимости на уровнеисходных текстов приложений. Двоичная совместимость достигается в том случае,когда можно взять исполняемую программу и запустить ее на выполнение надругой операционной системе. Для этого необходимы: совместимость на уровнекоманд процессора, совместимость на уровне системных вызовов и даже на уровнебиблиотечных вызовов, если они являются динамически связываемыми.
Совместимость на уровне исходных текстов требует наличия соответствующеготранслятора в составе системного программного обеспечения, а также совместимостина уровне библиотек и системных вызовов. При этом необходима перекомпиляцияимеющихся исходных текстов в новый выполняемый модуль.
Гораздо сложнее достичь двоичной совместимости между процессорами, основаннымина разных архитектурах. Для того чтобы один компьютер выполнял программыдругого (например, программу для персонального компьютера типа IBMPC хочется выполнять на компьютере типа МAC от фирмы Apple), этот компьютердолжен работать с машинными командами, которые ему изначально непонятны.
Одним из средств обеспечения совместимости программных и пользовательских
интерфейсов является соответствие стандартам POSIX. Эти стандарты позволяют
создавать программы в стиле UNIX, которые впоследствии могут легко переноситься
из одной системы в другую.
Принцип генерируемости
Согласно принципу генерируемости исходное представление центральной системнойуправляющей части операционной системы (ее ядра и основных компонентов,которые должны постоянно находиться в оперативной памяти) должно обеспечиватьвозможность настройки, исходя из конкретной конфигурации конкретноговычислительного комплекса и круга решаемых задач. Под генерацией операционнойсистемы понимается ее сборка (компоновка) из отдельных программных модулей.
В результате генерации получают скомпонованные двоичные коды операционнойсистемы и построенные системные таблицы, отражающие конкретнуюконфигурацию компьютера. Эта процедура проводится редко перед достаточнопротяженным периодом эксплуатации операционной системы. Процесс генерацииосуществляется с помощью специальной программы-генератора и соответствующеговходного языка для этой программы, позволяющего описывать программныевозможности системы и конфигурацию машины. В результате генерацииполучается полная версия операционной системы. Сгенерированная версия операционнойсистемы представляет собой совокупность системных наборов модулейи данных.
Упомянутый раньше принцип модульности положительно проявляется при генерацииоперационной системы. Он существенно упрощает ее настройку на требуемуюконфигурацию вычислительной системы. В наши дни при использованииперсональных компьютеров с принципом генерируемости операционной системыможно столкнуться разве что при работе с Linux. В этой UNIX-системе имеетсявозможность не только использовать какое-либо готовое ядро операционной системы,но и самому сгенерировать (скомпилировать) такое ядро, которое будет оптимальнымдля данного конкретного персонального компьютера и решаемых нанем задач. Кроме генерации ядра в Linux имеется возможность указать и наборподгружаемых драйверов и служб, то есть часть функций может реализовыватьсямодулями, непосредственно входящими в ядро системы, а часть — модулями, имеющими статус подгружаемых, транзитных.
В остальных современных распространенных операционных системах, в том числе и для персональных компьютеров, конфигурирование системы под соответствующий состав оборудования осуществляется на этапе установки, причем в большинстве случаев не представляется возможным серьезно вмешаться в этот процесс.
В дальнейшем, при эксплуатации компьютера, можно изменить состав драйверов,служб, отдельных параметров и режимов работы. Как правило, внесение подобных изменений может быть осуществлено посредством редактирования конфигурационного файла или реестра. Например, мы можем отключить ненужное устройство,заменить для какого-нибудь устройства драйвер, отключить или добавить ту
или иную службу.
Принцип открытости
Открытая операционная система доступна для анализа как пользователям, так и системнымспециалистам, обслуживающим вычислительную систему. Наращиваемая(модифицируемая, развиваемая) операционная система позволяет не толькоиспользовать возможности генерации, но и вводить в ее состав новые модули, совершенствоватьсуществующие и т. д. Другими словами, необходимо, чтобы можнобыло легко внести дополнения и изменения, если это потребуется, не нарушаяцелостности системы. Прекрасные возможности для расширения предоставляетподход к структурированию операционной системы по типу клиент-сервер с использованиеммикроядерной технологии. В соответствии с этим подходом операционнаясистема строится как совокупность привилегированной управляющейпрограммы и набора непривилегированных служб — «серверов». Основная частьоперационной системы может оставаться неизменной, в то время как добавляютсяновые службы или изменяются старые.Этот принцип иногда трактуют как расширяемость системы.
К открытым операционным системам прежде всего следует отнести UNIX-системыи, естественно, системы Linux.
Принцип обеспечения безопасности вычислений
Обеспечение безопасности при выполнении вычислений является желаемым свойствомдля любой многопользовательской системы. Правила безопасности определяюттакие свойства, как защита ресурсов одного пользователя от других и установлениеквот по ресурсам для предотвращения захвата одним пользователем всехсистемных ресурсов (таких как память).
Обеспечение защиты информации от несанкционированного доступа является обязательнойфункцией многих операционных систем. Для решения этой проблемы чащесего используется механизм учетных записей. Он предполагает проведение аутенфикащи пользователя при его регистрации на компьютере и последующую авторизацию, которая определяет уровень полномочий (прав) пользователя.Каждая учетная запись можетвходить в одну или несколько групп. Встроенные группы, как правило, определяютправа пользователей, тогда как создаваемые администратором группы (их называютгруппами безопасности) используются для определения разрешений в доступе пользователейк тем или иным ресурсам. Имеющиеся учетные записи хранятся в специальнойбазе данных, которая бывает доступна только для самой системы. Для этого файлбазы данных с учетными записями открывается системой в монопольном режиме, идоступ к нему со стороны любого пользователя становится невозможным. Делаетсяэто для того, чтобы нельзя было получить базу данных с учетными записями.
Во многих современных операционных системах гарантируется степень безопасностиданных, соответствующая уровню С2 в системе стандартов США. Основыстандартов в области безопасности были заложены в документе «Критерии оценкинадежных компьютерных систем». Этот документ, изданный в США в 1983 годуНациональным центром компьютерной безопасности (National Computer Security
Center), часто называют Оранжевой книгой.
В соответствии с требованиями Оранжевой книги безопасной считается система,которая «посредством специальных механизмов защиты контролирует доступ к информациитаким образом, что только имеющие соответствующие полномочия лицаили процессы, выполняющиеся от их имени, могут получить доступ на чтение, запись,создание или удаление информации».