Кіріспе
80386 микропроцессорында және одан кейінгілеріндегі виртуалды 8086 режимі (виртуалды нақты режим, V86 режимі немесе VM86 деп те аталады) процессор қорғалған режимде жұмыс істеп тұрғанда, қорғалған режимде тікелей іске қосыла алмайтын нақты режимдегі бағдарламаларды іске қосуға мүмкіндік береді. Бұл 386 чипі арқылы бірнеше 8086 процессорын эмуляциялауға мүмкіндік беретін аппараттық виртуализация техникасы. Бұл 80286 процессорының қорғалған режиміндегі қиын тәжірибелерден туындады, ол бір уақытта нақты режимдегі бағдарламаларды тиімді іске қосуға қолайлы болмады. Джон Кроуфорд осы ортаны құруға жол ашты, тіркелімдер жиынтығында Виртуалды режим бітін енгізді. VM86 режимі нақты режимдегідей сегментациялау схемасын қолданады (үйлесімділік үшін), ол 20 биттік сызықтық адрестерді нақты режимдегі 20 биттік физикалық адрестер сияқты құрайды, бірақ қорғалған режимнің жад беттеу механизміне бағынады.
In the 80386 microprocessor and later, virtual 8086 mode (also called virtual real mode, V86 mode, or VM86) allows the execution of real mode applications that are incapable of running directly in protected mode while the processor is running a protected mode operating system. It is a hardware virtualization technique that allowed multiple 8086 processors to be emulated by the 386 chip. It emerged from the painful experiences with the 80286 protected mode, which by itself was not suitable to run concurrent real mode applications well. John Crawford developed the Virtual Mode bit at the register set, paving the way to this environment. VM86 mode uses a segmentation scheme identical to that of real mode (for compatibility reasons), which creates 20 bit linear addresses in the same manner as 20 bit physical addresses are created in real mode, but are subject to protected mode's memory paging mechanism.
Шолу
Виртуалды 8086 режимі – қорғалған режимдегі тапсырма үшін арналған режим. Осының нәтижесінде процессор VM86 және VM86 емес тапсырмалар арасында ауыса алады, бұл ескі (DOS) қолданбаларын көп тапсырмалы режимде іске қосуға мүмкіндік береді. Виртуалды 8086 режимін пайдалану үшін операциялық жүйе виртуалды 8086 режимінің мониторын орнатады, ол нақты режимдегі бағдарламаны басқаратын және жүйелік аппараттық және бағдарламалық ресурстарға қол жеткізуді эмуляциялайтын немесе сүзгілейтін бағдарлама. Монитор 0-ші деңгейдегі басымдықпен және қорғалған режимде жұмыс істеуі керек. Тек 8086 бағдарламасы VM86 режимінде және 3-ші деңгейдегі басымдықпен жұмыс істейді. Нақты режимдегі бағдарлама белгілі бір аппараттық құрылғыларды пайдалану үшін немесе жад кеңістігіндегі белгілі бір аймақтарға қол жеткізу үшін, белгілі бір I/O порттарына қол жеткізуге тырысқанда, процессор осы оқиғаларды ұстап, V86 мониторын шақырады. Монитор нақты режимдегі бағдарламаның не істеуге тырысатынын анықтап, аппараттық құрылғымен байланыс үшін делдал ретінде әрекет етеді, нақты режимдегі бағдарламаға қажетті функцияны эмуляциялайды немесе рұқсат етілмейтін немесе жеткілікті түрде қолдау көрсетілмейтін әрекеттерді орындауға тырысқан жағдайда бағдарламаны тоқтатады (мысалы, машинаны қайта жүктеу, аппараттық құрылғымен қолдау көрсетілмейтін және эмуляцияланбаған режимге бейне дисплейін орнату немесе операциялық жүйе кодын жазу). V86 мониторы сұралған операцияның сәтсіздігін эмуляциялау арқылы рұқсат беруден бас тарта алады, мысалы, диск драйвын әрқашан дайын емес деп көрсетуі мүмкін, тіпті драйвты тексермеген күйінде де, нақты режимдегі бағдарламаға оған қол жеткізуге рұқсат бермейді. Сонымен қатар, V86 мониторы жад беттерін картаға түсіру, қоңыраулар мен үзілістерді ұстап алу және нақты режимдегі бағдарламаны тоқтату сияқты операцияларды орындай алады, бұл нақты режимдегі бағдарламаларға қорғалған режимдегі бағдарламалар сияқты көп тапсырмалы жұмыс істеуге мүмкіндік береді. Нақты режимдегі бағдарламаның аппараттық және бағдарламалық I/O-ны бақылап, V86 бағдарламасы күтетін күйді қадағалау арқылы, ол бірнеше бағдарламаларға бір-біріне кедергі келтірмей, бірдей аппаратты пайдалануға мүмкіндік береді. Осылайша, V86 режимі бір тапсырмалы ортада (DOS сияқты) жасалған нақты режимдегі бағдарламалардың көп тапсырмалы ортада бір мезгілде жұмыс істеуіне жағдай жасайды.
Жады адрестерін белгілеу және үзілістер
8086 кодты қорғалған режимде іске қосудың ең көп кездесетін мәселесі – жад адрестеуі, ол қорғалған режим мен нақты режим арасында толығымен өзгеше. Айтылғандай, VM86 режимінде жұмыс істеу арқылы сегменттеу механизмі нақты режимдегідей жұмыс істеу үшін қайта конфигурацияланады, бірақ беттеу механизмі әлі де активті және нақты режимдегі код үшін көрінбейді; осылайша, жадты қорғау және адрестік кеңістікті оқшаулау сақталады. Үзілістер (аппараттық, бағдарламалық және int командасы) туындағанда, процессор VM86 режимін тоқтатады және үзіліске қызмет көрсету үшін толық қорғалған режимде жұмыс істей бастайды. Сонымен қатар, үзіліске қызмет көрсету алдында DS, ES, FS және GS регистрлері жаңа стекке сақталады және нөлдендіріледі.
Виртуалды-8086 режимінің кеңейтулері (VME)
Pentium архитектурасы виртуалды 8086 режиміне бірқатар жақсартулар қосты. Алайда, Intel оларды тек келесі P6 (микроархитектурасы) бастап ғана құжаттады; олардың соңғы ресми атауы Virtual 8086 Mode Extensions, қысқартылған VME (ескі құжаттамада VME аббревиатурасы "Virtual 8086 режимінің жақсартулары" деп түсіндірілуі мүмкін). Бұл жақсартулар негізінен 8086 виртуализациясының қосымша жүктемесін азайтуға бағытталған, әсіресе (виртуалды) үзілістерге назар аударады. P6 құжаттамасында бұл жақсартулар туралы ресми түрде жарияланбас бұрын, ресми құжаттамада белгілі H қосымшасы келтірілген, ол ашық құжаттамадан алынып тасталды және тек құпиялылық сақтау шарты бойынша таңдалған серіктестермен ғана бөлісті. VME-ні іске қосу CR4 регистрінің 0-шы бітін (0x1 мәні) орнату арқылы жүзеге асырылады. VM86 қорғалған тапсырмалар үшін VME үзілістерін жылдамдату жақсартулары пайдалы деп табылғандықтан, оларды жеке түрде де, тек 1-ші бітті (0x2 мәні) орнату арқылы қосуға болады, бұл PVI (Қорғалған режимдегі виртуалды үзілістер) деп аталады. Екінші буын Ryzen (2000 сериясы) бұл мәселені шешті.
64-бит және VMX қолдау
Виртуалды 8086 режимі x86 64 ұзақ режимінде қолжетімді емес, бірақ ол әлі де x86 64 мүмкіндіктері бар процессорларда мұралық режимде жұмыс істейді. Intel VT-x x86 64 ұзақ режимінен виртуалды 8086 режимін іске қосу мүмкіндігін қайтарады, бірақ бұл (физикалық) процессорды VMX түбір режиміне көшіру және виртуалды 8086 режимінде жұмыс істейтін логикалық (виртуалды) процессорды іске қосу арқылы жасалуы керек. Westmere және одан кейінгі Intel процессорлары әдетте виртуалды процессорды тікелей нақты режимде іске қоса алады, «шексіз қонақ» мүмкіндігін (өзі кеңейтілген беттік кестелерді қажет етеді) пайдалана отырып; бұл әдіс тек жүйелік BIOS-ты іске қосу үшін ұялы виртуалды 8086 режиміне жүгіну қажеттілігін жояды. AMD-V де қонақтарда виртуалды 8086 режимін іске қоса алады, бірақ ол келесі қадамдарды қолдана отырып, қонақты «беттік нақты режимде» іске қоса алады: сіз CR0.PE=0, бірақ CR0.PG=1 (яғни, қорғалған режим өшірілген, бірақ беттеу қосылған) параметрімен SVM (Қауіпсіз виртуалды машина) режиміндегі қонақты жасайсыз, бұл әдетте мүмкін емес, бірақ хост беттік қателерді ұстаса, SVM қонақтары үшін рұқсат етіледі.