Принцип особого режима работы

Ядро операционной системы и низкоуровневые драйверы, управляющие работой каналов и устройств ввода-вывода, должны работать в специальном режиме рабо­ты процессора. Это необходимо по нескольким причинам. Во-первых, введение специального режима работы процессора, в котором должен исполняться только код операционной системы, позволяет существенно повысить надежность выпол­нения вычислений. Это касается выполнения как управляющих функций самой операционной системы, так и прикладных задач пользователей. Категорически нельзя допускать, чтобы какая-нибудь прикладная программа могла вмешиваться (преднамеренно или в связи с появлением ошибок вычислений) в вычисления, связанные с супервизорной частью операционной системы. Во-вторых, ряд функ­ций должен выполняться исключительно централизованно, под управлением опе­рационной системы. К этим функциям мы, прежде всего, должны отнести функции, связанные с управлением процессами ввода-вывода данных. Вспомните основные принципы организации ввода-вывода (см. главу 5): все операции ввода-вывода дан­ных объявляются привилегированными. Это легче всего сделать, если процессор может работать, как минимум, в двух режимах: привилегированном (режим су­первизора) и пользовательском. В первом режиме процессор может выполнять все команды, тогда как в пользовательском набор разрешенных команд ограничен. Естественно, что помимо запрета на выполнение команд ввода-вывода в пользова­тельском режиме работы процессор не должен позволять обращаться к своим спе­циальным системным регистрам — эти регистры должны быть доступны только

Принцип особого режима работы - student2.ru Основные принципы построения операционных систем_______________________ 281

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

Поскольку любая программа требует операций ввода-вывода, прикладные програм­мы для выполнения этих (и некоторых других) операций обращаются к суперви­зорной части операционной системы (модуль супервизора иногда называют су­первизором задач) с соответствующим запросом. При этом процессор должен переключиться в привилегированный режим работы. Чтобы программы не могли произвольным образом обращаться к супервизорному коду, который работает в привилегированном режиме, им предоставляется возможность обращаться к нему в строгом соответствии с принятыми правилами. Каждый запрос имеет свой иден­тификатор и должен сопровождаться соответствующим количеством параметров, уточняющих запрашиваемую у операционной системы функцию (операцию). По­этому супервизор задач при получении запроса сначала его тщательно проверяет. Если запрос корректный и программа имеет право с ним обращаться, то запрос на выполнение операции, как правило, передается соответствующему модулю опера­ционной системы. Множество запросов к операционной системе образует соот­ветствующий системный интерфейс прикладного программирования (Application Program Interface, API).

Принцип виртуализации

В наше время уже не требуется пояснять значение слова «виртуальный», ибо о виртуальных мирах, о виртуальной реальности знают даже дети. Принцип виртуа­лизации нынче используется практически в любой операционной системе. Вирту­ализация ресурсов позволяет не только организовать разделение тех ресурсов меж­ду вычислительными процессами, которые не должны разделяться. Виртуализация позволяет абстрагироваться от конкретных ресурсов, максимально обобщить их свойства и работать с некоторой абстракцией, вобравшей в себя наиболее значи­мые особенности. Этот принцип позволяет представить структуру системы в виде определенного набора планировщиков процессов и распределителей ресурсов (мо­ниторов) и использовать единую централизованную схему распределения ресур­сов.

Следует заметить, что сама операционная система существенно изменяет наши представления о компьютере. Она виртуализирует его, добавляя ему функциональ­ности, удобства управления, предоставляя средства организации параллельных вычислений и т. д. Именно благодаря операционной системе мы воспринимаем компьютер совершенно иначе, чем без нее.

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

Принцип особого режима работы - student2.ru 282______________________________ Глава 9. Архитектура операционных систем

пользователи видят и используют виртуальную машину как некое устройство, спо­собное воспринимать их программы, написанные на определенном языке програм­мирования, выполнять их и выдавать результаты на виртуальные устройства, ко­торые связаны с реально существующими в данной вычислительной системе. При таком языковом представлении пользователя совершенно не интересует реальная конфигурация вычислительной системы, способы эффективного использования ее компонентов и подсистем. Он мыслит и работает с машиной в терминах исполь­зуемого им языка.

Чаще виртуальная машина, предоставляемая пользователю, воспроизводит архи­тектуру реальной машины, но архитектурные элементы в таком представлении выступают с новыми или улучшенными характеристиками, часто упрощающими работу с системой. Характеристики могут быть произвольными, но чаще всего пользователи желают иметь собственную «идеализированную» по архитектурным характеристикам машину в следующем составе.

- Единообразная по логике работы память (виртуальная) достаточного для вы­полнения приложений объема. Организация работы с информацией в такой памяти производится в терминах работы с сегментами данных на уровне вы­бранного пользователем языка программирования.

- Произвольное количество процессоров (виртуальных), способных работать параллельно и взаимодействовать во время работы. Способы управления про­цессорами, в том числе синхронизация и информационные взаимодействия, реализованы и доступны пользователям с уровня используемого языка в тер­минах управления процессами.

- Произвольное количество внешних устройств (виртуальных), способных ра­ботать с памятью виртуальной машины параллельно или последовательно, асин­хронно или синхронно по отношению к работе того или иного виртуального процессора, которые инициируют работу этих устройств. Информация, пере­даваемая или хранимая на виртуальных устройствах, не ограничена допусти­мыми размерами. Доступ к такой информации осуществляется на основе либо последовательного, либо прямого способа доступа в терминах соответствую­щей системы управления файлами. Предусмотрено расширение информаци­онных структур данных, хранимых на виртуальных устройствах.

Степень приближения к «идеальной» виртуальной машине может быть большей или меньшей в каждом конкретном случае. Чем больше виртуальная машина, реа­лизуемая средствами операционной системы на базе конкретной аппаратуры ком­пьютера, приближена к «идеальной» по характеристикам машине и, следователь­но, чел, больше ее архитектурно-логические характеристики отличны от реально существующих, тем больше степень ее виртуальности.

Одним из важнейших результатов принципа виртуализации является возможность организации выполнения в операционной системе приложений, разработанных для другой операционной системы, имеющей совсем другой интерфейс прикладного программирования. Другими словами, речь идет об организации нескольких опе­рационных сред, о чем мы уже говорили в главе 1. Реализация этого принципа по­зволяет операционной системе иметь очень сильное преимущество перед другими

Принцип особого режима работы - student2.ru Принцип особого режима работы - student2.ru Основные принципы построения операционных систем_______________________ 283

операционными системами, не имеющими такой возможности. Примером реали­зации принципа виртуализации может служить VDM-машина (Virtual DOS Ma­chine) — защищенная подсистема, предоставляющая полную среду типа MS DOS и консоль для выполнения DOS-приложений. Как правило, параллельно может выполняться практически произвольное число DOS-приложений, каждое в своей VDM-машине. Такие VDM-машины имеются и в операционных системах Win­dows' компании Microsoft, в OS/2, в Linux.

Одним из аспектов общего принципа виртуализации является независимость про­грамм от внешних устройств, хотя иногда эту особенность выделяют особенно и на­зывают принципом. Она заключается в том, что связь программ с конкретными устройствами производится не в процессе создания программы, а в период плани­рования ее исполнения. В результате перекомпиляция при работе программы с но­вым устройством, на котором располагаются данные, не требуется. Этот принцип позволяет одинаково осуществлять операции управления внешними устройствами независимо от их конкретных физических характеристик. Например, программе, содержащей операции обработки последовательного набора данных, безразлично, на каком носителе эти данные будут располагаться. Смена носителя и данных, раз­мещаемых на них (при неизменности структурных характеристик данных), не при­внесет каких-либо изменений в программу, если в системе реализован принцип независимости программ от внешних устройств. Независимость программ от вне­шних устройств реализуется в подавляющем большинстве операционных систем общего применения. Ярким примером такого подхода являются операционные си­стемы с общим названием UNIX. Реализована такая независимость и в большин­стве современных операционных систем для персональных компьютеров.

Например, в системах Windows все аппаратные ресурсы полностью виртуализи-рованы, и прямой доступ к ним со стороны прикладных (и системных обрабатыва­ющих) программ однозначно запрещен. В системах Windows NT/2000/XP даже были введены понятия HAL (Hardware Abstraction Layer — уровень абстрагирова­ния аппаратуры) и HEL (Hardware Emulation Layer — уровень эмуляции аппара­туры), и этот шаг очень помогает в реализации идей переносимости (мобильнос­ти) операционной системы.

Принцип мобильности

Мобильность, или переносимость, означает возможность и легкость переноса опе­рационной системы на другую аппаратную платформу. Мобильная операционная система обычно разрабатывается с помощью специального языка высокого уров­ня, предназначенного для создания системного программного обеспечения. Такой язык помимо поддержки высокоуровневых операторов, типов данных и модуль­ных конструкций должен позволять непосредственно использовать аппаратные возможности и особенности процессора. Кроме этого, такой язык должен быть широко распространенным и реализованным в виде систем программирования,

Принцип особого режима работы - student2.ru ' Не все операционные системы компании Microsoft, в названии которых слово Windows является ос­новным, поддерживают VDM-машины. В частности, такой возможности нет в системе Windows ME.

Принцип особого режима работы - student2.ru 284______________________________ Глава 9. Архитектура операционных систем

которые либо уже имеются на целевой платформе, либо позволяют получать про­граммные коды для целевого компьютера. Другими словами, этот язык системно­го программирования должен быть достаточно распространенным и технологич­ным. Одним из таких языков является язык С. В последние годы язык C++ также стал использоваться для этих целей, поскольку идеи объектно-ориентированного программирования оказались плодотворными не только для прикладного, но и для системного программирования. Большинство современных операционных систем были созданы именно как объектно-ориентированные.

Обеспечить переносимость операционной системы достаточно сложно. Дело в том, что архитектуры разных процессоров могут очень сильно различаться. У них мо­жет быть разное количество рабочих регистров, причем часть регистров может оказаться контекстно-зависимыми, как это имеет место в процессорах с архи­тектурой ia32. Различия могут быть и в реализации адресации. Более того, для операционной системы важной является не только архитектура центрального процессора, но и архитектура компьютера в целом, ибо важнейшую роль играет подсистема ввода-вывода, а она строится на дополнительных (по отношению к цен­тральному процессору) аппаратных средствах. В таких условиях сделать эффек­тивным код операционной системы при условии создания его на языке типа C/C++ невозможно. Поэтому часть программных модулей, которые более всего зависят от аппаратных особенностей процессора, от типов поддерживаемых данных, спо­собов адресации, системы команд и других важнейших моментов, разрабатывает­ся на языке ассемблера. Очевидно, что модули, написанные на языке ассемблера, при переносе операционной системы на процессор с иной архитектурой должны быть написаны заново. Зато остальная (большая) часть кода операционной систе­мы может быть просто перекомпилирована под целевой процессор. Именно по это­му принципу в свое время была создана операционная система UNIX. Относи­тельная легкость переноса этой системы на другие компьютеры позволила сделать ее одной из самых распространенных. Для обеспечения мобильности был даже создан стандарт на интерфейс прикладного программирования, названный POSIX (Portable Operating System Interface for Computer Environments — интерфейс при­кладного программирования для переносимых операционных систем).

К сожалению, на самом деле далеко не все операционные системы семейства UNIX допускают относительно простую переносимость созданного для них программ­ного обеспечения, хотя сами они и поддерживают такую переносимость. Основ­ная причина тому — отход от единого стандарта API — POSIX. Очевидно, что пла­той за универсальность, прежде всего, является потеря производительности при выполнении операций ввода-вывода и вычислений, связанных с этими операция­ми. Поэтому ряд разработчиков шли и до сих пор идут на отказ от принципа мо­бильности, поскольку не всегда следование этому принципу экономически оправ­дано.

Если при разработке операционной системы сразу не следовать принципу мобиль­ности, то в последующем очень трудно обеспечить перенос на другую платформу как самой операционной системы, так и программного обеспечения, созданного для нее. Например, компания IBM потратила долгие годы на перенос своей опера­ционной системы OS/2, созданной для персональных компьютеров с процессора-

Принцип особого режима работы - student2.ru Основные принципы построения операционных систем_______________________ 285

ми архитектуры ia32, на платформу PowerPC. Но даже если изначально в специ­фикации на операционную систему заложить требование легкой переносимости, это не значит, что его в последующем будет просто реализовать. Подтверждением тому является тот же проект OS/2-Windows NT. Как известно, проект Windows NT обеспечивал работу этой операционной системы на процессорах с архитекту­рой ia32, MIPS, Alpha (DEC), PowerPC. Однако в последующем трудности с реа­лизацией этого принципа привели к тому, что нынешние версии операционных систем класса Windows NT (Windows 2000/XP) уже создаются только для про­цессоров с архитектурой ia32 и не поддерживают MIPS, Alpha и PowerPC.

Принцип совместимости

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

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

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

Гораздо сложнее достичь двоичной совместимости между процессорами, основан­ными на разных архитектурах. Для того чтобы один компьютер выполнял про­граммы другого (например, программу для персонального компьютера типа IBM PC хочется выполнять на компьютере типа Маc от фирмы Apple), этот компьютер должен работать с машинными командами, которые ему изначально непонятны. Например, процессор типа PowerPC на Маc должен исполнять двоичный код, пред­назначенный для процессора i80x86. Процессор 80x86 имеет свои собственные де­шифратор команд, регистры и внутреннюю архитектуру. Процессор PowerPC имеет другую архитектуру, он не понимает непосредственно двоичный код 80x86, поэто­му должен выбрать каждую команду, декодировать ее, чтобы определить, для чего она предназначена, а затем выполнить эквивалентную подпрограмму, написанную для PowerPC. К тому же у PowerPC нет в точности таких же регистров, флагов и внутреннего арифметико-логического устройства, как в 80x86, поэтому он должен эмулировать все эти элементы с использованием своих регистров или памяти. И он должен тщательно воспроизводить результаты каждой команды, что требует спе­циально написанных подпрограмм для PowerPC, гарантирующих, что состояние эмулируемых регистров и флагов после выполнения каждой команды будет в точ­ности таким же, как и на реальном процессоре 80x86. Выходом в таких случаях является использование так называемых прикладных сред, или эмуляторов. Учи­тывая, что основную часть программы, как правило, составляют вызовы библио-

Принцип особого режима работы - student2.ru 286______________________________ Глава 9. Архитектура операционных систем

течных функций, прикладная среда имитирует библиотечные функции целиком, используя заранее написанную библиотеку функций аналогичного назначения, а остальные команды эмулирует каждую по отдельности.

Одним из средств обеспечения совместимости программных и пользовательских интерфейсов является соответствие стандартам POSIX. Эти стандарты позволя­ют создавать программы в стиле UNIX, которые впоследствии могут легко пере­носиться из одной системы в другую.

Принцип генерируемости

Согласно принципу генерируемости исходное представление центральной систем­ной управляющей части операционной системы (ее ядра и основных компонен­тов, которые должны постоянно находиться в оперативной памяти) должно обеспе­чивать возможность настройки, исходя из конкретной конфигурации конкретного вычислительного комплекса и круга решаемых задач. Под генерацией операцион­ной системы понимается ее сборка (компоновка) из отдельных программных мо­дулей. В результате генерации получают скомпонованные двоичные коды опера­ционной системы и построенные системные таблицы, отражающие конкретную конфигурацию компьютера. Эта процедура проводится редко перед достаточно протяженным периодом эксплуатации операционной системы. Процесс генерации осуществляется с помощью специальной программы-генератора и соответствую­щего входного языка для этой программы, позволяющего описывать программ­ные возможности системы и конфигурацию машины. В результате генерации получается полная версия операционной системы. Сгенерированная версия опе­рационной системы представляет собой совокупность системных наборов моду­лей и данных.

Упомянутый раньше принцип модульности положительно проявляется при гене­рации операционной системы. Он существенно упрощает ее настройку на требуе­мую конфигурацию вычислительной системы. В наши дни при использовании персональных компьютеров с принципом генерируемости операционной системы можно столкнуться разве что при работе с Linux. В этой UNIX-системе имеется возможность не только использовать какое-либо готовое ядро операционной сис­темы, но и самому сгенерировать (скомпилировать) такое ядро, которое будет оп­тимальным для данного конкретного персонального компьютера и решаемых на нем задач. Кроме генерации ядра в Linux имеется возможность указать и набор подгружаемых драйверов и служб, то есть часть функций может реализовываться модулями, непосредственно входящими в ядро системы, а часть — модулями, име­ющими статус подгружаемых, транзитных.

В остальных современных распространенных операционных системах, в том чис­ле и для персональных компьютеров, конфигурирование системы под соответству­ющий состав оборудования осуществляется на этапе установки, причем в боль­шинстве случаев не представляется возможным серьезно вмешаться в этот процесс. В дальнейшем, при эксплуатации компьютера, можно изменить состав драйверов, служб, отдельных параметров и режимов работы. Как правило, внесение подоб­ных изменений может быть осуществлено посредством редактирования конфигу-

Принцип особого режима работы - student2.ru Основные принципы построения операционных систем_______________________ 287

рационного файла или реестра. Например, мы можем отключить ненужное устрой­ство, заменить для какого-нибудь устройства драйвер, отключить или добавить ту или иную службу. Более того, для большей гибкости часто вводится механизм поддержки нескольких конфигураций. Например, такие популярные системы, как Windows 98 и Windows NT/2000/XP, предоставляют возможность создавать до девяти конфигураций. При загрузке операционной системы пользователю пре­доставляется возможность выбрать одну из имеющихся конфигураций. Таким об­разом, имея всего одну операционную систему, за счет нескольких различающих­ся конфигураций пользователь может получить несколько виртуальных систем, различающихся составом установленного (работающего) оборудования, драйве­ров и служб, и на выбор запускать одну из этих систем.

Принцип открытости

Открытая операционная система доступна для анализа как пользователям, так и си­стемным специалистам, обслуживающим вычислительную систему. Наращивае­мая (модифицируемая, развиваемая) операционная система позволяет не только использовать возможности генерации, но и вводить в ее состав новые модули, со­вершенствовать существующие и т. д. Другими словами, необходимо, чтобы мож­но было легко внести дополнения и изменения, если это потребуется, не нарушая целостности системы. Прекрасные возможности для расширения предоставляет подход к структурированию операционной системы по типу клиент-сервер с ис­пользованием микроядерной технологии. В соответствии с этим подходом опера­ционная система строится как совокупность привилегированной управляющей программы и набора непривилегированных служб — «серверов». Основная часть операционной системы может оставаться неизменной, в то время как добавляются новые службы или изменяются старые.

Этот принцип иногда трактуют как расширяемость системы.

К открытым операционным системам прежде всего следует отнести UNIX-систе­мы и, естественно, системы Linux.

Наши рекомендации