• ベストアンサー

カーネルスタック不足について

すみません。教えてください。 先日PCがF7エラーでブルースクリーンになりました。 調べてみると、カーネルスタック(12KB)が不足したために、 発生するとのことでした。 カーネルという言葉さえ知らない私だったので、 カーネルについて調べてみると・・・・ エンジンだったり、ソフトウェアとハードウェアの中間役(?) だったりと、一番核の部分なんだというところまでは、 なんとなく理解できました。 ただ、核の部分のソフトウェア(カーネル)が不足するとは、 どういう意味なんでしょうか? ソフトウェアなのに12KBというのも分かりません。 物理メモリや仮想メモリとはちがうんですよね? また、こんなレジストリを見つけました。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control  \Session Manager\Memory Management\  DisablePagingExecutive=1 カーネルを物理メモリ上に常駐させるレジストリだそうです。 物理メモリに常駐させることによって、12KBよりもっと多くのメモリを使用できるということでしょうか? この作業を実施した後は、ブルースクリーンが発生しなくなりました。 すみません。初心者なのでわかりにくい文になってしましました。 どうか、分かる方教えていただければ助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • coredump
  • ベストアンサー率46% (12/26)
回答No.1

どもです。 ソフトウェアが動作するときには色々な用途にメモリを使用します。 大まかに分けると、機械語命令用のメモリ領域、計算結果等を格納 しておくメモリ領域です。スタックは計算結果等を格納しておく メモリ領域の一種です。で、Windowsのカーネル領域で動作する ソフトウェアのスタック領域のサイズは、x86の場合12kと決まって いたと思います。より多くのメモリを使用するときには、スタック ではなく、違うところから使用するメモリ領域を動的に確保します。 12kというサイズが小さいと考えていると思うのですが、 デバイスドライバ等のカーネルモードのソフトウェアを作成する 人はほとんどがプロですし、12kのスタックで動作するソフトウェア を作成するのは難しくありません。 12k以下のスタックで動作することが分かっているのに、より多くの スタック領域を割り当てるのは無駄ですし、Windowsでは出来なかった と思います。 でもって、機械語命令用のメモリ領域も計算結果等を格納しておく メモリ領域(カーネルスタック含む)もページングする可能性が あります。 ページングとは、そのメモリ上のデータをHDDに退避することです。 退避する事によってそのメモリ領域を違う用途に使用する事ができる ようになります。 退避したデータが必要になった場合、HDDからメモリにロードしてから 処理を続行します。 DisablePagingExecutiveはページングしないようにするフラグの ようです。 DisablePagingExecutiveでページングしないようにして ブルースクリーンにならないようになったのであれば、 ブルースクリーンになった原因はページングした後に そのデータが必要になり読みだしたが、データが不正で飛んで しまったとかかなぁとか思います。 HDDが壊れかけているとか。。。 もし、粗末な作りで大量のスタックを喰うデバイスドライバを 入れたりしてたら、DisablePagingExecutiveに関係なく 飛ぶと思いますし。 ということで > ソフトウェアなのに12KBというのも分かりません。 > 物理メモリや仮想メモリとはちがうんですよね? スタックのサイズと、PCにつけているメモリの容量は関係ありません。 (たぶん、そういう疑問ですよね?) > 物理メモリに常駐させることによって、12KBよりもっと多くの > メモリを使用できるということでしょうか? そうではなく、ページングされなくなるだけです。 正直、この辺の話はプログラムを組んだ事が無い人が正確に理解するのは 無理があると思ったりもします。 ではでは。

sav_moster
質問者

お礼

返事が遅くなり、申し訳ございません。 詳しい回答、まことにありがとうございます。 大変助かります。 私も学生時代にプログラムを専門にしていたので、 すこしはわかるつもりです(すこしですか・・・) レジストリの意味はよくわかりました。 ページングをしなくするだったんですね。 12KBという、カーネルスタック容量が大きくなるのだと思っていました。 実は、困っているが、SymantecAntiVirusについてなんです。 http://service1.symantec.com/SUPPORT/INTER/entsecurityjapanesekb.nsf/jp_docid/20030226200606949?OpenDocument&dtype=corp このソフトは標準であるだけカーネルスタックをバンバン使用するみたいで、困り果てています。(他のソフトとの相性の問題も重々承知ですが)OSの問題なのでしょうか。 どうにか改善したいのですが、64BitOSについてはなにかご存知ですか?32bitOSはカーネル領域を増やせないみたいですが、 64bitOSは可変なのでしょうか? 今マイクロソフトHPを必死で探しているのですが、 まったく見つかりません。 もしご存知でしたら教えてください。

その他の回答 (2)

  • coredump
  • ベストアンサー率46% (12/26)
回答No.3

どもです。 この辺りの情報は、デバドラ用の資料ぐらいしかないかもしれません。 http://www.microsoft.com/whdc/driver/tips/KMstack.mspx 64bitでも固定みたいですね。 う~ん、ページングしないようにしてブルースクリーンに ならないようになったのであれば、HDDが一番怪しいと 思ってしまいますが、どうですかねぇ。。。。 正直、これの原因を特定するのは相当難しいのではないかと 思いますよ。 ではでは。

  • yakan9
  • ベストアンサー率54% (2200/4047)
回答No.2

表題に書かれているとおりだと思います。 まずカーネルについては、記載されたとおり正しいと思います。 > カーネルスタック不足について ここでスタックという言葉に注意してください。 分りやすく言うと、戻り番地を覚えておくメモと思ってください。 厳密に言うと、サブルーチンをコールしたときの、 メインルーチンへの戻り番地です。 このスタックすべき数が、たまたま増加して、 連続したメモリ/ディスク領域が確保できなかった のではないでしょうか。 >  カーネルを物理メモリ上に常駐させるレジストリだそうです。 カーネルを物理メモリ上に常駐させることにより、 メモリを占有する優先度が増してきたのだと思います。 カーネルのプログラムは、12KBと小さいですが、カーネルが 呼び出すサブルーチンは、多いと思われます。 カーネルのプログラムサイズは、固定ですが、 スタックエリアは、可変だと思います。

sav_moster
質問者

お礼

返事が遅くなり、申し訳ございません。 スタックエリアは可変なんですか? そうなるとOS制限の12KBを大きくできるということでしょうか? もしその方法があるのであれば、ぜひ教えていただきたいです。 すみませんが、よろしくお願いいたします。

関連するQ&A

  • カーネルメモリをすべて物理メモリに展開できていない?

    カーネルメモリをすべて物理メモリに展開する為に、 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\DisablePagingExecutive の値を「1」に変更しました。 そしてタスクマネージャのパフォーマンスタブでカーネルメモリを確認しました。 合計:  49488 ページ: 41452 非ページ:8040 となっています。 http://arena.nikkeibp.co.jp/tec/winxp/20040126/106976/ 上記URLを参考にすると、ページファイルはHDDに展開されていると記載されています。 それにしてはページファイルが多い気がするのですが、こんなものなんでしょうか?ちなみに物理メモリは1280Mあります。 ご存知の方、よろしくお願い致します。

  • カーネルメモリの設定を変更する必要があるか

    私のカーネルメモリは 合計49468 ページ39856 非ページ9596 なのですが 下記の意味が何回読んでも分からないのですが 上記のどれが物理メモリですか? メモリは768816KBくらいあるのですが 立ち上がりとか色々遅いので なんとかしたいなと思っていますが 不用なプログラムを消すっていうのはちょっと判断が難しいので まだ手をつけたくありません。とりあえずカーネルメモリかな? と思うのですが これだけでは情報が少なくてアドバイスしていただけないでしょうか。できるようでしたらお願いします 5.カーネルメモリの設定を変更する Windows XPは、「カーネルメモリ」という領域に常駐している。カーネルメモリは、ハードディスク上の「ページプール」、RAM(物理メモリ)上の「非ページプール」の2つの領域に分かれている。RAMよりもハードディスク上にあるページプールの方が実行速度は遅くなるので、大容量メモリを搭載しているならば、カーネルメモリを非ページプールだけにしてみよう。

  • カーネルメモリをすべて物理メモリに展開する方法

    始めまして よろしくお願いします。 下記のことを実行しました。 スタートメニューから「ファイル名を指定して実行」を選び、「regedit」と入力。レジストリエディタを起動して、次の順にキーを表示する。 HKEY_LOCAL_MACHINE→SYSTEM→CurrentControlSet→Control→Session Manager→Memory Management 「Memory Management」というキーを選び、右の欄に表示される「DisablePagingExecutive」をダブルクリック。「値のデータ」に半角数字で「1」と入力 する。 再起動後、カーネル部分はすべて物理メモリー上に展開され、システムが速くなる。 この操作をした後に タスクマネージャーの パフォーマンス カーネルメモリを見ると 合計  77008 ページ  64363 非ページ 12640 となっています。 上記の操作をすると ページ  64363 が減ると思っていたのですが、変化しませんでした。 ここでわからないのが ・この状態で、上記操作が正常に終了しているかの確認方法がわかりません。 ・そもそも、やり方が間違えているのでしょうか? よろしくお願いします

  • メモリの節約について

    メモリの節約について勉強してました あるサイトで↓のような項目を見つけたのですが僕のパソコンにとって有効かどうか判断できません スペックを書いておくので分かる方いたら教えてください OS:Windows2000Pro・SP4 メモリ:256M(増設済み最大値) HDD:10G パソコン起動直後は大体半分位のメモリを消費しています ・カーネルメモリを移行して高速化 WindowsNT系は基本的なOS機能をカーネルメモリと呼ばれる領域に常駐させている カーネルメモリ領域はページプールと非ページプールにわかれており ページプールを仮想メモリから物理メモリへ移行することによって データアクセスが向上して処理速度がアップする。 もし搭載しているメモリが256MB以上あるのなら移行させよう。 方法はレジストリエディタでHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Control\SessionManager\MemoryManegementのキーを開き DisablePagingExecutiveの値を0から1に変更する。(ないときは作成する) その後レジストリエディタを終了して再起動。 先月パソコンを始めたばかりの初心者なので簡単に教えていただけると助かります よろしくお願いします

  • 仮想メモリ不足

    WindowsNT4.0 Workstation メモリ 192MBのPCですが、 カーネルメモリ合計 99920(KB) ページ 97976(KB) 非ページ 1952(KB) コミットチャージ 合計 287480(KB) 制限値 405964(KB) 最大値 405840(KB)という状態に陥り、何のアプリも起動できない状態です。 何年も動いていたシステムで、初めての事象です。再起動後3週間程度。 アプリの入替等は行っていません。(突然発症) コミットチャージの制限値 > 物理メモリ(192)+仮想メモリ(180) となったのは何故なのか。カーネルメモリが何故こんなに大きくなったのか全く分かりません。 何か考えられる要因ありましたらご教示ください。 最初は「仮想メモリ不足」、放置していたら「メモリがありません」というメッセージが出たらしい。よろしくお願いします。

  • 物理メモリがたくさんあっても仮想メモリ不足?

    すんません。質問させてください。 Win2kなのですけど、物理メモリを2GB搭載してます。 これくらいあるのだったら仮想メモリはOFFに出来るかな?っと 思ってOFFにしてみたのですけど、起動時にのっけから「仮想メモリが少なすぎる」とエラーメッセージが出るようです。臨時の20MBほどの仮想メモリも作っているようっす。 過去にXPにて512MB位で仮想メモリをOFFにしても、 とたんにエラーメッセージというほどではなかったと記憶してます。 仮想メモリON、OFF自体にはそんなに興味があった訳ではないのですが、2Kにて余りに簡単にメモリ不足ってのが妙~なかんじでして;;ある程度アプリetc使ってて仮想メモリ不足ってのならフツーだと思ってたんですが、OS起動時からこれなのか!と。 何か致命的なミスをしてるような気がしないでもないです(笑) 何でもよいのでご教授くださいませm(*- -*)m 仮想メモリを500MBほどくれてやるとエラーはでないようです。 若干レジストリも弄ってます。 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management] "ClearPageFileAtShutdown"=dword:00000000 "DisablePagingExecutive"=dword:00000001 ←これ?物理メモリにカーネルうんたら? "IoPageLockLimit"=dword:00010000 "LargeSystemCache"=dword:00000000 "NonPagedPoolQuota"=dword:00000000 "NonPagedPoolSize"=dword:00000000 "PagedPoolQuota"=dword:00000000 "PagedPoolSize"=dword:00000000 "PagingFiles"=hex(7):00,00,00,00 "SecondLevelDataCache"=dword:00000000 "SystemPages"=dword:000c3000 "PhysicalAddressExtension"=dword:00000000 "LargePageMinimum"=dword:ffffffff "WriteWatch"=dword:00000001

  • メモリが気になってタスクマネージャを開いてみたら・・・

    自分のパソコンはメモリが512MBのXP Homeです。 タスクマネージャを開いたら、 PF使用量が624(MB) 物理メモリが合計456880(KB) 利用可能が101550(KB) コミットチャージ合計が639792(KB) 最大値が701208(KB) カーネルメモリ合計が160360(KB) となっているんですが、この数字ではメモリ不足の具合はどの程度なんでしょうか。 ちなみに無線でネットにつないで、ウィルスバスターが常駐しています。 増設するなら+512MBぐらいで十分でしょうか?

  • ブルースクリーンで再起動しない/WindowsXP

    WindowsXP SP3です。 ブルースクリーン(STOPエラー)がたまに発生します。 原因はメモリかLANドライバだと踏んでいますが、 ブルースクリーン発生時に自動的に再起動しないのです。 マイコンピューター →プロパティ→詳細設定→起動と回復→設定→システムエラー→「自動的に再起動する」にチェックはしています。 レジストリ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControlの AutoRebootは1になっています。 少し前までは再起動はしていて、しばらく再起動なしに設定していて、 その後再度再起動するにしても、再起動しなくなりました。 今はどちらを選んでも再起動されません。 再起動するようにする方法などありませんか? もしくは再起動を施している仕組み(サービス?カーネル自身?)も判れば教えて下さい。 ひょっとしたら再起動に必要なサービスを止めているかもしれません。

  • メモリ不足

    最近メモリ不足になることが多くなっています。 今までならメモリ不足になることはなかった作業によってメモリ不足が発生します。常駐ソフトを新たに増やしたということはありません。 WindowsUpdateは欠かさず行っているので、そのあたりに原因があるのかと思っているのですが。 アドバイスをお願いします。 メモリは1Gです。

  • ページファイルの使用をやめることについて

    当方メモリが三ギガありますので常に二ギガ以上あまります。そのためページファイルを使用しないに設定してDisablePagingExecutiveの値を1にしてカーネルメモリを常に物理メモリにおくように設定したのですがタスクマネージャを見るとどうも設定が反映されていないようです。ページファイルが使用されていたり、カーネルメモリの一部がページされていたり。ページをなくすだけなくしてあまった物理メモリを活用するにはこれ以上どうすればいいかを教えてください。