Семантика совместного использования файлов

Когда с одним и тем же файлом работают вместе два и более пользователя, то во избежание проблем необходимо точно определять семантику, используемую при чтении и записи файла. В однопроцессорных системах семантические правила устанавливают, что следование системного вызова read за системным вызовом write приводит к тому, что read возвращает только что записанное значение (рис.
8.34, а). По аналогии с этим, если системный вызов read следует сразу же за двумя последовательными системными вызовами write, то считывается значение, записанное последним системным вызовом write. Таким образом, все системные вызовы упорядочиваются системой в единую последовательность и все процессоры видят один и тот же порядок. Мы будем ссылаться на такую модель как на последовательно непротиворечивую (sequential consistency).

В распределенной системе последовательная непротиворечивость легко достигается при наличии всего лишь одного файлового сервера и отсутствии кэширования файлов у клиентов. Все системные вызовы read и write поступают непосредственно на файловый сервер, который обрабатывает их в строгой последовательности.

Тем не менее на практике производительность распределенной системы, в которой все файловые запросы должны выполняться на единственном сервере, имеет зачастую весьма низкие показатели. Довольно часто эта проблема решается за счет разрешения клиентам работать с локальными копиями наиболее часто используемых файлов, содержащимися в их собственной кэш-памяти. Но если клиент 1 произведет локальные изменения хранящегося в кэше файла, а вскоре после этого клиент 2 прочитает файл с сервера, то второй клиент получит устаревшую версию файла (рис. 8.34, б).

Рис. 8.34. а — последовательная непротиворечивость; б — в распределенной системе с кэшированием при чтении файла может быть возвращено устаревшее значение


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

Альтернативное решение заключается в смягчении семантики совместного использования файлов. Вместо требования к read видеть эффект всех предыдущих вызовов write можно ввести новое правило: «Изменения, вносимые в открытый файл, сначала видны только производящему их процессу. Другие процессы видят эти изменения только после закрытия файла». Следование этому правилу не изменит случившееся на рис. 8.34, б, но теперь то, как ведут себя процессы (процесс B получает исходную версию файла), будет узаконено. Когда клиент 1 закрывает файл, он посылает на сервер измененную копию файла, поэтому при последующих системных вызовах read будут, как и требовалось, получены новые версии файла. По сути, это модель загрузки-выгрузки, показанная на рис. 8.32. Данное семантическое правило нашло широкое применение и известно как сеансовая семантика (session semantics).

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

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

8.3.5.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Семантика совместного использования файлов:

  1. Раздел III Использование достижений криминалистической психологии при собирании, оценке, использовании личностной информации
  2. Статья 231. Незаконный сбор с целью использования или использование сведений, составляющих коммерческую или банковскую тайну
  3. 12.3.3. Совместное путешествие
  4. ДЕЯТЕЛЬНОСТЬ СОВМЕСТНАЯ
  5. 3. Проекты совместного внедрения
  6. О недостатках совместного сна
  7. Статья 1130. Договор о совместной деятельности
  8. § 3. Право общей совместной собственности
  9. Статья 1131. Форма и условия договора о совместной деятельности
  10. § 3. Право общей совместной собственности
  11. Раздел XV. Обязательства из совместной деятельности
  12. Статья 368. Право общей совместной собственности
  13. Глава 77 - Гражданского кодекса Совместная деятельность
  14. Параграф 1. Общие положения о совместной деятельности
  15. 3. Договор о совместной деятельности
  16. 1. Общая совместная собственность супругов
  17. 1. Понятие права общей совместной собственности