Пам'ять Linux: Принцип роботи
10:58, 01.12.2023
Методи керування підсистемою пам'яті
Керування пам'яттю має вирішальне значення для продуктивності системи у Linux,
Методами розподілу пам'яті у Linux є bootmem (початковий базовий розподільник), buddy (розподіл суміжних фреймів сторінок), vmalloc (робота з несуміжними областями фізичної пам'яті) і kmemcache (розподіл невеликих об'єктів у межах фреймів сторінок). Ці розподільники служать для різних цілей, від початкового завантаження до обробки різних потреб у розподілі пам'яті.
NUMA (Non-Uniform Memory Access - нерівномірний доступ до пам'яті) у багатопроцесорних системах - ще один аспект, яким ефективно керує Linux. Він відповідає за оптимізацію доступу до пам'яті на основі фізичної близькості пам'яті до процесорів, підвищуючи продуктивність.
Керування пам'яттю користувача
Запити alloc_pages() та kmalloc() призводять до негайного виділення пам'яті, оскільки ядро є найбільш довіреним компонентом системи.
Адресний простір процесів
Адресний простір процесу - це лінійні адреси, до яких звертаються процеси.
Процес отримує доступ до нових ділянок пам'яті через виклики: malloc(), calloc(), mmap(), brk(), shmget() + shmat(), posix_memalign(), mmap() на основі void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset).
Дескриптор пам'яті
mm_struct, дескриптор пам'яті, містить всю інформацію про адресний простір.
Область пам'яті
Пам'ять поділяється на два поля - vm_start і vm_end. Вони позначають адресу початку та першого біта після кінця виділеної області.
Всі області з'єднуються у двонаправлений список, де вони впорядковані за зростанням адрес.
Лінійний розподіл інтервалу адрес
Лінійні адреси, що виділяються, або пов'язані з файлом (FILE), або ні (ANON), при цьому процес, що запитує пам'ять, може ділитися ними з іншими процесами або мати приватний доступ до них.
(MAP_SHARED або MAP_PRIVATE).
Відкладене виділення
У деяких випадках запити процесів користувача можуть бути відкладені до моменту, коли пам'ять дійсно знадобиться.