Студопедия
Главная страница | Контакты | Случайная страница

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

Аппаратная поддержка взаимоисключений

Читайте также:
  1. Аппаратная поддержка взаимоисключений
  2. Аппаратная поддержка языка
  3. Аппаратная реализация передачи данных
  4. В каждом Роду должно быть взаимопонимание и взаимоподдержка.
  5. Визовая поддержка иностранным гражданам
  6. Глава IV.1. Государственная поддержка инновационной деятельности
  7. Государственная поддержка малого бизнеса.
  8. Государственная поддержка прямых инвестиций.
  9. Государственная поддержка семьи в Российской Федерации

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

Test and set

Int test_and_set (int *target) {

Int tmp=*target;

*target=1;

Return tmp;

}

Shared int lock = 0;

While (some condition) {

While (test_and_set(*lock));

Critical section

Lock=0;

Remainder section

}

К сожалению даже в таком виде полученный алгоритм не удовлетворяет условию ограниченного ожидания алгоритмов.

Void swap (int *a, int *b) {

Int tmp = *a;

*a = *b;

*b = tmp;

}

 

Shared int lock = 0;

Int key;

While (some condition) {

Key=1;

Do swap (&lock,&key);

While(key);

Critical section

Lock=0;

Remainder section

}

Семафоры

Семафор представляет собой целую переменную, принимающую целые значений, доступ в любой момент к которой, за искл. инициализации, P и V.

Операция P над семафором S.

Пока s==0 процесс блокируется

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

Решение задачи производитель-потребитель с помощью семафоров.

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

Производитель:

While(1) {

Produce_item();

Put_item;

}

Потребитель:

While(1) {

Take_item;

Consume_item;

}

Если буфер заполнен, то производитель должен ждать, пока в нем не появится место, чтобы положить туда новую порцию информации. Если буфер пуст, то потребитель должен дождаться нового сообщения. Возьмем три семафора empty, full, mutex.

Empty будем использовать для гарантии того, что потребитель будет ждать, пока в буфере появится информация. Full для организации ожидания производителя при заполненном буфере. Mutex для взаимоисключения на критических участках, которыми является put и get.

Семафоры использовались здесь для достижения двух целей: организация взаимоисключений на критическом участке и взаимоорганизация скорости выполнения процессов.

Лекция 9 (22.11.2012)

Мониторы, Критические секции

Лекция 10 (29.11.2012)




Дата добавления: 2014-12-19; просмотров: 142 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав