ベリファイチェックを行うプログラムが動作する時には、他のタスクが動作することはないのでベリファイする部分を一時退避して、チェック後に元に戻すと言うことを考えています。
しかし、ベリファイチェックを行うプログラム自身が使用する領域も当然チェック対象となってしまいます。
アセンブラで記述するのであれば、何とか書ける気がするのですが、C言語で記述することは可能でしょうか?
上記のようなメモリ診断手法を解説しているページなどあればお教えください。
回答が付かないようなので。ポイントは不要です。
まず、対象としているシステムを明らかにされるほうがよいと思います。
例えばPCなのか、組み込みの機器なのか。
OS上で走るのか、だとすると他のアプリが動いている状態で平行して走らせる必要があるのか、あるいはOS起動時に強制的に処理を横取りして走るのかなど…。
仮に対象が”PC”であれば、メモリ全体をアクセスするためにはx86系のメモリモデルを理解する必要があります。MMUの設定やページの切り替えなどはC言語だけではちょっと厳しいですね。
Memtest86 - Memory Diagnostic Page
実際にはこういうように、OSも起動しないでテストプログラムを起動時に実行するやり方を取るようです。
http://www.nifty.com/webapp/digitalword/word/005/00533.htm
@nifty:デジタル用語辞典:仮想メモリ
まずWindows,LinuxといったOSの場合は通常仮想記憶、仮想メモリをつかっており、
通常のプログラムは通常の手段物理的なアドレスでメモリアクセスにアクセスすらできません。
具体的な方法はOSなどによりますし、少なくても特権ユーザー、アドミニストレイター等の権限が必要です。
http://www.nifty.com/webapp/digitalword/word/011/01116.htm
@nifty:デジタル用語辞典:マルチタスク
Pentium4のようなHTがあったり、デュアルコアのCPUだったり、マルチCPUなら同時に二つ以上動きます。
またシングルであっても、タスクスイッチはOSによってはいつ起きるか分りませんから、メモリの待避途中にタスクが切り替わる可能性があります。
OSによってはいろいろな手段で禁止したり起きないように配慮することも可能な場合がありますが、当然OSにより異なります。
http://www.nifty.com/webapp/digitalword/word/005/00562.htm
@nifty:デジタル用語辞典:割り込みハンドラ
また、通常はタスクよりも優先されて割り込み処理が動きます。
これも割り込みを禁止することでとめられますが、具体的にはOSによりますしそもそも可能かどうかという話もあると思います。
まあ通常のOS動作中に行うのはまず無理と考えた方がいいと思います。
おそらくオーバーヘッドも半端じゃないでしょうし、レスポンスがかなり悪化するでしょう。
OSは載っていない組み込み機器です…。
ありがとうございます。
対象システムはOSは搭載されていない組み込み機器です。