プロが教える店舗&オフィスのセキュリティ対策術

すみません。教えてください。
先日PCがF7エラーでブルースクリーンになりました。
調べてみると、カーネルスタック(12KB)が不足したために、
発生するとのことでした。

カーネルという言葉さえ知らない私だったので、
カーネルについて調べてみると・・・・
エンジンだったり、ソフトウェアとハードウェアの中間役(?)
だったりと、一番核の部分なんだというところまでは、
なんとなく理解できました。

ただ、核の部分のソフトウェア(カーネル)が不足するとは、
どういう意味なんでしょうか?
ソフトウェアなのに12KBというのも分かりません。
物理メモリや仮想メモリとはちがうんですよね?


また、こんなレジストリを見つけました。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
 \Session Manager\Memory Management\
 DisablePagingExecutive=1

カーネルを物理メモリ上に常駐させるレジストリだそうです。
物理メモリに常駐させることによって、12KBよりもっと多くのメモリを使用できるということでしょうか?
この作業を実施した後は、ブルースクリーンが発生しなくなりました。

すみません。初心者なのでわかりにくい文になってしましました。
どうか、分かる方教えていただければ助かります。

A 回答 (3件)

どもです。



ソフトウェアが動作するときには色々な用途にメモリを使用します。
大まかに分けると、機械語命令用のメモリ領域、計算結果等を格納
しておくメモリ領域です。スタックは計算結果等を格納しておく
メモリ領域の一種です。で、Windowsのカーネル領域で動作する
ソフトウェアのスタック領域のサイズは、x86の場合12kと決まって
いたと思います。より多くのメモリを使用するときには、スタック
ではなく、違うところから使用するメモリ領域を動的に確保します。
12kというサイズが小さいと考えていると思うのですが、
デバイスドライバ等のカーネルモードのソフトウェアを作成する
人はほとんどがプロですし、12kのスタックで動作するソフトウェア
を作成するのは難しくありません。
12k以下のスタックで動作することが分かっているのに、より多くの
スタック領域を割り当てるのは無駄ですし、Windowsでは出来なかった
と思います。

でもって、機械語命令用のメモリ領域も計算結果等を格納しておく
メモリ領域(カーネルスタック含む)もページングする可能性が
あります。
ページングとは、そのメモリ上のデータをHDDに退避することです。
退避する事によってそのメモリ領域を違う用途に使用する事ができる
ようになります。
退避したデータが必要になった場合、HDDからメモリにロードしてから
処理を続行します。

DisablePagingExecutiveはページングしないようにするフラグの
ようです。
DisablePagingExecutiveでページングしないようにして
ブルースクリーンにならないようになったのであれば、
ブルースクリーンになった原因はページングした後に
そのデータが必要になり読みだしたが、データが不正で飛んで
しまったとかかなぁとか思います。
HDDが壊れかけているとか。。。
もし、粗末な作りで大量のスタックを喰うデバイスドライバを
入れたりしてたら、DisablePagingExecutiveに関係なく
飛ぶと思いますし。

ということで
> ソフトウェアなのに12KBというのも分かりません。
> 物理メモリや仮想メモリとはちがうんですよね?
スタックのサイズと、PCにつけているメモリの容量は関係ありません。
(たぶん、そういう疑問ですよね?)

> 物理メモリに常駐させることによって、12KBよりもっと多くの
> メモリを使用できるということでしょうか?
そうではなく、ページングされなくなるだけです。

正直、この辺の話はプログラムを組んだ事が無い人が正確に理解するのは
無理があると思ったりもします。

ではでは。
    • good
    • 0
この回答へのお礼

返事が遅くなり、申し訳ございません。
詳しい回答、まことにありがとうございます。

大変助かります。
私も学生時代にプログラムを専門にしていたので、
すこしはわかるつもりです(すこしですか・・・)

レジストリの意味はよくわかりました。
ページングをしなくするだったんですね。
12KBという、カーネルスタック容量が大きくなるのだと思っていました。

実は、困っているが、SymantecAntiVirusについてなんです。
http://service1.symantec.com/SUPPORT/INTER/entse …

このソフトは標準であるだけカーネルスタックをバンバン使用するみたいで、困り果てています。(他のソフトとの相性の問題も重々承知ですが)OSの問題なのでしょうか。

どうにか改善したいのですが、64BitOSについてはなにかご存知ですか?32bitOSはカーネル領域を増やせないみたいですが、
64bitOSは可変なのでしょうか?

今マイクロソフトHPを必死で探しているのですが、
まったく見つかりません。
もしご存知でしたら教えてください。

お礼日時:2007/08/23 13:52

どもです。



この辺りの情報は、デバドラ用の資料ぐらいしかないかもしれません。
http://www.microsoft.com/whdc/driver/tips/KMstac …
64bitでも固定みたいですね。

う~ん、ページングしないようにしてブルースクリーンに
ならないようになったのであれば、HDDが一番怪しいと
思ってしまいますが、どうですかねぇ。。。。
正直、これの原因を特定するのは相当難しいのではないかと
思いますよ。

ではでは。
    • good
    • 0

表題に書かれているとおりだと思います。



まずカーネルについては、記載されたとおり正しいと思います。

> カーネルスタック不足について
ここでスタックという言葉に注意してください。
分りやすく言うと、戻り番地を覚えておくメモと思ってください。
厳密に言うと、サブルーチンをコールしたときの、
メインルーチンへの戻り番地です。

このスタックすべき数が、たまたま増加して、
連続したメモリ/ディスク領域が確保できなかった
のではないでしょうか。

>  カーネルを物理メモリ上に常駐させるレジストリだそうです。
カーネルを物理メモリ上に常駐させることにより、
メモリを占有する優先度が増してきたのだと思います。

カーネルのプログラムは、12KBと小さいですが、カーネルが
呼び出すサブルーチンは、多いと思われます。
カーネルのプログラムサイズは、固定ですが、
スタックエリアは、可変だと思います。
    • good
    • 0
この回答へのお礼

返事が遅くなり、申し訳ございません。

スタックエリアは可変なんですか?
そうなるとOS制限の12KBを大きくできるということでしょうか?

もしその方法があるのであれば、ぜひ教えていただきたいです。
すみませんが、よろしくお願いいたします。

お礼日時:2007/08/23 13:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!