русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Операция «Проверка и установка».


Дата добавления: 2013-12-23; просмотров: 1219; Нарушение авторских прав


Операция «Проверка и установка» является одним из аппаратных средств решения задачи критического интервала. Данная операция реализована на многих компьютерах. Машинная операция «Проверка и установка» значительно упрощает решение проблемы критического участка посредством блокировки памяти. К операции «Проверка и установка» обращаются с двумя параметрами: Локальный и Общий. Операция берет значение параметра Общийи присваивает его переменной Локальный, а затем устанавливает в переменной Общий значение 1. Главное свойство этой операции – ее неделимость. Когда процесс выполняет операцию «проверка и установка», никаких действий не может произойти между ее началом и концом.

Листинг 5. Взаимное исключение с помощью операции «Проверка и Установка».

Var

ЛОКАЛЬНЫЙ_1, ЛОКАЛЬНЫЙ_2, ОБЩИЙ: integer;

Begin

ОБЩИЙ := 0;

parbegin

ПРОЦЕСС 1:

begin

while (true) do

begin

ЛОКАЛЬНЫЙ_1 := 1;

while (ЛОКАЛЬНЫЙ1=1) do

begin

проверка и установка (ЛОКАЛЬНЫЙ_1, ОБЩИЙ)

end;

критический участок 1;

ОБЩИЙ :=0;

оставшаяся часть процесса 1

end

end;

ПРОЦЕСС 2:

begin

while (true) do

begin

ЛОКАЛЬНЫЙ_2 := 1;

while (ЛОКАЛЬНЫЙ2=1) do

begin

проверка и установка (ЛОКАЛЬНЫЙ2, ОБЩИЙ)

end;

критический участок 2;

ОБЩИЙ :=0;

оставшаяся часть процесса 2

end

end;

ParEnd

end

Переменная Общий разделяется между процессами, которые подлежат синхронизации по отношению к некоторому критическому ресурсу. У каждого процесса есть своя собственная переменная Локальный. Если Общий = 1, это значит, что какой-то процесс находится в своем критическом участке. Начальное значение переменной Общий равно 0. В Листинге 5 приведено решение проблемы взаимного исключения для двух процессов, использующее операцию «Проверка и установка». В этом решении предполагается, что в машине предусмотрена блокировка памяти, т. е. операция Общий := 0 неделима.



Данная операция была реализована на многих машинах. Так, например в IBM 360 (370) имелась команда специальная TS (test and set) для использования операции «Проверка и установка». TS – это двухадресная команда, действие которой заключается в том, что процессор присваивает значение второго операнда первому, после чего второму операнду присваивается значение, равное единице. Команда TS является неделимой операцией, то есть между ее началом и концом не могут выполняться никакие другие команды.

Чтобы использовать команду TS для решения проблемы критического интервала, свяжем с ней переменную common, которая будет общей для всех процессов, использующих некоторый критический ресурс. Данная переменная будет принимать единичное значение, если какой-либо из взаимодействующих процессов находится в своем критическом интервале. С каждым процессом связана своя локальная переменная, которая принимает значение, равное единице, если данный процесс хочет войти в свой критический интервал. Операция TS будет присваивать значение common локальной переменной и устанавливать common в единицу. Программа решения проблемы критического интервала на примере двух параллельных процессов приведена в листинге 6.

Предположим, что первым захочет войти в свой критический интервал процесс ПР1. В этом случае значение locall сначала установится в единицу, а после цикла проверки с помощью команды TS(locall, common) – в ноль. При этом значение common станет равным единице. Процесс ПР1 войдет в свой критический интервал. После выполнения этого критического интервала common примет значение, равное нулю, что даст возможность второму процессу ПР2 войти в свой критический интервал.



<== предыдущая лекция | следующая лекция ==>
Листинг 4. Алгоритм Деккера. | Листинг 6. Взаимное исключение с помощью операции «Проверка и Установка».


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.