Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вс дек 16, 2018 6:28 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 184 сообщения ]  На страницу Пред. 1 2 3 4 5 613 След.
Автор Сообщение
 Заголовок сообщения: Re: Общесистемный буфер обмена
СообщениеДобавлено: Вс окт 18, 2009 3:13 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3952
Mario

Не геморойтесь с расшареной памятью, делайте в ядре. Компактнее, быстрее и намного проще.
Imho буфер обмена это функция оконной системы. Пока она часть ядра буфер тоже должен быть частью ядра.


Вернуться к началу
 Заголовок сообщения: Re: Общесистемный буфер обмена
СообщениеДобавлено: Вс окт 18, 2009 3:28 pm 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Вт янв 15, 2008 11:27 am
Сообщения: 752
Serge писал(а):
Imho буфер обмена это функция оконной системы

а насколько это безопасно?


Вернуться к началу
 Заголовок сообщения: Re: Общесистемный буфер обмена
СообщениеДобавлено: Вс окт 18, 2009 4:12 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3952
Albom

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

Т.е. если это ресурс статический и расшареный только на чтение: шрифт, битмап и т.п. будет работать замечательно, пока сервер не захочет изменить ресурс. Блокировки доступа нет. Единственный выход сделать счётчик версий для динамичных ресурсов и проверять до и после копирования в локальную память процесса.

P.S. Я вообще не вижу безопасного решения для расшареной памяти. Любой процесс с доступом на запись может забить на синхронизацию и прицип "сейчас другой джигит на красный свет ехать будет" не сработает. Джигит может оказаться дальтоником.


Вернуться к началу
 Заголовок сообщения: Re: Общесистемный буфер обмена
СообщениеДобавлено: Вс окт 18, 2009 4:33 pm 
Serge
Цитата:
Imho буфер обмена это функция оконной системы

Я не согласен. Мы взяли курс на уход от принципа "все в ядро".
Буфер обмена не обязан быть частью оконной подсистемы. Он может передавать разные типы данных.
Цитата:
P.S. Я вообще не вижу безопасного решения для расшареной памяти. Любой процесс с доступом на запись может забить на синхронизацию и принцип "сейчас другой джигит на красный свет ехать будет" не сработает. Джигит может оказаться дальтоником.

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

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

З.Ы. Ну, так никто и не ответил - занимается кто-нибудь вопросом?


Вернуться к началу
   
 Заголовок сообщения: Re: Общесистемный буфер обмена
СообщениеДобавлено: Вс окт 18, 2009 4:51 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3952
Mario

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


Вернуться к началу
 Заголовок сообщения: Re: Общесистемный буфер обмена
СообщениеДобавлено: Вс окт 18, 2009 4:59 pm 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Вт янв 15, 2008 11:27 am
Сообщения: 752
Mario писал(а):
Мы взяли курс на уход от принципа "все в ядро".

Да, правильно. Но есть такие вещи, которые неплохо всё же было иметь в ядре... Вот моё сообщение в этой теме от 21 февраля 2008 года:

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

Цитата:
Я вижу это так:
В ebx можно передавать адрес такой структуры:

dd ; номер подфункции (считать, записать)
dd ; тип содержимого (текст, битмап, список файлов)
dd ; объём содержимого в байтах
dd ; адрес, по которому располагаются данные

Список файлов можно сделать как в винде - файлы разделяются нулями, список заканчивается двойным нулём. Работать с таким списком очень удобно. И ещё хочу пояснить, что под словом "битмап" я понимаю файл bmp, а не только данные. Потому что из него можно извлечь размеры и глубину цвета.


Хотя ранее (18 февраля 2008 года) я писал:
Цитата:
по моему мнению, оптимальный вариант - приложение-монитор, выделяющее нужный объём памяти и указывающий какой тип информации хранится в буфере (текст, битмап, список файлов)


Я и сейчас тоже за такую реализацию... Хотя сис. функцию использовать проще :)


Вернуться к началу
 Заголовок сообщения: Re: Общесистемный буфер обмена
СообщениеДобавлено: Вс окт 18, 2009 5:14 pm 
Albom
Цитата:
Хотя сис. функцию использовать проще

Не согласен.
1)Трудозатраты на организацию взаимодействия через системные функции или через такой же код реализованный посредством макроса, приблизительно одинаковы. Только в последнем случае не придется трогать ядро.
2)Плодить баги дешевле на уровне приложения, поскольку вероятность грохнуть всю систему ниже. К тому же при появлении джигита не соблюдающего правила грохнуть и перезапустить поток-сервер отвечающий за механизм буфера обмена проще и быстрее, чем перезагружать всю систему, в которой на этот момент могут работать приложения, работу которых прерывать не желательно.


Вернуться к началу
   
 Заголовок сообщения: Re: Общесистемный буфер обмена
СообщениеДобавлено: Вс окт 18, 2009 5:31 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3952
Mario

В данном случе это будет баг уровня системы. Падающий сервис не намного приятней упавшего ядра.
В худшем случае (не джигит а малолетний долбо... террорист) перезапускать сервер придётся постоянно. Вероятно вместе с задействованными приложениями. Защитить ядро намного проще.


Вернуться к началу
 Заголовок сообщения: Re: Общесистемный буфер обмена
СообщениеДобавлено: Вс окт 18, 2009 6:08 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 19, 2005 4:43 pm
Сообщения: 896
Цитата:
Защитить ядро намного проще.


На аппаратном уровне через страницы или как-то по другому?

_________________
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!


Вернуться к началу
 Заголовок сообщения: Re: Общесистемный буфер обмена
СообщениеДобавлено: Вс окт 18, 2009 6:11 pm 
Serge
Цитата:
Падающий сервис не намного приятней упавшего ядра

Не приятно согласен, но не фатально как в случае с ядром.
Цитата:
В худшем случае (не джигит а малолетний долбо... террорист) перезапускать сервер придётся постоянно. Вероятно вместе с задействованными приложениями.

Таких вещей в системе предостаточно и без этого и даже текущее ядро можно уронить, в большинстве случаев это получается случайно. Дырки то все не исследованы, а даже не все известные заштопаны. А от малолетних и не совсем малолетних долботерористов не застрахованы даже более развитые системы. Единственно реальный выход - жесткий, я бы даже сказал жесточайший, контроль со стороны всего сообщества: раздача бананов и прекращение консультации.
От лобовой атаки значительными силами - брутфорса, ничто не спасает.
Цитата:
Защитить ядро намного проще.

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


Вернуться к началу
   
 Заголовок сообщения: Re: Общесистемный буфер обмена
СообщениеДобавлено: Вс окт 18, 2009 7:03 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3952
andrew_programmer

Ядру проще контролировать указатели и буферы. Досточно проверить таблицы страниц. А как одному приложению проверить другое ? Если я просто читаю память без всяких блокировок и неправильно посчитал размер то будет страничная ошибка и вылет. Сам себе буратино. А если я получил блокировку, даже для галочки, и вылетел ? Галочка останется и все остальные будут ждать. В случае ядра можно тупо поставить cli и скопировать весь буфер. Не айс, но надёжно.

Mario

1)Всёх не забанишь, а дураков и чайников обижать грех.
2)К старым дырам добавится ещё одна, что не радует.
3)Ядро может свободно менять размер буфера, благо прямого доступа к нему приложение не имеет. Хочешь - страница текста, хочешь - снимок экрана. Для расшареной области это невозможно сделать. Надо создавать новую. Очень легко получить законные утечки памяти.


Вернуться к началу
 Заголовок сообщения: Re: Общесистемный буфер обмена
СообщениеДобавлено: Вс окт 18, 2009 7:36 pm 
Serge
Цитата:
а дураков и чайников обижать грех.

Если человек целенаправленно, и отдавая себе отчет в своих действиях, совершает зло, да еще просит советов как это лучше сделать (как получилось с автором "оксюморона"), то какой же это дурак и чайник?
Конечно отследить таких умельцев на начальном этапе сложно, но потом надо стучать по башке изо всех сил.
Цитата:
К старым дырам добавится ещё одна, что не радует.

Так зачем плодить, если можно не плодить.
Возможно мои взгляды поменял Таненбаум, но тем не менее.
Цитата:
Для расшареной области это невозможно сделать. Надо создавать новую. Очень легко получить законные утечки памяти.

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


Вернуться к началу
   
 Заголовок сообщения: Re: Общесистемный буфер обмена
СообщениеДобавлено: Вс окт 18, 2009 7:44 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3952
Mario

То есть приложение должно каждый раз получать новое имя области а потом её открывать ?


Вернуться к началу
 Заголовок сообщения: Re: Общесистемный буфер обмена
СообщениеДобавлено: Вс окт 18, 2009 8:09 pm 
Serge
Почему каждый раз? Только для вставки в буфер обмена.

Для вставки из буфера обмена будет использоваться область текущего указателя для вставки.

Будет одна область указателей размещенная в именованной памяти, которую при желании долботерроиста (или чайника) можно испортить, а можно и не портить, если использовать для работы с буфером макрос. Плюс процесс-сервер будет хранить резервную копию на этот случай в уже недоступной области.

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

И одновременно будет существовать только одна область на запись, из которой в слоты чтения будет перемещаться информация.
По идее для буфера достаточно 16-32 слотов.

Сколько кстати именованных областей может держать ядро?

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


Вернуться к началу
   
 Заголовок сообщения: Re: Общесистемный буфер обмена
СообщениеДобавлено: Вс окт 18, 2009 8:34 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3952
Mario

Как-то громоздко получается. Если делать по Таненбауму то только через IPC. У него на этот случай есть привилегированный вызов для копирования данных между адресными пространствами. В таком варианте можно сделать надежно и относительно просто. А через расшареную память не получится.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 184 сообщения ]  На страницу Пред. 1 2 3 4 5 613 След.

Часовой пояс: UTC+03:00


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

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB