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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.