Сегменты памяти определяются ОС или архитектурой? - PullRequest
0 голосов
/ 03 июля 2018

Архитектура x86 имеет регистры сегментов для различных сегментов адресного пространства (ss, ds и т. Д.). Если бы я хотел добавить новый сегмент памяти в адресное пространство процесса, могу ли я сделать это, просто изменив ядро, или мне нужна аппаратная поддержка? Не пытаясь делать что-то конкретное, просто любопытно и пытаюсь понять, как Linux использует сегментные регистры.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Память обычно управляется выделенным аппаратным обеспечением, называемым Memory Management Unit (MMU). Любой процессор x86 имеет MMU, но это не означает, что управление памятью должно выполняться аппаратно. Сам Linux может работать, эмулируя MMU в программном обеспечении. Конечно, без аппаратной поддержки было бы действительно сложно (а в некоторых случаях даже невозможно) реализовать некоторые функции. С чисто теоретической точки зрения вы могли бы эмулировать в программном обеспечении (пространстве ядра) поведение, подобное сегментации, со всеми сегментами, которые вам нравятся, но в реальном мире это было бы просто плохой идеей.

Как вы сказали, x86_32 поддерживает сегментацию памяти, но, начиная с i386, также поддерживается paging . В настоящее время сегментация считается устаревшей , и нет ни одной современной ОС (AFAIK), которая ее использует (за исключением, может быть, какого-нибудь хакерского патча, такого как grsecurity / PaX и их функция UDEREF). Также важно отметить, что в x86_64 полностью отсутствует поддержка сегментации.

0 голосов
/ 04 июля 2018

по этой ссылке https://www.cs.princeton.edu/courses/archive/fall02/cs318/proj2/pc-arch.html

Современная операционная система и приложения используют (несегментированную) память модель¾ все регистры сегментов загружаются с одним сегментом селектор, так что все ссылки на память, которые делает программа, относятся к одному линейно-адресное пространство.

При написании кода приложения вы обычно создаете селекторы сегментов с директивами ассемблера и символами. Ассемблер и / или компоновщик затем создает фактические селекторы сегмента, связанные с этими директивы и символы. Если вы пишете системный код, вам может понадобиться создавать селекторы сегментов напрямую.

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

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