Сегментиране на памет в защитен режим

Сегментиране на памет в защитен режим. Етикети. ЕВРОВОК маса.

В предишна статия, програмата се реализира, което прави прехода към защитен режим, за да се провери за евентуално по-нататъшно сътрудничество в защитен режим и прилага прост цикъл с 16-битови инструкции. Сега задачата на следващата програма - преход към защитен режим и използване за 32-битови инструкции. За да постигнем това, трябва да се запознаят с новата информация, отнасяща се до защитен режим.


Фигура селектор 11. Формат

Bits 3-15 посочва каталожен номер ЕВРОВОК в избраната таблица тагове (таблица просто по-долу). По този начин, за избор 213 може да се опише = 8192 дескриптори една маса. Всяка характеристика на таблицата на сегментите описва в това, което той не трябва да бъде един сегмент на код или данни (видове сегменти ще бъде написано по-долу).

Bits 0-1 съдържат желаното ниво привилегия (УПИ - Заявени Privilege Level) достъп сегмент, това е, това, което привилегии програмата има достъп сегмент дескриптора е описано. Привилегии за достъп ще бъдат обсъдени по-късно, и толкова дълго, колкото ние приемаме, те да бъдат равни на нула (т.е. най-високата).

Досега в нашите примери е достатъчно, за да го използвате, за дескриптора. Да разгледаме структурата на дескриптора на сегмент:


Фигура 12. Формата на дескриптор на сегмент

Сега нека разгледаме по-подробно дескриптора формат.

Limit - максималното изместване от началото на сегмента, т.е., лимитът е размера на сегмента минус един байт. Така се оказва, че минималният размер на сегмент може да се зададе един байт, а максималният - един мегабайт или четири гигабайта (това зависи от, че размерът на сегмента се умножава по 4 килобайта или не).

G - детайлност флаг (Прецизност), което само показва какво се измерва с размера на сегмента, ако G = 0, размерът на сегмент се счита в байтове (т.е., максимален размер на сегмент получава 220 = 1 мегабайт) ако G = 1 размерът на сегмент се счита в 4 KB блокове (страници), т.е. максималния размер сегмент е 220 * 212 = 4 гигабайта, с нея винаги кратно на размера на сегмент 4 килобайта.

D / B - се обозначава дали малко сегмент 0 - 16-битово сегмент 1 - сегмент 32 бита (този флаг се нарича също ГОЛЯМ).

Bit 53 е запазено и винаги трябва да бъде нула.

AVL малко е безплатно (Налично) и може да се използва по усмотрение на програмата.

DPL бита дефинират права за достъп до сегмента (дескриптори Privelege ниво). Има 4 нива на достъп, където 0 - най-висок приоритет, 3 - най-нисък приоритет. Така, че е възможно да се използват данните от ЕВРОВОК на програма сегмент, описани в селектора, бита на програмата, използвани RPL трябва да приемат не по-малко важни от бита DPL дескриптора. В противен случай, има хардуерна грешка (прекъсване), наречена изключение, което може да се обработва от ядрото.

S флаг и тип сегмент трябва да се разглеждат заедно. Ако S е настроен, това означава, че сегментът е системата (System), в противен случай се изхвърли флаг S показва, че Характеристиката описва един сегмент от данни или код. Ако един сегмент е система, това показва типа (от видовете системни описания ще бъдат записани по-късно), в друг случай, дескриптора описва сегмент за данни, код сегмент.

Поле "сегмент тип" за сегмента на данни е както следва:


Фигура 13. поле "тип сегмент" сегмент данни

За област код сегмент е малко по-различно:


Фигура 14. поле "тип сегмент" код сегмент

Флаг А се използва и за виртуална памет, и е флаг за достъп (посещения), това е, за всяко позоваване на описаната сегмента на флага ще бъде създадена автоматично (т.е. битова операционна система решава кои сегменти трябва да бъдат временно възстановени до диск суап-файла ., но с някои сегменти трябва да се изчака). Това означава, че операционната система може периодично да нулирате малко, а ако след известно време става равна на един, а след това на сегмента може да се нулира, например, на твърдия диск, освобождавайки памет.

Две характеристика определя от сегментите на данни флаг:

D определя посока сегмент флаг растеж (посока). Като цяло, ако D = 1, избраният сегмент е сегмент на стека расте и "назад". Ако D = 0, избран сегмент е сегмент на данни. В действителност, на стойност D = 1 се използва на практика.

Flag W определя възможността за запис в сегмента (записваеми). Това означава, че изхвърли Знамето на страната показва, че сегментът на данни е само за четене. Ако сигналът е зададен, сегментът е достъпен за запис.

Следните два характеристика определя флага за код сегмент:

Bit C е малко субординация (В съответствие), но това ще се счита за по-късно.

Полетата P. DPL. S и тип сегмент представлява една група - разрешения за достъп сегмент, както и за работата с тази група от специални инструкции на процесора са въведени, които ще бъдат обсъдени по-късно.

Сега нека обсъдим ЕВРОВОК структурата на таблицата. LdT маси (Local Descriptor таблицата), IDT (Прекъсване дескриптори на маса) и GDT (Global Descriptor таблица) имат една и съща структура - са масиви описания. самите таблици не са сегменти - това е областта на физическата памет. IDT отличие GDT и LDT е, че конкретни описания се съхраняват в това, че ние няма да се докосне. Единствената разлика от GDT LdT е, че GDT маса може да бъде само един, а LdT могат да бъдат много. Освен това, нула ЕВРОВОК в таблицата GDT не може да се използва и трябва да съдържа нули (наречени "нула ЕВРОВОК"). маса структура е както следва:


Фигура 15. Структура Descriptor маси

Помислете за структурата на данните, съхранявани в регистри GDTR и IDTR:


Фигура 16. Структура на данни регистрира GDTR и IDTR

LDTR регистър структура е както следва:


Фигура 17. Регистър на данни Структура LDTR

От всички 10 байта са на разположение, за да ни само долните два байта (битове 0-15), в която да изтеглите LdT за избор ЕВРОВОК маса. намира в таблицата GDT.

Управление на регистрите GDTR. LDTR. IDTR са изброени в таблицата по-долу:

Таблица 3. команди имплицитно имат приоритет сегментни регистри
изрично замени регистъра на командите са предназначени за работа на ДС регистрите. ES. FS. GS. SS. За да се опита да промени сегмента регистрирате CS. ние трябва да се възползваме от косвени команди. Сега имаме достатъчно информация, за да се реализира изпълнението на 32-битов код. Но това ще бъде в следващия брой.