Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект по МПиМК / Лекция 10.doc
Скачиваний:
273
Добавлен:
15.06.2014
Размер:
272.9 Кб
Скачать

4.2. Адресация

Основная причина перехода к 64-битной архитектуре состоит в том, чтобы дать программе больше 2 Гб памяти, т. е. преодолеть ограничение 32-битных систем (верхние 2 Гб адресов в Win32 зарезервированы для ядра и API-функций). Цены на память постоянно снижаются. Сегодня гигабайт стоит дешевле $200, а значит, например, установка 16 Гб памяти обойдется менее чем в $3200 (что для сервера вполне приемлемо). Как я уже говорил, в 32-битных операционных системах физическое адресное пространство ограничено объемом в 4 Гб, которое приходится, к тому же, делить между приложениями, библиотеками, и ядром системы. Реально Windows-приложениям доступно всего 2 Гб адресов (3 Гб в Windows 2000 Advanced Server при указании ключа /3GB в boot.ini, что, впрочем, накладывает некоторые ограничения). Потребности же многих приложений - баз данных, программ обработки растровой графики и видео, систем автоматизированного проектирования, скоро превысят этот лимит, т. к. оперируют все большими наборами данных.

Процессоры Intel начиная с Pentium Pro могут иметь и более 4 Гб физической памяти, но только через механизм PAE (Physical Address Extension) - "расширение физического адреса". Как Linux так и Windows 2000 Advanced Server способны задействовать эту память (вплоть до 64 Гб - это предел PAE), но приложения, увы, по-прежнему ограничены двумя гигабайтами адресного пространства. Предоставить доступ к большему пространству можно, но лишь используя специальные механизмы вроде AWE (Address Windowing Extensions) - "расширение адреса методом окна". Программирование с помощью AWE трудно само по себе, а главное, производительность при случайном доступе к памяти оказывается заметно ниже, чем при использовании плоской модели адресации. К тому же память, выделенная через AWE, не поддается свопингу и не может быть использована другими процессами. Небольшое отступление: во времена DOS был такой стандарт памяти - EMS (Expanded Memory Specification). Оригинальный IBM PC/XT мог иметь до 1 Мб физической памяти, EMS позволил ему иметь до 16 Мб, но не напрямую, а в виде "окна" в памяти размером 64 Кб, и набора банков отображаемых по очереди в это окно. Достигалось это применением специального драйвера и карты с памятью, вставляемой в слот расширения. На переключение банков тратилось значительное число тактов процессора (что, впрочем, все равно быстрее свопа на диск), зато таким образом преодолевалось ограничение 20-битной адресации IBM PC/XT. Избавиться от этих неудобств можно перейдя на новую адресацию.

Процессоры Athlon 64 и Opteron не полностью 64-битные. Да, для указателей в программах используются новые 64-битные регистры, но объем адресуемой памяти в 16 экзабайт (16*1048576 терабайт) 64-битной адресации показался AMD излишним (вполне справедливо). Поэтому нынешние процессоры используют 48-битную адресацию, и позволяют адресовать до 256 Тб виртуальной памяти. Старшие 16 бит 64-битного адреса пока не используются. Для задания физического адреса в адресной шине отведено и того меньше - 40 бит, что позволяет иметь до 1 Тб физической оперативной памяти. Однако сейчас трудно представить себе компьютер даже с подобным количеством памяти, тем более, что будущие версии процессоров AMD64 могут иметь и более широкую адресную шину. Системным программистам может быть интересно, как в новом процессоре осуществляется трансляция линейных адресов в физические:

Видно, что трансляция адреса стала четырехуровневой (в Pentium она была двухуровневой, в режиме PAE - трехуровневой). Для того чтобы компенсировать столь сложную процедуру, процессоры Athlon 64/FX и Opteron оснащены улучшенным блоком TLB (Translation-Lookaside Buffer). Блок TLB, иначе называемый кэшем страничной трансляции, используется при каждом обращении к памяти. Если соответствующий логический адрес уже был однажды преобразован в физический и информация об этом сохранилась в кэше, то обращение к памяти происходит моментально, минуя обращения к громоздким таблицам трансляций. Кэш TLB, также как и общий кэш процессора, является двухуровневым. У Athlon 64 он составляет 40 записей для инструкций, 40 для данных (L1) и 512 общих записей (L2), против 24 и 40 (L1), и 256 (L2) у Athlon XP.

А вот о следующем нововведении стоит рассказать особо. Скорость компьютера сильно зависит от нагрузки, приходящейся на каналы памяти. В типичном x86-коде около половины объема приходится на адреса операндов и связанные с ними константы, следовательно, двукратное увеличение разрядности адреса должно привести к увеличению объема кода примерно в 1.5 раза. Что в свою очередь означало бы пропорциональное увеличение нагрузки на шину данных и снижение эффективности кэша. Не говоря уже о такой "мелочи" как больший размер новых EXE- и DLL-файлов, а следовательно и большее потребление оперативной памяти. Иначе говоря, переход Athlon'а в 64-битный режим мог бы сопровождаться заметным падением производительности, примерно таким, какой произойдет при переходе с Athlon'а на равночастотный Duron.

Рисунок 4.2

Предвидя возникновение этой проблемы, инженеры добавили новый режим адресации относительно 64-битного указателя инструкций - RIP-relative addressing. Эффективный адрес в этом случае получается суммированием 32-битного адреса операнда, который играет роль смещения, и регистра RIP. Еще в 60-х годах было подмечено, что адреса, используемые в командах перехода имеют закон распределения близкий к нормальному, с вершиной в команде перехода:

Рисунок 4.3

Т. е. чем дальше адрес отстоит от текущего значения указателя инструкций, тем меньше вероятность его применения. Такой подход позволяет снизить разрядность адресов не только команд перехода, но и вообще всех команд использующих ModRM-адресацию. В те моменты, когда 32 бит все же не хватит, компилятор сформирует полный 64-битный адрес, после чего, по возможности, снова продолжит генерировать 32-битные адреса. Сам по себе этот режим адресации не нов, и так или иначе использовался в разных компьютерах (не x86), а с переходом x86 на новую адресацию он показал себя во всей красе, практически ликвидировав главный недостаток 64-битного кода - большой размер.

Соседние файлы в папке Конспект по МПиМК