OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 18 Сентябрь, 2019 03:58

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Единое адресное пространство
СообщениеДобавлено: Вторник, 12 Октябрь, 2010 22:41 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9139
Откуда: Россия, Орёл
Пришедшая "из лабораторий", многих захватила идея ОС с единым адресным пространством и языковой защитой.

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

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

В частности:

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Среда, 13 Октябрь, 2010 08:33 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Для второго случая достаточно просто раздельных куч при общем адресном пространстве. Живой пример -- erlang. Это в принципе на уровне языка просто сделать, или даже библиотек.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Среда, 13 Октябрь, 2010 11:28 
Аватара пользователя

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Среда, 13 Октябрь, 2010 15:52 
Аватара пользователя

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1162
Откуда: Tel-Aviv
Мне кажется правильным следить за границами памяти модулей и держать наподобие перечня владений, указывающим за кем числятся данные участки памяти. Причём, никакие модули не должны иметь возможности на него влиять. По мере изменения границ владений (памяти) глобальный менеджер памяти должен регистрировать их в журнале и в случае чего отказать модулю в операции, сказав "Низя! Ишь...".

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Среда, 13 Октябрь, 2010 16:15 
Аватара пользователя

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


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

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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Среда, 13 Октябрь, 2010 17:42 

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Среда, 13 Октябрь, 2010 21:26 
Аватара пользователя

Зарегистрирован: Суббота, 06 Декабрь, 2008 22:59
Сообщения: 246
Откуда: Волгоградская обл.
Так может как-нибудь сделать что-то типа того, что делается при открытии файла?
Скажем, файл можно открыть для чтения, для записи и т.д. Может и область памяти нужно тоже открывать с разным типом доступа? Ведь кусок памяти - например, некая переменная - это практически тот же файл.
Скажем, даём доступ к определённому куску только доверенным процессам, причем с разными правами. А ссылки на этот кусок считаем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Среда, 13 Октябрь, 2010 21:29 
Модератор
Аватара пользователя

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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Четверг, 14 Октябрь, 2010 11:40 

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


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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Четверг, 14 Октябрь, 2010 12:42 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9139
Откуда: Россия, Орёл
Вы тоже забываете о том, что граф ссылок в куче глобален для пространства программы на ЯВУ... "Гранулировать" его - не так просто (хотя и возможно).

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Четверг, 14 Октябрь, 2010 13:57 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Не совсем понимаю. Если нужно выгрузить библиотеку, то все используемые приложения придётся закрыть. Так происходит в любой системе, если библиотека используется приложением напрямую.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Четверг, 14 Октябрь, 2010 14:01 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
И на всякий случай ещё раз скажу, что я против единого пространства. Я за пространства, где переключение контекстов минимально сказывается на производительности.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Четверг, 14 Октябрь, 2010 14:06 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Илья Ермаков писал(а):
Вы тоже забываете о том, что граф ссылок в куче глобален для пространства программы на ЯВУ...

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Четверг, 14 Октябрь, 2010 15:01 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8174
Откуда: Троицк, Москва
Alexey Veselovsky писал(а):
Привет erlang!
Почему эрланг? Разве не было процессов с раздельной памятью ещё бог знает когда?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Четверг, 14 Октябрь, 2010 15:12 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9139
Откуда: Россия, Орёл
Alexey Veselovsky писал(а):
Илья Ермаков писал(а):
Вы тоже забываете о том, что граф ссылок в куче глобален для пространства программы на ЯВУ...

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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Четверг, 14 Октябрь, 2010 18:03 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Илья Ермаков писал(а):
Alexey Veselovsky писал(а):
Илья Ермаков писал(а):
Вы тоже забываете о том, что граф ссылок в куче глобален для пространства программы на ЯВУ...

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Четверг, 14 Октябрь, 2010 19:40 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9139
Откуда: Россия, Орёл
Универсальные = применимые для самого широкого класса задач.
Вообще, формулировки и требования к языку такого класса неплохо сформулированы у Страуструпа в книге "Дизайн и эволюция С++".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Пятница, 15 Октябрь, 2010 10:58 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
В Windows с помощью механизма называемого "отображение файла в память" можно сделать так, чтобы одновременно у нескольких процессов определённые части их виртуальных адресных пространств соответствовали одной и той же области физической памяти. Обмен объектами сообщений между такими процессами может осуществляться без копирования, просто объект сообщения надо размещать в "публичной" области адресного пространства.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Пятница, 15 Октябрь, 2010 13:05 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9139
Откуда: Россия, Орёл
Да, маппинг - вещь хорошая, я её когда-то применял.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Единое адресное пространство
СообщениеДобавлено: Пятница, 15 Октябрь, 2010 14:16 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Без мапинга невозможно эффективно работать с устройствами. Например с видеокамерами.

PS. Да, linux.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB