Чи керування пам’яттю в ядрі Linux здійснюється за допомогою підкачки або сегментації чи обох?
Чи керування пам’яттю в ядрі Linux здійснюється за допомогою підкачки або сегментації чи обох?
Відповіді:
Linux використовує обидва. Він використовує сегментацію для картографування всього доступного адресного простору, надаючи різні права доступу: в основному, ядро та вигляд простору користувача. Можна прикласти вихідний код Linux для KERNEL_DS (сегмент даних ядра) для деяких прикладів.
Потім підказка використовується для реалізації віртуальної пам'яті (Grep для "struct gdt_page" в ядрі, для початкової точки)
Управління пам'яттю під Linux працює виключно за допомогою підкачки.
Linux підтримує як "малі" (зазвичай 4 кБ), так і "великі" (2М) сторінки. Перші "просто працюють", не знаючи і не роблячи нічого особливого, а останні потребують спеціального лікування (повинні бути зарезервовані під час завантаження та відображатись за допомогою спеціального пристрою).
Єдиний контекст, в якому "сегмент" з'являється під Linux, - це системний виклик brk (), який використовується для збільшення сегмента даних процесу (звичайно це вам не знадобиться, malloc робить це без того, щоб вам було потрібно). Але в будь-якому випадку, пам'ять приходить на сторінки і керується на сторінках, і це не має нічого спільного з сегментацією x86.