Date: 2013-01-29 02:20 (UTC)
From: [identity profile] mandrykin.livejournal.com
> Виртуальную память можно точно так же организовать на базе сегментов, как и на базе страниц. Сложнее? Да! Гибче? Несомненно!


Как удивительно это пересекается с тем, над чем сейчас думаю. На базе сегментов вполне можно организовать страничную память. В некотором роде "костыль", но при этом обработчик исключения по нарушению границы сегмента может эмулировать страницы любого размера. Т.е. даже на такой схеме можно получить некоторый выигрыш.
(deleted comment)

Date: 2013-01-29 02:37 (UTC)
From: [identity profile] mandrykin.livejournal.com
Может быть, но есть вопросы.

Какие системы организуют страничную память на основе сегментов? Какой в этом смысл для секцмй .text и .data, если каждую из них всегда можно описать одним сегментом? Интересная картина могла бы получиться для стека и кучи - но на x86 это дорого и громоздко.


(deleted comment)

Date: 2013-01-29 03:05 (UTC)
From: [identity profile] mandrykin.livejournal.com
> Скажем, в самом простом случае каждая функция помещается в свой сегмент.

Это не даст никаких преимуществ, а лишь убьёт производительность. Фишка как раз в том, чтобы на основе сегментов реализовать страничную память там, где она больше всего нужна - стек и куча. Размер стека и кучи - динамический. Увеличивать, наращивая границы сегмента, не получится - рано или поздно сегмент упрётся в другой сегмент. Менеджер памяти мог бы "тасовать" сегменты, создавая иллюзию непрерывного адресного пространства.

(deleted comment)

Date: 2013-01-29 03:37 (UTC)
From: [identity profile] mandrykin.livejournal.com
На x86 это интересно разве что в академических целях, как демонстрация возможностей. Скорости это никак не прибавит, потому что в "аппаратной" страничной реализации участвует TLB. Программная эмуляция в любом случае будет медленнее - переключение сегментов по исключениям будет сильно тормозить.

А вот что касается уровня привелегий - то они как бы и не нужны вовсе. Вполне достаточно прав rwx на виртуальную страницу для организации защищённой системы. Уровень привлегий - лишняя сущность. Защита на уровне страниц вполне покрывает все нужды. Пожалуй, единственное исключение из этого утверждения - это средства виртуализации. Тут бы хватило два уровня привелегий - гипервизор и всё остальное.
Edited Date: 2013-01-29 03:40 (UTC)
(deleted comment)

Date: 2013-01-29 11:11 (UTC)
From: [identity profile] mandrykin.livejournal.com
Вполне благородная. Но c помощью прав страниц это делается легко.
(deleted comment)

Date: 2013-01-29 17:49 (UTC)
From: [identity profile] mandrykin.livejournal.com
А что может случиться страшного, если процессор начнёт исполнять данные? Вряд-ли он успеет навредить системе или другому процессу, прежде чем наткнётся на несуществующую команду или обратится по неправильному адресу. Самое страшное, что может случиться - завснет в бесконечном цикле.

Одним битом можно обойтись. Если неправильный адрес, то страницы просто не существует. Чтение разрешено всегда, а бит определеяет разрешёную операцию - исполнение или запись страницы. Всё же правильнее разделять чтение и исполнение, но если архитектура не поддерживает, то обойтись можно.