人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: tono5652
●カテゴリ:コンピュータ
✍キーワード:software エラー オーバ カーネル クラッシュ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● rafile
●50ポイント

http://hwb.ecc.u-tokyo.ac.jp/current/CDD1B8ECBDB82FA5D7A5EAA5A8A...

プリエンプション (HWB)

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


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


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

◎質問者からの返答

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

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


2 ● cynix
●100ポイント

http://msdn.microsoft.com/library/default.asp?url=/library/en-us...

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というエラーでクラッシュします。

◎質問者からの返答

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

本当に為になりました。


3 ● monyo
●100ポイント

http://72.14.203.104/search?q=cache:eeHNmlivGxgJ:h50120.www5.hp....

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


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

◎質問者からの返答

ありがとうございます。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ