Засіб віртуальної пам’яті / підкачки дозволяє ядру «віртуалізувати» пам’ять у процесах простору користувачів. Ядро може приймати сторінки з фізичної пам'яті та упорядковувати їх під час підкачки, щоб вони виглядали суміжними з процесом простору користувача.
Обмеження може бути встановлено в пам'яті процесу в просторі користувачів, і якщо процес виходить за межі нього, виникає "помилка сторінки", яка спричиняє виняток з процесора, який відскакує назад до ядра. Це заважає програмі простору користувачів не возитися з пам'яттю, виділеною ядром або іншим програмам, без дозволу ядра.
Зазвичай програми користувальницького простору просять ядро розширити цей ліміт через чітко визначені інтерфейси (викликаються функціями C malloc()
і, free()
наприклад.). Ядро відповідає за те, щоб відстежувати, скільки і яка пам'ять виділяється програмою.
Цей механізм "помилка сторінки" також може дозволити ядру поміняти сторінку, до якої процес намагався отримати доступ з однієї з диска, якщо ядро здатне перезавантажити пам'ять (і Windows, і Linux підтримують це), отже, чому воно називається своп. Якщо доступ до пам'яті був дійсно недійсним (тобто процес намагається отримати доступ до пам'яті, він не запитував спочатку), зазвичай процес буде знищений за допомогою SIGSEGV.
Отже, "заміна" - це додаткова функція (в Linux ви можете фактично її повністю відключити, якщо хочете), яка залежить від віртуальної пам'яті / пейджингу, але вона не потрібна лише тому, що у процесора є віртуальна пам'ять / пейджингові повідомлення. Концепції не однакові, але заміна залежить від існування підкачки / віртуальної пам'яті.
Крім того, після більш детального ознайомлення з вашим запитанням "пейджинг" іноді використовується як синонім "заміни" - але я ніколи не чув про "замінування", що означає, що пам'ять всього процесу витісняється порівняно з "пейджинг", що означає лише частину його заміняють.
Але чому тоді Linux потрібен розділ swap? Якщо фізична пам'ять заповнена, деякі процеси будуть передані на жорсткий диск, і новий процес буде відображено з віртуальної пам'яті у фізичну пам'ять.
"Віртуальна пам'ять" - це фізична пам'ять, просто "перезавантажена". Апаратне забезпечення MMU не може безпосередньо відображати будь-який пристрій зберігання даних. MMU може нанести помилку, яка повідомляє ядро про те, що процес намагався отримати доступ до пам'яті, до якого він не повинен мати - і ядро може використовувати цей механізм, щоб побачити, що процес хоче щось повернути з диска, що він вважав, що був у пам'яті, а потім зробити " поміняти ". Справа в тому, що операційна система вирішує зберегти сторінки на диску, щоб вона могла використовувати ці сторінки для інших процесів, а не для обладнання.