Board.KolibriOS.org

Official KolibriOS board
It is currently Tue May 21, 2019 5:59 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 455 posts ]  Go to page Previous 125 26 27 28 2931 Next
Author Message
PostPosted: Mon Apr 19, 2010 11:16 am 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1328
oops!
Оказывается на svn://programs/develop/fast_call_test лежит с пустыми циклами (реальные вызовы закомментированы)
сегодня прогнал заново - всё как доктор прописал:
SYSENTER - в среднем 180 тактов на вызов,
SYSCALL ~140 тактов
INT40 около 250.
Новый init.inc (без цикла .noPSE) залил на SVN

_________________
Узкий специалист подобен флюсу: полнота его - односторонняя.
Козьма Прутков


Top
   
PostPosted: Wed Apr 21, 2010 11:08 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
А что это за изменения в svn.1454? Цикл в init_page_map вообще-то помечает свободные/занятые физические страницы, а статические физические адреса - это всё до sys_pgmap плюс некоторое количество памяти после (причём, как мне показалось, суммарное количество может и перевалить за 4M - почему я и поставил безопасное значение 0x5FFFF80 для TSS в фиксе svn.1310... хотя, может быть, просто показалось).
И насчёт PSE... DosBox с подходящими настройками может загрузить Колибри, но понятия не имеет про большие страницы. Оно, конечно, понятно, что это явно нецелевое использование dosbox (как следует прямо из названия) и т.д. и т.п., но разве несколько строчек, обрабатывающих случай отсутствия PSE, чем-то мешают?

_________________
Ушёл к умным, знающим и культурным людям.


Top
   
PostPosted: Thu Apr 22, 2010 3:06 am 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1328
diamond
Верхняя граница таблицы страниц (адрес "а") сейчас не определена и действительно может (и будет) вываливаться за линию 4Мб.

ИМХО включение неиспользуемого при инициализации диапазона [a, 4M) в список свободных страниц приводит к ненужному кроссмаппингу и разрыву логически цельной системной области. "Почти тривиальное" страничное преобразование адресов при этом не просто ломается выше "а" - его вообще не существует ни для одной 4К-страницы.

Это, конечно, не смертельно. Только зачем усложнять, когда можно упростить?

Насчет PSE: теперь буду знать что хоть где-то она нужна. Верну назад.

_________________
Узкий специалист подобен флюсу: полнота его - односторонняя.
Козьма Прутков


Top
   
PostPosted: Sat Feb 25, 2012 8:34 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Подниму тему.

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


Top
   
PostPosted: Sat Feb 25, 2012 1:29 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Fri Jun 30, 2006 9:01 am
Posts: 1247
Serge wrote:
Подниму тему.

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


So you mean a new bit wich can be set using function 40, wich the application can use to receive mouse events only when the window is active?
I like it, go for it.

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Top
   
PostPosted: Sat Feb 25, 2012 3:36 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1328
За.
Только надо будет потихоньку все старые приложения тоже переделать, чтоб не дергались.


Top
   
PostPosted: Sat Feb 25, 2012 5:43 pm 
Не все приложения нужно переделывать - некоторым нужна постоянная обработка событий мыши. В целом идею поддерживаю.


Top
   
PostPosted: Sun Feb 26, 2012 8:07 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Новая функция 68.26
Предварительное описание.
eax=68
ebx=26
ecx= адрес блока, созданного ф. 68.12
edx= смещение от начала блока
esi = размер освобождаемой области в байтах
Функция выравнивает смещение на начало страницы и округляет размер до величины кратной размеру страницы.
Существующие функции heap_alloc(68.12) heap_free(68.13) heap_realloc(68.20) используют примитивный алгоритм управления виртуальной памятью приложения и не предназначены для активного использования. heap_unmap(68.26) возвращает ядру неиспользуемые страницы памяти, не удаляя блок созданный heap_alloc(). Сами страницы помечаются как зарезервированные и снова выделяются ядром при первом обращении к ним. Таким образом heap_unmap(68.26) позволяет организовать гибкое управление виртуальной памятью средствами приложения.
Возможен другой вариант реализации, когда функция будет освобождать любую страницу в пределах адресного пространства приложения.


Top
   
PostPosted: Sun Feb 26, 2012 4:50 pm 
Serge wrote:
Значение бита не сохраняется в маске событий, соответственно функция всегда возвращает предыдущее значение маски со сброшенным битом 3.

А почему не сохраняется? Это несколько противоречит политике работы с остальными битами.

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


Top
   
PostPosted: Sun Feb 26, 2012 7:05 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario
Логика уже нарушена, потому что бит 3 соответствует несуществующему событию 4. Изменить значение битов извне невозможно, состояние полностью отслеживается силами приложения. С другой стороны я уже думаю над новой версией. Вместо бита 3 использовать биты 16-17 добавив фильтр по положению курсора за пределами окна.

68.26
1. Да.
2.3 Состояние ничем не отличается от свежесозданного 68.12. Там всё работает точно также. Приложениям в Колибри физическая память всегда выделяется при первом обращении. Точную задержку подсчитать сложно. Это время на поиск страницы в битовой карте и её обнуление. От нескольких тысяч тактов до следующего цикла планировщика если не успели.
4. Собственный менеджер виртуальной памяти если ему требуется работать с большой нагрузкой. Или буфер переменной длины. Например для битмапа. В текущей ситуации браузер или графической редактор с кучей слоёв, масок и историей операций рискуют зависнуть в самый неподходящий момент. 68.26 позволяет возвращать ядру физическую память, которая не нужна в это время и в этом месте. И получать её снова при первой необходимости. Если она ещё осталась у ядра.


Top
   
PostPosted: Sun Feb 26, 2012 7:51 pm 
Т.е. наличие свободной памяти у ядра негарантированно в любом случае. Как же тогда данные о том сколько памяти приложение занимает? Получается с виду оно занимает одно количество памяти, а на само деле занимает меньше. Что будет, когда приложение "ничтоже сумняшеся" пытается записать в виртуально примонтированную страницу данные и ВНЕЗАПНО свободной памяти нет. Какое событие или исключение происходит и обрабатывается ли такая катастрофа вообще?


Top
   
PostPosted: Sun Feb 26, 2012 8:25 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario
Приложение вылетит со страничной ошибкой.


Top
   
PostPosted: Sun Feb 26, 2012 8:31 pm 
Кстати, когда я писал zSea то выяснилось что одному потоку гарантированно выделяется от силы 900 Кб памяти - это можно как то исправить?


Top
   
PostPosted: Sun Feb 26, 2012 8:37 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Почему 900 ? Сколько попросишь, столько и выделится.


Top
   
PostPosted: Sun Feb 26, 2012 8:43 pm 
Упс... я неправильно выразился - 900 Мб конечно же, а не 900 Кб.

Там какое то ограничение с кучей было, мне Евгений так по крайней мере так объяснил. У меня была ситуация когда теоретически выделялось более 1 Гб памяти (вследствие неправильного увеличения данных в 8 раз) но все падало. Ты когда плоскую модель внедрял, то писал что 4=2+2 будет распределение памяти. виртуальной по крайней мере. Как выяснилось практически приложению гарантированно можно рассчитывать на 900 Мб.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 455 posts ]  Go to page Previous 125 26 27 28 2931 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited