Введение

Экспериментальная операционная система от Microsoft Research

Singularity — экспериментальная операционная система, разработанная Microsoft Research с 9 июля 2003 года по 7 февраля 2015 года. Она была разработана как операционная система с высокой надежностью, в которой ядро, драйверы устройств и прикладное программное обеспечение были написаны на управляемом коде. Внутренняя безопасность использует типобезопасность вместо аппаратной защиты памяти.

Операция

Код обработки прерываний x86 самого низкого уровня написан на языке ассемблера и C. После выполнения своей задачи этот код вызывает ядро, в котором среда выполнения и сборщик мусора реализованы на Sing# (расширенная версия Spec#, которая, в свою очередь, является расширением C#) и работают в не защищенном режиме. Аппаратный уровень абстракции написан на C++ и работает в защищенном режиме. Также используется код на C для отладки. Базовая система ввода-вывода (BIOS) компьютера вызывается на этапе начальной загрузки в 16-битном реальном режиме; после перехода в 32-битный режим Singularity больше не обращается к BIOS, а вызывает драйверы устройств, написанные на Sing#. В процессе установки опкоды Common Intermediate Language (CIL) компилируются в x86 опкоды с помощью компилятора Bartok.

Конструкция безопасности

Сингулярность — это операционная система с микроядром. В отличие от большинства исторических микроядер, её компоненты выполняются в одном и том же адресном пространстве (процессе), которое содержит программно изолированные процессы (SIP). Каждый SIP имеет собственную организацию данных и кода и независим от других SIP. Эти SIP ведут себя как обычные процессы, но избегают накладных расходов, связанных с переключением задач. Защита в этой системе обеспечивается набором правил, называемых инвариантами, которые проверяются статическим анализом программ. Например, в инвариантных состояниях памяти не должно быть перекрестных ссылок (или указателей памяти) между двумя SIP; взаимодействие между SIP осуществляется посредством каналов связи более высокого порядка, управляемых операционной системой. Инварианты проверяются при установке приложения (в Сингулярности установка управляется операционной системой). Большинство инвариантов основаны на использовании более безопасных языков с управляемой памятью, таких как Sing#, которые имеют сборщик мусора, не допускают произвольных указателей и позволяют проверять код на соответствие заданной политике компьютерной безопасности.

Статус проекта

Первый комплект разработки для исследований сингулярности (RDK), RDK 1.1, был впервые выпущен 4 марта 2008 года, а RDK 2.0 – 14 ноября 2008 года.