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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- единообразная по  логике работы виртуальная память  практически неограниченного объема.

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

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

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

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

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

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

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

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

Гораздо сложнее  достичь двоичной совместимости  между процессорами, основанными  на разных архитектурах. Для того чтобы  один компьютер выполнял программы  другого (например, программу для  ПК типа IBM PC желательно выполнить на ПК типа Macintosh фирмы Apple), этот компьютер должен работать с машинными командами, которые ему изначально непо-нятны. В таком случае процессор типа 680×0 (или PowerPC) должен исполнять двоичный код, предназначенный для процессора i80×86. Процессор 80×86 имеет свои собственные дешифратор команд, регистры и внутреннюю архитектуру. Процессор 680×0 не понимает двоичный код 80×86, поэтому он должен выбрать каждую команду, декодировать ее, чтобы определить, для

чего она предназначена, а затем выполнить эквивалентную  подпрограмму, написанную для 680×0.

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

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

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

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

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

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

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

Введение стандартов POSIX преследовало цель обеспечить переносимость создаваемого программного обеспечения.

Принцип обеспечения безопасности вычислений

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

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

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

Определено 4 уровня безопасности А (высший) – D (низший). При этом в класс D попадают системы, у которых выявлено несоответствие всем трём высшим классам. Класс С делится на два уровня: С1 обеспечивает защиту данных от ошибок пользователя, но не от злоумышленников, а С2 защищает данные в обоих ситуациях. На уровне С2 должны присутствовать:

– секретность входа (идентифицируя пользователей по уникальному имени и паролю);

– контроль доступа (информирование владельца данных о  лицах, имеющих доступ к данным и  их правах на пользование ими);

– наблюдение и учет за ситуацией с безопасностью (фиксация попыток получить доступ, создать  или удалить системные реестры);

– защита памяти (удаление содержимого памяти предыдущего  сеанса работы перед началом нового).

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

Уровень А требует дополнительно формального, математически доказанного соответствия системы требованиям безопасности. Однако А-уровень занимает своими управляющими механизмами до 90% процессорного времени. Более безопасные системы не только снижают продуктивность, но и ограничивают число доступных приложений.

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

Микроядерные ОС

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

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

− управление виртуальной  памятью;

− задания и потоки;

− межпроцессные коммуникации (IPC Inter-Process-Communication);

− управление поддержкой ввода-вывода и прерываниями;

− сервисы набора хоста (Host − главный компьютер, сейчас ПК с IP-адресом) и процессора.

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

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

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

Наиболее ярким  представителем микроядерных ОС является ОС реального времени QNХ. Её микроядро поддерживает только планирование и диспетчеризацию процессов, взаимодействие процессов, обработку прерываний и сетевые службы низшего уровня (см. далее). Объем ядра 8-46 Кбайт.

Минимальная QNX кроме ядра содержит менеджер процессов (создание процессов и управление ими и памятью), файловую систему и менеджер устройств. Эти дополнительные компоненты находятся вне ядра и не увеличивают его размеров.

 Монолитные операционные системы 

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

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

Технология «клиент-сервер»  предполагает наличие двух программных  компонентов:

1) клиента, являющегося  потребителем некоторого сервиса;

2) сервера, являющегося  поставщиком этого сервиса.

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

Принципы  построения интерфейсов  ОС

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

1) управления процессами, в том числе:

1.1 запуск, остановка  и снятие задач с выполнения;

1.2 задание и модификация  приоритета задачи;

1.3 взаимодействие  задач между собой (механизмы  сигналов, семафорические примитивы, очереди, конвейеры, почтовые ящики);

1.4RРС (remote procedure call) − удалённый вызов подпрограмм

2) управление памятью,  в том числе:

2.1 запрос на выделения  блока памяти;

2.2 освобождение памяти;

2.3 изменение параметров  блока памяти (статус доступа,  блокирование или разблокирование  и т.д.);

2.4 отображение файлов  на память;

3) управление вводом-выводом,  в том числе:

3.1 запрос на управление  виртуальными устройствами;

3.2 файловые операции (запросы к файловой системе  на создание, изменение и удаление  данных).

Пользовательский  интерфейс реализуется с помощью  программных модулей, принимающих  его команды (графически или на соответствующем  языке) и транслирующих их в обычные  системные вызовы. Совокупность таких  модулей обычно называют интерпретатором  команд (например, COMMAND.COM в MS-DOS). Получив  команду, командный процессор проводит её лексический и синтаксический анализ и выполняет действие, либо обращается к другим модулям ОС, используя механизм АРI (application program interface − интерфейс прикладного программирования). В последнее время большое распространение получили графические интерфейсы GUI (Graphics User Interface), использующие манипуляторы типа «мышь» или «трекбол». Такая интерфейсная подсистема транслирует «команды» пользователя в обращения к ОС.Имеются два основных подхода к управлению задачами: полное наследование порождаемой задачей ресурсов задачи-родителя, либо равноправные отношения родителя и наследника (ресурсы для обоих запрашиваются у ОС).Обращения к ОС могут осуществляться как посредством вызова подпрограмм, так и через механизм прог-раммных прерываний. Выбор метода реализации вызовов функций АРI определяется архитектурой платформы.Например, в ОС МS-DOS (однозадачная ОС) используется механизм программных прерываний, при этом основной набор функций АРI был доступен через точку входа обработчика прерываний Int 21h.Современные ОС чаще используют метод вызова программных прерываний, при котором число точек входа равно числу АРI-функций. В этом случае вызов сначала передаётся в модуль АРI, а затем переправляется соответствующим обработчикам программных прерываний ОС.

Мультипрограммность и многозадачность 

По числу одновременно выполняемых задач операционные системы можно разделить на два  класса:

многозадачные (Unix, OS/2, Windows);

однозадачные (например, MS-DOS).

Многозадачная ОС, решая  проблемы распределения ресурсов и  конкуренции, полностью реализует  мультипрограммный режим в соответствии с требованиями раздела "Основные понятия, концепции ОС".Многозадачный режим, который воплощает в себе идею разделения времени, называется вытесняющим (preemptive). Каждой программе выделяется квант процессорного времени, по истечении которого управление передается другой программе. Говорят, что первая программа будет вытеснена. В вытесняющем режиме работают пользовательские программы большинства коммерческих ОС.В некоторых ОС (Windows 3.11, например) пользовательская программа может монополизировать процессор, то есть работать в невытесняющем режиме. Как правило, в большинстве систем не подлежит вытеснению код собственно ОС. Ответственные программы, в частности задачи реального времени, также не вытесняются. Более подробно об этом рассказано в лекции, посвященной планированию работы процессора.По приведенным примерам можно судить о приблизительности классификации. Так, в ОС MS-DOS можно организовать запуск дочерней задачи и наличие в памяти двух и более задач одновременно. Однако эта ОС традиционно считается однозадачной, главным образом из-за отсутствия защитных механизмов и коммуникационных возможностей.

Приоритеты  задач. Наследование приоритетов в  ОС реального времени

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

Пусть, к примеру, автомат подсчитывает количество бутылок  на конвейере. Если бутылки появляются напротив датчика с периодом 1 с, а время реакции системы на появление бутылки составляет 0,7 с, то система кажется работоспособной. Однако, если задержка является случайной величиной, то в некоторый момент времени она может оказаться больше 1 с, что приведет к появлению случайной ошибки в количестве бутылок, т.е. к отказу системы. Величина ошибки определяется статистической функцией распределения случайных задержек.

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

Стандарт POSIX {Portable Operating System Interface for Computer Environments) IEEE 1003.1 даёт следующее определение РВ: «реальное время в операционных системах — это способность операционной системы обеспечить требуемый уровень сервиса в определённый промежуток времени». Следовательно, ОС РВ отличаются своим поведением, а не внутренним принципом построения-Поэтому если вероятность появления недопустимо больших задержек достаточно низка для достижения требуемого уровня сервиса (например, если она меньше допустим вероятности отказа системы), то такая ОС в конкретном применении может рассматриваться как ОС РВ. В частности, в соответствии с определением стандарта POSIX операционная система Windows ХР при управлении медленными (тепловыми) процессами может рассматриваться как ОС РВ

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