- PR -

物理メモリの最適化プログラム

投稿者投稿内容
山さん
会議室デビュー日: 2006/08/18
投稿数: 10
投稿日時: 2006-09-08 17:58
どなたか教えてください。

Windows OS において、物理メモリを最適化(クリーニング)するプログラムを作りたいのですが、メモリ管理の知識がほとんどなく、どのよに考えたらよいのか検討がつきません。(特に、非ページプールを最適化したいのです。)

フリーのツールなんかを見ると、このてのプログラムが多く公開されていますが、みなさんどのように作られたのでしょうか?

ヒントなるサイトでもありましたら、教えてもらえないでしょうか?

よろしくお願いします。

甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-09-08 18:53
引用:

山さんさんの書き込み (2006-09-08 17:58) より:
Windows OS において、物理メモリを最適化(クリーニング)するプログラムを作りたいのですが、メモリ管理の知識がほとんどなく、どのよに考えたらよいのか検討がつきません。(特に、非ページプールを最適化したいのです。)


Inside Windowsの記述から抜粋すると「メモリを最適化して動作に高速にする便利なアルゴリズムなどありません。もしそんな魔法のようなアルゴリズムが実在するなら、間違いなくOSに実装します。」手元に本があるわけではないので、細かな表現は違いますが、そんな感じです。

引用:

フリーのツールなんかを見ると、このてのプログラムが多く公開されていますが、みなさんどのように作られたのでしょうか?


大きなメモリを確保する事で、物理メモリ上のデータをスワップファイルに吐き出させます。その後、確保したメモリを開放します。これを行った後は物理メモリに空きが出来るので、一時的にメモリ確保などの動作がスムーズに動きます。
もちろんその為に不必要なスワップアウトを誘発し、大量のディスクアクセスを誘発しているのですから、動作速度はトータルでマイナスになります。

この手のツールではCompJapanなんかが有名ですね。:-
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-09-08 19:02
こんにちは。

基本的な話は甕星さんが語られている通りなので、私が言うことはなにもなかったりするわけですが…ひとつだけ。

引用:

この手のツールではCompJapanなんかが有名ですね。:-


CompJapan は「機能を謳っておいて実際は何もしていなかったサギソフト」な
ので、あまりいい例ではないですね
せめて「めもりくりーなー」あたりにしておいたほうが。
http://crocro.com/pc/soft/mclean/
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
ryuuji
ベテラン
会議室デビュー日: 2003/07/10
投稿数: 53
お住まい・勤務地: 東京都
投稿日時: 2006-09-08 19:08
面白そうなので少し調べてみました。役立つか分かりませんが。

どうやって実装するのだろうと思い色々探したところNativeAPIで物理メモリを読み取る方法が紹介されていました。このサンプルは読み取りしかしませんがサンプルソースのヘッダを見るとREADWRITEなんていうのも定義されているので書き込みも出来るのかもしれません。
sysinternals(PhysMem)

最適化の方法は甕星さんのおっしゃっている通りなんだと思います。
メモリの掃除屋さんのQ&A
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2006-09-08 22:11
回答でなくて申し訳ないのですが、
引用:

メモリ管理の知識がほとんどなく、どのよに考えたらよいのか検討がつきません。


にもかかわらず
引用:

物理メモリを最適化(クリーニング)するプログラムを作りたい


と考えるようなった理由とは、いかなるものなのでしょうか?

何か強いNeedsがあるのなら、まずそれを聞きたいという強い気持ちがあります。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-09-08 22:43
最適化とクリーニングとデフラグって、根本的に違うよね?

 私の理解では、最適化をするには、デフラグをした上に、フラグメントが発生しにくいように並べ替える動作が必要かと思います。
 クリーニングは、不要なもの、行儀の悪いプログラムが確保したまま放っているメモリを解放するのではないかと思います。または、利用されていないエリアを、特定の値で埋めるとか。
 デフラグは、フラグメントを解消し、空きエリアをまとめるのではないかと思います。

 スワップアウトさせることでは、デフラグが行われるのではないでしょうか。
で、どれがしたいの?
「このてのプログラムが多く公開されていますが」ってことで、デフラグだと思うのですが。。。


> 何か強いNeedsがあるのなら、まずそれを聞きたいという強い気持ちがあります。
同感

> 面白そうなので少し調べてみました。
回答者の動機(多数を占めると思っているけど、どうかな?)
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-09-08 23:41
よくあるメモリ最適化ツールは、WindowsがスワップしてまでI/Oキャッシュを
割り当てようとするアルゴリズムの癖をついたものが多かったような気がします。

定期的にスワップアウトするぎりぎりまでメモリを確保して、
キャッシュに使っていたメモリを空き状態に戻すって仕組みで。

引用:

Jittaさんの書き込み (2006-09-08 22:43) より:
 クリーニングは、不要なもの、行儀の悪いプログラムが確保したまま放っているメモリを解放するのではないかと思います。または、利用されていないエリアを、特定の値で埋めるとか。


純粋にプロセスに割り当てられたメモリ、という意味ならば、
プロセスが終了した時点で自動的に全て解放されます。
終了の時点でアドレス空間そのものが無くなりますし。

#95系でよく問題になってたリソースとは別の問題ですよ。

引用:

 デフラグは、フラグメントを解消し、空きエリアをまとめるのではないかと思います。


仮想メモリによる管理を行っているOSでは、アドレス空間がプロセス毎に
独立しているため、OS全体でのメモリ断片化は特に考える必要はありません。
プロセス毎やカーネル内の断片化はあるでしょうけど。

また、断片化した際も速度には(おそらくほとんど)影響はなく、
大きなサイズの連続したメモリブロックを確保できなくなったり、
ヒープの利用効率がほんの少し下がったりする程度でしょう。

普通のプログラムでは気にする必要なんかありません。

引用:

 スワップアウトさせることでは、デフラグが行われるのではないでしょうか。
で、どれがしたいの?
「このてのプログラムが多く公開されていますが」ってことで、デフラグだと思うのですが。。。


ページングの前後でマッピングされる物理アドレスが変わっても、
OSにとってもプロセスにとっても大した差はないですよ。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-09-09 09:19
スワップポストならぬ、クロスサイトポスト。

  物理メモリの最適化プログラム

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)