初探linuxサブシステムセットのtimerサブシステム(一)

1678 ワード

一般的にlinuxシステム全体を走らせるには、linuxのクロック、つまり時間サブシステムが必要です.ここではちょうど仕事が必要です.では、linuxの時間サブシステムを研究します.
linuxカーネルは、2つの主要なタイミング測定を完了する必要があります.1つは、time()、gettimeofday()などのシステム呼び出しを通じてユーザプログラムに戻るように、現在の時間と日付を保存するタイミングであり、もう1つはタイミングであり、このメカニズムは主にカーネルやアプリケーションに、ある時間間隔が過ぎたことを伝え、コールバック関数に触れて、いくつかのことをする.
ハードウェアには主にリアルタイムクロックRTCとCPUローカルTimerがあり、ここでRTCはcpu外部の他のチップ、または内部のモジュールであるが、外部でボタン電池のような電力供給を個別に提供する必要がある.LinuxはRTCのみで時間と日付を取得し,RTCについては後でrtcサブシステムで詳しく紹介する.CPUローカルTimerは、実はCPU内部のTimerモジュールを使用しており、一般的にはCPUのTimerモジュールでカウント可能である.もちろん、これは結晶振動に周波数分周などを加えてメインチップに与えられ、メインチップ内部では走る主周波数によってカウントが実現され、このカウントは増加または減少するしかなく、その後、オーバーフロー後に中断され、一般的にこのオーバーフローの値を設定することができる.埋め込みシステムは走るには時計が必要で、具体的な移植コードは主にarchの下で、異なるシステムによっては通じない移植をします.
linuxにはDynamic TicksとHigh Resolution Timerがあり、詳しくはkernel/time/Kconfigを参照してください.
config TICK_ONESHOT
	bool

config NO_HZ
	bool "Tickless System (Dynamic Ticks)"
	depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
	select TICK_ONESHOT
	help
	  This option enables a tickless system: timer interrupts will
	  only trigger on an as-needed basis both when the system is
	  busy and when the system is idle.

config HIGH_RES_TIMERS
	bool "High Resolution Timer Support"
	depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
	select TICK_ONESHOT
	help
	  This option enables high resolution timer support. If your
	  hardware is not capable then this option only increases
	  the size of the kernel image.

そのうちCONFIG_NO_HZはDynamic Ticks,CONFIG_を制御するために使用されるHIGH_REST_TIMERS制御High Resolution Timer.
上記の高精度timerと動的tickが選択されていなければ、linuxシステムの低精度timerを使って、簡単に基礎知識を紹介して、次から勉強しましょう.