Термин «сегмент» появляется как минимум в двух разных контекстах памяти.
В старые времена сегментация использовалась для защиты памяти.Чипы Intel продолжали использовать сегменты в течение десятилетий после того, как они устарели.В конце концов, Intel отказалась от использования сегментов в 64-битном режиме, но они все еще существуют в рудиментарной форме и все еще существуют в 32-битном режиме.
Это тип «сегментации», описанный в ссылке на википедию.
Сегментация типа «код» и «данные» - это нечто совершенно другое.Другим термином для этого является «программный раздел».
Когда вы связываете свой код, компоновщик обычно группирует память с такими же атрибутами в «программные разделы» (или «сегменты»).Как правило, у вас будет память, которая:
- Только для чтения / выполнения (код)
- чтение / запись и инициализация в ноль
- чтение / запись и инициализация в указанныйзначения
- Только для чтения
Чтобы управлять группировкой связанной памяти, компоновщики обычно использовали именованные сегменты / программные разделы.По умолчанию компоновщик может создать программный раздел / сегмент под названием «Код» и поместить весь исполняемый код в этот сегмент.По умолчанию он создает сегмент с именем «Данные» и помещает в него данные только для чтения.
Мощные компоновщики позволяют программисту переопределять их.Некоторые языки ассемблера и системные языки позволяют указывать программные разделы.
«Сегменты» в этом контексте существуют только в процессе компоновки.В памяти нет области с пометкой «Код» или «Данные» (если только вы не используете устаревшую систему Intel).
Что отвечает за разбиение адресного пространства на сегменты?
Адресное пространство не разделяется на сегменты этого второго типа в современных системах (т.е. разработанных после 1970 года, а не от Intel).Некоторые сбивающие с толку книги используют это как педагогическое понятие в диаграммах.Процесс может (и обычно имеет) иметь кодовые страницы с вкраплениями страниц данных.
Например, как сегменты переводятся в физические адреса и что проверяет, был ли получен доступ к адресу в определенном сегменте?
Этот вопрос относится к использованию термина«Сегмент» описан вверху.Этот перевод выполняется с использованием аппаратных регистров.