This version of the page http://www.dlab.kiev.ua/main/30-semafory.html (0.0.0.0) stored by archive.org.ua. It represents a snapshot of the page as of 2010-01-01. The original page over time could change.
Семафоры » Международный научно-учебный центр
Регистрация!       Забыли пароль?       Логин:      Пароль:    
Главная       Реклама  Расширенный поиск по сайту
Разделы
» Главная » Семинары » Новости » Учебные курсы » Дист. уроки » Абитуриенту » Конференции » Научная деятельность » Публикации центра » Информационные технологии
Популярные статьи
» Семафоры
Автор: admin | Просмотров: 1503 | Категория: Главная | 14 сентября 2008

Назначение рассматриваемого объекта межпроцессорного взаимодействия (IPC) соответствует его названию: семафоры используются для синхронизации доступа к разделяемым (критическим) ресурсам. Под критическими ресурсами понимаются данные, которые используются разными процессами, например, данные некоторого файла, необходимые для выполнения разных программ. К критическому ресурсу в данный момент времени может иметь доступ только один процесс, для других процессов доступ должен быть закрыт. Синхронизацию доступа разных процессов к критическим ресурсам по определенной схеме осуществляют семафоры. Процесс может сам создать семафор, включить его в состояние запрета (0) и захватить ресурс. По истечении определенного интервала времени процесс освобождает ресурс для других процессов и выключает семафор, что соответствует его разрешающему состоянию.

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

Перед началом работы с файлом процесс должен проверить состояние триггера, если он в нулевом состоянии (состояние запрета), процесс идет, если триггер в единичном состоянии (состояние разрешения), процесс записывает данные в файл, но на время записи триггер устанавливает в состояние 0 (запрет). После выполнения операции записи триггер нужно перевести в единичное состояние (разрешения).

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

В более сложном случае семафор представляет собой не триггер, а многоразрядный счетчик или группу счетчиков, объединенных общей управляющей структурой, например, дескриптором, правами доступа и т.д. Состояние счетчика характеризуется любым положительным числом, а не только значениями 0 и 1.

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

struct ipc-perm sem-perm описание прав доступа
struct sem *sem-base указатель на первый элемент массива семафоров
ushort sem-nsems число семафоров в группе
time-t sem-otime время последней операции
time-t sem-ctime время последнего изменения

Кроме того, для каждого семафора имеется внутренняя структура данных sem, которая содержит следующие данные:
ushort semval значение семафора

pid-t sempid идентификатор процесса, выполнившую последнюю операцию над светофором;
ushort semncnt число процессов, ожидающих увеличения значения семафора
ushort semzcnt число процессов, ожидающих обнуления семафора.

Эта информация позволяет ядру производить операции над семафором, приводящие к выполнению трех действий:

• Освободить ресурс.
• Ждать.
• Захватить ресурс.

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

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

Unix допускает три вида операций над семафором:

• Если величина semop положительна, то текущее значение семафора увеличивается на эту величину. Ресурс, контролируемый данным семафором, освобождается.
• Если значение semop равно нулю – процесс, выполнивший такой вызов, будет переведен в ожидание до тех пор, пока не освободится ресурс, т.е. значение семафора не станет равным нулю.
• Если величина semop отрицательна, процесс, вызвавший выполнение этой операции, ожидает, когда значение семафора не станет большим или равным абсолютной величине semop. Затем абсолютная величина semop вычитается из значения семафора. Эта операция используется при захвате ресурса.
Другие новости по теме:
  • Разделяемая память UNIX
  • Ядро операционной системы UNIX
  • Общие сведения о процессах UNIX
  • UNIX сигналы
  • Жизненный путь процесса
  •     
    • 85
    • 1
    • 2
    • 3
    • 4
    • 5
     (голосов: 1)

    Архив новостей
    Ноябрь 2008 (11)
    Сентябрь 2008 (28)
    Август 2008 (15)
    Июль 2008 (12)
    Июнь 2008 (8)
    Май 2008 (9)
    Апрель 2008 (11)
    Март 2008 (10)
    Февраль 2008 (7)
    Опрос
    Оцените работу центра
    Лучший в своём роде
    Устаревшие данные
    Устраивает ... но ...
    Встречал и получше

    Календарь
    «    Январь 2010    »
    ПнВтСрЧтПтСбВс
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Copyright 1998–2008 Dlab.kiev.ua духовка Сделать стартовой  »  Добавить в избранное  »  RSS 2.0  »   »  Обратная связь