Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Семафорные операции






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

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

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

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

 

P: xor al, al

Check: xchg al, semaphore

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

Критическая секция
Use: …

V: mov semaphore, 1

Разблокирование процессов, ожидающих светофора

 

Если семафор сброшен, вместо повторения цикла ожидания текущий процесс переводится в заблокированное состояние, а ЦП начинает выполнять выбранный процесс, находящийся в состоянии готовности. Аналогично в операторе V после установки семафора в 1 осуществляется пересылка процессов, которые были заблокированы из-за недоступности разделенного ресурса, из списка заблокированных процессов в список процессов, находящихся в состоянии готовности. Первый из этих процессов, который возобновляет выполнение, сможет войти в свою критическую секцию.

 

Рис. 7.6. Синхронизация процессов А и В

 

Рассмотренный метод не только экономит время ЦП, но может применяться для синхронизации двух процессов или для передачи сообщения от одного процесса другому. На рис. 7.6 процессы А и В должны взаимодействовать в определенных точках. Они могут выполняться в режиме с разделением времени до тех пор, пока процесс В не достигает точки РВ1, где он должен ожидать сообщения или обращаться к результатам, полученным процессом А. После точки РА1 оба процесса вновь выполняются в режиме разделения времени до достижения точки РА2. В этой точке процесс А должен получать сообщение от процесса В или синхронизироваться с ним.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.005 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал