Що таке віртуальна пам'ять?


27

Я двічі перевіряв свої нотатки на предмет "Віртуальна пам'ять", і визначення в моїй текстовій книзі таке:

Процес виділення секції вторинного сховища, щоб діяти як частина основної пам'яті

Де, як говорить Вікіпедія :

Віртуальна пам'ять - це комп'ютерна системна техніка, яка створює враження, що вона має суміжну робочу пам'ять (адресний простір)

і (також говорить Вікіпедія)

Зауважте, що "віртуальна пам'ять" - це більше, ніж просто "використання місця на диску для збільшення фізичного розміру пам'яті"

Хто-небудь може запропонувати роз'яснення щодо правильності?


Я вважаю, що примітка з Вікіпедії передбачає певну кваліфікацію щодо того, що застосовується з точки зору того, що речі є суміжними.
JB King

На це питання, мабуть, можна отримати кращу відповідь.
Капітан Сегфол

2
Не плутайте, що таке віртуальна пам'ять і спосіб її використання. Перше речення Вікіпедії визначає, що це таке. Ваша книга розповідає про те, як вона зазвичай використовується. Як тільки люди говорять про "сторінки", вони говорять про конкретну реалізацію віртуальної пам'яті.
Тоні Лі

2
Ваша текстова книга просто невірна. Є багато машин з віртуальною пам'яттю і взагалі без вторинного зберігання. Так само колись було багато машин, які могли використовувати вторинний накопичувач як частину основної пам'яті, але не підтримували віртуальну пам'ять. "Віртуальна пам'ять" - це щось, що не є пам'яттю, але доступ до нього, як пам'ять. У вашому підручнику визначено заміну чи підкачку.
Девід Шварц

1
Підручник визначає це зовсім неправильно, вторинне зберігання не є частиною визначення. І навіть твердження Вікіпедії про "більше дискового простору" вводить в оману, оскільки воно може взагалі не залучати диск - це твердження звучить як "розширення пам'яті на диск" плюс щось інше.
Кельвін

Відповіді:


41
Note that "virtual memory" is more than just "using disk space to extend physical memory size"

Віртуальна пам'ять - шар абстракції, що надається кожному процесу. Комп'ютер має, скажімо, 2 Гб фізичної оперативної пам’яті, адресованої від 0 до 2G. Процес може бачити адресний простір об'ємом 4 Гб, який він повністю має для себе. Відображення від віртуальних адрес до фізичних адрес здійснює блок управління пам'яттю, яким керує операційна система. Зазвичай це робиться на "сторінках" 4 Кб.

Це дає декілька особливостей:

  1. Процес не може бачити пам'ять в інших процесах (якщо ОС не хоче!)
  2. Пам'ять за заданою віртуальною адресою може не розташовуватися за однією фізичною адресою
  3. Пам'ять за віртуальною адресою може бути "пришвидшена" на диск, а потім "підключена" під час повторного доступу до неї.

Ваш підручник визначає віртуальну пам'ять (неправильно) як лише №3.

Навіть без будь-якого обміну, вам особливо потрібно знати про віртуальну пам'ять, якщо ви пишете драйвер пристрою для пристрою, який робить DMA (прямий доступ до пам'яті). Ваш код драйвера працює на процесорі, що означає, що його доступ до пам'яті здійснюється через MMU (віртуальний). Пристрій, ймовірно, не проходить через MMU, тому він бачить необроблені фізичні адреси. Тож як автор драйвера вам потрібно забезпечити:

  1. Будь-які необроблені адреси пам'яті, які ви передаєте на апаратне забезпечення, є фізичними, а не віртуальними.
  2. Будь-які великі (багатосторінкові) блоки пам'яті, які ви надсилаєте, фізично суміжні. Масив 8K може бути практично суміжним (через MMU), але дві фізично окремі сторінки. Якщо ви скажете пристрою записати 8K даних на фізичну адресу, що відповідає початку цього масиву, він запише перший 4K там, де ви очікуєте, але другий 4K десь пошкодить деяку пам'ять. :-(

4

Я спробую почати повільно, а потім складу все це для вас. Це так:

Віртуальна пам'ять, як зазвичай використовується, відноситься до "підкачки". Як випливає з назви, пейджінг - це як людський блокнот.

Коли ви відпрацьовуєте прості суми або вивчаєте просту інформацію, ви все це робите в голові: ви просто завантажуєте всю інформацію, обробляєте її та отримуєте відповідь. Це як комп'ютер, що завантажує файли з жорсткого диска - він завантажує програми чи зображення, або іншу інформацію, необхідну для роботи у своїй «реальній пам’яті» (або «фізичній пам’яті»), і працює над ними зі своїм «мозком» ( його процесор).

Однак, коли ви вивчаєте складну інформацію або працюєте зі складними сумами, ви, можливо, не зможете одразу помістити все це в голові. Ви плутаєтеся, починаєте гальмувати, не вдається тримати все це відразу, і вам доведеться щось забути, щоб запам'ятати щось інше.

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

Так що насправді, пейджингова стрічка дуже проста. Усі сторінки інформації не вміщуються в пам’яті, тому деякі сторінки ставлять на диск і завантажуються знову пізніше.

Тепер, де це ускладнюється, це те, що в сучасних системах є відображення пам'яті та захист пам’яті, якими зазвичай керує одна і та ж апаратна система в комп'ютері: блок управління пам’яттю або MMU.

У (сучасному) багатозадачному комп’ютері, який може запускати багато програм одночасно і має захист пам’яті, кожна програма зазвичай відокремлена від інших програм, що працюють в тій же системі. Таким чином, одна програма не може змінити іншу програму просто шляхом доступу до її пам’яті - MMU фізично відокремлює адресний простір однієї програми від іншого. Іншими словами, програми користувача не бачать програм інших користувачів або навіть інших програм. Вони не бачать "реальної пам'яті" - вони бачать власну "віртуальну пам'ять".

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

Отже, коли програма запитує пам'ять на певну "адресу пам'яті", що насправді відбувається, це те, що сторінки пам'яті для цієї програми та їх відповідні адреси ("адресний простір" програми) переглядаються вгору та сторінка, яка відповідає що блок пам'яті знайдений. Ця сторінка може бути завантажена десь у реальну пам'ять, і в такому випадку програмі надається доступ, або вона може бути передана на сторінку на диск. Якщо вона випущена на екран, вона викликає "помилку сторінки" - диск доступний, і сторінка завантажується в пам'ять. Таким чином, програма працює навіть тоді, коли не вистачає пам'яті, але вона працює НЕБЕЗПЕЧНО, якщо їй доводиться використовувати диск для того, що зазвичай буде дуже швидким доступом до пам'яті.

Тепер, якщо не вистачає місця для завантаження цієї сторінки в пам'ять, у вас виникає проблема. У такому випадку якусь ІНШУ сторінку, яка вже є в пам’яті, потрібно «поміняти» на диск, щоб можна було завантажити сторінку першої програми. Або вони однаково можуть бути сторінками однієї програми. Це ви бачите іноді в графічних програмах, наприклад, на сильно завантажених системах, коли частина зображення завантажується повільно і швидко малюється, тоді наступна частина завантажується однаково повільно і швидко малюється, і коли ви повертаєтесь до роботи з першою частина, це повільно ПРОТИ. Це тому, що вони завантажуються, щоб працювати над ними, потім знову помінятися, щоб щось над цим можна було працювати. Очевидно, що це дуже повільний спосіб роботи, і те, що вам справді потрібно, - це більш РЕАЛЬНА пам'ять.


Я на 100% не згоден з цією відповіддю. Якщо "віртуальна пам'ять" посилалася на пейджингові повідомлення, то система, яка не робить сторінку (скажімо, та, яка не має файлів підкачки чи файлів сторінок), не могла підтримувати віртуальну пам'ять. Але це очевидно божевільно.
Девід Шварц

@DavidSchwartz - Спочатку у мене була реакція, подібна до вашої, але читаючи відповідь детальніше, я не думаю, що це так погано. Розглянемо Вікіпедію / віртуальну пам’ять / Paged сказано: «Майже всі реалізації віртуальної пам’яті ділять віртуальний адресний простір на сторінки, блоки суміжних адрес віртуальної пам’яті». Тобто "пейджінг" у широкому сенсі не вимагає файлу сторінки , а посилається на відображення віртуальних адрес у фізичні адреси.
ToolmakerSteve

1
Хм, з іншого боку, Лі каже: "Усі сторінки інформації не вміщуються в пам'яті, тому деякі сторінки ставлять на диск і знову завантажуються пізніше." пейджинг - це не лише підказка на диск . З іншого боку, Лі продовжує згадувати інші переваги віртуальної пам'яті (ізоляція пам'яті). Якби ця відповідь була перетворена на те, щоб не переплутати "відображення сторінок віртуальної пам'яті" з "підказками на диск", було б корисніше.
ToolmakerSteve

@ToolmakerSteve Проблема полягає в тому, що це дуже поширене неправильне уявлення і все, що посилює це неправильне уявлення, IMO - погана річ. Тут особливо погано, коли ця відповідь намагається пояснити самі основні поняття в дуже простій справі - там найважливіше не закладати основу, що базується на загальній помилці!
Девід Шварц

@DavidSchwartz - я згоден. Ви маєте рацію, він не визначає "віртуальну пам'ять", він визначає "як працює файл сторінки". Спочатку я думав, що проблема полягає лише в тому, що Лі не в змозі розрізнити "пейджинг = відображення сторінок пам'яті від віртуальної до фізичної" проти "файлу сторінки = відображення сторінок на диск", але після перечитування він насправді говорив лише про відображення на диску. (Як ми бачимо, з цитати підручника, з усіх інших відповідей, окрім капітана, та з пошуку Google, ця змішаність цих двох понять дуже поширена. Я впевнений, що я винен у цьому.)
ToolmakerSteve

0

Я знаю, що вже пізно .... але все-таки подумав, що це корисно.

  • Всі вони правильні на основі різних точок зору.
  • Віртуальна пам'ять - це техніка управління пам’яттю, тоді як обмін пам’яттю був областю на диску. Обмін пам’яттю, як правило, називається простором підкачки. Простір обміну означає частину віртуальної пам'яті, яка зарезервована як місце тимчасового зберігання. Простір обміну використовується, коли доступна оперативна пам'ять не в змозі задовольнити вимоги пам'яті системи
  • Ви можете ознайомитись із посиланням нижче для отримання більш детальної інформації

-2

Добре, якщо ми розуміємо слово віртуальне, я думаю, ми можемо зрозуміти, як воно стосується пам’яті.

"Віртуальний", як визначено на Dictionary.com: "тимчасово моделюється або розширюється комп'ютерним програмним забезпеченням: віртуальний диск в оперативній пам'яті; віртуальна пам'ять на жорсткому диску."

У випадку віртуальної пам’яті система моделює системну пам’ять, використовуючи повільніші ресурси пам’яті (тобто жорсткий диск, палець тощо). Коли потрібна додаткова пам’ять, система замінить дані в системну пам’ять, яка не потрібна жорсткому диску накопичувач або ресурс у вас є. Це звільняє системну пам'ять, щоб ваша програма могла продовжувати завдання, яке вона робила.

Переміщення - це процес безперервного дії, і, отже, якщо ви оновите свою пам'ять, ви повинні побачити підвищення продуктивності, оскільки система не повинна вимагати заміни на повільну пам’ять як відсторонену.


-2

Віртуальна пам'ять - це особливість операційної системи (ОС), яка дозволяє комп’ютеру компенсувати дефіцит фізичної пам'яті, тимчасово переносячи сторінки даних із пам'яті з випадковим доступом (ОЗУ) на дисковий накопичувач.

Це означає, як дзеркало або зразок пам'яті, який використовується у віртуальній машині або віртуальній коробці для того, щоб спробувати Операційні системи без форматування комп'ютера.


Ні, це підкачка.
Девід Шварц

-4

Віртуальна пам'ять - це блок вашого жорсткого диска, який система використовує як файл підкачки, крім фізичної ОЗУ.

Це стає складним, а іноді й повільним, оскільки Windows НЕ дефрагментує цю частину вашого жорсткого диска.

Кращі 2 поради, які я можу запропонувати: 1) Virt Mem має бути встановлено як мінімум, так і максимум, приблизно в 1,5X вашої фізичної пам'яті. колишній 2 Гб оперативної пам’яті = 3070 Мб Вірд. 2) Під час дефрагментації вимкніть файл підкачки. Розморожуйте 2x та поверніть до початкового номера. Це дає чистий фрагмент накопичувача та збільшить швидкість файлу підкачки.


1
Це не зовсім вірно - сучасні менеджери пам'яті віртуалізують ВСІ системну пам'ять. Саме це дозволяє розділити процес - кожен процес може торкнутися лише власної пам’яті. Менеджер пам’яті відповідає за відображення цих віртуальних сторінок у реальну пам’ять та, можливо, на фіксований диск.
Ентоні Джорджіо

1
"Windows НЕ дефрагментує цю частину вашого жорсткого диска." просто nuke pagefile.sys, перезавантажте, дефрагментуйте диск і повторно увімкніть підкачку, voilá, свіжий і суцільний файл сторінки! однак, PageDefrag Sysinternals виконує кращу роботу, оскільки він також розмістить файл сторінки на початку диска / розділу для кращої роботи.

1
Якщо ця відповідь була правильною, то система Windows без налаштованих файлів сторінок не могла б забезпечити підтримку віртуальної пам'яті. Але це, очевидно, неправильно. Така система все ще може, наприклад, перенести файли в адресний простір процесу, що перевищує фізичну оперативну пам'ять, що є прикладом віртуальної пам'яті.
Девід Шварц
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.