Чи необхідний мікросхема MMU (блок управління пам’яттю), щоб процесор мав підтримку віртуальної пам'яті?
Чи можна імітувати функціональність MMU в програмному забезпеченні? (Я знаю, що це, мабуть, матиме великий вплив на продуктивність).
Чи необхідний мікросхема MMU (блок управління пам’яттю), щоб процесор мав підтримку віртуальної пам'яті?
Чи можна імітувати функціональність MMU в програмному забезпеченні? (Я знаю, що це, мабуть, матиме великий вплив на продуктивність).
Відповіді:
Будь-який системний емулятор, який імітує систему, що містить MMU, ефективно імітує MMU в програмному забезпеченні, тому відповідь на ваше запитання, як зазначено, - «так». Однак віртуальна пам'ять вимагає певного способу управління доступом до пам'яті або, принаймні, перекладом адрес, тому вона потребує або повної емуляції програмного забезпечення центрального процесора, на якому працює програмне забезпечення, яке контролюється, або потрібна апаратна допомога.
Таким чином, ви могли б створити систему, в якій немає MMU, портуйте QEMU до неї, додайте відсутні частини, щоб зробити віртуальну пам'ять справді корисною ( наприклад , додати підтримку для заміни на хост-системі) та запустити операційну систему, що вимагає MMU в QEMU, з усім захистом, який ви очікуєте в гостьовій операційній системі (заборона помилок QEMU).
Одним реальним, старим прикладом емуляції без MMU, що використовується для забезпечення віртуальної пам'яті, є Z-машина , яка в кінці сімдесятих та на початку вісімдесятих років була здатна здійснювати пейджинг та обмінюватися кодом та даними на 8-бітних системах . Це працювало шляхом емуляції віртуального процесора на базовому реальному процесорі; таким чином, перекладач зберігає повний контроль над компонуванням пам'яті, яку "бачить" запущена програма.
На практиці прийнято вважати, що MMU необхідний для підтримки віртуальної пам'яті, принаймні на рівні операційної системи. Як вказано ядро без MMU? , ядро Linux можна побудувати так, щоб воно могло працювати в системах без MMU, але отримана конфігурація дуже незвична і підходить лише для дуже конкретних випадків використання (зокрема, не вражаючим програмним забезпеченням). Він може не підтримувати багато сценаріїв, які потребують віртуальної пам'яті (заміна, mmap
...).
Це залежить від того, що саме ви називаєте віртуальною пам'яттю. Цікава модель - стара модель Win16 (найвідоміша зі старої Windows 3.x, а не Windows NT). У цій моделі, ви мали GlobalLock
і GlobalUnlock
, LocalLock
і LocalUnlock
функцію. Це були форми співпраці, ручного управління віртуальною пам'яттю. Оскільки це робилося в (додатковому) програмному забезпеченні, для нього не потрібен MMU. І пам'ять була віртуальною в тому сенсі, що розблоковану пам'ять можна було замінити на диск.
Однак у моделі Win16 немає захисту між різними процесами. Якщо інший процес залишив дані в пам'яті, ви можете їх перезаписати. Це не є принциповим обмеженням. Завдяки швидким SSD на сьогоднішній день ви можете повністю видалити не запущений процес із пам'яті, і зробити це в розумний час.
Не обов’язково мати апаратний MMU, якщо у вас є програмне забезпечення, яке може обмінятися процесами на фізичну пам'ять і з неї.
Це був режим роботи ранніх багатозадачних операційних систем. Лише один процес залишається в пам'яті в будь-який момент часу, він витісняється повністю, коли закінчується його часовий відрізок (ви можете бачити, що це стає проблематичним для великих процесів). Вміст пам'яті, що бачиться під час запущеного процесу, не є таким, як у будь-якого іншого процесу, і кожен має власний вигляд адресного простору.
Корисна деяка апаратна підтримка - поняття "захищеної" області пам'яті для власного використання ОС (наприклад, всі адреси з набором MSB доступні лише в режимі супервізора) та значення "перерва", що вказує найвищу адресу, що використовується, але управління пам'яттю апаратне забезпечення не є абсолютною вимогою до віртуальної пам'яті; це просто особливо ефективний спосіб досягти цього.
Оригінальні комерційні машини для роботи з 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
Різниця між цими машинами та більшістю сучасних сьогодні полягає в тому, що вони стосуються повної архітектури системи, а не лише архітектури процесора.
Тож здається, що не тільки ММУ не потрібні, але й системи краще без них.
Більшість процесорів настільних, ноутбуків та серверів включають один або кілька TLB в апаратному забезпеченні управління пам’яттю, і він майже завжди присутній у будь-якому процесорі, який використовує віртуальну пам’ять, що працює на сегменті .
А потім читайте про Віртуальну пам’ять і про те, що вона насправді призначена. Величезний віртуальний адресний простір - не головна ідея. Основна ідея - кешування / буферизація на багатьох рівнях.
Це далеко не просто, але цей кеш пам'яті TLB є важливим обладнанням, на якому будується підсистема мм ядра (інакше VM буде значною мірою накладні).
VM =
віртуальна пам'ять АБО віртуальна машина. Дуже різні, дуже пов’язані.
Тому відповідь ні, мікросхему MMU (окремий блок поза процесором, на материнській платі) не потрібно.
Так, деякому апаратному MMU (в процесорі) взагалі потрібно думати про корисний VM. (Почалося з цієї сегментації 8086 для платформи x86)