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


Модель системы процессов, работающих в разделении времени - часть 5


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


void main()
{ int n;
RUN = DISP = 0;
TASK[0].STATUS=0;
for (n=1; n &#60 NT; n++) TASK[n].STATUS = OFF;
RUN++;
CT = 0;
PT = TASK;
OLDTIM = getvect(TIMVEC);
setvect(TIMVEC,TIMER);
// В момент первого прерывания от таймера main становится


// нулевым процессом (это можно сделать и принудительно)


geninterrupt(TIMVEC);
textbackground(BLACK);
clrscr();
FORK(consume);
FORK(produce);
RUN--;
// В данном примере " нулевой" процесс ничего не делает, хотя


// он может выполнять все функции обычного процесса


// (geninterrupt используется для принудительного переключения


// процессов, а NOCLOCK вводится в диспетчер, чтобы не учитывать


// такие принудительные прерывания для ожидающих (блокированных)


// процессов)


for(STOP=0;!STOP;)
{ NOCLOCK++; geninterrupt(TIMVEC); }
setvect(TIMVEC,OLDTIM);
clrscr();
}




Начало  Назад  Вперед



Книжный магазин