Modul real

Real mode (sau real address mode; engleză  real-address mode ) - modul de operare al procesoarelor cu arhitectură x86 , care utilizează adresarea memoriei segmentului ( adresa celulei de memorie este formată din două numere: adresa începutului segmentului deplasată cu 4 biți și offset-ul celulei de la începutul segmentului; orice proces are acces la toată memoria computerului). Inițial, modul nu avea nume, a fost numit „real” abia după crearea a 80286 de procesoare care suportau un mod numit „ protejat ” (modul se numește „protejat” deoarece a fost creat pentru a „proteja” procesele unul de celălalt - pentru a preveni accesul proceselor în zonele de memorie ale celuilalt; dar pentru procesoarele 80286, modul protejat nu era cu adevărat „securizat”, deoarece aceste procesoare nu acceptau paginarea în memorie , care a fost implementată pentru prima dată în procesoarele 80386 ).

Descriere

În modul real, adresa virtuală a unei celule de memorie constă din două numere:

Pentru a calcula adresa fizică sau liniară a unei celule de memorie, procesorul calculează adresa fizică de la începutul segmentului - înmulțește partea de segment a adresei virtuale cu numărul 16 (sau, în mod echivalent, o deplasează la stânga cu 4 biți ), și apoi adaugă numărul rezultat cu un offset de la începutul segmentului:

segment_part × 16 + offset

Dacă partea de segment a adresei nu este specificată (în codul de instrucțiune ), procesorul citește partea de segment a adresei dintr-unul dintre registrele de segment (din care unul depinde de codul de instrucțiune).

Cu această adresare, adresele 0400 h : 0001h și 0000h: 4001h (litera „h” înseamnă că numărul este scris în notație hexazecimală ) se vor referi la aceeași celulă de memorie, întrucât 400h × 16 + 1 = 0 × 16 + 4001h .

Adresă minimă: 0000h:0000h ( 0 octeți ).

Adresă maximă: FFFFh:FFFFh ( FFFFh × 16 + FFFFh) = 10FFEFh =  1114095 B = 100000h + 10000h - 11h = Mi B + 64  Ci B - 17 B ).

Metoda descrisă de calcul a adresei fizice vă permite să adresați ( 1 MiB + 64 KiB - 17 B + 1 B ) memorie (interval de adrese 0000h ... 10FFEFh ); Se adaugă 1 octet pentru a ține cont de octetul de la adresa zero. Cu toate acestea, procesoarele 8086 / 8088 au doar 20 de linii de adresă (piese metalice), astfel încât dimensiunea memoriei disponibilă este de 2 20 B = 1 MiB (interval de adrese 0000h ... FFFFFh ), și adresare mai mare (în intervalul 100000h ... 10FFEFh ) provoacă o depășire („ twist”) - cel mai semnificativ bit al adresei este ignorat, iar 64 KiB sunt accesați în adresele de pornire ( 0000h ... FFEFh ).

Procesoarele 80286 au o magistrală de adrese pe 24 de biți ( poate fi adresate 2 24  B = 16 MiB de memorie), astfel încât să nu depășească (“overflow”).

Calculatoarele IBM PC / AT sunt construite pe procesorul Intel 80286 , iar pentru a menține compatibilitatea cu IBM PC și computerele IBM PC / XT (construite pe Intel 808x) sunt echipate cu un element logic ( poarta ) care controlează funcționarea liniei de a 21-a adresă (sârmă) (notat „A20”) și numit „Poarta A20”. Acest element logic este dezactivat implicit (corespunzător modului de compatibilitate) și este controlat prin controlerul tastaturii (de obicei prin cipul Intel 8042 ).

Utilizare

După ce computerul este pornit sau după ce procesorul este resetat , procesorul x86 pornește în modul real. Acest mod pornește execuția codului BIOS al unui computer compatibil IBM-PC . În modul real, poate fi efectuată inițializarea anumitor componente hardware (de exemplu, inițializarea controlerului RAM al chipset- ului ), necesară pentru funcționarea programelor după trecerea procesorului în modul protejat . Dacă dimensiunea codului și a datelor programului care realizează inițializarea hardware-ului este mică, acest program poate fi executat în mod real. Deci, de exemplu, DOS funcționează în modul real și nu încearcă să pună procesorul în modul protejat. Versiunile timpurii ale Microsoft Windows puteau rula doar în modul real. Chiar și Windows 3.0, dintre cele trei moduri de funcționare, prevedea rularea în mod real și putea fi rulat pe procesorul 8086.

Procesoarele 80286 și mai noi, atunci când funcționează în modul real, au, în general, aceleași limitări ale spațiului de adrese ca și procesoarele 8086. Programele concepute pentru modul real necesită instrumente software speciale pentru a utiliza memoria mai mare. Pe mașinile cu procesoare 80286 și mai noi, puteți utiliza, de exemplu, drivere precum HIMEM.SYS . Există, de asemenea, facilități oferite de comanda nedocumentată LOADALL (care, totuși, vine cu o serie de dificultăți). Procesoarele 80386 și mai noi au introdus o caracteristică nedocumentată de Intel care vă permite să puneți procesorul într-un mod numit informal mod „ ireal ”. Când rulează în modul ireal, un program poate, deși cu unele limitări, să folosească un spațiu de adrese fizice de 32 de biți ( 2 32  B = 4 GiB ).

Deși Intel nu a prevăzut posibilitatea de a comuta procesorul 80286 din modul protejat în modul real, computerul IBM PC / AT are această capacitate datorită caracteristicilor hardware și suportului din BIOS . IBM PC/AT permite programelor să trimită un semnal de resetare către procesor. Codul BIOS poate distinge între cauzele/modurile de repornire examinând conținutul locației de memorie nevolatilă CMOS la adresa 0Fh și locația RAM la adresa 40h:72h . Orice program, scriind valori adecvate celulelor de memorie numite și dând un semnal de resetare procesorului, poate forța procesorul să repornească; după o repornire, procesorul va începe să execute codul BIOS; codul BIOS va citi valorile din celulele de memorie de mai sus, nu va efectua încărcarea inițială, nu va modifica conținutul RAM (aceleași date vor rămâne în RAM ca înainte ca procesorul să fie repornit) și va transfera control la codul aflat în RAM la adresa scrisă în celula RAM cu adresa 40h:67h . Astfel, programul poate comuta în mod repetat între modurile protejate și cele reale, deși această metodă necesită o cheltuială relativ mare de timp pentru fiecare comutator.

Posibilitatea unei tranziții software „normale” (fără trucuri) de la modul protejat la modul real a fost oferită de Intel doar în procesoarele 80386 și modelele mai noi. Cu toate acestea, în 80386, o altă caracteristică nouă este de mare valoare - modul virtual 8086 (V86, VM86). În modul V86, programele pot folosi vechiul mod (segment) de adresare a memoriei procesorului 8086; în acest caz, procesorul va fi în modul protejat, iar adresa fizică (liniară) calculată conform regulilor 8086 va fi paginare. Datorită modului V86, a devenit posibilă crearea de mașini virtuale . Sistemul de operare poate restricționa accesul la o anumită zonă de memorie (vezi protecția memoriei ) pentru fiecare mașină virtuală, poate aloca memorie virtuală pentru acestea în loc de cea reală (fizică) și poate controla accesul la porturile I/O . Cele de mai sus sunt folosite pentru a organiza activitatea sistemului de operare DOS sub controlul sistemelor de operare multitasking precum OS / 2 și Microsoft Windows. În același timp, doar 1 MiB de spațiu de adrese este disponibil pentru fiecare mașină virtuală DOS și mai multe mașini virtuale DOS pot rula în același timp.

Structura spațiului de adrese

Spațiul de adrese al unui computer compatibil IBM-PC în modul real este împărțit în patru părți:

Zona de memorie numită " main " ( ing.  memorie convenţională ) este folosită pentru a stoca tabelul vector de întrerupere şi diverse date BIOS , aflate în RAM începând cu adresa 0000h:0000h , ocupă 640 KiB şi poate fi utilizată de programele DOS pe 16 biţi .

Zona de memorie numită „superioară” sau „ superioară ” ( zona de memorie superioară în engleză  , UMA ), ocupă 384 KiB , este folosită pentru a stoca informații despre hardware-ul computerului , este împărțită condiționat în trei zone a câte 128 KiB fiecare. Prima zonă este folosită pentru stocarea memoriei video . Adaptoarele BIOS sunt disponibile prin a doua zonă . A treia zonă este folosită de codul BIOS, dar de obicei nu complet (de obicei rămân 64 KiB ). Restul spațiului de adrese din zona superioară cu ajutorul driverelor speciale (de exemplu, EMM386.EXE , EMS.EXE, LIMEMS.EXE etc.) și/sau dispozitivelor de expansiune pot fi folosite pentru a accesa memoria extinsă în funcție de ea. specificație ( eng ) EMS,expanded memory specification 

Zona de memorie numită „ high ” ( în engleză  high memory area , HMA ) este situată imediat după primul mebibyte și ocupă 64 KiB minus 16 octeți . Apariția sa se datorează unei caracteristici a procesorului 80286 , care are 24 de linii de adresă, iar la accesarea adreselor de peste FFFFh: 000Fh, accesul se duce la al doilea mebibyte de memorie (în loc de începutul primului mebibyte, ca în 8086 / 8088 ). Este un subset de memorie „suplimentară” (extinsă în engleză).

Zona de memorie numită „ addițional ” (eng. extins ) este disponibilă pentru programele pe 16 biți conform specificației sale ( de ex . ,  specificația memoriei întinse , XMS ), începe de la adresele situate deasupra primului mebibyte și are o dimensiune în funcție de dimensiunea memoriei RAM instalate pe computer.

Confuzie de titlu

Vezi și