thumb|Клон мікрапрацэсара Intel 80386, выраблены фірмай AMD
Intel 80386 (таксама вядомы як i386 ці проста 386) — 32-бітны x86-сумяшчальны працэсар трэцяга пакалення фірмы Intel, прэзентаваны 17 кастрычніка 1985 года. Гэты працэсар быў першым 32-разрадным працэсарам для IBM PC-сумяшчальных ПК. Выкарыстоўваўся пераважна ў настольных і партатыўных ПК. У цяперашні час пераважна ўжываецца ў кантролерах, а таксама ў бытавой тэхніцы.
Апісанне
thumb|right|Архітэктура мікрапрацэсара Intel 80386DX
Працэсар i386 цалкам сумяшчальны са сваімі папярэднікамі — працэсарамі 8086—80286. Ён выконвае праграмы, прызначаныя для іх, без патрэбы мадыфікацыі кода і перакампіляцыі (ці з мінімальнымі мадыфікацыямі) і робіць гэта больш эфектыўна: затрачвае на выкананне меншую колькасць тактаў сінхраніхацыі; мае вышэйшыя тактавыя частоты, за кошт ужывання новых тэхналогій; мае буйнейшы, у параўнанні з папярэднімі працэсарамі, буфер перадвыбаркі каманд — 16 байт (якіх хапае прыкладна на пяць каманд); буфер перадвыбаркі забяспечвае меншую колькасць звяртанняў за камандамі і выключаюць лішнія звяртанні ў памяць у кароткіх цыклах ды выкананні радковых каманд.
Разам з тым i386 з’яўляецца сур'ёзнай перапрацоўкай працэсара 80286. Паводле некаторых ацэнак, ні перад, ні пасля i386 архітэктура працэсараў x86 а ні разу не перапрацоўвала гэтак кардынальна. У працэсарах гэтай архітэктуры ўпершыню былі ўведзены асноўныя механізмы падтрымкі сучасных 32-разрадных аперацыйных сістэм для PC-сумяшчальных платформаў.
Асноўныя змены:
32 біты
Уся архітэктура x86 была пашырана да 32 біт — усе рэгістры (за выключэннем сегментных) сталі 32-бітнымі, атрымаўшы ў назве прэфікс «E» (EAX, EBX, EIP, EFLAGS і г. д.), з захаваннем поўнага набору каманд для працы з імі. У тым ліку: рэгістр флагаў атрымаў мноства новых флагаў для кіравання шматзадачнасцю гэгістр кіравання працэсарам MSW працэсара 80286, названы ў i386 «CR0»
32-бітнай стала і адрасацыя ў абароненым рэжыме (з магчымасцю стварэння 16-бітных сегментаў, для сумяшчальнасці з 80286). Яна дазволіла ўпершыню з часу з’яўлення 8086 забыцца на сегментацыю, а дакладней пра абмежаванне памера сегмента 64 кілабайты (абмежаванне 16-бітнага адраса), якое даўно перастала задавальняць праграмістаў.
Да з’яўлення i386 праграмы і аперацыйныя сістэмы выкарыстоўвалі некалькі галоваломных мадэляў арганізацыі памяці (драбнюткая — tiny, малая — small, вялікая — large, велізарная — huge), якія адрозніваліся арганізацыяй у памяці сегментаў коду, стэку і даных. 32-бітны адрас дазволіў ужываць замест іх адну простую плоскую мадэль () — 32-бітны варыянт драбнюткай мадэлі, у якой усе сегменты задачы знаходзяцца ў адной адраснай прасторы. Плоская мадель забяспечвае памер такога «агульнага» сегмента да амаль 4 гігабайт, якіх на той час хапала для любой уяўнай задачы.
Плоская мадэль мае і недахопы: у ёй з’яўляюцца праблемы перасоўвальнасці машыннаго коду, якія раней лёгка абыходзіліся сегментацыяй, забеспячэнне перасоўвальнасці перайшло пад адказнасць аперацыйных сістэм, з новымі фарматамі дыскавага вобразу праграмы. плоская мадэль практычна скасоўвае кіраванне памяццю ў абароненым рэжыме (абмежаванне доступу і падтрымка віртуальнай памяці), якое да i386 магло выконвацца толькі на ўзроўні сегментацыі. Толькі з’яўленне новай мадэлі кіравання памяццю — старонкавай трансляцыі — забяспечыла плоскай мадэлі яе сённяшнюю папулярнасць.
Плоская мадэль увайшла ва ўжытак настолькі шырока, што сучасныя праграмісты нават і не падазраюць, што праграмы звяртаюцца ў памяць праз сегменты.
Старонкавая трансляцыя
У i386 быў уведзены новы механізм кіравання памяццю — адрасная прастора, да якой звяртаецца працэсар за данымі і кодам, у якой змяшчаюцца сегменты (названая лінейнай адраснай прасторай) можа не адпавядаць рэальнай фізічнай памяці. Фізічная памяць (уключаючы буферы вонкавых прыладаў, напрыклад відэабуфер) можа быць транслявана ў лінейную адрасную прастору адвольным чынам — кожная старонка (памерам 4 кілабайты) лінейнай прасторы можа быць пераадрасавана на любую старонку фізічнай памяці праз каталог старонак, які знаходзцца ў аператыўнай памяці (адрас каталогу старонак задаецца значэннем новага регістра кіравання «CR3»).
Як і сегменты, старонкі лінейнай адраснай прасторы могуць быць аб’яўлены адсутнымі (звяртанне да такіх старонак выклікае апрацоўнік старонкавага парушэння аперацыйнай сістэмы). Адсутныя старонкі у першую чаргу выкарыстоўваюцца для арганізацыі віртуальнай памяці — апрацоўнік старонкавага парушэння здзяйсняе swapping старонак памяці з вонкавымі запамінальнымі прыладамі. Таксама адсутныя старонкі ўжываюцца ў плоскай мадэлі памяці (дзе памер сегмента звычайна мае памер ад 2 да 4 гігабайт, нават калі ў камп’ютара няма столькі фізічнай памяці) для маркіроўкі старонак сегменту, у якія аперацыйная сістэма не выдаткавала памяці. У гэтым выпадку старонкавае парушэнне звычайна завяршае задачу альбо пачынае яе адладку.
Праз старонкавую трансляцыю i386 можа адрасаваць да 4 Гбайт фізічнай памяці і да 64 Тбайт віртуальнай памяці.
Палепшаная падтрымка шматзадачнасці і абароны
Падтрымка шматзадачнасці ў працэсарах x86 значыць апаратную падтрымку «празрыстага» пераключэння з адной звычайнай праграмы (задачы) на іншую. Пры пераключэнні працэсар захоўвае свой стан (уключаючы адрас наступнай каманды, селектары сегментаў) у сегменце стану (TSS; сегмент памяці, з селектарам з рэгістра TR) адной задачы, пасля чаго ўзнаўляе стан іншай задачы з яе сегмента стану (селектар сегмента стану новай задачы загружаецца з дэскрыптара яе сегмента кода).
Пераключэнне паміж задачамі звычайна ажыццяўляецца: перарываннем таймера; час, на які наладкаваны таймер, завецца квантам часу для задачы сістэмным выклікам (выклікам функцыі аперацыйнай сістэмы) выключэннем — напрыклад, пры спробе выканаць недапушчальную команду ці звяртанні да адсутнай памяці адладкай
У i386 механізмы абароны і шматзадачнасці былі значна пашыраны і палепшаны. У залежнасці ад характару парушэнняў, яны могуць ціха ігнаравацца (напрыклад, некаторыя біты рэгістра EFLAGS нельга змяніць загрузкай флагаў са стэка), выклікаць апрацоўнік выключэння (аперацыйнай сістэмы). Сур'ёзная памылкі на ўзроўні аперацыйнай сістэмы (альбо ў рэальным рэжыме) могуць перавесці працэсар у рэжым аварыйнага спынення (напрыклад, пры парушэнні ў апрацоўніку падвойнага парушэння), з якога можна выйсці толькі апаратным скідам () працэсара.
Напрыклад, i386 падтрымлівае абмежаванне доступу да портаў уводу-вываду і флага забароны перапыненняў праз: прызначэнне патрэбнага ўзроўню прывілеяў для выканання такіх каманд (двухбітным полем IOPL регістра флагаў) дазволам задачы выбарачнага доступу да портаў уводу-вываду праз бітавую маску ў сегменцк стану задачы Спроба выканання недазволенай каманды ўводу-вываду здзяйсняе выключэнне, апрацоўнік якога (належыць аперацыйнай сістэме) можа завяршыць задачу праз памылку, ігнараваць (узнавіць выкананне з наступнай каманды) ці эмуляваць увод-вывад.
Акрамя таго шматзадачнасць i386 цалкам падтрымлівае ўсе новыя магчымасці — для 32-бітных задач сегмент стану змяшчае ўсе 32-бітныя і патрэбныя новыя рэгістры (напрыклад рэгістр CR3 з адрасам каталога старонак для гэтай задачы).
Віртуальны рэжым
У працэсары i386 кампанія Intel улічыла патрэбу паляпшэння падтрымкі рэальнага рэжыму, таму што праграмнае забеспячэнне ў час яго з’яўлення не было гатовым цалкам працаваць у абароненым рэжыме. Таму ў i386 магчыма пераключэнне з абароненага рэжыма назад у рэальны (пры распрацоўцы 80286 лічылася, што гэта не спатрэбіцца, таму на камп’ютарах з працэсарам 80286 вяртанне ў рэальны рэжым ажыццяўляецца схемна — праз скід працэсара).
У якасці пашыранай падтрымкі рэальнага рэжыма, i386 дазваляе адной ці некалькім задачам працаваць у віртуальным рэжыме — рэжыме эмуляцыі рэжыма рэальнага адраса.
Важна разумець што «віртуальны рэжым», нягледзячы на падабенства назвы з’яўляецца не «трэцім рэжымам працы працэсара» (то бок рэальны, абаронены і віртуальны), а толькі рэжымам працы задачы ў шматзадачным асяроддзі абароненага рэжыма.
Віртуальны рэжым прызначаны для адначасовага выконвання праграм рэальнага рэжыма (напрыклад, праграмы для DOS) у шматзадачнай аперацыйнай сістэме абароненага рэжыма.
Выкананне ў віртуальным рэжыме амаль ідэнтычна рэальнаму, за некалькімі выключэннямі, абумоўленымі тым, што віртуальная задача выконваецца ў абароненым рэжыме: віртуальная задача не можа выконваць прывілеяваныя каманды, таму што мае ніжэйшы ўзровень прывілеяў усе перапыненні і выключэнні апрацоўваюцца аперацыйнай сістэмай абароненага рэжыма (якая між тым можа ініцыяваць апрацоўнік перапынення віртуальнай задачы) разам з тым, у задачы віртуальнага рэжыма можна выкарыстоўваць: старонкавае трансляваннне, напрыклад, для: пашырэння памяці, шляхам уключэння старонак у неўжываную адрасную прастору эмуляцыі пашырэнняў з пераключэннем банкаў (напрыклад, EMS-памяці) віртуальнай разгорткі ці згорткі буфераў вонкавых прылад (відэапамяць, апаратная EMS-памяць) эмуляцыі вонкавых прылад праз эмуляцыю портаў уводу-вываду адладка пры выкананні некалькіх задач віртуальнага рэжыма кожная з іх можа выконвацца алкам асобна адна ад адной, чаго нельга дасягнуць у рэальным рэжыме.
Напрыклад, пачынаючы з версій 4.01 — 5.0, пры ўжыванні менэджэра памяці EMM386 (і яго аналагаў іншых распрацоўнікаў) аперацыйная сістэма MS-DOS працуе як задача ў віртуальным рэжыме. EMM386 у гэтым выпадку з’яўляецца падабенствам аперацыйнай сістэмы абароненага рэжыма (перадаючы большасць сістэмных перапыненняў ядру MS-DOS у віртуальнай задачы).
Рэжым віртуальнага 8086 падтрымліваецца і ў наступных 32-бітных працэсарах x86, аж да рэжыма сумяшчальнасці ў x86-64.
Апаратная адладка
Як і ў папярэдніх працэсарах (пачынаючы з 8086), адладка ў i386 ажыццяўляецца выклікам адладкавага перапынення, апрацоўнік якога перадае кіраванне праграме-адладніку. У папярэдніх працэсарах адладка магла быць выклікана двума падзеямі: пакрокавае выканенне праграмныя пункты спынення у i386 адладку таксама могуць пачаць: апаратныя пункты спынення пастка пераключэння задачы
Пакрокавае выканенне
Пакрокавае выкананне ці трасіроўка (выклік адладкавага перапынення пасля выканання кожнай каманды пры ўсталяваным флагу TF) у i386 засталося такім жа як і ў папярэдніх працэсарах, і працуе ва ўсіх новых рэжымах (32-бітнай адрасацыі і рэжыме віртуальнай задачы).
Пункты спынення
Пункт спынення () — перарыванне выканання праграмы пры дасягненні пэўнага адрасу.
У ранніх працэсарах x86 для арганізацыі пункта спынення, было патрэбна замяніць першы байт каманды на каманду выкліка адладкавага перапынення (int 3), выклік перапынення вяртаў кіраванне адладчыку, які вяртаў зыходнае значэнне першага байта каманды. Акрамя таго, пункты спынення такога роду было немагчыма ўсталёўваць у ПЗП. i386 падтрымлівае такія пункты спынення для сумяшчальнасці.
Пункты спынення i386 вызначаюцца адрасам у рэгістрах адладкі. Апрацоўнік адладкі выклікаецца калі адрас наступнай каманды супадае з адрасам у рэгістры. У сувязі з тым, што такія пункты спынення не патрабуюць запісу ў памяць, яны могуць выкарыстоўвацца для адладкі праграм у ПЗП. i386 дазваляе ўсталёўваць адначасова да чатырох пунктаў спынення.
Пункты спынення i386 таксама могуць быць пазначаны на запыт (чытання ці запісу) да зменнай па зададзенаму адрасу ў памяці. Працэсар выклікае апрацоўнік адладкі пры звяртанні каманды да памяці да пэўнага адрасу.
Пастка пераключэння задачы
Адладкавае перапыненне можа быць выклікана пры пераключэнні на задачу (для гэтага ў сегменце стану задачы прадугледжаны адмысловы біт).
Іншыя змены
Лініі даных і адрасоў у працэсары 80386, як і ў працэсары 80286, не мультыплексуюцца: маецца 32 лініі даных і 32 незалежных ад іх лініі адрасу.
Рэгістры