Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Энциклопедия PC

.pdf
Скачиваний:
30
Добавлен:
13.03.2015
Размер:
8.94 Mб
Скачать

196 Глава5. Процессоры

Есть еще так называемые программные прерывания, но они отнюдь не нарушают последовательность инструкций, предписанную программистом. Поэтому прерываниями они, по сути, не являются — это всего лишь особый способ вызова системных сервисов BIOS (см. п. 15.4) и операционной системы. И, наконец, последовательность инструкций может изменяться по сигналу аппаратного сброса или инициализации процессора. С этого, собственно, и начинается функционирование компьютера: процессор переводится в исходное состояние и «выпускается» в работу. При этом указатель инструкций совместно с другими регистрами, участвующими в формировании адреса инструкции, генерирует адрес, на 15 байт меньший максимального физического адреса. По этому адресу должна располагатьсяинструкция, скоторойначинаетсяинициализациякомпьютера.

В компьютере обязательно должен присутствовать центральный процессор (CPU — Central Processing Unit), который исполняет основную программу. В многопроцессорной системе функции центрального процессора распределяются между несколькими обычно идентичными процессорами для повышения общей производительности системы, а один из них назначается главным. В помощь центральному процессору в компьютер часто вводят сопроцессоры, ориентированные на эффективное исполнение каких-либо специфических функций. Широко распространены математические сопроцессоры, обрабатывающие числовые данные в формате с плавающей точкой; графические сопроцессоры, выполняющие геометрические построения и обработку графических изображений; со- процессорыввода-вывода, разгружающиецентральныйпроцессоротнесложных, но многочисленных операций взаимодействия с устройствами. Возможны и другие сопроцессоры, однако все они несамостоятельны — исполнение основного вычислительного процесса осуществляется центральным процессором, который в соответствии с программой выдает «задания» сопроцессорам на исполнение их «партий».

Процессор фон-неймановской машины фактически может выполнять только один процесс, передавая управление от инструкции к инструкции согласно исполняемойпрограмме. Приэтоммогутисполнятьсяпереходы, ветвленияивызовы процедур, но вся эта цепочка запрограммирована разработчиком программы. Для реакции на события, асинхронные по отношению к исполняемому в данный момент процессу, используют аппаратные прерывания. Нюансы обработки прерыванийвPC рассмотренывп. 3.4, аихпроцессорнаясторона— вп. 5.2.3.

5.1.1. Переключениезадачивиртуальныемаштны.

Прерывания используют и для переключения задач в многозадачных системах. Пусть, имеются два процесса (например, две прикладные программы), которые должны выполняться как бы одновременно (по-настоящему одновременно один фон-неймановский процессор их выполнить не может). Можно запустить один процесс, а через некоторое время его работы по аппаратному прерыванию (от таймера) сохранить в памяти образ его текущего состояния (все регистры, про- граммно-доступныеэтомупроцессу) изапуститьдругойпроцесс. Черезнекоторое времяпоследующемупрерываниювыполнитьобратноепереключение: со-

5.1. Исполнениепрограммногокода 197

хранить состояние второго процесса (в другом месте памяти), загрузить в регистры процессора образ состояния первого процесса и продолжить его выполнение. Эти переключения задач следует выполнять в течение исполнения обеих программ с частотой, создающей у пользователя иллюзию непрерывности и одновременности. Понятно, что ресурсы процессора (производительность) в этом случае делятся между задачами, пропорционально выделяемым им квантам времени. Чтобы пользователя такая производительность процессов удовлетворяла (а еще учтем накладные расходы на сохранение и восстановление образов при переключениях), у процессора должна быть достаточная мощность. Процессоры семейства х86, начиная со второго и особенно с третьего (386) поколения, имеют встроенные средства многозадачности (число задач почти не ограничено), работающие в защищенном режиме. Переключение задач производится по сигналу прерывания от таймера совершенно «прозрачно» для процессов, работающих псевдопараллельно. Благодаря этой прозрачности программисту, разрабатывающему прикладную программу, в большинстве случаев не надо заботиться о многозадачной работе. В распоряжение его программы предоставляется виртуальная машина (тоже фон-неймановская), в которой управление передается последовательно этой программой, как будто она — единственный процесс. Конечно, поддержка виртуальных машин требует определенных усилий со стороны многозадачной операционной системы, которой приходится распределять не только процессорное время, но и память, устройства хранения, ввода-вывода и коммуникационные — то есть все ресурсы реального компьютера. В этом ей помогают специальные средства, введенные в процессоры х86 2-3-гопоколений и постоянно развиваемые вследующих поколениях.

5.1.2. Защищенныйрежимивиртуальнаяпамять

Для того чтобы процессы не мешали друг другу (по недосмотру или умышленно), требуются меры принудительной защиты критических ресурсов. Современные операционные системы используют защищенный режим процессора, в котором эти меры реализуются на аппаратном уровне. Поскольку программа может взаимодействовать с подсистемами компьютера только через пространства памяти и портов ввода-вывода, а также аппаратные прерывания, то защищать нуж-ао эти три типа ресурсов. Самую сложную защиту имеет память. Операционная система выделяет каждому процессу области памяти — сегменты — различного назначения и с разными правами доступа. Из одних сегментов можно только читать данные, в другие возможна и запись. Для программного кода выделяются специальные сегменты, инструкции могут выбираться и исполняться только из кю. По отношению к принципу хранимости программы это является искусственным ограничением для фон-неймановской машины, но его целесообразность очевидна. Процессору «безразлично» содержимое ячейки памяти, на которую передалось управление, — он всегда пытается трактовать ее как код инструкции \ялн префикс). Если ошибочно управление передалось на область данных, то дальнейшее поведение процессора непредсказуемо — это так называемый «вылет». Защита не позволяет передать управление на сегмент данных — сработает

198 Глава5. Процессоры

исключениезащиты, котороеобрабатываетсяоперационнойсистемой, иошибочный процесс будет принудительно завершен. Таким образом вероятность вылета уменьшается. Чтобы выдержать принцип хранимости программы, на время ее загрузки в память или программной модификации ту же область объявляют сегментом данных, в который разрешена запись. Система защиты может полностью контролироватьраспределениепамяти, генерируяисключениявслучаяхразличных нарушений. Конечно же, эффективность защиты (устойчивость компьютера к ошибкам) в значительной мере определяется предусмотрительностью разработчиков операционной системы. Средства распределяемости и защиты памяти, ввода-выводаипрерыванийподробноописаныв[2].

Чем сложнее программа и больше объем обрабатываемых ею данных, тем больше ее потребности в памяти. В первых процессорах семейства память предоставлялась в виде сегментов с размером по 64 Кбайт, а суммарный объем программно адресуемой памяти не превышал значения в 1 Мбайт. Архитектура PC ограничивала размер оперативной памяти объемом в 640 Кбайт, начиная с нулевых адресов. Эта область называется стандартной памятью (conventional memory), и для прикладных программ из нее остается доступной область порядка 400-550 Кбайт (остальное «съедает» операционная система вместе с разными драйверами). Потребности решаемых задач довольно быстро переросли эти ограничения, и в процессоры ввели средства организации виртуальной памяти. Впервые они появились в 80286, но удобный для употребления вид приняли только в 32-разрядных процессорах (80386 и выше). Во-первых, было снято ограничение на 64-Кбайтный размер сегмента — теперь любой сегмент может иметь почти произвольный размер до 4 Гбайт. Во-вторых, был введен механизм страничной переадресации памяти (paging). Теперь любая страница (область фиксированного размера) виртуальной логической памяти (адресуемой программой в пределах выделенных ей сегментов) может отображаться на любую область физической памяти (реально установленной оперативной). Отображение поддерживается с помощью специальных таблиц страничной переадресации, в которых кроме связи адресов есть указание на присутствие страницы в физической памяти на данный момент времени. Теперь страница памяти, не нужная процессору в данный момент времени, может быть выгружена на устройство хранения (диск). На ее место можно загрузить нужную страницу. Заявку на загрузку нужной страницы делает сам процессор, без каких-либо усилий выполняемой программы: если программе потребовалась ячейка виртуальной памяти из страницы, образа которой сейчас нет в физической памяти, вырабатывается специальное исключение. Обработчик этого исключения (это часть ОС) найдет свободную физическую страницу (выгрузив на диск ту, которая, по его мнению, пока не нужна), «подкачает» на нее с диска требуемую информацию и вернет управление процессу, прерванному исключением. Этот процесс ничего «не заметит» (кроме некоторой задержки выполнения инструкций). Таким образом, в распоряжение всех процессов, исполняемых на компьютере псевдопараллельно, предоставляется виртуальная оперативная память, размер которой ограничен суммой объема физической оперативной памяти и областьюдисковойпамяти, выделеннойдляподкачкистраниц.

5.1. Исполнениепрограммногокода 199

5.1.3. Архитектураимикроархитектура процессоров

В IBM-совместимых ПК применяются процессоры, совместимые с семейством 80x86 фирмы Intel. В оригинальной машине IBM PC использовался процессор 8088 с 16-разрядными регистрами. Все следующие модели процессоров, в том числе

32-разрядные (386, 486, Pentium, Pentium Pro, Pentium II/III, Celeron, Pentium 4 от Intel, K5, Кб и К7 (Athlon и Duron) от AMD, MI, МП и Mill от Cyrix/ VIA) с

расширениями ММХ, SSE и 3DNow!, включают в себя подмножество системы команд и архитектуры предыдущих моделей, обеспечивая совместимость с ранее написанным ПО. Далее в тексте знак + означает, что описание верно как для указанного процессора, так и для следующих за ним процессоров. При этом 286

означает процессор 80286, 386 — 80386, ..., Р5 означает Pentium, P6 — ряд процессоров 6-го поколения, включая Pentium Pro, Pentium II/III и Celeron. На-

пример, P5+ означает применимость к процессорам Pentium, Pentium MMX, Pentium Pro, Pentium II, Celeron, Pentium III и Pentium 4. В этой главе описываются процессоры последних трех поколений — от Pentium до Pentium 4 и Athlon, как наиболее распространенные. Ввиду ограничений на объем книги, здесь не рассматриваются детали внутреннего устройства, а также не приводятся описания команд. За этой информацией можно обратиться к [2, 9]. Там описана архитектура, система команд и функционирование 32-разрядных процессоров в реальном и защищенном режимах с объяснением многих системных функций, которые не рассматриваются в большинстве распространенных литературных источников. Информация по процессорам 486 есть в ранее выпущенной книге [3], а все более «древние» процессоры рассмотрены в книге [11. Информация в этих книгах и данной главе собрана из фирменных каталогов и информационных материалов, публикуемыхпроизводителямипроцессоровнасвоихWeb-серверах.

Под архитектурой процессора понимается его программная модель, то есть программно-видимые свойства. В этой книге рассматриваются только процессоры с архитектурой IA-32 (Intel Architecture 32 bit) — 32-разрядные процессоры семейства х86 5-7 поколений. Под микроархитектурой понимается внутренняя реализация этой программной модели. Для одной и той же архитектуры IA-32 разными фирмами и в разных поколениях применяются существенно различающиеся микроархитектурные реализации, при этом, естественно, стремятся к максимальномуповышениюпроизводительности(скоростиисполненияпрограмм).

Вмикроархитектурепроцессоров5-7 поколений— Pentium (MMX) иихблизких аналогов, Pentium Pro, Pentium II/III, Celeron и, наконец, Pentium 4 и К7 —

существенное значение имеетреализация различных способов конвейеризации

• распараллеливания вычислительных процессов, а также других технологий, не свойственныхпроцессорампрежнихпоколений. Пояснимосновныепонятия.

Конвейеризация (pipelining) предполагает разбивку выполнения каждой инструкции на несколько этапов, причем каждый этап выполняется на своей стуаенмконвейерапроцессора. Привыполненииинструкцияпродвигаетсяпокон- •eftepy по мере освобождения последующих ступеней. Таким образом, на коняедере одновременно может обрабатываться несколько последовательных инст-и производительностьпроцессораможнооцениватьтемпомвыходавы-

200 Глава 5. Процессоры

полненных инструкций со всех его конвейеров. Для достижения максимальной производительности процессора — обеспечения полной загрузки конвейеров с минимальным числом лишних штрафных циклов (penalty cycles) — программа должна составляться с учетом архитектурных особенностей процессора. Конечно, и код, сгенерированный обычным способом, будет исполняться на процессорах классов Pentium и Р6 достаточно быстро. Конвейер «классического» процессора Pentium имеет пять ступеней. Конвейеры процессоров с суперкопвейерной архитектурой (superpipelined) имеют большее число ступеней, что позволяет упростить каждую из них и, следовательно, сократить время пребывания в них инструкций. ГиперконвейерPentium 4 имеетуже20 ступеней.

Скалярным называют процессор с единственным конвейером, к этому типу относятся все процессоры Intel до 486 включительно. Суперскалярный (superscalar) процессор имеет более одного (Pentium — два) конвейера, способных обрабатывать инструкции параллельно. Pentium является двухпотоковым процессором (имеет два конвейера), Р6 — трехпотоковым.

Переименование регистров (register renaming) позволяет обойти архитектурное ограничение на возможность параллельного исполнения инструкций (доступно всего восемь общих регистров). Процессоры с переименованием регистров фактически имеют более восьми общих регистров, и при записи промежуточных результатов устанавливается соответствие логических имен и физических регистров. Таким образом, одновременно могут исполняться несколько инструкций, ссылающихся на одно и то же логическое имя регистра, если, конечно, между ними нет фактических зависимостей по данным.

Продвижение данных (data forwarding) подразумевает начало исполнения инструкции до готовности всех операндов. При этом выполняются все возможные действия, и декодированная инструкция с одним операндом помещается в исполнительное устройство, где дожидается готовности второго операнда, выходящего сдругого конвейера.

Предсказание переходов (branch prediction) позволяет продолжать выборку и декодирование потока инструкций после выборки инструкции ветвления (условного перехода), не дожидаясь проверки самого условия. В процессорах прежних поколений инструкция перехода приостанавливала конвейер (выборку инструкций) до исполнения собственно перехода, на чем, естественно, терялась производительность. Предсказание переходов направляет поток выборки и декодирования по одной из ветвей. Статический метод предсказания работает по схеме, заложенной в процессор, считая, что переходы по одним условиям, вероятнее всего, произойдут, а по другим — нет. Динамическое предсказание опирается на предысторию вычислительного процесса — для каждого конкретного случая перехода накапливается статистика поведения, и переход предсказывается, основываясь именно на ней.

Исполнение по предположению, называемое также спекулятивным (speculative execution), идет дальше — предсказанные после перехода инструкции не только декодируются, но и по возможности исполняются до проверки условия перехода. Если предсказание сбывается, то труд оказывается ненапрасным, если не сбывается

— конвейер оказывается недогруженным и простаивает несколько тактов (как минимум столько, сколько ступеней уконвейера).

5.2. Программнаямодель32-разрядныхпроцессоров 201

Исполнение с изменением последовательности инструкций (out-of-order execution), свойственное RISC-архитектуре, теперь реализуется и для процессоров х86. При этом изменяется порядок внутренних манипуляций данными, а внешние (шинные) операции ввода-вывода и записи в память выполняются, конечно же, в порядке, предписанном программным кодом. Однако эта способность процессора в наибольшей степени может блокироваться несовершенством программного кода (особенно 16-битных приложений), если он генерируется без учета возможности измененияпорядкаисполненияинструкций.

Благодаря совершенствованию микроархитектуры от поколения к поколению возрастает производительность процессоров, причем этот рост обеспечивается двумя факторами. Во-первых, растет тактовая частота ядра. Каждая микроархитектура имеет свои пределы роста частоты. Здесь рекорд пока что у процессоров Р6, микроархитектура которых выдержала почти 10-кратное увеличение тактовой частоты, но для дальнейшего роста в Pentium 4 фирме Intel пришлось существенно удлинить конвейер. Во-вторых, сокращается число тактов процессорного ядра, требуемых на выполнение одной инструкции (в пересчете с темпа схода инструкций с конвейера). Так в среднем процессоры 1, 2, 3, 4, 5 и 6 поколений на одну инструкцию тратят 12, 5, 4, 2, 1 и 0,5 тактов. Полтакта на инструкцию — звучит, конечно, странно. Но если вспомнить о 8-байтной шине данных, позволяющей за один такт загрузить «кусок» кода, содержащего несколько команд, и а нескольких исполнительных устройствах, одновременно приступающих к их «ыполнению, то вопросы рассеиваются. Кроме того, в процессоры вводят все бо-.we мощные команды, позволяющие сокращать число инструкций, требуемое для решения одних и тех же задач.

5.2. Программная модель 32разрядных процессоров

Нггория 32-разрядных процессоров Intel началась с процессора 80386. Он вобрал t скбя все черты своих 16-разрядных предшественников 8086/88 и 80286 для обесвгченля совместимости с громадным объемом ПО, существовавшего на момент ег? появления. Однако в процессорах 80386 преодолено жесткое ограничение на цвету непрерывного сегмента памяти — 64 Кбайт. В защищенном режиме 32-раз- процессоров оно отодвинулось до 4 Гбайт — предела физически адресуе-оамяти. что тогда можно было считать почти «бесконечностью». Эти процес-имеют поддержку виртуальной памяти объемом до 64 Тбайт, встроенный управления памятью поддерживает механизмы сегментации и страничной адресов (Paging). Процессоры обеспечивают четырехуровневую сис-ы пространств памяти и ввода-вывода, а также переключение задач. команд расширена при сохранении всех команд 8086, 80286. Процессоры работать в одном из двух режимов и переключаться между ними достаточ-•»4мсгрс какв ту, так и в другую сторону:

вfaal Address Mode — режим реальной адресации (или просто реальный режзсм - Real Mode), полностью совместим с8086. Вэтом режиме возмож-

202 Глава 5. Процессоры

наадресациядо1 Мбайтфизическойпамяти(насамомделе, какиу80286, почти на 64 Кбайт больше).

«Protected Virtual Address Mode — защищенныйрежимвиртуальнойадресации (или просто защищенный режим — Protected Mode). В этом режиме процессор позволяет адресовать до 4 Гбайт физической памяти, через которые при использовании механизма страничной адресации могут отображаться до 64 Тбайт виртуальной памяти каждой задачи. В защищенном режиме процессор может выполнять дополнительные инструкции, недоступные в реальном режиме; ряд инструкций, связанных с передачей управления, обработкой прерываний и некоторых других выполняется иначе, чемвреальномрежиме.

Существенным дополнением является Virtual 8086 Mode — режим виртуального процессора 8086. Этот режим является особым состоянием задачи защищенного режима, в котором процессор функционирует как 8086. На одном процессоре в таком режиме может параллельно исполняться несколько задач с изолированными друг от друга ресурсами. При этом использование физического адресного пространства памяти управляется механизмами сегментации и трансляции страниц. Попытки выполнения недопустимых команд, выхода за рамки отведенного пространства памяти и разрешенной области ввода-вывода контролируютсясистемойзащиты.

«Неофициальный» режим Big Real Mode, он же Unreal Mode, который поддерживают все 32-разрядные процессоры, позволяет адресоваться ко всему 4-Гбайт- номупространствупамяти. Вэтомрежимеинструкцииисполняютсятакже, какив реальном режиме, но с помощью дополнительных сегментных регистров FS и GS программы получают непосредственный доступ к данным во всей физической памяти.

Процессоры, начиная с Pentium и некоторых моделей 486, поддерживают также особый режим системного управления System Management Mode (SMM), при котором процессор выходит в иное, изолированное от остальных режимов пространство памяти. Этотрежимиспользуется вслужебных иотладочныхцелях.

Процессоры могут оперировать с 8-, 16- и 32-битными операндами, строками байт, словидвойных слов, атакжесбитами, битовымиполямиистрокамибит.

Все процессоры имеют целочисленное АЛУ (арифметико-логическое устройство). Блоки FPU, ММХ и ХММ в архитектуре процессоров IA-32 х86 держатся особняком. Они присутствуют не во всех процессорах и даже по схемотехнической реализации являются пристройками к центральному процессору с его набором обычных целочисленных регистров. Данные блоки предназначены для ускорения вычислений.

Математический сопроцессор предназначен для расширения вычислительных возможностей центрального процессора — выполненияарифметических операций, вычисленияосновныхматематических функций(тригонометрических, экспоненты, логарифма) и т. д. В разных поколениях процессоров он назывался по-разному —

FPU (Floating Point Unit — блок чисел с плавающей точкой) или NPX (Numeric Processor extension — числовое расширение процессора). Сопроцессор поддерживает семь типов данных: 16-, 32-, 64-битные целые числа; 32-, 64-, 80битные числа с плавающей точкой (FP-форматы) и 18-разрядные числа в двоично-десятичном (BCD) формате. Формат чисел с плавающей точкой соот-

5.2. Программнаямодель32-разрядныхпроцессоров 203

ветствует стандартам IEEE 754 и 854. Применение сопроцессора повышает производительность вычислений в сотни раз. Блок FPU содержит стек из восьми 80битных регистров и несколько вспомогательных регистров. FPU присутствует во всех современных процессорах; его не было в 486SX, а в предыдущих процессорах он устанавливался дополнительно.

Технология ММХ ориентирована на приложения мультимедиа, 2О/ЗО-графи-ку и коммуникации. Это расширение базовой архитектуры появилось только после выхода второго поколения процессоров Pentium. Основная идея ММХ заключается в одновременной обработке нескольких элементов данных за одну инструкцию — так называемая технология SIMD (Single Instruction — Multiple Data). Расширение ММХ использует новые типы упакованных 64-битных целочисленныхданных:

ж упакованные байты (Packed byte) — восемь байт; и упакованные слова (Packed word) — четыре слова;

» упакованные двойные слова (Packed doubleword) — два двойных слова;

• учетверенное слово (Quadword) — одно 64-битное слово.

Эти типы данных могут специальным образом обрабатываться в 64-битных регистрах ММХО—ММХ7, представляющих собой младшие биты стека 80-битных регистров FPU. Каждая инструкция ММХ выполняет действие сразу над всем комплектом операндов (8, 4, 2 или 1), размещенных в адресуемых регистрах. Еще одна особенность технологии ММХ — поддержка арифметики с насыщением (saturating arithmetic). Ее отличие от обычной арифметики с циклическим переполнением (wraparound mode) заключается в том, что при возникновении переполнения в результате фиксируется максимальное возможное значение для дан-?»ого типа данных, а перенос игнорируется. В случае переполнения снизу в результате фиксируется минимальное возможное значение. Граничные значения хфеделяются типом (знаковый или беззнаковый) и разрядностью переменных. Такой режим вычислений удобен, например, для определения цветов. Совпадение регистров ММХ и FPU накладывает ограничения на чередование кодов FPU я ММХ — забота об этом лежит на программисте приложений с ММХ. Блок ММХ присутствует практически на всех современных процессорах.

Процессоры Pentium III и 4 имеют так называемое потоковое расширение SSE Screaming SIMD Extensions), реализованное на дополнительном независимом 1юке из восьми 128-битных регистров, названных ХММО...ХММ7. В каждый из реги-г~ров ХНМ помещаются четыре 32-битных числа в формате с плавающей точкой точности. Блок позволяет выполнять векторные (они же пакетные) и инструкции. Векторные инструкции реализуют операции сразу над «тырьмя комплектами операндов. Скалярные инструкции работают с одним ком-игжтом операндов — младшим 32-битным словом. При выполнении инструк-с ХММ традиционное оборудование FPU/MMX не используется, что поагает эффективно смешивать инструкции ММХ с инструкциями над операн-с плавающей точкой. Здесь блоки процессора меняются ролями — регист-ММХ, наложенные на регистры традиционного сопроцессора, используются аелочнсленных потоковых вычислений, а вычисления с плавающей точкой только с одинарной точностью, но длямультимедийныхприложенийее

204 Глава5. Процессоры

хватает) возлагаются на новый блок ХММ. Кроме инструкций с новым блоком ХММ в расширение SSE входят и дополнительные целочисленные инструкции с регистрами ММХ, а также инструкции управления кэшированием. В процессоре Pentium 4 набор инструкций получил очередное расширение — SSE2, в основном касающеесядобавленияновыхтипов128-битныхоперандовдляблокаХММ.

Расширение 3DNow!, введенное фирмой AMD в процессорах К6-2, расширяет возможности блока ММХ. Оно позволяет оперировать с новым типом данных — парой упакованных чисел в формате с плавающей точкой. Эти числа занимают по двойному слову в 64-битных регистрах ММХ. Технология SDNow! даетзаметный результат при обработке графики, хотя не претендует на вытеснение графических ускорителей, а призвана служить их мощным дополнением. При этом сохраняется программная совместимость с прежними процессорами и операционными системами (поскольку регистры ММХ отображаются на регистры FPU, для них работаюттрадиционныемеханизмысохраненияконтекставмногозадачныхОС).

Расширение SDNow! работает с упакованными данными в FP-формате одинарной точности, а также упакованными (8 байт, 4 слова, 2 двойных слова) и 64битными целыми числами. В процессорах Athlon набор инструкций SDNow! был дополнен. Появились новые инструкции для сигнальных процессоров (DSP), работающие с упакованными FP-числами; расширен набор инструкций ММХ, расширено управление кэшированием. Часть инструкций совпадают с одноименнымиинструкциямиSSE.

При отсутствии математического сопроцессора прикладная программа всетаки может использовать инструкции FPU, но для этого операционная система должна поддерживать эмуляцию сопроцессора. Эмулятор сопроцессора — это про- грамма-обработчик прерывания или исключения от сопроцессора, которая должна «выловить» код операции сопроцессора, определить местонахождение данных и выполнить требуемые вычисления, используя целочисленную арифметику центрального процессора. Понятно, что эмуляция будет выполняться во много раз медленнее, чем те же действия, выполняемые настоящим сопроцессором. Эмуляция для блоков ММХ и ХММ не предусматривается — эти блоки предназначеныдляускорениявычисленийвприложенияхреальноговремени, ивыполнять ихскрайненизкойскоростьюэмуляциибылобыпростобессмысленно.

5.2.1. Регистрыпроцессора

Процессоры х86 имеют регистры, подразделяющиеся на следующие категории:

ярегистрыобщегоназначения; « указатель инструкций;

ярегистр флагов;

& регистрысегментов; ж системныеадресныерегистры;

» управляющие регистры; ш регистрыотладки;

5.2. Программнаямодель32-разрядныхпроцессоров 205

регистры тестирования;

»модельно-специфические (зависящие от конкретной модели процессора) регистры.

Основные регистры процессора архитектуры IA-32, с которыми работают прикладные программы, показаны на рис. 5.1. Эти регистры относятся к видимой для прикладных программ части архитектуры х86 и представляют собой расширение набора регистров 16-разрядных процессоров 8086/8088 и 80286. К прежнему обозначению их имен добавилась приставка Е (Extended — расширенный). Отсутствие приставки в имени означает ссылку на младшие 16 бит расширенных регистров. Существует понятие разрядности адреса и данных. Разрядность адреса

определяет, сколько бит (16 или 32) используется в регистрах, формирующих адрес данных или инструкций, расположенных в памяти. Разрядность данных определяет, сколько бит (16 или 32) используется в инструкциях, оперирующих словами (инструкции с байтами всегда оперируют с 8 битами). В реальном режиме по умолчанию разрядность адреса и данных — 16 бит. В защищенном режиме разрядность адреса и данных по умолчанию определяется дескриптором кодового сегмента. Инструкции, которые прежде адресовались к 16-разрядным регистрам, теперь могут адресоваться и к 32-разрядным расширенным регистрам при том же коде операции. Что именно подразумевается в данный момент, определяется текущим значением разрядности слова операнда по умолчанию и для текущей исполняемой инструкции может быть изменено на противоположное значение с помощью префикса.

 

 

Общиерегистрыданныхиадресов

31

ОРегистрысегментов

 

1615

ЕАХ

15

 

 

 

АНАХAL

 

 

 

 

ВН ВХ BL

ЕВХ

 

 

 

 

СНСХ CL

ЕСХ

 

 

 

 

 

DHDX DL

EDX

 

 

 

 

 

SI

ESI

 

 

 

 

 

DI

EDI

 

 

 

 

Ш

ВР

ЕВР

ШЖйШЖШ

 

 

 

SP

ESP

 

 

 

шшж1Ж;

 

 

 

Указатель инструкцийирегистрфлагов

IP

31 1615___О

FLAGS

EIP

EFLAGS

Рис. 5.1. Основныерегистры32-разрядныхпроцессоров

регистров общего назначения, предназначенных для использования программами, процессоры имеют ряд регистров системного назна-< нарисунке непоказаны). Этирегистрыприкладнымипрограммамиобычно^гхтьзутотся. rtf-Tbwo-специфическиерегистрыMSR (Model-Specific Registers) предназнаг?л

управления расширениями отладки, мониторингом производительное-