Понимание "плоской модели памяти" и " сегментированной модели памяти"

Я пытаюсь понять модель плоской памяти и сегментированную модель памяти.

модель плоской памяти и сегментированная модель памяти определяются архитектурой процессора или ОС или обоими?

или они не определяются ни архитектурой процессора, ни ОС, но вместо этого они доступны для программистов на любом компьютере с любой архитектурой процессора и установленной ОС?

Если последнее, то какие виды программируя потребности рассматривать плоскую модель памяти и Сегментированная модель памяти? Ассемблер, C и / или другие языки программирования высокого уровня?

вот некоторые цитаты из Википедии, которые меня смущают.

с http://en.wikipedia.org/wiki/Address_space#Memory_models:

ранние x86 компьютеры использовали сегментированные адреса моделей памяти, основанные на
комбинация двух чисел: сегмент памяти и смещение внутри
этот сегмент. Некоторые сегменты неявно обрабатывались как сегменты кода,
предназначено для инструкций, этапов стога, или нормальных этапов данных.
Хотя использования были друг, этапы не имели
различные защиты памяти, отражающие это.

сейчас многие программисты предпочитают использовать плоскую модель памяти, в которой все
сегменты (регистры сегментов) обычно устанавливаются в ноль и только
смещения являются переменными.

с http://en.wikipedia.org/wiki/Flat_memory_model#Comparison:

плоская модель памяти

  • не подходит для общих вычислений или многозадачных операционных
    системы, если не улучшено с дополнительным управлением памятью
    аппаратное / программное обеспечение; но это почти всегда имеет место в современной CISC
    процессоры, которые снабжают предварительные управление и защиту памяти
    технология над плоской моделью памяти. Например, Linux использует плоскую память
    модель сравнить X86_memory_segmentation # практики.

сегментированной памяти модель

  • реализована в первоначально Intel 8086, 8088, 80186, 80286 и
    поддерживается 80386 и всеми последующими x86 машинами до настоящего времени
    день процессоры Pentium и Core 2. Эта модель памяти осталась
    так как в x86 машинах, которые сейчас обеспечивают
    в любом случае, редко работают в совместимом сегментированном режиме.
11
задан MoonSire
17.11.2022 19:40 Количество просмотров материала 2849
Распечатать страницу

4 ответа

модель памяти определяется двумя вещами:

  1. процессор в использовании, и какие режимы он поддерживает
  2. операционная система и что она использует

с точки зрения программиста, Если вы не работаете над кодом ядра, вы получаете то, что дает вам ОС. В большинстве современных операционных систем является страничной модели памяти.

для кода, который будет выполняться в современной операционной системе в пространстве пользователя, модель памяти как далеко что касается процесса квартиры. Это происходит потому, что ОС предоставляет виртуальное пространство памяти для процесса, который скрывает все подкачки, подкачки и другие вещи, которые могут произойти с памятью. Этот уровень абстракции весьма и весьма полезен, поскольку он не заставляет программистов играть с памятью на благо всей системы.

исторически так было не всегда.

Windows 3.1 x, MacOS до v9 и Novell NetWare не хватало некоторых из защита памяти мы принимаем как должное в Linux/Windows / OSX. У NetWare в частности было одно большое пространство памяти, которое оно предоставляло всему запущенному коду, поэтому одна ошибка, которая пыталась получить доступ к памяти, на самом деле не была назначена, могла фактически получить эту память и чаще всего не сбой всей системы. Программисты, программирующие для NetWare, должны были быть очень осторожны в управлении памятью по этой причине, и до такой степени, что программистам Linux/windows/OSX не нужно беспокоиться.

и еще даже NetWare использовала страничную модель памяти, она просто не предоставляла каждому процессу виртуальное пространство памяти, она давала ему фактическое пространство памяти.

модель памяти используется не гибкий для программирования, но ближе к оборудованию. Программирование ядра и встроенного устройства программирования являются областями, где такие вещи очень важны.

7
отвечен SysAdmin1138 2022-11-19 03:28

"модель памяти" является как низкоуровневой, так и (относительно) высокоуровневой концепцией.

В былые времена между процессорами с сегментированной моделью памяти и процессорами с "выгружаемой" или "отображаемой" моделью памяти бушевала "война". Машины серии Burroughs B5000 и Plessey 250 использовали поделенную на сегменты модель памяти с" возможностями "(или"дескрипторами"). То есть физическое хранилище управлялось не как концептуальные страницы фиксированного размера, а как сегменты переменной длины, при этом каждому сегменту соответствует некая логическая сущность (например, процедура или объект). Для адресации между сегментами использовались "регистры возможностей", которые можно было загружать только защищенным способом и которые содержали физический адрес сегмента, длину сегмента и разрешения (например, чтение/запись/выполнение), которые исполняющая программа давала для ссылки на сегмент.

эти системы были счастливы работать, когда "пейджинговые" системы все еще пытались выйти земля.

первоначальный ПК был основан на процессоре 8086 который был конструирован для того чтобы поддержать архитектуру бедного человека поделенную на сегменты. В МСИО имелось четыре сегментных регистра, которые можно было бы выбрать для добавления к 16-разрядному общему регистру для получения 20-разрядного адреса. Теория заключалась в том, что эти регистры будут управляться в программном обеспечении, несколько похожем на то, как системы Берроуза и Плесси управляют ими с немного большей аппаратной поддержкой. Но прежде чем хорошее програмное обеспечение смогло быть произведенный, чтобы использовать эту функцию DOS был kludged на 8086, и поэтому функция никогда не использовалась эффективно.

Что касается того, что лучше, ну, это уже не имеет значения, так как сегментированная модель не существует ни в какой" реальной " (не экспериментальной) среде. Но еще в тот день сегментированная модель в целом работала лучше и позволяла ОС быть более надежной. Основным негативным фактором было то, что он накладывал ограничения на компиляторы и, в определенной степени, на программистов, которые не соответствовали настроениям" Дикого Запада " многих программистов тогда и сейчас.

модель "paged"

"выгружаемая" модель предполагает, что адресное пространство разделено на" страницы " определенного размера (хотя в некоторых случаях поддерживаются несколько разных размеров страниц). Обычно размер страницы составляет от 256 до 64 КБ (всегда степень 2). Также предполагается, что оборудование содержит некоторую поддержку преобразования адресов, так что "логические" адреса (адреса в "адресном пространстве" программы) могут быть сопоставлены с "физическими" адресами (адресами в ОЗУ).

постраничный модель может быть реализована по двум основным причинам:

  1. чтобы разрешить нескольким различным потокам / процессам иметь отдельные адресные пространства, каждый из которых начинается с "нуля" (или другого стандартного адреса), и не требуя от ОС предварительного выделения всего возможного адресного пространства для потока/процесса как одного смежного блока.
  2. включить "виртуальная память", позволяя отдельным страницам в логическом адресном пространстве" выгружаться " на диск для последующей перезагрузки, если/когда программа попытается ссылаться на них.

есть и небольшие особенности аппаратной перевод страницы, которые могут быть использованы, например, параметр чтение/запись/выполнение, что позволяет несколько страниц, чтобы быть "общим" между процессами/потоками и т. д.

"плоская" модель

игнорируя Гарвардскую модель, которая, возможно, очень первая модель памяти компьютера, плоская модель хранения фон Неймана была первой моделью для достижения общего использования. Это в основном то, что - "плоское" адресное пространство неразличимых слов (не байтов до самого конца игры), которое началось с нулевого адреса и продолжалось вверх до "вершины" доступной памяти. Некоторая часть памяти в "нижней" или "верхней" части памяти будет зарезервирована для какого-то "загрузчика", а остальная часть будет доступна для одной выполняемой программы. По одной программе за раз, с программа способна использовать все, кроме этой небольшой зарезервированной области ОЗУ.

потихоньку все менялось, туда, где маленькая заповедная зона становилась больше и занимала какую-то операционную систему, но все равно только одну программу за раз. С течением времени все больше и больше, различные трюки были изобретены, чтобы позволить, например, некоторые специализированные программы для запуска в "углу" памяти, что позволяет буферизации программ и т.д., сосуществовать с программами пользователя.

но толчок для "мультипрограммирования" был оказывать давление. Некоторые системы добавили аппаратное обеспечение для сопоставления адресов, чтобы несколько программ имели собственное адресное пространство. Другие системы требовали, чтобы программы "самостоятельно перемещались", чтобы они могли работать в любом месте памяти и" связывались " с конкретным адресом.

ранний Unix (среди прочих) обрабатывал задание мультипрограммирования, "меняя местами" программы: программа (загруженная по нулевому адресу) запускалась до тех пор, пока она не "блокировала" ввод-вывод, а затем" менялась " (в полностью, включая весь код и данные) на диск и в другую программу "поменялись местами".

но по большей части эти методы медленно эволюционировали (или, возможно, перешли) к различным формам моделей хранения сопоставления страниц.

5
отвечен Daniel R Hicks 2022-11-19 05:45

Я программист, но не встраиваемый программист, которому на самом деле приходится иметь дело с моделями памяти на этом уровне, поэтому возьмите то, что я говорю, с солью.

насколько я понимаю, модели памяти определяются архитектурой процессора. Они были бы наиболее актуальны для программиста, работающего со сборкой, низкоуровневым C или чем-то, что близко к аппаратному обеспечению. Со многими языками более высокого уровня, такими как Java или C#, есть абстракции, которые скрывают такие детали от вас, поэтому вам не придется думать о моделях памяти.

бывают странные времена, когда это происходит. Насколько я понимаю, 32-разрядные x86-процессоры (по крайней мере, за последнее десятилетие) могут получить доступ к более чем 4 ГБ памяти с помощью сегментов (режим PAE), любые многие 32-разрядные операционные системы поддерживают его, но тогда максимальный объем памяти, который может использовать один процесс, ограничен 4 ГБ, потому что большинство программ ожидают плоскую модель памяти (и я сомневаюсь, что многие современные операционные системы позволят им ожидайте чего-нибудь еще).

для уточнения цитат:

  1. ранние x86 процессоры имели модель памяти, которая была очень похожа на набор пронумерованных ящиков с меньшими пронумерованными отсеками в них. Получить доступ к памяти, вам придется указать номер ящика вместе с номером отсека. Все ящики были одинаковые, некоторые программисты решили использовать один ящик для кода, другой для данных, и т. д. но эти решения не продиктованы архитектура процессора. Плоская модель памяти как иметь точно один ящик, поэтому вы как раз используете номер отсека.

  2. без дополнительных функций (например, таких, которые не позволяют одной программе использовать память другой программы) модель плоской памяти не подходит для современных операционных систем, но все современные настольные/серверные процессоры имеют эти функции в течение десятилетий.

  3. все процессоры x86 имеют режимы доступа к памяти, подобные 8086, 80286, etc для обратной совместимости, но они устарели. Практически никто их больше не использует, и они всегда переключаются на более современные режимы.

надеюсь, что это помогает.

3
отвечен Kaypro II 2022-11-19 08:02

сегментация памяти-это разделение основной памяти компьютера на сегменты или разделы. Сегменты или разделы также используются в объектных файлах компилируемых программ, когда они связаны вместе в образ программы, или когда образ загружен в память. В компьютерной системе, использующей сегментацию, ссылка на ячейку памяти включает значение, идентифицирующее сегмент и смещение внутри этого сегмента. Для различных программных модулей или для различные классы использования памяти, такие как сегменты кода и данных. Некоторые сегменты могут даже быть разделены между программами

1
отвечен MIDHU 2022-11-19 10:19

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх