какова роль ворот (ворота задач, системные ворота) - PullRequest
0 голосов
/ 15 декабря 2018

Выполнение исключения выполняется следующим образом:

  1. Сохраняет регистры, которые могут использоваться высокоуровневой функцией C в стеке.
  2. Выпускает cld инструкция для очистки флага направления DF из eflags, таким образом гарантируя, что автоматическое увеличение регистров edi и esi будет использоваться со строковыми инструкциями.[*]

    [*] «Строковая инструкция» на одном языке ассемблера, такая как rep;movsb, способна воздействовать на весь блок данных (строку).

  3. Копирует код аппаратной ошибки, сохраненный в стеке, по адресу esp+36 в edx.Сохраняет значение -1 в том же месте стека.Как мы увидим в разделе «Повторное выполнение системных вызовов» в главе 11, это значение используется для отделения 0x80 исключений от других исключений.
  4. Загружает edi с адресом старшего-уровень do_handler_name( ) Функция C сохранена в стеке в расположении esp+32;записывает содержимое es в эту ячейку стека.
  5. Загрузки в eax регистрируют текущую верхнюю ячейку стека режима ядра.Этот адрес идентифицирует ячейку памяти, содержащую последнее значение регистра, сохраненное на шаге 1.
  6. Загружает селектор пользовательских данных в регистры ds и es.
  7. Вызывает высокий уровеньФункция C, адрес которой теперь хранится в edi.

На этом шаге 6> почему в этом контексте требуется загрузка селектора сегмента данных и какова роль шлюзов в этом контексте?

также для прерываний, код ->

for (i = 0; i < NR_IRQS; i++)
  if (i+32 != 128)
    set_intr_gate(i+32,interrupt[i]);
...