Тема лекции: «Определение семафоров. Реализация семафоров». В 1965 году Дейкстра предложил использовать целую переменную для подсчета сигналов запуска. Эдсгер Дейкстра предложил новый способ синхронизации процессов, ставший классическим, - семафоры. Таким образом, если предположить, что аппаратура и ОС поддерживают подобную концепцию семафора, то она является удобным инструментом для синхронизации по ресурсам. Им был предложен новый тип переменных, так называемые семафоры, значения которых может быть нулем или некоторым положительным числом, соответствующим количеству отложенных активизирующих сигналов. Подобные переменные-семафоры могут с успехом применяться для решения различных задач организации взаимодействия процессов. В ряде языков программирования они были непосредственно введены в синтаксис языка (например, в ALGOL-68), в других случаях реализуются с помощью специальных системных вызовов. Соответствующая целая переменная располагается внутри адресного пространства ядра операционной системы. Семафор представляет собой простейшие средство синхронизации процессов и потоков. Семафоры могут использоваться как отдельных процессов, так и потоков одного процесса. Семафор в положении ON (руки пондяты вверх) если ресурс свободен и в положении OFF (руки опущены) если ресурс недоступен (должны ждать). Этот пример неплохо показал суть работы семафора, однако важно знать, что в IPC используются множества семафоров, а не отдельные экземпляры. Возможен другой подход к семафорам - как к счетчикам ресурсов. Основные понятия Семафоры лучше всего представлять себе как счетчики, управляющие доступом к общим ресурсам. Чаще всего они используются как блокирующий механизм, не позволяющий одному процессу захватить ресурс, пока этим ресурсом пользуется другой. Семафоры, трактуемые как счетчики ресурсов, могут изначально устанавливаться в любое натуральное число, не только в 0 или 1. Семафо́р — объект, позволяющий войти в заданный участок кода не более чем n потокам. Семафор – это специальный тип переменных, которые могут принимать только неотрицательные значения, и над которыми определены только три следующие операции ( – переменная типа «семафор»): - операция инициализации семафора; 1) 2) операция - значение переменной уменьшается на единицу, если это возможно; операция интерпретируется как операция опускания (закрытия) семафора; 3) операция - значение переменной увеличивается на единицу; операция интерпретируется как операция поднятия (открытия) семафора. Если семафор закрыт (процессом 1- Единицы работы, между которыми операционная система разделяет процессоры и другие ресурсы вычислительной системы, с помощью операции P(S)), то процесс 2, вызвавший операцию , ждет, пока семафор откроется (процессом 1, с помощью операции V(S)). Выполнение операций , не может быть прервано. Если одной и той же критической секции достигли несколько процессов, то они образуют очередь к семафору. Простейшим семафором является двоичный семафор, который может принимать лишь два состояния – 0 и 1. Иногда двоичный семафор называют мьютексом. Это упрощенная версия семафора( взаимное исключение- Запрет одновременного доступа к разделяемым ресурсам более чем одному процессу). Он не способен считать, он может лишь управлять взаимным исключение доступа к совместно используемым ресурсам или кодам. Это переменная, которая может находится в одном из двух сосотояний: заблокированном или незаблокированном. Для описания мьютекса требуется 1 бит. Вот некоторые из проблем, которые могут решать семафоры. запрет одновременного выполнения заданных участков кода; поочерёдный доступ к критическому ресурсу (важному ресурсу, для которого невозможен одновременный доступ).