Архитектура операционной системы UNIX   ::   Бах Морис Дж.

Страница: 271 из 715



 resume_context(new_process);

 /*сюда программа не попадает! */

}

 /* возобновление выполнение процесса начинается отсюда */

Рисунок 6.16. Псевдопрограмма переключения контекста



6.4.4 Сохранение контекста на случай аварийного завершения



Существуют ситуации, когда ядро вынуждено аварийно прерывать текущий порядок выполнения и немедленно переходить к исполнению ранее сохраненного контекста. В последующих разделах, где пойдет речь о приостановлении выполнения и о сигналах, будут описаны обстоятельства, при которых процессу приходится внезапно изменять свой контекст; в данном же разделе рассматривается механизм исполнения предыдущего контекста. Алгоритм сохранения контекста называется setjmp, а алгоритм восстановления контекста — longjmp [19] . Механизм работы алгоритма setjmp похож на механизм функции save_context, рассмотренный в предыдущем разделе, если не считать того, что функция save_context помещает новый контекстный уровень в стек, в то время как setjmp сохраняет контекст в пространстве процесса и после выхода из него выполнение продолжается в прежнем контекстном уровне. Когда ядру понадобится восстановить контекст, сохраненный в результате работы алгоритма setjmp, оно исполнит алгоритм longjmp, который восстанавливает контекст из пространства процесса и имеет, как и setjmp, код завершения, равный 1.



6.4.

|< Пред. 269 270 271 272 273 След. >|

Java книги

Контакты: [email protected]