back numbers

6.11.2008

ちく、たく、ちく、たく、

Timer and Timers
一般的なプロセッサにタイマは精々1つか2つしか乗っていない。アプリケーションではソフトウェアタイマを使ってね、という話。ハードウェアタイマをベースとして、その整数倍間隔でソフトウェアタイマの割込みが可能である。用意する場所は(もしあれば)カーネルなどの、タスク間で共有される権限領域で、だ。論理回路を組んだ経験があれば常識的な事ではあるが、そうでなければ謎の知恵だと感じる人も居るかもしれない。

HPET Specification
ちなみに最近のPCはx86アーキテクチャで動いている。こいつ(がintelのそれであれば)にはTSC(Time Stamp Counter)というレジスタがあり、電源投入後からCPUに提供されたクロック数をカウントしている。だから時間は(クロック間隔程度には)正確に測ることが出来る。そしてこの値に、タイマ間隔をクロック周波数で割ったクロック数を足し、HPET(High Precision Event Timer)のトリガにセットする。HPETは64-bitトリガレジスタとコンパレータから成り、クロックジェネレータの信号を受けてアップカウントされるレジスタを一定時間(10MHz以上)ごとにトリガと比較して、設定されたクロック数を過ぎると割込み信号を発生する。もっともこの機構が利用出来るOSは、MacOSXが10.4以降、FreeBSDが6.3以降、それにLinuxで2.6以降、WindowsはVista以降なのだが。あとHaiku OSは対応中だ。

それでも実時間応答はまったく別次元の問題だ。最近の自動車は大抵がコンピュータ制御になっていると思われるが、当然ながらここでは実時間応用が要求される。聞いた話だと、ドイツの某自動車メーカはthreaded-codeのようにタスクを分け、各タスクごとの消費時間を考慮してスケジューリングするのだとか。NASAの遠隔制御系も似たアプローチで設計されるという話だ。なるほどそれは確実な手段だと言えるが、あんまりインテリジェンスな方法ではない。

0 件のコメント:

tags

Profile

Taito, Tokyo, Japan
明けども明けども次の埒
hiro.kosh@gmail.com