Дмитрий Радищев (dibr) wrote,
Дмитрий Радищев
dibr

x86-64

Disclaimer1: я не настоящий компьютерщик, в тексте возможны неточности и даже фактические ошибки. Поэтому дефолтным ответом на любой комментарий следует считать фразу "да, скорее всего вы правы".
Disclaimer2: текст содержит много компьютерного абырвалга, кому неинтересно - не читайте, сдавайтесь сразу :-)

...патчил тут 2003 сервер (который как XP, но сервер) от недавнего криптолокера, и грустно глядя на 32-битную винду на процессоре i7, размышлял о том, какого фига PAE (использование более 4Гб в 32-битном режиме) в винде работает с обычным софтом, но глючит с некоторыми драйверами (в результате чего в "сервере" у меня так и торчит 4Гб памяти). Глючит оно на самом деле потому, что программы в ia32 ходят в память не напрямую (по линейному адресу), а с использованием регистра-"селектора", задающего начальное смещение, что позволяет подсунуть 32-битной программе 64-битное смещение так, что она этого и не заметит, а с железом, работающим с памятью напрямую, такое вот "не заметит" не катит - если драйвер не умеет выцеплять и передавать железу корректный полный адрес, то ой. Но мысль, как часто бывает, пошла дальше, и не совсем туда.

Архитектура x86-64 (кстати, придуманная AMD, intel подхватил уже позже, когда "не взлетела" интеловская архитектура ia64 (itanium)), является расширением архитектуры ia32, "внешне похожим на ia32, но всего побольше, и теперь в 64". На месте знакомые регистры AX, BX, CX, DX, BP, SI, DI и SP, только теперь с буковкой R в начале и 64 бит, и там даже сегментную организацию памяти недодушили (хотя и хотели).
Ia32 в свою очередь является расширением 8086 (16bit x86), сделанным примерно по тому же принципу - знакомые AX, BX и далее по списку, но 32 бит и с буковкой "E", и "селекторы" вместо "сегментов" из 8086. Ну и набор команд примерно тот же, но "теперь и 32 бит". С селекторами, кстати, как бы прорыв - теперь программе необязательно знать, где именно лежит её память (через что реализовано много интересных вещей вроде виртуальной памяти, в частности именно через это "необязательно" позже будет реализовано PAE), но логически это переделанные "сегменты" из ассемблера процессора 8086 - того самого, на котором собирались самые первые "писюки" (ну, или около того - там ещё 8088 был, но разница непринципиальная).
Сегменты же в 8086 появились не просто так. На момент создания 8086 уже понимали, что 64 килобайта адресуемой памяти - это как-то совсем мало, и замахнулись аж на целый мегабайт оперативки. Но вместо чтобы сделать линейный 20-битный адрес, адрес оставили 16-битным, а память нарезали ломтиками, обращаться к которым можно было через "сегмент", содержащий старшие биты полного адреса. Но почему сегменты, почему не 20 бит одним куском, вроде так проще же?
А потому, что ассемблер 8086 был разработан в том числе с учётом того, чтобы максимально упростить перенос ассемблерных программ, написанных под процессор 8080 - поэтому мнемоника 8086 в значительной мере копирует 8080, адреса - 16-битные, ну и так далее. Сегменты, соответственно, пришлось "пришить" чтобы 16-битные программы могли работать с 20-битным адресом, не замечая подвоха.

А 8080 это, на минуточку, времена примерно CP/M! Даже "синклеры-спектрумы" строились уже на более продвинутом Z80! CP/M, Карл! То есть, ассемблер современных, продвинутых, всех таких насквозь 64-битных процессоров фирмы intel до сих пор несёт в себе остатки потребности в переносе программ из, простите, CP/M!

А ведь у интел когда-то была настоящая, без груза совместимости с тёплыми ламповыми процессорами в DIP40 корпусе (керамическом, с позолоченными ножками), платформа - ia64, процессоры itanium. Архитектура EPIC, между прочим (Explicit Parallel Instruction Computer, а не то что вы подумали), точнее - VLIW (привет, Эльбрус!), а не этот ваш CISC, как в x86 и всём что из него выросло. Под неё даже винда была, только особая! Но поскольку этот интел-процессор не был, простите за каламбур, интел-совместимым, победил интел-совместимый AMD x86-64, на котором можно было запускать пиратский офис с радиорынка и нортон командер в дос-окошке.

Причем, учитывая прогресс технологий, вполне реализуем был бы такой сценарий. Выпускается процессор, содержащий два комплекта декодеров команд: ia32 - совместимый со всем этим античным безобразием, и (допустим) ia64 - ни с чем не совместимый, зато принципиально новый и перспективный. И позволить процессору переключаться между ними на ходу. Пишется операционная система, заточенная под ia64, но умеющая запускать ia32-совместимые программы, временно переключая для этого процессор на нужный декодер (и соответствующим образом транслируя передачу параметров при вызове системных функций). В результате мы можем быстро запускать ia64 задачи, и не-слишком-медленно - ia32 задачи. Дальше ia32 часть потихоньку редуцируется, а ia64 - развивается, чтобы лет через десять выпустить версию только с ia64 частью: один фиг ia32 к тому моменту почти вымрет. И получить наконец по настоящему современный процессор, а не результат постепенной эволюции 4-битного Intel 4004.

Но - нет.
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 52 comments