`

СПЕЦИАЛЬНЫЕ
ПАРТНЕРЫ
ПРОЕКТА

Архив номеров

Как изменилось финансирование ИТ-направления в вашей организации?

Best CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

ОС Singularity, или Когда надежность становится требованием

Статья опубликована в №1-2 (570) от 16 января

+11
голос

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

В несколько несвойственной Microsoft манере - без громогласных анонсов - в R&D-подразделении корпорации уже более трех лет ведутся работы над пост-Windows ОС в рамках проекта Singularity. Впрочем, здесь нет ничего удивительного, так как в последнее время основные ресурсы корпорации расходовались преимущественно на Windows Vista - основную ОС следующих пяти, если не шести-семи лет. Но вот, наконец, процесс завершен, и специалисты Microsoft могут заниматься ее доработкой, что в ближайшем будущем выльется в релизы под кодовыми названиями Fiji и Vienna, в более спокойном режиме. И мы, воспользовавшись небольшой паузой, решили уделить внимание Singularity - передовой ОС, которая целиком или частично (в составе другого проекта) заменит Windows Vista.

Замысел

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

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

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

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

Чтобы создать надежную среду и исправить положение одной модернизацией, которой подверглись бы все уровни ОС, видимо, не обойтись. Требуются более радикальные меры. Нужно отбросить устаревшие концепции, забыть о стереотипах и начать все заново, сделав ставку на инновации и разработки, которые на деле доказали свою состоятельность. Этим и занимаются инженеры отделения Core Operating System Division подразделения Microsoft Research. Так, они, в частности, отказались от непосредственной совместимости с предыдущими системами, пообещав в будущем решить данную проблему с помощью технологии виртуальных машин.

ОС послезавтрашнего дня

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

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

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

Разработчики отказались от традиционной архитектуры открытых процессов в пользу архитектуры закрытых (sealed). Напомним, что первые имеют поддержку динамических загрузки и генерации кода (основной прием здесь - рефлексия, которая позволяет программе проверять свой код и данные, а также порождать и выполнять новые методы), им разрешен доступ к совместно используемой памяти. Особенностью такого подхода является сравнительная легкость добавления в ОС и приложения новых функций (механизм расширений). Однако при этом страдает надежность системы. В частности, согласно статистике, 85% случаев выхода Windows из строя связаны с применением дефектных драйверов устройств. Кроме того, открытый характер среды препятствует статическому анализу кода инструментальными средствами для выявления проблем и их последующего устранения. Именно из этих соображений в Singularity весь код за пределами ядра исполняется в закрытых, программно-обособленных процессах (software-isolated process, SIP). Они обеспечивают отличную изоляцию сбоев без применения устройства управления памятью (Memory Management Unit, или MMU, служит только для распределения страниц памяти). Каждый SIP обладает неразделяемой областью памяти, а если возникает необходимость в передаче данных от одного процесса к другому, то в ход идет специальная структура - "обменная куча" (exchange heap). Чтобы код во время исполнения был неизменяемым и, соответственно, его можно было подвергнуть анализу, операции динамической загрузки и модификации запрещены. Элементы рефлексии используются только во время компиляции/установки ПО. Что же касается расширений ОС или приложений, то они загружаются в дочерние процессы, четко отделенные от родительских.

Все взаимодействие в системе организовано посредством механизма двунаправленных каналов передачи сообщений (message-passing channel). Они поддерживаются на уровне языка программирования, на котором написана Singularity, и представлены парой конечных точек (endpoint), соответствующих экспортирующей и импортирующей сторонам. Экспорт осуществляется объектом, инициирующим взаимодействие для получения, например, доступа к каким-либо ресурсам, а импорт выполняется объектом, отвечающим на этот запрос. Формат сообщения определяется протоколом канала, в роли которого выступает набор правил - контракт (contract). Соответствие процессов его условиям проверяется с помощью специального механизма.

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

Современные приложения - это содержащие код, данные и метаданные совокупности файлов, которые при установке помещаются в различные места файловой системы и регистрируются в соответствующих пространствах имен. ОС не много известно о связях между составляющими приложений, поэтому она не имеет достаточного контроля над процессом инсталляции. Результатом бывает нарушение работы одной программы при установке другой. Для устранения проблем, связанных с инсталляцией, настройкой и удалением ПО, в Singularity нашла воплощение абстракция... приложения. Она определяется кортежем App = R, P, где R - множество ресурсов и зависимостей между ними, которые относятся к данному приложению, а P - множество декларативных политик манипуляции этими ресурсами. Кортеж "олицетворен" в виде декларации (manifest) в формате XML и защищенного дерева каталогов. В manifest-файле описывается желаемое состояние ПО после установки, обновления и исполнения. Он должен предоставлять достаточно информации для того, чтобы инсталлятор ОС смог вычислить соответствующие шаги установки, выявить конфликты с имеющимися приложениями, и, наконец, сделать вывод, успешной ли будет установка. Инсталляции, способные повредить системе, пресекаются.

При написании ОС ни о каких языках C и C++ не могло быть и речи. Необходимо было безопасное средство, и им стал Sing#. Этот новый C#-подобный язык обеспечивает специальные элементы (пред- и постусловия, инварианты объектов) для описания поведения программ. Он основан на Spec#, но отличается поддержкой каналов передачи сообщений и наличием низкоуровневых конструкций. Безопасность языка, а именно: типов и памяти, гарантирует надежность реализованного на нем ПО. Первая исключает возможность проведения над какой-либо величиной или объектом операции, не соответствующей ее типу. Вторая предупреждает ошибки переполнения буфера и не позволяет программе обращаться к чужим областям памяти. Подход с генерацией безвредного кода самим компилятором не нов, он появился еще в начале 60-х годов в мэйнфрейме Burroughs B5000, у которого не было MMU, и единственным доступным языком был Algol. Так как безопасность языка распространяется и на систему, и на пользовательские процессы, они выполняются в едином виртуальном адресном пространстве. Данное решение способствует повышению надежности, а также производительности (за недостаток которой обычно упрекают микроядра) благодаря тому, что устраняется потребность в обращениях к ядру и в переключениях контекста.

Вообще же код Singularity бывает двух видов: проверенный (verified) и доверенный (trusted). Первый создается с использованием безопасного языка, транслирующегося в байт-код Microsoft Intermediate Language (MSIL) - реализации Microsoft универсального промежуточного языка (Common Intermediate Language) по стандарту ECMA. Он же используется в инструментальных средствах .NET. В таком виде и распространяются различные бинарные файлы третьих сторон, включая приложения, демоны, драйверы устройств и пр., во время установки проверяющиеся на безопасность и преобразовывающиеся в инструкции x86 компилятором Bartok (research.microsoft.com/act/). Код же, который пока не может быть создан на безопасном языке и подвергнут соответствующей проверке, должен "приниматься на веру" системой. К этой категории относятся небольшие составляющие ядра, реализованные на ассемблере, C и C++, включающие уровень абстракции аппаратного обеспечения (HAL) и сборщик мусора.

На данный момент базу Singularity составляют порядка 300 тыс. строк кода. Она исполняется на оборудовании архитектуры x86 и содержит некоторое число драйверов сетевых карт, IDE-дисков и устройств ввода/вывода, а также стек TCP/IP и элементарную файловую систему. Возможности получить ОС не предоставляется, зато качественных информационных материалов по Singularity на ресурсе проекта - хоть отбавляй. Поэтому заинтересовавшихся направляем на сайт research.microsoft.com/os/singularity/.

Оставленный след

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

+11
голос

Напечатать Отправить другу

Читайте также

 
 
IDC
Реклама

  •  Home  •  Рынок  •  ИТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Сети  •  Безопасность  •  Наука  •  IoT