Любая сложная система должна иметь понятную и рациональную структуру, то есть разделяться на модули, имеющие законченное функциональное назначение с четко оговоренными правилами взаимодействия. Ясное понимание роли каждого отдельного модуля существенно упрощает работу по модификации и развитию системы, а вот сложную систему, не обладающую хорошей структурой, но с понятной, логичной организацией бывает проще разработать заново, чем модернизировать. Качественная проработка структуры и внутренних межмодульных взаимодействий ОС является одной из важнейших задач, встающих перед разработчиками системы. Ошибки на этом этапе могут оказать решающее влияние на дальнейшую судьбу системы.
Функциональная сложность ОС неизбежно приводит к сложности ее архитектуры, под которой понимают структурную организацию ОС на основе различных программных модулей.
Большинство современных ОС представляют собой хорошо структурированные модульные системы, способные к развитию, расширению и переносу на новые платформы. Не существует какой-либо единой архитектуры, но есть универсальные подходы к структурированию ОС.
Наиболее общим подходом к структуризации ОС является разделение всех ее модулей на две группы:
1) ядро – модули, выполняющие основные функции ОС;
2) модули ОС, выполняющие вспомогательные функции ОС.
Модули ядра выполняют такие базовые функции, как управление процессами, памятью, устройствами ввода-вывода и т.д. Ядро составляет самую главную часть ОС, без которой она является полностью неработоспособной и не может выполнять ни одну из своих функций. В ядре решаются внутрисистемные задачи организации вычислительного процесса, недоступные для приложений. Особый класс функций ядра служит для поддержки приложений, создавая для них так называемую прикладную программную среду. Приложения могут обращаться к ядру с запросами – системным вызовами для выполнения тех или иных действий, например для открытия и чтения файла, вывода графической информации на дисплей, получения системного времени и т.д. Функции ядра, которые могут вызываться приложениями, образуют интерфейс прикладного программирования – API (Application Programming Interface).
|
В соответствии со своим назначением функции, выполняемые модулями ядра, являются наиболее часто используемыми функциями ОС, поэтому скорость их выполнения влияет на общую производительность вычислительной системы. Для обеспечения высокой скорости работы ОС все модули ядра или большая их часть постоянно находятся в оперативной памяти, то есть являются резидентными модулями ОС. Вследствие ограниченности такого ресурса системы, как оперативная память, важное значение имеет размер этих постоянно размещенных в памяти модулей. Если разработчик по каким-либо причинам сделает их слишком большими и громоздкими, то производительность ОС резко снизится, поскольку значительная часть ресурсов будет использоваться самой системой для обеспечения собственной работы.
Ядро – это основной элемент всех вычислительных процессов в системе, поэтому крах ядра приводит к краху всей вычислительной системы. Следовательно, разработчики ОС должны уделять надежности кодов ядра особое внимание, даже если при этом процесс их написания и отладки занимает очень много времени. Как правило, ядро ОС оформляется в виде программного модуля специального формата, отличного от формата обычных пользовательских приложений.
|
Вспомогательные модули ОС выполняют не столь важные, как ядро, функции. Например, это могут быть программы архивирования данных, редактирования текстов и многое другое. Вспомогательные функции ОС, как правило, оформляются либо в виде пользовательских приложений, либо в виде библиотек процедур и функций. Вследствие того, что часть компонентов ОС разрабатывается в виде обычных приложений, имеющих стандартный для данной ОС формат, то часто очень сложно отделить вспомогательные модули ОС от обычных пользовательских приложений. По этой причине возникает некоторая размытость границ ОС. Решение о принадлежности какой-либо программы операционной системе принимает производитель ОС. Примером этого может являться web-браузер Internet Explorer компании Microsoft, который сначала поставлялся как отдельное приложение, а впоследствии стал частью ОС Windows 98 и Windows NT 4.0.
Вспомогательные модули ОС, в свою очередь, делятся на следующие основные группы:
1) утилиты – программы, решающие отдельные задачи управления и сопровождения вычислительной системы, например, программы архивации данных, сжатия дисков, тестирования дисков;
2) системные обрабатывающие программы – текстовые или графические редакторы, компиляторы, компоновщики, отладчики и другие программы, входящие в комплект поставки данной ОС;
3) программы предоставления пользователю дополнительных услуг – нестандартный вариант пользовательского интерфейса, включающий вспомогательные и даже игровые программы;
|
4) библиотеки процедур и функций различного назначения, облегчающие разработку пользовательских приложений, например, библиотека математических функций, функций работы с устройствами ввода-вывода и т.д.
Как и обычные пользовательские приложения, все перечисленные группы вспомогательных модулей при выполнении своих задач обращаются к функциям ядра ОС. Схема взаимодействия ядра, вспомогательных модулей ОС и пользовательских приложений приведена на рисунке 1.
Рис. 1. Схема взаимодействия ядра ОС, вспомогательных модулей ОС и пользовательских приложений
За счет разделения ОС на ядро и вспомогательные модули обеспечивается легкая расширяемость ОС. Действительно, для добавления новой высокоуровневой функции достаточно разработать соответствующее приложение, при этом не требуется модифицировать функции, составляющие ядро системы. С учетом того, что вспомогательные модули системы, как правило, оформляются в виде стандартных пользовательских приложений, их модификация или замена старых версий на более новые производится достаточно просто и может быть выполнена даже обычным пользователем с применением специальной системной утилиты – мастера обновлений. Достаточно только получить от производителя ОС файлы с обновленными модулями, запустить мастер обновления и указать ему расположение этих файлов. Гораздо более сложным является внесение изменений в функции ядра. Произвести такие действия по силам только квалифицированному специалисту, причем в зависимости от структурной организации ядра для этого может потребоваться даже полная его перекомпиляция.
Вспомогательные модули ОС обычно загружаются в оперативную память вычислительной системы только на время выполнения своих функций, то есть являются транзитными модулями ОС. Постоянно в оперативной памяти находятся лишь наиболее важные программы ОС, составляющие ее ядро. Применение подобной организации позволяет рационально использовать такой ресурс вычислительной системы, как оперативная память.
Требование обеспечения надежности выполнения приложений приводит к необходимости наличия у ОС некоторых привилегий. Необходимо предотвратить возможность вмешательства в работу ОС или разрушения какой-либо ее части вследствие выполнения некорректно работающих приложений. ОС должна обладать исключительными правами по отношению к другим приложениям. В мультипрограммных системах это просто необходимо для разрешения споров из-за ресурсов вычислительной системы между приложениями. Ни одно приложение не должно иметь возможности получать область оперативной памяти, занимать процессор или управлять другими ресурсами вычислительной системы без ведома ОС.
Несомненно, что обеспечение соответствующих привилегий ОС требует не только соответствующей программной, но и аппаратной поддержки. Аппаратура компьютера должна иметь возможность работать как минимум в двух режимах – пользовательском режиме (user mode) и привилегированном режиме, который также называется режимом ядра (kernel mode), или режимом супервизора (supervisor mode). В пользовательском режиме работы запрещено выполнение некоторых критичных для системы команд, связанных с переключением процессора между задачами, управлением устройствами ввода-вывода, доступом к механизмам распределения и защиты памяти. Некоторые команды в пользовательском режиме запрещено выполнять безусловно (например, команду перехода к привилегированному режиму работы), тогда как выполнение других запрещено только при определенных условиях. Однако контроль за выполнением этих условий находится в ведении ОС и обеспечивается за счет набора команд, которые безусловно запрещены для пользовательского режима. Например, контроль за доступом к памяти достигается за счет того, что команды конфигурирования механизмов защиты памяти разрешается выполнять только в привилегированном режиме, при этом пользовательскому приложению запрещается обращение к областям памяти, занимаемым ОС или другими приложениями. Таким образом становится возможной локализации некорректно работающего приложения в собственной области памяти, и его ошибки не влияют на остальные приложения и ОС.
Поддержка хотя бы двух уровней привилегий на уровне аппаратуры позволяет ОС программным путем построить многоуровневую иерархическую систему привилегий, обеспечивающую более качественное распределение полномочий между модулями ОС. Такой подход применяется для повышения устойчивости ОС к внутренним ошибкам программных кодов. Кроме того, многоуровневая система привилегий позволяет разработчикам ОС создавать более сложные алгоритмы управления вычислительным процессом с целью повышения рациональности использования разделяемых ресурсов.
Как уже было сказано, в ядре ОС осуществляются все основные функции. Вследствие этого именно ядро становится той частью ОС, которая выполняется в привилегированном режиме, а пользовательские приложения, соответственно, – в пользовательском режиме. Повышение устойчивости и надежности ОС, обеспечиваемое за счет работы ядра в привилегированном режиме, тем не менее приводит к замедлению выполнения приложений, поскольку для переключения процессора из пользовательского режима в привилегированный и обратно требуется некоторое, пусть и небольшое, время (см. рис. 2). Следовательно, во всех типах процессоров из-за дополнительной двукратной задержки переключения переход на процедуру со сменой режима выполняется медленнее, чем вызов процедуры без смены режима.
Рис. 2. Смена режимов при выполнении вызова функции ядра
Описанная выше архитектура, основанная на привилегированном ядре и приложениях пользовательского режима, стала классической. Ее применяют многие популярные ОС, в том числе версии UNIX, VAX VMS, IBM OS/390, OS/2.
В процессорах Intel, используемых в персональных компьютерах, возможность работы в привилегированном режиме появилась, начиная с процессора 80286. Однако разработчики широко распространенной ОС MS-DOS не использовали это свойство, и их ОС всегда работает в так называемом реальном режиме. Некорректно написанные приложения вполне могут разрушить основные модули MS-DOS, что приведет к краху системы.