Жмакин А.П. Архитектура ЭВМ (2006) (1186252), страница 32
Текст из файла (страница 32)
mov еах, dr6 mov drl, еах
В регистре DR7 предусмотрен флаг GD, который, будучи установленным, обеспечивает "сверхзащиту" всех обращений к регистрам отладки, вызывая при любой попытке обращения к этим регистрам прерывание 1. Для идентификации этой ситуации в DR6 предусмотрен бит BD. Он устанавливается в 1, если следующая команда будет считывать или записывать в один из восьми регистров отладки. Характерно, что при вызове процедуры обработчика с вектором 1 бит GD автоматически сбрасывается, что обеспечивает обработчику возможность доступа к регистрам отладки.
Процессор никогда не сбрасывает биты регистра состояния отладки DR6, поэтому обработчик особого случая должен сбрасывать их программно, иначе причины особых случаев отладки будут накапливаться.
Возможно, при возникновении особого случая отладки в состоянии 1 будут находиться несколько битов DR6 (что возможно при разрешении аппаратных контрольных точек) или, наоборот, в DR6 не окажется единичных битов. Последнее возможно, если возникло внешнее прерывание с вектором 1 или выполняется команда inti.
Регистр управления отладкой DR7 содержит для каждой из четырех контрольных точек следующие поля, определяющие ее характеристики: Li, Gi, RW/ и LEN/, а также два однобитовых поля LE и GE, определяющие свойства, общие для всех контрольных точек. Назначение этих полей приведены в табл. 7.2. Кроме того, в регистре DR7 бит 13 — GD — предназначен для включения режима защиты регистров отладки от любого обращения со стороны программ пользователя.
Контрольная точка может быть локальной (в пределах одной задачи) или глобальной — в зависимости от значений битов Li и G/. Допускается одновременное значение Li = Gi = 1 или Li ■ Gi = 0. В первом случае это эквивалентно G/ = 1, а во втором — контрольная точка запрещена и соответствие линейного адреса из регистра DR/ адресу команды не вызывает особого случая (но В/ в регистре DR6 устанавливается в 1).
Аппаратные контрольные точки по командам устанавливаются путем загрузки в один из регистров DR/ линейного адреса требуемой команды, установки в 00 соответствующих полей RW/' и LENj, установки в 1 бита Li и/или Gi. После этого процессор начинает контролировать устройство предвыборки команд. Когда фиксируется равенство адреса команды и содержимого одного из "разрешенных" регистров DR/, хранящих контрольную точку по командам, формируется особый случай отладки, причем в DR6 устанавливается в 1 бит В/.
Адреса команд в регистрах DR0—DR3 должны быть 32-разрядными линейными, а не логическими (селектор : смещение) или физическими. Линейный адрес не зависит от страничного преобразования, поэтому контрольная точка действует даже тогда, когда целевая команда участвует в свопинге и отображается на различные адреса физической памяти.
Если контрольная точка установлена как локальная, она сбрасывается при переключении задачи, причем значение DR7 не сохраняется в TSS, поэтому при восстановлении задачи контрольные точки не возобновляются. При необходимости следует предусмотреть программное возобновление контрольных точек. Для этого можно в расширении сегмента TSS той задачи, в которой определены локальные контрольные точки, записать значения DR0—DR3 и DR7, а так же установить в TSS бит Т = 1. При переходе к такой задаче вызывается обработчик особого случая, который и восстановит значения регистров DR из сегмента TSS.
Аппаратные контрольные точки по командам являются нарушениями, т. е.| процессор включает в стек адрес команды, вызвавшей нарушение, и обработчик особого случая возвращает управление на ту же команду. Поскольку аппаратные контрольные точки по команде проверяются до выполнения самой команды, процессор должен вновь сформировать особый случай. Необходимо обойти данную команду, для этого используется флаг возобновления RF в регистре EFLAGS. Процессор автоматически устанавливает RF = 1 при возникновении любого нарушения, включая и аппаратные контрольные точки по командам. Аппаратные прерывания по входам INTR и NMI, а так же программные ловушки и аварии не воздействуют на флаг RF. Когда RF = 1, процессор игнорирует особый случай аппаратной контрольной точки по командам, а после первой же команды, которая выполнена без особых случаев, процессор сбрасывает RF.
Аппаратные контрольные точки по данным устанавливаются с помощью тех же регистров отладки DR. Процессор формирует особый случай отладки как ловушку, когда происходит обращение к данным по установленным в DR адресам. Разрешается совместное применение контрольных точек по командам и по данным, причем возможно произвольное назначение типа контрольной точки (поле RW/ в регистре DR7).
Процессор контролирует выравнивание данных, если их длина, указанная в поле LEN/, равна слову или двойному слову. В этом случае при сравнении текущего адреса сегмента данных с адресом контрольной точки игнорируются один или два младших бита регистра DR/.
Конвейерная архитектура старших моделей х$6 обеспечивает одновременную обработку нескольких команд. Случается, что контрольная точка по данным фиксируется только после выполнения нескольких следующих команд. В регистре управления отладкой DR6 предусмотрены биты, задающие локальную LE и глобальную GE "точность" определения контрольной точки по данным. Будучи установленными в 1, эти биты замедляют внутренние операции процессора таким образом, что сообщают об обращении по контролируемому адресу данных точно в тот момент, когда происходит обращение к памяти.
Биты LE, GE действуют только на контрольные точки по данным, являются общими для всех таких точек, причем LE автоматически сбрасывается при переключении задачи, a GE может быть сброшен лишь программно.
Регистрация нескольких особых случаев
Если команда, на которую настроена контрольная точка, вызывает данные по контролируемому адресу, процессор правильно сформирует два особых случая отладки. Первый — по команде — является нарушением, и обработчик этого особого случая возвращает управление той же команде. При выполнении команды второй особый случай не возникает (см. выше назначение бита RF), зато фиксируется ловушка по данным. Причина текущего особого случая фиксируется в DR6.
7.5. Увеличение быстродействия процессора
Одним из самых распространенных способов определения производительности процессора является оценка времени Т решения некоторой (тестовой) задачи. Очевидно,
где N — количество выполненных при решении задачи машинных команд; S — среднее количество тактов, приходящихся на выполнение одной команды; / — тактовая частота процессора.
Если длительности различных команд (в тактах) существенно отличаются друг от друга, то более точно можно оценить значение Т по выражению
где Sj — число тактов z-й команды.
Используются и более точные (и, соответственно, более сложные) методы оценки производительности [7, 11, 12], однако и из выражений (7.1), (7.2) видны пути увеличения производительности процессора:
□ увеличение тактовой частоты (решения лежат в области технологии СБИС);
□ сокращение длины программы (совершенствование технологии программирования, разработка оптимизирующих компиляторов);
□ сокращение числа тактов, приходящихся на выполнение одной команды.
Последнее возможно за счет усложнения схемы процессора, при этом знач тельное усложнение может привести к сокращению числа тактов команд при увеличении "глубины схемы", что повлечет за собой увеличение дл: тельности такта, так что выигрыш может обернуться проигрышем.
Магистральным путем увеличения производительности ЭВМ можно счит параллелизм на различных уровнях.
Существуют две основные формы параллелизма [11]:
□ параллелизм на уровне процессов;
□ параллелизм на уровне команд.
В первом случае над одной задачей могут одновременно работать несколько процессоров или других устройств ЭВМ.
Во втором случае параллелизм реализуется в пределах отдельных команд.
Обычно стремятся совмещать во времени процедуры обращения к памяти обработки информации, параллельно выполнять арифметические операци сразу над несколькими (или даже всеми) разрядами операндов, одновременн* выполнять несколько последовательных команд программы (разумеется, н разных стадиях) и т. п.
Уже в младшей модели семейства *86 — микропроцессоре 8086 предусма' ривалась одновременная работа двух основных устройств — обработки да ных и связи с магистралью. Подобный механизм (с модификациями) сохра нился и в старших моделях семейства.
Особенно эффективным способом организации параллельных операций компьютерной системе является конвейерная обработка команд.
Далее мы кратко рассмотрим некоторые из перечисленных методов увели ния производительности процессора. Более подробную информацию по этим вопросам можно найти, например, в [11, 12].
7.5.1. Конвейеры
При отсутствии конвейера процессор выполняет программу, по очереди вь" бирая из памяти и активизируя ее команды.
Процесс обработки команды может быть разбит, например, на следующ шаги (стадии):
□ F — выборка (от англ. fetch) — чтение команды из памяти;
□ D — декодирование (от англ. decode) — декодирование команды;
□ А— формирование адресов (от англ. address generate) и выборка оп рандов;
□ Е— выполнение (от англ. execute)— выполнение заданной в команде операции;
□ W — запись (от англ. write) — сохранение результата по целевому адресу.
Приведенное разбиение не является единственно возможным — в некоторых случаях рассматривают четырехстадийный командный цикл, иногда (например, для процессоров, реализующих команды над числами с плавающей запятой) — восьмистадийный и др.
Для реализации каждой из стадий командного цикла в процессоре предусмотрено соответствующее оборудование (регистры, дешифраторы, сумматоры, управляющие автоматы или их фрагменты), причем операционные элементы разных стадий обычно слабо пересекаются между собой. Поэтому когда очередная команда завершает действия на одной стадии, например F, и переходит на следующую — D, то оборудование стадии F "простаивает" и может быть использовано для чтения следующей команды. Таким образом, очередная команда может начинать выполнение, не дожидаясь окончания командного цикла предыдущей команды.
При рассмотрении пятистадийного командного цикла одновременно на разных стадиях может выполняться до пяти команд. Организация пятистадийного конвейера потребует дублирования некоторых операционных элементов на разных стадиях (например, регистра команд PC) и усложнение схемы управления, однако игра стоит свеч.
Очевидно, очередная команда может перейти с одной стадии командного цикла на другую при выполнении двух условий:
□ действия команды на текущей стадии завершены;
□ предыдущая команда освободила оборудование следующей стадии.
При условии, что каждая стадия выполняется в любой команде одинаковое количество тактов (например, один), конвейер работает идеально, и одновременно всегда выполняются пять команд (для пятистадийного конвейера).
Для большинства процессоров т. н. CISC'-архитектуры (к ним относятся, в частности, процессоры семейства *86) такая идеальная ситуация складывается далеко не всегда.
Действительно, команда, извлекаемая из памяти на стадии F, может иметь разную длину и, следовательно, извлекаться из памяти за разное число машинных циклов.
В зависимости от заданного в команде способа адресации операндов время выполнения стадии А может быть существенно различным (сравните непосредственную адресацию и косвенно-автоинкрементную). Расположение адресуемых операндов (и размещение результата) в памяти разного уровня так же существенно влияет на время реализации стадии А (и стадии W).
Наконец, на стадии Е время выполнения операции зависит не только от типа операции (короткие— сложение, конъюнкция,..., длинные— умножение, деление), но даже иногда и от значений операндов.
Учитывая отмеченные выше обстоятельства, можно сказать, что конвейеры процессоров с классической CISC-архитектурой редко работают "на полную мощность", находясь значительную часть времени в ожидании завершения "длинных" операций.
Желание увеличить производительность конвейеров привело к появлению процессоров т. н. RISC'-архитектуры, из систем команд которых были исключены все факторы, тормозящие реализацию командного цикла — длинные команды, сложные способы адресации, размещение операндов в ОЗУ. К особенностям RISC-архитектуры можно отнести:
□ форматы всех команд имеют одинаковую длину, в крайнем случае, разнообразие длин форматов ограничивается двумя вариантами;