Одна из важнейших целей, которые ставятся при разработке многозадачных систем, заключается в том, чтобы разные процессы, одновременно работающие в системе, были как можно лучше изолированы друг от друга.
Это означает, что процессы (в идеале) не должны ничего знать даже о существовании друг друга.
Для каждого процесса ОС предоставляет виртуальную машину, т.е. полный набор ресурсов, имитирующий выполнение процесса на отдельном компьютере.
Изоляция процессов является необходимым условиемнадежности и безопасности многозадачной системы.
Один процесс не должен иметь возможности вмешаться в работу другого или получить доступ к его данным, ни по случайной ошибке, ни намеренно.
С другой стороны, есть ситуации, когда взаимодействие необходимо.
Процессы могут совместно обрабатывать общие данные, обмениваться сообщениями, ждать ответа и т.п.
Система должна предоставлять в распоряжение процессов средства взаимодействия. Это не противоречит тому, что выше было сказано об изоляции процессов.
Чтобы взаимодействие не привело к полному хаосу, оно должно выполняться только с помощью тех хорошо продуманных средств, которые предоставляет процессам ОС. За пределами этих средств действует изоляция процессов.
Это как граница государств – пересекать ее в произвольных местах запрещено, но должна быть хорошо обустроенная система пропускных пунктов, где легко проконтролировать соблюдение правил пересечения границы.
Понятие взаимодействия процессов включает в себя несколько видов взаимодействия, основными из которых являются:
· синхронизация процессов, т.е., упрощенно говоря, ожидание одним процессом каких-либо событий, связанных с работой других процессов;
· обмен данными между процессами
Набор средств, предназначенных для взаимодействия процессов, часто обозначают аббревиатурой IPC (InterProcess Communication).
Состав функций и методов обусловлен многолетним опытом как программистов-практиков, так и теоретиков, рассматривающих проблемы взаимодействия параллельных процессов.
Выполнение процессов и потоков в мультипрограммной среде всегда имеет асинхронный характер, невозможно предсказать относительную скорость выполнения процессов.
Момент прерывания потоков, время нахождения их в очередях к разделяемым ресурсам, порядок выбора потоков для выполнения - все эти события являются результатом стечения многих обстоятельств иявляются случайными.
Это справедливо как по отношению к потокам одного процесса, выполняющим общий программный код, так и по отношению к потокам разных процессов, каждый из которых выполняет собственную программу.
Способы взаимодействия процессов (потоков) можно классифицировать по степени осведомленности одного процесса о существовании другого.
Процессыне осведомлены о наличии друг друга (например, процессы разных заданий одного или различных пользователей).
Это независимые процессы, не предназначенные для совместной работы. Хотя эти процессы и не работают совместно, ОС должна решать вопросы конкурентного использования ресурсов.
Например, два независимых приложения могут затребовать доступ к одному и тому же диску или принтеру. ОС должна регулировать такие обращения
2. Процессыкосвенно осведомлены о наличии друг друга (например, процессы одного задания).
Эти процессы не обязательно должны быть осведомлены о наличии друг друга с точностью до идентификатора процесса, однако они разделяют доступ к некоторому объекту, например буферу ввода-вывода, к файлу или БД.
Такие процессы демонстрируют сотрудничество при разделении общего объекта.
3. Процессынепосредственно осведомлены о наличии друг друга (например, процессы, работающие последовательно или поочередно в рамках одного задания).
Такие процессы способны общаться один с другим с использованием идентификаторов процессов и изначально созданы для совместной работы.
Эти процессы также демонстрируют сотрудничество при работе
Таким образом, потенциальные проблемы, связанные с взаимодействием и синхронизацией процессов и потоков, могут быть представлены следующей таблицей.
3. Общая характеристики связи между процессами:
* направление связи. Связь бывает однонаправленная (симплексная) и двунаправленная (полудуплексная для поочередной передачи информации и дуплексная с возможностью одновременной передачи данных в разных направлениях);
* тип адресации. В случае прямой адресации информация посылается непосредственно получателю, например, процессу P-Send (P, message). В случае непрямой или косвенной адресации информация помещается в некоторый промежуточный объект, например, в почтовый ящик
используемая модель передачи данных - потоковая или модель сообщений;
* объем передаваемой информации и сведения о том, обладает ли канал буфером необходимого размера;
* синхронность обмена данными. Если отправитель сообщения блокируется до получения этого сообщения адресатом, то обмен считается синхронным, в противном случае - асинхронным