Пост-UNIX-архитектуры операционных систем

Коллектив, создавший UNIX, развил концепцию унификации объектов операционной системы, включив в исходную концепцию UNIX «устройство – это тоже файл» также и процессы, и любые другие системные, сетевые и прикладные сервисы, создав новую концепцию: «что угодно – это файл». Эта концепция стала одним из основных принципов системы Plan9 (название было позаимствовано из фантастического триллера «План 9 из открытого космоса» Эдварда Вуда-младшего), призванной преодолеть принципиальные недостатки дизайна UNIX и сменившей «рабочую лошадку» UNIX System V на компьютерах сети Bell Labs в 1992 году.

Кроме реализации всех объектов системы в виде файлов и размещения их на едином и персональном для каждого терминала вычислительной сети пространстве (namespace), были пересмотрены другие архитектурные решения UNIX. Например, в Plan9 отсутствует понятие «суперпользователь», и, соответственно, исключаются любые нарушения режима безопасности, связанные с нелегальным получением прав суперпользователя в системе. Для представления (хранения, обмена) информации Роб Пайк и Кен Томпсон разработали универсальную кодировку UTF-8, на сегодняшний день ставшую стандартом де-факто. Для доступа к файлам используется единый универсальный протокол 9P, по сети работающий поверх сетевого протокола (TCP или UDP). Таким образом, для прикладного ПО сети не существует – доступ к локальным и к удалённым файлам единообразен. 9P – байт-ориентированный протокол, в отличие от других подобных протоколов, являющихся блок-ориентированными. Это также результат работы концепции: доступ побайтно – к унифицированным файлам, а не поблочно – к разнообразным и сильно изменяющимися с развитием технологий устройствам. Для контроля доступа к объектам не требуется иных решений, кроме уже существующего в операционной системе контроля доступа к файлам. Новая концепция системы хранения избавила администратора системы от изнурительного труда по сопровождению архивов и предвосхитила современные системы управления версиями файлов.

Операционные системы, созданные на базе или идеях UNIX, такие как всё семейство BSD и системы GNU/Linux, постепенно перенимают новые идеи из Bell Labs. Возможно, эти новые идеи ждёт большое будущее и признание ИТ-разработчиков.

Новые концепции были использованы Робом Пайком в «Inferno».

На основе Plan9 в Испании разрабатываются системы Off++ и Plan B, носящие экспериментальный характер.

К попыткам создать пост-UNIX-архитектуру можно также отнести разработку системы программирования и операционной среды Оберон в Швейцарском федеральном технологическом институте (ETH Zurich) под руководством профессора Никлауса Вирта.

 

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

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

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

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

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

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

 

Операционная система реального времени (ОСРВ) [Real-Time Operating System] – тип операционной системы. Есть много определений термина, по сути похожих друг на друга:

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

· Операционная система, реагирующая в предсказуемое время на непредсказуемое появление внешних событий;

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

 

Реальное время в операционных системах – это способность операционной системы обеспечить требуемый уровень сервиса в определённый промежуток времени (по стандарту POSIX 1003.1)

 

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

По основному архитектурному принципу ОС разделяются на микроядерные и монолитные. В некоторой степени это разделение тоже условно, однако можно в качестве яркого примера микроядерной ОС привести ОСРВ QNX, тогда как в качестве монолитной можно назвать Windows 95/98 или ОС Linux. Ядро ОС Windows мы не можем изменить, нам не доступны его исходные коды и у нас нет программы для сборки (компиляции) этого ядра. А вот в случае с Linux мы можем сами собрать ядро, которое нам необходимо, включив в него те необходимые про­граммные модули и драйверы, которые мы считаем целесообразным включить именно в ядро (а не обращаться к ним из ядра).

 

 

Понятие операционной среды

 

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

 

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

 

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

Например, в далекие пятидесятые годы, на заре развития вычислительных сис­тем, при разработке первых систем программирования прежде всего создавали программные модули для подсистемы ввода/вывода, а уже затем – вычисления часто встречающихся математических операций и функций. Благодаря этому при создании прикладных программ программисты могли просто обращаться к соот­ветствующим функциям ввода/вывода и иным функциям и процедурам, что из­бавляло их от необходимости каждый раз создавать все программные компонен­ты «с нуля» и от необходимости знать во всех подробностях особенности работы контроллеров ввода/вывода и соответствующих интерфейсов.

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

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

 

Операционная среда может включать несколько интерфейсов: пользовательские и программные. Если говорить о пользовательских, то, например, система Linux имеет для пользователя как интерфейсы командной строки (можно использо­вать различные «оболочки» – shell), интерфейс наподобие Norton Commander – Midnight Commander, так и графические интерфейсы – X-Window с различны­ми менеджерами окон – KDE, Gnome и т.д. Если же говорить о программных интерфейсах, то в той же ОС Linux программы могут обращаться как к операци­онной системе за соответствующими сервисами и функциями, так и к графиче­ской подсистеме (если она используется). С точки зрения архитектуры процес­сора (и всего ПК в целом) двоичная программа, созданная для работы в среде Linux, использует те же команды и форматы данных, что и программа, создан­ная для работы в среде Windows NT. Однако в первом случае мы имеем обраще­ние к одной операционной среде, а во втором – к другой. И программа, создан­ная для Windows непосредственно, не будет выполняться в Linux; однако если в ОС Linux организовать полноценную операционную среду Windows, то наша Windows-программа сможет быть выполнена. Можно сказать, что операционная среда – это то системное программное окружение, в котором могут выполняться программы, созданные по правилам работы этой среды.

 

 

Операционная среда включает следующие компоненты:

1) операционная система;

2) интерфейсы прикладных программ;

3) прикладные программы;

4) сетевые службы;

5) базы данных;

6) языки программирования.