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


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


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


/ / Обработчик прерывания по таймеру ------------------------------
void interrupt TIMER(bp,di,si,ds,es,dx,cx,bx,ax,ip,cs,flgs)
{
static int n;
//----- Запоминание состояния задачи ----------------------


(*OLDTIM)(); // Старый обработчик прерывания


if (DISP) return; // Диспетчер занят - переключение невозможно


DISP++; // Занять диспетчер - защита от повторного входа


PT-&#62SP = _SP; // Сохранить текущий указатель стека


PT-&#62SS = _SS;
//----- Поиск готового процесса --------------------------


if (RUN) {DISP--; return; }
for (CT++,n=0; n &#60 NT; n++,CT++)
{ // Поиск " по кругу" от текущего процесса


CT %= NT; // Выбирается готовый - без битов блокировок


if (TASK[CT].STATUS ==0) break;
}
//----- Отсутствие готовых процессов ---------------------------


if (n == NT) printf("a-a-a-a-a-a-a-a");
//----- Восстановление состояния нового процесса------------


PT = TASK + CT; // Указатель на новый активный процесс


_SS = PT-&#62SS; // Установить стек процесса


_SP = PT-&#62SP;
DISP--;
} // Выйти из прерывания через стек нового


// процесса - переключиться на новый

Обработчик прерывания от таймера выполняет функции ДИСПЕТЧЕРА параллельных процессов. Поскольку в работе системы могут возникнуть ситуации, когда переключение процессов запрещено, и, наоборот, при работе диспетчера следует защититься от выполнения некоторых действий, которые могут быть связаны с изменением данных в дескрипторах процессов, то в программу вводятся переменные RUN , запрещающая переключение задач, и DISP , индицирующая, что в данный момент работает диспетчер.

Затем в модели определяется функция FORK , которая создает создает новый процесс. Поскольку система процессов функционирует в рамках одной Си-программы, то в качестве процесса естественным образом определяется функция, указатель на которую передается в вызове FORK .


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



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