Inferno OS Wiki
Advertisement

Роб Пайк Дейв Пресотто

AT&T Bell Laboratories
Мюррей Хилл, Нью-Джерси 07974

АБСТРАКТНО

Оцифрованные фотографии членов научно-исследовательского центра вычислительной техники Bell Labs корпорации AT&T и большинство их корреспондентов по электронной почте хранятся на сетевом «сервере лиц», доступ к которым можно получить с машин восьмой версии ОС Unix в Мюррей Хилле. Сервер показывает изображение (лицо) автора письма, его имя, время отправки (получения), а также выполняет целый ряд других сервисов информационного века. Face-сервер реализован как один из вариантов сетевой файловой системы, так что все фотографии хранятся на одной машине но, при этом превращаются в регулярные файлы файловых систем всех машин сети. Данный способ представления информации присущ базам данных, так как разрешает доступ, управление и поддержку стандартным утилитам системы Unix.

Увлеченные успешными экспериментами со знаменитыми людьми: Э.В. Дейкстрой (E.W. Dijkstra) и П.Д. Вейнбергером (P.J. Weinberger), в прошлом году мы решили оцифровать фотографии сотрудников исследовательского центра и тех, с кем они контактируют по почте. Результатом этих идей и работы стало приблизительно 30 MB дисковой емкости, распространяемой на диски других компьютеров, которым также был необходим доступ к faces для объявления почты. В этом документе описана конструкция, реализация и работа сетевого «сервера лиц». Лица хранятся в таком месте, которое позволяет всем машинам и пользователям получать доступ к данному казначейству полезной информации.

Что у нас было: довольно освещенная комната с белым задним планом, черно-белые фотографии Polaroid 4" 5" на каждого участника. Что мы делали: оцифровка фотографий производилась при помощи видео фреймового эмулятора в 512*512 байт (8 бит на пиксель) в градации серого, позже каждая фотография была уменьшена до 48*48 бит (1 бит на пиксель) и стала черно-белой «иконкой». В программе уменьшения фотографий использовался алгоритм Floyd-Steinberg [1]; при диалоговой деятельности устанавливались верхний и нижний пороги для регулировки яркости и контрастности, затем производился выбор наиболее удачных изображений. Хотя небольшие изображения удивительно хорошо распознаются, качество иконки критически зависело от многих параметров. В любом случае для выбора наилучшей оцифровки требовалось человеческое мнение. После первого дня фотографирования у нас получилось более сотни записанных лиц, и стало очевидно, что нам необходимо место для хранения, управления и администрирования всем этим богатством, — сетевой face-сервер.

Сначала faces сохранялись как обычные файлы, так что средствами для доступа к ним были стандартные программы, такие как cat. Но, в отличие от простого списка файлов, нам хотелось иерархической структуры с пользователями конкретной машины, или машин организаций, сгруппированных вместе. Очевидным путем построения такой иерархии была файловая система со ссылками на ассоциированные faces (файлы) со множеством машин (каталогов) для их размещения. Чтобы сделать файловую систему доступной всем и везде, face-сервер симулирует файловую систему Unix, которая может быть подмонтирована на клиентской машине с использованием протоколов сетевой файловой системы восьмой версии. Faces имеют обычные для файлов названия, так что какого-либо дополнительного ПО для их использования не требуется. (Роб Пайк и Питер Вейнбергер в документе [2] обсуждают другие вопросы схемы именования.) Для соответствия структуре базы данных и ее типичному использованию, детали файловой системы несколько различаются.

Традиционная модель сетевого сервера довольно усложнена и отличается от обычных серверов способом доступа к данным. Типичный сервер включает операции «прикрепить протоколы» или «транзакции» взамен системным вызовам типа open и read. Изобретение новых способов доступа к данным влечет изобретение нового ПО для их использования, стандартные системные вызовы, в свою очередь, обеспечивают всю необходимую функциональность.

В общем, наш face-сервер поддерживает два формата. Небольшие иконки сохранены как шестнадцатеричные ASCII строки, так как они будут появляться в описании С, фотографии высокого разрешения в градациях серого сохранены как двоичные файлы (для эффективности хранения). Файловая система представляет собой обычный каталог, часто это /n/face, со специальными именами файлов, к примеру, /n/face/research/pjw/48x48x1. Первый подкаталог содержит имена машин, второй — пользователей этих машин, а третий — сами файлы faces.

Наша первая реализация использовала сетевую файловую систему восьмой версии ОС Unix [3], которая допускает монтирование корневого системного каталога в узел локальной файловой системы. Простая ранняя реализация face-сервера: монтирование корневой системы сервера на файловой системе каждой из машин (клиентов). При этом использовалось только существующее ПО и возникали некоторые проблемы. Первая, защита доступа не была реализована в способе ассигнований сетевому сервису. Сетевая файловая система делала возможным просмотр всех файлов машины-сервера, т.е. не только faces. Способ реализации защиты сетевой файловой системы делает так, что любому, кто хочет использовать faces необходим открытый эккаунт на сервере. Эти детали заставляют нас делать неудобный выбор: или поставить пользователям на клиентских машинах большие привилегии, чем им нужны, или же совсем закрыть доступ определенным пользователям и машинам. Вторая проблема, ресурсы на сервере были напряжены реализацией. Удаленная файловая система требует, чтобы серверная система поддерживала открытое сетевое соединение и серверный процесс для каждой клиентской системы. Поскольку у нас есть дюжины систем, это заставляет серверную систему запускаться вне сетевых каналов, процессовых слотов или разделов подкачки. И наконец, необходимый множественно-связаный вид данных был неуклюж и неэффективен, когда он был построен по традиционным для файловых систем технологиям: существование огромного количества символических ссылок было слишком расточительным для дискового пространства и процессорного времени.

Faces2

Текущая реализация избегает эти проблемы путем разделения работы между двумя различными процессами (см. Рис.1). Процесс-демон запускается на каждой клиентской системе, а одиночный серверный процесс запускается на сервере. Каждый клиентский демон поддерживает штатную информацию об открытых face-файлах в своей системе. Эти демоны преобразуют примитивы файловых систем в удаленные процедурные вызовы и отправляют их через сеть на сервер. Сервер является штатным в том смысле, что все поступающие запросы владеют полной информацией; сервер не запоминает информацию о вызовах. Это упрощает работу создания и закрытия соединений, как результат — выше надежность и готовность к возникновению непредвиденных ситуаций (таким как системные аварии) чем в регулярной сетевой файловой системе. Проблемы доступа к файлам решены путем ограничения просмотра только face-файлов через face-сервер. Это делает возможным применение специальных методов защиты для face-файлов без влияния на доступ к файлам на серверной системе.

Сервер читает пару файлов (имя машины и отправителя), которые описывают переписку между парами машина/персона и обычными файлами на диске, и создает в ядре древовидную структуру корреспонденции каталога файловой системы face. Листьями дерева являются указатели на фактические файлы на диске, но, так как каталоги находятся в ядре, они могут быть «жестко связаны» (hard linked) вместе (эту операцию невозможно осуществить на диске потому что биты связей в индексном дескрипторе каталогов узурпируются для проверки согласованности дерева каталогов); машины, объединенные организацией (например, mit-eddie и MIT-MC) связываются в каталог, который получает название данной организации (в данном случае, MIT). Эксплуатация состоит в обновлении файлов описаний для отражения корреспонденции между реальным миром и доступными изображениями.

Face-сервер представляет собой небольшую базу данных face-файлов; также был реализован стандартный протокол преобразования пар машина/персона в файлы faces. Каталог организации должен содержать «unknown» (т.е. неизвестный) face и использоваться когда соответствующий пользователю face не доступен, существует даже искусственная организация под названием «misc» (т.е. прочие) для хранения иконок для общих пользователей, таких как root и uucp. Следующие faces — это извлеченные для research!pjw (стандартный доступный face), lucasfilm!george (неизвестный face для lucasfilm, lucasfilm/unknown) и decvax!uucp (общая для uucp иконка, misc./uucp):

Faces3

В редких случаях, например, когда на хост-машине проводится профилактика и face-сервер закрыт, некоторые face-программы внутренне сохраняют один чистый face, не находящийся на face-сервере, таким образом, хотя бы одно изображение — всегда доступно:

Faces4

Главным клиентом face-сервера является программа под названием vismon, которая обеспечивает непрерывный мониторинг загрузки процессора, сети и поступающей почты. Отправитель каждого сообщения конвертируется в face и отображается в окне vismon (см. Рис. 2). Результатом послеполуденной проверки почты является «полицейский» набор лиц, возможно, даже с какой-то разновидностью жвачного животного.

Vismon

Рис. 2. Окно vismon, показывающее набор faces и системную активность нескольких машин.

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

Уроки, полученные при построении face-сервера, создали новый способ представления базы данных: в виде набора регулярных Unix файлов. Благодаря обеспечению стандартных имен для faces, обычные средства Unix могут использоваться для работы с базой данных. Поведение файлов было настолько знакомо, что при создании сервиса работать пришлось совсем немного; фразой «файловая система» можно описать большинство деталей. Мы сопротивлялись искушению расширения семантики файлов, например, созданию файлов конкретного разрешения по требованию, или кодированию имени файла для определения ASCII это или двоичный формат; взамен, face-сервер обеспечивает регулярные Unix-файлы, построенные с учетом их поведения, а не изменения. Реализация получилась во многом проще благодаря существованию рабочей сетевой файловой системы и механизмов IPC восьмой версии Unix. Теперь у нас есть одна рабочая база данных, другие будут создаваться позже. Одной из возможностей является цифровой сервер шрифтов, реализованный как база данных.

Благодарности

Люка Карделли (Luca Cardelli) нарисовал первые несколько иконок от руки, доработал аппаратное обеспечение оцифровки и программное обеспечение первой сотни faces.

Литература

[1] W.M. Newman and R.F. Sproull, Principles of Interactive Computer Graphics, p. 226, McGraw-Hill, New York 1979.
[2] Rob Pike and P.J. Weinberger, ``The Hideous Name, Summer 1985 USENIX Conference Proceedings, Portland, Oregon.
[3] P.J. Weinberger, ``The Version 8 Network File System,
Summer 1984 USENIX Conference Proceedings, Salt Lake City, Utah.

Рис. 3 Телетайп DMD-5620 с изображением результатов послеполуденной проверки почты, показывает использование face-сервера. Верхние две программы показывают один face с разрешением 512*512*8 и ранний эксперимент с нарисованными от руки faces. Центральная группа программ показывает структуру файловой системы faces. И наконец, в самом низу находится окно программы vismon, описанной в тексте.

http://cm.bell-labs.com/cm/cs/doc/85/face.ps.gz Copyright © 2003 Перевод Андрей С. Кухар.

Advertisement