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

Современные операционные системы
Процессы и потоки  Первым пришел — первым обслужен

Первым пришел — первым обслужен

Наверное, наипростейшим из всех алгоритмов планирования будет неприоритетный алгоритм, следующий принципу: «первым пришел — первым обслужен». При использовании этого алгоритма центральный процессор выделяется процессам в порядке поступления их запросов. По сути, используется одна очередь процессов, находящихся в состоянии готовности. Когда рано утром в систему извне попадает первое задание, оно тут же запускается на выполнение и получает возможность выполняться как угодно долго. Оно не прерывается по причине слишком продолжительного выполнения. По мере поступления других заданий они помещаются в конец очереди. При блокировке выполняемого процесса следующим запускается первый процесс, стоящий в очереди. Когда заблокированный процесс переходит в состояние готовности, он, подобно только что поступившему заданию, помещается в конец очереди.

Первым пришел — первым обслужен читать полное описание.


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

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

Теперь давайте рассмотрим, как с помощью передачи сообщений и без использования общей памяти может решаться задача производителя-потребителя. Решение этой задачи показано в листинге 2.12. Будем исходить из предположения, что все сообщения имеют один и тот же размер и что переданные, но еще не полученные сообщения буферизуются автоматически средствами операционной системы. В этом решении всего используется N сообщений, что аналогично N местам в буфере, организованном в общей памяти. Потребитель начинает с того, что посылает N пустых сообщений производителю. Как только у производителя появится запись для передачи потребителю, он берет пустое сообщение и отправляет его назад в заполненном виде. При этом общее количество сообщений в системе остается постоянным, поэтому они могут быть сохранены в заданном, заранее известном объеме памяти.

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


Процессы и потоки  Синхронизированные методы в Java

Синхронизированные методы в Java

Синхронизированные методы в Java существенно отличаются от классических мониторов: в Java отсутствуют встроенные условные переменные. Вместо них этот язык предлагает две процедуры: wait и notify, которые являются эквивалентами sleep и wakeup, за исключением следующего: при использовании внутри синхронизированных методов они не могут попасть в состязательную ситуацию. Теоретически метод wait может быть прерван, для чего, собственно, и предназначен весь окружающий его код. Java требует, чтобы обработка исключений проводилась в явном виде. В нашем случае нужно просто представить, что использование метода go_to_sleep — это всего лишь способ приостановки работы.

Синхронизированные методы в Java читать полное описание.


Процессы и потоки  Автоматическая организация взаимного исключения

Автоматическая организация взаимного исключения

Может создаться впечатление, что операции так и signal похожи на операции sleep и makeup, которые, как мы видели ранее, приводят к фатальному состоянию состязательности. Конечно же, они очень похожи, но с одной весьма существенной разницей: sleep и makeup терпели неудачу, когда один процесс пытался заблоки-роваться, а другой пытался его активизировать. При использовании мониторов такая ситуация исключена. Автоматическая организация взаимного исключения в отношении процедур монитора гарантирует следующее: если, скажем, производитель, выполняя процедуру внутри монитора, обнаружит, что буфер полон, он будет иметь возможность завершить операцию wait, не испытывая волнений о том, что планировщик может переключиться на выполнение процесса потребителя еще до того, как операция так будет завершена.

Автоматическая организация взаимного исключения читать полное описание.


Процессы и потоки  Дополнение к мьютексам пакет Pthreads

Дополнение к мьютексам пакет Pthreads

В дополнение к мьютексам пакет Pthreads предлагает второй механизм синхронизации: условные переменные. Мьютексы хороши для разрешения или блокирования доступа к критической области. Условные переменные позволяют потокам блокироваться до выполнения конкретных условий. Эти два метода практически всегда используются вместе. Теперь давайте более пристально взглянем на взаимодействие потоков, мьютексов и условных переменных.

Дополнение к мьютексам пакет Pthreads читать полное описание.