Aller au contenu principal

システム時刻


システム時刻


システム時刻またはシステム時間(英: system time)とは、計算機科学およびプログラミングにおいて経過時間を表現する概念である。この意味において「時刻」とはカレンダー上の経過日数も含む。

概要

システム時刻は、「システム・クロック」によって生成される一定の「テンポ」(ティック:tick)をシステム起動時(オペレーティングシステムのブートアップ時)に読み取ったリアルタイムクロック(ハードウェアクロック)に積算することで、任意の開始時刻(エポック)からの経過時間を求めたものである。このティックは、PCではIntel 8253チップ上のプログラマブル・インターバル・タイマーProgrammable Interval Timer: PIT)から割り込みベクタ"IRQ0"を利用し定期的に発生させることが可能であり、このインターバルをシステム時刻に周期的に加算する。近年ではPITより高機能なHPETが搭載されていることが多い。Linuxカーネルではこのインターバル回数を"Hz"というマクロでカーネルビルド時に指定することができる。Unix系、ならびにPOSIX互換なオペレーティングシステムでは例えば、1970年1月1日0時0分0秒(UTC)すなわちUNIXエポックから閏秒を考慮しない経過時間(UNIX時間)が、Microsoft Windows NTでは1601年1月1日0時0分(UTC)からの100ナノ秒ティック単位での経過時間が主に用いられる。

システム時刻は人間にとって慣れ親しんだカレンダー時刻に容易に相互変換できる。例えば、UNIXのtime_tはこのような変換をサポートするデータ型の一つであり、UNIX時間=1,000,000,000秒を、カレンダー時刻2001-09-09 01:46:40 UTC(ただし閏秒を考慮しない)に変換して表示できる。プログラミングで用いられる時間に関するライブラリ関数やサブルーチンは、一般的に異なる時刻表現の間の相互変換だけでなく、等時帯(地球上の時差)、夏時間、閏秒またユーザーのロケール設定に合わせて調節する機能もあり、時刻を適切に扱うことができる。

その他の時刻測定法

システム時刻とともによく用いられる、コンピュータシステムに関する時間表現として、「プロセス時間」(process time)がある。これは「実CPU時間」(real CPU time)とも呼ばれ、プロセス実行に要したCPU利用時間の総計であり、プログラム中でループ処理をしているときに費やされた「User CPU時間」と、execやfork等のカーネルのシステムコールを行うのに要した「System CPU時間」の合計のことである。よってプロセス時間は、CPUの命令サイクルの総数またはクロックサイクルの総数であり、一般的には壁時計時刻との直接的な相関関係は存在しない。

ファイルシステムも、個々のファイルの作成・最終変更・最終アクセスの時刻を、このシステム時刻を用いてタイムスタンプという形でファイル毎に記録している。例えばUNIXではシステムコールstatを利用し、ctime, mtime, atimeという形でファイル制御ブロックFile Control Block: FCB)、すなわち各ファイル並びにディレクトリのinodeに記録する。

歴史

初期のPCではシステム時刻はコンピュータの電源を切ったと同時に消滅するため、起動ごとに時刻を設定する必要があった。CP/Mオペレーティングシステムや初期のApple II、Commodore PETといったコンピュータがこれらに当たる。1981年に発売されたIBM PCが初めて、電源を切ってもバッテリーで動作し続けるリアルタイムクロックをマザーボードに搭載して、システム時刻を安定して利用できる仕組みを整えた。また、インターネットが一般的となる以前のコンピュータでは、システム時刻が「ローカルタイム」(そのコンピュータのタイムゾーン)を暗黙的に指していることもあった。

現在では、いわゆるコンピュータだけではなく、以下のような家庭用・個人用の電化製品もシステム時刻を実装・利用している。内蔵時計を駆動できるバッテリーを内蔵しているものもあるが、待機電力で駆動しているものも多く、電源ケーブルを取り外して電源を遮断すると時刻がリセットされる。

  • 録画機能や目覚まし機能を内蔵したテレビ受像機
  • VTR(VCR)
  • DVDレコーダーをはじめとするデジタルビデオレコーダ
  • ケーブルテレビ受像機
  • PDA
  • ポケベル
  • カーナビゲーションシステム
  • 携帯電話
  • Fax機器
  • 留守番電話
  • デジタルカメラ
  • カムコーダ
  • エアコン
  • 電子レンジ

システム時刻を得る方法

次に示すのは各種オペレーティングシステムとプログラム言語そしてアプリケーションでシステム時刻を得る手法である。

  • 注1:開始時刻・限界時刻の欄に「 * 」を記載しているものは、アーキテクチャーの状況(例:32ビット/64ビットなど)や処理系(コンパイラ)の実装などにより結果が異なることを示す。
  • 注2:全ての日時はグレゴリオ暦または先発グレゴリオ暦である。

OSのシステムコールまたはBIOSの割り込みルーチン

プログラミング言語のAPIとアプリケーション

脚注

注釈

出典

関連項目

  • 時間計算量(時間複雑性、Time complexity。記事"多項式時間"も参照。)
  • エポック
  • GPS時刻
  • ジフィー(瞬間の意味だが、宗教・哲学的用語のそれではなく、工学、物理学的用語。)
  • クロック
  • プロセス
  • UNIX時間
  • UNIXのdateコマンド
  • UNIXのtimeコマンド
  • 壁時計時刻
  • Network Time Protocol
  • rdate
  • ntpd
  • ntpdate
  • time.h
  • time_t
  • stat
  • timeとdate - 各オペレーティングシステムでの日時表示コマンド
  • Time Protocol
  • タイムスタンプ
  • 時共有方式、ならびにタイムシェアリングシステム
  • 時刻系
  • タイマー
  • 年問題
    • 2000年問題
    • 2038年問題

外部リンク

  • Critical and Significant Dates, J. R. Stockton (2011-03-21編集)
  • The BOOST Date/Time Library, Boost C++ライブラリ
  • The Chronos Date/Time Library, Smalltalk用ライブラリ
  • The Joda Date/Time Library, Java用ライブラリ
  • Veyder-time, Java用ライブラリ
  • The Perl DateTime Project, Perl用モジュール
  • class Time, library date, Ruby用ライブラリ

Text submitted to CC-BY-SA license. Source: システム時刻 by Wikipedia (Historical)