Принципы положенные в основу инферно ос. Обзор свободной ОС Inferno: установка системы и приложения. внешнее окружение Inferno-приложений

Для Symbian 16.03.2019
Для Symbian

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

Обратим внимание, что термин «порт» имеет несколько значений. Безусловно, нас интересует понятие «аппаратный порт» и «порт ввода-вывода». Первое означает разъем в компьютере, позволяющий подключать устройства определенного типа, второе – интерфейс для взаимодействия периферии и непосредственно самого ноутбука (компьютера).

Уделять особое внимание портам, использующимся крайне редко или ставшим уже историей, мы не будем. Тем не менее, вкратце вспомним о них. Итак, практически не актуален на сегодняшний день параллельный порт LPT – 25-пиновый D-Sub, который раньше позволял подсоединять, например, принтер. В этом же списке интерфейс PS/2, через который можно было подключать клавиатуру или мышь; модемный разъем RJ-11; а также последовательный порт RS-232 (COM-порт), который использовался в промышленных ноутбуках. Сейчас он не востребован из-за низкой скорости передачи данных.

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

USB (Universal Serial Bus)

Очень часто мы обращаем внимание на количество портов USB. И не зря, ведь данный интерфейс универсален, поскольку позволяет подсоединять одновременно большое количество периферийного оборудования: сканеры, принтеры, мыши, внешние накопители, флешки, фотоаппараты, мобильные телефоны. И этот список можно еще долго продолжать.

История возникновения первого USB версии 1.0 начинается с 1995 года. Через пять лет появилась следующая версия 2.0, а через три года вышел USB новой версии – 3.0. В условиях современности для передачи данных используются USB нескольких стандартов – 2.0 и 3.0. Причем последний все чаще вытесняет 2.0, поскольку имеет не только пропускную способность больше – до 4.8 Гбит/с, но и увеличенную силу тока по шине питания (500 мА – 900 мА). Независимо от стандарта USB, разъемы и кабели совместимы.

Символом USB являются три геометрические фигуры: малый и большой круг, квадрат и треугольник.

Дополнительную функциональность USB-портам придает возможность подзарядки, часто даже, когда ноутбук выключен совсем. Также данный интерфейс может комбинироваться с eSATA, что позволяет передавать данные с увеличенной скоростью.

Также стоит отметить, что есть и более компактные версии USB, например, mini-USB и micro-USB. Они устанавливаются в переносные мобильные устройства, вместо обычного USB.

Сейчас, как правило, в ноутбуках используется не менее двух портов USB. Это объясняется тем, что современному пользователю необходимо подключать несколько периферийных устройств одновременно, например, мышь и внешний накопитель.

eSATA (External SATA)

Такой последовательный интерфейс появился в 2004 году. Изначально, так же как и сейчас, он позволял подключать внешние устройства, например, жесткие диски, внешние оптические накопители. Стоит отметить, что порт eSATA является альтернативным вариантом интерфейсам USB и FireWire, но скорость передачи данных через eSATA выше – до 3 Гбит/с.

Конечно, интерфейс eSATA встречается не часто и без него можно обойтись. Тем не менее, если модель вашего ноутбука приближена к стационарной, наличие данного порта будет не лишним.

FireWire (IEEE 1394, у Sony – i.LINK)

Этот порт заявил о себе в 1995 году. Шина FireWire имеет высокую скорость передачи данных, отличается стабильной работой и позволяет обмениваться данными в цифровом виде и подключать различные устройства, например жесткие диски (в том числе RAID-массивы), принтеры, сканеры, мультимедийные видео и аудио устройства. Добавим, что можно использовать интерфейс FireWire и как средство захвата данных с видеокамеры.

Порт FireWire имеет несколько спецификаций (IEEE 1394a, IEEE 1394b, IEEE 1394.1, IEEE 1394c). Вначале появился IEEE 1394а со скоростью до 400 Мбит/с, затем улучшенная версия – IEEE 1394b. Последний стандарт имеет максимальную скорость 800 Мбит/с и 1600 Мбит/с. В связи с этим название интерфейса звучит как FireWire 800 или FireWire 1600. В целом, через IEEE 1394а и IEEE 1394b можно подключать устройства, которые требуют высокой скорости передачи информации. Это могут быть фото и видеокамеры, высокоскоростные внешние жесткие диски. Кстати, порты FireWire и FireWire 800 совместимы, только надо использовать специальный переходник.

В действительности, отсутствие такого интерфейса в ноутбуке не будет критичным. Хотя, если вы планируете редактировать видео или выполнять задачи, связанные с медиаконтентом, на наличие FireWire стоит обратить внимание.

DVI (Digital Visual Interface)

Для передачи цифровой информации используется еще один порт – DVI, вышедший более десяти лет назад, в 1999 году. По сути, этот интерфейс предназначен для передачи видео со скоростью до 3.4 Гбит/с на такие цифровые устройства как ЖК-дисплеи, плазменные телевизоры, проекторы. Цифровые потоки данных транслируются напрямую, без двойного преобразования, вследствие чего изображение будет без искажений.

DVI бывает нескольких типов в зависимости от вида передаваемой информации: DVI-A (аналоговая передача), DVI-I (комбинированная), DVI-D (исключительно передача на монитор в цифровом качестве).

Вне всякого сомнения, DVI передает сигнал лучшего качества, чем аналоговый видеовыход VGA, но это не говорит о том, что надо приобретать ноутбук только с таким интерфейсом как DVI.

VGA (Video Graphics Adapter) или D-Sub (D-subminiature)

Интерфейс VGA был разработан давно, еще в 1987 году. Так же, как и DVI, этот 15-контактный разъем используют для передачи сигнала на внешний монитор, но только в аналоговом качестве. Соответственно, порт VGA позволяет вывести изображение на плазменные панели, мониторы. Уменьшенной версией VGA является порт Mini-VGA, который также используется для передачи видеосигнала.

Несмотря на использование DVI и подобных ему интерфейсов, разъем VGA по-прежнему популярен, хоть сейчас уже считается несколько устаревшим.

HDMI (High Definition Multimedia Interface)

Достаточно часто в ноутбуке, наряду с VGA встречается и 19-контактный порт HDMI. Их различия заключаются в том, что интерфейс HDMI передает аудио и видеосигнал в цифровом виде. Кроме того, с помощью HDMI можно передавать многоканальное видео, также в цифровом качестве. Данный интерфейс имеет пропускную способность от 4.9 до 10.2 Гбит/с. Более того, в нем предусмотрена защита данных от нелегального копирования HDCP.

Интерфейс HDMI был создан в 2002 году специально для стандарта телевидения высокой четкости – HDTV. В последующие годы выходили разные версии, в которых была реализована поддержка различных разрешений, 3D-изображения, а также увеличивалась пропускная способность интерфейса. Кроме полноразмерной версии HDMI в ноутбуках и особенно планшетах используются его уменьшенные версии mini-HDMI (2006 год) и micro-HDMI (2009 год).

Стоит отметить, что мультимедийный порт HDMI совместим с DVI, что позволяет с помощью переходника подсоединить дисплей с DVI-интерфейсом. Кроме того, HDMI является своего рода современной заменой аналогового разъема S-Video (Separate Video). S-Video передает сигнал низкого разрешения и использовался для вывода изображения на телевизоры, видеомагнитофоны и другую подобную технику.

DisplayPort

Этот современный интерфейс, появившийся на свет в 2006 году, является главным конкурентом 19-пинового порта HDMI, потому что также используется для передачи аудио и видеоконтента в цифровом виде. С помощью DisplayPort можно подключить ноутбук к внешнему дисплею или к системе домашнего кинотеатра. Аналогично HDMI, этот интерфейс поддерживает функцию защиты от нелегального копирования DPCP.

В отличие от порта DVI, DisplayPort обладает на порядок большей пропускной способностью. Если же сравнивать DisplayPort с HDMI, то у последнего менее широкий канал передачи данных – 10.2 Гбит/с против 10.8 Гбит/с.

Отметим, что интерфейс имеет несколько версий – 1.1 и 1.2. Первая принята в 2007, вторая в 2010 году. Пропускная способность версии DisplayPort 1.2 составляет 21.6 Гбит/с. Более того, этот стандарт может работать с 3D изображениями.

Уменьшенной версией этого интерфейса является Mini DisplayPort (mDP). Как правило, он используется в тонких ноутбуках и нетбуках. Данный интерфейс первоначально был разработан компанией Apple для собственной продукции и в последнее время заменен на Thunderbolt, но это не помешало использовать данную технологию и в устройствах, создаваемых другими не менее известными компьютерными компаниями.

Ethernet (RJ-45 или LAN)

Датой изобретения этого порта считается далекий 1973 год. В качестве передающей среды сначала использовался коаксиальный кабель, и лишь позже стало возможным использовать витую пару или оптический кабель. Благодаря данному интерфейсу ноутбук получает возможность подключиться к сети интернет.

Скорость передачи данных через RJ-45 напрямую зависит от сетевого контроллера. Например, современный ноутбук может поддерживать и 100 Мбит, и 1 Гбит. В последнем случае он называется гигабитный Ethernet. Именно он, точнее версия IEEE 802.3z, была создана для передачи по оптическому волокну, а только потом по витой паре.

Thunderbolt

Этот порт разработан корпорацией Intel и официально представлен компанией Apple в 2011 году. Название Thunderbolt в переводе с английского означает «удар молнии». Ранее Thunderbolt назывался Light Peak.

Данный универсальный порт заметно выделяется среди остальных. Во-первых, с его помощью передаются данные со скоростью до 10 Гбит/с. Во-вторых, Thunderbolt можно использовать для подключения к монитору через HDMI, VGA, DVI, но только со специальным адаптером. В-третьих, данный интерфейс применяется для питания подключаемых устройств, поскольку имеет мощность 10 Вт.

Интересно, что высокоскоростной Thunderbolt заменяет и такие интерфейсы как USB и FireWire. К одному и тому же разъему пользователь может подключить сразу несколько устройств, поскольку все они подсоединяются друг за другом. Если сравнить со скоростью передачи других интерфейсов, то USB 3.0 медленней Thunderbolt в два раза, eSATA – в три.

Кстати, не за горами выход процессоров нового поколения Haswell от Intel, которые придут на смену Ivy Bridge. Именно они будут оснащаться встроенными контроллерами Thunderbolt.

Аудиоразъемы

Безусловно, слушать музыку или смотреть видео без подключения дополнительных устройств на ноутбуке позволяет и встроенная акустика. Вопрос только в том, а порадует ли она качеством, громкостью звучания и сбалансированностью частот. Если ваш ноутбук не может дать положительные ответы на все эти вопросы, тогда приходится прибегать к помощи наушников или внешней аудиосистемы. Для этого в ноутбуке предусмотрены специальные аудиоразъемы. Чаще всего их два – для наушников и микрофона Mic In (Microphone In).

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

Заметим, что порт для наушников можно совмещать с S/PDIF (Sony/Philips Digital Interface). Этот интерфейс способен передавать цифровой звук между устройствами, не преобразуя сигнал в аналоговый. При этом вы сможете избежать ухудшения качества звука: шумы, искажения. Кстати, с помощью S/PDIF можно передавать различные звуковые сигналы, в том числе стандарта 5.1 или стереосигнал. Таким образом, вы сможете подключать внешнюю акустику с декодером многоканального звука.

Разъем для подключения док-станции, порта-репликатора

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

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

ExpressCard

Данный интерфейс получил широкое распространение в 2005 году, вытеснив при этом стандарт PC Card, иначе называемый, как PCMCIA. Основное преимущество ExpressCard заключается в большей скорости передачи данных, вследствие прямого подключения к системной шине. ExpressCard используется для того чтобы подключать к ноутбуку периферийное оборудование. Это может быть, как мышь, док-станция, плата SSD-накопителя, так и ТВ-тюнер, адаптеры карт памяти. Также стоит добавить, что в виде ExpressCard есть карты Wi-Fi, флешки.

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

Кенсингтонский замок (Kensington lock)

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

Заключение

Конечно, далеко не каждый ноутбук будет оснащен шестью-семью разнообразными портами. Их набор часто будет сводиться к двум-трем USB, HDMI или DisplayPort, RJ-45, и, естественно, аудиоразъемам. В действительности, выбирая ноутбук для себя, вам нужно определиться с кругом задач и уже, исходя из этого, смотреть, какой порт вам жизненно необходим или без которого вы вполне обойдетесь. Помните, что каждый интерфейс поможет стать вашему ноутбуку более функциональным, а вам – рационально использовать рабочее время. As a demonstration, Inferno also ran as a plug-in under Internet Explorer version 4.

Each Inferno system presents an identical environment to the applications, irrespective of the underlying host OS or architecture, allowing the developer to work with a truly homogeneous environment across multiple different platforms.

Portable Applications
Inferno applications are written in Limbo® , a modern, safe, modular, concurrent programming language with C-like syntax. It is more powerful than C but considerably easier to understand and debug than C++ or Java. It is easy to express the concurrency in the physical world directly in Limbo"s syntax. Any Inferno application will run identically on all Inferno platforms.

Portable Code
Limbo code is compiled into architecture independent code for the Dis® Virtual Machine , with a compact representation. Dis can be interpreted directly (saving space), or compiled on the fly for a given target processor (saving time). The choice can be made at run-time, per module. The Dis architecture was carefully designed to make on-the-fly code generation straightforward. Its instructions are easy to implement.

Transparent Resources
Inferno offers complete transparency of resources and data using a simple but powerful "namespace" system. By representing resources as files and having one standard communication protocol — 9P (Styx®) — resources such as data stores, services and external devices can easily be shared between Inferno systems. A resource interface may be imported to the local system and used by the applications without them knowing, or needing to know, whether it is local or remote.

Security
High level security is an important part of the Inferno system. By using one standard protocol for all network communication, security can be focused on one point and provided at a system level. Inferno offers full support for authenticated, encrypted connections using a certificate based user identification scheme and variety of algorithms including:

  • IDEA, 56 bit DES, 40, 128 and 256 bit RC4 encryption algorithms
  • MD4, MD5 and SHA secure hash algorithms

A Complete Solution
Inferno is not only an operating system, it is also a complete development environment, providing all the tools necessary for creating, testing and debugging the applications that run within it.

  • Acme IDE: includes editor, shell, advanced pattern matching tools & more
  • Fast Compiler: with full syntax and compile time type checking
  • Graphical Debugger: with full stack trace for currently executing threads
  • Powerful Shell: with sophisticated scripting capabilities
  • UNIX like commands: including bind, grep, gzip, mount, ps, tar, yacc...
To see how Vita Nuova and Inferno can provide a solution for you, contact us or select one of the links below.

Описание Inferno

Напишите отзыв о статье "Inferno (операционная система)"

Примечания

См. также

Ссылки

  • (англ.)
  • с официальными исходниками (англ.)
  • (рус.)
  • (рус.)
  • (рус.)
  • (рус.)
  • - статья, содержащая перечень ссылок на другие ресурсы по Inferno (рус.)
  • (англ.)
  • (рус.)
  • (рус.)

Отрывок, характеризующий Inferno (операционная система)

– Это метампсикова, – сказала Соня, которая всегда хорошо училась и все помнила. – Египтяне верили, что наши души были в животных и опять пойдут в животных.
– Нет, знаешь, я не верю этому, чтобы мы были в животных, – сказала Наташа тем же шопотом, хотя музыка и кончилась, – а я знаю наверное, что мы были ангелами там где то и здесь были, и от этого всё помним…
– Можно мне присоединиться к вам? – сказал тихо подошедший Диммлер и подсел к ним.
– Ежели бы мы были ангелами, так за что же мы попали ниже? – сказал Николай. – Нет, это не может быть!
– Не ниже, кто тебе сказал, что ниже?… Почему я знаю, чем я была прежде, – с убеждением возразила Наташа. – Ведь душа бессмертна… стало быть, ежели я буду жить всегда, так я и прежде жила, целую вечность жила.
– Да, но трудно нам представить вечность, – сказал Диммлер, который подошел к молодым людям с кроткой презрительной улыбкой, но теперь говорил так же тихо и серьезно, как и они.
– Отчего же трудно представить вечность? – сказала Наташа. – Нынче будет, завтра будет, всегда будет и вчера было и третьего дня было…
– Наташа! теперь твой черед. Спой мне что нибудь, – послышался голос графини. – Что вы уселись, точно заговорщики.
– Мама! мне так не хочется, – сказала Наташа, но вместе с тем встала.
Всем им, даже и немолодому Диммлеру, не хотелось прерывать разговор и уходить из уголка диванного, но Наташа встала, и Николай сел за клавикорды. Как всегда, став на средину залы и выбрав выгоднейшее место для резонанса, Наташа начала петь любимую пьесу своей матери.
Она сказала, что ей не хотелось петь, но она давно прежде, и долго после не пела так, как она пела в этот вечер. Граф Илья Андреич из кабинета, где он беседовал с Митинькой, слышал ее пенье, и как ученик, торопящийся итти играть, доканчивая урок, путался в словах, отдавая приказания управляющему и наконец замолчал, и Митинька, тоже слушая, молча с улыбкой, стоял перед графом. Николай не спускал глаз с сестры, и вместе с нею переводил дыхание. Соня, слушая, думала о том, какая громадная разница была между ей и ее другом и как невозможно было ей хоть на сколько нибудь быть столь обворожительной, как ее кузина. Старая графиня сидела с счастливо грустной улыбкой и слезами на глазах, изредка покачивая головой. Она думала и о Наташе, и о своей молодости, и о том, как что то неестественное и страшное есть в этом предстоящем браке Наташи с князем Андреем.
Диммлер, подсев к графине и закрыв глаза, слушал.
– Нет, графиня, – сказал он наконец, – это талант европейский, ей учиться нечего, этой мягкости, нежности, силы…
– Ах! как я боюсь за нее, как я боюсь, – сказала графиня, не помня, с кем она говорит. Ее материнское чутье говорило ей, что чего то слишком много в Наташе, и что от этого она не будет счастлива. Наташа не кончила еще петь, как в комнату вбежал восторженный четырнадцатилетний Петя с известием, что пришли ряженые.
Наташа вдруг остановилась.
– Дурак! – закричала она на брата, подбежала к стулу, упала на него и зарыдала так, что долго потом не могла остановиться.
– Ничего, маменька, право ничего, так: Петя испугал меня, – говорила она, стараясь улыбаться, но слезы всё текли и всхлипывания сдавливали горло.
Наряженные дворовые, медведи, турки, трактирщики, барыни, страшные и смешные, принеся с собою холод и веселье, сначала робко жались в передней; потом, прячась один за другого, вытеснялись в залу; и сначала застенчиво, а потом всё веселее и дружнее начались песни, пляски, хоровые и святочные игры. Графиня, узнав лица и посмеявшись на наряженных, ушла в гостиную. Граф Илья Андреич с сияющей улыбкой сидел в зале, одобряя играющих. Молодежь исчезла куда то.
знакомство с ОС Inferno

Давно мы не расказывали вам о новых операционных системах. А ведь мир не стоит на месте, и рынок ОС вовсе не ограничивается Linux, Windows и *BSD, о которых информация – как в СР, так и в других бумажных и электронных изданиях – появляется с завидной регулярностью.
А тут как раз и повод хороший появился: в новостных лентах промелькнуло сообщение о выходе (и доступности для бесплатного скачивания) 4-й версии ОС с адским (в таком контексте обычно говорят «инфернальным», но в нашем случае выйдет тавтология:) названием Inferno. Но поскольку мы уверены, что по крайней мере половина наших читателей отродясь не слышала об этой ОС, и по сему не знают – радоваться такой новости или нет, мы решили посвятить Inferno целый «полноформатный» материал, за основу которого была взята статья разработчиков этой системы. Кстати, посмотрите на список авторов в конце статьи, уверены -- вы будете приятно удивлены;)

вступление

Операционная система Inferno разработана Центром по Компьютерным Исследованиям Bell Labs, научно-исследовательским подразделением Lucent Technologies. В дальнейшем ее разработку продолжили другие подразделения Lucent, а на сегодняшний день эксклюзивные права на эту систему принадлежат английской софтверной компании Vita Nuova.
Основное назначение системы - создание аппаратно-независимых распределенных вычислительных систем и использование во встраиваемых устройствах.
Inferno предназначена для использования в различном сетевом окружении, например, смартфоны, наладонные КПК, системы кабельного и спутникового телевидения, недорогие интернет-терминалы и, конечно, традиционные компьютерные системы.
Где может с успехом применяться Inferno? В сетях кабельного телевидения, прямого спутникового вещания, Интернет и любых других сетях передачи данных (и мультисервисных, конечно же).
В отличие от телефонных систем с их стандартными терминалами и сигналами, компьютерные сети разрабатываются в мире различных терминалов, сетевого оборудования и протоколов. Только хорошо разработанная, экономичная операционная система может объединить различных провайдеров контента и сервиса на различных транспортных и презентационных платформах. Как вы могли догадаться, Inferno – именно такая операционная система;)
Преимущества Inferno основываются на портируемости и гибкости в следующих направлениях:
- поддержка процессоров: в настоящее время поддерживаются Intel, Sparc, MIPS, ARM, HP PA, PowerPC, готовится поддержка других процессоров.
- поддержка различного окружения: Inferno работает как отдельная система на малых терминалах, также запускается как пользовательский процесс на Windows NT, Windows 95, Unix (Irix, Solaris, FreeBSD, Linux, AIX, HP/UX)и Plan 9. Во всех этих случаях приложения Inferno имеют одинаковый интерфейс.
- распределенная структура: идентичные окружения устанавливаются на пользовательском терминале и на сервере, каждый может импортировать ресурсы (например, доступные устройства ввода/вывода или сети) другого. Благодаря коммуникационным возможностям системы приложения могут быть легко разделены (даже динамически) между клиентом и сервером.
- минимальные требования к оборудованию: самостоятельные приложения работают на компьютере с 1 МВ памяти и не нуждаются в контроллере памяти.
- портируемость приложений: Inferno приложения написаны на типизированном языке Лимбо, и двоичное представление, генерируемое компилятором, идентично для всех платформ.
- динамическая адаптация: приложения могут, в зависимости от оборудования или других доступных ресурсов, использовать различные программные модули для выполнения специфических функций. Например, видеоплеер может использовать различные модули декодера.
В основе структуры Inferno лежит модель, предполагающая большое различие области приложений, которые должны использоваться. Многие провайдеры заинтересованы в предоставлении медиа и других сервисов: телефонный сервис, www-сервис, кабельное телевидение, торговля, различные информационные службы. Также существует много технологий связи: обычные телефонные модемы, ISDN, АТМ, Интернет, аналоговое эфирное или кабельное телевидение, кабельные модемы, цифровое видео и интерактивное телевидение.
Приложения, отвечающие текущим и будущим потребностями Lucent, связаны с управлением свитчами и маршрутизаторами. Также отметим, что внутреннюю сеть и серверы Bell Labs защищают файрволлы, основанные на Inferno.
Inferno очень бережно относится к ресурсам, что позволяет поддерживать достаточно сложные приложения на сегодняшнем оборудовании. В частности, система позволит разработчикам создавать прикладные приложения, работающие на разных устройствах. Возьмем, для примера, интерактивный покупательский каталог: возможность работы в текстовом режиме через аналоговый модем, показ картинок (возможно даже с аудио) товаров через ISDN и показ видеоклипов через цифровой канал.
Конечно, никто не заставляет вас как разработчика использовать все возможности и функции Inferno, но следует помнить - архитектура системы ограничена только требованиями и фантазиями заказчика, доступными сетевыми каналами и серверными технологиями, но не софтом.

интерфейсы Inferno

Роль системы Inferno заключается в создании нескольких стандартных интерфейсов для своих приложений:
1. Приложения используют различные внутренние ресурсы системы, такие, как виртуальная машина, которая запускает программы и модули библиотек для выполнения различных действий от простых, таких как манипуляция строками, до более сложных (работы с текстом, изображениями, высокоуровневыми библиотеками или видео).
2. Приложения существуют во внешнем окружении, которое содержит такие ресурсы, как файлы с данными, которыми можно манипулировать, и именованными объектами, которыми можно манипулировать подобно файлам, но более интенсивно. Устройства (пульт дистанционного управления, MPEG-декодер или сетевой интерфейс) представлены для приложений, как файлы.
3. Существуют стандартные коммуникационные протоколы для взаимодействия приложений как в рамках одного хоста, так и между разными хостами, на которых запущена Inferno. Таким образом Inferno-приложения могут эффективно кооперироваться.
В то же время Inferno использует интерфейсы, предоставляемые существующим окружением, таким как имеющееся оборудование или протоколы и системные вызовы операционной системы.
Типичный сервис, основанный на Inferno, состоит из множества относительно дешевых терминалов, на которых запущена Inferno как родная ОС и меньшего количества больших машин (серверов), где Inferno работает в качестве гостевой системы. На таких серверных машинах Inferno может предоставлять доступ к базе данных, транзакционной системе или другим ресурсам, предоставляемым родной операционной системой. Inferno-приложения могут быть запущены на клиентской системе, или на сервере, или на обоих.

внешнее окружение Inferno-приложений

Назначение большинства приложений Inferno - это предоставление информации или медиа данных пользователю. Такие приложения должны обнаружить местонахождение ресурса в сети и конструировать локальное представление этих данных на пользовательском устройстве. Однако большинство информационных потоков не являются односторонними: пользовательский терминал (будь то сетевой компьютер, телевизор, персональный компьютер или видеофон) также является источником некоторой информации и должен предоставлять эту информацию приложениям. Inferno во многом повторяет структуру Plan9 (родственная операционная система, также разработанная Bell Labs) в способе представления ресурсов приложениям. Эта структура следует трем принципам:
1. Все ресурсы являются именоваными и доступны в виде файлов в дереве иерархической файловой системы;
2. Раздельные иерархии ресурсов, предоставляемые различными сервисами, объединяются в одно локальное именованое пространство;
3. Коммуникационный протокол Styx используется для унификации доступа к ресурсам, локальным или удаленным.
На практике большинство приложений видят набор файлов, организованных в дерево директорий. Некоторые файлы содержат обычные данные, другие представляют собой более активные ресурсы. Устройства представлены как файлы, драйверы устройств (таких, как модем, MPEG-декодер, сетевой интерфейс или телевизионный экран) присоединенных к системе, представлены как малые директории. Эти директории обычно содержат два файла:data и ctl, которые, соответственно, определяют операции ввода/вывода и управления устройством. Системные сервисы также доступны через именованные файлы. Например, нэймсервер может быть доступен с помощью определенного имени, скажем /net/dns; после записи в этот файл доменного имени хоста, последующее чтение возвращает соответствующий IP-адрес в цифровой нотации.
Клей, который соединяет отдельные части именованого пространства имен, - это протокол Styx. В Inferno все драйверы устройств и другие внутренние ресурсы отвечают процедурной версии Styx.
Ядро Inferno содержит так называемый «драйвер монтирования», который преобразует операции файловой системы в удаленные вызовы процедур для передачи их по сети. На другом конце соединения, сервер считывает сообщения протокола Styx и реализует соответсвующие вызовы, используя локальные ресурсы. Таким образом, становится возможным импортировать часть именованого пространства (то есть доступные ресурсы)с других машин.
Расширяя приведенный выше пример: маловероятно, чтобы конечное устройство хранило код сервера имен у себя. Вместо этого, интернет браузер импортирует ресурс /net/dns прямо в собственное пространство имен с сервеpной машины в сети.
Протокол Styx находится уровнем выше и независит от транспортного протокола; он работает поверх ТСР, РРР, АТМ или различных модемных про токолов.

внутреннее окружение приложений Inferno

Inferno-программы написаны на новом языке Limbo, который создан специально для работы в Inferno. Его синтаксис навеян С и Pascal, и он поддерживает общие для этих языков стандартные типы данных и несколько высокоуровневых типов данных, таких, как списки, кортежи, строки, динамические массивы и простые абстрактные типы данных.
Кроме того, Limbo поддерживает несколько сложных конструкций, внедренных в виртуальную машину Inferno. В частности, коммуникационный механизм, channel (канал), который используется для взаимодействия различных задач Limbo на локальной машине или через сеть. Через канал передаются данные машинонезависимым способом, таким образом сложные структуры данных, включая сами каналы, могутбыть переданы между задачами Limbo или присоединены к файлам именованого пространства для взаимодействия между компьютерами на уровне языка.
Многозадачность поддерживается непосредственно языком Limbo: могут порождаться независимые потоки и для координации канального соединения между задачами используется выражение alt (т. е. alt используется для выбора одного из нескольких каналов, готовых для взаимодействия). Путем встраивания каналов и задач в язык и его виртуальную машину, Inferno представляет легкий для использования и безопасный способ взаимодействия.
Программы Limbo состоят из модулей, которые являются упакованными контейнерами с определенным интерфейсом в виде функций/методов, абстрактных типов данных и констант, определяемых внутри модуля и доступных извне. Модули доступны динамически, то есть если один модуль хочет использовать другой, то динамически вызвается load с именем вызваемого модуля и возвращается указатель на новый модуль. Когда новый модуль больше не используется, его окружение и код будут выгружены.
Гибкостью модульной структуры обусловлены небольшие рзмеры типичного Inferno-приложения. Например, в торговом каталоге, описанном выше, основной модуль приложения динамически проверяет наличие видеоресурса, и если ресурс недоступен, то видеодекодер не подгружается.
Limbo полностью проверяет правильность типов данных во время компиляции и исполнения, например, указатели (кстати более строгие, чем в С) проверяются перед использованием. Соответствие типов подгружаемого динамически модуля проверяется при загрузке. Limbo-приложения стабильно работают на машине без аппаратной защиты памяти.
Более того, все объекты системных данных и программные объекты контролируются "мусороуборщиком", жестко встроенным в Limbo. Все такие объекты отслеживаются виртуальной машиной и выгружаются после использования. Например, если приложение создает графическое окно и заканчивает свою задачу, то такое окно автоматически закрывается после того, как будут удалены все ссылки на этот объект.
Программы Limbo скомпилированны в байт-код, который содержит инструкции для виртуальной машины Dis. Архитектура арифметической части Dis представляется собой простую 3-адресную машину, обеспеченную несколькими специализированными операциями для работы с некоторыми высокоуровневыми типами данных, такими как массивы и строки. Сбор мусора выполняется ehjdytv ниже, аналогично скрыта и планировка задач. Когда байт код подгружается в память, то он разворачивается в более эффективный для исполнения формат. Существующий компилятор на лету преобразует поток инструкций Dis в машинные инструкции для аппаратного обеспечения. Такое преобразование эффективно благодаря тому, что команды Dis очень хорошо соответствуют наборам инструкций современных архитектур. Результирующий код выполняется со скоростью, сравнимой со скоростью компилированных программ С.
Уровнем ниже, чем Dis, находится ядро Inferno, которое содержит интерпретатор и компилятор реального времени, также как менеджер памяти, планировщик, драйверы устройств, стеки протоколов и тому подобное. Ядро также содержит основу файловой системы (обработчик имен и код, преобразующий операции файловой системы в удаленные вызовы процедур через существующие коммуникационные каналы).
Наконец, виртуальная машина Inferno реализует внутри себя несколько стандартных модулей. Модуль Sys, который обеспечивает системные вызовы и небольшую библиотеку подпрограмм (создание сетевых соединений, строковые операции). Модуль Draw - это основная графическая библиотека, которая работает с растрировой графикой, шрифтами и окнами. Модуль Prefab построен на Draw для поддержки структурированных комплексов, содержащих изображения и текст внутри окна. Эти объекты могут быть прокручены, выбраны, изменены с использованием методов Prefab. Модуль Тk - это новая реализация графической библиотеки Тk и интерфейсом Limbo. Модуль Math содержит процедуры программирования математических операций.

среда Inferno

Inferno создает стандартное окружение для приложений. Одно и то же приложение может быть запущено в различных типах окружения, в том числе распределенном, и увидеть идентичные ресурсы. В зависимости от окружения, в котором запущена сама Inferno, существует несколько версий ядра, Dis/Limbo-интерпретатора, наборов драйверов устройств.
Когда Inferno запущена в качестве единственной операционной системы, ядро включает в себя все необходимые низкоуровневые части (обработчики прерываний, графические и другие драйверы), которые необходимы для воплощения высокоуровневых абстракций для приложений.
В качестве гостевой системы, например под Unix или Windows, Inferno работает, как набор обычных процессов. Вместо использования собственных возможностей для управления оборудованием, Inferno использует ресурсы, предоставляемые операционной системой, под которой работает. Например, под Unix, графическая библиотека может быть реализована с использованием ХWindow, а сетевая поддержка с использованием библиотеки сокетов. В Windows Inferno использует родную графическую систему и вызовы Winsock.
Inferno написа на на стандартном языке С и большинство ее компонентов независимы от операционных систем, которые могут хостить Inferno.

безопасность в Inferno

Inferno обеспечивает безопасность коммуникаций, использования ресурсов и системной целостности.
Через каждый внешний канал данные передаются в открытом виде вместе с цифровым дайджестом для предотвращения порчи, либо зашифроваными, для предотвращения порчи и перехвата данных. Обмен ключами происходит через стандартный механизм публичных ключей. После обмена ключами шифрование и цифровые подписи используют стандартный симметричный механизм.
Inferno обеспечивает защиту от плохо написанных приложений (с ошибками или злонамеренными «отклонениями») и предоставляет возможность защищенного взаимодействия между «подозрительными» сервис-провайдерами и клиентами. Ресурсы, необходимые программе, предоставляются эксклюзивно, только в пространстве имен программы, также доступны стандартные механизмы защиты. Это относится к данным, коммуникационным каналам и собственно исполняемым файлам и библиотекам. Критические ресурсы системы доступны только через вызов модуля, который их предоставляет, в частности, добавление новых файлов и сервисов в именованое пространство контролируется и возможно только после аутентификации. Например, если сетевой ресурс удален из именованого пространства приложения, то для него становится невозможным установить сетевое соединение.
Объектные модули могут быть подписаны для подтверждения их подлинности и действительности, эти подписи могут быть проверены системой при доступе к таким модулям.
Хотя Inferno обеспечивает большое количество механизмов аутентификации и защиты, подробно описанных ниже, немного приложений требуют их реализации, по крайней мере требовать какого-то программирования для использования их.
Чаще доступ к ограниченым ресурсам через безопасный канал заранее организуется системой, в которой запущено приложение. Например, когда клиентская система использует серверную систему и проверка доступа и шифрование доступны, серверные ресурсы будут предоставлены, как часть именованого пространства приложения. Коммуникационный канал, который предоставляет протокол Styx, может быть установлен для аутентификации или шифрования. Таким образом, использование всех ресурсов автоматически защищено.

механизмы безопасности

Аутентификация и цифровые подписи представлены шифрованием с использованием открытых ключей. Публичные ключи сертифицирваны и подписаны приватными ключами организации, выдавшей сертификат.
Inferno использует шифрование для:
- постоянной аутентификации сторон;
- аутентификации сообщений между сторонами;
- шифрования сообщений.
Алгоритмы шифрования, предоставляемые Inferno, включают SHA, MD4, и MD5-хеши. публичные подписи и подтверждение подписей Elgamal, RC4- и DES-шифрование. Обмен пуб личными ключами основан на схеме Diffie Hellman. Подписи публичных ключей могут иметь длину до 4096 бит, по умолчанию 512 бит.
Не существует всеобщих национальных или международной организации для хранения или генерации публичных или приватных ключей шифрования. Поэтому Inferno включает инструмент для использования или создания доверенной организации, но не предоставляет такой организации самостоятельно, потому что это административная функция. Таким образом, организация используящая Inferno (или другую систему для защиты и обмена ключами) должна создать собственную систему для своих нужд и, в частности, решить, кому доверить сертификацию. Однако структура Inferno достаточно гибка и модульна для применения протоколов, используемых на практике.
Сертификационная организация, которая подписывает пользовательские публичные ключи, определяет размер ключа и алгоритм. Средства, предоставляемые Inferno, используют эти подписи для аутентификации. Для подписи и верификации Limbo-приложениям предоставляется библиотека интерфейсов.
Когда стороны обмениваются данными, они используют протокол Station to Station для идентификации сторон и для создания секретного ключа. Station to Station протокол использует алгоритм Diffie-Hellman для создания такого совместного секретного ключа. Протокол защищен от повторных атак выбором новых значений для каждого взаимодействия. Протокол безопасен для атак "man in the middle" за счет обмена сторонами сертификатами и затем подписанными ключевыми частями протокола. Для маскировки в качестве другой стороны атакующему необходимо имитировать подпись этой стороны.

безопасность линии

Сетевое взаимодействие может быть защищено от модификации или модификации и прослушивания. Для защиты от модификации Inferno может применять MD5- или SHA-хеш (называемый дайджест) -

hash(secret, message, messageid)

для каждого сообщения. Messageid - это 32 номер, который начинается с 0 и увеличивается на 1 для каждого следующего сообщения. То есть сообщение не может быть ни изменено, ни удалено, не может быть изменена очередность сообщений в потоке, только при условии наличия ключа или взлома алгоритма хеша.
Для защиты от прослушивания Inferno использует шифрование всего сеанса используя RC4 или DES (DESCBC, DESECB).
Inferno использует тот же формат инкапсуляции, что и Netscape"s Secure Sockets Layer. Возможна множественная инкапсуляция потока сообщений для предоставления различных уровней защиты.

случайные числа

Прочность криптографического алгоритма зависит, в частности, от случайных чисел, используемых для выбора ключей, параметров алгоритма Diffie Hellman, векторов инициализации и т. п. Inferno достигает этого в два этапа: медленный (от 100 до 200 бит в секунду) случайный битовый поток получается от семплирования битов низких разрядов свободно работающего счетчика с каждым тактом часов. Часы должны быть несинхронизированы, или малосинхронизированы со счетчиком. Этот генератор случайных чисел затем используется для изменения состояния быстрого генератора псевдослучайных чисел. Оба генератора были протестированы на множестве архитектур, используюя самокорреляцию, случайные ходы и повторяющиеся тесты.

Серия контента:

Вступление

Все знатоки UNIX знают имена Кена Томпсона (Ken Tompson), Роба Пайка (Rob Pike) и Дениса Ритчи (Dennis Ritchie). Знают об их вкладе в индустрию IT, знают, что именно они являются создателями операционной системы UNIX, языка программирования Си и именно им принадлежат идеи файлов-устройств, конвейерной обработки данных, командного интерпретатора, работающего вне ядра ОС. Но немногим известно, что еще в конце 1980-х эти люди начали самый грандиозный и масштабный проект по уничтожению UNIX и ее родного языка Си, что именно в это время они приступили к работе над операционной системой, призванной уничтожить UNIX и придти ей на смену.

Закат UNIX

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

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

Со временем текстовые терминалы были вытеснены терминалами с дисплеями, сначала растровыми, а затем и графическими, но код ОС, отвечавший за вывод на терминал, оставался неизменным. С рождением сети ARPANET и протоколов TCP/IP в BSD-редакцию UNIX был добавлен код сетевого стека, но вместо синтетических файлов (файлов-устройств) его привязали к системным вызовам, реализующим модель сокетов. С появлением графических дисплеев и предложенной Xerox модели оконной среды, в UNIX была добавлена оконная графическая система X Window, но опять же, вместо привязки ее API к синтетическим файлам был разработан специальный протокол. Также были созданы сетевая файловая система NFS и одноименный сетевой протокол, различные системы удаленного вызова процедур, Kerberos и многое другое. В конце концов, идея мейнфремов с разделением времени не получила развития, и UNIX портировали на персональные рабочие станции и процессоры семейства i386.

PC-архитектура, предложенная IBM, предполагала возможность установки дополнительных плат, расширяющих функциональность рабочей станции. Поначалу пользователи имели доступ к ограниченному количеству простых плат расширения, но впоследствии возросли как их количество и разнообразие, так и сложность. Все это привело к тому, что некогда простое монолитное ядро UNIX (а теперь уже BSD и Linux) было разбито на модули, каждый из которых реализовал слой совместимости с платой расширения (драйвер), а простые в обращении синтетические файлы устройств, служившие точкой доступа к этому оборудованию, превратились в сложные интерфейсы, поддерживающие не только запись и чтение, но и множество так называемых вызов ioctl, иногда со сложными и совершенно неясными именами.

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

План номер 9

Очевидно, что UNIX уже не исправить, ее убивает собственная архитектура. Поэтому исследователи из Bell Labs решили начать с нуля и разработали новую, никак не связанную и несовместимую с UNIX, ОС с эксцентричным именем Plan 9.

Главная идея Plan 9 заключалась в том, чтобы довести концепцию "все есть файл" до логического триумфа и построить из синтетических файлов всю ОС (а если говорить конкретнее – представить все ресурсы операционной системы файлами). Причем сделать это так, чтобы к файлам имели доступ не только локальные приложения и пользователи, но и любой удаленный клиент. В результате появился файловый протокол 9P, посредством которого происходит доступ к любым файлам (как к локальным, так и к удаленным), файловые серверы, экспортирующие некие ресурсы ОС или конкретные приложения в виде файлов, и пространство имен, призванное объединить все доступные файлы в единое дерево, к которому приложение или пользователь могут обращаться для поиска файлов и работы с ними.

В отличие от UNIX, которая четко разделяет "обычные" файлы и файлы-устройства, Plan 9 вообще лишена этих понятий. Все без исключения файлы, независимо от того, хранятся ли они на диске или были созданы каким-то файловым сервером, подчиняются единым правилам и могут быть доступны другим машинам в сети. А если копнуть еще глубже, то выясняется, что здесь нет даже "обычных" файлов, хранящихся на диске, ведь они тоже экспортируются файловыми серверами, реализующими драйвер файловой системы.

Все есть файл

Чтобы понять идеологию Plan 9, представьте, что пространство имен – это файловая система UNIX (внешне оно так и выглядит), начинающаяся с корня, в которой размещены каталоги и файлы, хранящие приложения, библиотеки, пользовательские данные и т.д. К любому каталогу этой файловой системы можно подключить (с помощью команд mount и bind) другое файловое дерево, но экспортированное не драйвером файловой системы, как это сделано в UNIX, а особым образом написанной программой, называемой файловым сервером.

Файловый сервер может быть приложением пользовательского уровня или компонентом ядра. По самой своей сути это просто программа, обслуживающая запросы клиентов, пришедшие по протоколу 9P. Так как 9P является файловым протоколом, то программа должна поддерживать список экспортируемых ей файлов (по сути, точек входа в программу) и обслуживать любые запросы на открытие/закрытие, чтение/запись любого из этих файлов. После подключения файлового сервера к пространству имен все экспортируемые им файлы становятся доступны остальным приложениям, которые могут использовать стандартные системные вызовы ядра (вроде open, read, seek и др.) для вызова определенных функций файлового сервера.

Все это очень похоже на взаимодействие программы и библиотеки функций с тем исключением, что 9P делает это взаимодействие гораздо более гибким. Для демонстрации этой гибкости возьмем файловый сервер стека протоколов TCP/IP, который реализован в ядре и носит имя "#I". Подключив его к каталогу /net и выполнив команду "ls /net" мы увидим примерно следующее:

% bind -a #I /net % ls /net /net/dns /net/ether /net/il /net/tcp /net/udp

Чтобы подключиться к удаленной машине используя протокол TCP, мы должны открыть файл /net/tcp/clone. Затем в каталоге /net/tcp появится управляющий каталог соединения, в ctl-файл которого мы можем записать команду "connect IP-адрес", записать запрос в файл data, а затем, прочитав его, получить ответ. На языке командного интерпретатора Plan 9 все это выглядит так:

<>/net/tcp/clone { dir=/net/tcp/^`{cat <} echo connect 74.125.77.99!80 >$dir/ctl && { echo "GET /search?q=Plan9&btnI=I""m+Feeling+Lucky HTTP/1.1" && echo "connection: close" && echo "host: www.google.com" && echo "" }>$dir/data cat $dir/data }

На низком уровне вся работа с файлами каталога /net будет сведена к вызовам функций файлового сервера "#I", поэтому пока никакого преимущества, кроме наглядности и возможности создавать соединения прямо из командной строки, мы здесь не видим. Однако если вспомнить, что все обращения к файлам в Plan 9 происходят через протокол 9P, то открывается новая возможность. Если мы импортируем каталог /net с удаленной машины, то, по сути, получим NAT:

% import -a удаленная-машина /net

Все обращения к файлам каталога /net будут передаваться удаленной машине, поэтому за инициацию соединения будет отвечать она. И все это без единой строчки дополнительного кода.

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

А ведь в Plan 9 файловые серверы везде. Это не только TCP/IP-стек, но и любой драйвер, файловая система, оконный графический интерфейс, почтовый сервер и многое другое. Любой ресурс Plan 9 представлен файловым сервером, в то время как API ядра всего лишь представляет функции для создания потоков, работы с файлами и модификации пространства имен. И каждый файловый сервер подчиняется всем описанным выше правилам. Так, файловая система /proc, предоставляющая доступ к свойствам и ресурсам процессов, может быть использована для отладки процесса, при этом удаленная машина вправе подключить ее к своему пространству имен для осуществления удаленной отладки. Процесс может быть помещен в песочницу простой модификацией его пространства имен, а текст помещен в графическое окно с помощью команды cat.

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

Безопасность

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

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

Программирование

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

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

Интерфейс программирования Plan 9 составляют небольшой набор системных вызовов ядра и большое количество различных файлов, экспортируемых файловыми серверами. С большинством этих файлов можно работать без всяких оберток, через прямой вызов функций, таких как open, close, read, write и seek. Это делает API простым и легким для запоминания и использования.

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

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

Inferno

В 1995 году компания Lucent Technologies, новый владелец исследовательских лабораторий Bell Labs, перевела многих разработчиков Plan 9 в другую команду, которая занялась созданием операционной системы Inferno, построенной на базе Plan 9. Руководство компании не без оснований полагало, что Plan 9, способная прозрачно и легко работать на компьютерах, организованных в распределенную вычислительную сеть, отлично покажет себя на маломощных мобильных устройствах и терминалах, которые в то время были просто обязаны перекладывать львиную долю своих функций на другие машины, чтобы обеспечить оптимальную производительность и удобство использования.

В результате родилась Inferno, операционная система, вобравшая в себя все преимущества Plan 9 и обладающая рядом уникальных черт. В основе новой ОС лежало урезанное ядро Plan 9 с переработанной графической подсистемой, выше располагалась высокопроизводительная виртуальная машина Dis, предназначенная для исполнения переносимого процессорно-независимого байткода, а в качестве языка прикладного программирования использовался Limbo, высокоуровневый модульный язык со встроенной поддержкой многопоточного программирования. Кроме того, Inferno обладала способностью работать не только на многих процессорных архитектурах, но и быть приложением внутри существующих ОС, таких как Windows, Linux, Solaris, AIX и других.

Эти особенности делали Inferno идеальной площадкой для организации самых разных распределенных систем. Inferno работала в буквальном смысле на всем, позволяла переносить приложения между платформами не только без модификации, но и без перекомпиляции. Протокол 9P (переименованный в Styx) обеспечивал простой унифицированный способ доступа к ресурсам. Язык Limbo превращал разработку распараллеленных приложений в развлечение.

Виртуальная машина

Несмотря на использование виртуальной машины (ВМ), которая в теории должна была привести к резкому падению скорости исполнения приложений, операционная система показывает впечатляющую производительность. И тому есть простое объяснение: Inferno – коммерческий продукт, поэтому при проектировании Dis исследователи из Bell Labs пошли против принципов и сделали все, чтобы сделать ВМ более привлекательной, с коммерческой точки зрения, технологией. В результате Dis обзавелась следующими характеристиками:

  1. Dis – виртуальная машина типа "память-в-память". В отличие от Java VM и многих других стековых виртуальных машин, Dis обладает наиболее оптимальной для реализации JIT-архитектурой. Если в режиме интерпретации производительность Dis ниже стековых виртуальных машин, то ее JIT-компилятор с легкостью обгоняет своего аналога в стековых ВМ, а уровень потребления памяти остается минимальным. Архитектура "память-в-память" усложняет компилятор, но позволяет сделать JIT-компилятор гораздо более простым и быстрым.
  2. Набор инструкций виртуальной машины максимально приближен к набору инструкций современных процессоров. Это означает, что для интерпретации достаточно большого количества инструкций виртуальной машине необходимо выполнить всего 1–2 инструкции целевого процессора (вместо 10–20 в других ВМ).
  3. Dis реализует избыточный набор высокоуровневых инструкций (CISC-машина) вместо минимального и единственно необходимого (RISC-машина, к которой можно отнести большинство других ВМ). Наравне с такими низкоуровневыми инструкциями, как сложение, вычитание, умножение, сдвиг, переход и т.д., словарь Dis составляют инструкции для работы с каналами, списками, массивами, инструкции для порождения потоков, загрузки модулей и т.д. Все они способствуют ускорению исполнения приложений, написанных на Limbo, но никак не привязывают виртуальную машину к единственному языку.
  4. Dis использует гибридный сборщик мусора. Большая часть мусора собирается с помощью подсчета ссылок, в то время как помечающий сборщик собирает данные в режиме реального времени. В отличие от Java VM и других, набор инструкций Dis не создает сложностей в отслеживании ссылок на копируемые объекты, а значит, память может быть освобождена без промедлений и вызов помечающего сборщика отложен.
  5. Наиболее требовательные к ресурсам компоненты операционной системы Inferno реализованы на языке Си. Inferno насчитывает семь встроенных модулей, включая sys (системные вызовы и часто используемые функции), draw (работа с видеоадаптером и графическими примитивами), Tk (библиотека графических виджетов, на которых строится интерфейс большинства приложений), freetype (растеризатор шрифтов) и keyring (алгоритмы шифрования, работа с сертификатами и т.д.). Каждый из них реализован на языке Си и потому исполняется с почти максимально возможной скоростью.

Limbo

Кроме переносимости и производительности, Inferno обладает еще одной очень важной особенностью: наличием языка прикладного программирования Limbo, который был разработан с нуля специально для Inferno и существует только в рамках этой ОС. Его синтаксис во многом повторяет синтаксис Си, но имеет вкрапления из множества других языков. Характеристики этого языка несколько необычны, но более чем разумны.

  1. Строгая типизация. Limbo – язык со строгой типизацией, а это значит, что в нем нет указателей, подобных Си (есть ссылки, но в них нельзя записать произвольный адрес), нет неявного преобразования типов (в то время как явное всегда дает ожидаемый результат). Проверка типов осуществляется как на этапе компиляции, так и во время исполнения. Все это способствует повышению безопасности и более ожидаемому поведению приложений, а также позволяет отказаться от использования блока MMU-процессора для изоляции данных процессов/потоков и таким образом повысить производительность ОС (Inferno в принципе не позволяет исполнять сторонний код ниже виртуальной машины).
  2. Модули. Limbo – модульный язык, что вкупе со стилем объявления/инициализации переменных делает его похожим на язык Modula. Начав изучать Inferno, вы заметите, что в ней нет понятия исполняемых файлов и библиотек. Весь скомпилированный Dis-байткод хранится в модулях, каждый из которых может быть как запущен из командной строки, так и использован другим модулем в качестве библиотеки функций. При этом код модуля исполняется в отдельном потоке, не дублируется в памяти и может быть загружен многократно. Если вы работали с операционными системами Oberon и AOS, то поймете, о чем я говорю.
  3. Поддержка параллельного программирования. Limbo ведет свою историю от Newsqueak, предком которого был Squeak, экспериментальный язык Роба Пайка, предназначенный для параллельного программирования. Язык поощряет создание многонитевых приложений, всячески этому содействуя. Так, в Limbo (и, соответственно, Dis) встроена поддержка двунаправленных каналов (буферизированных и небуферизированных), оператор создания нового потока spawn и оператор выбора канала alt, по своему назначению сходный с системными вызовами epoll в Linux, kqueue во FreeBSD и /dev/poll в Solaris.
  4. Высокоуровневые конструкции. Limbo поддерживает такие типы данных, как строки, списки, кортежи и абстрактные типы данных (нечто вроде структур, которые могут инкапсулировать не только данные, но и функции), а также специальные конструкции для работы с ними. Так, строки разрешается складывать, сравнивать, обрезать, преобразовывать в массивы, списки можно обрабатывать с помощью конструкций языка для получения их головы и хвоста, кортежи можно преобразовывать в массивы и т.д.

Следующий код, размещенный на сайте Vita Nuova (текущий владелец Inferno, http://www.vitanuova.com), демонстрирует то, как в Limbo происходит работа с потоками и каналами:

implement Timer2; include "sys.m"; sys: Sys; include "draw.m"; Timer2: module { init: fn (nil: ref Draw->Context, argv: list of string); }; init(nil: ref Draw->Context, argv: list of string) { sys = load Sys Sys->PATH; sync:= chan of int; n:= len argv; spawn timer(sync, n); sys->print("Command Line Parameters\n"); for (i:= 0; i < n; i++) { <-sync; sys->print("%d: %s\n", i, hd argv); argv = tl argv; } } timer(sync: chan of int, n: int) { for (i:= 0; i < n; i++) { sys->sleep(1000); sync <-= 1; } }

Исполнение приложения начинается с функции init() . Строка " sync:= chan of int; " создает канал для передачи сообщений типа int . С помощью оператора spawn порождается новый поток, исполняющий функцию timer , которая каждую секунду посылает в канал сообщение "1". При этом родительский процесс входит в цикл, который блокируется до появления сообщения в канале (<-sync;) , а после этого печатает аргумент командной строки. Количество проходов цикла равно количеству аргументов командной строки, а результатом программы будет печать всех аргументов с интервалом в одну секунду.

Совместимость

Имея виртуальную машину и новый язык, Inferno совсем не теряет совместимости с уже существующими приложениями. Работая поверх другой ОС, Inferno позволяет вызывать другие приложения этой ОС, используя специальный интерфейс, поэтому в тех случаях, когда Inferno используется в качестве платформы для создания распределенных приложений, уже существующие приложения могут быть без каких-либо изменений запущены внутри Inferno-окружения. Интерфейс встроенных модулей позволяет встроить любой Си-код в ядро Inferno, создать интерфейс для доступа к этому коду из Limbo и таким образом расширить функциональность среды исполнения. В комплект входит реализация протокола 9P/Styx, написанная на языке Си для POSIX-совместимых платформ. Ее задача: связать Inferno с любыми внешними приложениями как внутри одной ОС, так и удаленно.

Заключение

Plan 9 очень гибкая, но требующая переосмысления принципов построения программных систем, операционная система. Сегодня она используется множеством энтузиастов по всему миру в качестве распределенной ОС. IBM использует Plan 9 и некоторые компоненты Inferno на одной из своих суперкомпьютерных систем Blue Gene/L, построенной на базе 64000 процессоров. Plan 9 использовалась для управления системой освещения стадиона на олимпийских играх в Сиднее в 2000 году. Это живая ОС, которая могла бы стать будущим, если бы ее ниша не была занята UNIX, которая, по словам Эрика Реймонда (Eric Steven Raymond), "скрипит, гремит и имеет очевидные пятна ржавчины, однако она выполняет свою работу достаточно хорошо для того, чтобы удерживать позиции".

В то же время Plan 9 оставила свой след и в UNIX. Системные вызовы rfork во FreeBSD и clone в Linux смоделированы по образу и подобию своего аналога из Plan 9, файловая система /proc в Linux и FreeBSD была заимствована из Plan 9, файловая система /sys в Linux точно следует модели файловых серверов Plan 9, предоставляя способ получения информации об оборудовании без использования вызовов ioctl. Кодировка UTF-8, сегодня используемая всюду, от ОС UNIX и до Web-приложений, была создана для использования в Plan 9.

Inferno, с другой стороны, могла бы стать отличной, производительной, продуманной и удобной для программистов платформой, способной "заткнуть за пояс" Java и C# вместе взятые. Она смогла бы потягаться с erlang и стала бы отличной ОС для встраиваемых устройств. Но всего этого не произошло благодаря скудной рекламе, завышенной цене, головотяпству компаний-владельцев и отвратительному, с точки зрения маркетинга, названию.

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



Рекомендуем почитать

Наверх