OberonCore
https://forum.oberoncore.ru/

Единое адресное пространство
https://forum.oberoncore.ru/viewtopic.php?f=60&t=2903
Страница 1 из 2

Автор:  Илья Ермаков [ Вторник, 12 Октябрь, 2010 22:41 ]
Заголовок сообщения:  Единое адресное пространство

Пришедшая "из лабораторий", многих захватила идея ОС с единым адресным пространством и языковой защитой.

На что ряд специалистов в ОС утверждает, что без аппаратной защиты, понятия процесса и раздельных адресных пространств нельзя обеспечить многие требования по защищённости и надёжности.

В пользу поддержки изолированных процессов на уровне ОС лично у меня накопился уже ряд практических аргументов.

В частности:

- обеспечить разделение прав и защиту от злого умысла без изоляции памяти просто невозможно. Да, можно сделать загрузку специфических модулей "в песочницу", проверяя явно их список импорта. Но это для ограниченных случаев. В общем случае, многие естественные средства, нужные для динамики (метапрограммирование и т.п.) и удобных библиотек, входят в противоречие с разделением прав. Поэтому имеет место факт: языковыми средствами можно обеспечить надёжность, но нельзя обеспечить защиту от злого умысла, исходящего от модуля в том же адресном пространстве.

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

Автор:  Alexey Veselovsky [ Среда, 13 Октябрь, 2010 08:33 ]
Заголовок сообщения:  Re: Единое адресное пространство

Для второго случая достаточно просто раздельных куч при общем адресном пространстве. Живой пример -- erlang. Это в принципе на уровне языка просто сделать, или даже библиотек.

Со злым умыслом всё сложнее. Если убрать аппаратную изоляцию процессов, т.е. защиту, то лично мне совершенно непонятно как при общем адресном пространстве на текущем железе мне кто-то помешает нагадить в чужую память. Язык меня, очевидно, тоже ограничить не сможет, ибо язык один -- асм/машкоды. А всё остальное препроцессоры к нему. :-) Разве что распространять программы только в исходниках (как бы это ни называли -- байткод, деревья франца, или как-то иначе. один фиг это исходники требующие последующей компиляции) более высокоуровневого безопасного языка с последующей компиляцией перед исполнением. Но насколько это будет эффективно и удобно?

Автор:  Info21 [ Среда, 13 Октябрь, 2010 11:28 ]
Заголовок сообщения:  Re: Единое адресное пространство

Alexey Veselovsky писал(а):
Разве что распространять программы только в исходниках (как бы это ни называли -- байткод, деревья франца, или как-то иначе. один фиг это исходники требующие последующей компиляции) более высокоуровневого безопасного языка с последующей компиляцией перед исполнением.
Но насколько это будет эффективно и удобно?
Мне кажется, проблем общего значения ни с эффективностью, ни с удобством быть не должно.
Если система критическая, то там спецперсонал мог бы кешировать рукой сделанные из исходников бинарники, как-нибудь так.

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

Но это вопрос сложноват для меня.
(Давно AVC нет, вот он мог бы тут что-нибудь поведать.)

Автор:  Роман М. [ Среда, 13 Октябрь, 2010 15:52 ]
Заголовок сообщения:  Re: Единое адресное пространство

Мне кажется правильным следить за границами памяти модулей и держать наподобие перечня владений, указывающим за кем числятся данные участки памяти. Причём, никакие модули не должны иметь возможности на него влиять. По мере изменения границ владений (памяти) глобальный менеджер памяти должен регистрировать их в журнале и в случае чего отказать модулю в операции, сказав "Низя! Ишь...".

Один модуль не должен иметь права модифицировать данные другого, а должен только оповестить по какому-нибудь совместному информационному каналу (шине сообщений). Как только второй будет оповещён, он будет "решать" нужна ли ему та информация и действовать соответственно: отправить ответ "получил, спасибо", "не то, повтори-ка" или "кыш, не мешай работать".

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

Автор:  Alexanbar [ Среда, 13 Октябрь, 2010 16:15 ]
Заголовок сообщения:  Re: Единое адресное пространство

Роман М. писал(а):
Мне кажется правильным следить за границами памяти модулей и держать наподобие перечня владений, указывающим за кем числятся данные участки памяти. Причём, никакие модули не должны иметь возможности на него влиять. По мере изменения границ владений (памяти) глобальный менеджер памяти должен регистрировать их в журнале и в случае чего отказать модулю в операции, сказав "Низя! Ишь...".


Разумно. Но фактически приходим к раздельным адресным пространствам.

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

Так что в принципе, наверное, дело сводится к модификации правил таким образом, чтобы выполнить два противоречивых правила:

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

Завалишин советует для обмена данными в общем адресном пространстве (его ОС) использовать безопасные интерфейсы (исключающие деструктивное влияние)

Автор:  Alexey Veselovsky [ Среда, 13 Октябрь, 2010 17:42 ]
Заголовок сообщения:  Re: Единое адресное пространство

Роман М. писал(а):
Мне кажется правильным следить за границами памяти модулей и держать наподобие перечня владений, указывающим за кем числятся данные участки памяти. Причём, никакие модули не должны иметь возможности на него влиять. По мере изменения границ владений (памяти) глобальный менеджер памяти должен регистрировать их в журнале и в случае чего отказать модулю в операции, сказав "Низя! Ишь...".

Один модуль не должен иметь права модифицировать данные другого, а должен только оповестить по какому-нибудь совместному информационному каналу (шине сообщений). Как только второй будет оповещён, он будет "решать" нужна ли ему та информация и действовать соответственно: отправить ответ "получил, спасибо", "не то, повтори-ка" или "кыш, не мешай работать".

Это и есть раздельные кучи. Привет erlang!

Автор:  Alexanbar [ Среда, 13 Октябрь, 2010 21:26 ]
Заголовок сообщения:  Re: Единое адресное пространство

Так может как-нибудь сделать что-то типа того, что делается при открытии файла?
Скажем, файл можно открыть для чтения, для записи и т.д. Может и область памяти нужно тоже открывать с разным типом доступа? Ведь кусок памяти - например, некая переменная - это практически тот же файл.
Скажем, даём доступ к определённому куску только доверенным процессам, причем с разными правами. А ссылки на этот кусок считаем.

Автор:  Илья Ермаков [ Среда, 13 Октябрь, 2010 21:29 ]
Заголовок сообщения:  Re: Единое адресное пространство

Роман М. писал(а):
Мне кажется правильным следить за границами памяти модулей и держать наподобие перечня владений, указывающим за кем числятся данные участки памяти. Причём, никакие модули не должны иметь возможности на него влиять.


Вы это не сделаете для единого объектного пространства. Для изолированных - пожалуйста (когда в одном пространстве не может быть указателей на другое). Software Isolation, как в MS Singularity.

Автор:  Valery Solovey [ Четверг, 14 Октябрь, 2010 11:40 ]
Заголовок сообщения:  Re: Единое адресное пространство

Илья Ермаков писал(а):
Роман М. писал(а):
Мне кажется правильным следить за границами памяти модулей и держать наподобие перечня владений, указывающим за кем числятся данные участки памяти. Причём, никакие модули не должны иметь возможности на него влиять.


Вы это не сделаете для единого объектного пространства. Для изолированных - пожалуйста (когда в одном пространстве не может быть указателей на другое). Software Isolation, как в MS Singularity.
Этого не сделать программно на интелах. Но, по-моему, здесь подменяется одна проблема другой.

Цель - увеличить производительность совместной работы процессов? При переключении процессов имеет место задержка, связанная с переключением контекстов. И кто-то подумал: "да-а, а во времена ДОСа, когда все программы работали в одном адресном пространстве, таких проблем с переключением контекстов не было, и всё работало быстро". И все кинулись пихать программы, в одно адресное пространство. На самом деле я тут утрирую; всё немного не так - ядра ОС всегда так работали и не спешать работать иначе, но в последнее время эта идея стала популярной во многих местах. И тут появилась проблема, которую вы пытаетесь решить: в случае ненадёжных языков порча чужой памяти - обычное дело, а если язык надёжный, то в целях вредительства кому-нибудь будет не в падлу и ручками в бинарнике поковыряться.

Но изначальная цель-то не в том, чтобы процессы нормально работали в едином адресном пространстве. И настоящая проблема звучит так: как увеличить производительность переключения контекстов? Необходимость адресного пространства для меня на уровне ассемблера остаётся под вопросом, а на уровне ЯВУ мы с ним точно дел никаких не имеем. У нас каждая переменная в своём адресном пространстве, и мне кажется, что от пространства адресов мы вообще должны уйти. Тогда, многие регистры, хранящие в данный момент состояние процесса, можно будет упразднить, а программы сделать более гранулированными, что может уменьшить промахи кэша. В общем, очень похоже на работу в едином адресном пространстве.

Автор:  Илья Ермаков [ Четверг, 14 Октябрь, 2010 12:42 ]
Заголовок сообщения:  Re: Единое адресное пространство

Вы тоже забываете о том, что граф ссылок в куче глобален для пространства программы на ЯВУ... "Гранулировать" его - не так просто (хотя и возможно).

Любая проблема, возникшая в каком-то из модулей, может привести к необходимости перезапуска всего объектного пространства. Если же у ОС вообще единое объектное пространство - то к перезапуску узла.

Автор:  Valery Solovey [ Четверг, 14 Октябрь, 2010 13:57 ]
Заголовок сообщения:  Re: Единое адресное пространство

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

Автор:  Valery Solovey [ Четверг, 14 Октябрь, 2010 14:01 ]
Заголовок сообщения:  Re: Единое адресное пространство

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

Автор:  Alexey Veselovsky [ Четверг, 14 Октябрь, 2010 14:06 ]
Заголовок сообщения:  Re: Единое адресное пространство

Илья Ермаков писал(а):
Вы тоже забываете о том, что граф ссылок в куче глобален для пространства программы на ЯВУ...

Смотря какого ЯВУ, если Я не очень ВУ, то да :-)

Автор:  Info21 [ Четверг, 14 Октябрь, 2010 15:01 ]
Заголовок сообщения:  Re: Единое адресное пространство

Alexey Veselovsky писал(а):
Привет erlang!
Почему эрланг? Разве не было процессов с раздельной памятью ещё бог знает когда?

Автор:  Илья Ермаков [ Четверг, 14 Октябрь, 2010 15:12 ]
Заголовок сообщения:  Re: Единое адресное пространство

Alexey Veselovsky писал(а):
Илья Ермаков писал(а):
Вы тоже забываете о том, что граф ссылок в куче глобален для пространства программы на ЯВУ...

Смотря какого ЯВУ, если Я не очень ВУ, то да :-)


Если язык класса универсальных императивных компилируемых.
И без платы за разделение большой цены в виде избыточной сложности.

Автор:  Alexey Veselovsky [ Четверг, 14 Октябрь, 2010 18:03 ]
Заголовок сообщения:  Re: Единое адресное пространство

Илья Ермаков писал(а):
Alexey Veselovsky писал(а):
Илья Ермаков писал(а):
Вы тоже забываете о том, что граф ссылок в куче глобален для пространства программы на ЯВУ...

Смотря какого ЯВУ, если Я не очень ВУ, то да :-)

Если язык класса универсальных императивных компилируемых.
И без платы за разделение большой цены в виде избыточной сложности.

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

Автор:  Илья Ермаков [ Четверг, 14 Октябрь, 2010 19:40 ]
Заголовок сообщения:  Re: Единое адресное пространство

Универсальные = применимые для самого широкого класса задач.
Вообще, формулировки и требования к языку такого класса неплохо сформулированы у Страуструпа в книге "Дизайн и эволюция С++".

Автор:  Сергей Губанов [ Пятница, 15 Октябрь, 2010 10:58 ]
Заголовок сообщения:  Re: Единое адресное пространство

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

Вот, пофантазируйте :wink:, что можно получить если есть техническая возможность в одном и том же виртуальном адресном пространстве иметь приватные и публичные области.

В частности, вредоносная программа может нагадить только в расшареную область памяти.

Автор:  Илья Ермаков [ Пятница, 15 Октябрь, 2010 13:05 ]
Заголовок сообщения:  Re: Единое адресное пространство

Да, маппинг - вещь хорошая, я её когда-то применял.

Воздерживаюсь с тех пор, как пишу приложения сразу для Win и Lin, чтобы модули не требовали перекомпиляции. Там начинаются всякие отличия (под Линуксом ещё не применял), заниматься их экранированием и сокрытием пока было некогда... А понятия типа процесса и "простой" работы с памятью полностью идентичны в разных ОС, они скрываются легко.

Автор:  Alexey Veselovsky [ Пятница, 15 Октябрь, 2010 14:16 ]
Заголовок сообщения:  Re: Единое адресное пространство

Без мапинга невозможно эффективно работать с устройствами. Например с видеокамерами.

PS. Да, linux.

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/