Если таковой найден, то он
Если таковой найден, то он устанавливает его указатель стека и таким образом переключается на его запомненное состояние в момент предыдущего прерывания. При выходе из прерывания процесс уже будет восстановлен "физически", то есть продолжит свое выполнение с точки прерывания.
/ / Обработчик прерывания по таймеру ------------------------------
void interrupt TIMER(bp,di,si,ds,es,dx,cx,bx,ax,ip,cs,flgs)
{
static int n;
//----- Запоминание состояния задачи ----------------------
(*OLDTIM)(); // Старый обработчик прерывания
if (DISP) return; // Диспетчер занят - переключение невозможно
DISP++; // Занять диспетчер - защита от повторного входа
PT->SP = _SP; // Сохранить текущий указатель стека
PT->SS = _SS;
//----- Поиск готового процесса --------------------------
if (RUN) {DISP--; return; }
for (CT++,n=0; n < 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->SS; // Установить стек процесса
_SP = PT->SP;
DISP--;
} // Выйти из прерывания через стек нового
// процесса - переключиться на новый
Обработчик прерывания от таймера выполняет функции ДИСПЕТЧЕРА параллельных процессов. Поскольку в работе системы могут возникнуть ситуации, когда переключение процессов запрещено, и, наоборот, при работе диспетчера следует защититься от выполнения некоторых действий, которые могут быть связаны с изменением данных в дескрипторах процессов, то в программу вводятся переменные RUN , запрещающая переключение задач, и DISP , индицирующая, что в данный момент работает диспетчер.
Затем в модели определяется функция FORK , которая создает создает новый процесс. Поскольку система процессов функционирует в рамках одной Си-программы, то в качестве процесса естественным образом определяется функция, указатель на которую передается в вызове FORK .
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий