Кіріспе

Барлық x86 үйлесімді процессорлардың жұмыс режимі — нақты режим, сондай-ақ нақты мекенжай режимі деп аталады. Бұл режим өз атауын нақты режимдегі мекенжайлардың жадтағы нақты орындармен сәйкес келуінен алады. Нақты режим 20 биттік сегменттелген жад мекенжай кеңістігімен (1 МБ жадты адрестеуге мүмкіндік береді) және барлық адрестеуге қолжетімді жадқа, I/O мекенжайларына және сыртқы құрылғыларға шексіз тікелей бағдарламалық қолжетімділікпен сипатталады. Нақты режим жадты қорғау, көп тапсырмалы жұмыс істеу немесе кодтың артықшылық деңгейлерін қолдамайды. 80286 процессорларының шығуымен қорғалған режим енгізілгенге дейін, x86 процессорлары үшін нақты режим ғана қолданылды. Ал кері үйлесімділік үшін, барлық x86 процессорлары қайта орналастырылғанда нақты режимде басталады, бірақ басқа режимдерде іске қосылғанда басқа жүйелерде нақты режимді эмуляциялауға болады.

Тарих

80286 архитектурасы қорғалған режимді енгізді, бұл (басқа нәрселермен қатар) аппараттық деңгейде жадты қорғауға мүмкіндік берді. Дегенмен, осы жаңа мүмкіндіктерді пайдалану үшін қорғалған режимге арнайы жасалған жаңа операциялық жүйе қажет болды. x86 микропроцессорларының басты дизайндық ерекшелігі – олардың барлық x86 чиптері үшін жазылған бағдарламалық қамтамасымен толық үйлесімді болуы. Сондықтан, 286 чипі «нақты режимде» іске қосылу үшін жасалды, яғни жаңа жадты қорғау мүмкіндіктерін өшірген режимде, осылайша ол 8086 және 8088 үшін жазылған операциялық жүйелерді іске қоса алатын болды. 2018 жылғы мәліметтер бойынша, қазіргі x86 процессорлары (соның ішінде x86 64 процессорлары) операциялық жүйелерді нақты режимде жүктей алады және эмуляция немесе виртуализацияны қолданбай, дерлік кез келген бұрынғы x86 чипі үшін жазылған бағдарламалық қамтамасымен жұмыс істей алады. IBM енгізген PC BIOS, DOS операциялық жүйелері (MS DOS, DR DOS және т.б.) сияқты, нақты режимде жұмыс істейді. Microsoft Windows-тың алғашқы нұсқалары да нақты режимде жұмыс істеді. Windows/386 қорғалған режимді пайдалануға мүмкіндік берді, бұл Windows 3.0-да толыққанды іске асырылды, ол Windows/386 әдісімен нақты режимде немесе қорғалған режимде жұмыс істей алатын. Windows 3.0-да бірнеше режим болды: «нақты режим», «стандартты режим» және «386 кеңейтілген режимі»; соңғысы 80386 процессорының кейбір виртуализация мүмкіндіктерін қажет етті, сондықтан ол 80286-да жұмыс істемейтін еді. Windows 3.1 нақты режимді қолдауды жойды және ол кем дегенде 80286 процессорын қажет ететін алғашқы кең таралған операциялық орта болды. Бұл нұсқалардың ешқайсысын заманауи x86 операциялық жүйесі деп санауға болмайды, себебі олар тек белгілі бір функциялар үшін ғана қорғалған режимге ауысатын. Unix, Linux, OS/2, Windows NT қазіргі заманғы операциялық жүйелер болып саналады, өйткені олар процессорды іске қосу кезінде қорғалған режимге ауыстырады, ешқашан нақты режимге қайтпайды және қорғалған режимнің барлық артықшылықтарын тұрақты түрде ұсынады. 64 биттік операциялық жүйелер тек іске қосу кезінде ғана нақты режимді пайдаланады, ал операциялық жүйе ядросы процессорды ұзақ режимге ауыстырады. Айта кетейік, 80286-ның қорғалған режимі 80386-мен енгізілген жақсартылған қорғалған режимге қарағанда әлдеқайда қарапайым; соңғысы кейде «386 қорғалған режимі» деп аталады және қазіргі 32 биттік x86 операциялық жүйелері осы режимде жұмыс істейді.

Жабдықты пайдалану

8086, 8088 және 80186 процессорлары 20 биттік адрестік шинаға ие, бірақ Intel осы процессорлар үшін таңдаған ерекше сегменттелген адрестеу схемасы іс жүзінде 21 маңызды биттен тұратын тиімді адрестерді тудырады. Бұл схема 16 биттік сегмент нөмірін солға қарай төрт битке жылдырады (төрт ең кішкентай мәнді нөлдері бар 20 биттік санды құрайды) және содан кейін 16 биттік адрес смещениесін қосады; сегмент пен смещение ең үлкен мәніне, яғни 0xFFFF-ке тең болғанда ең үлкен сома пайда болады: 0xFFFF0 + 0xFFFF = 0x10FFEF. 8086, 8088 және 80186 процессорларында 20 биттен асатын тиімді адрес пайда болса, адрес диапазонның нөлдік соңына «оралады», яғни ол 2^20 (2^20 = 1048576 = 0x100000) модулі бойынша алынады. Алайда, 80286 процессорлары 24 адрес битіне ие және тіпті нақты режимде де 24 биттік тиімді адрестерді есептейді. Сондықтан, 0xFFFF сегменті және 0x000F-тен үлкен смещение үшін 80286 жадтың екінші мегабайтының басына қатынасады, ал 80186 және одан бұрынғы процессорлар 0x10-ға тең адресқа қатынасады, ол бірінші мегабайттың басында орналасқан. (Ескеріңіз, 80186 және одан бұрынғы процессорларда 0 адресінен басталатын адрес кеңістігінің алғашқы килобайты үзіліс векторлық кестесінің тұрақты, жылдырылмауы мүмкін орны болып табылады.) Осылайша, 80286 және одан кейінгі x86 процессорларының нақты режимде адрестей алатын жадтың нақты көлемі 1 МБ + 64 КБ – 16 байт = 1 114 096 байтқа тең.

А20 желісі

80286-дан бұрынғы бағдарламалардың кейбіреуі жадты (модульдік) адрестеу ерекшелігін пайдалану үшін жасалғандықтан, 80286 артқа қарай үйлесімділік мәселесін тудырды. 21-ші адрес желісін (чиптен шығатын нақты логикалық сигнал сымы) логикалық нөлге (нөлдік деңгейге) мәжбүрлеу, бұрынғы процессорлардың адрес арифметикасына сәйкес келетін 2^20 модульдік әсерін береді, бірақ 80286-да мұндай функцияны іштен орындау мүмкіндігі жоқ. IBM, 80286 процессорын IBM PC/AT компьютерінде қолданғанда, бұл мәселені 80286-ның A20 пині мен жүйелік шина арасындағы A20 адрес желісін қосу немесе өшіру (нөлге мәжбүрлеу) үшін бағдарламаланатын шлюзді қосу арқылы шешті; бұл Gate A20 (A20 шлюзі) деп аталады және бүгінгі күнге дейін ПК чипсеттерінде қолданылады. HIMEM.SYS кеңейтілген жад драйверінің көптеген нұсқалары (IBM/MS-DOS үшін) жүктелу кезінде "A20 басқарушысын" орнатқанын хабарлады – бұл Gate A20-ні басқару және бағдарламалардың қажеттіліктеріне сәйкес келуге арналған бағдарламалық құрал. Қорғалған режимде A20 желісі қосылуы керек, әйтпесе физикалық адрестеу қателері туындап, жүйе құлауына әкелуі мүмкін. Қазіргі заманғы мұралық жүктегіштер (мысалы, GNU GRUB) A20 желісін пайдаланады.

Нақты режимге ауысу

Intel x86 отбасына қорғалған режимді енгізді, оны пайдаланатын операциялық жүйелердің жаңа режимде толыққанды жұмыс істеуі және қорғалған режимде жұмыс істейтін операциялық жүйедегі барлық бағдарламалардың да қорғалған режимде жұмыс істеуі тиіс болды. Нақты режим мен тіпті 286 қорғалған режимінің арасындағы маңызды айырмашылықтарға байланысты, нақты режимге арналған бағдарламаларды қайта жазбастан қорғалған режимде іске қосу мүмкін емес. Сондықтан, пайдаланушылардың қажеттілігіне ие кең көлемдегі нақты режимдегі қолданбалардың болуына байланысты, нақты режимнен бас тарту индустрия үшін қиындықтар тудырды, ал бағдарламашылар қалағанда режимдер арасында ауысудың жолын іздеді. Алайда, Intel процессорды қолдану мақсатына сәйкес, 80286 процессорда қорғалған режимге оңай ауысу мүмкіндігін ұсынды, бірақ нақты режимге оңай қайта оралу мүмкіндігі болмады. 386 процессорға дейін қорғалған режимнен нақты режимге ауысудың жалғыз жолы процессорды қайта іске қосу болды; қайта іске қосылғаннан кейін ол әрқашан 8086-ға дейінгі бұрынғы x86 процессорларымен үйлесімді болу үшін нақты режимде іске қосылады. Процессорды қайта іске қосу жүйенің жедел жадын тазартпайды, сондықтан бұл ыңғайсыз және тиімсіз болғанымен, іс жүзінде орындауға болады. Қорғалған режимнен процессордың күйі жадта сақталады, содан кейін процессор қайта іске қосылады, нақты режимде қайта басталады және жадтан сақталған күйді қалпына келтіру үшін нақты режимдегі кодты орындайды. Содан кейін ол бағдарлама қорғалған режимге қайта ауысуға дайын болғанға дейін басқа нақты режимдегі кодты орындай алады. Нақты режимге ауысу уақыт бойынша қымбатқа түседі, бірақ бұл техника қорғалған режимдегі бағдарламаларға BIOS сияқты қызметтерді пайдалануға мүмкіндік береді, ол толығымен нақты режимде жұмыс істейді (алғашқыда 8088 негізіндегі IBM Personal Computer моделі (машина түрі) 5150 үшін жасалған). Бұл режимді ауыстыру әдісі сонымен қатар DPMI (нақты, эмуляцияланбаған DOS) және DOS/4GW сияқты DOS кеңейтушілері арқылы қорғалған режимдегі бағдарламаларды DOS-та іске қосуға мүмкіндік береді; DPMI жүйесі немесе DOS кеңейтуші DOS немесе BIOS шақыруларын орындау үшін нақты режимге ауысады, содан кейін қорғалған режимде жұмыс істейтін қолданба бағдарламасына қайта оралады.

Құлдырау

NT ядросына көшу операциялық жүйенің компьютерді іске қосу үшін DOS-қа қажеттілігін жойды, сонымен қатар оны пайдалану мүмкіндігі де болмады. Windows 3.1x нұсқасынан кейін, Windows ME-де қолдау тоқтағанға дейін, компьютерді нақты режимде MS DOS-та қайта іске қосу қажеттілігі азайды. Қазіргі таңда Windows-тың жаңа нұсқаларында нақты режимді талап ететін DOS қолданбаларын іске қосудың жалғыз жолы – DOSBox немесе x86 виртуализациялық өнімдері сияқты эмуляторларды пайдалану.