Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Виртуальное адресное пространство процессора Intel (IA32) в защищенном режиме






Виртуальный адрес (он же логический) в процессорах с 32-х разрядной архитектурой (IA32) - совокупность ВСЕХ возможных адресов вида:

сегментный_регистр: смещение

Например, CS: 12345678h - виртуальный (логический) адрес

В старой ОФИЦИАЛЬНОЙ документации (1995 г.) адреса такого вида назывались интеловцами виртуальными, в новой (2002 г.) они дают новое определение - логический, но по сути - это синонимы.

Почему ВИРТУАЛЬНЫЙ? Где здесь виртуальная сущность? Виртуальная сущность в том и состоит, что глядя на нечто вроде 6666h: 12345678h НИКОГДА НЕЛЬЗЯ СКАЗАТЬ НАВЕРНЯКА, ОДНОЗНАЧНО, что на самом деле представляют из себя эти два числа. Знакомые с защищенным режимом сразу определят, что это некий адрес, и по левой части (селектору) можно найти число (базу), прибавляя к которой правую часть получится некий другой адрес, в общем, 6666h: 12345678h - это некий виртуальный адрес, на самом деле (физически) его и нет вовсе...

Теперь давайте разберемся, каков размер виртуального (логического) адресного пространства процессора. Многие тут же не задумываясь ответят - 4 Гб, потому что так написано во многих книгах, но, однако, внимательный читатель рассылки не будет делать столь скоропалительных выводов.

Итак, рассмотрим правую часть виртуального адреса. Здесь все и так понятно: 2^32 = 4Гб, т.е. правая часть виртуального адреса может принять 4Гб различных значений.

НО ЕСТЬ ЕЩЕ И ЛЕВАЯ ЧАСТЬ ВИРТУАЛЬНОГО АДРЕСА!!! (о которой почему то авторы многих книг забывают).

Здесь самое время привести уже подзабытые иллюстрации:

Селектор - это и есть та самая левая часть виртуального адреса.

Теперь, избавимся от битов, которые НИКАКИМ БОКОМ НЕ ОТВЕЧАЮТ за адресацию. Это два бита RPL. Многие с горяча захотят подмахнуть сюда еще и TI, но этого делать не нужно, т.к. TI - это индикатор таблицы дескрипторов, и он ЕЩЕ КАК отвечает за адрес, который в конце концов вылезет на адресную шину... (но это забегая вперед).

Теперь:

GDT может содержать 8192 дескриптора. LDT может содержать 8192 дескриптора.Нулевой дескриптор в GDT - недоступен.Значит, имеем 8191 - в GDT и 8192 - в LDT.Всего - 16383 дескрипторов. И каждый - 4Гб. Всего: 16383 * 4Гб = 65532 Гб (64 Тб)

Иначе говоря, виртуальный адрес - НЕ 32-х РАЗРЯДНЫЙ!!!

ОН - 46 РАЗРЯДНЫЙ!!! (32 бита смещения + 1 бит (TI) + 13 бит (индекс))

2^46 байт = 65536Гб = 64 ТЕРАБАЙТ!!! - это и есть виртуальное адресное пространство процессора Интел в защищенном режиме.
(но реально, за вычетом нулевого дескриптора из GDT, имеем на 4Гб меньше адресов - 65532Гб)

Всеобщие заблуждения: 64 терабайтное виртуальное адресное пространство, якобы, получается в Pentium Pro процессорах при использовании механизма PAE и PSE-36. На самом деле, PSE-36 ЭТО РАСШИРЕНИЕ ФИЗИЧЕСКОГО АДРЕСНОГО пространства, о нем далее, а на ВИРТУАЛЬНОЕ АДРЕСНОЕ ПРОСТРАНСТВО все эти расширения никак не влияют - оно ВСЕГДА = 64 терабайтам.

(цитата из ОФИЦИАЛЬНОГО мануала Интел-а 2002 г.: " the PAE paging mechanism and support for 36-bit physical addressing were introduced into the IA-32 architecture in the Pentium Pro processors...)

А теперь внимание вопрос на засыпку: чему, по вашему мнению, равен размер виртуального адресного пространства процессора Intel в РЕАЛЬНОМ РЕЖИМЕ? Ответы мыльте на ящик внизу.

Линейное адресное пространство процессора Intel (IA32) в защищенном режиме

Линейный адрес - это 32-х разрядный адрес, получаемый путем прибавления 32-х разрядного смещения (правая часть виртуального адреса) к базе сегмента.

Линейный адрес - ВСЕГДА 32-х разряден. В этом легко убедиться, попытавшись опровергнуть это утверждение. Попробуйте создать сегмент с базой в 4Гб и сделать что то типа jmp селектор_этого_сегмента: 2Гб (т.е. фактически должен возникнуть линейный адрес = 4 Гб (база) + 2 Гб (смещение) = 6 Гб). Вместо этого мы получим #GP. Вот и все.

Поэтому, ЛИНЕЙНОЕ АДРЕСНОЕ ПРОСТРАНСТВО процессора Intel в защищенном режиме составляет 4 Гб.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.005 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал