ФЭНДОМ


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

В операционных системах, работающих в реальном режиме (фактически это MS DOS и её клоны), были определены следующие модели памяти:

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

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

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

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