アキヤマです。

Kashiwazakiさん、IIJIMAさん、お返事ありがとうございます。
#なぜか、ニュースグループへの投稿ができなくってしまい、
#リプライが遅れてしまいました。


結論としては、「OS の設計の違い」なのですかね。



質問の発端は、同じハードスペックのPCにWindowsを乗せた場合と、
Linuxを乗せた場合とでの、GPS+NTP (NTPv4)の時刻同期について、
Linuxはusecオーダの同期精度が出ているのに対して、。
Windowsはmsecオーダの同期精度しか出ないことついての疑問でした。

考えられる要因としては、
(1) OSアーキテクチャ(スレッド/タスク切り替え時間等)によるもの

(2) 時刻操作のためのAPI/システムコールによるもの(usecを扱えないなど)

(3) NTPv4の内部処理上の問題(アルゴリズム、使用API等)に起因したもの

(4) その他

と、いくつか仮説を立てたのですが、技術的な裏づけを確認できなかったもので、
関連する質問を投稿させて頂いた次第です。

個人的に色々と調べたり、皆さんからの情報を元に考えてみると、
現時点では、以下のように考えています。

(1)については、Windows/Linuxとで何らかの差はあるものの、
同じような?マルチタスクなOSで、それほど大きな差は無いだろうと考えられる。
Windows95/98は、60msecでしたが、Windows2000/XPだと10msecと早くなって
いるようです(CPUクロックにも因るとは思いますが)

(2)については、Linuxではgettimeofday(), settimeofday()では、usec単位の
時刻を扱える。
一方、Windowsでも、GetSystemTimeAsFileTime, SetSystemTimeAdjustmentを
使えば、100ns(=0.1msec)単位の時刻を扱える。
したがって、API/システムコールの問題では無いと思われる。
#API/システムコールが適切に動作するかどうかは不明ですが・・・

(3)については、NTPv4(URL http://www.ntp.org)にて、Linux用とWindows用とで、
アルゴリズムが異なるかどうかは不明。


質問内容を考えると、こちらのニュースグループではなくて、NTPに関する議論を行
える
グループに投稿するのが適切であるような気もします。

もし、関連情報をお持ちでしたら、よろしくお願いします。


"IIJIMA Hiromitsu" <delmonta@ht.sakura.ne.jp> wrote in message
news:3F32E1BB.A0B52B08@ht.sakura.ne.jp...
> いいじまです。
>
> > # 絨毯爆撃といった感じのNewsgroups指定でしたので,fj以外は削りました.
> > # 議論が続くようであれば適切なNewsgroupsでお願いします.
>
> japan.comp.windows-xp は戻しました。microsoft.* は他のネットワークからの
> 到達性がよくない(少なくともうちからはあんまり届かない)ので削ったまま。
>
> #こういう状況を見ると Windows 関係ニュースグループの再編の話をしたくなり
> #ますね。
>
> > > 一般に、Windowsでの時刻管理(制御)は、LinuxやFreeBSDと比較すると、
> > > あまり精度の良いものではない、ということをよく耳にするのですが、
> > > それは、なぜなのでしょうか?
> >
> > 比較した話は実はそれほど聞いたことがなかったのですが,Windows98での
> > タスク切り替え時間が60msで,というお話は以前読んだことがあります.
>
> その話とは独立な話のはずです。そもそも AT 互換機はハードウェアレベルで
> 10ms の精度の時計を持っているはずです。
> <余談>
> PC-98x1 はこれを持っていなかったから、MS-DOS のシステムコールで時刻を取
> 得しても 1/100 秒単位を示すフィールドは常にゼロ。FMR/FM TOWNS はハードで
> 持っているのは 1 秒単位の時計だったけど、タイマー割り込みを使って 1 秒未
> 満の時計のカウントアップだの画面のリフレッシュだのを実現していたので、割
> り込みを禁止すると次にハードウェアの時計がカウントアップするまで時計は止
> まったままだし、テキスト VRAM をグラフィック 画面でエミュレートするアー
> キテクチャの TOWNS ではテキスト画面の表示も止まる。
> </余談>
>
> ☆
>
> で、話を元に戻すと、「OS の設計の違い」という話になると思います。
>
> そもそも AT 互換機の BIOS 自体には、1ms 以下で測れるタイマーはついていま
> せんので、起動時にだけ BIOS から時刻を取得して、それ以降は OS が任意の精
> 度で時刻を計測します。その際に、Windows は「1ms 単位で十分」と判断したか
> ら 1ms になっている(実際、Windows のシステムコールの時刻関係は 1ms 単位
> です)、Linux や FreeBSD では 1μs まで頑張っている(実際に 1μs が出る
> かどうかは CPU の速度に依存するでしょうけど)、ということではないでしょ
> うか。
>
> ちなみに Windows でも、QueryPerformanceCounter() を使えば、手元の環境では
> 1μs 以下の測定が可能です。内部的には Pentium 以降の CPU の RDTSC 命令を
> 使っているのでしょう。
>
> ========================================================================
> 飯嶋 浩光 / でるもんた・いいじま   http://www.ht.sakura.ne.jp/~delmonta/
> IIJIMA Hiromitsu, aka Delmonta           mailto:delmonta@ht.sakura.ne.jp
>
> ───【宣伝】─────────────────────────────
> fj.os.ms-windows.server2003 または fj.os.ms-windows.server の新設の可否
> を問う投票を実施中です。
> fj.news.group.comp をご参照のうえ、ふるってご投票ください。
> 投票期限は 8/25(月)です。
> ────────────────────────────────────