Информатика и технология программирования

       

Понятие процессаПроцесс и программа


Понятие вычислительного процесса является важнейшим в системном программировании. На дилетантском уровне процесс может быть определен как работающая программа.

Если проводить аналогию с языками высокого уровня, то процесс - это выполнение функции с заданными локальными данными. Некоторое представление о процессе дает рекурсивная функция. В ней уже есть разница между текстом программы и ее выполнением - одному экземпляру текста программы соответствует несколько экземпляров вызова функции:


// Текст:


void proc(int vv)
{... if (...) proc(x); }
// Реализация:


void proc1(int vv1)
{...
if (...) proc2(x1);
}
void proc2(int vv2)
{...
if (...) proc3(x2);
}
void proc3()
{ ... }

Однако вызовы рекурсивной функции происходят последовательно, а процессы "существуют" параллельно или хотя бы независимо друг от друга. Но этот пример все же показывает принципиальную разницу между текстом программы и ее выполнением - то есть между программой и процессом.

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


strust message { ... данные ... }; // сообщение


void f1() // программа - процесс


{
while (1) // цикл работы процесса


{ // процесс f1, ожидающий сообщения


message *p = get_message(f1) ;


send_message(p,f3); // передать сообщение процессу f3

}}
void f2() // автономный процесс,

{ while(1) { ... }} // ни с кем не взаимодействующий

void f3() // процесс f3, принимающий сообщение

{
while (1)
{
message *p = get_message(f3);
delete p;
}}
void f4() // процесс f4, создающий и перeдающий

{ // сообщение процессу f1

while (1)
{ ...
message *p = new message;
send_message(p,f1);
}}







Если предположить, что каждая функция способна выполняться со своей скоростью независимо от остальных, то это будет довольно близко к концепции
АСИНХРОННЫХ КВАЗИПАРАЛЛЕЛЬНЫХ ВЗАИМОДЕЙСТВУЮЩИХ ПРОЦЕССОВ . Термин КВАЗИПАРАЛЛЕЛЬНЫЕ означает, что для их работы совсем нет необходимости в наличие отдельного процессора для каждого процесса. Достаточно обеспечить возможность переключения - поочередного выполнения частей этих процессов на одном процессоре (РЕЖИМ РАЗДЕЛЕНИЯ ПРОЦЕССОРА).


Содержание раздела