コンピューターはどのように時間を追跡しますか?


69

コンピューターは毎回正しい時刻と日付をどのように伝えることができますか?

コンピューターを閉じる(シャットダウンする)と、内部のすべての接続とプロセスが停止します。もう一度コンピューターを開くと、正確な正確な時刻が表示されるのはどうですか?コンピューターをシャットダウンしても完全にシャットダウンしませんか?まだいくつかのプロセスが実行されていますか?しかし、バッテリーを取り出して(したがってすべてのプロセスを強制的に停止して)数日後に再び起動するときに、ラップトップは正しい時間をどのように伝えますか?


3
この質問はこのサイトのトピックに関するものですか?私にとってはスーパーユーザーにとってより適切なようです。
イルマリカロネン

3
@IlmariKaronenこの用語を正しく理解している場合、これは「コンピューターアーキテクチャ」に関する質問としてカウントされるようです。
-PyRulez

回答:


96

コンピューターには、「リアルタイムクロック」があります。これは、時間を維持するマザーボード上の特別なハードウェアデバイス(水晶など)です。コンピューターの電源を切っても、常に電源が入っています。また、マザーボードには小型のバッテリーが搭載されており、コンピューターを電源から切断しても時計デバイスに電力を供給します。バッテリーは永久には持続しませんが、少なくとも数週間は持続します。これは、コンピューターがシャットダウンされている場合でも、コンピューターが時間を追跡するのに役立ちます。リアルタイムクロックはそれほど電力を必要としないため、エネルギーを無駄にしません。メインバッテリーの取り外しと電源ケーブルの取り外しに加えてクロックバッテリーを取り出すと、コンピューターは時間の経過を失い、コンピューターを再起動するときに時刻と日付の入力を求められます。

詳細については、「リアルタイムクロックCMOSバッテリー」および「マザーボードにバッテリーがある理由」を参照してください。

また、多くのコンピューターでは、コンピューターをインターネット接続に接続すると、OSがネットワーク上のタイムサーバーを検索し、タイムサーバーに現在の時刻を照会します。OSはこれを使用して、コンピューターのローカルクロックを非常に正確に設定できます。これは、NTPとも呼ばれるNetwork Time Protocolを使用します。


1
OSはBIOS時間を設定できますか?つまり、ハードウェアクロックを強制的にリセットし、ブートしてNTPに接続するか、自分でクロックを設定すると、BIOSはこれを認識しますか?

1
はい。OSのシステム時刻を変更すると、リアルタイムクロック(BIOSタイム)が設定されます。内部的には、クロックはエポック(通常は1970年1月1日00:00)からの秒数(またはミリ秒)をカウントしているだけなので、あまり仕事をせず、コインサイズのバッテリーで何年も駆動できます。OSの高レベルの関数は、そのカウントを日付/時刻に変換して表示するジョブを実行します。
クリス・ナバ

水晶は、時間を追跡する特別なハードウェアデバイスではありません(ただし、1つのコンポーネントです)。
user253751

1
@tatanいいえ、携帯電話は常にバッテリーで駆動されています。これは、PCがシャットダウンされている(ただし、壁のコンセントから切断されていない)ときに電源ボタンを押すことでPCの電源を入れることができるのとほとんど同じです。
ルスラン

1
最後の段落を言い換えて、コンピューターをOSに変更します。インターネットに接続するPCは接続しないかもしれませんし、その逆も同様です-これを行うのはOSの仕事であり、PC(ハードウェアを意味する)ではありません。
マシューロック

13

マザーボードのバッテリーを取り外すと、コンピューターに時刻を知らせる方法がなくなります。

これは携帯電話にも当てはまります。電話を放電させた後、数週間以上充電しないと、小さな補助バッテリーが完全に放電され、リアルタイムクロックの電源が入っていないため、「時間を忘れて」しまいます。

古い携帯電話をお持ちの場合は、電源を入れて、自分で「時間を忘れた」ことを確認してください。

これがバッテリーの外観です。 https://yandex.com/images/touch/search?text=mobo%20battery&source=tabbar

鉱山が1日よりも短くなり始めたとき、私は数回購入しなければなりませんでした。PCの電源を入れるたびにクロックを設定する必要がありました。


3
多くのオペレーティングシステムは現在NTP(Network Time Protocol)を使用しており、これを使用して起動時に自動的にリセットできるため、組み込みのクロックは実際には必要ありません。
ジェームズ・スネル

3
@JamesSnellただし、NTPが開始される前にブート中に変更されたファイルだけでなく、ログファイルのタイムスタンプが台無しになります。
カスペルド

@kasperd-多くのシステムが他のメタデータ(バージョン管理)を使用しているため、タイムスタンプは以前ほど重要ではありません。ルーターやraspberry piなどのRTCがないシステムからのブートログを見て、時刻が更新されたとき(および何をしたか)を記録します。接続されていないシステムではより重要になるかもしれませんが、時間の経過とともに重要性は低下しています。
ジェームス・スネル

1
@JamesSnell標準のx86オペレーティングシステムを実行できるシングルボードコンピューターがいくつかありますが、バッテリーでバックアップされたRTCがありません。最後に、ディスクアクセスが発生する前に「ntpdate」を実行するために、ramdisk内から絶対最小ネットワークスタックを実行させました。
カスペルド

@JamesSnellはい また、デスクトップコンピューターも常にインターネットに接続しているわけではありません。夜にルーターを閉じたり、ゲームをしたり、映画を見たり、ルーターをオンにしたくない場合は、常にインターネットを使用しない人もいます。誰もが常にインターネットに接続したいわけではありません。
yoyo_fun

2

Windowsを起動すると、リアルタイムクロック(RTC)のメモリに直接アクセスし、日付と時刻の値を使用してコンピューターの日付と時刻を設定します。タイマー割り込みは、Windowsの実行中にコンピューター時間を維持します。Windowsのタイムデーモンは、Windowsの起動後約1時間に1回実行されます。タイムデーモンは、Windowsの時間とRTCの時間を比較します。2つの時刻が1分以上離れている場合、WindowsはRTCに合わせて時刻と日付を変更します。タイムデーモンを実行する時間間隔を変更することはできません。

Windows NT 4.0リソースキットに含まれているTimeServ.exeツールなどの時刻同期サービスを使用する場合、このツールはWindowsおよびコンピューターのRTCの時刻を更新します。WindowsタイムサービスがWindows 2000ベースのコンピューターで実行されている場合、Windowsのタイムデーモンは、Windowsの起動後1時間に約1回実行できません。

詳細については、次のリンクを参照してくださいhttp//msdn2.microsoft.com/en-us/library/ms724936.aspxhttp//msdn2.microsoft.com/en-us/library/ms724942.aspx


面白い。それでは、Windowsはプログラム(Pythonのtime.time()など)からの呼び出しに応答する現在の正確な時間(マイクロ秒単位)をどのように決定し、その時間の現在値をどのくらいの頻度でどのように更新しますか?
ジャカンターベリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.