рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Семафорные примитивы Дейкстры

Семафорные примитивы Дейкстры - раздел Информатика, Программное обеспечение можно разделить на две группы: системное программное обеспечение СПО и прикладное программное обеспечение ППО Понятие Семафорных Механизмов Было Введено Дейкстрой. Семафор — Пе­ременная С...

Понятие семафорных механизмов было введено Дейкстрой. Семафор — пе­ременная специального типа, которая доступна параллельным процессам для проведения над ней только двух операций: «закрытия» и «открытия», названных соответственно Р- и V-операциями. Эти операции являются примитивами отно­сительно семафора, который указывается в качестве параметра операций. Здесь семафор выполняет роль вспомогательного критического ресурса, так как опера­ции Р и V неделимы при своем выполнении и взаимно исключают друг друга.

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

Основным достоинством использования семафорных операций является отсут­ствие состояния «активного ожидания», что может существенно повысить эф­фективность работы мультипрограммной вычислительной системы.

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

Обобщенный смысл примитива P(S) состоит в проверке текущего значения се­мафора S, и если оно не меньше нуля, то осуществляется переход к следующей за примитивом операции. В противном случае процесс снимается на некоторое время с выполнения и переводится в состояние «пассивного ожидания». Нахо­дясь в списке заблокированных, ожидающий процесс не проверяет семафор не­прерывно, как в случае активного ожидания. Вместо него на процессоре может исполняться другой процесс, который реально совершает полезную работу.

Операция V(S) связана с увеличением значения семафора на единицу и перево­дом одного или нескольких процессов в состояние готовности к центральному процессору.

Отметим еще раз, что операции Р и V выполняются операционной системой в ответ на запрос, выданный некоторым процессом и содержащий имя семафора в качестве параметра.

Рассмотрим первый вариант алгоритма работы семафорных операций, который представлен в листинге 6.7.

Допустимыми значениями семафоров являются только целые числа. Двоичным семафором будем называть семафор, максимально возможное значение которого будет равно единице. В противном случае семафоры называют N-ичными. Есть реализации, в которых семафорные переменные не могут быть отрицательными, а есть и такие, где отрицательное значение указывает на длину очереди процес­сов, стоящих в состоянии ожидания открытия семафора.

 

Листинг 6.7. Вариант реализации семафорных примитивов

P(S): S:=S-1;

if S<0 then { остановить процесс и поместить его в очередь ожидания к семафору S }

V(S): if S<0 then {поместить один из ожидающих процессов очереди семафора S в очередь готовности};

S:=S+1

 

Заметим, что для работы с семафорными переменными необходимо еще иметь операцию инициализации самого семафора, то есть операцию задания ему на­чального значения. Обычно эту операцию называют InitSem; как правило, она имеет два параметра — имя семафорной переменной и ее начальное значение; следовательно, обращение к ней имеет вид: InitSem (Имя_семафора, Начальное_значение_семафора);

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

 

Листинг 6.8. Взаимное исключение с помощью семафорных операций

var S: semafor;

begin InitSem (S, l);

parbegin

ПР1: while true do

begin

P(S);

CS1; { Критический интервал процесса ПР1 }

V(S)

end

and

ПР2: while true do

begin

P(S);

CS2; { Критический интервал процесса ПР2 }

V(S)

end

parend

end.

 

Семафор S имеет начальное значение, равное 1. Если процессы ПР1 и ПР2 попы­таются одновременно выполнить примитив P(S), то это удастся успешно сделать только одному из них. Предположим, это сделал процесс ПР2, тогда он закрыва­ет семафор S, после чего выполняется его критический интервал. Процесс ПР1 в рассматриваемой ситуации будет заблокирован на семафоре S. Тем самым будет гарантировано взаимное исключение.

После выполнения примитива V(S) процессом ПР2 семафор S открывается, ука­зывая на возможность захвата каким-либо процессом освободившегося критиче­ского ресурса. При этом производится перевод процесса ПР1 из заблокирован­ного состояния в состояние готовности.

На уровне реализации возможно одно из двух решений в отношении процессов, которые переводятся из очереди ожидания в очередь готовности при выполне­нии примитива V:

  • процесс при его активизации (выборка из очереди готовности) вновь пытает­ся выполнить примитив Р, считая предыдущую попытку неуспешной;
  • процесс при помещении его в очередь готовности отмечается как успешно выполнивший примитив Р. Тогда при его активизации управление будет пе­редано не на повторное выполнение примитива Р, а на команду, следующую за ним.

Рассмотрим первый способ реализации. Пусть процесс ПР2 в некоторый момент времени выполняет операцию P(S). Тогда семафор S становится равным нулю. Пусть далее процесс ПР1 пытается выполнить операцию P(S). Процесс ПР1 в этом случае «засыпает» на семафоре S, так как значение семафора S равнялось нулю, а теперь станет равным -1. После выполнения критического интервала процесс ПР2 выполняет операцию V(S), при этом значение семафора S становит­ся равным нулю, а процесс ПР1 переводится в очередь готовности. Пусть через некоторое время процесс ПР1 будет активизирован, то есть выведен из состоя­ния ожидания, и сможет продолжить свое исполнение. Он повторно пытается выполнить операцию P(S), однако это ему не удается, так как S=0. Процесс ПР1 «засыпает» на семафоре, а его значение становится равным -1. Если через не­которое время процесс ПР2 попытается выполнить P(S), то он тоже «уснет». Та­ким образом, возникнет так называемая тупиковая ситуация, так как «будить» процессы ПР1 и ПР2 некому.

При втором способе реализации тупиковой ситуации не будет. Действительно, пусть все происходит также до момента окончания исполнения процессом ПР2 примитива V(S). Пусть примитив V(S) выполнен и S=0. Через некоторое время процесс ПР1 активизировался. Согласно данному способу реализации, он сразу же попадет в свой критический интервал. При этом никакой другой процесс не попадет в свой критический интервал, так как семафор остался закрытым. После исполнения своего критического интервала процесс ПР1 выполнит V(S). Если за время выполнения критического интервала процесса ПР1 процесс ПР2 не делал попыток выполнить операцию P(S), семафор S установится в единицу. В против­ном случае значение семафора будет не больше нуля. Но в любом варианте по­сле завершения операции V(S) процессом ПР1 доступ к критическому ресурсу со стороны процесса ПР2 будет разрешен.

Заметим, что возникновение тупиков возможно в случае несогласованного выбо­ра механизма реактивации процессов из очереди, с одной стороны, и выбора ал­горитмов семафорных операций — с другой.

Возможен другой алгоритм работы семафорных операций:

 

P(S): if S>-1 then S:=S-1

else WAIT(S){остановить процесс и поместить в очередь ожидания к семафору S)

 

V(S): if S<0 then RELEASE(S){поместить один из ожидающих процессов очереди семафора S

в очередь готовности};

S:=S+1.

Здесь вызов WAIT(S) означает, что супервизор ОС должен перевести задачу в со­стояние ожидания, причем очередь процессов связана с семафором S. Вызов RELEASE(S) означает обращение к диспетчеру задач с просьбой перевести первый из процессов, стоящих в очереди S, в состояние готовности к исполнению.

Использование семафорных операций, выполненных подобным образом, позво­ляет решать проблему критических интервалов на основе первого способа реа­лизации без вероятности возникновения тупиков. Действительно, пусть ПР2 в некоторый момент времени выполнит операцию P(S). Тогда семафор S становит­ся равным нулю. Пусть далее процесс ПР1 пытается выполнить операцию P(S). Процесс ПР1 в этом случае «заснет» на семафоре S, так как S=0, причем значение S не изменится. После выполнения своего критического интервала процесс ПР2 выполнит операцию V(S), при этом значение семафора S станет равным еди­нице, а процесс ПР1 переведется в очередь готовности. Если через некоторое время процесс ПР1 будет активизирован, он успешно выполнит P(S) и войдет в свой критический интервал.

В однопроцессорной вычислительной системе неделимость Р- и V-операций мож­но обеспечить с помощью простого запрета прерываний. Сам же семафор S можно реализовать в виде записи с двумя полями (листинг 6.9). В одном поле хранится целое значение S, во втором — указатель на список процессов, заблокированных на семафоре S.

 

Листинг 6.9. Реализация Р- и V-операций для однопроцессорной системы

type Semaphore = record

счетчик : integer;

указатель : pointer:

end;

var S :Semaphore;

procedure P ( var S : Semaphore);

begin

ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;

S.счетчик:= S.счетчик-1;

if S.счетчик < 0 then

WAIT(S); { ВСТАВИТЬ ОБРАТИВШИЙСЯ ПРОЦЕСС В СПИСОК ПО S.указатель

и УСТАНОВИТЬ НА ПРОЦЕССОР ГОТОВЫЙ К ВЫПОЛНЕНИЮ ПРОЦЕСС }

РАЗРЕШИТЬ_ПРЕРЫВАНИЯ

end;

procedure V ( var S : Semaphore);

begin

ЗАПРЕТИТЬ ПРЕРЫВАНИЯ;

S.счетчик:= S.счетчик+1;

if S.счетчик <=0 then

RELEASE (S); { ДЕБЛОКИРОВАТЬ ПЕРВЫЙ ПРОЦЕСС ИЗ СПИСКА ПО

S.указатель }

РАЗРЕШИТЬ_ПРЕРЫВАНИЯ

end;

procedure InitSem (var S : Semaphore);

begin

S.счетчик:=1;

S.указатель:=nil;

end;

– Конец работы –

Эта тема принадлежит разделу:

Программное обеспечение можно разделить на две группы: системное программное обеспечение СПО и прикладное программное обеспечение ППО

Программное обеспечение это общий термин для обозначения quot неосязаемых quot в отличие от физических составных частей компьютерной системы... Программное обеспечение можно разделить на две группы системное программное... СПО управляет ресурсами компьютерной системы и позволяет пользователям программировать в более выразительных языках...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Семафорные примитивы Дейкстры

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Системное программное обеспечение
В англоязычной технической литературе термин System Software (системное про­граммное обеспечение) означает программы и комплексы программ, являющие­ся общими для всех, кто совместно использует техн

Понятие операционной среды
Операционная система выполняет функции управления вычислительными про­цессами в вычислительной системе, распределяет ресурсы вычислительной сис­темы между различными вычислительными процессами и об

Понятия вычислительного процесса и ресурса
Понятие «вычислительный процесс» (или просто — «процесс») является одним из основных при рассмотрении операционных систем. Последовательный процесс (иногда называемый «задачей») — это выполнение от

Диаграмма состояний процесса
Необходимо различать системные управляющие процессы, представляющие ра­боту супервизора операционной системы и занимающиеся распределением и управ­лением ресурсов, от всех других процессов: системн

Реализация понятия последовательного процесса в ОС
Контекст и дескриптор процесса На протяжении существования процесса его выполнение может быть многократно прервано и продолжено. Для того, чтобы возобновить выполнение процесса, необходимо

Процессы и треды
Понятие процесса было введено для реализации идей мультипрограммирования. Напомним, в свое время различали термины «мультизадачность» и «мультипро­граммирование». Таким образом, для реализации «мул

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

Основные виды ресурсов
Рассмотрим кратко основные виды ресурсов вычислительной системы и спосо­бы их разделения. Прежде всего, одним из важнейших ресурсов является сам процессор, точнее — процессорное время. Процессорное

Управление задачами в операционных системах
Итак, время центрального процессора и оперативная память являются основными ресурсами в случае реализации мультипрограммных вычислений. Оперативная память — это важнейший ресурс любой вычи

Стратегии планирования
Прежде всего следует отметить, что при рассмотрении стратегий планирования, как правило, идет речь о краткосрочном планировании, то есть о диспетчериза­ции. Долгосрочное планирование, как мы уже от

Дисциплины диспетчеризации
Когда говорят о диспетчеризации, то всегда в явном или неявном виде имеют в виду понятие задачи (потока). Если ОС не поддерживает механизм тредов, то можно заменять понятие задачи на понятие процес

Вытесняющие и не вытесняющие алгоритмы диспетчеризации
Диспетчеризация без перераспределения процессорного времени, то есть не вы­тесняющая многозадачность (non-preemptive multitasking) — это такой способ диспетчеризации процессов, при котором активный

Диспетчеризация задач с использованием динамических приоритетов
При выполнении программ, реализующих какие-либо задачи контроля и управ­ления (что характерно, прежде всего, для систем реального времени), может случиться такая ситуация, когда одна или несколько

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

Управление вводом/выводом
Необходимость обеспечить программам возможность осуществлять обмен дан­ными с внешними устройствами и при этом не включать в каждую двоичную программу соответствующий двоичный код, осуществляющий с

Режимы управления вводом/выводом
Как известно, имеются два основных режима ввода/вывода: режим обмена с опро­сом готовности устройства ввода/вывода и режим обмена с прерываниями. Рас­смотрим рис. 4.1.

Закрепление устройств, общие устройства ввода/вывода
Как известно, многие устройства не допускают совместного использования. Пре­жде всего, это устройства с последовательным доступом. Такие устройства могут стать закрепленными, то есть быть предостав

Основные системные таблицы ввода/вывода
Каждая ОС имеет свои таблицы ввода/вывода, их состав (количество и назначе­ние каждой таблицы) может сильно отличаться. В некоторых ОС вместо таблиц создаются списки, хотя использование статических

Синхронный и асинхронный ввод/вывод
Задача, выдавшая запрос на операцию ввода/вывода, переводится супервизором в состояние ожидания завершения заказанной операции. Когда супервизор по­лучает от секции завершения сообщение о том, что

Кэширование операций ввода/вывода при работе с накопителями на магнитных дисках
Как известно, накопители на магнитных дисках обладают крайне низкой скоро­стью по сравнению с быстродействием центральной части компьютера. Разница в быстродействии отличается на несколько порядков

Файловая система.
Файловая система - это часть операционной системы, назначение которой состоит в том, чтобы обеспечить пользователю удобный интерфейс при работе с данными, хранящимися на диске, и обеспечить совмест

Имена файлов
  Файлы идентифицируются именами. Пользователи дают файлам символьные имена, при этом учитываются ограничения ОС как на используемые символы, так и на длину имени. До недавнего времен

Типы файлов
  Файлы бывают разных типов: обычные файлы, специальные файлы, файлы-каталоги.   Обычные файлы в свою очередь подразделяются на текстовые и двоичные. Текстовые

Логическая организация файла
  Программист имеет дело с логической организацией файла, представляя файл в виде определенным образом организованных логических записей. Логическая запись - это наименьший элемент да

Физическая организация и адрес файла
  Физическая организация файла описывает правила расположения файла на устройстве внешней памяти, в частности на диске. Файл состоит из физических записей - блоков. Блок - наименьшая

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

Общая модель файловой системы
Функционирование любой файловой системы можно представить многоуровневой моделью, в которой каждый уровень предоставляет некоторый интерфейс (набор функций) вышележащему уровню, а сам, в с

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

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

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

Интерфейс прикладного программирования
Прежде всего необходимо однозначно разделить общий термин API (application program interface, интерфейс прикладного программирования) на следующие направления: API как интерфейс высо

Реализация функций API на уровне ОС
При реализации функций API на уровне ОC за их выполнение ответственность несет ОС. Объектный код, выполняющий функции, либо непосредственно входит в состав ОС (или даже ядра ОС), либо поставляется

Реализация функций API на уровне системы программирования
Если функции API реализуются на уровне системы программирования, они пре­доставляются пользователю в виде библиотеки функций соответствующего язы­ка программирования. Обычно речь идет о библиотеке

Реализация функций API с помощью внешних библиотек
При реализации функций API с помощью внешних библиотек они предоставля­ются пользователю в виде библиотеки процедур и функций, созданной сторон­ним разработчиком. Причем разработчиком такой библиот

Платформенно-независимый интерфейс POSIX
POSIX (Portable Operating System Interface for Computer Environments) — платформенно независимый системный интерфейс для компьютерного окружения. Это стандарт IEEE, описывающий системные интерфейсы

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

Независимые и взаимодействующие вычислительные процессы
Основной особенностью мультипрограммных операционных систем является то, что в их среде параллельно развивается несколько (последовательных) вычисли­тельных процессов. С точки зрения внешнего наблю

Средства синхронизации и связи при проектировании взаимодействующих вычислительных процессов
Все известные средства для решения проблемы взаимного исключения основа­ны на использовании специально введенных аппаратных возможностей, к кото­рым относятся блокировка памяти, специальные команды

Использование блокировки памяти при синхронизации параллельных процессов
Все вычислительные машины и системы имеют такое средство для организации взаимного ис­ключения, как блокировка памяти. Это средство запрещает одновременное ис­полнение двух (и более) команд, которы

Алгоритм Деккера
Алгоритм Деккера основан на использовании трех переменных (листинг 6.4): перекл1, перекл2 и ОЧЕРЕДЬ. Пусть по-прежнему переменная перекл1=true тогда, ког­да процесс ПР1 хочет войти в свой критическ

Мьютексы
Одним из вариантов семафорных механизмов для организации взаимного ис­ключения являются так называемые мъютексы (mutex). Термин mutex произо­шел от английского словосочетания mutual exclusion semap

Использование семафоров при проектировании взаимодействующих вычислительных процессов
Семафорные примитивы чрезвычайно широко используются при проектирова­нии разнообразных вычислительных процессов. При этом некоторые задачи яв­ляются настолько «типичными», что их детальное рассмотр

Мониторы Хоара
Анализ рассмотренных задач показывает, что, несмотря на очевидные достоинст­ва (простота, независимость от количества процессов, отсутствие «активного ожидания»), семафорные механизмы имеют и ряд н

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги