Ускоренный курс в режиме ядра в одном переполнении стека ответ
Хорошие вопросы!(Вопросы для интервью?)
- Что происходит (подробно), когда поток выполняет системный вызов, вызывая прерывание 80?
Операция int $ 80 неопределеннокак вызов функции.Процессор «берет ловушку» и перезапускается по известному адресу в режиме ядра, как правило, с другим режимом MMU.Ядро сохранит многие регистры, хотя ему не нужно сохранять регистры, которые программа не ожидает сохранения при обычном вызове функции.
- Какую работу Linux выполняет со стеком потокаи другое состояние?
Обычно ОС сохраняет регистры, которые ABI обещает не изменять во время вызовов процедур.Стек останется прежним;ядро будет работать на стеке ядра для каждого потока, а не на стеке пользователя для каждого потока.Естественно, какое-то состояние изменится, в противном случае не будет никаких причин делать системный вызов.
- Какие изменения внесены в процессор для перевода его в режим ядра?
Это обычно полностью автоматически.Процессор, как правило, имеет команду программного прерывания, которая немного похожа на операцию функционального вызова.Это приведет к переключению в режим ядра в контролируемых условиях.Как правило, ЦП изменяет своего рода защитный бит PSW, сохраняет старый PSW и ПК, запускается с хорошо известного адреса вектора перехвата и может также переключаться на другую схему защиты и отображения управления памятью.
- После запуска обработчика прерываний, как управление восстанавливается обратно в вызывающий процесс?
Там будет какая-то инструкция «возврат из прерывания» или «возврат из прерывания», обычно такая, чтобудет действовать как сложная инструкция возврата функции.Некоторые процессоры RISC делали очень мало автоматически и требовали специального кода для выполнения возврата, а некоторые процессоры CISC, такие как x86, имеют (никогда не используемые) инструкции, которые выполняли бы десятки операций, документированных на страницах псевдокода руководства по архитектуре для настройки возможностей.
- Что делать, если системный вызов не может быть выполнен быстро: например, чтение с диска.Как обработчик прерываний отказывается от управления, чтобы процессор мог выполнять другие действия во время загрузки данных и как он затем снова получает управление?
Само ядро является многопоточным, как многопоточная пользовательская программа.,Он просто переключает стеки (потоки) и некоторое время работает над чужим процессом.