Управление памятью в ядре Linux осуществляется с использованием разбиения на страницы или сегментации или обоих?
Управление памятью в ядре Linux осуществляется с использованием разбиения на страницы или сегментации или обоих?
Ответы:
Linux использует оба. Он использует сегментацию для отображения всего доступного адресного пространства, предоставляя различные права доступа: в основном ядро и представление пользовательского пространства. Вы можете получить исходный код Linux для KERNEL_DS (сегмент данных ядра) для некоторых примеров.
Пейджинг затем используется для реализации виртуальной памяти (Grep для "struct gdt_page" в ядре, для начальной точки)
Управление памятью под Linux работает исключительно с помощью пейджинга.
Linux поддерживает как «маленькие» (обычно 4 КБ), так и «большие» (2 МБ) страницы. Первые «просто работают», не зная и не делая ничего особенного, а вторые нуждаются в особой обработке (должны быть зарезервированы во время загрузки и отображены через специальное устройство).
Единственный контекст, в котором «сегмент» появляется в Linux, это системный вызов brk (), который используется для увеличения сегмента данных процесса (обычно это вам не нужно, malloc делает это без вашей заботы). Но так или иначе, память поступает в страницы и управляется в страницах, и это не имеет никакого отношения к сегментации x86.