3.2 Организация памяти
Физические адреса - это реальные адреса, используемые для выбора микросхем физической памяти, содержащих данные. Физическая память организована в виде последовательности 8-разрядных байтов. Каждому байту присвоен уникальный адрес, который может изменяться от 0 до 232-1 (или 236-1 у P6+). Физическая память составляет единое целое с компьютером и управляется процессором (с некоторой помощью средств прямого доступа к памяти). Организационные методы распределения памяти предоставляют программистам возможность эффективного использования всей компьютерной системы.
При использовании средств процессора для управления памятью, программа может использовать одну из трех моделей доступа к памяти: сплошная ("плоская") модель памяти, сегментированная модель памяти, модель режима реального адреса.
![Модели адесации](memmod.gif)
При использовании сплошной модели (Flat Model) памяти программа оперирует единым непрерывным адресным пространством - линейным адресным пространством. В нем содержатся и код, и стек, и данные программы, адресуемые смещением в пределах от 0 до 232-1. Такое 32-битное смещение называется линейным адресом.
При использовании сегментированной модели (Segmented Model) для программы память представляется группой независимых адресных блоков, называемых сегментами. Для адресации байта памяти программа должна использовать логический адрес, состоящий из селектора сегмента и смещения. Селектор сегмента выбирает определенный сегмент, а смещение указывает на конкретный байт в адресном пространстве выбранного сегмента. Каждая задача в защищенном режиме может иметь до 16383 сегментов, размером до 4 Гбайт каждый, таким образом, общий объем памяти, адресуемой программой составляет 64 Тбайт. Микропроцессор при помощи блока сегментации отображает логический адрес в линейное адресное пространство. Сегментация позволяет эффективно управлять пространством логических адресов. Сегменты используются для объединения областей памяти с общими атрибутами. Каждый сегмент имеет несколько связанных с ним атрибутов: размер, расположение, тип (стек, программа или данные) и характеристики защиты.
При использовании сплошной или сегментированной модели памяти линейное адресное пространство может быть отображено на пространство физических адресов либо непосредственно (линейный адрес есть физический адрес), либо при помощи механизма страничной трансляции. Во втором случае линейное адресное пространство делится на страницы одинакового размера (обычно 4 Кбайт), которые составляют виртуальную память. Страничная трансляция обеспечивает отображение требуемых страниц виртуальной памяти в физическое адресное пространство. Только при использовании страничной трансляции на процессорах P6+ доступны 36-битные физические адреса (до 64 Гбайт).
Следует отметить, что сплошная модель реализуется как частный случай сегментированной модели, когда программа обращается к сегменту, под который отведено все линейное пространство.
Для совместимости с программами, написанными для МП 8086, современные процессоры IA-32 могут использовать модель режима реального адреса (Real-address Mode Model). Эта модель является специфическим случаем сегментированной модели. Линейное адресное пространство образуется из массива сегментов длиной по 64 Кбайт. Размер такого линейного адресного пространства - 1 Мбайт. В этой модели селектор сегмента непосредственно используется для вычисления базового адреса в линейном адресном пространстве путем сдвига значения селектора на 4 бита влево (умножение на 16). Это значит, все сегменты начинаются с адреса, кратного 16. 16-байтный блок памяти называют параграфом, поэтому говорят, что сегмент выравнивается по границе параграфа. Т.к. размер сегмента намного превышает размер параграфа, то имеет место перекрытие сегментов, т.е. один и тот же байт линейного адресного пространства может быть адресован различными логическими адресами (используя селекторы разных сегментов).
Модель режима реального адреса используется программами в реальном режиме, в режиме системного управления и в защищенном режиме для задач в состоянии VM86.