Hurd-транслятор


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

До того как пытаться разобраться в том, что такое транслятор, необходимо познакомиться с тем, что из себя представляет обычная файловая система (ФС). Файловая система это набор построенных иерархически каталогов и файлов.

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

Несмотря на то, что эти объекты различаются между собой, у них всех есть общие свойства, например, у них всех есть владелец и группа, с которыми они ассоциированы, так же как и соответствующие права доступа (permissions). Вся эта информация хранится в специальном файле, обозначаемом термином — инод (inode). Это общее свойство объектов файловой системы: Каждый объект имеет один инод, связанный с ним, (жёсткие ссылки в этом отношении необычны, потому что у набора жёстких ссылок, связанных с файлом, один и тот же инод на всех). Иногда инод содержит дополнительные записи. Например, инод может содержать путь к файлу, на который указывает символьная ссылка.

Однако, эти общие свойства обычно не используются на прямую в программах из-за того, что для этого существуют абстрагированные программные интерфейсы. К любому иноду может быть получен доступ посредством вызова POSIX-функций, например функций read() и write(). Например, чтобы добавить поддержку новых типов объектов в ФС (например, новый тип ссылок) в обычное монолитное ядро unix, придётся переписать исходные коды по отдельности для каждого типа используемых файловых систем.

В системе Hurd всё иначе. Хотя в системе Hurd специальный сервер файловой системы может работать со специальными свойствами объектов стандартных типов, например, ссылками (с «быстрыми ссылками» (fast links) в файловой системе ext2, например), ядро системы Hurd имеет обобщённый интерфейс, который позволяет добавлять новые возможности в систему, не прибегая для этого к модифицированию исходных текстов системы.