Взаимодействие процессов. Транспортеры, очереди, сигналы, семафоры.

Взаимодействие процессов удобно рассматривать в схеме производитель – потребитель, например, программа вывода на печать производит последовательность символов, которые потребляются драйвером принтера, или компилятор производит текст ассемблера, который потребляется ассемблером. Для взаимодействия процесса производителя и процесса потребителя создается совместный буфер, заполняемый процессами производителя и потребителя. Буфер имеет фиксированные размеры, следовательно, процессы могут находиться в состоянии ожидания, когда: 1)буфер заполнен, ожидает процесс производитель; 2)буфер пуст, ожидает процесс потребитель. Буфер может предоставляться и поддерживаться самой ОС, например, с помощью средств межпроцессной коммуникации, либо должен быть организован программистом, при этом оба процесса производитель и потребитель используют общий участок памяти. Взаимодействие процессов заключается в передаче данных между процессами или совместном использовании некоторых ресурсов и обычно реализуется с помощью таких механизмов как транспортеры, очереди, сигналы и семафоры.

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

Очереди могут обеспечить передачу или использование общих данных без перемещения данных, а с передачей элемента очереди, содержащего указатель данных и объем массива данных. Очередь используется вместе с механизмом общей памяти. Элемент очереди может быть считан с уничтожением или без уничтожения этого элемента. Чтение элемента может осуществляться в соответствии с механизмом очереди, например, fifo или стека. Чтение элементов очереди осуществляется только процессом, создавшим очередь. Все другие процессы могут только записать элемент в очередь. Создающий очередь процесс может выполнять следующие действия над очередью: 1)создание очереди; 2)просмотр очереди; 3)чтение очереди; 4)закрытие очереди. Записывающий процесс осуществляет действия: 1)открыть очередь; 2)записать в очередь; 3)закрыть очередь. Имя очереди, которое присваивается создающим процессом, имеет вид полной спецификации файла. Ожидание элемента в очередь организуется с помощью семафора, сигнализирующего о записи элемента в очередь. Дополнительные функции для работы с очередью: 1)определение количества элементов в очереди в текущий момент; 2)очистка очереди, создавшим ее процессом. Преимущества очереди: 1)передача данных осуществляется по указателю без копирования; 2)гибкие изменения порядка передачи и доступа; 3)возможность просмотра элементов очереди без их удаления.

Сигналы – это механизм передачи требования от одного процесса к другому на немедленное выполнение действия. Обработчик сигнала создается процессом с перемещается в начало первого потока процесса. При передаче управления обработчику передается адрес возврата и тип принятого сигнала. Процесс, посылающий сигнал типа флагможет передавать дополнительную информацию обработчику сигналов. Характер выполняемых действий при выполнении сигнала: 1)обработка системной ошибки при появлении сигнала; 2)блокирование сигнала; 3)передача управления подпрограмме.

Семафоры являются механизмом передачи сообщения от одного потока к другому о наступлении некоторого события. Различают семафоры системные и оперативной памяти. Семафоры оперативной памяти – двойное слово в памяти системы, его описатель (адрес, место в памяти), такие семафоры не создаются, а устанавливаются в определенном состоянии. Процессы, использующие семафоры оперативной памяти, должны иметь доступ к соответствующему сегменту памяти. ОС такие семафоры не обслуживает и не сообщает об их освобождении или захвате. При создании семафора или его открытии возвращается описатель семафора, включающий его имя. ОС контролирует завершение каждого процесса, владеющего системным семафором, и освобождает его для процессов. Если семафор свободен, то он захватывается, вызывающими его процессами. Если семафор занят, то вызывающий его поток переходит в режим ожидания освобождения семафора и ожидает истечения времени. Если семафор освобожден всеми использующими его процессами, то он удаляется из системы. Управление семафором реализуется с помощью функций: 1)установки семафора с целью сигнализации; 2)ожидания, вызывающим потоком, пока семафор не будет выключен; 3)ожидания потоков выключения одного из нескольких семафоров.

ОС использует разные термины для определения способов межпроцессорного взаимодействия. В OS/2, MS Windows существует специальный термин (механизм) для взаимодействия процессов в реальном времени (DDE – Dynamic Data Exchange). Этот интерфейс позволяет хранить объекты, созданные одной программой, в объектах, созданных другой программой, а также редактировать, печатать их без нарушения целостности информации и связей. Одним из наиболее простых, удобных и интуитивно понятных интерфейсов межпрограммного взаимодействия является буфер обмена.

Критерии планирования и требования к алгоритмам [PDA версия]

Для каждого уровня планирования процессов можно предложить много различных алгоритмов. Выбор конкретного алгоритма определяется классом задач, решаемых вычислительной системой, и целями, которых мы хотим достичь, используя планирование. К числу таких целей можно отнести: * Справедливость: гарантировать каждому заданию или процессу определенную часть времени использования процессора в компьютерной системе, стараясь не допустить возникновения ситуации, когда процесс одного пользователя постоянно занимает процессор, в то время как процесс другого пользователя фактически не приступал к выполнению. * Эффективность: постараться занять процессор на все 100% рабочего времени, не позволяя ему простаивать в ожидании процессов готовых к исполнению. В реальных вычислительных системах загрузка процессора колеблется от 40 до 90 процентов. * Сокращение полного времени выполнения (turnaround time): обеспечить минимальное время между стартом процесса или постановкой задания в очередь для загрузки и его завершением. * Сокращение времени ожидания (waiting time): минимизировать время, которое проводят процессы в состоянии готовность и задания в очереди для загрузки. * Сокращение времени отклика (response time): минимизировать время, которое требуется процессу в интерактивных системах для ответа на запрос пользователя. Независимо от поставленных целей планирования желательно также, чтобы алгоритмы обладали следующими свойствами: * Были предсказуемыми. Одно и то же задание должно выполняться приблизительно за одно и то же время. Применение алгоритма планирования не должно приводить, к примеру, к извлечению корня квадратного из 4 за сотые доли секунды при одном запуске и за несколько суток при втором запуске. * Имели минимальные накладные расходы, связанные с их работой. Если на каждые 100 миллисекунд, выделенных процессу для использования процессора, будет приходиться 200 миллисекунд на определение того, какой именно процесс получит процессор в свое распоряжение, и на переключение контекста, то такой алгоритм, очевидно, использовать не стоит. * Равномерно загружали ресурсы вычислительной системы, отдавая предпочтение тем процессам, которые будут занимать малоиспользуемые ресурсы. * Обладали масштабируемостью, т. е. не сразу теряли работоспособность при увеличении нагрузки. Например, рост количества процессов в системе в два раза не должен приводить к увеличению полного времени выполнения процессов на порядок. Многие из приведенных выше целей и свойств являются противоречивыми. Улучшая работу алгоритма с точки зрения одного критерия, мы ухудшаем ее с точки зрения другого. Приспосабливая алгоритм под один класс задач, мы тем самым дискриминируем задачи другого класса.