Сообщение по теме плоская и многосегментная модель памяти

Обновлено: 30.06.2024

Адрес, по-прежнему, состоит из двух частей - сегмент + смещение.

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

Для доступа к памяти необходимо:

1) вычислить адрес дескриптора сегмента и причитать его;

2) вычислить адрес элемента таблицы страниц этого сегмента и извлечь из памяти необходимый элемент;

3) к номеру (адресу) физической страницы приписать номер (адрес) ячейки в странице.

Задержка в доступе к памяти (в три раза больше, чем при прямой адресации).

Чтобы избежать этого вводится кэширование (кэш строится по ассоциативному принципу). Мы будем это изучать позже.

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

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

Это подход называется плоской памятью.

· При использовании плоской модели памяти упрощается создание и ОС, и систем программирования.

· Уменьшаются расходы памяти на поддержку системных информационных структур

В абсолютном большинстве современных 32-разрядных ОС (для микропроцессоров Intel) используется плоская модель памяти.

Описание набора регистров микропроцессора

Программная модель микропроцессора

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

Программной моделью принято наз. Совокупность аппаратных средств компьютера, доступных из программы. Др. словами ПМ - это видение программистом аппаратных средств ПК.

Частью ПМ комп. является программная модель микропроцессора, которая содержит 32 регистра в той или иной мере доступных для использования программистом.

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

· 16 пользовательских регистров;

· 16 системных регистров.

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

Программа разбивается на сегменты.

Адрес, по-прежнему, состоит из двух частей - сегмент + смещение.

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

Для доступа к памяти необходимо:

1) вычислить адрес дескриптора сегмента и причитать его;

2) вычислить адрес элемента таблицы страниц этого сегмента и извлечь из памяти необходимый элемент;

3) к номеру (адресу) физической страницы приписать номер (адрес) ячейки в странице.

Задержка в доступе к памяти (в три раза больше, чем при прямой адресации).

Чтобы избежать этого вводится кэширование (кэш строится по ассоциативному принципу). Мы будем это изучать позже.

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

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

Это подход называется плоской памятью.

· При использовании плоской модели памяти упрощается создание и ОС, и систем программирования.

· Уменьшаются расходы памяти на поддержку системных информационных структур

В абсолютном большинстве современных 32-разрядных ОС (для микропроцессоров Intel) используется плоская модель памяти.

Описание набора регистров микропроцессора

Программная модель микропроцессора

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

Программной моделью принято наз. Совокупность аппаратных средств компьютера, доступных из программы. Др. словами ПМ - это видение программистом аппаратных средств ПК.

Частью ПМ комп. является программная модель микропроцессора, которая содержит 32 регистра в той или иной мере доступных для использования программистом.

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

· 16 пользовательских регистров;

· 16 системных регистров.

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

Представляю, Вам, перевод статьи одного из разработчиков PHP, в том числе версии 7 и выше, сертифицированного инженера ZendFramework. В данный момент работает в SensioLabs и большую часть занимается низкоуровневыми вещами, в том числе программированием в С под Unix. Оригинал статьи здесь.

Ошибка Сегментации: (Компьютерная верстка памяти)

Несколько слов, о чем эта запись в блоге

То, что вы будете читать здесь, краткое изложение основ дизайна компьютерной архитектуры. Я не буду заходить слишком далеко, если это не нужно, и буду использовать хорошо известные формулировки, так что, кто работает с компьютером каждый день может понять такие важные понятия о том, как работает ПК. Существует много книг о компьютерной архитектуре. Если вы хотите углубиться дальше в этой теме, я предлагаю вам достать некоторые из них и начать читать. Кроме того, откройте исходный код ядра ОС и изучите его, будь то ядро Linux, или любое другое.

Немного истории computer science

Еще в то время, когда компьютерами были огромные машины, тяжелее тонны, внутри вы могли бы найти один процессор с чем-то вроде 16Kb оперативной памяти (RAM). Не будем углубляться дальше =) В этот период компьютер стоил примерно $ 150 000 и мог выполнить ровно одну задачу в момент времени. Если бы мы в то время нарисовали схему его памяти, то архитектура выглядела следующим образом:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

модель "paged"

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

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

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

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

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

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

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

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

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

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

Модель памяти — это способ объединения кода, данных и стека программы в один или несколько физических сегментов.

  • малая (small) — код и данные находятся в разных физических сегментах, размер каждого из которых не может превосходить 64 Кбайта. Строгой спецификации относительно размещения сегмента стека и PSP для этой и других моделей памяти нет;
  • средняя (medium) — код размещается в нескольких сегментах, каждый из которых имеет размер до 64 Кбайт; данные размещаются в одном сегменте длиной до 64 Кбайт;
  • компактная (compact) — код занимает один сегмент размером до 64 Кбайт, данные размещаются в нескольких сегментах, каждый из которых может иметь размер до 64 Кбайт;
  • большая (large) — код и данные занимают несколько физических сегментов каждый.

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

В операционных системах защищённого режима технически можно организовать те же самые модели памяти, что и в реальном режиме. Однако на практике наиболее распространённые ОС, в том числе Microsoft Windows и Linux, применяют только плоскую (flat) модель. Суть её заключается в том, что код, данные и стек программы объединяются в один физический сегмент размером 4 Гбайта (хотя собственно программе пользователя отводится меньший объём — чуть меньше 2 Гбайт в большинстве версий Windows и около 3 Гбайт в Linux).

Наконец, в 64-разрядном режиме может использоваться только плоская модель, поскольку механизм сегментации в нём не предусмотрен.

Читайте также: