[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:21451] Re: Linuxの割り込みについて



松本@兵庫県です。

_Message-Id: <43C3B69BDD1913sios_hs@yahoo.co.jp>
_From: "H.Shiozaki" <sios_hs@yahoo.co.jp>
_Date: Sun, 30 Nov 2003 02:11:44 +0900

  正直なところ、このスレッドは見なかった事にするつもり
でしたが、ML を読んでいる人に誤ったメッセージを与えて
いないかという心配がありましたので、一応反応させて頂き
ます。私が反応する事で、かえって誤解を深める心配が無き
にしもあらずですが。

> そこで,Linuxでは,IRQ(0から15),NMI,APIC 以外に
> Kernel又はOSが,動作する要因は何があるのでしょうか,
> またはカーネルソースのどの当たりを調べたら良いかを
> 識者の方に,教えほしいのですが。

  同じ i386系でも、マシンや、カーネルによって異なるので、
これをというより、全部見ましょうと言う事になると思います。
たぶん idt_table をいじっている物を中心に探せば良いと思い
ます。set_*_gate() という関数郡が idt_table を操作している
ようです。

  ユーザ空間からカーネルへの移行はさまざま場面で行われま
す。irq にこだわっていると何も見えて来ません。
  メモリー、IOポートへのアクセス、未定義命令の実行等々。

  あと、AT互換機の常識としてバスを長時間握って離さない
周辺機器の存在も忘れてはなりません。昔、RT-Linux を使って
いて、メインメモリと、VRAMをシェアするタイプのマザーボード
で苦労されたという方の話を聞いた事があります。バスマスタ
とか DMA とか、高性能そうな単語の入ったデバイスも要注意だと
思います。

  さて本題です。本来なら、実機とそれなりの測定機が欲しいし、
テストコードも示さずに何が分かるのかという気もしますが……

> ところが,Linuxでは,ほぼ,512msec毎に約52usecの誤差
> (遅れ方向)が発生します。(CPUは233MHzのPentium)

  これ、自信ありますか? 周期を 0.1msec にすると 51.2msec
毎に変わりませんか? ループ一回、回す毎に 8 Bytes メモリ
を消費していませんか?

  興味の無い人にはただのゴミですが、
http://www.netfort.gr.jp/~matsu/plamo/gomi/chk_delay.c
にサンプルコードを示します。ゴミのようなコードですが、
念のために Copyright 表示があります。GPLでお願いします。

  基本的に危険なプログラムですので、コードをいじる際には
細心の注意を払って下さい。一歩間違えるとカーネルが死にます。
  最適化オプションが必須です。root権限を要します。

  このプログラムは
#define COUNT 10000
で示される回数 for loop を回します。その間、loop1回に要した
マシンサイクル数を、変数 data に納めていき、あとでその結果を
表示します。
  10000 行結果を表示するとうるさいので、100cycle 以上要した
物だけ表示するようにしています。
  たぶん 512回に一度のペースで、極端に時間が掛かる事が分かる
と思います。

  これを解消する方法は、ソース中の /* page alloc start */
から  /* page alloc end */ の間のコメントアウトされた、部分
を有効にする事です。

  これらのテストは、linux 2.4.22 で行っています。カーネルの
バージョンが異なれば結果も異なる可能性があります。

  このプログラムは大変危険で、遊びとしては良いと思いますが、
人に使わせたり、仕事で使うのは躊躇させられます。

  このプログラムに含まれる、double cpuclock(void) という
関数は、pentum 系のCPU のクロックを簡易計測する物ですが、
一般ユーザ権限で実行でき、安全だと思います。
ntpd で "周波数同期" の取れたマシンではそれなりの結果が
出そうです。

-- 
松本 徳真
Norimasa Matsumoto
E-mail: matsu@netfort.gr.jp

Follow-Ups
[plamo:21520] Re: Linuxの割り込みについて, H.Shiozaki

[検索ページ] [メール一覧]
Plamo ML 公開システム