пятница, 10 апреля 2009 г.

Plan9 from Bell Labs

В конце 80-х годов отцы UNIX Кен Томпсон и Роб Пайк вместе с группой других программистов из Bell Labs начали работу над операционной системой, получившей в последствии имя Plan9. Поводом к изобретению совершенно новой ОС послужил факт морального устаревания UNIX и идей, заложенных в нее. Реалии современного мира IT требовали операционной системы, прозрачно интегрируемой в распределенную сеть из недорогих рабочих станций, чего не могла в полной мере предложить UNIX, спроектированная для работы на больших мэйнфреймах.

Впервые ОС увидела свет в 1992 году и была распространена между несколькими университетами. В 1995 году появилась вторая редакция, распространяемая на коммерческих условиях. В конце 90-х Bell Labs потеряла интерес к проекту и отпустила третью редакцию ОС (2000 год) в свободное плаванье, разрешив всем желающим как угодно модифицировать и распространять измененный код. Четвертая и последняя редакция Plan9 вышла в 2002 году.

Сложившаяся еще в те времена группа поклонников и разработчиков ОС до сих пор продолжает выпускать ежедневные снапшоты Plan9, которые любой желающий может получить с веб-ресурса Bell Labs: http://plan9.bell-labs.com/plan9/.

Можно смело утверждать, что Plan9 поистине уникальная, инновационная во всех отношениях операционная система, на многие годы опередившая свое время. Кен Томпсон, Роб Пайк и Денис Ритчи уже неоднократно демонстрировали свое незаурядное конструкторское мышление, выпустив самую долгоживущую и популярную операционную систему, а также язык, породивший множество эпигонов и остающийся одним из самых популярных и по сей день. Но работая над Plan9, они превзошли сами себя, - на свет появилась ОС, вобравшая все лучшее от идей UNIX и оставившая далеко позади другие исследовательские проекты ОС.

В основу Plan9 легло три главных конструкторских решения:

1. Все является файлом в широком смысле слова.
2. Единый протокол доступа к ресурсам.
3. Пространства имен.

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

Главной инновацией, позволившей сделать файлы логическим центром всей операционной системы, стал низкоуровневый протокол доступа к ресурсам, названный 9P. Протокол 9P, как и NFS, - файловый, но в отличие от последнего разрабатывался он с упором на простоту и прозрачную работу как с файлами локальной, так и любой другой машины, доступной через сетевое соединение. Именно протокол 9P стал тем недостающим связующим звеном, позволившим разработчикам реализовать новую концепцию организации ОС. Как известно, в UNIX специальные файлы, предоставляющие доступ к аппаратному обеспечению ПК и другим ресурсам, были всего лишь обычными файлами, хранящимися в реальной файловой системе. При обращении к такому файлу ядро проверяло один из его атрибутов и, если файл оказывался специальным, запускало на выполнение особую процедуру, обрабатывающую операции с этим файлом. Plan9 организована совершенно иначе. Здесь вообще нет понятия специальных файлов, но есть понятие файловых серверов.

Файловым сервером в Plan9 называется любая программа, экспортирующая по протоколу 9P свои ресурсы. Благодаря протоколу 9P пользователь и другие программы видят эти ресурсы как файловое дерево и могут обращаться к нему для коммуникации с программой. Самым ярким примером, иллюстрирующим мощь такой концепции, является графическая оконная система Plan9. Это типичный файловый сервер, экспортирующий всего несколько файлов. Программа, пожелавшая распечатать текст в своем окне, должна записать его в файл /dev/cons. Программы, работающие с графикой, могут записывать специальные команды в файл /dev/draw. О текущем положении мыши они узнают, читая файл /dev/mouse. Обратите внимание, что приложение, запущенное в окне графического интерфейса, вообще не прибегает к каким-либо функциям: все, что от нее требуется, это писать и читать данные из нескольких файлов.

Файловые серверы в Plan9 являются основными строительными элементами, в совокупности составляющими цельную операционную систему. Главный файловый сервер - ядро ОС, экспортирующее ресурсы операционной системы. Каждый драйвер также является файловым сервером, экспортирующим ресурсы определенного аппаратного элемента ПК. Файловые серверы, реализующие различные файловые системы, экспортируют их содержимое как дерево файлов, которое может быть подключено к любой точке текущего файлового дерева. Файловый сервер протокола FTP позволяет подключить к текущему файловому дереву содержимое удаленного FTP-сервера. Файловый сервер протокола DNS экспортирует ресурс /net/dns. Программа, пожелавшая узнать IP-адрес сервера  может записать его имя в этот файл, а затем прочитать из него 32-битное число. В теории, любая корректно написанная программа Plan9 должна быть файловым сервером.

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

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

Модель представления любого ресурса как файла чрезвычайно прозрачна и понятна любому человеку, работающему за настольным ПК, будь то рядовой пользователь, программист или системный администратор. Благодаря этой концепции, доступ к ресурсам приобретает универсальный характер и не требует создания дополнительных интерфейсов, загромождающих API. Пользователи получают в распоряжение мощный инструмент, позволяющий использовать стандартные команды типа cat и echo для обращения к любым ресурсам (там, где в другой ОС необходима специальная программа, в Plan9 обычно достаточно простой записи нужной строки в файл).

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


Комментариев нет:

Отправить комментарий