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


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


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

Функция FORK ищет "выключенный" процесс в массиве дескрипторов, (блокированный в состоянии OFF ), создает динамический массив для размещения его стека, после чего устанавливает на него указатели стека и заполняет его текущее состояние. Для этого используется определение структурированной переменной STACK , последовательность элементов в которой соответствует последовательности запоминания переменных в стеке функцией обработки прерывания типа void interrupt.


// Стек функции обработки прерывания ------------------


struct STACK
{ unsigned bp,di,si,ds,es,dx,cx,bx,ax,ip,cs,flgs; };
//--------------------------------------------------------


// Запуск процесса в режиме разделения времени


// Возвращает номер процесса


int FORK(void (*pf)())
{
int nt,n;
struct STACK *sp;
RUN++; // Запретить переключение процессов


for ( nt=-1,n=0; n &#60 NT; n++) // Искать свободный дескриптор


if (TASK[n].STATUS &#38 OFF) break;
if (n != NT)
{
nt = n; // Резервировать память под стек


TASK[nt].PS = (char *)malloc(SIZE);
// Текущий указатель стека с конца


// выделенной памяти (стек " вверх дном" )


sp = (struct STACK *)(TASK[nt].PS + SIZE - sizeof(struct STACK));
sp-&#62ax = sp-&#62bx = sp-&#62cx = sp-&#62dx = 0;
sp-&#62si = sp-&#62di = 0; // Сформировать начальное состояние стека


sp-&#62ds = sp-&#62es = _DS;
sp-&#62cs = _CS;
sp-&#62ip = (unsigned)pf; // Начало процесса - адрес функции


TASK[nt].SS = _DS; // Указатель на стек процесса в дескрипторе


TASK[nt].SP = (unsigned)sp;
TASK[nt].STATUS = 0; //Процесс - ГОТОВ


}
RUN--;
return(nt);
}

Функция возвращает номер созданного процесса в массиве дескрипторов. Функция-процесс, которая вызывает FORK , называется порождающим процессом и может использовать этот номер для дальнейшего взаимодействия с порожденным процессом.


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



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