概要
カーネル内ではさまざまな用途で「時間」が使われています。現在時刻の管理のほか、ネットワークのタイムアウト処理や、プロセスのタイムスライス処理など、あらゆるサブシステムで時間がかかわっています。
本稿では、Linux でどのように時計が動いているのか、また、カーネルがどのように時間や時刻を管理しているのかについて解説していきます。
本稿で使用しているシステム環境は以下の通りです。
- Red Hat Enterprise Linux 6.x (linux-2.6.32系)
カーネル内での時刻/時間の利用
時刻/時間はカーネル内では以下の様な利用方法があります。
- 時刻の管理 (gettimeofday/settimeofday)、起動からの時間 (uptime) の計測
- NTPデーモン (ntpd) による時刻調整 (adjtimex)
- プロセスの同期処理 (sleep/nanosleepや、select/pollなどでのタイムアウト処理)
- プロセスのプリエンプト (タイムスライスを使い切ったプロセスからCPUを奪う)
- ネットワークのタイムアウト処理、再送タイマなど
- デバイスのタイムアウト処理
- システムのCPU利用統計 (%user/%nice/%system%iowait/%idle)
- プロセスのCPU利用統計 (プロセスの優先度やタイムスライスの計算などに使われる
- その他各種帯域制御など