Сегментация памяти? - PullRequest
0 голосов
/ 22 мая 2018

Теперь я понимаю, как работает виртуальная память и что отвечает за настройку этой виртуальной памяти.Однако несколько дней назад я столкнулся с сегментацией памяти, которая разбила адресное пространство на сегменты, подобные data и text.Я не могу найти никаких четких, не однозначных ресурсов (по крайней мере для меня), которые объясняют сегментацию памяти.Например, я хотел бы знать,

Что отвечает за разбиение адресного пространства на сегменты?

Как именно это работает?Например, как сегменты переводятся в физические адреса и что проверяет, был ли получен доступ к адресу в определенном сегменте?

Я нашел эту статью вики , но она не отвечаеттакие вопросы.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Термин «сегмент» появляется как минимум в двух разных контекстах памяти.

В старые времена сегментация использовалась для защиты памяти.Чипы Intel продолжали использовать сегменты в течение десятилетий после того, как они устарели.В конце концов, Intel отказалась от использования сегментов в 64-битном режиме, но они все еще существуют в рудиментарной форме и все еще существуют в 32-битном режиме.

Это тип «сегментации», описанный в ссылке на википедию.

Сегментация типа «код» и «данные» - это нечто совершенно другое.Другим термином для этого является «программный раздел».

Когда вы связываете свой код, компоновщик обычно группирует память с такими же атрибутами в «программные разделы» (или «сегменты»).Как правило, у вас будет память, которая:

  1. Только для чтения / выполнения (код)
  2. чтение / запись и инициализация в ноль
  3. чтение / запись и инициализация в указанныйзначения
  4. Только для чтения

Чтобы управлять группировкой связанной памяти, компоновщики обычно использовали именованные сегменты / программные разделы.По умолчанию компоновщик может создать программный раздел / сегмент под названием «Код» и поместить весь исполняемый код в этот сегмент.По умолчанию он создает сегмент с именем «Данные» и помещает в него данные только для чтения.

Мощные компоновщики позволяют программисту переопределять их.Некоторые языки ассемблера и системные языки позволяют указывать программные разделы.

«Сегменты» в этом контексте существуют только в процессе компоновки.В памяти нет области с пометкой «Код» или «Данные» (если только вы не используете устаревшую систему Intel).

Что отвечает за разбиение адресного пространства на сегменты?

Адресное пространство не разделяется на сегменты этого второго типа в современных системах (т.е. разработанных после 1970 года, а не от Intel).Некоторые сбивающие с толку книги используют это как педагогическое понятие в диаграммах.Процесс может (и обычно имеет) иметь кодовые страницы с вкраплениями страниц данных.

Например, как сегменты переводятся в физические адреса и что проверяет, был ли получен доступ к адресу в определенном сегменте?

Этот вопрос относится к использованию термина«Сегмент» описан вверху.Этот перевод выполняется с использованием аппаратных регистров.

0 голосов
/ 22 мая 2018

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

Каждый термин в вашем вопросе - это отдельная тема, которая очень хорошо описана ниже.Если вам действительно нужны ответы и четкие концепции, вам следует пройти через это:

Прочитайте «Концепции операционной системы» Авраама Силбершаца.

Глава 8: Управление памятью

Подпункты: Базовый метод пейджинга и аппаратная поддержка, сегментация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...