Разделы:
Best links:
бесшовные и недорогие натяжные потолки http://mo-potolok.ru/
--------------------------
Семафорные операции
test al,al
jz Check
|
…
…
V: mov semaphore,1
Если semaphore = 1 при выполнении команды xchg, он сбрасывается, а в alоказывается 1. Даже если система переключает процессы после команды xchg, новый процесс не сможет войти в свою критическую секцию, так как semaphore уже сброшен. Такое решение стало возможным благодаря загрузке и установке операнда одной командой (именно командой xchg) и может быть применено к любому числу процессов.
Как видно из приведенного примера, оператор Р легко реализуется командами xor, xchg, test и jz, а оператор V — командой mov. Однако, при такой реализации, когда один процесс находится в критической секции, другие процессы, претендующие на тот же самый ресурс, будут простаивать в циклах ожидания операторов Р, что приводит к значительным потерям времени.
Для лучшего использования времени ЦП операторы Р и V следует модифицировать следующим образом:
P: xor al,al
xchg al,semaphore
test al,al
jnz Use
|
…
…
jmp P
|
…
…
V: mov semaphore,1
|
…
…
Если семафор сброшен, вместо повторения цикла ожидания текущий процесс переводится в заблокированное состояние, а ЦП начинает выполнять выбранный процесс, находящийся в состоянии готовности. Аналогично в операторе V после установки семафора в 1 осуществляется пересылка процессов, которые были заблокированы из-за недоступности разделенного ресурса, из списка заблокированных процессов в список процессов, находящихся в состоянии готовности. Первый из этих процессов, который возобновляет выполнение, сможет войти в свою критическую секцию.
предыдущаяследующая© Copyright, 2009.
Для связи: info@dgs-srl.com.