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

Современные операционные системы
Процессы и потоки  Задача производителя и потребителя

Задача производителя и потребителя

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

Задача производителя и потребителя читать полное описание.


Процессы и потоки  Команда TSL

Команда TSL

А теперь давайте рассмотрим предложение, для реализации которого требуется небольшая помощь со стороны оборудования. Некоторые компьютеры, в особенности те, которые разрабатывались с прицелом на работу нескольких процессов, располагают следующей командой: TSL REGISTER.LOCK

(TSL — Test and Set Lock, то есть проверь и установи блокировку), которая работает следующим образом. Она считывает содержимое слова памяти lock в регистр, а по адресу памяти, отведенному для lock, записывает ненулевое значение. При этом гарантируется неделимость операций чтения слова и сохранение в нем нового значения — никакой другой процесс не может получить доступ к слову в памяти, пока команда не завершит свою работу. Центральный процессор, выполняющий команду TSL, блокирует шину памяти, запрещая другим центральным процессорам доступ к памяти до тех пор, пока не будет выполнена эта команда.

Команда TSL читать полное описание.


Процессы и потоки  Критические области

Критические области

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

Критические области читать полное описание.


Процессы и потоки  Семафоры

Семафоры

Ситуация изменилась в 1965 году, когда Дейкстра предложил использовать целочисленную переменную для подсчета количества активизаций, отложенных на будущее. Он предложил учредить новый тип переменной — семафор (semaphore). Значение семафора может быть равно 0, что будет свидетельствовать об отсутствии сохраненных активизаций или иметь какое-нибудь положительное значение, если ожидается не менее одной активизации.

Семафоры читать полное описание.


Процессы и потоки  Приостановка и активизация

Приостановка и активизация

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

Этот подход не только приводит к пустой трате процессорного времени, но может также иметь совершенно неожиданные эффекты. Рассмотрим компьютер с двумя процессами: Я, с высокой степенью приоритета, и L, с низкой степенью приоритета.

Приостановка и активизация читать полное описание.