Привет всем.
Как и обещал ранее, сообщаю текущее положение с проектом на конец 2025 года.
Инфа идет в последовательности, что пришлось делать по ходу реализации проекта с последнего моего поста здесь:
1. Сервисы Винды и его драйверы при обращении к функции выделения памяти иногда требовали выравнивания памяти выровненной в 0 по младшему word адресу. При игнорировании этого требования случались глюки в работе эмулятора.
Пришлось добавить опцию в функции 68,12 - (установка 31 бита у размера позволяет получить адрес памяти выровненный в 0 по младшему word) и разбираться с принципом\алгоритмом работы функции в ядре Колибри по выделении страниц памяти.
2. Так как эмулятору приходится интенсивно выделять именованную память для межпроц взаимодействий, и вследствие чего занимать много страниц памяти, сделано изменение в логике функции 68,22(23) выделения\освобождения именованной памяти — Теперь все хэндлы именованной памяти в процессе привязываются к главному потоку процесса. В следствие чего, все потоки в одном процессе имеют одинаковый адрес межпроцессной именованной памяти, что позволяет сэкономить страницы памяти и уменьшить нагрузку на чипсет.
3. Когда explorer.exe отрисовал рабочий стол Винды со всеми визуальными элементами то выяснилось, что у меня это занимает в ДВА раза больше времени чем у оригинала Винды!!!

Несмотря на то, что Колибри и эмулятор работают под ассемблером, а оригинал под более медленным Си (с километрами кода).
Мне пришлось решать проблему медленности инициации рабочего стола Винды у эмулятора (иначе пропадает смысл в этом проекте по изготовлению продукта ускорения работы Винды), в частности:
3а) пересматривать алгоритмы и оптимальность работы процедур.
3б) распараллеливать загрузку сервисов Винды при инициации.
И все это пришлось переделывать три раза.

При каждом разе время загрузки рабочего стола эмулятором сокращалось на 15-20 сек.
Причем применение приоритетов потоков помогало не сильно — в среднем скидывало дополнительно 2-3 сек.
В итоге добился скорости загрузки\отображения рабочего стола Винды в два и более раза быстрее чем у оригинала.
4. В ходе мероприятий по оптимизации загрузки (см. п.3) применил придуманный мной принцип с рабочим названием -
ТриЭР (Распределение Разделяемых Ресурсов) для функции выделения\освобождения небольших кусков памяти при многопоточной работе приложений.
Я гуглил в инете по поиску реализации что-то подобного — не нашел. Если кто найдет — напишите здесь. Мне будет интересно почитать.
По классике у многопоточных приложений:
При обращении «рабочего потока» (РП) к «блоку кучи памяти» (БКП) для получения\освобождения, то РП ждет освобождения ресурса для монопольного доступа.
В моем случае:
Для получения памяти «рабочим потоком» (РП):
а) РП ищет в связанном списке БКП первый свободный БКП и получает память из кучи от этого БКП.
б) Если все БКП заняты то РП создает новый БКП с минимальным размером и получает память от нового БКП.
При попытке освободить память "рабочим потоком" (РП):
а) РП обращается к БКП, от которого ранее получил память, и если БКП свободен, то РП сразу освободит память.
б) Если БКП занят, то РП отправляет «потоку обработчику заданий» (ПОЗ) запрос на освобождение памяти и сразу уходит по своим делам.
в) Когда придет очередь работе ПОЗ, то они освобождают память по полученным заданиям от РП.
В Свою очередь «потоком-контролером» (ПоК):
1) БКП периодически проверяются ПоК на занятость. Если БКП свободен и не использовался более 10 сек., то ПоК освобождает БКП (удаляет из списка БКП).
2) Число «потоков обработчиков заданий» (ПОЗ) динамически меняется в зависимости от нагрузки:
- Если ПоК определит занятость всех ПОЗ, то он автоматом запустит новый поток ПОЗ (если не превышает лимита максимального числа ПОЗ)
- Если ПОЗ не найдет себе работу в течение 5-10 сек., то он сам автоматически закроется, если общее число ПОЗ более 2х.
При реализации вышеизложенных алгоритмов метода
ТриЭР на языках высокого уровня ( на языке Си и прочие..) получится много километров кода и положительный эффект может быть неоднозначным.
Но если это реализовать на ассемблере, то буквально пары-тройки десятка дополнительных строк ассемблерного кода вполне достаточно, чтобы реализовать эти все алгоритмы.
5. На текущий момент идет процесс отладки генерации звука при отображении рабочего стола Винды и решается проблема с отображением в трее рабочего стола Винды иконки динамика.
6. После решения вышеизложенной проблемы со скоростью отображения рабочего стола Винды (см. п. 3) пришел к выводу, что нужно также немедленно решить вопрос с мультипроцесорностью (МП) ядра Колибри, для реализации этого проекта.
Потому-что в будущем получится такая ситуация:
Если юзер, который ничего не знает о проекте Колибри, из любопытства попытается запустить у себя на компе (8-32 процессорном) мой эмулятор, то юзер может не заметить повышения скорости загрузки рабочего стола Винды, так как Колибри использует только 1 процессор для работы.
И в итоге, у юзера будет разочарование от знакомства с проектом Колибри и с моим эмулятором..
Поэтому, мне придется в приоритетном порядке реализовать МП у ядра Колибри, прежде чем далее работать с эмулятором под Win7 -Win11.
Тем более, заодно нужно решить проблему ограничения общего числа потоков у Колибри (255 потоков), так как уже на пиках работы эмулятора общее число потоков превышает 190
(Также придется патчить прогу отладчик WinDbg, так как отладчик оперирует с ID потока размером в word а не dword)
В итоге, ближайшие скорректированные планы по этому проекту:
1.) Доделать демонстрационный вариант эмулятора. Демонстрационный вариант эмулятора это - Показ рабочего стола Винды и показ формы учетной записи, при клике на кнопку "ПУСК", и все.
(Примечание: Если зарегено несколько учетных записей у Винды, то эмулятор выберет учетную запись с наименьшими правами.)
Готовый результат планируется выложить здесь в виде файла для тестинга желающими: с ядром Колибри v.2 и эмулятором под Win XP v2
2.) Переделка ядра Колибри под неограниченное число потоков и патчинг отладчика WinDbg.
3.) Реализация МП в ядре Колибри. После тестирования результат выложу здесь для желающих потестить : файл с МП ядром Колибри v.2 и эмулятором под Win XP v2.
4.) Далее по плану работа с эмулятором под версии Win7 -Win11.
В завершение Поздравляю всех с наступающим 2026м Новым Годом!! Всем благ и добра
