LINUX.ORG.RU

Модель памяти в Linux и FreeBSD


0

0

Вопрос к гуру: эти системы когданибудь использовали сегментацию или нет? В 64 битных системах сегментация не используется (она типа в процах не поддерживается?)?

anonymous
Ответ на: комментарий от mv

Если ты про разделение памяти типа как в hugesmp-ядрах, то здесь просто смысла этого делать нет. 2^64 - очень большое число.

mv ★★★★★
()

> Вопрос к гуру: эти системы когданибудь использовали сегментацию или нет?

ЕМНИП, использовалось ядром на x86 только для всяких извращений типа grsecurity. В любом случае пользовательские приложения сегментацию не пользовали.

anonymous
()
Ответ на: комментарий от mv

Я под сегментацией понимаю ровно но что пинимает под ней Интел. Отдельные сегменты Данныхб Кодаб Стека каждый со своей базой и размером... Там на сколько я понимаю еще и некие механизмы защиты есть от записи в другой сегмент (хотя в этом я не очень уверен)

anonymous
()
Ответ на: комментарий от mv

> Ну тогда flat mode уже не имеет отдельных сегментов.

сегментация в чистом виде (изменение дескрипторов в GDT и их кэширование в GS) используется для реализации TLS на x86 (sys_set_thread_area())
для x86_64 используется интерфейс sys_arch_prctl()

rei3er
()
Ответ на: комментарий от rei3er

Сегментации вот в таком понятии:

> Я под сегментацией понимаю ровно но что пинимает под ней Интел. Отдельные сегменты Данныхб Кодаб Стека каждый со своей базой и размером...

уже в flat нет.

mv ★★★★★
()
Ответ на: комментарий от mv

> уже в flat нет.

Сегментные регистры никуда ж не делись. Просто во флате сегменты кода, данных, и стека имеют одинаковую базу (0) и максимальный размер. А тот же GS - уже нет, как говорилось выше.

anonymous
()
Ответ на: комментарий от mv

> уже в flat нет.

сегменты можно создать через sys_set_thread_area()

rei3er
()
Ответ на: комментарий от anonymous

Тем не менее, смысл (основных) сегментных регистров поменялся, и говорить, что они никуда не делись и никак не поменялись со времён real mode - неверно.

mv ★★★★★
()
Ответ на: комментарий от mv

> что они никуда не делись и никак не поменялись со времён real mode

А кто говорил про real mode? Причем тут это вообще.

anonymous
()
Ответ на: комментарий от anonymous

> во флате сегменты кода, данных, и стека имеют одинаковую базу (0) и максимальный размер

А физическая память под ними - одна и та же, или разные сегменты адресуют разные страницы физической памяти?

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от anonymous

А притом! Сегменты - это твой самый страшный кошмар. Это следствие ограниченности 16-разрядных систем, поганые дальние/короткие переходы и вызовы ф-ий, адресация не по указателю, а по сегмент:смещение, и куча, куча костылей для DOS.

anonymous
()
Ответ на: комментарий от anonymous

Лечись электричеством, уважаемый. Может тогда ты вдуплишь отличия сегментов реального режима от дескрипторов защищенного. И поймешь, почему на x86 иногда не хватает защиты на уровне страниц и приходится возиться с сегментами (хинт: попробуй чисто на пейджинге сделать неисполняемый стек).

anonymous
()
Ответ на: комментарий от anonymous

Во а че бы его по умолчанию не сделать неисполняемым разнеся сегменты кода/данных/стека... тогда фраза "при переполнении буфера злоумышленник может выполнить свой код" потеряла бы смысл накорню. Так нет в 64 битке сегментацию кастрировали - нельзя разнести сегменты кода и стека например для них база всегда 0! Я хочу понять почему так сделали?

anonymous
()
Ответ на: комментарий от anonymous

> Я хочу понять почему так сделали?

потому что поддерживается NX бит на уровне PTE/PDE

rei3er
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.