Software crash / System crashのメカニズムについて教えてください。

Null Pointer Excepitonや0除算,不正なメモリアクセスやバッファオーバフローによるスタックの書き換えなどが存在すると思いますが,他にもあったら教えてください。
例えばデバイスドライバのエラーでカーネルがクラッシュしますが,その際デバドラのどういった類のエラーでもカーネルはクラッシュするのかなどについても知りたいです。
ある程度技術的考察が深く得られるものを希望しています。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/01/21 04:48:19
  • 終了:--

回答(3件)

id:rafile No.1

rafile回答回数662ベストアンサー獲得回数242006/01/14 11:42:40

ポイント50pt

あまり適当なURLはなかったですが。


linuxは、ノンプリエンプティブカーネルです。したがって、デバドラで無限ループに陥ると、他のプロセスに制御が移らず飛びます。”URLでは古いlinuxでは”とありますが、2.4が古く、2.6が新しいということです。


あとはOSによってはリソース関連がつきると飛ぶものがありますし、ロック関係の不整合で飛んでしまうものもありますね。スタック食いつぶし系は、回避できない場合が多いです。

id:tono5652

なるほど。2.4がノンプリエンプティブとは初めて知りました。勉強になりました。

OSはCPUのバスエラーとかでもクラッシュしますよね?その辺を説明したURLがあればどなたかお願いできればと思っています。

2006/01/16 10:44:56
id:cynix No.2

cynix回答回数29ベストアンサー獲得回数02006/01/21 06:47:20

ポイント100pt

URLはMSDN英語版ですが...


CPUには、割り込み要求レベル(IRQL)という設定があります。CPUは高レベルのIRQLで動作している間に、より低いレベルの割り込み要求を無視します。一般ユーザースレッドとカーネルルーチンはPASSIVE_LEVEL(=0)で、APCやページフォールト要求はAPC_LEVEL(=1)で、ディスパッチャやDPCはDISPATCH_LEVEL(=2)で実行されます。(もっと高いレベルもいくつあります。)


ドライバが時々高レベルに入る必要がありますが、そのときより低いレベルの要求が動かなくなるため、いくつの制限があります。たとえば、ページフォールトは普段あるハンドラが処理するが、DISPATCH_LEVELで動作しているときページフォールトの処理はできません(APC_LEVEL<DISPATCH_LEVELので要求が無視されます)。そのときドライバが不正なメモリアクセスをすると、カーネルがすぐIRQL_NOT_LESS_OR_EQUALというエラーでクラッシュします。

id:tono5652

詳しいご説明ありがとうございます。

本当に為になりました。

2006/01/21 16:43:57
id:monyot No.3

monyo回答回数146ベストアンサー獲得回数182006/01/21 20:33:15

ポイント100pt

※URLはGoogleキャッシュですが、他に日本語でいい情報が見つからなかったので。


RISC系のCPUでは、URLの説明のように、アラインメントをまたがるようなメモリ参照を行うと、BUS Errorが発生して、通常クラッシュします。。UNIXの場合SIGBUSというシグナルが発行されます。

id:tono5652

ありがとうございます。

とても知りたい情報でした。

2006/01/22 18:28:25

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません