LINUX.ORG.RU

[low level] Разница между сегментной и страничной организацией памяти


1

1

Какая разница между сегментной и страничной организацией памяти в IA-32?

Читал в книге Н. Голубь «Ис-во программирования на ассемблере» на стр. 254 про это. Я так понял, в виндозе и линуксе используется именно страничный механизм.

Мне кажется, я здесь ошибаюсь, но страничная организация позволяет адресовать максимум 4ГБ для одной задачи процессора, а сегментная - максимум 64ТБ. Почему тогла используется именно страничная модель адресации?

Дайте линк на годный мануал на эту тему или разъясните пожалуйста.

★★

>Почему тогла используется именно страничная модель адресации?

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

И, это, ты упускаешь из виду, что «64 Тб» — это виртуальное пространство. Реально все это упирается в то ли в 4, то ли в 64 Гб из-за разрядности физического адреса.

linuxfan
()

Скачай 3й том мануалов с сайта интела, там все написано. В линуксе, как и в венде используются оба. Сегменты никуда не делись, они вообще не отключаемы в ia-32. Короче так быстро и просто не напишешь, читай мануал от интела, там очень доходчиво.

Zitzy
()
Ответ на: комментарий от linuxfan

Спасибо за ответ.

Я процитирую из вышеупомянутой книги:

Сегментная организация памяти.

Память можно разбить на один или несколько сегментов различной длины (до 4ГБ), которые могут подкачиваться с диска по мере необходимости и использовться различными программами. .... Поскольку каждая задача может работать с 16К селекторов, а смещения могут адресовать 4ГБ, то виртуальное адресное пространство, доступное программе, составляет 64ТБ.

То есть, здесь написано, что при сегментной модели также можно организовывать свопы.

И на счет 64ТБ. Для каждой задачи, которой управляет процессор, есть таблица дескрипторов, в которой связан базовый адрес сегмента с его номером (инфа 100% из книги и той же педивикии). Всего сегментов можно иметь 16 тысяч, а смещение внутри сегмента от 0 до 4ГБ. => 64ТБ ДЛЯ ОДНОЙ ЗАДАЧИ.

В страничной для одной задачи максимум 4 ГБ. => Сегментная дает больше.

Поясните пожалуйста, где я ошибаюсь.

bk_ ★★
() автор топика
Ответ на: комментарий от Zitzy

Вы имели ввиду вот это:

http://www.intel.com/products/processor/manuals/

Intel® 64 and IA-32 Architectures Software Developer's Manual
Volume 3A: System Programming Guide

Describes the operating-system support environment of an IA-32 and Intel® 64 architectures, including: memory management, protection, task management, interrupt and exception handling, multi-processor support, and thermal and power management features. This volume also contains the table of contents for both Volumes 3A and 3B.

?

bk_ ★★
() автор топика

Не на всех архитектурах есть поддержка сегментов, а юникс должен работать везде, поэтому в юникс предпочли страницы. Они позволяют почти все то же, что и сегменты, но оказались более удобны.

unsigned ★★★★
()
Ответ на: комментарий от unsigned

Мой вопрос в том, что реально ли сегментной модели ia-32 диапазон адресуемой памяти больше?

bk_ ★★
() автор топика
Ответ на: комментарий от unsigned

Я думаю, здесь играет роль GDT (global descriptor table) и LDT, а не регистры, а так как объем таблицы - 16 тысяч записей, соответственно - 16 тысяч сегментов различного типа, а суммарный объем всей адресуемой задачей памяти - 16000*4ГБ = 64ТБ

bk_ ★★
() автор топика
Ответ на: комментарий от Zitzy

Ушел читать ман. Спасибо за ссылку.

bk_ ★★
() автор топика
Ответ на: комментарий от Zitzy

Можно прыгать по сегментам.

Не пойму, как. Процесс не может перезагрузить регистр, а ОС не знает, какой сегмент ему понадобится.

unsigned ★★★★
()

> Дайте линк на годный мануал на эту тему

Любая вменяемая книга по ОС.

или разъясните пожалуйста.

Разъясню: тот, кто изучает работу ОС по архитектуре IA-32... ну ты понел.

То, что сегменты не используются фактически нигде, связано с простой вещью - управление памятью и на уровне ОС, и на уровне приложений гораздо проще в случае страничной организации.

tailgunner ★★★★★
()
Ответ на: комментарий от unsigned

ОС не знает, какой сегмент ему понадобится.

ОС не знает только потому, что сама использует 2 сегмента кода и 2 данных. Ей (точнее программерам) так удобнее. А так теоретически прыгать между ними никто не мешает, в стеке будет селектор и смещение.

Zitzy
()

В случае страничной используется одно адрессное пространство для всех процессов, это гораздо удобнее, плюс все что описали выше про свопинг и мапинг.

frey ★★
()

Исходно, сегментная модель защищёного режима появилась на i80286, а страничной там не было. Дескриптор сегмента для того процессора описывал область памяти с 24 бит начальным адресом и 16 бит размером (до 64 кБайт). Потом эти поля расширили до 32 бит адрес и 20 бит размер (1 Мбайт). И добавили страничный режим, когда размер сегмента указывается в страницах и адресация к физической памяти идёт через страничное преобразование.

Потом добавили большие страницы (4 Мбайт, вроде) и PAE. PAE по факту является более хитрым страничным преобразованием, что позволяет адресовать до 64 ГБ памяти.

Относительно адресации 64 ТБ памяти на ia32 я слышу первый раз.

Расширение ОЗУ за счет НЖМД в классической (80286) сегменой адресации позразумевает свопинг (запись и чтение с диска сегмента целиком), а не пейджинг (запись и чтение с диска отдельных страниц.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.