Операционная система UNIX. Руководство программиста

       

ТЕРМИНОЛОГИЯ


Прежде чем перейти к описанию средств блокировки сегментов, определим некоторые термины.



Сегмент
Последовательный участок файла. Операционная система UNIX не поддерживает структуру сегментов файла. Если это нужно, Вы должны делать это сами в программах, работающих с файлами.
Взаимодействующие процессы
  Процессы, которые работают совместно для достижения некоторой заранее определенной общей цели. Процессы, совместно использующие файлы, должны запрашивать разрешение на доступ к файлу перед его использованием. Права доступа должны быть правильно установлены, чтобы не дать возможности доступа к этим файлам из других процессов. Термин процесс далее неизменно будет применяться в отношении процессов такого рода.
Блокировка на чтение (разделяемая)
  Используется для того, чтобы установить ограниченный доступ к сегментам файла. Когда сегмент заблокирован на чтение, другие процессы также могут заблокировать на чтение весь сегмент или его часть. Никакие другие процессы, однако, не должны (к моменту блокировки на чтение) блокировать на запись пересекающийся с сегментом участок файла, и не смогут сделать это позже. Если процесс заблокировал сегмент на чтение, то можно считать, что никакие процессы не будут записывать или изменять этот сегмент в то же самое время. Тем не менее данный способ блокировки позволяет многим процессам читать данный сегмент одновременно. Такая блокировка необходима, например, когда организуется поиск в файле, а запросы на блокировку на запись (монопольную) могут привести к нежелательным осложнениям.
Блокировка на запись (монопольная)
  Используется для получения полного контроля над доступом к сегменту файла. Когда сегмент блокируется монопольно, никакие другие процессы не имеют возможности заблокировать на чтение или запись весь сегмент или его часть. Если процесс заблокировал сегмент на запись, можно считать, что никакие процессы не будут записывать или читать данный сегмент в это же самое время.
Слабая блокировка
  Данная форма блокировки сегментов не взаимодействует с подсистемой ввода-вывода [то есть с системными вызовами creat(2), open(2), read(2) и write(2)]. Контроль над сегментом устанавливается запросом на соответствующую блокировку, выдаваемым до операций ввода-вывода. Если соответствующие запросы делают все процессы, обрабатывающие файл, доступ к файлу будет управляться взаимодействием этих запросов. Слабая блокировка обеспечивает выполнение протокола блокировки сегментов для всех использующих ее процессов; она не означает дополнительных проверок доступности во время любого запроса на ввод-вывод.
Сильная блокировка
  Данная форма блокировки сегментов взаимодействует с подсистемой ввода-вывода. Контроль блокировки сегментов осуществляется системными вызовами creat(2), open(2), read(2) и write(2). Если сегмент заблокирован, то доступ к нему со стороны других процессов ограничивается в соответствии с типом блокировки. Управление блокировкой по-прежнему должно осуществляться путем явной выдачи соответствующего запроса на нее перед операциями ввода-вывода, однако перед каждой операцией ввода-вывода системой будут делаться дополнительные проверки, чтобы обеспечить выполнение протокола блокировки сегментов. Сильная блокировка обеспечивает дополнительный контроль очередности обращений к данным за счет некоторой потери эффективности.



Содержание раздела