Принцип управления памятью, используемый в Linux

9

Управление памятью в ядре Linux осуществляется с использованием разбиения на страницы или сегментации или обоих?

Жиль "ТАК - перестань быть злым"
источник

Ответы:

7

Linux использует оба. Он использует сегментацию для отображения всего доступного адресного пространства, предоставляя различные права доступа: в основном ядро ​​и представление пользовательского пространства. Вы можете получить исходный код Linux для KERNEL_DS (сегмент данных ядра) для некоторых примеров.

Пейджинг затем используется для реализации виртуальной памяти (Grep для "struct gdt_page" в ядре, для начальной точки)

Фредерик Дьюердт
источник
6

Управление памятью под Linux работает исключительно с помощью пейджинга.

Linux поддерживает как «маленькие» (обычно 4 КБ), так и «большие» (2 МБ) страницы. Первые «просто работают», не зная и не делая ничего особенного, а вторые нуждаются в особой обработке (должны быть зарезервированы во время загрузки и отображены через специальное устройство).

Единственный контекст, в котором «сегмент» появляется в Linux, это системный вызов brk (), который используется для увеличения сегмента данных процесса (обычно это вам не нужно, malloc делает это без вашей заботы). Но так или иначе, память поступает в страницы и управляется в страницах, и это не имеет никакого отношения к сегментации x86.

Damon
источник
Сегментация X86 была устаревшей, когда вышел i386. Linux никогда не использовал сегментацию для управления памятью. Некоторые производные, такие как ELKS и (возможно) uClinux могут.
LawrenceC