Mario
Не геморойтесь с расшареной памятью, делайте в ядре. Компактнее, быстрее и намного проще.
Imho буфер обмена это функция оконной системы. Пока она часть ядра буфер тоже должен быть частью ядра.
Общесистемный буфер обмена
а насколько это безопасно?Serge wrote:Imho буфер обмена это функция оконной системы
Albom
Даже надёжней чем расшареная память. Для неё нужна синхронизация доступа к данным, а в Колибри таких примитивов нет.
Т.е. если это ресурс статический и расшареный только на чтение: шрифт, битмап и т.п. будет работать замечательно, пока сервер не захочет изменить ресурс. Блокировки доступа нет. Единственный выход сделать счётчик версий для динамичных ресурсов и проверять до и после копирования в локальную память процесса.
P.S. Я вообще не вижу безопасного решения для расшареной памяти. Любой процесс с доступом на запись может забить на синхронизацию и прицип "сейчас другой джигит на красный свет ехать будет" не сработает. Джигит может оказаться дальтоником.
Даже надёжней чем расшареная память. Для неё нужна синхронизация доступа к данным, а в Колибри таких примитивов нет.
Т.е. если это ресурс статический и расшареный только на чтение: шрифт, битмап и т.п. будет работать замечательно, пока сервер не захочет изменить ресурс. Блокировки доступа нет. Единственный выход сделать счётчик версий для динамичных ресурсов и проверять до и после копирования в локальную память процесса.
P.S. Я вообще не вижу безопасного решения для расшареной памяти. Любой процесс с доступом на запись может забить на синхронизацию и прицип "сейчас другой джигит на красный свет ехать будет" не сработает. Джигит может оказаться дальтоником.
Serge
Буфер обмена не обязан быть частью оконной подсистемы. Он может передавать разные типы данных.
Ну, если уж на то пошло, что кто-то их не соблюдает, так ведь и система вообще не защищена от злого умысла. Пока что уродских действий больных на голову старателей не наблюдается. Я надеюсь и в дальнейшем таковых не будет.
З.Ы. Ну, так никто и не ответил - занимается кто-нибудь вопросом?
Я не согласен. Мы взяли курс на уход от принципа "все в ядро".Imho буфер обмена это функция оконной системы
Буфер обмена не обязан быть частью оконной подсистемы. Он может передавать разные типы данных.
Все решаемо, структура получится немного сложней, но все будет работать. Джигиты будут соблюдать правила, как и все!P.S. Я вообще не вижу безопасного решения для расшареной памяти. Любой процесс с доступом на запись может забить на синхронизацию и принцип "сейчас другой джигит на красный свет ехать будет" не сработает. Джигит может оказаться дальтоником.
Ну, если уж на то пошло, что кто-то их не соблюдает, так ведь и система вообще не защищена от злого умысла. Пока что уродских действий больных на голову старателей не наблюдается. Я надеюсь и в дальнейшем таковых не будет.
З.Ы. Ну, так никто и не ответил - занимается кто-нибудь вопросом?
Mario
Так опиши алгоритм. Я действительно не вижу относительно простого и безопасного решения. На строгое соблюдение ПДД не надеюсь. И самый законопослушный водитель может заглохнуть на перекрёстке.
Так опиши алгоритм. Я действительно не вижу относительно простого и безопасного решения. На строгое соблюдение ПДД не надеюсь. И самый законопослушный водитель может заглохнуть на перекрёстке.
Да, правильно. Но есть такие вещи, которые неплохо всё же было иметь в ядре... Вот моё сообщение в этой теме от 21 февраля 2008 года:Mario wrote:Мы взяли курс на уход от принципа "все в ядро".
Сделать системную ф-цию было бы хорошо. Потому что тогда работа с буфером будет стандартной и не потребуется дополнительных программ. Но данной реализацией, по моему мнению, должны заниматься разработчики ядра.
Хотя ранее (18 февраля 2008 года) я писал:Я вижу это так:
В ebx можно передавать адрес такой структуры:
dd ; номер подфункции (считать, записать)
dd ; тип содержимого (текст, битмап, список файлов)
dd ; объём содержимого в байтах
dd ; адрес, по которому располагаются данные
Список файлов можно сделать как в винде - файлы разделяются нулями, список заканчивается двойным нулём. Работать с таким списком очень удобно. И ещё хочу пояснить, что под словом "битмап" я понимаю файл bmp, а не только данные. Потому что из него можно извлечь размеры и глубину цвета.
Я и сейчас тоже за такую реализацию... Хотя сис. функцию использовать прощепо моему мнению, оптимальный вариант - приложение-монитор, выделяющее нужный объём памяти и указывающий какой тип информации хранится в буфере (текст, битмап, список файлов)
Albom
1)Трудозатраты на организацию взаимодействия через системные функции или через такой же код реализованный посредством макроса, приблизительно одинаковы. Только в последнем случае не придется трогать ядро.
2)Плодить баги дешевле на уровне приложения, поскольку вероятность грохнуть всю систему ниже. К тому же при появлении джигита не соблюдающего правила грохнуть и перезапустить поток-сервер отвечающий за механизм буфера обмена проще и быстрее, чем перезагружать всю систему, в которой на этот момент могут работать приложения, работу которых прерывать не желательно.
Не согласен.Хотя сис. функцию использовать проще
1)Трудозатраты на организацию взаимодействия через системные функции или через такой же код реализованный посредством макроса, приблизительно одинаковы. Только в последнем случае не придется трогать ядро.
2)Плодить баги дешевле на уровне приложения, поскольку вероятность грохнуть всю систему ниже. К тому же при появлении джигита не соблюдающего правила грохнуть и перезапустить поток-сервер отвечающий за механизм буфера обмена проще и быстрее, чем перезагружать всю систему, в которой на этот момент могут работать приложения, работу которых прерывать не желательно.
Mario
В данном случе это будет баг уровня системы. Падающий сервис не намного приятней упавшего ядра.
В худшем случае (не джигит а малолетнийдолбо... террорист) перезапускать сервер придётся постоянно. Вероятно вместе с задействованными приложениями. Защитить ядро намного проще.
В данном случе это будет баг уровня системы. Падающий сервис не намного приятней упавшего ядра.
В худшем случае (не джигит а малолетний
На аппаратном уровне через страницы или как-то по другому?Защитить ядро намного проще.
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!
Kolibri is best operation system in the world!
Serge
От лобовой атаки значительными силами - брутфорса, ничто не спасает.
Не приятно согласен, но не фатально как в случае с ядром.Падающий сервис не намного приятней упавшего ядра
Таких вещей в системе предостаточно и без этого и даже текущее ядро можно уронить, в большинстве случаев это получается случайно. Дырки то все не исследованы, а даже не все известные заштопаны. А от малолетних и не совсем малолетних долботерористов не застрахованы даже более развитые системы. Единственно реальный выход - жесткий, я бы даже сказал жесточайший, контроль со стороны всего сообщества: раздача бананов и прекращение консультации.В худшем случае (не джигит а малолетний долбо... террорист) перезапускать сервер придётся постоянно. Вероятно вместе с задействованными приложениями.
От лобовой атаки значительными силами - брутфорса, ничто не спасает.
В том то и дело что если делать реализацию через ядро, то я сомневаюсь, что у меня хватит знаний о ядре, на реализацию полноценного буфера - только на один слот, с возможностью записи для всех. А вот для потока-сервиса я мог бы извернуться.Защитить ядро намного проще.
andrew_programmer
Ядру проще контролировать указатели и буферы. Досточно проверить таблицы страниц. А как одному приложению проверить другое ? Если я просто читаю память без всяких блокировок и неправильно посчитал размер то будет страничная ошибка и вылет. Сам себе буратино. А если я получил блокировку, даже для галочки, и вылетел ? Галочка останется и все остальные будут ждать. В случае ядра можно тупо поставить cli и скопировать весь буфер. Не айс, но надёжно.
Mario
1)Всёх не забанишь, а дураков и чайников обижать грех.
2)К старым дырам добавится ещё одна, что не радует.
3)Ядро может свободно менять размер буфера, благо прямого доступа к нему приложение не имеет. Хочешь - страница текста, хочешь - снимок экрана. Для расшареной области это невозможно сделать. Надо создавать новую. Очень легко получить законные утечки памяти.
Ядру проще контролировать указатели и буферы. Досточно проверить таблицы страниц. А как одному приложению проверить другое ? Если я просто читаю память без всяких блокировок и неправильно посчитал размер то будет страничная ошибка и вылет. Сам себе буратино. А если я получил блокировку, даже для галочки, и вылетел ? Галочка останется и все остальные будут ждать. В случае ядра можно тупо поставить cli и скопировать весь буфер. Не айс, но надёжно.
Mario
1)Всёх не забанишь, а дураков и чайников обижать грех.
2)К старым дырам добавится ещё одна, что не радует.
3)Ядро может свободно менять размер буфера, благо прямого доступа к нему приложение не имеет. Хочешь - страница текста, хочешь - снимок экрана. Для расшареной области это невозможно сделать. Надо создавать новую. Очень легко получить законные утечки памяти.
Serge
Конечно отследить таких умельцев на начальном этапе сложно, но потом надо стучать по башке изо всех сил.
Возможно мои взгляды поменял Таненбаум, но тем не менее.
Если человек целенаправленно, и отдавая себе отчет в своих действиях, совершает зло, да еще просит советов как это лучше сделать (как получилось с автором "оксюморона"), то какой же это дурак и чайник?а дураков и чайников обижать грех.
Конечно отследить таких умельцев на начальном этапе сложно, но потом надо стучать по башке изо всех сил.
Так зачем плодить, если можно не плодить.К старым дырам добавится ещё одна, что не радует.
Возможно мои взгляды поменял Таненбаум, но тем не менее.
Согласен. Но можно выйти из положения организовав кольцевую очередь буферов, рано или поздно потерянный участок будет ликвидирован. Тем более что все именованные области будут выделяться процессом-сервером. Плюс к процессу-серверу можно будет оформить графическую часть, которая позволит вручную чистить буфер при необходимости.Для расшареной области это невозможно сделать. Надо создавать новую. Очень легко получить законные утечки памяти.
Mario
То есть приложение должно каждый раз получать новое имя области а потом её открывать ?
То есть приложение должно каждый раз получать новое имя области а потом её открывать ?
Serge
Почему каждый раз? Только для вставки в буфер обмена.
Для вставки из буфера обмена будет использоваться область текущего указателя для вставки.
Будет одна область указателей размещенная в именованной памяти, которую при желании долботерроиста (или чайника) можно испортить, а можно и не портить, если использовать для работы с буфером макрос. Плюс процесс-сервер будет хранить резервную копию на этот случай в уже недоступной области.
В области указателей будут хранится ссылки на существующие слоты буфера обмена. В каждом слоте (который является независимой именованной областью, открытой только на чтение) может хранится произвольное содержимое в соответствии с указателями контейнера.
И одновременно будет существовать только одна область на запись, из которой в слоты чтения будет перемещаться информация.
По идее для буфера достаточно 16-32 слотов.
Сколько кстати именованных областей может держать ядро?
В общем шибко подробную модель я еще не продумывал, потому что не знаю - может уже кто-то работал над подобным. Если никто не отзовется то возьмусь.
Почему каждый раз? Только для вставки в буфер обмена.
Для вставки из буфера обмена будет использоваться область текущего указателя для вставки.
Будет одна область указателей размещенная в именованной памяти, которую при желании долботерроиста (или чайника) можно испортить, а можно и не портить, если использовать для работы с буфером макрос. Плюс процесс-сервер будет хранить резервную копию на этот случай в уже недоступной области.
В области указателей будут хранится ссылки на существующие слоты буфера обмена. В каждом слоте (который является независимой именованной областью, открытой только на чтение) может хранится произвольное содержимое в соответствии с указателями контейнера.
И одновременно будет существовать только одна область на запись, из которой в слоты чтения будет перемещаться информация.
По идее для буфера достаточно 16-32 слотов.
Сколько кстати именованных областей может держать ядро?
В общем шибко подробную модель я еще не продумывал, потому что не знаю - может уже кто-то работал над подобным. Если никто не отзовется то возьмусь.
Mario
Как-то громоздко получается. Если делать по Таненбауму то только через IPC. У него на этот случай есть привилегированный вызов для копирования данных между адресными пространствами. В таком варианте можно сделать надежно и относительно просто. А через расшареную память не получится.
Как-то громоздко получается. Если делать по Таненбауму то только через IPC. У него на этот случай есть привилегированный вызов для копирования данных между адресными пространствами. В таком варианте можно сделать надежно и относительно просто. А через расшареную память не получится.
Who is online
Users browsing this forum: No registered users and 0 guests