От редакции


Продолжается подписка на наши издания! Вы не забыли подписаться?

От редакции

Автор: Михаил Купаев
Оптим.ру
Опубликовано: 22.02.2006

С завидной регулярностью на форумах появляются товарищи (может быть, это одно лицо?), которые, стремясь найти фатальный недостаток в C#, спрашивают: «А можно ли на нем написать драйвер?». Недавно на этот вопрос был дан окончательный ответ группой Microsoft Research, работающей над проектом Singularity. Singularity – это попытка создать безопасную ОС на основе управляемого кода. Не более 2% кода Singularity написано на C++ или ассемблере, остальное же, в том числе и драйверы устройств – на Sing#, диалекте C#. 73% кода ОС – это безопасный Sing#-код. Весь опасный код, который в Singularity называется «доверенным», либо выполняется в ядре, либо встраивается в процессы ядром во время исполнения. Таким образом, все приложения и драйверы устройств написаны не просто на C#, а на его безопасном подмножестве.

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

Еще одна интересная особенность Singularity – то, что обмен данными между процессами ведется с использованием идеологии сообщений. Это позволяет изолировать процессы Singularity друг от друга, что существенно упрощает восстановление после сбоя. Так, если в одном из процессов возникнет какая-либо проблема, можно перезагрузить только его и продолжить выполнение. Кроме всего прочего, такой подход должен благотворно сказаться на многопоточных приложениях – эта идеология успешно применяется многими средствами, предназначенными для распараллеливания вычислений.

Интересный факт – Singularity является объектно-ориентированной ОС. Вместо понятия изолированного адресного пространства, используемого во многих современных ОС, Singularity оперирует понятием объектного пространства.

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


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

Copyright © 1994-2016 ООО "К-Пресс"