Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Олифер. Сетевые операционные системы.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
16.5 Mб
Скачать

Семантика разделения файлов

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

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

Семантика Unix может поддерживаться и в распределенных системах, но только, если в ней имеется лишь один файловый сервер и клиенты не кэшируют файлы. Для этого все операции чтения и записи направляются на файловый сервер, который обрабатывает их строго последовательно. На практике, однако, производительность распределенной системы, в которой все запросы к файлам идут на один сервер, часто оказывается неудовлетворительной. Эта проблема иногда решается за счет разрешения клиентам обрабатывать локальные копии часто используемых файлов в своих личных кэшах. Если клиент сделает локальную копию файла в своем локальном кэше и начнет ее модифицировать, а вскоре после этого другой клиент прочитает этот файл с сервера, то он получит неверную копию файла. Одним из способов устранения этого недостатка является немедленный возврат всех изменений в кэшированном файле на сервер. Такой подход хотя и концептуально прост, но не слишком эффективен. Распределенные файловые системы обычно ис­пользуют более свободную семантику разделения файлов.

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

  • Семантика неизменяемых файлов. Следующий подход к разделению файлов заключается в том, чтобы сделать все файлы неизменяемыми. Тогда файл нельзя открыть для записи, а можно выполнять только операции create (создать) и read (читать). В результате для изменения файла остается един­ственная возможность — создать полностью новый файл и поместить его в каталог под новым именем. Следовательно, хотя файл и нельзя модифици­ровать, его можно заменить (автоматически) новым файлом. Для неизме­няемых файлов намного проще осуществить кэширование файла и его репликацию (тиражирование), так как исключаются проблемы, связанные с обновлением всех копий файла при его изменении.

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

  • Транзакционная семантика. Четвертый способ работы с разделяемыми файлами в распределенных системах — это использование механизма неделимых транзакций, описание которого можно найти в главе 8.