Э. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы) (1162619), страница 57
Текст из файла (страница 57)
Такой подход соответствует реализацииединого графа именования для всех ресурсов распределенной системы.Существует множество различных способов организации пространства имен.Как мы говорили, большая часть пространств имен имеют лишь один корневойузел. Во многих случаях пространства имен имеют вдобавок жесткую иерархию,то есть граф именования организован в виде дерева. Это означает, что каждыйузел, за исключением корневого, имеет лишь одно входящее в него ребро.
Корневой узел входящих ребер не имеет. Соответственно, каждый узел имеет лишь одно соответствующее ему абсолютное имя.Граф именования, изображенный на рис. 4.1, является примером направленного ациклического графа {directed acyclic graph). При подобной организации узелможет иметь более одного входящего ребра, но граф не может иметь циклов. Существуют также пространства имен, не имеющие подобного ограничения.Чтобы приблизить наши рассуждения к практике, рассмотрим способ именования файлов в стандартной файловой системе UNIX.
В графе именования UNIXнаправляющий узел соответствует файловому каталогу, а листовой узел — файлу. Существует единственный корневой каталог, соответствующий в графе именования корневому узлу. Реализация графа именования является составной частью файловой системы. Эта реализация состоит из непрерывного набора блоковлогического диска, обычно поделенных на загрузочный блок, суперблок, наборыиндексных узлов и блоки файловых данных [117, 319, 450]. Эта структура приведена на рис. 4.2.СуперблокVБлоки файловых данныхчуVЗагрузочныйблокV нд ек(:ньюБлок дискау'ЗЛ ыРис.
4 . 2 . Обобщенная организация реализации файловой системы UNIXна логическом диске в виде непрерывного набора дисковых блоковЗагрузочный блок — это специальный блок данных и инструкций, которыеавтоматически загружаются в оперативную память при загрузке системы. Загрузочный блок используется при загрузке оперативной системы в основную память.Суперблок содержит информацию обо всей файловой системе — это размернезанятых дисковых блоков, неиспользованные индексные узлы и т. д.
Индексные узлы нумеруются, начиная с нуля. Нуль зарезервирован для индексного узла, соответствующего корневому каталогу.220Глава 4. ИменованиеКаждый индексный узел содержит информацию о данных расположенного надиске соответствующего файла. Кроме того, индексный узел содержит информацию о своем владельце, времени создания и последней модификации, защите иподобных же вещах. Соответственно, имея номер индексного узла, можно получить доступ к соответствующему файлу. Каждый из каталогов также реализованв виде файла. Это относится и к корневому каталогу, который обеспечивает отображение между именами файлов и индексами индексных узлов. То есть индексиндексного узла соответствует идентификатору узла в графе именования.4.1.2. Разрешение именПространства имен предоставляют удобный способ сохранения и извлечения информации о сущностях по их именам.
В общем виде, зная имя пути, можно извлечь всю информацию, которая хранится в узле, соответствующем этому имени.Процесс поиска информации называется разрешением имени {пате resolution).Чтобы понять, как происходит разрешение имени, рассмотрим путь N:<label-1,label-2, ..., Iabel-n>. Разрешение этого имени начинается с узла N графа именования, при этом в направляющей таблице ищется имя label-1 и возвращается идентификатор узла, на который указывает это имя. Разрешение продолжается поиском в направляющей таблице указанного узла имени 1аЬе1-2 и т. д. Предполагая,что названный путь действительно существует, разрешение завершается при обнаружении последнего узла, соответствующего имени label-n, возвращением содержимого этого узла.При поиске имен возвращается идентификатор узла, с которого продолжается процесс разрешения.
В частности, необходимо, получить доступ к направляющей таблице найденного узла. Рассмотрим снова файловую систему UNIX. Какуже говорилось, идентификатором узла является индекс (номер) индексного узла.Доступ к направляющей таблице означает возможность сначала прочитать индексный узел, чтобы определить, где на диске находятся данные, а затем прочитать блоки данных.Механизм свертыванияРазрешение имен может происходить только в том случае, если мы знаем, откудаи как начать. В нашем примере начальный узел задан, причем предполагается,что мы знаем, как получить доступ к его направляющей таблице.
Знание того, откуда и как начинать разрешение имен, называется механизмом свертывания {closuremechanism). По существу, механизм свертывания относится к выбору начальногоузла пространства имен, с которого должно начинаться разрешение имени [367].О функционировании механизмов свертывания иногда довольно трудно судить.Это происходит из-за их частично неявной реализации и значительного отличиядруг от друга.Так, например, разрешение имен в графе именования файловой системы UNIXпредполагает знание того факта, что индексный узел корневого каталога являетсяпервым индексным узлом логического иска, на котором находится рассматриваемая файловая система.
Его истинное смещение в байтах вычисляется из зна-4.1. Именованные сущности221четш других полей суперблока, а также внутренней информации операционнойсистемы об организации суперблока.Чтобы прояснить этот момент, рассмотрим строковое представление именифайла /home/steen/mbox. Чтобы разрешить это имя, необходимо иметь доступк направляющей таблице корневого узла соответствующего графа именования.Будучи корневым узлом, этот узел не может быть разрешен, если только он нереализован в виде другого узла иного графа именования, скажем G. Но в этомслучае необходимо иметь прямой доступ к корневому узлу G.
Из этого следует,что разрешение имени файла требует предварительной реализации некоторыхмеханизмов, которые начнут процесс разрешения.Абсолютно другой пример — использование строки "0031204430784". Большинство людей не поймут, что делать с этими цифрами. Исключением будутлишь те, кому скажут, что эта цепочка цифр — номер телефона. Подобная информация необходима для того, чтобы начать разрешение имени, в частности, длянабора номера. После этого телефонная система сделает то, чего от нее требуют.В качестве последнего примера рассмотрим использование в распределенныхсистемах глобальных и локальных имен. Типичный пример локального имени —переменная среды.
Так, в UNIX-системах переменная с именем НОМЕ используется для ссылки на домашний каталог пользователя. Каждый пользователь имеетсвою копию этой переменной, инрщиализируемую глобальным общесистемнымименем, соответствующим домашнему каталогу пользователя. Механизм свертывания, ассоциированный с переменными среды, гарантирует, что имя этойпеременной будет правильно разрешено путем поиска в направляющей таблицепользователя.Организация ссылок и монтированиеС разрешением имен связано использование псевдопимов {aliases).
Псевдоним —это другое имя той же сущности. Переменные среды — пример псевдонимов. В понятиях графа именования существует два основных способа реализации псевдонимов. Первый способ — просто предоставление нескольких абсолютных путейк каждому узлу графа именования. Подобный подход иллюстрирует рис. 4.1, накотором на узел п5 можно сослаться с использованием двух различных путей.В терминологии UNIX оба пути, /keys и /home/steen/keys, называются жесткимиссылками (hard links) к узлу п5.Другой подход состоит в том, чтобы представить сущность в виде листовогоузла, скажем N, но вместо сохранения в нем адреса или состояния этой сущности, сохранить в нем ее абсолютный путь. Когда первое разрешение абсолютногопути приведет к узлу N, разрешение имени вернет путь, сохраненный в N, послечего мы продолжим разрешение нового пути.
Этот принцип соответствует использованию символических ссылок (symbolic links) в файловых системах UNIXи его иллюстрирует рис. 4.3. В этом случае имя пути /home/steen/keys, ссылающееся на узел, содержащий абсолютное имя пути /keys, является символическойссылкой на узел п5.Описанное разрешение имени полностью относится к одиночным пространствам имен. Однако разрешение имен может также использоваться и при про-222Глава 4. Именованиезрачном слиянии нескольких пространств имен. Давайте сначала рассмотриммонтируемые файловые системы.
В понятиях нашей модели именования монтируемая файловая система — это система, в которой направляющий узел хранитидентификатор направляющего узла другого пространства имен, называемоговнешним пространством имен. Направляющий узел, содержащий такой идентификатор узла, называется моптаэююй точкой {mount point). Соответственно,направляющий узел во внешнем пространстве имен называется точкой монтирования {mounting point). Обычно точка монтирования является корнем пространства имен.
В ходе разрешения имен отыскивается точка монтирования, и процессразрешения продолжается поиском в ее направляющей таблице.Данные, хранящиесяв узле п1п2: "eike"пЗ: "max"п4: "steen"steenДанные, хранящиесяп4 Iв узле п6Листовой узелНаправляющийQ["j.twmrcQУ»Жх\1^®У^ОПкеу£;)@nhome/steen/keys"Рис. 4 . 3 . Концепция символической ссылки в графе именованияПринципы монтирования могут быть обобщены и на другие пространстваимен. В частности, все, что необходимо для использования направляюш.его узлав качестве монтажной точки, — это чтобы в ней хранилась вся информация, необходимая для идентификации монтирующей точки чужого пространства имени доступа к ней.