Cтраница 1
Примитивы межпроцессного взаимодействия используются для решения таких проблем, как проблема производителя и потребителя, проблема обедающих философов, проблема читателей и писателей и проблема спящего брадобрея. Но даже при использовании примитивов необходимо отслеживать ситуации, приводящие к ошибкам и взаимоблокировкам. [1]
Теперь рассмотрим некоторые примитивы межпроцессного взаимодействия, применяющиеся вместо циклов ожидания, в которых лишь напрасно расходуется процессорное время. Эти примитивы блокируют процессы в случае запрета на вход в критическую область. Одной из простейших является пара примитивов sleep и wakeup. Примитив sleep - системный запрос, в результате которого вызывающий процесс блокируется, пока его не запустит другой процесс. У запроса wakeup есть один параметр - процесс, который следует запустить. Также возможно наличие одного параметра у обоих запросов - адреса ячейки памяти, используемой для согласования запросов ожидания и запуска. [2]
Теперь, когда у нас есть примитивы межпроцессного взаимодействия, вернемся к последовательности прерываний, показанной в табл. 2.2. В системах, использующих семафоры, естественным способом скрыть прерывание будет связать с каждым устройством ввода-вывода семафор, исходно равный нулю. Сразу после запуска устройства ввода-вывода управляющий процесс выполняет операцию down на соответствующем семафоре, тем самым входя в состояние блокировки. В случае прерывания обработчик прерывания выполняет up на соответствующем семафоре, переводя процесс в состояние готовности. В такой модели пятый шаг в табл. 2.2 заключается в выполнении up на семафоре устройства, чтобы следующим шагом планировщик смог запустить программу, управляющую устройством. Разумеется, если в этот момент несколько процессов находятся в состоянии готовности, планировщик может выбрать другой, более значимый процесс. Мы рассмотрим некоторые алгоритмы планирования позже в этой главе. [3]
Процессы могут взаимодействовать между собой с помощью примитивов межпроцессного взаимодействия, таких как семафоры, мониторы или сообщения. Эти примитивы используются для исключения ситуации, в которой два процесса одновременно находятся в своих критических областях, что приводило бы к хаосу. Процесс может находиться в состоянии действия, готовности или блокировки и может менять состояние в случае выполнения им ( или другим процессом) примитива межпроцессного взаимодействия. Примерно так же выполняется взаимодействие потоков. [4]
Может ли в случае потоков в пространстве пользователя возникнуть проблема инверсии приоритета, рассмотренная в разделе Примитивы межпроцессного взаимодействия. [5]
Процессы могут взаимодействовать между собой с помощью примитивов межпроцессного взаимодействия, таких как семафоры, мониторы или сообщения. Эти примитивы используются для исключения ситуации, в которой два процесса одновременно находятся в своих критических областях, что приводило бы к хаосу. Процесс может находиться в состоянии действия, готовности или блокировки и может менять состояние в случае выполнения им ( или другим процессом) примитива межпроцессного взаимодействия. Примерно так же выполняется взаимодействие потоков. [6]