Инструкция TRAP запускается только системным вызовом? - PullRequest
0 голосов
/ 05 июня 2019

Начиная изучать ОС, нас спросили, что такое операция TRAP и когда она вызывается.

Попытка обосновать свой ответ, прочитав «Современные операционные системы» \ Tanenbaum (ch.1) I 'мы заметили 2 понятия, и вот что я понял:

a) «TRAP» - операция, которая вызывается после того, как пользовательская программа выполняет системный вызов:

syscall ->

компилятор помещает параметры в стек и сохраняет ключ syscall в регистре ->

вызов компилятора библиотечной функции ->

вызов библиотечной функции TRAP ->

Переключатель TRAP изрежим пользователя в режиме ядра ->

ОС вызывает соответствующий обработчик системного вызова.

b) «trap» - любая ситуация переключения режима с пользователя на ядро.Не обязательно по TRAP (но по исключениям, таким как деление на 0, работа с числами с плавающей точкой ... и ... еще ... что я не знаю ..)

, поэтому мои Qs:

  1. TRAP и trap - это 2 разных (хотя и близких) понятия?

  2. может ли ОС переключаться из режима пользователя в режим ядра (trap) другими способами, кроме TRAP?

  3. (продолжение (2)) Что вызывает вызов TRAP рядом с системным вызовом?

1 Ответ

0 голосов
/ 09 июня 2019

Как правило, инструкция может вызывать два типа ИСКЛЮЧЕНИЙ: НЕИСПРАВНОСТИ и ЛОТКИ. Исключения и прерывания - это два способа перехода в режим ядра на большинстве процессоров.

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

Разница в том, что команда, которая вызывает ошибку, может быть перезапущена. Инструкция, которая вызывает ловушку, не может быть.

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

У большинства процессоров есть инструкции для явного вызова исключений.

...