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