- •Тема 1.
- •Понятия вычислительного процесса и Ресурса
- •Процессы и треды
- •Независимые и взаимодействующие вычислительные процессы
- •Прерывания.
- •Файловая система ntfs (New Technology File System)
- •Интерфейс прикладного программирования
- •Реализация функций api на уровне ос
- •Реализация функций api на уровне системы программирования
- •Реализация функций api с помощью внешних библиотек
- •Платформенно-независимый интерфейс posix
- •Семафорные примитивы Дейкстры
- •Мьютексы
- •Мониторы Хоара
- •Почтовые ящики
- •Конвейеры
- •Организация очереди на массиве
- •Очереди сообщений
- •Понятие тупиковой ситуации при выполнении параллельных вычислительных процессов
- •Студенты, не защитившие лабораторные работы, к сдаче зачетной единицы не допускаются
- •Общие сведения
- •Удаление элемента из списка.
- •Теоретическая часть (в популярном для студентов стиле).
- •0030:4012 (Всё шестнадцатиричное)
- •Выделение памяти.
- •(Каждый блок представляет байт)
- •Чтобы узнать, что происходит в памяти, при размещении и извлечении значений в стеке, см. На рисунок ниже:
- •Регистр eax почти всегда используется для хранения результата процедуры.
- •Строки.
- •Заполнение данными.
- •Все команды перехода имеют один операнд: смещение для перехода.
- •Организация циклов.
- •Имеются также другие формы:
- •Xor (не или) устанавливает бит результата в 1, если бит источника отличается от бита приемника. Not инвертирует бит источника.
- •Подпрограммы.
- •Структуры.
- •Упрощённый вызов api функций в tasm.
- •А вот и операторы, которые вы можете использовать:
- •Пример: команды ror (циклический сдвиг вправо)
- •Стековые операции.
Семафорные примитивы Дейкстры
Понятие семафорных механизмов было введено нидерландским учёным (Эдсгер Вибе Дейкстра) . Семафор - переменная специального типа, которая доступна параллельным процессам для проведения над ней только двух операций: «закрытия» и «открытия», названных соответственно Р- и V-операциями. Эти операции являются примитивами относительно семафора, который указывается в качестве параметра операций. Здесь семафор выполняет роль вспомогательного критического ресурса, так как операции Р и V неделимы при своём выполнении и взаимно исключают друг друга. Семафорный механизм работает по схеме, в которой сначала исследуется состояние критического ресурса, идентифицируемое значением семафора, а затем уже осуществляется допуск к критическому ресурсу или отказ от него на некоторое время. При отказе доступа к критическому ресурсу используется режим «пассивного ожидания». Поэтому в состав механизма включаются средства формирования и обслуживания очереди ожидающих процессов. Эти средства реализуются супервизором операционной системы. Необходимо отметить, что в силу взаимного исключения примитивов попытка в различных параллельных процессах одновременно выполнить примитив над одним и тем же семафором приведет к тому, что она будет успешной только для одного процесса. Все остальные процессы будут взаимно исключены на время выполнения примитива. Основным достоинством использования семафорных операций является отсутствие состояния «активного ожидания», что может существенно повысить эффективность работы мультипрограммной вычислительной системы.
В настоящее время на практике используется много различных видов семафорных механизмов. Варьируемыми параметрами, которые отличают различные виды примитивов, являются начальное значение и диапазон изменения значений семафора, логика действий семафорных операций, количество семафоров, доступных для обработки при исполнении отдельного примитива. Обобщенный смысл примитива P(S) состоит в проверке текущего значения
семафора S, и если оно не меньше нуля, то осуществляется переход к следующей за примитивом операции. В противном случае процесс снимается на некоторое время с выполнения и переводится в состояние «пассивного ожидания». Находясь в списке заблокированных, ожидающий процесс не проверяет семафор непрерывно, как в случае активного ожидания. Вместо него на процессоре может исполняться другой процесс, который реально совершает полезную работу.
Операция V(S) связана с увеличением значения семафора на единицу и переводом одного или нескольких процессов в состояние готовности к центральному процессору.
Отметим еще раз, что операции Р и V выполняются операционной системой в ответ на запрос, выданный некоторым процессом и содержащий имя семафора в качестве параметра.
Мьютексы
Одним из вариантов семафорных механизмов для организации взаимного исключения являются так называемые мьютексы (mutex). Термин mutex произошёл от английского словосочетания mutual exclusion semaphore, что дословно и переводится как семафор взаимного исключения. Мьютексы реализованы во многих ОС, их основное назначение - организация взаимного исключения для задач (потоков) из одного и того же или из разных процессов. Мьютексы - это простейшие двоичные семафоры, которые могут находиться в одном из двух состояний - отмеченном или неотмеченном (открыт и закрыт соответственно). Когда какая-либо задача, принадлежащая любому процессу, становится владельцем объекта mutex, последний переводится в неотмеченное состояние. Если задача освобождает мьютекс, его состояние становится отмеченным.
Организация последовательного (а не параллельного) доступа к ресурсам с использованием мьютексов становится несложной, поскольку в каждый конкретный момент только одна задача может владеть этим объектом. Для того чтобы объект mutex стал доступен задачам (потокам), принадлежащим разным процессам, при создании ему необходимо присвоить имя. Потом это имя нужно передать «по наследству» задачам, которые должны его использовать для взаимодействия. Для этого вводятся специальные системные вызовы, в которых указываются начальное значение мьюотекса, его имя и, возможно, атрибуты защиты. Если начальное значение мьютекса равно true, то считается, что задача, создающая этот объект, будет им сразу владеть. Можно указать в качестве начального значение false - в этом случае мьютекс не принадлежит ни одной из задач и только специальным обращением к нему можно изменить его состояние. Для работы с мьютексом имеется несколько функций. Помимо уже упомянутой функции создания такого объекта, есть функции открытия, ожидания событий и, наконец, освобождение этого объекта.
Конкретные обращения к этим функциям и перечни передаваемых и получаемых параметров нужно смотреть в документации на соответствующую ОС.