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


           

Если таковой найден, то он


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



/ / Обработчик прерывания по таймеру ------------------------------
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 .

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





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