Исключения в операционной системе

В промежуток времени между началом работы обработчика исключения в операционной системе и моментом, когда операционная система сохранит все состояние процесса, операционная система особенно уязвима. Например, если в момент обработки в операционной системе первого исключения случится какое-нибудь другое исключение, блок управления перепишет значение счетчика команд исключения, не позволяя вернуться к той инструкции, которая вызвала ошибку отсутствия страницы! Нужно предотвратить эту аварийную ситуацию путем запрещения и разрешения исключений. При возникновении первого исключения процессор устанавливает бит, запрещающий все другие исключения; это может произойти одновременно с установкой процессором бита супервизора. Затем операционная система сохранит достаточную долю информации о состоянии, которая позволит ей все восстановить, если случится еще одно исключение, а именно, значение регистров счетчика команд исключения (ЕРС) и причины исключения (Cause). ЕРС и Cause являются двумя специальными регистрами управления, помогающими обрабатывать исключения, промахи при обращении к TLB и ошибки отсутствия страницы; остальные регистры показаны в табл. 5.5. Затем операционная система может вновь разрешить исключения. Эти шаги гарантируют то, что исключения не заставят процессор утратить какое-нибудь состояние и из-за этого потерять возможность возобновления выполнения прерванной инструкции.

Как только операционной системе станет известен виртуальный адрес, вызвавший ошибку отсутствия страницы, она должна выполнить следующие три шага:

1. Отыскать запись в таблице страниц, используя виртуальный адрес, и найти место на диске той страницы, к которой было обращение.

2. Выбрать заменяемую физическую страницу; если выбранная страница подвергалась изменениям, она должна быть записана обратно на диск перед тем, как в эту физическую страницу будет помешена новая виртуальная страница.

3. Запустить чтение, чтобы доставить страницу, к которой было обращение, с диска в выбранную физическую страницу.

Разумеется, этот последний шаг займет миллионы тактовых циклов процессора (и это время удвоится, если заменяемая страница подвергалась изменениям); соответственно, операционная система выберет, как правило, другой процесс для выполнения процессором, пока не завершится обращение к диску. Поскольку операционная система сохранила состояние процесса, она может свободно передать управление процессором другому процессу.

Когда чтение страницы с диска завершится, операционная система может восстановить состояние процесса, который изначально вызвал ошибку отсутствия страницы, и выполнить инструкцию, возвращающую из исключения. Эта инструкция переключит процессор из режима ядра в режим пользователя, а также восстановит значение счетчика команд. Затем пользовательский процесс перезапустит инструкцию, потерпевшую неудачу, успешно обратится к странице и продолжит свое выполнение.





Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: