Микроядра
Объектные и объектно-ориентированные технологии в ОС
Прикладные среды
Заключение

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

Микроядра

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

Уже сейчас очевидна тенденция к переходу от монолитных к микроядерным системам. Некоторые компании, например, QNX Software Systems и Unisys, уже в течение ряда лет выпускают пользующиеся успехом микроядерные ОС. ОС QNX имеет спрос на рынке систем реального времени, а CTOS фирмы Unisys популярна в области банковского дела. Так, восьмикилобайтное микроядро QNX поддерживает только планирование и диспетчеризацию процессов, взаимодействие процессов, обработку прерываний и сетевые службы нижнего уровня. Это микроядро состоит всего из 14 системных вызовов и может целиком поместиться во внутренний кэш процессора.

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

Обиходным же понятие микроядра стало с легкой руки Стива Джобса. Mach, первоначально созданное в университете Карнеги-Меллон и послужившее основой небольшого привилегированного ядра ОС для компьютеров Next, вокруг которого располагались подсистемы, выполняемые в режиме пользователя, теоретически должно было обеспечить небывалую гибкость и модульность системы. На практике преимущества эти были несколько обесценены монолитным сервером, реализующим UNIX BSD 4.3, выбранную компанией Next в качестве оболочки. Однако опора на Mach дала возможность включить в систему средства передачи сообщений и объектно-ориентированные сервисы, на основе которых удалось создать элегантныи интерфейс пользователя и продвинутые средства разработки программного обеспечения.

Следующей микроядерной ОС была Windows NT. В среде NT должны были выполняться программы, написанные для DOS, Windows, OS/2 и систем, совместимых со стандартами Posix; присущая микроядерному подходу модульность позволила Microsoft создать структуру, не дублирующую ни одну из перечисленных операционных систем. За эмуляцию каждой ОС отвечает отдельный модуль. Впрочем, для Microsoft, по всей видимости, дополнительным доводом в пользу микроядра стала переносимость. Действительно, в разное время и по разным причинам в число первоочередных поддерживаемых NT архитектур вошли одно- и многопроцессорные платформы на процессорах Intel и Mips, а затем и Alpha.

Сегодня микроядерные архитектуры объявлены Novell/USL OSF, IBM, Apple и другими. Одним из основных конкурентов NT в области микроядерных ОС является Mach, микроядро, на которое, кроме Next, поставили еще и IBM, и OSF. Другой конкурент - микроядро Chorus компании Chorus Systems, выбранное USL в качестве основы новых реализаций SVR4. Сообщается об использовании микроядра в SpringOS, объектно-ориентированном преемнике ОС Solaris компании Sun.

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

Функции микроядра

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

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

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

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

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

Модульная система остается понятной и управляемой даже при наличии большого числа компонентов. Можно писать и отлаживать модули по частям на работающей системе.

Переносимость, расширяемость и надежность

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

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

Одна из проблем традиционно организованных ОС - наличие множества прикладных программных интерфейсов (API - Application Programming Interface). В результате, невозможно гарантировать правильность программ, использу1ощих несколько API, и даже правильность самой ОС. Микроядро, обладающее небольшим набором API (микроядро OSF включает около 200 системных вызовов, а крохотное микроядро QNX - всего лишь 14), увеличивает шансы получения качественных программ. Конечно, этот компактный интерфейс облегчает жизнь только системных программистов; прикладной программист по-прежнему должен бороться с сотнями вызовов.

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

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

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

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

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

Управление процессами и нитями в Workplace является функцией ядра. Но в ядре расположен только диспетчер процессов. Планировщик, ведающий приоритетами, порядком выполнения и диспетчеризацией, функционирует вне ядра. Так поступают не всегда; однако, IBM предполагает лицензировать свое микроядро, и может понадобиться заменить стандартный планировщик на некоторый другой {например, поддерживающий планирование в задачах реального времени).

Ядро управляет аппаратурой страничной памяти. Работающая вне ядра и являющаяся заменяемой подсистема управления страничной памятью определяет стратегию замещения страниц.

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

Прежде всего, сервер OSF/1 целиком работает в пространстве пользователя и использует функции Mach. Почему OSF выбрала микроядерную реализацию монолитного сервера Unix? Говорят, потому, что предыдущие версии OSF/1 были настолько хороши, что их было просто жалко выбросить и начать все сначала. В результате OSF/1 получилась не такой модульной, как Workplace. Но использовав значительную часть OSF/1, OSF смогла раньше IBM получить микроядерную ОС (в декабре 1994 года Workplace еще не анонсирована).

В будущих версиях OSF/1 планируется разрешить размещение сервера OSF/1 в пространстве ядра или в пространстве пользователя в соответствии с выбором системного администратора. Выполнение сервера OSF/1 в пространстве ядра позволит повысить производительность, так как передача сообщений будет заменяться вызовами функций, а сервер - всегда целиком располагаться в памяти. Выполнение сервера в пространстве пользователя позволит, при необходимости, вытеснять его из памяти, что потенциально увеличит память, доступную для приложений. Заметим, что примерно такой же подход используется USL в версиях Unix, основанных на микроядре Chorus.

Windows NT. Приложения Windows NT общаются с "подсистемами окружения", которые работают в пространстве пользователя и аналогичны прикладным средам в ОС Workplace. Эти подсистемы поддерживаются NT Executive, работающей в пространстве ядра и никогда не вытесняемой на диск. В состав NT Executive входят менеджер объектов, монитор безопасности, менеджер процессов и менеджер виртуальной памяти. В свою очередь, исполнительная система опирается на сервисы нижнего уровня, предоставляемых ядром NT. Эти сервисы включают планирование процессов и нитей, обработку прерываний и исключительных ситуаций, синхронизацию процессоров и восстановление после сбоев. Ядро исполняется в привилегированном режиме и опирается на уровень HAL.

Основное назначение ядра Windows NT - упрощение переноса системы: все машиннозависимые программы собраны в нем. В отличие от IBM, Microsoft пока не пытается представить ядро NT в виде отдельного продукта. Кроме того, в NT из ядра не вынесен ряд функций более высокого уровня, а драйверы устройств большей частью непосредственно работают с уровнем абстракции аппаратуры (HAL - Hardware Abstraction Layer). Это позволяет многим полагать, что NT не обладает микроядром в том смысле, который вкладывается в это понятие в случае Mach или Chorus.

Разработчики NT стремились улучшить производительность и сетевые возможности, а также поддержать определенный набор прикладных сред. Это отразилось в сложившемся разделении функций между ядром и остальной частью ОС. Например, для эмуляции Win32 традиционная иерархия процессов не требуется, но для других подсистем {например, для OS/2 и Posix) это необходимо. NT Executive обеспечивает набор средств управления процессами, достаточный для поддерживаемых прикладных сред NT.

Ядро NT заведует обработкой прерываний и переключениями контекста. Прерывание обрабатывается ядром, а затем переправляется через специальный объект прерывания в подпрограмму обработки. Наличие такого объекта позволяет отделить драйверы устройств от аппаратуры. В Mach и Chorus драйверы устройств имеют доступ к аппаратуре только через средства ядра. Менеджер ввода-вывода в NT, включающий файловую систему, драйверы устройств и сетевую поддержку, обычно работает напрямую с уровнем HAL.

Подобная организация интерфейса драйверов устройств имеет свои основания. Например, IBM не смогла реализовать все функции драйверов устройств за пределами ядра; пришлось находить способ, позволяющий части драйвера работать в пространстве ядра. Для обработки прерываний в NT устанавливается объектная связь с драйвером устройства, а затем драйвер может работать непосредственно со связанным с ним устройством через HAL. Значительная производительность ввода-вывода не дает оснований считать подход NT ограничительным.

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

Существует несколько реализаций микроядра Chorus. Chorus/MiX, версия ОС самой компании Chorus, включает интерфейсы, совместимые с SVR3.2, SVR4 и SCO. Novell/USL и Chorus Systems планируют совместную работу по разработке Chorus/MiX V.4 в качестве будущего направления ОС Unix.

Объявлено о соглашениях Chorus Systems с компаниями Unisys, Tandem, Сгау Research, SCO и USL. ОС Chorus работает на самых разных процессорах от Intel 80x86 до транспьютеров Inmos. Motorola объявила о разработке спецпроцессора семейства PowerPC, ориентированного на ядро Chorus и предназначенного для применения во встроенных системах.

Операционные системы компании Chorus основаны на минимальном ядре (50-60 КБайт), в функции которого входят планирование, управление памятью, обработка событий реального времени и управление коммуникациями. Остальные функции операционной системы выполняются серверами, которые находятся вне ядра, взаимодействуя с ним путем передачи сообщений. Файловые менеджеры, менеджеры потоков и сокетов и даже драйверы устройств организуются в виде серверов. Группа таких серверов называется подсистемой.

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

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

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

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

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

Сообщения и эффективность

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

Рассмотрим в качестве примера значительные усилия по оптимизации, предпринятые в микроядре Chorus. В данном случае сообщения - это нетипизированные строки; менеджер IPC не контролирует поток сообщений и не проверяет их правомерность. Эти средства добавляются на уровне подсистем, так что дополнительные накладны расходы возникают только в тех случаях, когда это необходимо.

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

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

Объектные и объектно-ориентированные технологии в ОС

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

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

Ведущие компании развивают свои системы в этом направлении. OLE (Object Linking and Embedding - Связывание и Встраивание Объектов) компании Microsoft, совместный стандарт OpenDoc компаний Apple, IBM, Novell и Borland, модель DSOM (Distributed System Object Model - Распределенная Модель Системных Объектов) компании IBM, PDO (Portable Distributed Objects - Переносимые Распределенные Объекты) компании Next и Frameworks компании Taligent предлагают свои, в большей или меньшей степени следующие канонам объектно-ориентированной технологии модели распределенных объектов для современных и будущих ОС.

Объекты в ядрах

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

Проект COOL (Chorus Object-Oriented Layer) направлен на развитие объектно-ориентированных средств. Определены три слоя над ядром Chorus.

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

Над слоем COOL-базы находится слой GRT (generic run-time), обеспечивающий выполнение объектов, виртуальную память объектов, одноуровневое хранение постоянных объектов, RPC-взаимодействия объектов и подсистему защиты объектов.

На самом верхнем слое COOL обеспечивается поддержка для конкретных языков; производится отображение моделей объектов известных языков программирования в абстракции CRT. Для каждого типа CRT-объектов генерируется таблица указателей на функции, определяющие для каждого языка семантику операций. Например, можно узнать, как следует преобразовывать для данного объекта указатели по виртуальной памяти в указатели по области хранения или как диспетчеризовать методы. Это позволяет COOL достаточно эффективно поддерживать многие объектно-ориентированные языки.

Составные документы: OLE и OpenDoc

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

В поддерживаемой OLE модели составных документов можно было вставлять объекты в документы-клиенты. Такие объекты ссылались на данные (в случае связывания) или содержали данные (в случае встраивания) в формате, распознаваемом приложением сервером. Для запуска программы-сервера и передачи ей данных для редактирования нужно было нажать два раза на одну из клавиш мыши, установив курсор на требуемом объекте.

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

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

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

По инициативе Apple, совместно с целой группой других компаний, была организована CI Labs (Component Integration) с целью разработки объектно-ориентированной технологии составных документов под названием OpenDoc. Данный продукт изначально нацелен на многоплатформенность и (возможно, именно в силу этого) отстает от OLE.

В основе OpenDoc лежат механизм хранения bento (японская тарелка с несколькими отделениями), технология сценариев и модель SOM компании IBM. В bento-документе каждый объект обладает постоянным идентификатором, сохраняющимся при перемещении объекта. В системе хранения поддерживается не только механизм транзакций, но и возщожность работы с несколькими версиями каждого объекта.

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

OLE и OpenDoc основываются на разных моделях объектов: Microsoft СОМ и IBM SOM, соответственно. Обе модели определяют протоколы взаимодействия объектов. Основные различия состоят в том, что SOM не связана с конкретным языком и поддерживает наследование, тогда как СОМ ориентирована на С++, а вместо наследования использует альтернативный механизм, называемый агрегированием.

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

Когда один из SOM-объектов вызывает другой, ядро SOM перехватывает вызов, определяет целевой объект, активизирует его и передает ему параметры в стандартном двоичном формате. Фактически, SOM решает проблему связывания различных языковых сред, поскольку за наследование и диспетчеризацию методов отвечает не какая-либо конкретная языковая система, а независимое ядро. Необходимость перекомпиляции при изменении любого класса, входящего в иерархию, значительно ограничивает преимущества объектно-ориентированных языков. SOM позволяет добавлять в базовый класс методы и переменные без перекомпиляции производных классов. Естественно, за подобную гибкость приходится платить. И не только контролем - ограничена возможность оптимизации взаимодействий объектов.

NextStep: распределенные объекты уже сегодня

Пока Microsoft, Apple, IBM и Taligent интенсивно развивают свои объектно-ориентированные ОС, многие подобные средства уже доступны в NextStep. NextStep, безусловно, занимает особое место в ряду объектных инструментов, ориентированных на кросс-платформную разработку программ. После классических языка и среды программирования Smalltalk, датируемых первой половиной восьмидесятых, именно эта система, оправдывая название, сделала следующий шаг в развитии объектно-ориентированных инструментальных средств создания программ. Технология повторного использования объектов позволяет быстро производить сложные пользовательские интерфейсы, работать с базами данных и трехмерной графикой.

Для организации распределенных объектных сред применяется технология Distributed Objects. Чтобы сделать объект доступным в сети, нужно зарегистрировать его имя в Network Name Service (Сетевой службе имен). Использование Distributed Objects позволяет избавиться от необходимости знания деталей организации нижнего уровня взаимодействий.

Next обеспечивает возможность использования Distributed Objects в среде других ОС в форме PDO - Portable Distributed Objects. PDO-комплект представляет собой архитектуру, основанную на понятиях сервера объектов и сообщений, которыми обмениваются эти объекты. Объекты могут посылать и получать друг от друга сообщения вне зависимости от того, находятся ли они в рамках одного приложения и даже на одном компьютере. Более того, уже сейчас в PDO имеются специальные средства, позволяющие "поселить" эти объекты в ОС, отличные от ОС NextStep. Например, комплект PDO для HP-UX содержит компилятор языка Objective С (языка, на котором написаны объекты NextStep) и программы для обработки запросов к распределенным объектам. Поставляются PDO для Data General, DEC, HP, NCR, Sun и других платформ, не обязательно основанных на ОС Unix (например, Windows NT).

30 июня прошлого года Next и Sun опубликовали спецификации совместного продукта OpenStep, интегрирующего инструментарий NextStep и архитектуру распределенных объектов Project DOE, что делает его совместимым с продуктами других производителей, сооответствующими спецификации CORBA.

Стандарт CORBA

Консорциум OMG (Object Management Group), в котором объединились усилия практически всех ведущих компаний, разрабатывает стандарты для обмена объектами. OMG CORBA (Common Object Request Broker Architecture - Общая Архитектура Посредника Объектных Запросов) предлагает основу для распределеных вычислений с использованием объектного подхода, стандартизуя способы поиска объектов и вызова их методов.

Объектные модели, рассмотренные выше, в значительной степени согласуются с CORBA. Например, работая с DSOM под управлением OS/2, можно вызывать CORBA-совместимые объекты, работающие на архитектурах ВЕС, HP или Sun. Однако CORBA определяет только механизм нижнего уровня, посредством которого одни объекты вызывают другие. Для успешного взаимодействия каждый из объектов должен понимать смысл сообщений другого.

Прикладные среды

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

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

Эффективность прикладных сред

Если прикладная среда воспроизводит не только программные, но и аппаратные особенности другой платформы, то основной проблемой эффективности явдяется потребность в эмуляции. Последовательное, с точностью до каждой команды процессора моделирование поведения одной архитектуры на совсем иной не могло рассматриваться в качестве практического подхода. К счастью, сегодня острота проблемы частично снимается использованием все более быстрых процессоров. Но особенно важно то, что большинство приложений интенсивно пользуются (функционально близкими и вычислительно сложными) графическими пользовательскими интерфейсами (GUI) типа Windows, Мас, OSF/Motif или Open Look

Выполнение таких программ по сути превращается в непрерывную череду вызовов GUI-библиотек для манипулирования окнами и для других связанных с управлением интерфейсом действий. (По некоторым оценкам, именно на это уходит до 90 процентов времени.) Тщательно разработанная прикладная среда включает библиотеки, имитирующие внутренние GUI-библиотеки, но представленные в кодах используемого процессора. Иногда подобный подход называют трансляцией, чтобы отличить от непосредственной эмуляции кода по одной команде за раз. Примером может служить разработанная SunSelect прикладная среда Wabi, эмулирующая Windows. Как утверждают разработчики, благодаря сильно оптимизированным библиотекам, при исполнении одних и тех же тестов Wabi может обогнать Microsoft Windows.

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

Примеры прикладных сред

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

Казалось бы, задача добавления в OS/2 прикладной среды Windows в была сравнительно простой. И Windows, и OS/2 работают на процессорах 80х86, так что эмуляции процессора не требуется. К тому же, у IBM имеется лицензия на исходные тексты Microsoft. Однако, эта работа потребовала решений не только технических, но и экономических проблем.

Поддержка в OS/2 приложений DOS и Windows основывалась на MVM (multiple virtual machines - множественных виртуальных машинах) - подсистемы, способной имитировать несколько ПК с DOS. В отличие от модульного подхода к прикладным средам, используемого в Unix, Windows NT и Workplace OS, поддержка DOS и Windows в OS/2 была прочно встроена в код ОС, что серьезно ограничивало возможность добавления новых прикладных сред.

Поддержка Windows в OS/2 основывалась на исходном коде, принадлежавшем Microsoft. Чтобы использовать код Windows, IBM должна была платить Microsoft за каждую проданную копию OS/2.

Новая версия называется OS/2 for Windows. Как следует из ее названия, она служит в качестве OS/2-дополнения для пользователей, уже имеющих Microsoft Windows. Для установки требуется система с Windows 3.1. При запуске OS/2 for Windows в действительности загружает окружение Windows. Экономический смысл этого ясен. Технически такой подход будет ставить новые задачи с появлением каждой новой версии Windows - разработчикам придется обновлять OS/2 for Windows. Тем не менее, это может потребовать меньших усилий, чем интегрирование нового исходного кода Windows. Windows NT поддерживает прикладные среды целых пяти ОС. DOS, Win16, Win32, OS/2, а также UNIX-подобную прикладную среду, соответствующую спецификациям Posix. Для выполнения прикладных программ DOS и Windows на платформах, отличных от 80х86, в NT используется технология эмуляции, лицензированная у компании Insignia Solutions, которая производит эмулятор DOS SoftPC для Макинтошей и UNIX-станций.

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

В то время как разработчики Windows NT не обеспечивают двоичной совместимости с ОС UNIX, многие поставщики UNIX убеждены в необходимости двоичной совместимости со средой Windows. Такие средства в течение нескольких лет производились независимыми компаниями. Примером может служить уже упомянутый SoftPC. Компания Insignia Solutions выпустила новую версию SoftWindows. Для ускорения выполнения Windows-программ на UNIX-станциях-компаний Sun, HP, IBM, DEC, Next и SGI в SoftWindows используются перекомпилированные исходные тексты Windows.

Однако наиболее радикальный подход к соединению Windows и UNIX был выработан компанией Sun Microsystems, разработавшей продукт Wabi (Windows Application Binary Interface - двоичный прикладной интерфейс Windows). Wabi является попыткой реконструировать Windows по ее функциональным спецификациям; при этом все относящиеся к операционной системе функции (например, управление памятью и взаимодействие процессов) осуществляются средствами UNIX. Осенью 1993 года SunSelect объявил о поддержке средствами Wabi дюжины наиболее популярных Windows-приложений.

Wabi (Windows Application Binary Interface - двоичный интерфейс приложений Windows) отделения SunSelect фирмы Sun Microsystems поставляется со многими рабочими станциями. Он использует обычный Х-протокол для создания изображений, вызываемых программами Windows, и стандарные средства Unix для работы с файлами, памятью и другими ресурсами.

Как и некоторые другие трансляторы прикладной среды, исполняя Windows-приложение, Wabi имитирует индивидуальные команды 80х86, пока не встретится вызов функции DOS или Windows После этого эмулятор переключается в иной режим, выполняя функции DOS и Windows через соответствующие вызовы ОС Unix или Х-протокола. Некоторая техника заключена в преобразовании параметров каждого вызова Windows в соответствующий формат для Unix и в обратном преобразовании результатов работы.

Работающие под Wabi Windows-приложения имеют интерфейс в стиле OSF/Motif или Ореп Look Кроме того, вместо запуска полного окружения Windows в выделенном окне, как это делает SoftWindows, Wabi открывает для каждого Windows-приложения новое окно стандартного Х-дисплея. Такой подход позволяет передавать между программами Unix и Windows текстовые и графические данные.

Сейчас Wabi не поддерживает многие связанные с Windows средства, включая расширения мультимедиа, ODBC, MAPI и сетевые средства, кроме доступа к удаленным файловым системам и принтерам. Очевидны проблемы с поддержкой DLL и OLE. Впрочем, Sun не думает, что эти ограничения мешают Wabi. предназначение Wabi - запускать популярные программы для Windows, которыми интересуются заказчики Sun, а не превращать Unix в точную копию Windows.

Insignia Solutions считает подход Sun ограниченным. SoftWindows в действительности является перекомпилированными для Unix Windows 3.1 и MS-DOS. SoftWindows изначально поддерживает OLE, DDE и DLL. В окне SoftWindows появляется изображение полной рабочей области Windows. А так как исходный код - тот же, что и у оригинальной версии, сохранены все нюансы Windows. Когда эмулятор 80х86, входящий в состав SoftWindows, встречает вызов функции Windows, он не просто имитирует ее - он действительно выполняет ее, на полной скорости процессора, делая лишь соответствующие зовы к Unix, а не к DOS. Естественно, использование подлинного исходного кода Windows ведет к поддержке гораздо более широкого круга приложений.

Но, по утверждению SunSelect, Wabi имеет одно большое преимущество перед SoftWindows - поразительную скорость. Исполнение для каждой функции каждой строки оригинального кода Windows приводит к потерям, в частности, потому, что Windows - это 16-битная программа для MS-DOS и ее конструкция включает собственные средства управления памятью и другие сложные функции. Unix, напротив, является 32-битной ОС, имеющей тщательно отлаженное управление памятью и другие средства. Используя Unix для имитирования Windows вместо исполнения каждой строки подлинного кода, Wabi может превзойти производительность истинной Windows.

Любопытно, что SunSelect является заказчиком Insignia. Компания продает улучшенную версию SoftPC в качестве SunPC, предназначая ее для тех заказчиков, которым нужна более полная эмуляция ПК. Но для тех, кому нужны только популярные, но зато полноценные Windows-приложения, Wabi является лучшим решением. Так или иначе, Windows - весьма сложная и развивающаяся среда. Дополнительные тонкости могут проявляться по мере подключения к Wabi новых прикладных программ. Отслеживание изменений в новых версиях Windows также потребует много работы. Вместе с тем, у Wabi хорошие перспективы. SunSoft поставляет Wabi с каждой копией Solaris; продукт лицензирован HP, IBM и Novell для включения в их собственные версии UNIX. Таким образом, Wabi будет поставляться с большинством UNIX-станций.

Компания Apple работает над собственным транслятором прикладной среды Мас для работы на UNIX-системах.Доступная с весны 1994 года на рабочих станциях Sun и HP Macintosh Application Environment (МАЕ - Среда приложений Macintosh) позволяет им выполнять и программы UNIX, и готовые программы, предназначенные для Мас на основе 680х0.

Наконец, остановимся на прикладных средах перспективной Workplace OS. В число ее стандартных прикладных сред входят UNIX и OS/2 (вместе с прикладными средами последней DOS и Windows). Могут появиться и другие прикладные среды. Так как интерфейсы Workplace OS разрабатываются в тесном сотрудничестве с Taligent (в котором, напомним, участвует и Apple), вероятными кандидатами на получение прикладных сред в Workplace OS являются и Taligent, и Мас GUI.

Заключение

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