Скачиваний:
90
Добавлен:
12.05.2015
Размер:
913.92 Кб
Скачать

16.4. Рекомендательная блокировка

Блокировка записей по стандарту Posix называется рекомендательной. Ядро хранит информацию обо всех заблокированных различными процессами файлах, но оно не предотвращает запись в заблокированный на чтение файл. Ядро также не предотвращает чтение из файла, заблокированного на запись. Процессы могут игнорировать рекомендательную блокировку (advisory lock) и действовать по своему усмотрению, если у них имеются соответствующие разрешения на чтение и запись.

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

16.5. Обязательная блокировка

Некоторые системы (в том числе и ОС Linux) предоставляют возможность установки блокировки другого типа – обязательной (mandatory lock). В этом случае ядро проверяет все вызовы функций readиwrite, блокируя их при необходимости. Для предоставления этой возможности при монтировании соответствующей файловой системы в ОС Linux необходимо указать опциюmandкомандыmount. Если для дескриптора установлен флагO_NONBLOCK(раздел 3.3), вызовreadилиwrite, конфликтующий с установленной блокировкой, вернет ошибкуEAGAIN. Если флагO_NONBLOCKне установлен, выполнение процесса в такой ситуации будет отложено до тех пор, пока блокировка не будет снята.

Для установки обязательной блокировки какого-либо файла требуется выполнение двух условий:

  • бит group-execute(раздел4.5) должен быть снят;

  • бит set-group-IDдолжен быть установлен.

Обратите внимание, что установка бита set-user-IDбез установки битаuser-executeсмысла не имеет; это справедливо и для битовset-group-IDиgroup-execute. Таким образом, добавление возможности обязательной блокировки никак не повлияло на работу используемого программного обеспечения. Не потребовалось также добавлять новые системные вызовы.

Пример. На первый взгляд, использование обязательнойблокировки должно решить проблему

16.6. Приоритет чтения и записи Выводы по главе 16

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

Упражнения по главе 16 Глава 17. System V ipc

17.1. Введение

Из имеющихся типов IPC следующие три могут быть отнесены к System V IPC, то есть к методам взаимодействия процессов, соответствующим стандарту System V:

  • очереди сообщений System V;

  • семафоры System V;

  • разделяемая память System V.

Термин “System V IPC” говорит о происхождении этих средств: впервые они появились в Unix System V. У них много общего: схожи функции, с помощью которых организуется доступ к объектам; также схожи формы хранения информации в ядре. В этой главе описываются общие для трех типов IPC черты.

Информация о функциях сведена в табл. 16.1.

Таблица 16.1

Функции System V IPC

Виды IPC

Очереди сообщений

Семафоры

Разделяемая память

Заголовочный файл

<sys/msg.h>

<sys/sem.h>

<sys/shm.h>

Создание или открытие

msgget

semget

shmget

Операции управления

msgctl

semctl

shmctl

Операции IPC

msgsnd, msgrcv

semop

shmat, shmdt

Соседние файлы в папке Chapter.4