Чи необхідний мікросхема MMU (блок управління пам’яттю), щоб процесор мав підтримку віртуальної пам'яті?


14

Чи необхідний мікросхема MMU (блок управління пам’яттю), щоб процесор мав підтримку віртуальної пам'яті?

Чи можна імітувати функціональність MMU в програмному забезпеченні? (Я знаю, що це, мабуть, матиме великий вплив на продуктивність).


Будь-який повністю спроможний комп'ютер може емулювати будь-який інший комп'ютер із достатньою ефективністю. Або емулюйте будь-яке обладнання. Питання лише в масштабі хіта на продуктивність.
Vality

кожен процесор сьогодні потребує TLB, тому він має вбудований MM-блок.
rastafile

Відповіді:


22

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

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

Одним реальним, старим прикладом емуляції без MMU, що використовується для забезпечення віртуальної пам'яті, є Z-машина , яка в кінці сімдесятих та на початку вісімдесятих років була здатна здійснювати пейджинг та обмінюватися кодом та даними на 8-бітних системах . Це працювало шляхом емуляції віртуального процесора на базовому реальному процесорі; таким чином, перекладач зберігає повний контроль над компонуванням пам'яті, яку "бачить" запущена програма.

На практиці прийнято вважати, що MMU необхідний для підтримки віртуальної пам'яті, принаймні на рівні операційної системи. Як вказано ядро без MMU? , ядро ​​Linux можна побудувати так, щоб воно могло працювати в системах без MMU, але отримана конфігурація дуже незвична і підходить лише для дуже конкретних випадків використання (зокрема, не вражаючим програмним забезпеченням). Він може не підтримувати багато сценаріїв, які потребують віртуальної пам'яті (заміна, mmap...).


тож додатки віртуальної машини також мають компонент емулятора MMU?
yoyo_fun

Так - не обов'язково як окремий компонент, але вони мають необхідну підтримку в емуляції.
Стівен Кітт

7
@JenniferAnderson: Деякі сучасні процесори мають функції, які дозволяють емулятору (частково) завантажувати емуляцію MMU до самого MMU. Наприклад, програма, що працює в емуляторі, сама буде використовувати кілька емільованих сторінок пам'яті; ці сторінки пам'яті, звичайно, "вкладені" на сторінки пам'яті, використовувані емулятором. Обидва нові процесори високого класу Intel та AMD мають підтримку вкладених таблиць сторінок, що дозволяє емулятору виражати це вкладене в MMU, замість того, щоб (дорого) емулювати його.
Йорг W Міттаг

@ Jörg дійсно, дякую за роз’яснення. Більшість гіпервізорів все ще включають певний рівень емуляції програмного забезпечення, хоча вони працюватимуть без додаткової апаратної підтримки. Мене замигнув аспект питання "Чи можливо" ;-).
Стівен Кітт

3
@JenniferAnderson: Так, ця функціональність була спеціально запроваджена для пара-віртуалізації. (Зауважте, що нічого нового, паравіртуалізація за допомогою апаратних засобів існує в світі мейнфреймів з початку 1960-х років.) Однак виявляється, що її можна використовувати і для інших цікавих додатків, таких як пришвидшення збору сміття (див. приклад колектора C4 в JVM Azul в приміщенні Zul). Однак зауважте, що все це працює в обох напрямках: так само, як розширення MMU з підтримкою віртуалізації - це не що інше, як оптимізація продуктивності та віртуалізація ...
Jörg W Mittag,

7

Це залежить від того, що саме ви називаєте віртуальною пам'яттю. Цікава модель - стара модель Win16 (найвідоміша зі старої Windows 3.x, а не Windows NT). У цій моделі, ви мали GlobalLockі GlobalUnlock, LocalLockі LocalUnlockфункцію. Це були форми співпраці, ручного управління віртуальною пам'яттю. Оскільки це робилося в (додатковому) програмному забезпеченні, для нього не потрібен MMU. І пам'ять була віртуальною в тому сенсі, що розблоковану пам'ять можна було замінити на диск.

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


7

Не обов’язково мати апаратний MMU, якщо у вас є програмне забезпечення, яке може обмінятися процесами на фізичну пам'ять і з неї.

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

Корисна деяка апаратна підтримка - поняття "захищеної" області пам'яті для власного використання ОС (наприклад, всі адреси з набором MSB доступні лише в режимі супервізора) та значення "перерва", що вказує найвищу адресу, що використовується, але управління пам'яттю апаратне забезпечення не є абсолютною вимогою до віртуальної пам'яті; це просто особливо ефективний спосіб досягти цього.


2
Це насправді не віртуальна пам'ять, це просто обмін процесом ... (Нам справді потрібно було б визначити "віртуальну пам'ять" для правильної відповіді на це питання!)
Стівен Кітт

Кожен процес має власне уявлення про адресний простір - я редагую, щоб уточнити визначення, яке я використовую.
Toby Speight

Правильно, але це однакове відображення один на один для всіх процесів. (З точки зору процесів немає великої різниці, тому реального аргументу там немає ...)
Стівен Кітт

0

Оригінальні комерційні машини для роботи з VM не мали MMU - у них був вбудований VM процесор. Моє сьогоднішнє мислення полягає в тому, що MMU - це лише думка поставити VM на поверх не-VM-процесорів. VM був розроблений в Манчестерському університеті, і дизайнери Берроуза були переконані, що вони повинні включати його, хоча на той час дуже інноваційні.

Burroughs B5000 (нині машини Unisys MCP) використовували дескриптори пам’яті, які застосовують межі пам’яті - виходять за межі, і ваша програма потрапляє на сміття (дотримання меж є основою приємного суспільства, але деякі зловживають привілеєм, тому кордони потрібно виконувати).

Дескриптори містять адресу пам'яті, довжину блоку та тип даних, а також важливий P-біт або біт присутності. P-біт означає, що блок знаходиться в пам'яті. P-біт нуля означає, що блок знаходиться на масовому сховищі, а адреса - це адреса зберігання або в оригінальній програмі (код або дані), або в VM (розгорнуті дані).

Ці машини реалізували ієрархічну модель пам'яті. ММУ, здається, компенсують недоліки плоскої пам'яті, потребуючи відображення об'єктів користувача у плоску пам'ять. JK Iliffe також розробив машини ICL з цією моделлю:

http://www.computerconservationsociety.org/resurrection/res74.htm#f

https://en.wikipedia.org/wiki/Burroughs_large_systems

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

Тож здається, що не тільки ММУ не потрібні, але й системи краще без них.


-1

Більшість процесорів настільних, ноутбуків та серверів включають один або кілька TLB в апаратному забезпеченні управління пам’яттю, і він майже завжди присутній у будь-якому процесорі, який використовує віртуальну пам’ять, що працює на сегменті .

Translation_lookaside_buffer

А потім читайте про Віртуальну пам’ять і про те, що вона насправді призначена. Величезний віртуальний адресний простір - не головна ідея. Основна ідея - кешування / буферизація на багатьох рівнях.

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


VM =

віртуальна пам'ять АБО віртуальна машина. Дуже різні, дуже пов’язані.


Тому відповідь ні, мікросхему MMU (окремий блок поза процесором, на материнській платі) не потрібно.

Так, деякому апаратному MMU (в процесорі) взагалі потрібно думати про корисний VM. (Почалося з цієї сегментації 8086 для платформи x86)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.