Читаем Журнал «Компьютерра» №41 от 08 ноября 2005 года полностью

Что же делать, если нам хочется как-то обойти это ограничение, не теряя совместимости со старыми приложениями? К счастью, инженеры, проектировавшие x86 ISA, были очень талантливыми и прозорливыми, а потому заложили в архитектуру возможность вводить перед инструкциями приставки - специальные указатели, так или иначе изменяющие значения инструкций. Скажем, приставка LOCK говорит, что инструкция должна быть выполнена в «атомном» режиме["Атомный" режим - это когда выполнение инструкции гарантированно не будет прервано каким-нибудь внешним событием. К примеру, если мы что-нибудь записываем в оперативную память, то начиная с момента исполнения и до завершения атомной инструкции никто «посторонний» не сможет ни записать в то же место оперативной памяти, ни прочитать оттуда. Используется в многопроцессорных системах для организации межпроцессорного взаимодействия], приставки 2E и 2F подсказывают процессору, произойдет условный переход или нет, а приставка 66 приказывает переключаться между 16-битным и 32-битным представлением данных в регистрах. Поэтому когда разработчикам x86-64 понадобилось добавить в архитектуру IA-32 поддержку 64-битности, они сделали очень простую и в то же время гениальную вещь, введя набор 64-битных приставок REX, которые не столько расширяют возможности инструкций, сколько служат для кодирования дополнительной информации в четырех своих полях. Поле REX.W задает «размер» обрабатываемых данных: если здесь записан нолик, то обрабатываемые регистры интерпретируются как 32-битные, если единичка - то как 64-битные; а поля REX.R, REX.X и REX.B - старшие биты, дополняющие трехбитные поля ModR/M.Reg, SIB.Index и, в зависимости от ситуации, ModR/M.R/M или SIB.Base соответственно. Знаю, что это звучит не слишком понятно, поэтому тут же поясню, что это означает. На самом деле в 64-битном режиме мы используем 4-битную кодировку регистров процессора, но три младших регистровых бита записываем на их «традиционные» места в инструкции, а старший бит - переносим в приставку REX, обходя тем самым архитектурное ограничение. А заодно, помимо поддержки восьми новых GPR-регистров R8-R15 и SSE-регистров XMM8-XMM15, получаем возможность отключить 64-битные вычисления, когда они нам не требуются, - и пропорционально сэкономить на времени исполнения и занимаемом данными месте! И все это - одним-единственным байтом!

Вторая группа усовершенствований - отказ от поддержки безнадежно устаревших и давно не использующихся возможностей IA-32. В расширенном режиме не поддерживаются Real Mode и Virtual 8086-mode[Да-да, Virtual 8086 - это именно то, о чем вы сейчас подумали, - полная имитация процессора Intel 8086. Много ли найдется людей, которые пожалеют о его отсутствии?], и почти полностью отключена сегментация[Поскольку читатель уже заскучал от обилия технических фактов, не буду утомлять его описанием сегментированной модели памяти 80286, скажу только, что сегментация - это очень упрощенный аналог виртуальной памяти] (хотя некоторые настройки сегмента CS и сегменты FS/GS все же можно использовать); не поддерживаются инструкции, работавшие с этими сегментами, и инструкции, оперировавшие BCD-числами[BCD (Binary Coded Decimal) - это когда десятичное число записывается шестнадцатеричными цифрами. Например, 54d - в виде 54h = 01010100b вместо традиционных 36h = 00110110b]. Все это позволяет заметно облегчить процессору жизнь и в перспективе - повысить его производительность. К примеру, отказ от сегментации позволяет при обращении к оперативной памяти не вычислять линейный адрес и не проверять его допустимость в рамках сегмента, а значит, эффективность этой подсистемы при переходе к x86-64 существенно возрастет.

«А как обстоят дела с совместимостью со старыми программами?» - спросит читатель. Посмотрим: если обойтись без приставки REX, то процессор будет считать, что все записанные там данные - нули, то есть новые регистры не используются, а размер операндов инструкции равен 32 битам, то есть старшие 32 бита каждого 64-разрядного регистра при подобных вычислениях явным образом забиваются нулями. Как легко догадаться, инструкция без префикса REX даже в 64-битном режиме будет работать точно так же, как она работала и в 32-битном; и если соблюдать меры предосторожности (в частности, не выходить при адресации за границу «нижних 4 Гбайт» виртуальной памяти, то даже в 64-битном режиме все программы будут работать как и в 32-битном! Красивое решение? Мне кажется, да. Если программе не требуется поддержка всяческих «64-битностей», то она может запросто продолжать работать на «физически» 64-битном процессоре в 32-битном режиме, не используя ни 64-битные указатели, ни 64-битные вычисления, зато «радуясь» удвоенному количеству регистров и другим улучшениям x86.

Перейти на страницу:

Все книги серии Компьютерра

Похожие книги

«Если», 2003 № 03
«Если», 2003 № 03

Кейдж БЕЙКЕР. КАРАВАНЛюбители острых ощущений могут готовиться к походу. Путь неблизкий, мир странный, компания подобралась душевная — что еще надо?Геннадий ПРАШКЕВИЧ. ПЕРСТЕНЬ НА ТРИ ЖЕЛАНИЯА как у вас там с фамилией?Стивен ПАЙЗИКС. ЗАВИСИМОСТЬКто-то берется за спицы из любви к рукоделию, кто-то — успокоить нервы, а кто-то — совсем с иной целью.Кирилл БЕНЕДИКТОВ. КОНКИСТАДОР В СТРАНЕ СНОВПалач смакует свою роль, забавляясь наивным неведением «клиента». А тот все толкует о каком-то Пути Богов.Александр ЗОРИЧ. ВТОРОЙ ПОДВИГ ЗИГФРИДАПрекрасная Кримхильда видела много подвигов в свою честь, но о таком и помыслить не смела.Еугениуш ДЕМБСКИЙ. ВОЛЯ ДРАКОНАХотите рассмотреть изнанку героической фэнтези?Андрей ЛЕГОСТАЕВ. ТОСТ В ЧЕСТЬ ПОБЕДИТЕЛЯПраво же, так и вспоминается Олимпиада в Солт-Лейк-Сити…ВИДЕОДРОМДеликатесы города потерянных детей… Звонят, откройте телевизор… Экранизации не горят!.. Явление Горлума народу.ВЕРНИСАЖМы говорили — «героическая фэнтези», подразумеваем — «Фразетта».Виталий КАПЛАН. ДИНАМО-МАШИНА, ИЛИ ВЕЧНЫЙ ДВИГАТЕЛЬ ФАНТАСТИКИПисатели на скоростных магистралях… А может, притормозить?ЭКСПЕРТИЗА ТЕМЫ«В принципе, я согласен, но хочу возразить…»РЕЦЕНЗИИЗаглянем в книжный магазин.КУРСОРНовый Grand Master, творческие планы, неизвестная книга Дж. P.P. Толкина и прочие новости.Мария ГАЛИНА. УНИВЕРСАМ ПРОТИВ УНИВЕРСУМАПисателю хорошо известно, на чем стоит мир. Особенно, если мир плоский.АЛЬТЕРНАТИВНАЯ РЕАЛЬНОСТЬПредставляем второго победителя конкурса для начинающих фантастов.Глеб ЕЛИСЕЕВ. КОЛЛЕКТИВНЫЙ РАЗУМИтоги голосования на сайте «Русская фантастика».Бела КЛЮЕВА. ЗДРАВСТВУЙТЕ, Я ВАША БАБУШКА!…заявляет старейший редактор фантастики и имеет на это звание полное право.ПЕРСОНАЛИИИнтернациональный экипаж номера.

Белла Клюева , Виталий Каплан , Дмитрий Володихин , Евгениуш Дембский , Екатерина Постникова

Фантастика / Фэнтези / Эссе / Проза / Журналы, газеты / Научная Фантастика
«Если», 2000 № 07
«Если», 2000 № 07

ФАНТАСТИКАЕжемесячный журналСодержание:Марина и Сергей Дяченко. ПОСЛЕДНИЙ ДОН КИХОТ, повестьНельсон Бонд. КНИЖНАЯ ЛАВКА, рассказШ. Н. Дайер. НОСТАЛЬДЖИНАВТЫ, рассказВИДЕОДРОМ*Адепты жанра--- Сергей Кудрявцев. ФИНСКИЙ КРЕПКИЙ ОРЕШЕК, статья*Фестиваль--- Николай Кузнецов. ПОБЕДА ВИРТУАЛЬНОГО НАД КОСМИЧЕСКИМ, статья*Рецензии*Писатель о кино--- Сергей Лукьяненко. МАУС-АМЕРИКАНУС, ИЛИ ВИДОВАЯ ПОЛИТКОРРЕКТНОСТЬ, статья*Экранизация--- Сергей Шикарев. ХОРОШО ЗАБЫТОЕ СТАРОЕ, статьяДэвид Хэст. ЯЩИК ПАНДОРЫ, рассказЭнтони Бёрджесс. МУЗА, рассказОрсон Скотт Кард. СОВЕТНИК ПО ИНВЕСТИЦИЯМ, повестьЛитературный портрет*Вл. Гаков. ПРОПОВЕДЬ-БЕСТСЕЛЛЕР, статьяНиколь Монтгомери. НЕРАЗЛУЧНЫЕ, повестьВладимир Михайлов. ХОЖДЕНИЕ СКВОЗЬ ЭРЫ, начало эссеДмитрий Володихин. ПОТАНЦУЕМ?… статьяРецензииКрупный план*Виталий Каплан. НАЧАЛО ОТВЕТА, статья2100: история будущего*Леонид Кудрявцев. СЛУЧАЙНАЯ НАХОДКА, статьяКурсорКонсилиум*Борис Стругацкий: «ОТВЕТ ОЧЕВИДЕН И ОДНОЗНАЧЕН».PersonaliaНа обложке иллюстрация Игоря Тарачкова к повести Орсона Карда «Советник по инвестициям».Иллюстрации: С. Шехова, Т. Ваниной, О. Дунаевой, О. Васильева, А. Юрьевой, И. Тарачкова, А. Филиппова. 

Борис Натанович Стругацкий , Владимир Гаков , Журнал «Если» , Леонид Викторович Кудрявцев , Николай Викторович Кузнецов

Фантастика / Журналы, газеты / Научная Фантастика