Чи може хто-небудь пояснити мені, в чому різниця між віртуальною пам’яттю та обміном місця ?
І чому ми говоримо, що для 32-розрядної машини максимально доступна віртуальна пам’ять становить лише 4 Гб?
Чи може хто-небудь пояснити мені, в чому різниця між віртуальною пам’яттю та обміном місця ?
І чому ми говоримо, що для 32-розрядної машини максимально доступна віртуальна пам’ять становить лише 4 Гб?
Відповіді:
На суперкористувачі є чудове пояснення віртуальної пам’яті .
Простіше кажучи, віртуальна пам’ять - це поєднання оперативної пам’яті та дискового простору, яке можуть використовувати запущені процеси.
Обмін місцями - це частина віртуальної пам’яті, що знаходиться на жорсткому диску, що використовується, коли пам’ять заповнена.
А чому 32 - бітний процесор обмежений 4 Гб віртуальної пам'яті, це ім'я добре тут :
За визначенням, 32-розрядний процесор використовує 32 біти для позначення місця кожного байта пам'яті. 2 ^ 32 = 4,2 мільярда, що означає, що адреса пам'яті довжиною 32 біти може стосуватися лише 4,2 мільярда унікальних місць (тобто 4 ГБ).
Щодо терміна віртуальна пам’ять існує певна плутанина, і насправді він стосується наступних двох дуже різних понять
Місце обміну, OTOH, - це назва частини диска, яка використовується для зберігання додаткових сторінок оперативної пам'яті, коли вона не використовується.
Важливим усвідомленням є те, що перше є прозоро можливим завдяки апаратному забезпеченню та підтримці ОС останнього.
Для того, щоб краще зрозуміти все це, вам слід розглянути, як "Віртуальна пам'ять" (як у визначенні 2) підтримується процесором та ОС.
Припустимо, у вас є 32-бітний покажчик (64-бітні точки подібні, але використовуються дещо інші механізми). Після активації "Віртуальної пам'яті" процесор розглядає цей вказівник як три частини.
Тепер, коли центральний процесор намагається отримати доступ до вмісту вказівника, він спочатку звертається до таблиці Каталог сторінок - таблиці, що складається з 1024 записів (в архітектурі X86, на розташування яких вказує регістр CR3). 10-бітний запис каталогу сторінки - це індекс у цій таблиці, який вказує на фізичне розташування таблиці сторінок . Це, в свою чергу, ще одна таблиця з 1024 записів, кожна з яких є покажчиком у фізичній пам’яті та декількома важливими бітами управління. (До них ми повернемось пізніше). Як тільки сторінку знайдено, останні 12 бітів використовуються для пошуку адреси на цій сторінці.
Існує набагато більше деталей (TLB, великі сторінки, PAE, селектори, захист сторінок), але коротке пояснення вище описує суть речей.
Використовуючи цей механізм перекладу, ОС може використовувати різний набір фізичних сторінок для кожного процесу, що створює у кожного процесу ілюзію наявності всієї пам'яті для себе (оскільки кожен процес отримує свій власний каталог сторінок)
Поверх цієї віртуальної пам'яті ОС може також додати концепцію підкачки . Один із розглянутих раніше бітів управління дозволяє вказати, чи є запис "Присутнім". Якщо його немає, спроба отримати доступ до цього запису призведе до виключення Page Fault . ОС може захопити цей виняток і діяти відповідно. Таким чином, ОС, що підтримує обмін / підкачування, може вирішити завантажити сторінку з простору обміну , виправити таблиці перекладів, а потім знову надати доступ до пам'яті.
Тут поєднуються два терміни, ОС, що підтримує віртуальну пам’ять і підкачку, може дати процесам ілюзію наявності більшої пам’яті, ніж насправді, шляхом підкачки (обміну) сторінок в області обміну та поза нею.
Щодо вашого останнього запитання (чому, за його словами, 32-розрядний процесор обмежений 4 ГБ віртуальної пам'яті). Це стосується "віртуальної пам'яті" визначення 2 і є безпосереднім результатом розміру вказівника. Якщо центральний процесор може використовувати лише 32-бітові вказівники, у вас є лише 32-бітні для вираження різних адрес, це дає вам 2 ^ 32 = 4 Гб адресної пам'яті.
Сподіваюся, це робить речі дещо зрозумілішими.
IMHO страшенно вводить в оману використовувати концепцію місця обміну як еквівалент віртуальної пам'яті. VM - концепція набагато більш загальна, ніж простір свопів. Крім усього іншого, VM дозволяє процесам посилатися на віртуальні адреси під час виконання, які перетворюються у фізичні адреси за допомогою апаратного забезпечення та таблиць сторінок. Таким чином, процеси не стосуються того, скільки фізичної пам'яті має система, або де інструкція чи дані насправді перебувають в ієрархії фізичної пам'яті. VM дозволяє це відображення. Елемент, на який посилається (інструкція чи дані), може знаходитись у L1, або L2, або в ОЗП, або, нарешті, на диску, і в цьому випадку він завантажується в основну пам’ять.
Поміняти місцями - це просто місце у вторинній пам’яті, де сторінки зберігаються, коли вони неактивні. Якщо оперативної пам'яті недостатньо, ОС може прийняти рішення про заміну сторінок процесу, щоб звільнити місце для інших сторінок процесу. Процесор ніколи не виконує інструкції чи читає / пише дані безпосередньо з місця обміну.
Зверніть увагу, що можна було б мати обмінний простір в системі без ВМ. Тобто процеси, які безпосередньо отримують доступ до фізичних адрес, все одно можуть мати їх частину на диску.
Хоча нитка досить стара і на неї вже відповіли. Все ж хотів би поділитися цим посиланням, оскільки це найпростіше пояснення, яке я знайшов на даний момент. Нижче посилання містить схеми для кращої візуалізації.
Основна різниця: Віртуальна пам’ять - це абстракція основної пам’яті. Він розширює доступну пам'ять комп'ютера, зберігаючи неактивні частини вмісту оперативної пам'яті на диску. Щоразу, коли потрібен вміст, він повертає його в оперативну пам’ять. Обмін пам’яттю або обмін місцями - це частина жорсткого диска, яка використовується для віртуальної пам’яті. Таким чином, обидва також використовуються як взаємозамінні.
Віртуальна пам'ять відрізняється тихою від фізичної пам'яті. Програмісти отримують прямий доступ до віртуальної пам'яті, а не до фізичної пам'яті. Віртуальна пам’ять - це абстракція основної пам’яті. Він використовується для приховування інформації про реальну фізичну пам’ять системи. Він розширює доступну пам'ять комп'ютера, зберігаючи неактивні частини вмісту оперативної пам'яті на диску. Коли потрібен вміст, він повертає його назад до оперативної пам'яті. Віртуальна пам’ять створює ілюзію цілого адресного простору з адресами, що починаються з нуля. Це переважно переважно завдяки своїй функції оптимізації, завдяки якій він зменшує вимоги до простору. Він складається з доступної оперативної пам'яті та дискового простору.
Обмін пам’яттю зазвичай називають простором обміну. Обмін місцем стосується тієї частини віртуальної пам'яті, яка зарезервована як місце тимчасового зберігання. Місце для обміну використовується, коли доступна оперативна пам'ять не здатна задовольнити вимоги до пам'яті системи. Наприклад, в системі пам'яті Linux ядро розміщує кожну сторінку у фізичній пам'яті або в просторі обміну. Ядро також підтримує таблицю, в якій зберігається інформація про замінені сторінки та сторінки у фізичній пам'яті. Сторінки, доступ до яких тривалий час не надходили, надсилаються в область простору обміну. Процес називається заміною. Якщо потрібна одна і та ж сторінка, вона міняється місцями у фізичній пам'яті, замінюючи іншу сторінку. Таким чином,
«Віртуальна пам’ять» - загальний термін. У Windows це називається пейджингом або пагінацією. У Linux це називається Swap.