Операционная система – это совокупность взаимосвязанных программ, предназначенных для управления ресурсами компьютера и организации взаимодействия с пользователем.
Введение
Создание операционных систем является скорее инженерным проектом, нежели точной наукой. В этой сфере значительно труднее определить четкие конечные цели и методы их достижения. Для того чтобы проект операционной системы имел успех, проектировщики должны обладать ясным представлением о том, чего они желают достигнуть. Когда отсутствует ясная и понятная цель, то очень трудно выработать необходимые решения.
Цели, которые ставят пред собой разработчики операционных систем, могут варьироваться от системы к системе и будут различными для встроенных систем и серверных систем. Для универсальных операционных систем главными могут считаться следующие моменты:
- Необходимость определения абстракций.
- Необходимость предоставления примитивных операций.
- Необходимость обеспечения изоляции.
- Необходимость управления аппаратурой.
Принципы разработки операционных систем
Основными принципами разработки операционных систем являются следующие принципы:
- Принцип модульности, который считается основным.
- Принцип функциональной избирательности.
- Принцип функциональной избыточности, то есть, осуществление работы разными средствами, которые имеются в системе.
- Принцип генерируемости операционной системы, то есть, наличие возможности изменять конфигурацию системы, в зависимости от функций вычислительной системы и назначения операционной системы.
- Принцип виртуализации, то есть, построения виртуальных ресурсов разных уровней.
- Принцип обеспечения независимости программ от внешних устройств, то есть, связь программ с устройствами осуществляется не на уровне трансляции, а при ее выполнении.
- Принцип совместимости, то есть, способность исполнять программы, которые были написаны для других операционных систем или их версий.
- Принцип открытости и наращиваемости операционной системы.
- Принцип мобильности (переносимости) операционных систем, то есть, обеспечение легкого переноса на новые технические платформы.
- Принцип обеспечения безопасности вычислительных процедур.
Модулем в общем случае является функционально законченный компонент системы, который выполнен согласно принятым межмодульным интерфейсам. То есть, данное определение модуля подразумевает возможность легкой замены его на другой, если имеется необходимый интерфейс.
Методы выделения составных компонентов операционной системы в набор отдельных модулей могут быть различными, но наиболее часто такое подразделение выполняется строго по функциональному признаку. В существенной мере деление системы на модули может определяться применяемой методикой проектирования операционной системы, то есть, снизу вверх или наоборот. Системные программные модули выступают как программные ресурсы и могут распределяться среди выполняющихся процессов. Программные модули могут предназначаться как для однократного, так и для многократного использования.
Однократно используемыми считаются такие модули, которые можно правильно выполнить лишь один раз. То есть, в ходе исполнения они способны повредить себя (повреждению может быть подвергнута часть кода или исходные данные). Естественно, что они должны считаться неделимыми ресурсами. Данный тип модулей, как правило, применяется на этапах загрузки операционной системы, причем файлы на системном диске, в которых расположены эти модули при этом не портятся, то есть, они используются и при последующих запусках.
Многократно применяемые программные модули подразделяются на следующие типы:
- Модули привилегированного типа.
- Модули повторновходимого типа.
- Модули реентерабельного типа.
Привилегированные модули могут работать в привилегированном режиме, то есть, когда отключена системе прерываний программы. Это означает, что никакое внешнее событие не способно прервать порядок их исполнения. Эти модули выступают как попеременно разделяемые ресурсы.
Непривилегированными модулями являются обычные программные модули, выполнение которых может быть прервано. В общем случае они не считаются разделяемыми, поскольку если после прерывания исполнения такого модуля, осуществляемого в рамках одного процесса, запустить его еще раз по требованию другого процесса, то промежуточные результаты прерванных вычислений могут потеряться.
Их противоположностью являются реентерабельные модули (reenterable), то есть, модули, которые допускают повторное обращение. Такие модули разрешают повторное многократное прерывание своего выполнения и повторный запуск. Для этого они формируются таким порядком, чтобы обеспечивалась сохранность промежуточных результатов вычислений и возможность возврата с прерванной точки. Это можно реализовать при помощи следующих методов:
- Статический метод выделения памяти для сохраняемых значений.
- Динамический метод выделения памяти для сохраняемых значений.
Наиболее часто применяется именно динамический метод. При помощи обращения из системной привилегированной секции реализуется запрос на выделение в системной области памяти группы ячеек, необходимой для сохранения текущих данных. Причем в вершину стека записывается указатель на начало выделенной области и ее объем. Далее, после завершения привилегированной части модуля, подключается система прерываний. Это означает возможность прерываний программы во время исполнения основной части модуля.
В случае, когда прерывание не возникает, после окончания выполнения основной части модуля осуществляется запрос на освобождение блока системной области памяти. Если же прерывание все-таки происходит, и другой процесс выполняет обращение к этому же самому реентерабельному модулю, то для нового процесса снова запрашивается новая группа ячеек памяти и в вершину стека помещается новый указатель.