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


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


Заметим, что при порождении процесса переключения процессов запрещаются (устанавливается признак RUN ).

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


// Блокирование текущего процесса --------------------------


void BLOCK(int mask)
{
RUN++;
PT-&#62STATUS |= mask;
RUN--;
geninterrupt(TIMVEC);
}

С использованием этого механизма процесс может уничтожить себя, или "приостановиться" на заданное число тиков таймера. В последнем случае он устанавливает в своем дескрипторе счетчик, из которого в каждом прерывании диспетчером вычитается 1. Когда счетчик обнуляется, диспетчер сбрасывает признак блокировки, и процесс снова переходит в состояние готовности.


// Уничтожение текущего процесса -------------------------


void KILL()
{
RUN++;
asm cli
PT-&#62STATUS |= OFF;
free(PT-&#62PS);
RUN--;
asm sti
geninterrupt(TIMVEC);
}
// Тайм - аут процесса -------------------------------------


void WAIT( unsigned tt)
{
PT-&#62DELAY = tt;
BLOCK(TWAIT);
}

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


// Вычисление тайм - аутов в диспетчере -------------------


if (!NOCLOCK)
{
for (n=0; n&#60NT; n++)
if (TASK[n].STATUS &#38 TWAIT)
if (--TASK[n].DELAY ==0) TASK[n].STATUS &#38= ~TWAIT;
} NOCLOCK=0;

Основная функция main имеет в себе отдельные нюансы, которые могут быть поняты только в терминах процессов.


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



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