Inferno OS

Проект Inferno, родился в недрах Lucent Technologies. Inferno представляет собой целостную среду, по самой своей конструкции идеально приспособленную для распределенных сетевых вычислений благодаря компактности, масштабируемости и способности становиться органическим элементом других операционных систем.

Inferno - это операционная система на основе легко портируемого ядра Plan9, способная функционировать в минимальной аппаратной конфигурации. Более высокоуровневая ее часть написаны на языке Limbo, компилируемом в мобильный объектный код для виртуальной машины, называемой Dis.

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

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

В реализацию Limbo - языка программирования, на котором написаны приложения Inferno, заложены ограничения, придающие асинхронно обрабатываемым событиям временную детерминированность исходя из требований работы системы в режиме реального времени. В частности, встроенный в Limbo сборщик мусора ведет себя значительно скромнее своего собрата из JVM по отношению к высокоприоритетным обработчикам событий. Имеется компилятор Just-In-Time, производящий объектный модуль в машинных кодах. Из-за того что принцип виртуальной машины Dis не стековый, а трехадресный - типа "память-в-память", код JIT получается лишь в два раза объемистее результата компиляции функционально равнозначного C-кода. По той же причине Dis гораздо компактнее JVM.


Внутри Inferno

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

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

Виртуальные машины Inferno реализованы в виде самостоятельной ОС пока лишь на небольшом числе архитектур, куда сейчас входят процессоры microSPARC-II, Hitachi SH3 и SH4, DEC StrongARM, Intel 386EX, 486 и Pentium, AMD 29000, ARM RISC, MIPS R4000 и выше, SPARC, 68000 и PowerPC, множество которых расширяется. Ясно, что реализовать виртуальную трехадресную машину Dis для конкретного процессора да еще и надлежащим образом оптимизировать код труднее, чем стековую Java-машину. Разработчики JVM для некоторых примитивных целевых процессоров считают стековый принцип ее устройства большим подспорьем в снижении трудоемкости разработки. В Inferno же требования эффективности виртуальной машины стоят выше удобств программирования на этом уровне.