Архитектура операционных систем Основные принципы построения операционных систем Основные принципы построения операционных систем Принцип модульности Принцип. Основные принципы построения операционных систем Основные принципы построения ос кратко

Примеры реализации ОС (на примере ОC Windows)

Инструментарий разработки и отладки компонент ОС

64. Утилиты по ОС Windows XP. Основные возможности инструментария по анализу и разработке компонент ОС: памяти, процессов и потоков, ввода-вывода, отладки. Использование дампа.

Основные концепции построения ОС.

0) Принцип модульности.

Модуль – функционально законченный элемент, выполняемый в соответствии с принятым межмодульным интерфейсом. Модуль выделяется по функциональному признаку. Модульная организация позволяет легко (из)заменять неправильно работающие модули в ОС.

1) Принцип функциональной избирательности.

Для организации эффективной работы ОС, необходимо выделить и хранить в ОЗУ некоторые модули, составляющие ядро:

· Модули по управлению системы прерываний;

· Средство управления выполнения программ (загрузка, приостановка, остановка);

· Модули по управлению процессом (распределение процессорного времени), т.е. диспетчеры программ;

· Модули по управлению выделения памяти. В зависимости от ОС в ядро могут ещё входить другие модули;

· Транзитные модули (загружаются в ОЗУ по мере необходимости, при нехватке ОЗУ могут быть выгружены).

2) Принцип генерируемости ОС.

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

· Исходный код ОС;

· Компилятор с языка программирования на котором система написана;

· Специальная программа и входной язык для неё, который позволяет управлять процессом генерации.

3) Принцип функциональной избыточности.

В состав ОС должно входит несколько типов ПО для выполнения одинаковых функций (поддержка разных ФС).

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

Позволяет представить ресурсы ОС в виде определённого набора планировщиков и мониторов и использует единую схему распределения ресурсов. Наибольшее проявление – концепция виртуальной машины (воспроизводит архитектуру реальной машины, но может обладать произвольными характеристиками).

5) Принцип независимости программ от внешних устройств.

Связь программ с конкретным внешним устройством производится не на этапе трансляции, а на этапе выполнения программы. Получается выгода: не нужна лишняя «перекомпиляция».

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

Способность выполнять программы для другой ОС или даже для другой аппаратной платформы.

2 уровня совместимости:

· По выполняемому коду (бинарная). Условия совместимости:

◦ На уровне команд процессора (одна и та же платформа);



◦ Совместимость на уровне библиотечных вызовов, если являются динамично связываемыми.

· По исходному коду . Требуется выполнение следующих условий:

◦ Наличие компилятора платформы, на котором написана программа;

◦ Совместимость на уровне системных вызовов;

◦ Совместимость на уровне библиотечных вызовов.

7) Принцип открытой наращиваемой ОС (открыт исходный код).

Целостность ОС сохраняется (UNIX).

8) Принцип мобильности (переносимости).

ОС должна легко переноситься на другую аппаратную платформу. Правила создания переносимых ОС:

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

· Необходимо избегать кода, который непосредственно работает с аппаратным обеспечением.

9) Принцип обеспечения безопасности и защиты.

19. Защита системы от пользователя;

20. Защита от несанкционированного доступа.

Архитектура ОС. Различают 3 базовых типа архитектуры операционных систем:

Монолитная архитектура;

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

Данную архитектуру имели самые первые поколения операционных систем.

· Имеются проблемы: расширяемости, переносимости исовместимости ОС;

Многоуровневая архитектура;

появилась как ответ на ограничения монолитной архитектуры в плане расширяемости, переносимости и совместимости.

Основная идея:

0) Полная функциональность операционной системы разделяется на уровни, например уровень управления аппаратурой, уровень управления памятью, уровень файловой системы, уровень управления процессами и т.п.

1) Для каждого уровня определяются интерфейс взаимодействия, т.е. некоторый набор правил, согласно которым следует обращаться за услугами данного уровня.

2) Взаимодействие уровней строится таким образом, что каждый уровень может обращаться за услугами только к соседнему нижележащему уровню через его интерфейс.

3) Внутренние структуры данных каждого уровня не доступны другим уровням, а реализации процедур уровня скрыты и не зависят от реализаций процедур внутри других уровней.

Обязательное условие для разбиения функциональности на уровни – взаимодействие только между соседними уровнями. Запрещаются прямые обращения к любым уровням, минуя соседний уровень.

Характерно вертикальное иерархическое распределение функциональности.

Архитектура типа клиент-сервер на основе микроядра.

Является наиболее совершенной с точки зрения расширяемости и переносимости операционных систем.

Идея: все компоненты ОС разделяются на программы–поставщики услуг (программы серверы, выполняющие определенные действия по запросам других программ), и программы–потребители услуг (программы клиенты, обращающиеся к серверам для выполнения определенных действий).

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

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

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

  1. принцип модульности . Модуль – функционально законченный элемент, выполняемый в соответствии с принятым межмодульным интерфейсом. Модуль выделяется по функциональному признаку. Модульная организация позволяет легко (из)заменять неправильно работающие модули в ОС. Чаще всего используются реентерабельные и привилегированные модули.
  2. принцип функциональной избирательности . Для организации эффективной работы ОС, необходимо выделить некоторые модули и хранить их в ОЗУ. Эти модули составляют ядро ОС. Ядро:
    1. Модули по управлению системы прерываний;
    2. Средство управления выполнения программ (загрузка, приостановка, остановка);
    3. Модули по управлению процессом (распределение процессорного времени), т.е. диспетчеры программ;
    4. Модули по управлению выделения памяти. В зависимости от ОС в ядро могут ещё входить другие модули;
    5. Транзитные модули (загружаются в ОЗУ по мере необходимости, при нехватке ОЗУ могут быть выгружены из памяти).
  3. принцип генерируемости ОС . Подразумевает собой возможность генерации ОС в зависимости от аппаратного обеспечения. Процесс генерации обычно производится один раз, перед достаточно долгим режимом эксплуатации. Для генерации необходимо наличие нескольких компонентов:
    1. Исходный код ОС;
    2. Компилятор с языка программирования на котором система написана;
    3. Специальная программа и входной язык для неё, который позволяет управлять процессом генерации.
    ОС с открытым системным кодом – Linux (UNIX), есть возможность тонкой настройки ядра для конкретного процессора.
  4. принцип функциональной избыточности . В состав ОС должно входит несколько типов ПО для выполнения одинаковых функций (поддержка разных файловых систем).
  5. принцип виртуализации . Позволяет представить ресурсы ОС в виде определённого набора планировщиков и мониторов и использует единую схему распределения ресурсов. Наибольшее проявление – концепция виртуальной машины (воспроизводит архитектуру реальной машины, но может обладать произвольными характеристиками).
  6. принцип независимости программ от внешних устройств . Связь программ с конкретным внешним устройством производится не на этапе трансляции, а на этапе выполнения программы. Получается выгода: не нужна лишняя «перекомпиляция».
  7. принцип совместимости . Способность выполнять программы для другой ОС или даже для другой аппаратной платформы.
    2 уровня совместимости:
    1. по выполняемому коду (бинарная). Условия совместимости:
      1. На уровне команд процессора (одна и та же платформа);
      2. Совместимость на уровне библиотечных вызовов, если являются динамично связываемыми.
    2. 2. по исходному коду. Требуется выполнение следующих условий:
      1. Наличие компилятора платформы, на котором написана программа;
      2. Совместимость на уровне системных вызовов;
      3. Совместимость на уровне библиотечных вызовов.
  8. принцип открытой наращиваемой ОС (открыт исходный код). Целостность ОС сохраняется (UNIX).
  9. принцип мобильности (переносимости). ОС должна легко переноситься на другую аппаратную платформу. Правила создания переносимых ОС:
    1. ОС должна быть написана на языке высокого уровня, для которой существует компилятор на аппаратной платформе. В основном, современные ОС пишут на Си.
    2. Необходимо избегать кода, который непосредственно работает с аппаратным обеспечением.
  10. принцип обеспечения безопасности и защиты :
    1. Защита системы от пользователя;
    2. Защита от несанкционированного доступа.

В 1983 г. придуманы критерии оценки надёжности ОС. Существуют 4 класса безопасности:

Класс D . Относятся системы, не удовлетворяющие системам предыдущих классов (небезопасный);

Класс C . Обеспечение защиты данных от ошибок пользователя. ОС должна иметь следующие средства:

  1. Средства секретного входа;
  2. Обязательно наличие избирательного контроля доступа;
  3. Средства учёта и наблюдения (аудит);
  4. Необходима инициализация памяти при её освобождении. Современные ОС относятся к этому классу.

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

Класс A . Самый высокий уровень безопасности. Необходимо, чтобы имелось формальное (математическое) доказательство безопасности ОС. Примерно 90% процессорного времени тратится на систему безопасности. В наше время используются классы B и C.

Классификация операционных систем

Существует несколько схем классификации операционных систем. Ниже приведена классификация по некоторым признакам с точки зрения пользователя (табл. 1).

Таблица 1. Классификация ОС

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

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

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

Многопроцессорные системы состоят из двух или более центральных процессоров, осуществляющих параллельное выполнение команд. Поддержка мультипроцессирования является важным свойством ОС и приводит к усложнению всех алгоритмов управления ресурсами. Многопроцессорная обработка реализована в таких ОС, как Linux, Solaris, Windows NT и в ряде других.

Многопроцессорные ОС разделяют на симметричные и асимметричные. В симметричных ОС на каждом процессоре функционирует одно и то же ядро и задача может быть выполнена на любом процессоре, то есть обработка полностью децентрализована. В асимметричных ОС процессоры неравноправны. Обычно существует главный процессор (master) и подчиненные (slave), загрузку и характер работы которых определяет главный процессор.

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



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

Приведенная классификация ОС не является исчерпывающей.

ОС различают по назначению, выполняемым функциям и формам реализации. ОС – сложные дискретные системы, но в основу их разработки положены девять принципов (табл. 1).

Таблица 1. Принципы построения операционных систем

№ п/п Принцип Сущность
1. Частотный Наиболее часто встречающиеся операции выполняются наиболее быстро.
2. Модульности ОС создают на основе объединения самостоятельных функциональных элементов системы.
3. Функциональной избирательности Наиболее значимые и часто используемые модули выделяют в ядро ОС.
4. Генерируемости Настройка системных программ исходя из конкретной конфигурации ЭВМ и круга решаемых задач.
5. По умолчанию ОС самостоятельно задает параметры работы вычислительной системы, если их не задает пользователь.
6. Перемещаемости Построение модулей, исполнение которых не зависит от расположения в ОЗУ.
7. Защиты Необходимо разрабатывать меры, защищающие программы и данные от искажения и влияния друг на друга, а также пользователей на ОС.
8. Независимости программ от внешних устройств
9. Наращиваемости и открытости Открытая ОС доступна для анализа специалистам, а наращиваемая – для модификации и совершенствования.

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

1.8. Переносимость ОС

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

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

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

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

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

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

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

  • 1. Единообразная по логике работы память (виртуальная) практически неограниченного объема. Организация работы с информацией в такой памяти производится в терминах обработки данных (в терминах работы с сегментами данных на уровне выбранного пользователем языка программирования);
  • 2. Произвольное количество процессоров (виртуальных), способных работать параллельно и взаимодействовать во время работы. Способы управления процессорами, в том числе синхронизация и информационные взаимодействия, реализованы и доступны пользователям на уровне используемого языка в терминах управления процессами;
  • 3. Произвольное количество внешних устройств (виртуальных), способных работать с памятью виртуальной машины параллельно или последовательно, асинхронно или синхронно по отношению к работе того или иного виртуального процессора, который инициирует работу этих устройств;
  • 4. Информация, передаваемая или хранимая на виртуальных устройствах, не ограничена допустимыми размерами. Доступ к такой информации осуществляется на основе либо последовательного, либо прямого способа доступа в терминах соответствующей системы управления файлами. Предусмотрено расширение информационных структур данных, хранимых на виртуальных устройствах.

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

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

Одним из аспектов принципа совместимости является способность ОС выполнять программы, написанные для других ОС или для более ранних версий данной операционной системы, а также для другой аппаратной платформы. Необходимо разделять вопросы двоичной совместимости и совместимости на уровне исходных текстов приложений. Двоичная совместимость достигается в том случае, когда можно взять исполняемую программу и запустить ее на выполнение под другой ОС. Для этого необходимы: совместимость на уровне команд процессора, совместимость на уровне системных вызовов и даже на уровне библиотечных вызовов, если они являются динамически связываемыми. Совместимость на уровне исходных текстов требует наличия соответствующего транслятора в составе системного программного обеспечения, а также совместимости на уровне библиотек и системных вызовов. При этом необходима перекомпиляция имеющихся исходных текстов в новый выполняемый модуль. Гораздо сложнее достичь двоичной совместимости между процессорами, основанными на разных архитектурах. Для того, чтобы одна машина выполняла программы другой машины, она должна работать с машинными командами, которые ей изначально непонятны. Выходом в таких случаях является использование так называемых прикладных сред или эмуляторов. Учитывая, что основную часть программы, как правило, составляют вызовы библиотечных функций, прикладная среда имитирует библиотечные функции целиком, используя заранее написанную библиотеку функций аналогичного назначения, а остальные команды эмулирует каждую по отдельности. Одним из средств обеспечения совместимости программных и пользовательских интерфейсов является их соответствие стандартам POSIX. Использование стандартов POSIX позволяет создавать программы, которые впоследствии могут легко переноситься из одной системы в другую.

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

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

Принцип обеспечения безопасности при выполнении вычислений является желательным свойством для любой многопользовательской системы. Правила безопасности определяют такие свойства, как защита ресурсов одного пользователя от других и установление квот по ресурсам для предотвращения захвата одним пользователем всех системных ресурсов. Обеспечение защиты информации от несанкци-онированного доступа является обязательной функцией операционных систем. В соответствии со стандартами Национального центра компьютерной безопасности США (NCSC - National Computer Security Center) безопасной считается система, которая «посредством специальных механизмов защиты контролирует доступ к информации таким образом, что только имеющие соответствующие полномочия лица или процессы, выполняющиеся от их имени, могут получить доступ на чтение, запись, создание или удаление информации». Иерархия уровней безопасности отмечает низший уровень безопасности как D, а высший - как А. В класс D попадают системы, оценка которых выявила их несоответствие требованиям всех других классов. Основными свойствами, характерными для систем класса (уровня) С, являются наличие подсистемы учета событий, связанных с безопасностью, и избирательный контроль доступа. На уровне С должны присутствовать:

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

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

1. Частотный принцип.

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

Следствия от применения частотного принципа – это применение многоуровневого планирования при организации работы ОС. На уровень долгосрочного планирования выносятся редкие и длинные операции управления деятельностью системы. Краткосрочному планированию подвергаются часто используемые и короткие операции.

2. Принцип модульности.

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

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

Модуль предполагает лёгкий способ его замены на другой модуль, при наличии заданных интерфейсов. Чаще всего разделение на модули происходит по функциональному признаку.

Модули могут быть восстанавливаемыми и невосстанавливаемыми. Если модуль после окончания работы не восстанавливается в исходное состояние, то он называется однократным. Если модуль в процессе работы искажает своё состояние, но перед окончанием работы восстанавливается в исходное состояние, то его называют многократным. Особое значение при построении ОС имеют модули, называемые параллельно используемыми или реентерабельными. Каждый такой модуль может использоваться одновременно несколькими программами. Это позволяет хранить в памяти только одну копию такого модуля.

3. Принцип функциональной избирательности.

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

При формировании ядра необходимо удовлетворить двум противоречивым требованиям:

– в состав ядра должны войти наиболее часто используемые модули;

– количество модулей должно быть таким, чтобы не занимать много оперативной памяти;

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


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

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

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

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

5. Принцип функциональной избыточности.

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

6. Принцип по умолчанию.

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

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

7. Принцип перемещаемости.

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

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

Этот принцип целесообразно распространять и на пользовательские программы.

8. Принцип защиты.

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

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

Реализуется несколько подходов для обеспечения защиты.

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

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

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

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

9. Принцип независимости программ от внешних устройств.

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

10. Принцип открытой и наращиваемой операционной системы.

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