Как стать автором
Обновить

Комментарии 28

Так почему же «не все так просто?»
Вау! Честно говоря я всегда удивлялся утверждению о том, что с GPS можно получить очень точное время.
RS-232 медленный, строки длинные, передаются асинхронно! Теперь яснее.
Однако не всё так просто. Дело в том, что ни Windows ни Linux не являются системами RealTime.
А, значит, обработать фронт сигнала синхронно будет не просто. Если не невозможно…
Буду с интересом ждать практики.
При желании к этому можно очень близко приблизится.
Есть RealTime приоритеты, прерывания, специальные версии ядра…
Вообще-то я 24 года занимаюсь RealTime.
Цитирую:
Stratum 1 — получают точное время непосредственно от источника точного времени: атомных часов (..., точность — трилионные доли секунды) или GPS (… точность — миллиардные доли секунды).… CDMA (миллионные доли секунды).
Вы уверенны что всё так просто?
В точности времени источника — уверен. Тут не говорится о потерях на интерфейс/обработку в системе.
Аааа… т.е. точность сигнала от сервера значительно хуже? Тогда ОК
Да, с NTP сервера снимать время точнее чем 0.1мс малореально в самых лучших условиях.
В Linux PPS работает через специальный PPSAPI, предназначенный как раз для снижения этих погрешностей.
Цитата:
The driver includes extensive signal sanity checks and grooming algorithms. A range gate and frequency discriminator reject noise and signals with incorrect frequency. A multiple-stage median filter rejects jitter due to hardware interrupt and operating system latencies. A trimmed-mean algorithm determines the best time samples. With typical workstations and processing loads, the incidental jitter can be reduced to a few microseconds.

т.е. точность «few microseconds»? Тогда да. Но вроде в первой статье говорилось о более высокой точности…
Там было " Наносекунды + точность интерфейса (RS-232)"
habrahabr.ru/blogs/sysadm/79629/#comment_2333406
Видимо нужно ещё добавить "+ интерфейс OS"
Мне всегда казалось, что когда разделяют на realtime/не realtime, имеют в виду планировщик задач ОС. Если же внешнее устройство генерирует прерывание, в котором и происходит вся работа, то не очень важно, realtime система или нет. А по спецификации 16550, он генерирует прерывание в пределах 250нс от фронта CTS.
realtime/не realtime это планировщик НО НЕ ТОЛЬКО. это ещё и время реакции на событие, например. и правильная буферизация, быстрый захват и освобождение ресурсов, синхронизация…
Не realtime системы, например, часто из-за своей низкой реактивности пропускают(теряют)(!) прерывание вообще. Приходилось-ли Вам двигать мышку и/или стучать по клавишам без всякой реакции системы? не надо отвечать — вопрос риторический…
быстрый планировщик и, как следствие, малое время переключения тасков — лишь малая часть проблем.
Ошибаетесь. Операционная система реального времени не имеет никакого отношения к скорости выполнения. Она просто гарантирует что любая задача будет выполнена за константное время.

Иногда это достигается путём замедления. Если бы вам гарантировали что подвинут мышку за 1(одну) секунду на 1(один) пиксель и всегда двигали мышку с такой и только такой скоростью, не медленнее и не быстрее, то это и была бы операционная система реального времени.
В теории Вы правы, это называется детерминированность, я добавил здесь

А вот это «Операционная система реального времени не имеет никакого отношения к скорости выполнения.» уже… назовём это неувязочкой. Это Вы теории перечитали. По определению — не имеет, а в реальной жизни это весьма важный параметр… бОльшая часть моих доходов сегодня — как раз борьба за скорость выполнения в Real Time системах.
Вы о чём-то другом. Я говорю что погрешность вносимая в PPS UART — порядка 1мкс, а реакция на аппаратные прерывания у разных систем примерно одинаковая. Из этого следует, что в худшем случае можно ожидать от любой ОС точности времени в 1мкс. А в лучшем, благодаря фильтрации по набору измерений, точность будет еще выше.
«что в худшем случае можно ожидать от любой ОС точности времени в 1мкс.»
поздравляю! искренне Ваш…
Можно вообще избавиться от погрешности вносимой UART. То что сигнал PPS обычно заводят на COM порт вовсе не значит что его можно заводить только туда. Я думаю, его можно использовать для непосредственного формирования прерывания процессора в каких-либо специализированных задачах.
Забыл! А управление памятью??! Которое радикальным образом отличается в realtime/не realtime системах…
А детерминированность??!

А Вы говорите планировщик…
Просто и элегантно, OS я полагаю постоянно сканирует состояние COM-порта, или приход PPS обрабатывается по прерыванию?
В нашей системе PPS анализируется по прерыванию. Прерывание приходит 1200 раз в секунду (раз в 0.83 миллисекунды).
Вы имели в виду таск-свитч? По идее когда говорят об обработке фронта сигнала по прерыванию имеют в виду, что прерывание возникает по фронту этого(!) сигнала…
Нет. В прерывании у меня есть возможность получить текущее значение дискретного входа (PPS). Сравнив его с сохранённым состоянием я могу утверждать что на интервале между этим прерыванием и предыдущим прошёл фронт сигнала.
Аппаратное прерывание процессора от внешнего кварца. Не знаю как это точно назвать.
Т.е. обработка по таймеру? Это не есть обработка сигнала по прерыванию. Т.е. не RealTime.
Получается да. Так как прерывание генерируется не по PPS.
Но так как интервал между проверками минимален точность получается достаточная.
Дак что в итоге, можем ли мы сделать stratum-1 сервер достаточной верности, используя GPS-приёмник, 1PPS-сигнал и non-RT OS, например, Linux с PPSAPI?
Если посмотреть список stratum-1 серверов, то очень многие используют GPS (PPS) + Linux, Solaris, FreeBSD, так же встречаются «Linux nano» — видимо RT-патч. Реже встречаются специализированные устройства и PC-based сервера с RT-OS.
В качестве источников времени чаще всего видно GPS, довольно часто DCF77, и совсем редко «Atomic clock».
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории