Алгоритмы и механизмы синхронизации процессов в операционных системах

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

? автоматически.

Увеличение значения счетчика семафора

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

BOOL ReleaseSemaphore(Semaphore: HANDLE; cRelease: LONG; lplPrevious LPLONG);

Функция ReleaseSemaphore увеличивает значение счетчика семафора, идентификатор которого передается ей через параметр Semaphore, на значение, указанное в параметре cRelease. С помощью функции ReleaseSemaphore счётчик ресурсов, принадлежащий семафору, можно увеличивать, более чем на единицу единовременно. Параметр cRelease определяет, какими порциями должен освобождаться семафор.

Заметим, что через параметр cRelease можно передавать только положительное значение, большее нуля. При этом если в результате увеличения новое значение счетчика должно будет превысить максимальное значение, заданное при создании семафора, функция ReleaseSemaphore возвращает признак ошибки и не изменяет значение счетчика.

Предыдущее значение счетчика, которое было до использования функции ReleaseSemaphore, записывается в переменную типа LONG.

Если функция ReleaseSemaphore завершилась успешно, она возвращает значение TRUE. При ошибке возвращается значение FALSE. Код ошибки в этом случае можно определить, как обычно, при помощи функции GetLastError.

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

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

Уменьшение значения счетчика семафора

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

DWORD WaitForSingleObject(Semaphore: HANDLE; Milliseconds: DWORD);

Функция WaitForSingleObject уменьшает значение счетчика семафора, идентификатор которого передается ей через параметр Semaphore. Параметр Milliseconds указывает интервал ожидания в миллисекундах. Если параметру Milliseconds присвоено значение infinite, то интервал ожидания освобождения принимается равным бесконечности. Если задача вызывает несколько раз функцию ожидания для одного и того же семафора, содержимое его счетчика каждый раз будет уменьшаться. Функция WaitForSingleObject используется, чтобы занять ресурс.

Определение текущего значения счетчика семафора

Единственная возможность определения текущего значения счетчика семафора заключается в увеличении этого значения функцией ReleaseSemaphore. Значение счетчика, которое было до увеличения, будет записано в переменную, адрес которой передается функции ReleaseSemaphore через параметр lplPrevious. Заметим, что в операционной системе Windows не предусмотрено средств, с помощью которых можно было бы определить текущее значение семафора, не изменяя его. В частности, нельзя задать функции ReleaseSemaphore нулевое значение инкремента lplPrevious, так как в этом случае указанная функция просто вернет соответствующий код ошибки.

Выводы по главе 1

 

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

Для решения такого рода проблем возникли механизмы синхронизации. Они помогают разграничить доступ к критическим объектам и не влияют на работу процессов вне критических секций.

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

Среди рассмотренных алгоритмов и механизмов наиболее эффективным является механизм семафор по следующим причинам:

.Он позволяет одновременный доступ к ресурсам.

2.Являются логическим расширением мьютекса, семафор со счетчиком 1 эквивалентен мьютексу, но в отличие от него семафор может синхронизировать множество потоков (счетчик может быть больше 1).

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

.На основе семафора можно реализовать механизм синхронизации эквивалентный монитору.

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

 

ГЛАВА 2. ЭЛЕКТИВНЫЙ КУРС ПРОЦЕССЫ В ОПЕРАЦИОННОЙ СИСТЕМЕ WINDOWS

 

.1 Методика изучения элективного курса

 

Проанализировав общеобразовательный стандарт среднего (полного) образования по предмету Информатика и ИКТ можно сделать вывод, что на базовом уровне основная информация по операционным системам рассматривается в разделе Компьютер как средство автоматизации информац?/p>