Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРВ.docx
Скачиваний:
11
Добавлен:
25.12.2018
Размер:
434.95 Кб
Скачать

15. Бинарный семафор. Назначение, составляющие блока контроля (scb), машина состояний, пример использования. Особенности использования задания временных параметров на захват занятого семафора.

Семафоры применяются, когда необходимо:

а) управлять доступом к разделяемым ресурсам;

б) сигнализировать наступление события;

в) позволять двум задачам синхронизировать их деятельность.

Семафор – это ключ, которым должна овладеть задача, чтобы продолжить выполнение. Если семафор уже используется, запрашивающая задача приостанавливается, пока семафор не освободится.

Задача, желающая обладать семафором, выполняет операцию WAIT. Если семафор доступен (то есть его значение больше 0), значение уменьшается на единицу, а задача продолжает выполнение. Если значение семафора равно 0, задача, производящая операцию WAIT, помещается в список задач, ожидающих данный семафор. Задача освобождает семафор, производя операцию SIGNAL. Если нет задач, его ожидающих, значение семафора увеличивается на единицу. Если такие задачи есть, его значение не изменяется, а запускается одна из ожидающих задач.

Таблица SCB_SEMAPHORE_COLTROL_BLOCK содержит след. поля: SemID — идентификатор семафора(число); COUNTER — счетчик (0,1,..., N); TYPE — тип семафора; POINTER TO TASK WAITING LIST - указатель на список задач, ожидающих освобождения данного семафора (задачи из этого списка выбираются с пом. Планировщика (FIFO или приоритетное планирование).

16. Семафор-счетчик. Назначение, составляющие блока контроля (scb), машина состояний, пример использования. Особенности использования задания временных параметров на захват занятого семафора.

Семафоры применяются, когда необходимо:

а) управлять доступом к разделяемым ресурсам;

б) сигнализировать наступление события;

в) позволять двум задачам синхронизировать их деятельность.

Семафор – это ключ, которым должна овладеть задача, чтобы продолжить выполнение. Если семафор уже используется, запрашивающая задача приостанавливается, пока семафор не освободится.

Семафор-счетчик — это целочисленная переменная, имеющая несколько состояний. (0,1,2,3,..., N) 0 — семафор захвачен, остальные состояния — свободен. Число, отличное от нуля указывает, сколько задач захватило семафор. Если задач < N, семафор свободен.

Таблица SCB_SEMAPHORE_COLTROL_BLOCK содержит след. поля: SemID — идентификатор семафора(число); COUNTER — счетчик (0,1,..., N); TYPE — тип семафора; POINTER TO TASK WAITING LIST - указатель на список задач, ожидающих освобождения данного семафора (задачи из этого списка выбираются с пом. Планировщика (FIFO или приоритетное планирование).

Счетные семафоры применяются, когда ресурс может использоваться более чем одной задачей одновременно. Например, счетный семафор может быть использован в управлении пулом буферов. Предположим, что исходно пул содержит 10 буферов. Задача может получить буфер, запросив его у менеджера, вызывая BufReq(). Если буфер больше не нужен, задача может вернуть его обратно, вызывая BufRel().