Защитен режим: Разлика между версии
Изтрито е съдържание Добавено е съдържание
Ред 11:
== Технология ==
Тъй като
* Разширяване на всички регистри от 16 на 32 бита.
Ред 24:
=== Регистри ===
При защитения режим всички регистри стават 32-битови, а имената им се образуват от префикса '''E''' и името на съответния 16-битов регистър. 32-битовите регистри с общо предназначение са EAX, EBX, ECX, EDX, ESP, ЕBP, EDI и ESI,
Няма директен начин за достъп до старшите 16 бита на 32-битовите регистри EAX, EBX, ECX и EDX, но се запазва възможността за директен достъп до младшия и старшия байт на младшите 16 бита под имената AL, AH, BL, BH и т.н.
Всички нови регистри са достъпни в пълния им 32-битов размер и в [[real mode|реален режим]], но
=== Типове данни ===
Ред 42:
=== Методи за адресиране ===
При защитения режим
==== Формиране на адресите ====
Ред 54:
:'''A''' е получения ефективен адрес на операнда,
:'''B''' е базов адрес (задава се в някой от регистрите с общо предназначение
:'''I''' е индекс (задава се в някой от регистрите с общо предназначение, с изключение на ESP
:'''S''' е мащаб (може да бъде 1, 2, 4 или 8) (задава се като непосредствен операнд в самата инструкция
:'''O''' е отместване, което е непосредствено закодирано в самата инструкция като 8-, 16-, или 32-битово число със знак.
Ред 66:
==== Сегментиране на паметта ====
В защитения режим сегментите са дълги до 4 GB (2<sup>32</sup> байта), като началният им адрес,
Всяка дескрипторна таблица може да съдържа до 2<sup>13</sup> дескриптора на сегменти (2<sup>13</sup> - 1 за GDT, защото
По отношение на защита на паметта, всеки сегмент има като атрибут т. нар. ниво на привилегированост (цяло число от 0 до 3, като 0 е най-привилегированото ниво).
Действието на защатита на паметта може да бъде обобщено по следния начин:
Ред 81:
==== Странициране на паметта ====
Полученият след сегментирането ''линеен адрес'' съвпада с физическия адрес само ако не е включено страницирането на паметта (страницирането на паметта е опционално и може да се изключи). При включено странициране на паметта,
Страниците на паметта при защитения режим са с размер 4 KB (2<sup>12</sup> байта) и са подравнени на гранците 4 KB (по-късно са въведени страници с по-голям размер - 4 MB, за да може да се използват по-големи адресни пространства). 32-битовият линеен адрес може да се разглежда като съвкупност от:
* Най-старшите 10 бита определят индекс в каталога на страниците, който представлява таблица от 1024 елемента в паметта. Всеки от тези елементи сочи към адреса на една от таблиците на страниците, или към началния адрес на страница от 4 MB; или е невалиден.
Ред 95:
Страницирането на паметта осигурява възможност за използването на [[виртуална памет]], тъй като една страница може да бъде обявена за невалидна в таблицата на страниците и всеки достъп до нея предизвиква специално прекъсване, което дава възможност на операционната система да зареди съответната страница в паметта.
В съвременните операционни системи за управление на паметта се използва предимно страницирането, а сегментирането почти не се използва (
Защитата на паметта от гледна точка на страницирането е доста "орязана": в описанието на страницата има само 2 еднобитови флага, които осигуряват следните нива на достъп: забранен всякакъв достъп, разрешено четене и разрешено четене и запис. В по-съвременните x86 процесори (произведени след 2003 г.) е въведен т. нар. [[NX бит]], който показва дали е разрешено изпълнението на програмен код в съответната страница. Това повишава сигурността на операционната система, предотвратявайки една от най-често използваните хакерски атаки - препълването на буфер.
=== Входно-изходно адресно пространство ===
Ред 112:
* '''CLI''', '''STI''' (прави се само първата проверка)
Както се вижда, освен достъпа до входно-изходното адресно пространство, се ограничава и способността на програмата да маскира прекъсванията, за да не може да "завземе" процесорното време, игнорирайки прекъсванията от часовника.
Както полето IOPL, така и таблицата за защита на входно-изходното пространство са специфични за всеки процес, която позволява на операционната система да управлява достъпа до входно-изходното пространство изключително гъвкаво.
Ред 118:
=== Инструкции ===
Следва описание на новите инструкции в сравнение с [[Real mode#.D0.98.D0.BD.D1.81.D1.82.D1.80.D1.83.D0.BA.D1.86.D0.B8.D0.B8|реалния режим]]. Трябва да се има предвид, че повечето нови инструкции могат да се използват и в реален режим. Новите инструкции, които могат да бъдат използвани само в защитен режим, са специално отбелязани.
==== Инструкции за трансфер на данни ====
Ред 132:
* '''BT''' - проверка на даден бит (бита се записва в полето CF на на регистъра EFLAGS).
* '''BTC''' - също като '''BT''', като стойността на адресирания бит се променя.
* '''BTR''' - също като '''BT''', като
* '''BTS''' - също като '''BT''', като
==== Инструкции за работа със стрингове ====
|