Пам'ять Linux: Принцип роботи

watch 33s
views 2

10:58, 01.12.2023

Зміст статті
arrow

  • Методи керування підсистемою пам'яті
  • Адресний простір процесів
  • Область пам'яті
  • Відкладене виділення

У специфікаціях комп'ютерів, особливо серверів, зазвичай вказується N гігабайт оперативної пам'яті для позначення доступної фізичної пам'яті. Розподілом цих ресурсів керують операційні системи, тому кожна програма має власний набір ресурсів, віртуальний адресний простір, щоб кожна програма працювала так, ніби вона є незалежною.

Таким чином, програмам не потрібно знати про використання пам'яті одна одною або про загальний обсяг доступної фізичної пам'яті.

Linux використовує ієрархічний набір структур даних та спеціалізовані апаратні механізми для відстеження відповідності між фізичною та віртуальною пам'яттю. Разом вони називаються MMU.

Задля ефективності пам'ять управляється великими блоками або сторінками, кожна з яких зазвичай має вагу 4 кілобайта.

У Linux, на відміну від інших операційних систем, не використовується сегментація пам'яті на апаратному рівні.

Поняття віртуальної пам'яті в Linux охоплює як оперативну пам'ять, так і всі розділи підкачки (SWAP).

Процес роботи з пам'яттю, у свою чергу, може бути як резидентним (фактично використовувана фізична пам'ять), так і віртуальним (сукупність потенційно доступної пам'яті). Зазвичай rss менший за vsz.

Розділ підкачки - це розділ на диску, в якому розміщуються рідко використовувані дані з резидентної пам'яті, а іноді і всі дані (якщо фізичної пам'яті не вистачає). Linux може працювати як з розділами підкачки, так і з файлами підкачки, дозволяючи переносити дані з фізичної пам'яті до спеціального файлу на жорсткому диску. У цьому файлі та розділі підкачки використовується той самий формат, що і в оперативній пам'яті.

Детальна інформація про використання пам'яті процесом зберігається у файлі proc/<pid>/.

Віртуальна пам'ять складається зі сторінок. Це набори комірок пам'яті у віртуальному просторі, які відповідають реальній пам'яті на диску. Більшість сторінок мають стандартний розмір 4 КБ, але в деяких випадках використовуються сторінки більшого розміру (2 мегабайти або 1 гігабайт). Величезні сторінки використовуються для роботи з великими даними (базами даних тощо).

Методи керування підсистемою пам'яті

Керування пам'яттю має вирішальне значення для продуктивності системи у 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).

Відкладене виділення

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

Поділитися

Чи була ця стаття корисною для вас?

Популярні пропозиції VPS

-10%

CPU
CPU
6 Xeon Cores
RAM
RAM
16 GB
Space
Space
400 GB HDD
Bandwidth
Bandwidth
300 Gb
KVM-HDD HK 16384 Linux

40.42

При оплаті за рік

-10.8%

CPU
CPU
1 Xeon Core
RAM
RAM
1 GB
Space
Space
50 GB SSD
Bandwidth
Bandwidth
300 GB
wKVM-SSD 1024 HK Windows

17

При оплаті за рік

-10%

CPU
CPU
4 Xeon Cores
RAM
RAM
2 GB
Space
Space
30 GB SSD
Bandwidth
Bandwidth
Unlimited
10Ge-KVM-SSD 2048 Linux

30.3

При оплаті за рік

-10%

CPU
CPU
10 Xeon Cores
RAM
RAM
64 GB
Space
Space
300 GB SSD
Bandwidth
Bandwidth
Unlimited
KVM-SSD 65536 Linux

134.99

При оплаті за рік

-21.4%

CPU
CPU
6 Xeon Cores
RAM
RAM
8 GB
Space
Space
100 GB SSD
Bandwidth
Bandwidth
500 GB
wKVM-SSD 8192 HK Windows

67

При оплаті за рік

-10%

CPU
CPU
6 Xeon Cores
RAM
RAM
8 GB
Space
Space
100 GB SSD
Bandwidth
Bandwidth
Unlimited
MT5 KVM 8192 Windows

29.99

При оплаті за рік

-15.6%

CPU
CPU
2 Xeon Cores
RAM
RAM
512 MB
Space
Space
10 GB SSD
Bandwidth
Bandwidth
1 TB
KVM-SSD 512 Metered Linux

5.33

При оплаті за рік

-13.3%

CPU
CPU
2 Xeon Cores
RAM
RAM
1 GB
Space
Space
20 GB SSD
Bandwidth
Bandwidth
300 GB
KVM-SSD 1024 HK Linux

11.33

При оплаті за рік

-9.7%

CPU
CPU
10 Epyc Cores
RAM
RAM
64 GB
Space
Space
300 GB NVMe
Bandwidth
Bandwidth
Unlimited
wKVM-NVMe 65536 Windows

139.49

При оплаті за рік

-10%

CPU
CPU
6 Xeon Cores
RAM
RAM
16 GB
Space
Space
150 GB SSD
Bandwidth
Bandwidth
Unlimited
10Ge-KVM-SSD 16384 Linux

231

При оплаті за рік

Інші статті на цю тему

cookie

Чи приймаєте ви файли cookie та політику конфіденційності?

Ми використовуємо файли cookie, щоб забезпечити вам найкращий досвід роботи на нашому сайті. Якщо ви продовжуєте користуватися сайтом, не змінюючи налаштувань, вважайте, що ви згодні на отримання всіх файлів cookie на сайті HostZealot.