home   contents  previous      next        up

Процессы и сопроцессы

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

Воспользуемся следующим неформальным определением. Будем понимать под процессом последовательность действий, составляющих некоторое вычисление, которая характеризуется:

Будем различать, где это необходимо, полновесные и легковесные процессы.

Полновесные процессы (tasks - задачи) - это процессы, выполняющиеся внутри защищенных участков памяти операционной системы, то есть имеющие собственные виртуальные адресные пространства для статических и динамических данных. В мультипрограммной среде управление такими процессами тесно связанно с управлением и защитой памяти, поэтому переключение процессора с выполнения одного процесса на выполнение другого является дорогой операцией.

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

Понятие легковесного процесса появилось не так давно, и за ним еще не закрепился достаточно удачный термин. Прямой перевод thread как нить (управления) не кажется хорошим названием. Поэтому мы используем термин сопроцесс для обозначения легковесного процесса. Такое название указывает на то, что это процесс, причем в чем-то специфический, сосуществующий одновременно с другим процессом. Не следует путать сопроцесс с сопрограммой, хотя это достаточно близкие понятия. В механизме сопрограмм необходимо явно с помощью соответствующего оператора передавать управление от одной сопрограммы к другой. Сопрограмма вызывается подобно подпрограмме, но в отличие от подпрограммы каждый вызов (кроме первого) сопрограммы возобновляет е§ выполнение с точки последнего возврата (оператора, непосредственно следующего за оператором обращения к другой сопрограмме).


home   contents  previous      next        up