Архитектура Unix

. Алгоритм приостанова процесса



Рисунок 6.31. Алгоритм приостанова процесса



алгоритм sleep входная информация: (1) адрес приостанова (2) приоритет выходная информация: 1, если процесс возобновляется по сиг- налу, который ему удалось уловить; вызов алгоритма longjump, если процесс возобновляется по сигналу, который ему не удалось уловить; 0 - во всех остальных случаях; { поднять приоритет работы процессора таким образом, чтобы заблокировать все прерывания; перевести процесс в состояние приостанова; включить процесс в хеш-очередь приостановленных процес- сов, базирующуюся на адресах приостанова; сохранить адрес приостанова в таблице процессов; сделать ввод для процесса приоритетным; если (приостанов процесса НЕ допускает прерываний) { выполнить переключение контекста; /* с этого места процесс возобновляет выполнение, когда "пробуждается" */ снизить приоритет работы процессора так, чтобы вновь разрешить прерывания (как было до приостанова про- цесса); возвратить (0); } /* приостанов процесса принимает прерывания, вызванные сигналами */ если (к процессу не имеет отношения ни один из сигналов) { выполнить переключение контекста; /* с этого места процесс возобновляет выполнение, когда "пробуждается" */ если (к процессу не имеет отношения ни один из сигна- лов) { восстановить приоритет работы процессора таким, каким он был в момент приостанова процесса; возвратить (0); } } удалить процесс из хеш-очереди приостановленных процес- сов, если он все еще находится там; восстановить приоритет работы процессора таким, каким он был в момент приостанова процесса; если (приоритет приостановленного процесса позволяет принимать сигналы) возвратить (1); запустить алгоритм longjump; }










Содержание раздела