"модель памяти" является как низкоуровневой, так и (относительно) высокоуровневой концепцией.
В былые времена между процессорами с сегментированной моделью памяти и процессорами с "выгружаемой" или "отображаемой" моделью памяти бушевала "война". Машины серии Burroughs B5000 и Plessey 250 использовали поделенную на сегменты модель памяти с" возможностями "(или"дескрипторами"). То есть физическое хранилище управлялось не как концептуальные страницы фиксированного размера, а как сегменты переменной длины, при этом каждому сегменту соответствует некая логическая сущность (например, процедура или объект). Для адресации между сегментами использовались "регистры возможностей", которые можно было загружать только защищенным способом и которые содержали физический адрес сегмента, длину сегмента и разрешения (например, чтение/запись/выполнение), которые исполняющая программа давала для ссылки на сегмент.
эти системы были счастливы работать, когда "пейджинговые" системы все еще пытались выйти земля.
первоначальный ПК был основан на процессоре 8086 который был конструирован для того чтобы поддержать архитектуру бедного человека поделенную на сегменты. В МСИО имелось четыре сегментных регистра, которые можно было бы выбрать для добавления к 16-разрядному общему регистру для получения 20-разрядного адреса. Теория заключалась в том, что эти регистры будут управляться в программном обеспечении, несколько похожем на то, как системы Берроуза и Плесси управляют ими с немного большей аппаратной поддержкой. Но прежде чем хорошее програмное обеспечение смогло быть произведенный, чтобы использовать эту функцию DOS был kludged на 8086, и поэтому функция никогда не использовалась эффективно.
Что касается того, что лучше, ну, это уже не имеет значения, так как сегментированная модель не существует ни в какой" реальной " (не экспериментальной) среде. Но еще в тот день сегментированная модель в целом работала лучше и позволяла ОС быть более надежной. Основным негативным фактором было то, что он накладывал ограничения на компиляторы и, в определенной степени, на программистов, которые не соответствовали настроениям" Дикого Запада " многих программистов тогда и сейчас.
модель "paged"
"выгружаемая" модель предполагает, что адресное пространство разделено на" страницы " определенного размера (хотя в некоторых случаях поддерживаются несколько разных размеров страниц). Обычно размер страницы составляет от 256 до 64 КБ (всегда степень 2). Также предполагается, что оборудование содержит некоторую поддержку преобразования адресов, так что "логические" адреса (адреса в "адресном пространстве" программы) могут быть сопоставлены с "физическими" адресами (адресами в ОЗУ).
постраничный модель может быть реализована по двум основным причинам:
- чтобы разрешить нескольким различным потокам / процессам иметь отдельные адресные пространства, каждый из которых начинается с "нуля" (или другого стандартного адреса), и не требуя от ОС предварительного выделения всего возможного адресного пространства для потока/процесса как одного смежного блока.
- включить "виртуальная память", позволяя отдельным страницам в логическом адресном пространстве" выгружаться " на диск для последующей перезагрузки, если/когда программа попытается ссылаться на них.
есть и небольшие особенности аппаратной перевод страницы, которые могут быть использованы, например, параметр чтение/запись/выполнение, что позволяет несколько страниц, чтобы быть "общим" между процессами/потоками и т. д.
"плоская" модель
игнорируя Гарвардскую модель, которая, возможно, очень первая модель памяти компьютера, плоская модель хранения фон Неймана была первой моделью для достижения общего использования. Это в основном то, что - "плоское" адресное пространство неразличимых слов (не байтов до самого конца игры), которое началось с нулевого адреса и продолжалось вверх до "вершины" доступной памяти. Некоторая часть памяти в "нижней" или "верхней" части памяти будет зарезервирована для какого-то "загрузчика", а остальная часть будет доступна для одной выполняемой программы. По одной программе за раз, с программа способна использовать все, кроме этой небольшой зарезервированной области ОЗУ.
потихоньку все менялось, туда, где маленькая заповедная зона становилась больше и занимала какую-то операционную систему, но все равно только одну программу за раз. С течением времени все больше и больше, различные трюки были изобретены, чтобы позволить, например, некоторые специализированные программы для запуска в "углу" памяти, что позволяет буферизации программ и т.д., сосуществовать с программами пользователя.
но толчок для "мультипрограммирования" был оказывать давление. Некоторые системы добавили аппаратное обеспечение для сопоставления адресов, чтобы несколько программ имели собственное адресное пространство. Другие системы требовали, чтобы программы "самостоятельно перемещались", чтобы они могли работать в любом месте памяти и" связывались " с конкретным адресом.
ранний Unix (среди прочих) обрабатывал задание мультипрограммирования, "меняя местами" программы: программа (загруженная по нулевому адресу) запускалась до тех пор, пока она не "блокировала" ввод-вывод, а затем" менялась " (в полностью, включая весь код и данные) на диск и в другую программу "поменялись местами".
но по большей части эти методы медленно эволюционировали (или, возможно, перешли) к различным формам моделей хранения сопоставления страниц.