X86 — разлика између измена

Садржај обрисан Садржај додат
Нема описа измене
Нема описа измене
Ред 87:
| 10 ([[System on a chip|SoC]], [[Many Integrated Core|MIC]]) || 2015/2016 || Intel [[Skylake (microarchitecture)|Skylake]]/[[Skymont (microarchitecture)|Skymont]] || || [[Out-of-order execution|Out-of-order]], 64-bit (integer CPU), AVX3, integrated on-die [[Southbridge (computing)|southbridge]], integrated on-die x86 MIC array [[Graphics processing unit|GPU]] -->
|}
 
== Историја ==
 
=== Позадина ===
Х86 архитектура је први пут коришћена у [[Интел 8086|Intel 8086]] [[Процесор|централној процесорској јединици]] (CPU) објављена током 1978. године, потпуно 16-битни дизајн био је заснован на раним 8-битном [[Интел 8008|8008]] и [[Интел 8080|8080]]. Иако бинарно некомпатибилан, био је дизајниран да омогући програме [[Асемблер|асемблерског језика]] писане за ове процесоре (као и савремени [[Интел 8085|8085]]) да буду механички преведени на еквивалентни 8086 склоп. Ово је направило да нови процесор буде са примамљивим софтверским миграционим путем за многе купце. Међутим, 16-битна спољна магистрала података од 8086 подразумева прилично значајан редизајн хардвера, као и друге компликације и трошкове. Да би решили ову препреку, Intel је представио скоро индентичан 8088, у основи 8086 са 8-битном екстерном магистралом података која допушта једноставније [[Штампана плоча|штампане плоче]] и захтева мање (1-битне ширине) [[Динамичка меморија са случајним приступом|DRAM]] чипове; било је такође једноставније повезати се на већ успостављен (нпр. ниске цене) 8-битни систем и периферне чипове. Између осталог, не-техничких фактори, ово је допринело да IBM одлучи да дизајнира [[Кућни рачунар|кућни рачунар]]/[[Лични рачунар|персонални рачунар]] заснован на 8088, упркос присуству 16-битног микропроцесора од Motorola, Zilog, и National Semiconductor (као и неколико успостављених 8-битних процесора, који су се такође разматрали). Добијен [[IBM PC|IBM PC]] касније је постао приоритетан за Z80 заснован [[CP/M]] систем, Apple IIs, и других популарних рачунара као de facto стандард за персоналне рачунаре, чиме се омогућава да 8088 и његови наследници доминирају овако великим делом тржишта микропроцесора.
 
==== iAPX 432 и 80286 ====
Други фактор је био да непредни али не-компатибилни 32-битни [[Intel 8800]] (alias iAPX 432) није успео на тржишту у време када је оригинални IBM-PC покренут; нови и брз [[80286]], заправо је допринео у разочарењу у односу на перформансе полу-савременог [[8800]] током ране 1982. године ([[Интел 80186|80186]], покренут истовремено са 80286, био је намењен за [[Уграђени систем|уграђене системе]], па би стога имао у сваком случају велико тржиште). Тржишни неуспех 32-битног 8800 био је значајан подстицај за Intel да настави да развија напредије 8086 компатибилне процесоре, као што је [[80386]] (32-битно проширење добро обављеног 80286).
 
=== Остали произвођачи ===
[[Image:Am386SXL-25cropped.jpg|thumb|120px|[[Am386]] који је пустио у продају AMD у 1991. години]]
 
У различата времена, компаније као што су [[IBM]], NEC,<ref>''The NEC V20 and V30 also provided the older 8080 instruction set, allowing PCs equipped with these microprocessors to operate CP/M applications at full speed (i.e. without the need to simulate a 8080 by software).
''</ref> [[AMD]], [[Тексас инструментс|TI]], [[STM]], [[Фуџицу|Fujitsu]], [[OKI]], [[Сименс (компанија)|Siemens]], [[Cyrix]], [[Intersil]], [[C&T]], [[Нексген|NexGen]], [[UMC]], и [[DM&P]] почеле су да дизајнирају и/или производе х86 [[Процесор|процесоре]] (CPU) намењене персоналним рачинарима као и уграђеним системима. Такве х86 имплементације су ретко једноставне копије, али често користе различите унутрашње микроархитектуре као и различита решења у електронским и физичким нивоима. Савим природно, рани компатибилни микропроцесори су 16-битни, док су 32-битни развијени много касније. За тржиште [[Лични рачунар|персоналних рачунара]], реалне количине су почеле да се појављују око 1990. године са i386 и i486 компатибилним процесорима, често под називом слично Intel-овим оригиналним чиповима. Друге компаније, које дизајнирају или производе х86 или х87 процесоре, укључују ITT Corporation, National Semiconductor, ULSI System Technology, и Weitek.
 
Након што је следила потпуно проточна обрада i486, [[Интел|Intel]] је представио бренд име Pentium (који, за разлику од бројних других, могао бити заштићен) за свој нови скуп суперскаларног х86 дизајна. Са х86 именованом шемом сада легално очишћеном, [[IBM]] се удружио са Cyrix да произведе 5x86, а затим врло ефикасан 6x86 (M1) и 6x86MX (MII) линије Cyrix дизајна, који су били први х86 микропроцесори који имплементирају регистарско преименовање да омогуће спекулативно извршење. AMD је у међувремену дизајнирао и произвео напредни али закаснели 5k86 (K5), који је, интерно, био уско базиран на AMD-ов рани 29K [[Рачунар са смањеним скупом инструкција|RISC]] дизајн; слично као [[Нексген|NexGen]]'s Nx586, он користи стратегију тако да прикаже стање проточне обраде декодираних х86 инструкција у уједначеним и лако рукујућим микро-операцијама, метод који је остао основа за већину х86 дизајна до данашњег дана.
 
Неке ране верзије ових микропроцесора су имале проблем одвођења топлоте. 6x86 је такође погођен са неколико мањих компатибилних проблема, [[Нексген|Nx586]] је имао недостатак покретног зареза (FPU) и (тадашње кључне) пин-компатибилности, док је К5 имао нешто разочаравајући учинак када је (коначно) уведен. Корисничко незнање о алтернативи за Pentium серију додатно је допринело да ти дизајни буду неуспешни, упркос чињеници да је К5 имао веома добру Pentium компатибилност и 6x86 је био знатно бржи од Pentium-а у целобројном коду.<ref>It had a slower FPU however, which is slightly ironic as Cyrix started out as a designer of fast Floating point units for x86 processors.</ref> [[AMD]] је касније успео да се наметне као озбиљан такмичар са К6 скупом процесора, који су трасирали пут ка веома успешним Athlon и Opteron процесорима. Било је и других такмичара, као што су [[Centaur Technology]] (раније [[IDT]]), [[Rise Technology]], и [[Трансмета|Transmeta]]. VIA Technologies-ов енергетски ефикасан С3 и С7 процесори, који су били дизајнирани од стране Centaur компаније, продати су за много година. Centaur-ов најновији дизајн, VIA Nano, је њихов први процесор са суперскларним и speculative execution (спекулативно извршење је техника оптимизације где рачунарски систем обавља неки задатак који не може бити стварно потребан). Он је, вероватно занимљиво, уведен у отприлике исто време као и Intel-ов први "in-order" процесор још од [[Р5]] [[Pentium]], [[Intel Atom]].
 
=== Проширење величине речи ===
[[Скуп инструкција|Скуп инструкција]] архитектуре је два пута проширен на већу величину речи. Године 1985., Intel је објавио 80386 (касније познат као i386) који је постепено заменио 16-битне чипове у рачунарима (мада обично не у [[Уграђени систем|уграђеним системима]]) током наредних година; ово проширење програмских модела се првобитно односило на i386 архитектуру (као прва имплементација) али Intel ју је касније назвао IA-32 када уводи своју (измишљену) IA-64 архитектуру. Године 1999.-2003., AMD проширује ову 32-битну архитектуру на 64-бита и осноси си се на њу као на x86-64 у раним документацијама и касније као AMD64. Intel ускоро усваја [[AMD]]-ове архитектонске додатке под именом IA-32e које је касније преименовао у EM64T и коначно Intel 64. Међу ових пет имена, оригинални x86-64 се вероватно најчешће користи иако [[Мајкрософт|Microsoft]] и [[Sun Microsystems]] такође користе термин х86.
 
== Преглед ==
 
=== Основне особине архитектуре ===
Х86 архитектура је променљиве дужине инструкције, пре свега "[[Рачунар са сложеним скупом инструкција|CISC]]" дизајна са акцентом на заосталу компатибилност. Скуп инструкција није типичан CISC, међутим, већ у основи су проширене верзије једностване осмо-битне [[8008]] и [[Интел 8008|8080]] архитектуре. Адресирање бајта је омогућено и речи се чувају у меморији са [[Big endian|little-endian]] (Little endian је начин записа податка у меморији тако да је на нижој адреси нижи бајт меморијске речи.) редоследих битова. Приступ меморији за не-поравнате (unaligned) адресе је дозвољен за све важеће величине речи. Највећа природна величина за цели број у аритметици и меморијским адресама (или офсету) је 16, 32 или 64 бита у зависности од генерације архитектуре (новији процесори укључују директну подршку и за мање целе бројеве). Вишеструке скаларне вредности могу се извршавати истовремено преко SIMD јединице присутне у каснијим генерацијама, као што је описано у наставку.<ref>''16-bit and 32-bit microprocessors were introduced during 1978 and 1985 respectively; plans for 64-bit was announced during 1999 and gradually introduced from 2003 and onwards.''</ref> Непосредно адресирање офсета и непосредни подаци могу се изразити као 8-битна количина за честе појавне случајеве или у контекстима где је опсег -128...127 довољан. Типичне иструкције су стога 2 или 3 бајта дугачке (мада су неке много дуже, а неке су једнобајтне).
 
Да би се даље уштедео престор кодирања, већина регистара се изражавају у opcodes коришћењем три бита, и највише једног операнда да инструкција може бити меморијска локација (неки "CISC" дизајни, као што је PDP-11, може користити две). Међутим, овај операнд меморије такође може бити одредиште (или комбинација извора и одредишта), док други операнди, извор, могу бити или регистровани или immediate operand (immediate operand је операнд који је директно кодиран као део машинске инструкције). Међу осталим факторима, то доприноси величини кода који конкурише осмо-битној машини и омгућава ефективно коришћење инструкција кеша. Релативно мали број општих регистара (такође наслодник своји 8-битних предака) је направио важан метод регистар-релативног адресирања (корисећи мале непосредне офсете) приступа операнадима, посебно на стеку. Много напора је стога уложено у прављење таквог приступа као што је брз регистарски приступ, односно један циклус проточних инструкција, у већини случајева у којима је приступ подацима могућ на највишем нивоу у кешу.
 
==== Покретни зарез и SIMD ====
Приказани покретни зарез процесора са 80-битним интерним регистрима, [[Интел 8086|8086]], је развијен за оригинални 8086. Овај микропроцесор се касније развио у проширени 80387, а каснији процосори су уграђена заостала компатибилна верзија ове функционалности на истом микропроцесору као главном процесору. Поред тога, модерни х86 дизајн такође садржи SIMD-јединицу (види SSE доле) где инструкције могу да раде паралелно на (једној или две) 128-битној речи, од којих свака садржи 2 и 4 броја у покретном зарезу (сваки 64 или 32 битне ширине респективно), или алтернативно, 2, 4, 8 или 16 целобројних бројева (сваки 64, 32, 16 или 8 битова дужине респективно). Широки SIMD регистри значе да постојећи х86 процесор може учитати или ускладиштити до 128 бита меморијских података у једној инструкцији и такође обављати операције над битовима (мада не целобројна аритметика<ref>''That is because integer arithmetic generates carry between subsequent bits (unlike simple bitwise operations).''</ref>) на количини пуних 128-бита паралелно. Са увођењем Intel-ових "SandyBridge" процесора, х86 процесори почели су да користе 256-бита ширине SIMD регистре, заједно са AVX (Advanced Vector Extensions) скупом инструкција. Knights Corner, архитектура коју користи Intel на својим Xeon Phi ко-процесорима, користе 512-битне ширине SIMD регистре.
 
Тренутне имплементације
Током извршења, актуелни х86 процесори користе неколико додатних корака за декодирање да поделе више инструкција на мање комаде (микро-операције). Они се потом предају [[Управљачка јединица|контролној јединици]] која их баферује и распоређује у складу са х86-семантиком, тако да оне могу бити извршене, делимично паралелно, помоћу једног од неколико (више или мање специјализоване) извршних јединица. Ови модерни х86 дизајни су суперскаларни, и такође у стању су да изврше преко реда и спекулативне операције (преко преименовања регистра), што значи да може да изврше више (делимично или потпуно) х86 инструкција истовремено, а не нужно у истом распореду који је добијен у унструкцијском стриму.
 
Када је уведен, средином 1990. година, овај метод се понакад називао "RISC језгро" или "RISC превођење", делом због маркетиншких разлога, али и због тога што ове микро-операције деле неке особине са одређеним врстама RISC инструкција. Међутим, традиционални микрокод (користи се од 1950. године) такође суштински дели многе исте особине; нови метод углавном се разликује у томе да се превођење на микро-операције сада дешава асинхроно. Не морање синхронизације извршне јединице са корацима декодовања отвара могућности за додатне анализе (баферованог) стрима кода, па самим тим омогућава детекцију операција које се могу обављати паралелно, истовремено хранећи више од једне извршне јединице.
 
Каснији процесори такође раде супротно када је могуће; они комбинују одређене х86 секвенце (као што је поређење, праћено условним скоком) у више микро-операција које боље одговарају моделу извршења и на тај начин се могу извршити брже или са мање коришћења машинског ресурса.
 
Још један начин за побољшање перформанси је да се кеширају декодаване микро-операције, тако да процесор може директно приступити декодованим микро-операцијама из посебног кеша, уместо да их поново декодира. Intel је пратио овај приступ са Execution Trace Cache карактеристикама у њиховој NetBurst микроархитектури (за Pentium 4 процесор) и касније у Decoded Stream Buffer-у (за јзгро-брендиране процесоре од Sandy Bridge).<ref>{{cite web|url=http://software.intel.com/sites/products/documentation/doclib/iss/2013/amplifier/lin/ug_docs/GUID-143D1B76-D97F-454F-9B4B-91F2D791B66D.htm|title=DSB Switches|work=Intel VTune Amplifier 2013|publisher=Intel|accessdate=August 26, 2013}}</ref>
 
[[Трансмета|Transmeta]] је користила потпуно другачији метод у њиховим х86 компатибилним CPU-овима. Они су користили тачно-на-време превођење за конвертовање х86 инструкције на CPU-ов матерњи [[Јако дуга реч инструкције|VLIW]] скуп инструкција. Transmeta је тврдила да њихов приступ омогућава дизјне веће енергетске ефикасности, пошто се CPU може одрећи компликованих корака за декодовање више традиционалних х86 инструкција.
 
== Сегментација ==
Микрорачунари током касних 1970. година су радили против 16-битнне 64 [[Килобајт|КВ]] адресних лимита, пошто је меморија постајала јефтинија. Неки микрорачунари попут PDP-11 су користили сложене шеме банкарске-замене, или, у случају Digital's VAX, када су редизајнирани много скупљи процесори који су могли директно да раде са 32-битним адресама и подацима. Оригинални 8086, се развио из простог [[Интел 8080|8080]] микропроцесора и, пре свега, у циљу веома малих и јефтиних рачунара и других специјализованих уређаја, уместо усвајања једноставних сегмент регистара који повећавају ширину меморијске адресе за само 4 бита. Множењем 64КВ магистрале са 16, 20-битна адреса је могла да адресира укупно један [[Мегабајт|мегабајт]] (1.048.576 бајтова), што је у то време био доста велики број за мали рачунар. Концепт сегмента регистара није био нов за многе mainframes (mainframe су врло велики компјутери способни да подрже стотине или чек хиљаде корисника) који су користили сегмент регистар да брзо мењају различите задатке. У пракси, на х86 је било (је) доста критика за имплементацију која у великој мери компликује много заједничких програмских задатака и компајлере. Међутим, архитектура убрзо дозвољава линеарно 32-битно адресирање (почевши од 80386 краје 1985. године), али главним актерима (као што је [[Мајкрософт|Microsoft]]) је требало неколико година да конвертују њихове 16-битно базиране системе. 80386 (и 80486) се стога још много година у великој мери користио као брз (али још увек 16-битно заснован) 8086.
 
Подацима и/или кодовима се могло управљати у "near" 16-битним сегментима у оквиру 1 [[Мегабајт|МВ]] адресног простора, или је компајлер могао да ради у "far" моду користећи 32-битне сегмент:офсет парове достижући (само) 1МВ. Иако ће се то показати прилично ограничавајућим до средине 1980. година, то је радило за PC тржиште у настајању, а направило га је врло једноставним за превођење софтвера са старих [[Интел 8008|8008]], [[8080]], [[Интел 8085|8085]] и Z80 на новије процесоре. Током 1985. године, модел 16-битне адресе постао је ефикасан увођењем 32-битних офсет регистара, у 386 дизајну.
 
У реалном моду, сегментација се постиже шифтовањем сегментних адреса улево за 4 бити и додавањем офсета у реду како би се добила коначна 20-битна дреса. На пример, ако је DS A000h и SI 5677h, DS:SI ће указивати на апсолутну адресу DS × 10h + SI = A5677h. Тако је укупан адресни простор у реалном режиму 220 бајта, или 1МВ, прилично импресивна цифра за 1978. годину. Све меморијске адресе се састоје од сегмента и офсета; свака врста приступа (код, подаци, или стек) има default сегментни регистар који је у вези са њим (за податке уобичајени регистар је DS, за код CS, и за стек SS). За приступ подацима, сегментни регистар може експлицитно да се наведе (коришћењем сегментног override префикса) да користи било који од четири сегмент регистра.
 
У овој шеми, два различита сегмент/офсет пара могу показивати на једну апсолутну локацију. Тако, ако је DS A111h и SI 4567h, DS:SI ће показивати на исту A5677h адресу као и горе. Ова шема чини је немогућом да користи више од четири сегмента одједном. CS и SS су од виталног значаја за правилно функционисање програма, тако да се само DS и ES могу користити за показивање на сегментима података изван програма (или, тачније, ван тренутног сегментног извршавања програма) или стека.
 
У заштићеном режиму, сегментни регистар нема дуже садржаје физичке адресе од почетка сегмента, али садржи "selector" који показује на system-level структуру, звану сегментни дескриптор. Сегментни дескриптор садржи физичку адресу од почетка сегмента, дужину сегмента, и дозволе приступа том сегменту. Офсет се проверава због дужине сегмента, са офсетима који се односе на локације изван сегмента узрокујући изузетке. Офсетови који се односи на локације унутар сегмента су у комбинацији са физичком адресом од почетка сегмента да би се добила физичку адресу која одговара том офсету.
 
Сегментирана природа може да направи тешким програмирање и дизајн компајлера, јер употреба near и far показивача утиче на перформансе.
 
== Режими адресирања ==
Режими адресирања за 16-битни х86 процесор могу се сумирати овом формулом:
 
:<math>
\begin{Bmatrix}CS:\\DS:\\SS:\\ES:\end{Bmatrix}
\begin{bmatrix}\begin{Bmatrix}BX\\BP\end{Bmatrix}\end{bmatrix} +
\begin{bmatrix}\begin{Bmatrix}SI\\DI\end{Bmatrix}\end{bmatrix} +
\rm [премештање]
</math>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Преузето из „https://sr.wikipedia.org/wiki/X86