Jump to content

Сегментация памяти

(Перенаправлено из сегмента (память) )

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

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

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

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

[ редактировать ]

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

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

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

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

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

Сегментация без пейджинга

[ редактировать ]

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

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

Сегментация с пейджингом

[ редактировать ]

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

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

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

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

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

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

Prime , Stratus , Apollo , IBM System/38 и IBM AS/400 (включая IBM i Компьютеры ) используют сегментацию памяти.

Архитектура больших систем Берроуза

[ редактировать ]

Дескрипторы в B5000 , B5500 и B5700 находятся либо в справочной таблице программ (PRT), либо в стеке и содержат бит присутствия , указывающий, присутствуют ли данные в памяти. Существуют отдельные дескрипторы данных и программ.

Мультикс-архитектуры

[ редактировать ]

Архитектура S/370

[ редактировать ]

В IBM System/370 моделях [а] с виртуальным хранилищем [11] [12] (DAT) и 24-битные адреса, регистр управления 0 определяет размер сегмента 64 КиБ или 1 МиБ и размер страницы 2 КиБ или 4 КиБ; Регистр управления 1 содержит указатель таблицы сегментов (STD), который определяет длину и реальный адрес таблицы сегментов. Каждая запись таблицы сегментов содержит местоположение таблицы страниц, длину таблицы страниц и недопустимый бит. Позже IBM увеличила размер адреса до 31 бита и добавила два бита к записям таблицы сегментов:

Бит защиты сегмента
Сегмент доступен только для чтения
Бит общего сегмента
Сегмент распределяется между адресными пространствами; этот бит установлен для оптимизации использования TLB

Каждая из реализаций DAT от IBM включает в себя кэш трансляции, который IBM назвала буфером перевода (TLB). Хотя в разделе «Принципы работы» TLB рассматривается в общих чертах, детали не являются частью архитектуры и варьируются от модели к модели.

Начиная с процессорных комплексов 3031, 3032 и 3033 , IBM предложила функцию под названием Dual-address Space. [12] : 5-13–5-17, двухадресное управление пространством : 5-17–5-20, Механизмы авторизации DAS : 5-21–5-24, Перевод номера ПК [13] (DAS), который позволяет программе переключаться между таблицами трансляции для двух адресных пространств, называемых первичным адресным пространством (CR1) и вторичным адресным пространством (CR7), а также перемещать данные между адресными пространствами, на которые распространяется ключ защиты. DAS поддерживает таблицу трансляции для преобразования 16-битного номера адресного пространства (ASN) в STD с привилегированными инструкциями для загрузки STD в CR1 (первичный) или CR7 (вторичный).

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

[ редактировать ]

Ранние x86 процессоры , начиная с Intel 8086 , обеспечивали грубую сегментацию памяти и не имели защиты памяти . (Каждый байт каждого сегмента всегда доступен любой программе.) 16-битные сегментные регистры позволяют хранить 65 536 сегментов; каждый сегмент начинается с фиксированного смещения, равного 16-кратному номеру сегмента; степень детализации начального адреса сегмента составляет 16 байт. Каждый сегмент предоставляет доступ для чтения и записи к 64 КиБ (65 536 байт) адресного пространства (этот предел устанавливается 16-битными регистрами PC и SP; процессор не выполняет проверку границ). Смещение+адрес, превышающий 0xFFFFF, преобразуется в 0x00000. Каждый сегмент размером 64 КиБ перекрывает следующие 4095 сегментов; каждый физический адрес может быть обозначен 4096 парами сегмент-смещение. Эта схема может адресовать только 1 МБ (1024 КиБ) физической памяти (и ввода-вывода, отображаемого в памяти). (Дополнительное оборудование расширенной памяти может добавлять память с переключением банков под управлением программного обеспечения.) Intel задним числом назвала единственный рабочий режим этих моделей процессоров x86 « реальным режимом ».

В процессорах Intel 80286 и более поздних версиях добавлен « защищенный режим 286 », который сохраняет 16-битную адресацию, а также добавляет сегментацию (без подкачки) и посегментную защиту памяти. В целях обратной совместимости все процессоры x86 запускаются в «реальном режиме» с одинаковыми фиксированными перекрывающимися сегментами размером 64 КиБ, без защиты памяти, физическим адресным пространством только 1 МБ и некоторыми тонкими различиями ( большая область памяти , нереальный режим ). Чтобы использовать полное 24-битное (16 МБ) физическое адресное пространство и расширенные функции MMU , процессор 80286 или более поздней версии должен быть переведен в «защищенный режим» с помощью программного обеспечения, обычно операционной системы или расширителя DOS . Если программа не использует сегментные регистры или помещает в них только значения, полученные от операционной системы, то идентичный код может выполняться в реальном или защищенном режиме, но большая часть программного обеспечения реального режима вычисляет новые значения для сегментных регистров. нарушение этой совместимости.

В процессорах Intel i386 и более поздних версиях добавлен « защищенный режим 386 », который использует 32-битную адресацию, сохраняет сегментацию и добавляет подкачку памяти . В этих процессорах таблица сегментов не указывает на таблицу страниц сегмента, а содержит адрес сегмента в линейной памяти . Когда подкачка включена, адреса в линейной памяти затем сопоставляются с физическими адресами с использованием отдельной таблицы страниц. Большинство операционных систем не использовали возможность сегментации, предпочитая всегда сохранять базовый адрес во всех сегментных регистрах равным 0 и обеспечивать постраничную защиту памяти и подкачку, используя только подкачку. Некоторые используют регистр CS для обеспечения защиты исполняемого пространства на процессорах, не имеющих бита NX , или используют регистры FS или GS для доступа к локальному хранилищу потоков. [14] [15]

Архитектура x86-64 не поддерживает сегментацию в « длинном режиме » (64-битном режиме). [16] Четыре сегментных регистра: CS, SS, DS и ES принудительно устанавливаются в 0, а предел — в 2. 64 . Сегментные регистры FS и GS по-прежнему могут иметь ненулевой базовый адрес. Это позволяет операционным системам использовать эти сегменты для специальных целей, таких как локальное хранилище потоков. [14] [15]

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Модели 115, 125, 135, 138, 145, 148, 155 II, 158, 165 II и 168.
  1. ^ Перейти обратно: а б Холт, Анатоль В. (1961). «Организация программы и ведение учета для динамического распределения памяти» . Коммуникации АКМ . 4 (10): 422–431. дои : 10.1145/366786.366795 . S2CID   18973700 .
  2. ^ Перейти обратно: а б Ингландер, Ирв (2003). Архитектура компьютерного оборудования и системного программного обеспечения (3-е изд.). Уайли. ISBN  0-471-07325-3 .
  3. ^ Перейти обратно: а б с Глейзер, Эдвард Л.; Кулер, Джон Ф.; Оливер, Джорджия (1965). Проектирование системы компьютера для приложений с разделением времени . Осень 1965 г. Объединенная компьютерная конференция.
  4. ^ «1.2 Управление памятью». Технология AMD64 Руководство программиста по архитектуре AMD64, том 2: Системное программирование (PDF) . Том. 2. Передовые микроустройства. 2018. с. 5.
  5. ^ Арпачи-Дюссо, Ремзи Х.; Арпачи-Дюссо, Андреа К. (2014). «Сегментация» (PDF) . Операционные системы: три простых элемента . Книги Арпачи-Дюссо.
  6. ^ Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 3 (3A, 3B и 3C): Руководство по системному программированию (PDF) . Корпорация Интел. 2012. стр. 3–13.
  7. ^ Майер, Аластер Дж. В. «Архитектура Burroughs B5000 - 20 лет спустя и все еще опережает время?» . Проверено 15 марта 2012 г.
  8. ^ Хейс, Джон П. (1978). Компьютерная архитектура и организация . МакГроу-Хилл. п. 371. ИСБН  0-07-027363-4 .
  9. ^ Введение в архитектуру IAPX 432 (PDF) . Корпорация Интел. 1981. с. 78.
  10. ^ Справочное руководство по архитектуре ЦП BiiN (PDF) . БииН. Июль 1998 года.
  11. ^ «Динамический перевод адресов» (PDF) . Принципы работы IBM System/370 (PDF) . Системы (Четвертое изд.). ИБМ . Сентябрь 1974 г., стр. 57–68. ГА22-7000-4.
  12. ^ Перейти обратно: а б «Динамический перевод адресов». Принципы работы IBM System/370 (одиннадцатое изд.). ИБМ. Сентябрь 1987 г., стр. 3-20–3-38. ГА22-7000-10.
  13. ^ «Адресные пространства» (PDF) . Принципы работы IBM System/370 с расширенной архитектурой (PDF) (второе изд.). ИБМ. Январь 1987 г., стр. 3-13–3-14. SA22-7085-1.
  14. ^ Перейти обратно: а б Мэтт Питрек (май 2006 г.). «Все, что вам нужно знать, чтобы начать программировать 64-битные системы Windows» . Майкрософт . Проверено 18 апреля 2023 г.
  15. ^ Перейти обратно: а б Дреппер, Ульрих (22 августа 2013 г.). «Обработка ELF для локального хранилища потоков» (PDF) .
  16. ^ Технология AMD64 Руководство программиста по архитектуре AMD64, том 2: Системное программирование (PDF) . Том. 2. Передовые микроустройства. 2018.
[ редактировать ]
  • IA-32 Руководство разработчика программного обеспечения для архитектуры Intel, том 3A: Руководство по системному программированию. http://www.intel.com/products/processor/manuals/index.htm .
  • Операционные системы: внутреннее устройство и принципы проектирования Уильяма Столлингса. Издатель: Прентис Холл. ISBN   0-13-147954-7 . ISBN   978-0-13-147954-8 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 155ecfcfd34df583cfe6eb1e51a83ded__1713144600
URL1:https://arc.ask3.ru/arc/aa/15/ed/155ecfcfd34df583cfe6eb1e51a83ded.html
Заголовок, (Title) документа по адресу, URL1:
Memory segmentation - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)