Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пример 11.1: Пусть у нас есть ОП, БП (общая очередь) и многопроцессорная система.
Необходимо построить программу с использованием цепи пользователя. Будем считать, что времена выполнения в ЦП одной функции распределения, и поэтому можно использовать многоканальное устройство. Версия 1:
* Следующий блок задает ёмкость многоканального устройства
* Блок GATE проверяет устройство на занятость
Для чего в программе необходим блок PRIORITY? Рассмотрим ситуацию, когда в один и тот же момент времени должен появиться транзакт из блока GENERATE(назовём этот транзакт G-транзактом), и в тот же момент транзакт покидает блок ADVANCE(A-транзакт). Пусть в цепи пользователя находится хотя бы один транзакт. Будем считать что G-транзакт стоит в цепи текущих событий после A-транзакта. Пусть нет блока PRIORITY. A-транзакт освобождает одно место в устройстве и, проходя блок UNLINK, инициирует вывод 1-го транзакта из цепи пользователя(U-транзакт). U-транзакт поступает в цепь текущих событий и занимает там место после G-транзакта. В соответствии с расположением в цепи текущих событий интерпретатор продвигает G-транзакт, и он занимает одно место в устройстве 1. U-транзакт не может занять место в устройстве, следовательно наша модель будет работать не верно. Версия 2:
* Следующий блок подтверждает приоритет транзакта и перемещает * его в конец цепи текущих событий.
Блок BUFFER принудительно останавливает движение транзакта. Интерпретатор начинает с начала обрабатывать транзакты, находящиеся в цепи текущих событий. Связку:
можно заменить на
|