А как же программист "Невидимых" регистров? - PullRequest
4 голосов
/ 14 марта 2010

Это "Visible Programmer" x86-64 регистров:

alt text
(источник: usenix.org)

А как насчет невидимых регистров?Только сейчас я узнал, что регистры MMU, таблица дескрипторов прерываний (IDT) использует эти невидимые регистры.Я учу эти вещи трудным путем.Есть ли какой-нибудь ресурс (книга / документация / и т. Д.), Который дает мне полную картину сразу?

Мне известны регистры, видимые программисту, и они удобны при программировании.Я просто хочу узнать о невидимых регистрах и их функциональности.Я хочу получить полную картину.Где я могу получить эту информацию?

РЕДАКТИРОВАТЬ:

Я хочу получить полную картину.Где я могу получить эту информацию?

Эти две книги помогли мне понять все эти детали низкого уровня.

  1. Основы организации компьютеров иДизайн ~ Сиварама П. Дандамуди - 1 издание (2003 )
  2. Организация и дизайн компьютеров: интерфейс аппаратного / программного обеспечения, 4-е издание, ~ Дэвид А. Паттерсон, Джон Л.Hennessy

Ответы [ 2 ]

3 голосов
/ 14 марта 2010

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

Interrupt    Handler
   0         divide_by_zero_handler
   1         debug_handler
   ..           ...
   13        general_exception_handler
   14        page_fault_handler
   ..           ...
   18        machine_check_handler

В этом контексте обработчики являются частью игрушечного ядра, и каждый из обработчиков устанавливается во время загрузки до загрузки кода пользовательской земли. (BIOS - это 16-битный код, то есть код реального режима), ядро ​​устанавливает обработчики, переключается в 32-битный защищенный режим, когда выдается любое из прерываний, соответствующий обработчик выполняется в зависимости от номера прерывания. Например, если было сгенерировано прерывание 14, ядро ​​выполнит page_fault_handler, проверит, не загрязнена ли страница и не находится ли она на диске, затем загрузит эту страницу в память, зафиксирует адреса и очистит грязный бит, выполнит IRET Инструкция прерывания возврата для продолжения, очистки флагов ....

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

Посмотрите здесь документацию Intel , которая дает превосходное и полное представление о программировании Intel ...

Edit: В старые времена DOS (который был 16-битным кодом и не очень хорошо защищен памятью), можно было перенаправить обработчики прерываний на ваши собственные обработчики, перекрывая таким образом исходную IDT, например, для такого прерывания, Interrupt. 9, который является прерыванием клавиатуры (в этом контексте прерывания BIOS) с использованием вызовов getvect(...) и setvect(...), вы также можете обрабатывать некоторые (не все прерывания процессора, в частности IDT 0 для деления на ноль) ... Хотя эти прерывания BIOS были очень похожи на прерывания процессора, они имели общую особенность, у обоих была таблица векторов прерываний (как это было известно тогда). Именно так программы TSR (Terminate Stay Resident) могли сохранять вход в DOS в результате прерываний BIOS, перенаправленных на обработчики TSR ...

1 голос
/ 14 марта 2010

Вам необходимо изучить справочное руководство по процессору для интересующего вас процессора. Вот справочное руководство по процессору Itanium .

...