Если процесс UNIX удаляет файл, открытый другим процессом (или тем же процессом повторно), ядро просто помечает такой файл как удаленный и убирает его вхождение в родительском каталоге.
Хотя другие процессы и не могут больше открыть такой файл, процессы, открывшие его, могут продолжать им пользоваться.
Также может иметь смысл заглянуть на сайт samosvalanapa.ru, ведь именно там можно узнать много нового на тему http://samosvalanapa.ru/. Тема купить песок может показаться на первый взгляд незначительной и даже не тематичной. Но стоит посетить сайт samosvalanapa.ru, и тема купить песок начинает проявлять себя с неожиданной стороны и вызывает всё больший интерес. Дело в том, что тема купить песок очень подробно представлена на сайте samosvalanapa.ru. Трудно найти более детальное освещение темы купить песок чем это сделано на сайте samosvalanapa.ru. Спасибо сайту samosvalanapa.ru за такое доскональное преподнесение темы купить песок.
Только после закрытия файла последним из процессов ядро системы физически удаляет такой файл. Описанное средство применяется некоторыми утилитами для временных файлов.
Для системы NFS это представляет определенную проблему, так как сервер не обладает информацией об открытых файлах. Для того чтобы обойти создавшуюся трудность, необходимо изменить код клиента NFS, потому что именно клиент не знает об открытых файлах. Когда клиент обнаруживает попытку удаления открытого файла, он автоматически подменяет вызванную операцию на RENAME, давая файлу новое имя и место на диске. Обычно клиент использует необычные и длинные имена, которые скорее всего не будут конфликтовать с уже существующими. После закрытия файла последним процессом клиент создает запрос REMOVE для его удаления.
Описанная методика хороша, если процесс, открывающий файл, выполняется на той же машине, что и удаляющий его. Однако не существует защиты против удаления файла процессом другого клиента (или сервера). Если удаление произойдет, пользователь получит неожиданное сообщение об ошибке («устаревший дескриптор файла») при последующих попытках чтения или записи в этот файл. Еще одна неувязка может возникнуть в случае сбоя в работе клиента, произошедшего после операции RENAME и до REMOVE: на сервере останется лишний файл («мусор»),
Чтение и запись
В системах UNIX системные вызовы read и write блокируют vnode файла перед началом ввода-вывода. Такой подход делает операции чтения и записи неделимыми. Если по отношению к одному и тому же файлу одновременно будет вызвана функция write, ядро выполнит их последовательно. Вторая операция чтения начнет работу только после завершения первой. Точно так же система гарантирует отсутствие изменений в файле при его чтении. Обрабатывает блокировку локальный зависимый от файловой системы код в контексте одной операции vop_rdwr.
В случае файла NFS клиентский код при одновременной попытке доступа к файлу двух процессов на локальной машине делает эти операции последовательными. Однако если это окажутся процессы, запущенные на разных машинах, они будут пытаться получить доступ к серверу независимо друг от друга. Операция read или write может потребовать нескольких запросов RPC (максимальный размер сообщения RPC равен 8 192 байт), при том что сервер, не хранящий информацию о состояниях, не поддерживает блокировку между этими запросами.
Система NFS не предлагает защиты в случае совмещения запросов ввода-вывода.
Взаимодействующие процессы могут использовать для защиты файлов или их частей протокол сетевого администратора блокировки (NLM). Этот протокол предлагает только рекомендательную блокировку. Отсюда следует, что процесс всегда может обойти ее и получить доступ к файлу, если он этого захочет.
Опубликовал katy
July 12 2015 06:56:26 ·
0 Комментариев ·
3727 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.