Независимые и взаимодействующие процессы. Понятие критических ресурсов и критических секций
Одна из особенностей мультипрограммных ОС состоит в том, что при их функционировании в системе могут параллельно развиваться и существовать несколько вычислительных процессов.
С точки зрения внешнего наблюдателя, каждый из этих процессов является последовательным, если структура аппаратной части компьютера является однопроцессорной. Поскольку все процессы присутствуют в системе, и в частности, в ОП, одновременно, то с точки зрения работы ОС, их можно интерпретировать как параллельные. Это позволяет считать, что под параллельными процессами можно понимать не только процессы, одновременно выполняющиеся в разных процессорах или каналах ввода/вывода, но и те последовательные процессы, которые совместно используют (разделяют) один и тот же процессор, ОП, или другой системный ресурс, и хотя бы частично перекрываются во времени.
Мультипрограммная ОС на логическом уровне может быть представлена как совокупность последовательных процессов, которые, с одной стороны, конкурируют между собой за использование ресурсов и переходят из одного состояния в другое, а с другой стороны – действуют почти независимо друг от друга и устанавливают в необходимые моменты связи между собой путем передачи друг другу данных, сообщений, или синхронизирующих сигналов. В связи с этим, все параллельные процессы можно разделить на две группы:
1. Независимые – характеризуются тем, что множества данных которые они используют, не пересекаются друг с другом. Под данными нужно понимать общие области ОП, а также файлы внешней памяти. Независимые процессы не влияют на результаты работы друг друга, поскольку не могут изменить значения данных других процессов. Они могут быть лишь причиной задержек в исполнении других процессов, поскольку разделяют наряду с ними ресурсы системы;
2. Взаимодействующие процессы совместно используют различные системные ресурсы, и в частности, общие данные. Выполнение одного процесса этого типа может повлиять на выполнение другого.
Различные системные ресурсы могут совместно использоваться несколькими процессами. Такие ресурсы называются разделяемыми. В каждый момент времени, к ресурсу такого типа может иметь доступ только один из взаимодействующих процессов. Ресурсы системы, которые не допускают одновременного использования несколькими процессами, называются критическими. Если нескольким взаимодействующим процессам необходимо использовать критический ресурс, то в мультипрограммных ОС должна быть предусмотрена защита от одновременного доступа процессов к таким ресурсам. В противном случае, в ходе работы системы могут возникать ошибки (тупиковые ситуации/конфликты/клинчи), когда несколько процессов одновременно пытаются получить доступ к критическому ресурсу. Причиной возникновения таких ошибок является то, что процессы в мультипрограммных системах развиваются с разными абсолютными скоростями, и при этом, их относительные скорости неизвестны и не могут быть изменены в самом процессе. Поэтому влияние, которое оказывают друг на друга взаимодействующие процессы, в большинстве случаев непредсказуемо и невоспроизводимо.
Взаимодействовать друг с другом могут процессы двух типов:
1) конкурирующие;
2) совместно выполняющие общую вычислительную работу.
Конкурирующие процессы периодически получают доступ к разделяемым ресурсам, но при этом не обмениваются данными между собой. Процессы второго типа постоянно обмениваются данными друг с другом таким образом, что результаты вычислений одного процесса передаются другому. Возможна и обратная передача данных.
Для функционирования ОС потенциально опасным является, прежде всего, некорректное исполнение конкурирующих процессов, вследствие нерегламентированного доступа к критическим ресурсам. Для регламентации доступа, то есть определения правил такого доступа, в ОС должны быть созданы средства взаимного исключения, которые не позволяли бы двум конкурирующим процессам одновременно обращаться к одному и тому же разделяемому ресурсу. Смысл применения этих средств состоит в том, что до окончания периода обращения одного процесса к такому ресурсу должна быть исключена возможность обращения к нему программ из другого процесса.
Подобная ситуация, возникающая между двумя процессами, называется взаимным исключением.
Кроме средств взаимного исключения, в системе должны быть предусмотрены средства, синхронизирующие работу взаимодействующих процессов. Они необходимы для того, чтобы обеспечить возможность нормального обмена данными между такими процессами.
Те области в программах конкурирующих процессов, в которых происходит обращение к критическим ресурсам, называются критическими секциями (критическими интервалами).
Решение проблемы корректного доступа к критическим секциям заключается в организации такого доступа, когда только одному из процессов в один и тот же момент времени разрешается входить в свою критическую секцию.
Эта задача, в общем случае, является достаточно сложной, поскольку критическая секция – это не просто последовательность операторов программы, а последовательность действий, которые выполняются этими операторами. Если какой-либо процесс уже находится в своей критической секции, то другой процесс может продолжать свое исполнение, но без входа в критическую секцию. Взаимное исключение необходимо в том случае, когда процессы начинают одновременно обращаться к разделяемым ресурсам.
Если процессы выполнят операции, которые не приводят к конфликтам, то им обеспечивается возможность постоянного параллельного выполнения. Когда процесс выходит из своей критической секции, то одному из других процессов, ожидающих входа в свои критические секции, должно быть разрешено продолжение работы в своих секциях.
В современных системах, для решения проблемы взаимного исключения, а также связанных с ней проблем синхронизации и обмена данными, используются специальные средства, называемые средствами межпроцессных коммуникаций.
Эти средства делятся на две группы:
1) средства синхронизации процессов и потоков, в которые входят средства, обеспечивающие решение проблемы взаимного исключения;
2) средства обмена данными между процессами и потоками.