Пређи на садржај

x86-64

С Википедије, слободне енциклопедије

x86-64 (такође познат и као x64, x86 64 и amd64) је 64-битна верзија скупа инструкција x86. Он подржава далеко веће количине виртуелне и физичке меморије него што је то могуће код претходника, омогућавајући програмима складиштење веће количине података у меморији. x86-64 такође пружа 64-битне регистре опште намене и бројне друге побољшања. Оригиналну спецификацију је направио АМД, а спроведена је од стране АМД-а, Интела, VIА, и других. Потпуно је компатибилан са 16-битним и 32-битним x86 кодом.[1] Пошто су потпуни 16-битни и 32-битни скупови инструкција остали имплементирани у хардверу без икакве емулације, постојећи x86 програми раде без проблема у компатибилности или лошијих перформанси[2], док постојеће апликације које користе нове карактеристике дизајна процесора могу постићи побољшања перформанси.

Пре избацивања, "x86-64" и "x86_64" су се односили на скуп инструкција. После избацивања, АМД је назван АМД64.[3] Intel initially used the names IA-32e and EM64T before finally settling on Intel 64 for their implementation. Some in the industry, including Apple,[4][5][6] Интел је у почетку користио имена ИА-32Е и ЕМ64Т пре коначног решења да се користи име Интел 64 за њихово спровођење. Неки у индустрији, укључујући и Епл, користити x86-64 и x86_64, док други, посебно Сан Мајкросистемс (сада Оракл) и Мајкрософт, користе x64 док BSD породица оперативних система и неколико Линукс дистрибуција користе АМД64.

АМД К8 процесор је први имплементирао архитектуру, и ово је био први значајан додатак x86 архитектури коју је дизајнирала нека компанија осим Интела. Интел је био принуђен да следи тај пример и увео је модификовану НетБрст (енгл. NetBurst) породицу која је била потпуно софтверски компатибилана са дизајном и спецификацијама АМД-а. VIА Текнолоџис (енгл. VIA Technologies) је представио x86-64 у својој VIА Исаја (енгл. Isaiah) архитектури, са VIА Нано.

x86-64 спецификација се разликује од Интелове Итаниум (раније ИА-64) архитектуре, чији скуп инструкција није компатибилан са x86 архитектуром.

AMD64 logo

Скуп инструкција из АМД64 је имплементиран у АМД-овом Оптерону, Атлон64, Атлон 64 FX, Атлон64 X2, Атлон II, Атлон X2, Турион 64, Турион 64 X2, касније и Семпрон, Феном, Феном II, FX, и Фјужн (енгл. Fusion) процесорима.

Историја АМД64

[уреди | уреди извор]

АМД64 је настао као алтернатива радикално другачије ИА-64 архитектуре, која је дизајниран од стране компаније Интел и ХП. Првобитно објављена у 1999[7] са пуном спецификацијом у августу 2000,[8] АМД64 архитектура је направљена да се дода 64-битно рачунарство на постојећу x86 архитектуру, за разлику од Интеловог стварања потпуно нове 64-битну архитектуру са ИА-64.

Први АМД64 процесор, Оптерон, је избачен у априлу 2003.

Карактеристике архитектуре

[уреди | уреди извор]
AMD64 регистри
63 ... 47 ... 31 ... 15 ... 07 ... 00 (позиција бита)
Главни регистри (8/16/32/64 бита)
RAX EAX AX AL A регистар
RBX EBX BX BL B регистар
RCX ECX CX CL C регистар
RDX EDX DX DL D регистар
Индексни регистри (16/32/64 бита)
RSI ESI SI Source Index
RDI EDI DI Destination Index
Стек регистри (16/32/64 бита)
RBP EBP BP Base Pointer
RSP ESP SP Stack Pointer
Додатни регистри (64 бита)
R8 регистар 8
R9 регистар 9
R10 регистар 10
R11 регистар 11
R12 регистар 12
R13 регистар 13
R14 регистар 14
R15 регистар 15
Показивач инструкције (16/32/64 бита)
RIP EIP IP Instruction Pointer
Сегментни регистри (16 бита)
CS Code Segment
DS Data Segment
ES Extra Segment
FS F Segment
GS G Segment
SS Stack Segment
XMM (SSE) регистри (128 бита)
XMM0 (128 бита) регистар 0
XMM1 (128 бита) регистар 1
XMM2 (128 бита) регистар 2
XMM3 (128 бита) регистар 3
XMM4 (128 бита) регистар 4
XMM5 (128 бита) регистар 5
XMM6 (128 бита) регистар 6
XMM7 (128 бита) регистар 7
XMM8 (128 бита) регистар 8
XMM9 (128 бита) регистар 9
XMM10 (128 бита) регистар 10
XMM11 (128 бита) регистар 11
XMM12 (128 бита) регистар 12
XMM13 (128 бита) регистар 13
XMM14 (128 бита) регистар 14
XMM15 (128 бита) регистар 15
Статусни регистар
17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (позиција бита)
V R 0 N IOPL O D I T S Z - A - P - C EFlags

Примарна карактеристика АМД64 је доступност 64-битних процесорских регистара, на пример rax, rbx и слично, 64-битне аритметичке и логичке операције целим бројем, и 64-битни виртуелне адресе. Дизајнери су искористили прилику да направе и друга побољшања. Најзначајније промене укључују:

  • 64-битни цео број: Сви регистри опште намене (ГПР) су проширена са 32 бита на 64 бита, и све аритметичке и логичке операције, операције меморија-регистар и регистар-меморија, итд, сада могу да раде директно на 64-битним целим бројевима.
  • Додатни регистри: Поред повећања величине регистара опште намене, број именованих регистара опште намене је повећан са осам (eax, ebx, ecx, edx, ebp, esp, esi, edi) у x86 на 16 (rax, rbx, rcx, rdx, rbp, rsp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15). Због тога је могуће држати више локалних променљивих у регистрима, а не на стеку, и да регистри чувају често приступљене константе; аргументи за мале и брзе потпрограме може такође бити усвојен у регистрима у већој мери. АМД64 и даље има мање регистре од многих заједничких РИСЦ скупова инструкција (који обично имају 32 регистара) или машина сличних ВЛИВ-у, као што су ИА-64 (који има 128 регистара). Међутим, имплементација АМД64 може имати далеко више интерних регистара од броја архитектонских регистара изложених по скупу инструкција (види преименовање регистара).
  • Додатни XMM (ССЕ) регистри: Слично, број 128-битних XMM регистара (користи се за стриминг СИМД инструкција) је такође повећан са 8 на 16.
  • Већи простор за виртуелно адресирање: АМД64 архитектура дефинише 64-битни виртуелни адресни формат, од којих се 48 бита користе у тренутним имплементацијама. Ово омогућава до 256 терабајта (248 бајтова) виртуелног адресног простора. Дефиниција архитектуре омогућава да ова граница буде подигнута у будућим имплементацијама до пуних 64 бита, проширујући виртуелни адресни простор до 16 ексабајта (264 бајтова). То је много у односу на само 4 гигабајта (232 бајта) за x86.

То значи да се над веома великим датотекама може бити оперисан преко мапирања целог фајла у адресни простор процеса (што је често много брже него рад позивима читања и писања), уместо мапирања региона датотеке у и ван адресног простора.

  • Већи физички адресни простор: оригинална имплементација АМД64 архитектуре имплементира 40-битне физичке адресе и тако могао да адресира до 1 ТБ (240 бајта) РАМ меморије. Тренутне имплементације АМД64 архитектуре (почевши од АМД 10х микроархитектуре) проширују га на 48-битне физичке адресе и због тога може да адресира и до 256 ТБ РАМ-а. Архитектура дозвољава продужење до 52 бита у будућности (ограничен због page table entry формата); ово би омогућило адресирање до 4 петабајта РАМ-а. За поређење, 32-битни x86 процесори су ограничени на 64 GB РАМ меморије у Physical Address Extension режиму, или 4 GB РАМ-а без ПАЕ режима.
  • Већи физички адресни простор у легаси (енгл. legacy) режиму: Када ради у режиму легаси АМД64 архитектура подржава ПАЕ режим, као и већина најновијих x86 процесора, али АМД64 протеже ПАЕ од 36 бита до архитектонског лимита од 52 бита физичкое адресе. Било каква имплементација стога дозвољава исту границу физичке адресе у дугом режиму.
  • ССЕ инструкције: Оригинална АМД64 архитектура је усвојила Интелов ССЕ и ССЕ2 и као основне инструкције. ССЕ3 инструкције су додате у априлу 2005. ССЕ2 је алтернатива ИЕЕЕ 80-битној прецизности x86 скупа инструкција са избором од ИЕЕЕ 32-битног или 64-битног рачунања са покретним зарезом. Ово обезбеђује операцијама са покретним зарезом да буду компатибилне са многим другим савременим процесорима. ССЕ и ССЕ2 инструкције су такође проширене да раде на осам нових XMM регистара. ССЕ и ССЕ2 су доступни у 32-битном режиму у модерним x86 процесорима; Међутим, ако се они користе за 32-битне програме, ти програми ће радити само на системима са процесорима који имају ову функцију. Ово није проблем у 64-битним програмима, јер сви АМД64 процесори имају ССЕ и ССЕ2 и, па користећи ССЕ и ССЕ2 инструкције и уместо x86 инструкција не смањује скуп машина на којима се x86-64 програми могу покренути. ССЕ и ССЕ2 су генерално бржи и дуплирају већину карактеристика традиционалнеих x86 инструкција, MMX, и 3DNow!.
  • No-Execute bit: "NX" бит (63. у page table) омогућава оперативном систему да одреди које странице виртуелне адресе могу садржати извршни код а које не могу. Покушај да се изврши код са странице означене са " no execute" ће резултовати у преступу при приступању меморији, сличано покушај да се пише преко " read-only" стране. Ово би требало да отежа злонамерном коду да преузме контролу над системом преко " buffer overrun" или "unchecked buffer" напада. Слична функција је доступна на x86 процесорима од 80286 као атрибутом сегментних дескриптора, међутим ово ради само на целом сегменту истовремено.

Сегментирано адресирање је дуго сматрано застарелим начином рада, а сви актуелне ПЦ (PC) оперативни системи на снази заобилазе га, постављајући све сегменте на базну адресу нуле и (у 32-битној имплементацији) величине 4 GB. АМД је први продавац породице x86 који је спровео "no-execute" у линеарном моду адресирања. Функција је такође доступна у легаси режиму на АМД64 процесорима, а однедавно и на Интел x86 процесорима, када се користи ПАЕ.

  • Уклањање старијих карактеристика: неколико карактеристика "системског програмирања" x86 архитектуре се не користе у модерним оперативним системима и нису доступни на АМД64 у дугом (64-битном и компатибилном) режиму. Ово укључује сегментирано адресирање (иако сегменти ФС и ГС сегменти остају у закржљалој форми за употребу као додатних базних показивача ОС структурама), који је механизам за промену стања задатка, и виртуелни 8086 мод. Ове особине остају у потпуности имплементиране у "легаси режиму", што дозвољава овим процесорима покретање 32-битних и 16-битних оперативних система без модификација. Неке инструкције за које се показало да су ретко коришћене нису подржане у 64-битном режиму: чување/враћање сегмента регистара на стек, чување/враћање свих регистара, децимална аритметика, BOUND и INTO инструкције, " far " скокове и позива са непосредним операнадима.

Детаљи виртуелног адресног простора

[уреди | уреди извор]

Канонска форма адресирања

[уреди | уреди извор]

Иако су виртуелне адресе ширине 64 бита у 64-битном режиму, актуелне имплементације (и сви чипови за које се зна да су у фази планирања) не дозвољавају да се цео виртуелни адресни простор од 264 бајтова (16 ЕБ) користи. Већини оперативних система и апликација неће требати толики адресни простор за догледну будућност (на пример, Windows имплементација за АМД64 су користи само 16 ТБ, или 44 бита), па спровођење такве широке виртуелне адресе ће једноставно повећати сложеност и Трошкови без стварне користи. АМД је стога одлучио да, у првим имплементацијама архитектуре, само најмање значајних 48 бита виртуелне адресе би преводилац адреса заправо користио. Даље, од бита 48 до 63 сви морају бити копија бита 47, или процесор ће подићи изузетак. Адресе које испуњавају ово правило се називају "канонске форме." Адресе канонске форма иду од 0 до 00007FFF'FFFFFFFF и од FFFF8000'00000000 до FFFFFFFF'FFFFFFFF, за укупно 256ТБ употребљивог виртуелног адресног простора.

Ово омогућава важну функцију за каснију скалабилност на право 64-битно адресирање: многим оперативним системима (укључујући Windows НТ породицу) узима вишу половину простора адреса (назван kernel простор) за себе и оставља доњу половину (кориснички простор) за апликациони код, корисничке стекове, хипове и друге регионе података. Дизајн "канонске адресе" обезбеђује да свака компатибилна имплементација АМД64 има две меморијске половине: доња половина почиње на адреси 00000000'00000000 и "расте нагоре" како више виртуелних адреса постану доступни, док је виша половина "усидрена" на врх адресе простора и расте надоле. Такође, фиксирање садржаја неискоришћене бит-них адреса спречава њихову употребу од стране оперативног система као flag, privilege markers, итд, зато што би таква употреба могла да постане проблематична када је архитектура проширена да спроводи више битова виртуелних адреса.

Тренутна 48-битна имплементација

56-битна имплементација

Пуна 64-битна имплементација

Page table структура

[уреди | уреди извор]

Дуги режим 64-битног адресирања ("long mode") је надскуп Physical Address Extensions (ПАЕ), због тога, величина страница може бити 4 КБ (212 бајтова) или 2 MB (221 бајт). Дуги режим такође подржава странице величине 1 GB (230 бајтова). Уместо page table система на три нивоа којег користе системи у ПАЕ режиму, системи који раде у дугом моду користи четири нивоа page table: ПАЕ-ов Page-Directory Pointer Table продужен је од 4 уноса до 512, а додатна Page-Map Level 4 (ПМЛ4) табела се додаје, која садржи 512 ставки у 48-битним имплементацијама. У имплементацијама које пружају веће виртуалне адресе, потоња табела би расла или да задовољи довољне уносе да опише цео ранг адреса, до теоријског максимума од 33.554.432 уноса за 64-битну имплементацију, или ће бити преранкирани новим нивоом за мапирање као што је ПМЛ5. Пуна хијерархија мапирања страница од 4 MB за цели 48-битни простор би заузео више од 512 MB РАМ-а (око 0,196% од 256 ТБ целог виртуелног простора)

Границе оперативних система

[уреди | уреди извор]

Оперативни систем такође може ограничити виртуални простор за адресирање. Детаљи су дати у одељку „Компатибилност са оперативним системима и карактеристике“.

Детаљи физичког адресног простора

[уреди | уреди извор]

Тренутне АМД64 имплементације подржавају физички адресни простор до 248 бајтова РАМ-а или 256 ТБ. Већа количина инсталираног РАМ-а омогућава оперативном систему да држи више "pageable" података и кода у РАМ-у, што може побољшати перформансе, мада ће различита оптерећења имати различите тачке умањујућих повратка.

Горња граница меморије која се може користити у датом x86-64 систему зависи од разних фактора и могу бити далеко мање него максимум процесора. На пример, од јуна 2010, нема познатих матичних плоча за x86-64 процесором који подржавају 256 ТБ РАМ меморије. Оперативни систем може да постави додатна ограничења на количину РАМ који је употребљив или подржан. Детаљи о овоме су дати у одељку тачки су дате у " Компатибилност са оперативним системима и карактеристике ".

Режими рада

[уреди | уреди извор]
Режим рада Радни подрежим Оперативни систем Тип кода Подразумевана величина адресе Подразумевана величина операнада Типично подржане величине операнада Register file величина Типична GPR ширина
Дуги режим 64-битни режим 64-битни оперативни систем 64-битни код 64 бита 32 бита 8, 16, 32, или 64 бита 16 регистра по фајлу 64 бита
Режим компатибилности 64-битни оперативни систем 32-битни код у заштићеном режиму 32 бита 32 бита 8, 16, или 32 бита 8 регистра по фајлу 32 бита
64-битни оперативни систем 16-битни код у заштићеном режиму 16 бита 16 бита 8, 16, или 32 бита 8 регистра по фајлу 32 бита
Легаси режим Заштићени режим 32-битни оперативни систем 32-битни код у заштићеном режиму 32 бита 32 бита 8, 16, или 32 бита 8 регистра по фајлу 32 бита
16-битни или 32-битни оперативни систем 16-битни код у заштићеном режиму 16 бита 16 бита 8, 16, or 32 бита 8 регистра по фајлу 16 или 32 бита
Виртуелни 8086 режим 16-битни или 32-битни оперативни систем 16-битни код у реалном режиму 16 бита 16 бита 8, 16, или 32 бита 8 регистра по фајлу 16 или 32 бита
Реални режим 16-битни или 32-bit оперативни систем 16-битни код у реалном режиму 16 бита 16 бита 8, 16, или 32 бита 8 регистра по фајлу 16 или 32 бита

Традиционални x87 ФПУ регистарски стек није укључен у екстензији регистара величине фајлова у 64-битном режиму.

State diagram of x86-64 operating modes

Дуги режим

[уреди | уреди извор]

Ово је примарни начин рада архитектуре. То је комбинација процесоровог "нејтив" (енгл. native) 64-битног режима и комбинованог 32 и 16-битног режима. Користе га 64-битни ОС-и. Под 64-битним оперативним системом, 64-битни програми раде у 64-битном режиму, а 32-битни и 16-битни заштићени режим апликације (које не морају да користите стварни или виртуелни 8086 режим како би се извршио било кад) ради у режиму компатибилности. Real-mode програми и програми који користе виртуелни 8086 режим у било ком тренутку не може да се покрену у дугом моду, осим ако није у питању емулирање софтвера.

Пошто је основни скуп инструкција исти, скоро да не постоји умањење перформанси у заштићеном режиму x86 кода. Ово је другачије од Интеловог ИА-64, где разлике у основном скупу инструкција значи да рад 32-битног кода се мора урадити или емулацијом x86 (што чини процес споријим) или са наменском x 86 процесором. Међутим, на платформи x86-64, многе апликације могу да имају користи од 64-битног рекомпајлирања, због додатних регистара у 64-битном коду и гарантоване ССЕ2 ФПУ подршке, коју могу да користе компајлер за оптимизацију. Међутим, апликацијама које редовно рукују целим бројевима ширим од 32 бита, као што су криптографски алгоритми, биће потребно прерађивање кода како би искористиле предности 64-битних регистара.

Легаси режим

[уреди | уреди извор]

Режим користи 16-бита ("заштићени мод" или "прави мод") и 32-битне оперативне системе. У овом режиму, процесор се понаша као 32-битни x86 процесор, а само 16-битни и 32-битни код може бити извршен. Легаси режим омогућава максимално 32-битно виртуелно адресирање који ограничава виртуелни адресни простор на 4 GB. 64-битни програми се не могу покренути из овог режима.

АМД64 имплементације

[уреди | уреди извор]

Следећи процесори имплементирају АМД64 архитектуру:

  • Opteron
  • Athlon 64
  • Athlon 64 X2
  • Athlon 64 FX
  • Athlon II (праћен "X2", "X3", or "X4" који означавају број језгара, и XLT модели)
  • Turion 64
  • Turion 64 X2
  • Sempron ("Палермо" E6 и сви "Манила" модели)
  • Phenom (праћен "X3" or "X4" који означавају број језгара)
  • Phenom II (праћен "X2", "X3", "X4" or "X6 који означавају број језгара)
  • FX
  • Fusion

Интел 64 је Интелова имплементација x86-64. Коришћен је у новијим верзијама Пентијума 4, Целерон Д, Ксеон и Пентијум Дуал Кор (енгл. Pentium Dual-Core) процесора, Атом 230, 330, D410, D425, D510, D525, N450, N455, N470, N475, N550, N570, N2600 и N2800 и све верзије Пентиум Икстрим Едишн (енгл. Pentium Extreme Edition), Кор 2 (енгл. Core 2), Кор и7, Кор и5, Кор и3 процесора.

Историја Интела 64

[уреди | уреди извор]

Кроз историју, АМД је развијао и правио процесоре по Интеловом дизајну, али са појавом x86-64 улоге су замењене. Интел се нашао у ситуацији где је прихватио архитектуру коју је АМД направио као екстензију Интелове x86 процесорске линије. Интелов пројекат је оригинално назван Јамхил (енгл. Yamhill). Након година негирања постојања радова на овом пројекту, Интел је објавио да он заправо постоји. Крег Берет, ПУО Интела у то време, је признао да је ово једна од најлошије чуваних тајни.

Интелов назив за овај скуп инструкција је променио неколико пута. Крајем 2006 Интел је почео користити име Интел 64 за његово спровођење, као што АМД користи АМД64.

Имплементације Интела 64

[уреди | уреди извор]

Први процесор који је имплементирао Интел 64 је био Ксеон са кодним именом Нокона (енгл. Nocona), јуна 2004. Насупрот томе, почетни Прескот чипови (фебруара 2004) нису омогућили ову функцију. Интел је касније почео са продајом Пентијум 4, са овом функцијом омогућеном. Е0 ревизија додаје eXecute Disable (ЕД), и био је укључен у тадашње Ксеон процесоре са кодним именом Ирвиндејл (енгл. Irwindale). Све 9xx, 8xx, 6xx, 5x9, 5x6, 5x1, 3x6, и 3x1 серије процесора имају Интел 64, као и Кор 2 ЦПЈ као што ће и будући процесори имати. Интел 64 је присутан и у последњим верзијама Целерон Д линије.

Први Интел мобилни процесор са Интел 64 је Мером верзија Кор 2 процесора, која је избачена 27. јула 2006. Ниједан од Интелових пртходних ЦПЈ није имплементирао Интел 64.

Следећи процесори имају Интел 64 архитектуру:

  • NetBurst микроархитектура
    • Xeon (сви модели после "Nocona")
    • Celeron (неки модели после "Prescott")
    • Pentium 4 (неки модели после "Prescott")
    • Pentium D
    • Pentium Extreme Edition
  • Core микроархитектура
    • Xeon (сви модели од "Woodcrest")
    • Core 2 (укључујући мобилне процесоре од "Merom")
    • Pentium Dual-Core (E2140, E2160, E2180, E2200, E2220, E5200, E5300, E5400, E6300, E6500, T2310, T2330, T2370, T2390, T3200 и T3400)
    • Celeron (Celeron 4x0; Celeron M 5xx; E3200, E3300, E3400)
  • Atom микроархитектура
    • 200 series
    • 300 series
    • N4xx, N5xx series
    • Dxxx series
  • Nehalem, Sandy Bridge, Ivy Bridge and Haswell микроархитектура
    • Core i3
    • Core i5
    • Core i7

VIА-ина имплементација

[уреди | уреди извор]

VIА Нано, ранија знана као VIА Исаја (VIA Isaiah) је 64-битни процесор за личне рачунаре. VIА Нано је избачена од компаније VIА Текнолоџис (енгл. VIA Technologies) 2008. након 5 година развоја. Ова нова архитектура је започета испочетка, и објављена је 24. јануара 2008. Процесор подржава неколико специфичних екстензија за поправљање ефикасности у применама са слабом снагом. Очекује се да ће VIА Исаја бити дупло бржа у рачунању са целим бројевима и 4 пута бржа у рачунању са покретним зарезом од VIА Естер при еквивалентом такту. Потрошња енергије је слична као претходне генерације БИА ЦПЈ, са снагом од 5 W до 25 W. Исаја је направљена да подржи функције као што је x86-64 скуп инструкција и x86 виртуелисање, који нису били доступни у пређашњим верзијама, VIА Ц7 линији.

Разлике између АМД 64 и Интел 64

[уреди | уреди извор]

Иако скоро идентични, постоје неке разлике између одва два скупа инструкција у семантици неколико ретко коришћених машинских инструкција (и/или ситуација), који се углавном користе за системско програмирање. Компајлери углавном праве машински код, који избегава било какве различитости, бар за обичне апликационе програме. Ово је стога интересантно углавном програмерима компајлера, оперативних система, и слично, који морају да се баве индивидуалним и специјалним системским инструкцијама.

Скорашње имплементације

[уреди | уреди извор]
  • BSF и BSR инструкције код Интел 64 се понашају другачије када је извор нула и када је операнд 32 бита. Процесор поставља нулти flag и оставља горња 32 бита дестинације недефинисане.
  • АМД 64 захтева другачији формат за ажурирање микрокода и контроле МСР-а (model-specific registers) док Интел 64 имплементира ажурирање микрокода исто као код својих 32-битних процесора.
  • Интел 64 нема неке МСР-ове који се сматрају битним код АМД 64. То су SYSCFG, TOP_MEM, и TOP_MEM2.
  • Интел 64 дозвољава SYSCALL и SYSRET само у 64-битном режиму (не и у режиму компатибилности). Дозвољава SYSENTER и SYSEXIT у оба режима.
  • АМД 64 нема SYSENTER и SYSEXIT у оба подрежима дугог режима.
  • Блиске гране са 66Х префиксом се понашају другачије. Интел 64 чисити само горњих 32 бита, док АМД 64 чисти горњих 48 битова.
  • Интел 64 нема могућност да сачува и поврати смањену и бржу верзију стања помераног зареза (укључујући FXSAVE и FXRSTOR инструкције)
  • Скорашњи АМД 64 процесори имају поново уведену ограничену подршку за сегментисање како би олакшали виртуелисање 64-битних гестова.

Старије имплементације

[уреди | уреди извор]
  • Рани АМД64 процесори нису имали CMPXCHG16B инструкцију, која је екстензија CMPXCHG8B инструкције присутна на већини пост-80486 процесора. Слично као CMPXCHG8B, CMPXCHG16B омогућава атомске операције на окталним речима. Ово је корисно за паралелне алгоритме који користе "compare and swap" на подацима већим од показивача, што је често у "lock-free" and "wait-free" алгоритмима. Без CMPXCHG16B се морају користити заобилазнице, као што су критична секција или алтернативни "lock-free" приступи. Ово такође спречава да 64-битни Windows има адресни простор за кориснички режим већи од 8 ТБ. 64-битна верзија Windowsа 8.1 захтева ову функцију.
  • Рани АМД 64 и Интел 64 процесори нису имали LAHF и SAHF инструкције. АМД је увео инструкције са њиховим Атлон64, Оптерон и Турион 64 процесори ревизије Д у марту 2005 док је Интел увео инструкције са Пентијумом 4 Г1 у децембру 2005. 64-битна верзија Windowsа 8.1 захтева ову функцију.
  • Рани Интел 64 процесори нису имали NX бит од АМД64 архитектуре. Ову функцију захтева свака верзија Windowsа 8.
  • Ране Интел 64 имплементације су дозвољавале само 64 GB физичке меморије док су оригиналне АМД64 имплементације дозвољавале присту 1 ТБ физичке меморије. Скорашње АМД64 и Интел 64 имплементације обезбеђују 256 ТБ физичког адресног простора (и АМД планира екпанзију до 4 петабајта). Капацитет физичке меморије ове величине је прикладан за велике апликације (као што су велике базе података), и рачуарсктво високих перформанси (централно оријентисане апликације и научничко рачунарство).

Компатибилност са оперативним системима и карактеристике

[уреди | уреди извор]

Следећи оперативни системи подржавају x86-64 архитектуру у дугом режиму.

Прелиминарни инфраструктурни рад је започео у фебруару 2004. за x86-64 порт. Овај развој је касније застао. Развој је почео поново током јула 2007 и наставио током Гугловог лета кода 2008. и СОЦ 2009. Прва званична верзија која је подржавала x86-64 је била 2.4.

FreeBSD је додао подршку под именом амд64 као екпериментална архитектура у 5.1 верзији у јуну 2003. Био је садржан у стандардној дистрибуцији од 5.2 јануара 2004. Верзија 6.0 је средила неке проблеме са радом x86 на амд64, и већина драјвера ради нормално, као на x86 архитектури.

Овде је архитектура x86-64 први пут добила подршку 19. јуна 2001. Од NetBSD 2.0, амд64 је у потпуној интеграцији са овим системом. 32-битни код је подржан у 64-битном режиму, са netbsd-32 kernel слојем за компатибилност за 32-битне системске позиве. NX бит је коришћен за обезбеђивање неизвршивог стека и хипа са гранулацијом по страни (сегментирано гранулирање се користи на 32-битној x86)

Могуће је ући у дуги режим у ДОС-у без ДОС екстендера, али се кориник мора вратити на реалан режим да би позвао БИОС или ДОС прекиде.

Дакође је могуће ући у дуги режим, са ДОС екстендером сличним DOS/4GW, али комплекснији јер x86-64 нема виртуелни 8086 режим. ДОС то не зна, и не треба очекивати предности, осим ако ДОС ради у емулацији са адекватним драјвером за виртуелисање, на пример интерфејс за масовно складиштење.

Linux је био први ОС који је покренуо x86-64 у дугом режиму, почев од верзије 2.4 2001. Линук такође обезбеђује компатибилност за покретање 32-битних програма. Ово омогућава да се програми рекомпајлирају у дугом режим задржавајући коришћење 32-битних програма. Неколико Linux дистрибуција се тренутно испоручује са x86-64-native kernel-. Неки, као што су Arch Linux, SuSE, Мандрива, и Дебиан ГНУ/Линукс, омогућавају корисницима да инсталирају скуп 32-битних компоненти и библиотека приликом инсталирања са 64-битног DVD-а, што омогућава да већина постојећих 32-битних апликације ради. Друге дистрибуције, као што су Федора, Слеквер и Убунту, доступни су у једној верзији компајлирану за 32-битну архитектуру и другу компајлирану за 64-битну архитектуру. Федора и Ред Хет Ентерпрајс Линукс дозвољава истовремену уградњу свих усерланд компоненти у 32 и 64-битне верзије на 64-битном систему.

x32 ABI (Application Binary Interface), уведен у Линук 3.4, омогућава програмима компајлираним за x32 ABI да ради у 64-битном режиму x86-64, док користи само 32-битне показиваче и поља података. Иако ово ограничава програм на виртуелни адресни простор од 4 GB такође се смањује меморијски отисак програма и у неким случајевима може дозволити да ради брже.

64-битни Линукс дозвољава до 128 ТБ виртуелне адресе за појединачне процесе, и може да адресира око 64 ТБ физичке меморије, под условом да нема процесорских и ограничења система.

Мак ОС Х v10.4.7 и даље верзије v10.4 покрећу 64-битне командне алатке користећи POSIX и математичке библиотеке на 64-битним Интел машинама, као што све верзија 10.4 и 10.5 раде на 64-битним PowerPC машинама. Мак ОС Х подржава 64-битне ГУИ апликацје користећи Кокоа, Кварц, ОПЕНГЛ, и X11 на 64-битним Интел машинама, као и на 64-биотним PowerPC машинама. Све библиотеке које нису за ГУИ такође подржавају 64-битне апликције на тим платформама. Кернел, и све ектензије су само 32-битне.

Мак ОС Х 10.6 је прва верзија која подржава 64-битни кернел. Међутим, не могу сви 64-битни рачунари покренути 64-битни кернел. 64-битни кернел, као 32-битни кернел, подржава 32-битне апликације, оба језгра такође подржавају 64-битне апликације. 32-битне апликације имају ограничени виртуелни адресни простор на 4 GB испод оба језгра. ОС Х 10.8 обухвата само 64-битни кернел, али наставља да подржава 32-битне апликације.

ОС Х користи универзални бинарни формат за пакетирање 32 и 64-битне верзије апликације и библиотекарског кода у једној датотеци, најприкладнија верзија се аутоматски бира у време учитавања. У Мек ОС Х 10.6, универзални бинарни формат се такође користи за кернел и за оне екстензије кернела који подржавају 32-битне и 64-битне кернеле.

За Соларис 10, баш као и са SPARC архитектуру, постоји само један слика оперативног система, која садржи 32-битни и 64-битни кернел, и означено је као "x64/x86" DVD-РОМ слика. Подразумевано понашање је да се покрене 64-битни кернел, омогућавајући да се и 64-битни и постојећи или нови 32-битни програми бити покренути. 32-битни кернел се може ручно изабрати, у ком случају ће само 32-битни програми радити. Команда isainfo може да се користи за утврђивање да ли систем ради под 64-битном кернелу.

За Соларис 11, само 64-битни кернел је обезбеђен. Међутим, 64-битни кернел подржава и 32 и 64-битне програме, библиотеке, и системске позиве.

x64 клијент и сервер издања система Мицрософт Windows, Windows XP Professional и Windows Сервер 2003 x64 Едитион су пуштени марта 2005. Интерно они су заправо исти буилд (5.2.3790.1830 SP1), јер деле исту изворну базу и оперативног система, па чак и ажурирања система су пуштена у обједињене пакете, као Windows 2000 Профешнал и Сервер издања за x86. Windows Виста, који такође има много различитих издања, објављена је у јануару 2007. Windows 7 је пуштен у јулу 2009. Windows Сервер 2008 Р2 и новије верзије ће бити доступане само као x64 верзије. Windows за x64 има следеће карактеристике:

  • 8 TB of "user mode" virtual address space per process. 8 ТБ "Кориснички" виртуелни адресни простор по процесу. x64 може да користи све ово, под условом да је повезан "large address aware" опцијом.

Ово је увећање од 4096 за дифолтна 2 GB виртуелног адресног простора корисничког режима које нуди 32-битни Windows.

  • 8 ТБ мод кернела виртуелног адресног простора за оперативни систем. Као и код адресног простора корисничког режима, то је повећање 4096 преко 32-битне верзије Windowsа. Већи простор првенствено користи кеш меморију фајл-система и кернел режим "хипа" (енгл. heaps) (nonpaged pool and paged pool). Windows користи само 16 ТБ од 256 ТБ имплементирано од процесора јер рани АМД64 процесори нису имали CMPXCHG16B инструкцију.
  • Способност да покрену постојеће 32-битне апликације (.exe) и Динамиц Линк библиотеке dynamic link libraries (.dlls) користећи WoW64. Осим тога, 32-битни програм може, ако је повезан са "large address aware" опцијом, да користите до 4 GB виртуелног адресног простора у 64-битном Windows-у, уместо подразумеване 2 GB (опционално 3 GB са / 3 GB boot опцијом и "large address aware" опцијом) коју нуди 32-битни Windows.

За разлику од употребе боот опције / 3 GB на к86, ово не умањује кернел-режим-виртуелног адресног простора на располагању оперативном систему. 32-битне апликације стога могу имати користи одпокретање на x64 Windowsу, чак и ако нису рекомпајлиране за x86-64.

  • И 32 и 64-битне апликације, ако нису повезане са "large address aware", ограничене су на 2 GB виртуелног адресног простора. Способност да се користе до 128 GB (Windows XP / Виста), 192 GB (Windows 7), 512 GB (Windows 8), 1 ТБ (Windows Сервер 2003), 2 ТБ (Windows Сервер 2008) или 4 ТБ (Windows Сервер 2012) од физичке меморије (РАМ-а).
  • ЛЛП64 модел података: "int" и "long" типови су широке 32 бита, long long је 64 бита, док показивачи и типови изведени из показивача су широке 64 бита.
  • Управљачки програми за уређаје у кернел моду морају бити 64-битне верзије, не постоји начин да покренете 32-битни кернел-режим програма у оквиру 64-битног оперативног система. Управљачки програми корисничког режиа могу бити или 32-битни или 64-битни.
  • 16-битни Windows (Win16) и ДОС апликације неће радити на x86-64 верзијама оперативног система Windows због уклањања Виртуал ДОС Машине (NTVDM) који се ослањао на могућност коришћења виртуелног 8086 режима. Виртуелни 8086 режим не може се унети у току рада у дугом режиму.
  • Пуна имплементација НКС (Не Екецуте) функције заштите страница. Ово је такође имплементирано на недавним 32-битним верзијама оперативног система Windows, када су стартовани у ПАЕ режиму.
  • Уместо ФС сегмент дескриптора на x86 верзијама Windows НТ фамилије, ГС сегмент дескриптор се користи да укаже на две дефинисане структуре оперативног система: Thread Information Block (NT_TIB) у корисничком режиму и Processor Control Region (KPCR) у режиму кернела. Тако је, на пример, у корисничком режиму ГС:0 адреса првог члана Thread Information Block-а. Одржавање ове конвенције је олакшало портовање x86-64, али је натерало АМД да задржи функцију сегмената ФС и ГС у дугом режиму - чак иако сегментирано адресирање по себи није стварно користи од стране било ког модерног оперативног система.
  • Рани извештаји тврде како operating system scheduler неће сачувати и обновити к87 ФПУ стање машине преко thread context прекидача. Посматрано понашање показује да ово није случај: к87 стање се чува и врати, осим за kernel-mode-only thread-ове (ограничење које постоји и у 32-битној верзији). Најновија документација доступна од Мајкрософта наводи да се x87/MMX/3DNow! инструкције могу користити у дугом режиму, али да су застареле и могу изазвати проблеме са компатибилношћу у будућности.
  • Неке компоненте као што су Мајкрософт Џет Дејтабејз Енџин (енгл. Microsoft Jet Database Engine) и приступ подацима објеката неће бити портовани у 64-битној архитектури, као што су x86-64 и ИА-64.
  • Мајкрософт Вижуал Студио може компајлирати изворне апликације да циљају или x86-64 архитектуре, која може да ради само на 64-битном Windowsу, или архитектуре ИА-32, које могу радити као 32-битне апликације на 32-битном Windowsу или 64-битном Windowsу у режиму емулације WoW64. Managed апликације могу бити компајлиране или у ИА-32, x86-64 или ЕниЦПУ режиму. Софтвер створен у прва два режима се понаша као његов ИА-32 или x86-64 кодни дупликат. Међутим када се користи режим ЕниЦПУ, апликације у 32-битним верзијама оперативног система Windows раде као 32-битне апликације, док раде као 64-битна апликација у 64-битним издањима оперативног система Windows.

Конзоле за видео игре

[уреди | уреди извор]

ПлејСтејшн 4 и ИксБокс Један садрже Јагуар, вишејезграни процесор кога је дизајнирао АМД. Оба користе x86-64 да адресирају 8 GB РАМ-а.

Конвенције за називе у индустрији

[уреди | уреди извор]

Пошто су АМД64 и Интел 64 суштински слични, многи софтверски и хардверски производи користе један израз да искажу своју компатибилност са обе имплементације. АМД-ов оригинални назив за ову процесорску архитектуру, " x86-64", се још увек користи за ову сврху, као и варијанта "x86_64". Друге компаније, као што су Мајкрософз и Сан Мајкросистемс/Оракл, користе израз "x64" у маркетиншким материјалима.

Многи оперативни системи и производи, посебно оне која су ушли на тржиште x86-64 пре уласка Интела на тржиште, користе термин "АМД64" или "амд64" да се односи и на АМД64 и Интел 64.

  • BSD системи, као што су ФрееБСД, МиднигхтБСД, НетБСД и ОпенБСД реферишу на АМД64 и Интел 64 именом "амд64".
  • Линукс кернел и ДрегонФлај BSD назива 64-битну архитектуру "x86_64".
  • Дебиан, Убунту, Генту називају и АМД64 и Интел 64 називом "амд64".
  • GNU Compiler Collection, Fedora, PackageKit, openSUSE, и Arch Linux називају 64-битну архитектуру "x86_64".
  • Хаику назива 64-битну архитектуру "x86_64".
  • У ЈДК се користи име амд64 за директоријум у коме су x86-64 датотеке.
  • ОС ИКС назива 64-битну архитектуру "x86_64".
  • Microsoft Windows: x64 верзије оперативног система Windows користе АМД64 надимак интерно да одреде различите компоненте које користе или су компатибилни са овом архитектуром. На пример, променљивој окружења PROCESSOR_ARCHITECTURE је додељена вредност "амд64" насупрот " x86" у 32-битним верзијама, а системски директоријум на Windows x64 Едишн инсталационом ЦД-РОМ-у је назван "АМД64", за разлику од "и386 "у 32-битним верзијама.
  • Соларис: команда isalist у Соларис оперативном систему идентификује оба система као "амд64".
  • Т2 СДЕ назива и АМД64 и Интел 64 називом " x86-64", у директоријумима изворног кода.

Проблеми са лиценцирањем

[уреди | уреди извор]

Интел лиценцира АМД-у право да користи оригиналну архитектуру x86 на којима се заснива АМД x86-64. У 2009, АМД и Интел су решили неколико тужби и неслагања око унакрсног-лиценцирања, проширујући своје уговоре унакрсног-лиценцирања.

Референце

[уреди | уреди извор]
  1. ^ Corporation, AMD (2011). „Volume 2: System Programming” (PDF). AMD64 Architecture Programmer's Manual. AMD Corporation. Приступљено 29. 10. 2011. 
  2. ^ Corporation, IBM (6. 9. 2007). „IBM WebSphere Application Server 64-bit Performance Demystified” (PDF). стр. 14. Архивирано из оригинала (PDF) 25. 01. 2022. г. Приступљено 9. 4. 2010. „"Figures 5, 6 and 7 also show the 32-bit version of WAS runs applications at full native hardware performance on the POWER and x86-64 platforms. Unlike some 64-bit processor architectures, the POWER and x86-64 hardware does not emulate 32-bit mode. Therefore applications that do not benefit from 64-bit features can run with full performance on the 32-bit version of WebSphere running on the above mentioned 64-bit platforms." 
  3. ^ „Debian AMD64 FAQ”. Debian Wiki. Архивирано из оригинала 26. 09. 2019. г. Приступљено 3. 5. 2012. 
  4. ^ „x86-64 Code Model”. Apple. Приступљено 23. 11. 2012. 
  5. ^ arch(1) – Darwin and macOS General Commands Manual
  6. ^ Kevin Van Vechten (9. 8. 2006). „re: Intel XNU bug report”. Darwin-dev mailing list. Apple Computer. Архивирано из оригинала 01. 02. 2020. г. Приступљено 5. 10. 2006. „The kernel and developer tools have standardized on "x86_64" for the name of the Mach-O architecture 
  7. ^ „AMD Discloses New Technologies At Microporcessor Forum” (Саопштење). AMD. 5. 10. 1999. Приступљено 9. 11. 2010. 
  8. ^ „AMD Releases x86-64 Architectural Specification; Enables Market Driven Migration to 64-Bit Computing” (Саопштење). AMD. 10. 8. 2000. Приступљено 9. 11. 2010. 

Спољашње везе

[уреди | уреди извор]