Сегментация памяти - Memory segmentation

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

Сегменты обычно соответствуют естественным разделам программы, таким как отдельные процедуры или таблицы данных.[1] поэтому сегментация обычно более заметна для программиста, чем пейджинг один.[2]Для разных программ могут быть созданы разные сегменты модули, или для разных классов использования памяти, таких как код и сегменты данных.[3] Некоторые сегменты могут использоваться программами совместно.[1][2]

Изначально сегментация была изобретена как метод, с помощью которого программное обеспечение может изолировать различное программное обеспечение процессы (задачи ) и данные, которые они используют. Это было предназначено для повышения надежности систем, одновременно выполняющих несколько процессов.[4] В архитектура x86-64 это считается устаревшим, и большинство современного системного программного обеспечения на базе x86-64 не используют сегментацию памяти. Вместо этого они обрабатывают программы и их данные, используя подкачка памяти который также служит способом защиты памяти. Однако большинство реализаций x86-64 по-прежнему поддерживают его по причинам обратной совместимости.[4]

Аппаратная реализация

В системе, использующей сегментацию, адреса памяти компьютера состоят из идентификатора сегмента и смещения внутри сегмента.[3]Оборудование блок управления памятью (MMU) отвечает за перевод сегмента и смещения в Физический адрес, а также для выполнения проверок, чтобы убедиться, что перевод может быть выполнен и что ссылка на этот сегмент и смещение разрешены.

Каждый сегмент имеет длину и набор разрешений (например, читать, записывать, выполнять) связанный с ним.[3] А процесс разрешено делать ссылку в сегмент, только если тип ссылки разрешен разрешениями, и если смещение внутри сегмента находится в пределах диапазона, указанного длиной сегмента. В противном случае аппаратное исключение например, ошибка сегментации Поднялся.

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

Сегментация - это один из методов реализации защита памяти.[5] Пейджинг это другое, и их можно комбинировать. Размер сегмента памяти обычно не является фиксированным и может составлять всего один байт.[6]

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

Сегментация без подкачки

С каждым сегментом связана информация, которая указывает, где сегмент расположен в памяти - база сегмента. Когда программа ссылается на ячейку памяти, смещение добавляется к базе сегмента для генерации адреса физической памяти.

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

Сегментация с разбиением на страницы

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

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

История

В Корпорация Берроуз B5000 компьютер был одним из первых, кто реализовал сегментацию, и «возможно, первым коммерческим компьютером с виртуальной памятью»[7] на основе сегментации. Позже B6500 компьютер также реализовал сегментацию; версия его архитектуры все еще используется сегодня на серверах Unisys ClearPath Libra.

В GE-645 компьютер, модификация GE-635 с добавленной поддержкой сегментации и пейджинга, был разработан в 1964 году для поддержки Мультики.

В Intel iAPX 432,[8] начатая в 1975 году, была предпринята попытка реализовать настоящую сегментированную архитектуру с защитой памяти на микропроцессоре.

Версия 960MX Intel i960 процессоры поддерживали инструкции загрузки и сохранения с источником или получателем, являющимся «дескриптором доступа» для объекта, и смещением в объект, при этом дескриптор доступа находился в 32-битном регистре, а смещение вычислялось из базового смещения в следующий регистр и от дополнительного смещения и, необязательно, индексного регистра, указанного в инструкции. Дескриптор доступа содержит биты разрешения и 26-битный индекс объекта; индекс объекта - это индекс в таблице дескрипторов объекта, дающий тип объекта, длину объекта и физический адрес для данных объекта, таблицу страниц для объекта или таблицу страниц верхнего уровня для двухуровневого таблица страниц для объекта в зависимости от типа объекта.[9]

основной, Stratus, Аполлон, IBM System / 38, и IBM AS / 400 компьютеры используют сегментацию памяти.

архитектура x86

Сегментация памяти, используемая ранними x86 процессоров, начиная с Intel 8086, не обеспечивает никакой защиты. Любая программа, запущенная на этих процессорах, может получить доступ к любому сегменту без ограничений. Сегмент идентифицируется только по его начальному положению; нет проверки длины. Гранулярность начального адреса сегмента составляет 16 байтов, а смещение - 16 бит, поддерживая размер сегмента до 64 КиБ, поэтому сегменты могут (и часто имеют) перекрываться, и каждый физический адрес может быть обозначен 4096 различными парами сегмент-смещение (с учетом адреса офсетное обертывание).

Сегментация в Intel 80286 и позже обеспечивает защиту: с выпуском 80286 Intel задним числом назвала единственный режим работы предыдущих моделей процессоров x86 "реальный режим "и представил новый"защищенный режим "с функциями защиты. Для обратной совместимости все процессоры x86 запускаются в" реальном режиме "без защиты памяти, с фиксированными сегментами 64 КиБ и только 20-разрядной (1024 КиБ) адресацией. Процессор 80286 или более поздней версии должен быть переключен в другой режим с помощью программного обеспечения, чтобы использовать его полное адресное пространство и расширенные функции MMU.

В Intel 80386 и более поздние процессоры также поддерживают подкачку; в этих процессорах таблица сегментов вместо того, чтобы указывать на таблицу страниц для сегмента, содержит адрес сегмента в линейная память. Адреса в линейной памяти затем сопоставляются с физическими адресами с помощью отдельной таблицы страниц, если подкачка включена.

В x86-64 архитектура не использует сегментацию в длинном режиме (64-битный режим).[10] В x86-64 архитектура это считается устаревшим, и большинство современного системного программного обеспечения на базе x86-64 не используют сегментацию памяти. Вместо этого они обрабатывают программы и их данные, используя подкачка памяти что также служит способом защиты памяти. Хотя большинство реализаций x86-64 по-прежнему поддерживают его по причинам обратной совместимости.[4] Четыре из сегментных регистров: CS, SS, DS и ES принудительно установлены на 0, а ограничение на 2.64. Сегментные регистры FS и GS могут иметь ненулевой базовый адрес. Это позволяет операционным системам использовать эти сегменты для специальных целей.

Смотрите также

Рекомендации

  1. ^ а б Холт, А. В. (1961). «Организация программ и ведение записей для динамического распределения памяти». Коммуникации ACM.
  2. ^ а б Англандер, Ирв (2003). Архитектура компьютерного оборудования и системного программного обеспечения (3-е изд.). Вайли. ISBN  0-471-07325-3.
  3. ^ а б c Glaser, E.L .; Couleur, J. F .; Оливер, Г. А. (1965). Системный дизайн компьютера для приложений с разделением времени. 1965 г. Осенняя совместная компьютерная конференция.
  4. ^ а б c «1.2 Управление памятью». Технология AMD64. Руководство программиста по архитектуре AMD64. Том 2: Системное программирование. (PDF). 2. Продвинутые микроустройства. 2018. с. 5.
  5. ^ Arpaci-Dusseau, Remzi H .; Арпачи-Дюссо, Андреа К. (2014). «Сегментация» (PDF). Операционные системы: три простых штуки. Книги Арпачи-Дюссо.
  6. ^ Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32 Том 3 (3A, 3B и 3C): Руководство по системному программированию (PDF). Корпорация Intel. 2012. С. 3–13.
  7. ^ Майер, Аластер Дж. У. "Архитектура Берроуза B5000 - 20 лет спустя и все еще опережает время?". Получено 15 марта, 2012.
  8. ^ Введение в архитектуру IAPX 432 (PDF). Корпорация Intel. 1981. с. 78.
  9. ^ Справочное руководство по архитектуре ЦП BiiN (PDF). BiiN. Июль 1998 г.
  10. ^ Технология AMD64. Руководство программиста по архитектуре AMD64. Том 2: Системное программирование. (PDF). 2. Продвинутые микроустройства. 2018.

внешняя ссылка

  • IA-32 Руководство разработчика программного обеспечения для архитектуры Intel Том 3A: Руководство по системному программированию. http://www.intel.com/products/processor/manuals/index.htm.
  • Операционные системы: внутреннее устройство и принципы проектирования Уильяма Столлингса. Издатель: Prentice Hall. ISBN  0-13-147954-7. ISBN  978-0-13-147954-8.