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


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


Основная идея переключения процессов и ее связь с прерыванием были обсуждены выше. В модели используется следующий принцип: если функция обработки прерывания на Си (типа void interrupt f()) сохраняет в стеке состояние выполняемой Си-программы, то простое сохранение текущего указателя стека и переустановка сохраненного указателя внутри функции обработки прерывания приводит при выходе из прерывания к переключению от одного процесса к другому.

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


// Дескриптор процесса -------------------------------------


struct PROCESS
{
unsigned SS,SP; // Указатель стека процесса


char *PS; // Область стека процесса


unsigned STATUS; // Слово состояния процесса


unsigned DELAY; // Тайм - аут


}
TASK[NT], // Массив дескрипторов процессов


*PT; // Указатель на дескриптор текущего процесса


Далее в процессе определяется его текущее состояние. Согласно классической схеме он может находиться в следующих основных состояниях:



-АКТИВЕН - в данный момент выполняется (или прерван),



-ГОТОВ - может быть выполнен ;



-БЛОКИРОВАН - не может быть выполнен по каким-либо внешним причинам.

На активный процесс в модели ссылается указатель PT. В слове состояния процесса STATUS определяются биты блокировки, каждый из которых отмечает одну из причин блокировки. Их отсутствие определяет состояние готовности процесса к выполнению.


// Биты блокировки процесса ---------------------------


&#35define TWAIT 1 // Тайм - аут процесса


&#35define IO 2 // Ввод - вывод


&#35define MESS 4 // Ожидание сообщения


&#35define SEM 8 //
Семафор


&#35define OFF 16 // Не активен

Идея переключения процессов реализована в обработчике прерываний по таймеру. В момент прерывания (которое происходит 18.2 раз в секунду) он запоминает указатель стека текущего процесса, после чего ищет, начиная с процесса, следующего за текущим, активный процесс.


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



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