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