Подумайте о том, что происходит с указателем инструкций. Очевидно, что где-то там должна быть какая-то аппаратная поддержка.
Отложив в сторону современные методы «быстрых системных вызовов» (я вернусь к этому позже), обратите внимание, что системный вызов запрашивается просто путем выдачи определенного программного прерывания с определенными регистрами процессора, настроенными соответствующим образом. Итак, что происходит, зависит от аппаратного прерывания в процессоре.
Когда происходит прерывание, процессор автоматически помещает в стек ядра различные регистры и другую информацию (например, указатель команд и другие данные, которые могут быть изменены еще до того, как обработчик получит возможность их сохранить). Кроме того, если процессор в настоящее время не находится в режиме ядра, он помещает указатель стека и регистр сегмента стека в стек ядра и переходит в режим ядра, выполняя обработчик прерывания.
Теперь, если мы посмотрим на «быстрые системные вызовы» (инструкция SYSENTER), мы заметим, что она требует, чтобы некоторые регистры состояния машины были уже настроены, и она не сохраняет состояние (это часть что делает это быстрее, чем выдача прерывания). Вызывающий код отвечает за размещение в незатертых регистрах данных, необходимых ядру для выполнения системного вызова, и данных, необходимых ему для возврата в исходное состояние.
person
Anon.
schedule
17.01.2011