LINUX.ORG.RU
ФорумTalks

inferno singularity


0

0

Inferno и Singularity не требуют MMU, обеспечивая защиту памяти не во время исполнения программ, а во время их компиляции из байткода. Это круто. Но разве нельзя вместо трансляции байткода в машинный код делать трансляцию непосредственно машинного кода в машинный код не лезущий в чужую память? Не вижу принципиальных ограничений.


Ну напиши реализацию. Ах да, смотри в сторону Трансмета. Плюс MMU жрет меньше ресурсов.

Gregon
()

Вопрос в другом, разве нельзя залезть в чужую память? И кстати была какято чудна система безопасности для линукса анализировавшая сорцы и на их основе строящая правила,

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

>> Вопрос в другом, разве нельзя залезть в чужую память?

За такое проц бъет проге по пальцам и не пущает. Если только ты в нулевом кольце, где ядро - тогда пожалуйста.

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

Забавно, так вот чем они занимались. Эльбрус из той же оперы.
А почему MMU жрет меньше ресурсов? Про singularity я читал, что она наоборот экономят ресурсы не используя MMU.

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

>> А почему MMU жрет меньше ресурсов?

Очень просто. Если ты транслируешь команды в реальном времени, то в железе это сделать нереально дорого, нужен микрокод - это значит, что на трансляцию уходят драгоценные микросекунды, зато проще схемка. В случае с ММУ проц с помощью пары хитрых железяк транслирует виртуальные адреса проги в реальные в памяти, дальше смотри на wasm.ru

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

>> переполнения всякие?

только в пределах одного виртуального адресного пространства. Если устроить переполнение в фаерфоксе, то соседу в памяти - емаксу - это ни холодно ни жарко))

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

Не понимаю. Вот две программы. Одна видит 0-4*2^32 кусок памяти. Вторая видит другой такой-же кусок. И эти куски памяти никак не пересекаются. Это виртуальная память. И при чем тут переполнения?

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

Я просто предположил.. Выше объяснили, что я не прав..

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

Ну даже если не полностью отказываться от MMU, а просто использовать одно адресное пространство для запуска всего оттранслированого кода - разве это не будет выгодно. Иначе я просто не понимаю в чем польза этих Software Isolated Processes.

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

>> Ну даже если не полностью отказываться от MMU, а просто использовать одно адресное пространство для запуска всего оттранслированого кода - разве это не будет выгодно. Иначе я просто не понимаю в чем польза этих Software Isolated Processes.

А нафиг MMU если все пашет в вирт машине? SIP надо, если тебе свербит пускать надцать максимально безопасных процессов на железе без MMU. Singularity любопытная вещь, но на x86 не имеет ни малейшего смысла.

Gregon
()

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

ls-h ★★★★★
()
Ответ на: комментарий от alex4

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

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

>> и программисту будут не доступны такие средства

Тут все упирается в то, что все проги надо проверять и подписывать. Иначе система не имеет смысла.

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

Ну или распространять в байт коде, который будет компилится перед первым запуском или во время выполнения.

ls-h ★★★★★
()
Ответ на: комментарий от Gregon

Ну да, конечно. Транслированный код отдельно и доступен только ядру.

alex4
() автор топика
Ответ на: комментарий от wfrr

> Вопрос в другом, разве нельзя залезть в чужую память?

Есть защита на уровне маппингов -- когда при включенном пейджинге в линейное пространство просто не смаппированы физические страницы других процессов и, соответственно, к ним невозможно получить доступ никак кроме изменения маппинга или смены всего контекста. Есть защита на уровне SU/US битов в пейджинговых структурах, когда к некоторым страницам в линейном пространстве доступ разрешен только в режиме ядра, так защищают ядро от юзер-спейсного процесса. Это всё про х86, как в нормальных архитектурах -- не знаю.

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

Мы про маппинг.
Вообще я что-то долго тупил.
Смысл использования верификатора байткода для защиты памяти в том, чтобы избежать смены контекстов. А это дает возможность эффективно реализовать микроядерную архитектуру. Правда врядли можно странслировать машинный код в эффективный безопасный код. Но ведь идея то неплохая?

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

>Смысл использования верификатора байткода для защиты памяти в том, чтобы избежать смены контекстов.

это скорее всего не разрешимая проблема, пока вся программа до конца не будет отработана, нужны какие-нибудь дополнительные ограничения

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

>> C переносим.

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

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

Ну я не имел в виду полный статический анализ. При верификации байткода он же не производится.

alex4
() автор топика

Что если адреса зависят от входных данных (так всегда и бывает) ? придется добавлять рантайм проверки, и скорее всего не оптимальным способом, это дороже по времени выполнения, чем аппаратный MMU. Или как ещё это сделать?

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

>> А зачем нужны переносимые бинарники

Большая фирма делает большой софт для серьезных дядек под закрытой лицензией без предоставления исходников, серьезные дядьки хотят пускать софт на over 9000 разных платформ. Это раз. Два, серьезные дядьки не всегда хотят иметь извращения со сборкой софта из исходников, и даже у больших фирм может не быть ресурсов для того, чтобы собирать весь свой софт под всякую экзотику.

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

>> Что если адреса зависят от входных данных (так всегда и бывает) ? придется добавлять рантайм проверки, и скорее всего не оптимальным способом, это дороже по времени выполнения, чем аппаратный MMU. Или как ещё это сделать?

Нет ничего нового под небом и все это реализуется так, как сделано в высокоуровневых языках. Например, проверка границы массива. Ее можно писать ручками в С, она забирает время и место. Можно использовать готовую в питоне/бейсике/подставьте_свой_вариант. Она тоже жрет ресурсы, но больше: проверяется все, что нужно и не нужно проверять. По.другому никак, если только не присобачить туда оптимизирующий JIT или не предусмотреть для байткода комманд типа "а вот тут мы входные данные не проверяем"

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

>>> и программисту будут не доступны такие средства

> Тут все упирается в то, что все проги надо проверять и подписывать. Иначе система не имеет смысла.

На самом деле -- вовсе нет. Можно реализовать защиту памяти без MMU, так что можно будет безопасно запускать "неопознанный" код, при условии что код -- в байткоде VM, и перед запуском компилируется JIT-ом, т.е. вариант "заранее заготовленного" байткода не рассматривается, т.к. его можно запретить административно.

С учетом вышесказанного, размышления о защите можно перенести в мир виртуальной машины (при условии что в JIT нет багов), тогда защита памяти может быть организована очень примитивно -- процесс при рождении получает в наследство два-три хендла-описателя, по сути, нечто вроде сегментных регистров, и память процесс может адресовать только в пределах регионов, заданных в хендлах. Теоретически, если кто-то процессу передаст хендл другого процесса, то он сможет получить доступ к чужой памяти, но на это должна быть добрая воля другого процесса и поддержка со стороны API системы по пересылке хендлов между процессами.

Вот как-то так...

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