Сегментация в Linux: Сегментация и Подкачка страниц избыточны?

Я читаю "Понимание Ядро Linux". Это - отрывок, который объясняет, как Linux использует Сегментацию, которую я не понял.

Сегментация была включена в микропроцессоры 80 x 86, чтобы поощрить программистов разделять свои приложения на логически связанные объекты, такие как подпрограммы или глобальные и локальные области данных. Однако Linux использует сегментацию очень ограниченным способом. На самом деле сегментация и подкачка страниц несколько избыточны, потому что оба могут использоваться для разделения физических адресных пространств процессов: сегментация может присвоить другое линейное адресное пространство каждому процессу, в то время как подкачка страниц может отобразить то же линейное адресное пространство в различные физические адресные пространства. Linux предпочитает подкачку страниц сегментации по следующим причинам:

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

Одна из целей дизайна Linux является мобильностью к широкому спектру архитектуры; архитектура RISC в особенности ограничила поддержку сегментации.

Все процессы Linux, работающие в Непривилегированном режиме, используют ту же пару сегментов к адресным командам и данным. Эти сегменты являются сегментом кода вызываемого пользователя и пользовательским сегментом данных, соответственно. Точно так же все процессы Linux, работающие в Привилегированном режиме, используют ту же пару сегментов к адресным командам и данным: их называют сегментом кода ядра и сегментом данных ядра, соответственно. Таблица 2-3 показывает значения полей Segment Descriptor для этих четырех решающих сегментов.

Я не могу понять 1-й и последний абзац.

5
задан claws 12 June 2010 в 14:58
поделиться

4 ответа

Семейство ЦП 80x86 генерирует реальный адрес путем добавления содержимого регистра ЦП, называемого сегментным регистром, к содержимому счетчика программ. Таким образом, изменяя содержимое сегментного регистра, вы можете изменить физические адреса, к которым обращается программа. Пейджинг делает нечто подобное, сопоставляя один и тот же виртуальный адрес с разными реальными адресами. В Linux используется последний - регистры сегментов для процессов Linux всегда будут иметь одно и то же неизменное содержимое.

7
ответ дан 18 December 2019 в 08:26
поделиться

Современные операционные системы (например, Linux, другие Unixen, Windows NT и т. Д.) Не используют средство сегментации, предоставляемое процессором x86. Вместо этого они используют плоскую 32-битную модель памяти. Каждый процесс пользовательского режима имеет собственное 32-битное виртуальное адресное пространство.

(Естественно, ширина расширена до 64 бит в системах x86_64)

1
ответ дан 18 December 2019 в 08:26
поделиться

Windows использует сегмент fs для локального хранения потоков. Поэтому wine должна его использовать, а ядро linux должно его поддерживать.

3
ответ дан 18 December 2019 в 08:26
поделиться

Intel сначала добавила сегментацию на 80286, а затем подкачку на 80386. Unix-подобные ОС обычно используют подкачку для виртуальной памяти.

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

2
ответ дан 18 December 2019 в 08:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: