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


           

в том, что она начинает


Дело в том, что она начинает выполняться в режиме обычной последовательной программы и в этом режиме готовит структуры данных для системы процессов. Затем происходит неявное переключение в режим квазипараллельных процессов, причем 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();
}


Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий