1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

RTC баг на многоядерном ядре Windows XP

Тема в разделе "WASM.SOFTWARE", создана пользователем xpmod21, 30 май 2021.

Статус темы:
Закрыта.
  1. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.642
    xpmod21,

    > Кто-нибудь может придумать патч ядра, дабы держать предделитель RTC таймера на тике 1 мс

    Не проблема, его читает не ядро а уровень абстракций, железки порты I/O HalQueryRealTimeClock(), пропатчи делов то.
    --- Сообщение объединено, 6 ноя 2021 ---
    Rel,

    Ты барыга натуральный публикацию заказную школьную запилил за шекель.
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.442
    Да-да, дружище, барыга - значит барыга, главное, чтобы ты был счастлив.
     
  3. xpmod21

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    Так сделай, пожалуйста.
    Желательно за основу взять HAL.DLL со сборки "интеграл эдишен", чтобы иметь решение на самой последней версии.
     
  4. Artem_N

    Artem_N Artem N

    Публикаций:
    0
    Регистрация:
    1 мар 2009
    Сообщения:
    55
    В смысле бесплатно сделать? :grin:
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.442
    Ну так Индий - не барыга же, как я и другие, Индий должен бесплатно сделать.
     
    Artem_N нравится это.
  6. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.374
    ТС писал на клабе, что настоящие программисты делают бесплатно. А кто за деньги, тот нуб и шарлатан. Пруфы лень искать.
    --- Сообщение объединено, 8 ноя 2021 ---
    на тему совместимости https://wasm.in/threads/novye-vozmozhnosti-nt6-i-vyshe.34412/
     
  7. xpmod21

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    Инди может сделает (или не сделает), но это специалист который может сделать!

    А вот тройка звездунов: Rel, Artem_N, M0rg0t - ни на что не способна, окромя звездеть на форумах... Чисто теоретики, без малейшей практики в впрограммировании, не говоря уже о реверсе.
     
  8. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.547
    Я так тонко намекну, что крелк падок на пиво и за него способен продаться.
     
  9. ormoulu

    ormoulu Active Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    756
    За белорусское пиво многие продадутся :drinks:

    ЗЫ: что, пиво теперь входит в набор ЗОЖ и никак не аффектит тело 20летнего?
     
  10. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.442
    Да, я помню, что он так забухал на 23 февраля, что даже свой визор не смог запустить. Хотя может это - всего лишь отмазка была, и он просто долго раскручивал семпл руками, без своей хваленой автоматики.
     
  11. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.374
    ormoulu,

    [​IMG]
    --- Сообщение объединено, 8 ноя 2021 ---
    mak нормальный чел, но те два петуха неясно кто. Какие-то хрены с горы, которые воспользовались ситуёвиной и украли форум.
    и да, никакие менты и фсб старый ехелаб не покупали, просто надо было по уму написать; а то параноики испугались и побежали хз куда. Теперь уж что. Интересно только куда пропал бедгай, неужто умер от короны?
     
    Indy_ нравится это.
  12. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.442
    Как это не ясно? Аверы и менты же...
     
  13. xpmod21

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    Indy_,

    Возьметесь или нет?
    Нужна ясность.
     
  14. Artem_N

    Artem_N Artem N

    Публикаций:
    0
    Регистрация:
    1 мар 2009
    Сообщения:
    55
    Инде, не ведись! Любая работа должна быть оплачена.
     
  15. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.442
    Инде, ведись, ты же не барыга, как остальные, ты должен бесплатно это сделать, особенно после такого "прогиба":
     
    M0rg0t нравится это.
  16. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.642
    Надо бы вначале эксперимент провести, прочитать SYSTEM_SET_TIME_ADJUST_INFORMATION.Enable, затем поменять и проследить за временем. Есть софт таймер который апдейтит время из cmos часов, с одной секундой тикает.
     
  17. xpmod21

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    Насколько я понимаю, данный функционал находится в файле HAL.DLL.
    Если сбросите патченые версии - готов тестировать!
    Софт, отображающий интервал таймера (в онлайне) написан.
    Весь софт, с исходниками - в 1 посте данной темы.
     
  18. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.442
    Ну чего там, Индий, как продвигается небарыжная работа на ТСа? Отреверсил уже, пропатчил?
     
  19. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.642
    Rel,

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

    xpmod21,

    Какой есчо хал, не можешь собрать юзер апп в несколько строк ?

    ZwQuerySysInfo(SYSTEM_Q/S_TIME_ADJUST_INFORMATION), затем счётчики смотри что там с часами. Опция выключает синхрон с железкой(а есчо это с лицензией связано на ось), перемення такая есть благо сурки KeTimeSynchronization. Вначале я бы это посмотрел. Вот только у меня есть одна сборка на вирте xp и тестить это на вирт железе совершенно бессмысленно. Там CPUID маска опциями задаётся и тп.
     
    Последнее редактирование: 10 ноя 2021
  20. xpmod21

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    А точно ли баг в HAL.DLL? Может он таки в ехе-шнике?

    Мы точно знаем, что есть 2 варианта ядра - однопроцессорное и мультипроцессорное. На однопроцессорном ядре баг - не проявляется! Только на многопроцессорном!

    Можно ли подсмотреть реализацию и перетянуть в многопроцессорное ядро.
    --- Сообщение объединено, 11 ноя 2021 ---
    ВСЁ ИЗВЕСТНОЕ НА ДАННЫЙ МОМЕНТ ОДНИМ ПОСТОМ....

    Уход времени "вперёд" на многоядерных процессорах под Windows XP

    При использовании Windows XP на современных материнских платах обнаружился досадный глюк - системное время уходит вперёд, причем степень ухода зависит от активности работы ПК и может набегать до 5 минут в день. Проблема проявляется только в Windows XP. На выключенном ПК, под UEFI/BIOS или в современной ОС - время идет правильно. Хотя часовая микросхема RTC должна быть независимой частью, но на современных материнских платах это не так. Исследование показало, что уход часов "вперед" происходит при постоянном переключении периода системного таймера 16 мс в 1 мс и обратно. В Windows XP (по умолчанию) этот таймер работает с периодом 16 мс и если на ПК не проявлять активности - то системный таймер продолжит работать с периодом 16 мс. Но при запуске Хрома или мультимедиа приложений, таймер переключается в режим работы с периодом 1 мс и может возвращаться на 16 мс. При жестко установленном периоде 16 мс (или 1 мс) время идет точно, но при постоянном переключении таймера 16 мс - 1 мс - 16 мс - 1 мс происходит сбой в работе часов реального времени RTC.

    Решение проблемы:
    Поскольку специалисты с Win-Raid не смогли разобраться с причиной данной проблемы, то "красивого" решения (на уровне патча системных файлов) по состоянию на 3 января 2021 года ещё не появилось. Имеющиеся правленые файлы hal.dll и intelppm.sys решают какую-то другую проблему с таймерами, но описанный глюк никак не влияют. Зато мы имеем "костыльное" решение - программа Timer_Fix с исходным кодом, написанная на Visual Studio 6.0. Программа не имеет интерфейса, после запуска она переведет системный таймер на период 1 мс и оставит его неизменным, программа постоянно висит в процессах до перезагрузки ОС. Для завершения работы (в случае необходимости) нужно просто прибить процесс Timer_Fix.exe через "Диспетчер задач". Для удобства лучше положить данную программу в "Автозагрузку" и напрочь забыть о проблеме с уходом времени. Каких-либо косяков от использования данного метода не обнаружено. В целом, данный фикс можно считать "костыльным", но ничего лучшего на данный момент нет.

    Скачать - https://www.upload.ee/files/13002205/Soft_Control_Time.zip.html или https://yadi.sk/d/KpTGDPITsNWn7w

    Программа демонстрации RTC bug (программа накрутки времени):

    RTC_bug_demonstrations\Timer_v10\Timer_src_BCB6.0 - исходные коды программы
    RTC_bug_demonstrations\Timer_v10\timeBeginPeriod.exe
    RTC_bug_demonstrations\Timer_v10\timer.exe

    Разработчик программы - женщина-программист Xenia.

    Данная программа служит для наглядной демонстрации проблемы с RTC таймером. Она устанавливает период системного таймера 1 мс (0.977 мс) выдерживает 0.2 секунды, устанавливает 16 мс (15.625 мс) выдерживает 0.2 секунды и далее продолжает переключать системный таймер с заданными длительностями. Программа состоит из 2-х частей:
    1. timeBeginPeriod.exe - консольная программа для установки режима таймера. Заданный режим (период и длительность) передаётся в параметрах командной строки. Программа представлена с исходным кодом на Borland C++ Builder 6.0.
    2. timer.exe - это GUI интерфейс для timeBeginPeriod.exe. В графическом режиме можно задать период 1, длительность 1 и период 2, длительность 2 работы системного таймера. Программа представлена с исходным кодом на Borland C++ Builder 6.0.
    Важно!!! Для корректной работы timeBeginPeriod.exe и timer.exe должны находиться рядом, в одной директории.

    [​IMG]

    Проверка RTC-bug:
    1. Проверку производим на свежезагруженной системе, без выполняющихся фоновых задач. Все фоновые процессы должны быть закрыты, поскольку они могут удерживать таймер на 1 мс, что помешает работе демонстрационной программы.
    2. Запускаем Clockres - программу для контроля периода системного таймера. Измеренный период должен = 15.625 мс
    3. Запускаем CPU-Z, переходим на закладку About, нажимаем кнопку Timers и кнопку Start, чтобы контроллировать частоты системных таймеров
    4. Запускаем timer.exe. Устанавливаем режимы Период 1 = 1 мс, Длительность 1 = 0,2 секунды, Период 2 = 16 мс, Длительность 2 = 0,2 секунды и нажимаем кнопку Start. Эти режимы заданы режимами по-умолчанию.
    5. В установленном режиме (по-умолчанию) будет происходить "накрутка" времени RTC таймера приблизительно +2 секунды за 1 минуту работы программы. При Длительности = 0.1 секунда, накрутка времени будет составлять +4 секунды за 1 минуту.

    Состав архива:
    Clockres - программа для контроля периода системного таймера
    CPU-Z - в закладке About, кнопка Timers можно контроллировать частоты системных таймеров
    Neutron 1.07 - программа для контроля и синхронизации времени через интернет
    Timer_Fix (с исходным кодом) - фикс проблемы с уходом времени вперед (устанавливает таймер на 1мс)
    Timer_v10 (с исходным кодом) - программа накрутки времени, для демонстрации проблемы

    Скачать (2 МБ) - https://www.upload.ee/files/13095203/RTC_bug_demonstrations.zip.html

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

    [​IMG]

    Скачать Timer_Interval_v4 (с исходным кодом) - https://www.upload.ee/files/13142806/Timer_Interval_v4.zip.html
     
Статус темы:
Закрыта.