информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медГде водятся OGRыСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Ядро Linux избавляется от российских... 
 20 лет Ubuntu 
 Tailscale окончательно забанила... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] CmosTime != DOSTime 04.10.02 00:13  Число просмотров: 1140
Автор: :-) <:-)> Статус: Elderman
<"чистая" ссылка>
> Доброго времени суток!
> Заметил я такую интересную вещь за компьютерами,
> работающими под PC DOS 7
> Часики сильно отстают на станциях, где работает софт,
> использующий активно функцию времени(даты). Я наблюдал как
> за трое суток часы просто отставали на пять минут...а то
> и на 7 минут. Но стоит станцию перегрузить, как время более
> или мене корректировалось. Создалось впечатление , что PC
> DOS поддерживает свои внутренние часы, которые
> синхронизируются с часами из CMOS только во время загрузки
> операционки...

Наверное так оно и есть (когда грузишься без config.sys & autoexec.bat ДОС говорит Enter new time - видимо тогда и происходит синхронизация)

> Меня интересует - есть ли в этой PC DOS7 (или вообще в
> ОС)"вызовы" "функции" позволяющие синхронизировать эти
> часики?
> (синхронизировать в своём коде через чтение самой смоз
> просьба не предлагать - уже есть)

Можно написать TSR и повесить свой обработчик на функцию работы со временем (21 прерывание), чтобы возвращать правильное время, прочитанное через INT 1Ah/ah=2.
INT 1Ah - System Timer and Clock Services
ah=2 Read Real-Time Clock Time
Это ф-я BIOS, она дожна работать с CMOS напрямую.
<programming>
[C++] CmosTime != DOSTime 03.10.02 15:14  
Автор: AlexKara Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Доброго времени суток!
Заметил я такую интересную вещь за компьютерами, работающими под PC DOS 7
Часики сильно отстают на станциях, где работает софт, использующий активно функцию времени(даты). Я наблюдал как за трое суток часы просто отставали на пять минут...а то и на 7 минут. Но стоит станцию перегрузить, как время более или мене корректировалось. Создалось впечатление , что PC DOS поддерживает свои внутренние часы, которые синхронизируются с часами из CMOS только во время загрузки операционки...а далее по ходу работы системы из-за каких-то пропусков-запретов прерываний эти часы отстают довольно внушительно.
...После недолгих экспериментов действительно обнаружилось, что функции работы со временем (21 прерывание) возращают своё время, отличное от времени, хранящемся в энергонезависимой памяти внутренних часов.
...Время в операционной системе вроде WIN9x так же отстаёт от времени в CMOS...с единствнной разницей, что винда по ходу время от времени свои часы синхронизирует с часами из энергонезависимой памяти (в последнем не уверен - требуется експеримент).

Меня интересует - есть ли в этой PC DOS7 (или вообще в ОС)"вызовы" "функции" позволяющие синхронизировать эти часики?
(синхронизировать в своём коде через чтение самой смоз просьба не предлагать - уже есть)
--
WBR,
AlexKara
[C++] CmosTime != DOSTime 04.10.02 00:13  
Автор: :-) <:-)> Статус: Elderman
<"чистая" ссылка>
> Доброго времени суток!
> Заметил я такую интересную вещь за компьютерами,
> работающими под PC DOS 7
> Часики сильно отстают на станциях, где работает софт,
> использующий активно функцию времени(даты). Я наблюдал как
> за трое суток часы просто отставали на пять минут...а то
> и на 7 минут. Но стоит станцию перегрузить, как время более
> или мене корректировалось. Создалось впечатление , что PC
> DOS поддерживает свои внутренние часы, которые
> синхронизируются с часами из CMOS только во время загрузки
> операционки...

Наверное так оно и есть (когда грузишься без config.sys & autoexec.bat ДОС говорит Enter new time - видимо тогда и происходит синхронизация)

> Меня интересует - есть ли в этой PC DOS7 (или вообще в
> ОС)"вызовы" "функции" позволяющие синхронизировать эти
> часики?
> (синхронизировать в своём коде через чтение самой смоз
> просьба не предлагать - уже есть)

Можно написать TSR и повесить свой обработчик на функцию работы со временем (21 прерывание), чтобы возвращать правильное время, прочитанное через INT 1Ah/ah=2.
INT 1Ah - System Timer and Clock Services
ah=2 Read Real-Time Clock Time
Это ф-я BIOS, она дожна работать с CMOS напрямую.
[C++] CmosTime != DOSTime 03.10.02 21:05  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
> Доброго времени суток!

Хи !

> Заметил я такую интересную вещь за компьютерами,
> работающими под PC DOS 7
> ...

Ну, проверить, обращается ли win (у меня любимая 98) к портам cmos легко: заглянул я в SoftIce, написал:

bpio 70
bpio 71

Пошевелил мышой секунд 10 ... ничего. Дернул часы, тока я год решил установить другой (OK не давил !) - сразу бряк !
Вот так.
А делается (и в сайсе) это через аппартные регистры отладки DRx. Сам не пробовал, но вроде это можно и в чистом досе сделать. Т.е. ставишь в резиденте (ну или просто в проге) такой бряк на cmos и ждешь...

z0 тут как-то пример приводил: он ставил такой бряк прямо из mbr, только на порты винта...
[C++] CmosTime != DOSTime 03.10.02 18:15  
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
<"чистая" ссылка>
Можно самому написать программу синхронизации любого времени по любому и поставить ее запуск в таблицу запуска по расписанию (резидент доя доса).
Может помоч обновление прошивки биоса.
ЦМОС часы ходят сами по себе. Биосовские часы считают прерывания от таймера. ОС может пользоваться биосовскими часами, а может и сама прерывания считать. Может биос в таймер пишет не 65536 а 65535, вот и расхождение можно получить. Это маловероятно, поскольку биосы достаточно отлажены, чтобы в них не было ошибок.
Скорее всего у Вас на основной плате бракованый кварц впаян, не основной (чуть более 14 мегагерц), а часовой (чуть более мегагерца он должен быть). Тут уж прошивки и операционки не помогут - только программа синхронизации.
Хотя есть еще выход - в нулевой канал таймера другое число загнать - меньшее, поскольку часы у Вас отстают. Число подобрать надо будет.
В крайнем случае перепаять кварц или поменять плату.

> Доброго времени суток!
> Заметил я такую интересную вещь за компьютерами,
> работающими под PC DOS 7
> Часики сильно отстают на станциях, где работает софт,
> использующий активно функцию времени(даты). Я наблюдал как
> за трое суток часы просто отставали на пять минут...а то
> и на 7 минут. Но стоит станцию перегрузить, как время более
> или мене корректировалось. Создалось впечатление , что PC
> DOS поддерживает свои внутренние часы, которые
> синхронизируются с часами из CMOS только во время загрузки
> операционки...а далее по ходу работы системы из-за
> каких-то пропусков-запретов прерываний эти часы отстают
> довольно внушительно.
> ...После недолгих экспериментов действительно обнаружилось,
> что функции работы со временем (21 прерывание) возращают
> своё время, отличное от времени, хранящемся в
> энергонезависимой памяти внутренних часов.
> ...Время в операционной системе вроде WIN9x так же
> отстаёт от времени в CMOS...с единствнной разницей, что
> винда по ходу время от времени свои часы синхронизирует
> с часами из энергонезависимой памяти (в последнем не
> уверен - требуется експеримент).
>
> Меня интересует - есть ли в этой PC DOS7 (или вообще в
> ОС)"вызовы" "функции" позволяющие синхронизировать эти
> часики?
> (синхронизировать в своём коде через чтение самой смоз
> просьба не предлагать - уже есть)
> --
> WBR,
> AlexKara
CmosTime != DOSTime 03.10.02 21:17  
Автор: AlexKara Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Можно самому написать программу синхронизации любого
> времени по любому и поставить ее запуск в таблицу запуска
Уже есть.. и по ходу это единственный разумный путь

> Может помоч обновление прошивки биоса.
Не поможет.. это особенность ПС дос - такая же вещь наблюдается на новых материнках, просто при попытке получить значение - ОС даже не додумывается залесть и прочитать это значение из смоса..а берёт эго из каких-то внутренних переменных,которые "идут" по прерыванию от таймера...предварительно проинициализированные при загрузки ОС.

и кварц тут не причём часы в смос идут корректно и сбиваются немного в сторону опаздания после перезагрузки сбивание не происходит если время самой ОС перед перезагрузкой выставить в ровень с часами cmos
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach