Современные операционные системы

Современные операционные системы
Процессы и потоки  Мьютексы

Мьютексы

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

Мьютекс — это переменная, которая может находиться в одном из двух состояний: в заблокированном или незаблокированном. Следовательно, для их представления нужен только один бит, но на практике зачастую используется целое число, при этом нуль означает незаблокированное, а все остальные значения — заблокированное состояние. Для работы с мьютексами используются две процедуры.

Мьютексы читать полное описание.


Процессы и потоки  Состязательная ситуация

Состязательная ситуация

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

Состязательная ситуация читать полное описание.


Процессы и потоки  Решение задачи производителя-потребителя с помощью семафоров

Решение задачи производителя-потребителя с помощью семафоров

В листинге 2.6 показано, как с помощью семафоров решается проблема утраченных активизаций. Чтобы заставить их корректно работать, очень важно, чтобы их реализация предусматривала неделимый режим работы. Вполне естественно было бы реализовать операции up и down в виде системных вызовов, чтобы операционная система на время тестирования семафора, обновления его значения и приостановки процесса при необходимости кратковременно запрещала все прерывания. Поскольку все эти действия занимают только несколько команд, запрет на прерывания не причинит никакого вреда. Если используется несколько центральных процессоров, каждый семафор должен быть защищен переменной lock, а для гарантии того, что семафор в отдельно взятый момент времени задействуется только одним центральным процессором, используется команда TSL или команда XCHG.

Решение задачи производителя-потребителя с помощью семафоров читать полное описание.


Процессы и потоки  Запрещение прерываний на одном центральном процессоре

Запрещение прерываний на одном центральном процессоре

Благодаря увеличению количества многоядерных центральных процессоров даже на недорогих персональных компьютерах возможности достижения взаимного исключения за счет запрещения прерываний даже внутри ядра сужаются. Уже становится привычным наличие двухъядерных процессоров, четыре ядра присутствуют на дорогих машинах, и не за горами распространение 8- или 16-ядерных процессоров.

Запрещение прерываний на одном центральном процессоре читать полное описание.


Процессы и потоки  Блокирующие переменные

Блокирующие переменные

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

Блокирующие переменные читать полное описание.