Часть 3

 Тема 1.3 Операционное окружение

Операцио́нное окруже́ние (англ. operating enviroment) — среда, в которой пользователь запускает программу. Например, операционное окружение DOS состоит из всех команд DOS, доступных пользователю. С другой стороны, операционное окружение Macintosh включает в себя графический интерфейс пользователя, использующий иконки и меню вместо команд.
Между операционным окружением и shell пролегает очень тонкая грань. Исторически shell создавались как интерфейс к операционной системе. Он не добавляли новых возможностей и свойств. В задачу shell входило создание более удобного пользовательского интерфейса. Но со временем появились «интелектуальные» shell. И в данный момент есть некоторые отличия между интелектуальным shell и операционным окружением.
Также операционное окружение иногда называют контролирующей программой (control program).
В сфере бизнеса существует понятие стандартного операционного окружения (SOE — Standart Operating Enviroment)
 
Операционная система как расширенная машина
Как было упомянуто ранее, архитектура (система команд, организация памяти, ввод-вывод данных и структура шин) большинства компьютеров на уровне машинного языка примитивна и неудобна для работы с программами, особенно в процессе ввода-вывода данных. 
Чтобы это утверждение не показалось голословным, кратко рассмотрим пример того, как происходит ввод-вывод данных с гибкого диска через совместимые микросхемы контроллера NEC PD765, используемые на большинстве персональных компьютеров с процессором Intel. (В этой книге мы будем использовать и термин «гибкий диск», и термин «дискета».) Контроллер PD765 имеет 16 команд, каждая задается передачей от 1 до 9 байт в регистр устройства. Это команды для чтения и записи данных, перемещения головки диска и форматирования дорожек, а также для инициализации, распознавания, установки в исходное положение и калибровки контроллера и приводов.
Основными командами являются команды read и write (чтение и запись). Каждая из них требует 13 параметров, упакованных в 9 байт. Эти параметры определяют такие элементы, как адрес блока на диске, который нужно прочитать, количество секторов на дорожке, физический режим записи, расстановку промежутков между секторами. Они же сообщают, что делать с меткой адреса данных, которые были удалены. Когда выполнение операции завершается, чип контроллера возвращает упакованные в 7 байт 23 параметра, отражающие наличие и типы ошибок. Но этого не достаточно, и программист при работе с гибким диском должен также постоянно знать, включен двигатель или нет. Если двигатель выключен, его следует включить (с длительным ожиданием запуска) прежде, чем данные будут прочитаны или записаны. Двигатель не может оставаться включенным слишком долго, так как гибкий диск изнашивается. Программист вынужден выбирать между длинными задержками во время загрузки и изнашивающимися гибкими дисками (с вероятностью потери данных на них).
Даже если не вдаваться глубже в подробности этого процесса, становится ясно, что обыкновенный программист вряд ли захочет столкнуться с такими деталями при работе с гибким диском (или жестким диском, работа с ним не менее сложна). 
Вместо этого программисту нужны простые высокоуровневые абстракции. В случае работы с дисками типичной абстракцией является коллекция именованных файлов, содержащихся на диске. Каждый файл может быть открыт для чтения или записи, прочитан или записан, а потом закрыт. А такие детали, как например, текущее состояние двигателя, не должны содержаться в абстракции, предстающей перед пользователем. С точки зрения пользователя операционная система выполняет функцию расширенной машины или виртуальной машины, в которой проще программировать и легче работать, чем непосредственно с аппаратным обеспечением, составляющим реальный компьютер (с базовой машиной).
Режимы работы
Чтобы конкурирующие процессы не могли взаимно влиять друг на друга, часть команд компьютера должны быть зарезервированы для исполнения только ОС. Эти привилегированные инструкции должны представлять такие инструкции, как:
· инициирование и ликвидация прерываний; 
· переключение процессов между процессами; 
· доступ к регистрам, используемый оборудованием защиты памяти; 
· выполнение ввода/вывода; 
· остановка CPU и управление его операциями (пример: инициирование и ликвидация внутренних механизмов таких, как элементы ускорения операций с плавающей точкой и кэшей памяти). 
Чтобы различать, когда можно, а когда нет выполнять привилегированные команды, большинство компьютеров работают более чем в одном режиме. В типичном случае есть два режима, часто известных как режим супервизора и режим пользователя. Если программе пользователя разрешить выполнение любых операций ввода-вывода, она могла бы вывести главный список паролей системы, распечатать информацию любого другого пользователя или вообще испортить операционную систему, поэтому все программы пользователя могут выполняться только в режиме пользователя.
Привилегированные команды могут выполняться только операционной системой в режиме супервизора. 
Переключение из режима пользователя в режим супервизора происходит автоматически в следующих случаях:
· пользовательский процесс вызывает ОС для выполнения некоторых системных функций, требующих привилегированных команд. Такие вызовы называются вызовами супервизора или системными вызовами; 
· возникновение прерываний; 
· возникновение ошибки в пользовательском процессе. Это условие можно понимать как "внутреннее прерывание” и обрабатываться в первую очередь соответствующей процедурой прерывания; 
· когда делается попытка выполнения привилегированной инструкции в режиме пользователя. Эта попытка может рассматриваться как особый вид ошибки и обрабатываться как в случае (с); 
Переключение из режима супервизора назад в режим пользователя происходит по привилегированной команде.
В процессе развития компьютерных архитектур выявилась тенденция к увеличению количества привилегированных команд, т. е. команд, которые не могут выполняться в режиме задачи. Это служит свидетельством определенной тенденции к реализации большего числа функций операционных систем аппаратными средствами. Во многих случаях значительная часть функций операционной системы реализуется в аппаратуре.
Требования к ОС
Сегодня к ОС предъявляется множество требований. Главными из них, конечно же, являются выполнение функций эффективного управления ресурсами вычислительной системы и обеспечение удобного интерфейса для пользователя и прикладных программ. Кроме того, можно выделить ряд основных требований, которым должна удовлетворять любая современная ОС.
Производительность. ОС должна обладать настолько хорошим быстродействием и временем реакции, насколько это позволяет аппаратная платформа. 
Надежность. Это требование ОС определяется архитектурными решениями, положенными  в ее основу, а также качеством реализации. 
Защищенность. Система должна быть защищена как от внутренних, так и от внешних ошибок, сбоев и отказов. Ее действия должны быть всегда предсказуемы, а приложения не должны иметь возможности наносить вред. 
Расширяемость. ОС является расширяемой, если в нее можно вносить дополнения и изменения, не нарушая целостности системы. Расширяемость достигается за счет модульной структуры ОС, при которой программы строятся из отдельных модулей, взаимодействующих только через функциональный интерфейс. 
Переносимость. В идеальном случае ОС должна легко переноситься с одного типа аппаратной платформы на другой. 
Совместимость. Сохранение возможности использования прикладных программ, написанных для "старой” или вообще другой ОС, в новой ОС.
Удобство. Средства ОС должны быть простыми и гибкими, а логика ее работы  ясна пользователю. 
Зачастую некоторые из требований могут противоречить друг другу. Например, на осуществление необходимых проверок и управления, связанных с обеспечением защиты, расходуется как процессорное время, так и некоторые другие ресурсы вычислительной системы. Несмотря на это, любая современная система должна обладать перечисленными выше свойствами.