Системное программное обеспечение персональных ЭВМ


Пример 7 - часть 3


Секция инициализации процесса представляет собой цикл, который повторяется до тех пор, пока не будет установлен флаг инициализации этого процесса. При инициализации этот цикл будет прерван таймером, обработчик прерываний запомнит состояние процесса в его стеке (это состояние будет соответствовать нахождению внутри цикла) и установит флаг инициализации. После возврата из прерывания произойдет выход из цикла и - поскольку общий флаг еще не установлен - выход из процесса. После инициализации всех процессов устанавливается общий флаг, и основная функция входит в цикл while(initf[0]==1). Этот цикл будет прерван таймером, который переключит регистры SS:SP на стек процесса 1 и запишет в счетчик тиков квант процесса 1. Возврат из прерывания произойдет в процесс 1, в цикл инициализации, но поскольку теперь все флаги уже установлены, управление перейдет в прикладную часть процесса 1. Обработчик прерываний будет подсчитывать тики и по исчерпании процессом 1 его кванта переключится на процесс 2 и т.д. Условием завершения работы является выполнение 10 переключений (нетрудно ввести другое условие, например, нажатие любой клавиши), по этому условию восстанавливается в регистрах SS:SP адрес стека основной программы.




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