Вопрос

Если 32-битная операционная система работает с сегментированной моделью памяти, они все еще будут 4ГБ ограничить?

Я читал Интерьер Pentium процессор семьи разработчик и он утверждает, что с сегментированной моделью памяти, которую можно найти на карту 64tb. памяти.

«В сегментированной модели Организации памяти логическое адресное пространство состоит из целых 16 383 сегментов до 4 гигабайт каждой или общей суммы, чем на 2 ^ 46 байта (64 терабайта). Процессор отображает этот 64 Terabyte логический адрес Пространство на физическое адресное пространство по механизму перевода адресов, описанным в главе 11. Прикладные программисты могут игнорировать детали этого сопоставления. Преимущество сегментированной модели заключается в том, что смещения в каждом адресном пространстве проверяются отдельно, и доступ к каждому сегменту может быть индивидуально контролируется.

alt text

Это не сложный вопрос. Я просто хочу быть уверенным, что я правильно понял текст. Если Windows или любая другая ОС работала в сегментированной модели, а не на плоской модели, ограничение памяти будет 64 ТБ?


Обновлять:

alt text

Системная документация Intel's 3-2 3A.


alt text

http://pdos.csail.mit.edu/6.828/2005/Readings/i386/c05.htm.


Реестр сегмента не должен считаться в традиционном смысле реального режима. Регистр сегмента действует как селектор для глобальной таблицы дескриптора.

В защищенном режиме вы используете логический адрес в форме A: B для решения памяти. Как и в реальном режиме, A - часть сегмента и B - это смещение в этом сегменте. Регистры в> защищенном режиме ограничены 32 битами. 32 бита могут представлять любое целое число от 0 до 4 ГБ. Поскольку B может быть любое значение между 0 и 4 ГБ нашими сегментами теперь имеют максимальный размер 4 ГБ (одинаковые рассуждения, что и в реальном режиме). Теперь для разницы. В защищенном режиме A не является абсолютным значением для сегмента. В защищенном режиме A - селектор. Селектор представляет смещение в системную таблицу, называемую таблицу глобального дескриптора (GDT). GDT содержит список дескрипторов. Каждый из этих дескрипторов содержит информацию, которая описывает характеристики сегмента.

Серектор сегмента предоставляет дополнительную безопасность, которая не может быть достигнута с помощью пейджинга.

Оба эти методы [сегментация и пейджиня] имеют свои преимущества, но пейджинг намного лучше. Сегментация - это, хотя все еще полезно, быстро устаревшая как метод защиты памяти и виртуальной памяти. Фактически, архитектура X86-64 требует плоской модели памяти (один сегмент с основанием 0 и предел 0xFFFFFFFFFF) для некоторых его инструкций для правильной работы.

Сегментация, однако, полностью встроена в архитектуру X86. Невозможно обойти это. Так что здесь мы собираемся показать вам, как настроить собственную таблицу Global Descriptor - список дескрипторов сегментов.

Как упоминалось ранее, мы собираемся попробовать и настроить плоскую модель памяти. Окно сегмента должно начинаться с 0x00000000 и простираться до 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFF (конец памяти). Тем не менее, есть одно, что сегментация может сделать, что пейджинг не может, и это установить уровень кольца.

-http://www.jamesmolloy.co.uk/tutorial_html/4.-%20gdt%20and%20IDT.html.

GDT, например, перечисляет различные пользователи их уровни доступа и области доступа к памяти:

Образец таблицы GDT

GDT[0] = {.base=0, .limit=0, .type=0};             
// Selector 0x00 cannot be used
GDT[1] = {.base=0, .limit=0xffffffff, .type=0x9A}; 
// Selector 0x08 will be our code
GDT[2] = {.base=0, .limit=0xffffffff, .type=0x92}; 
// Selector 0x10 will be our data
GDT[3] = {.base=&myTss, .limit=sizeof(myTss), .type=0x89}; 
// You can use LTR(0x18)

http://wiki.osdev.org/gdt_tutorial# khat_should_i_put_in_my_gdt.3f.

Пейджинговая часть - какие карты к физической памяти. (PAE) - это то, что обеспечивает добавленную память до 64 ГБ.

Так короче. Ответ нет, у вас не может быть более 4 ГБ логической памяти. Я считаю претензию на 64 ТБ опечатки в Интерьер Pentium процессор семьи разработчик.

Это было полезно?

Решение

Редактировать: Мой ответ предполагает, что на «4 ГБ» вы относитесь к максимальному размеру линейного (виртуального) адресного пространства, а не физического адресного пространства. Как объяснено в комментариях ниже, последний на самом деле не ограничен 4 ГБ - даже при использовании плоской модели памяти.


Повторяя вашу цитату с акцентом:

то логично адресное пространство состоит из целых 16 383 сегментов до 4 гигабайт каждого

Теперь цитируя из «Intel® 64 и IA-32 архитектурных архитектурных программных разработчиков Руководство 1: базовая архитектура» (PDF доступен здесь):

Внутри все сегменты, которые определены для системы, отображаются в процессор линейный адресное пространство.

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

Другие советы

Ты помнишь старые времена? DOS на X86 в реальном режиме с 64 КБ сегменты? FAR Указатели? HMA? XMS? Поскольку количество памяти выросло, они нашли способы использования большего количества памяти, чем процессор может нормально обратиться. Но это было уродливо.

Конечно, они могут использовать сегментацию для 32 битов, но почему? Не было необходимости. Когда 32-битные процессоры появились ограничение на 4 ГБ было более чем достаточно, поэтому было сделано решение для использования плоской модели.

Кроме того, 32-битная ОС может использовать более 4 ГБ, это процесс, который ограничен 4 ГБ адресным пространством (даже 2 или 3 в Windows).

Претензия составляет 64 ТБ логического адресного пространства. Поднимаясь физическая память Ограничения не имеют значения, потому что путем включения пейджинга памяти, можно обойти физические ограничения.

Тем не менее, это все еще немного вводящее в заблуждение претензию, поскольку поле индекса селектора сегмента составляет 16 битов, минус 1 бит для индикатора таблицы и 2 бита для уровня защиты запросов, оставляя в общей сложности 8192 (13 бит) сегментов сегментов. С 8,192 4 ГБ сегментами можно иметь доступ только к 32TB логической памяти в любой таблице GDT (глобальной дескриптор), либо в таблице LDT (локальный дескриптор). Чтобы иметь возможность доступа к 64TB логической памяти, нужно будет полностью использовать как GDT, так и LDT с 16 384 уникальными сегментами.

Несмотря на это, первый вопрос был: «Есть ли ограничение на 4 ГБ», а ответ - «нет». В 32-битной системе с включенным сегментацией, так и выявлением, можно, например, выделить 512 МБ к сегменту кода (CS), 1 ГБ в сегмент стека (SS) и 4 ГБ в сегмент данных (DS).

Ответ на второй вопрос о том, будет ли ОС ограничена 64 ТБ, если она использовала модель сегментированной памяти, менее прямая. Это работа ОС для предоставления менеджера памяти. Очевидно, что было бы физическое ограничение 32 ГБ ОЗУ. 32-битный Linux, поскольку он использует пейджинг, может обеспечить каждое приложение с плоским адресным пространством 4 ГБ (игнорирование деталей ядра / пользователей). И каждый процесс считает, что он имеет 4 ГБ физического адресного пространства.

Краткое описание, я думаю, вы сбиваете ограничения сегментации с ограничениями пейджинга. Пейнгация позволяет системе или приложению использовать больше оперативной памяти, чем то, что доступно физически. Сегментация позволяет процессу отображаться в нескольких 32-битных логически удовлетворенных сегментах. Его ключ следует обратить внимание, что даже плоский режим использует сегментацию, но все регистры сегмента отображаются на одном базовом адресе.

AFAIK, ответ «не обязательно», из-за других ограничений ОС. Они могут захотеть поддерживать максимальный размер памяти намного ниже теоретического предела, поскольку это может сделать некоторые из внутренних структур памяти меньшим и более эффективным. Но я действительно не знаю ... я нет Марк Русинович...

Взгляни на Палец. Отказ я думать Это то, о чем вы говорите, но с тех пор, как я закончил 64-битные указатели, я решил убить клетки мозга, которые имели дело с помощью моделей памяти, с Кентукки прямым бурбоном виски.

Сегментированная модель Intel ограничена 16 384 сегментами. Это слишком маленькое число, чтобы действительно сделать вещи удобными. Что было бы намного приятнее, если бы система могла бы быстро перейти среди двух или четырех миллиардов сегментов. Это то, что я хотел бы видеть, а не 64-битное линейное пространство. Конструкция, которая может эффективно поместить каждый выделенный объект в другой сегмент, позволит без особой проверки диапазона на каждом отдельном выделенном объекте, перемещение объектов с минимальным ударом на работающий код (предполагая, что ЦП может заметить, когда выбранный в данный момент сегмент был недействительный) и т. Д. В то время как требуется только ссылки на объекты, чтобы принять половину всего места в кэше как 64-битный указатель.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top