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

プログラム動作中にメモリの全領域をベリファイチェックをしたいと思っています。
ベリファイチェックを行うプログラムが動作する時には、他のタスクが動作することはないのでベリファイする部分を一時退避して、チェック後に元に戻すと言うことを考えています。
しかし、ベリファイチェックを行うプログラム自身が使用する領域も当然チェック対象となってしまいます。
アセンブラで記述するのであれば、何とか書ける気がするのですが、C言語で記述することは可能でしょうか?
上記のようなメモリ診断手法を解説しているページなどあればお教えください。

●質問者: maq
●カテゴリ:コンピュータ
✍キーワード:C言語 アセンブラ タスク プログラム ベリファイ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● くまっぷす
●45ポイント

http://www.hatena.ne.jp/awindow

回答が付かないようなので。ポイントは不要です。

まず、対象としているシステムを明らかにされるほうがよいと思います。

例えばPCなのか、組み込みの機器なのか。

OS上で走るのか、だとすると他のアプリが動いている状態で平行して走らせる必要があるのか、あるいはOS起動時に強制的に処理を横取りして走るのかなど…。

仮に対象が”PC”であれば、メモリ全体をアクセスするためにはx86系のメモリモデルを理解する必要があります。MMUの設定やページの切り替えなどはC言語だけではちょっと厳しいですね。

http://www.memtest86.com/

Memtest86 - Memory Diagnostic Page

実際にはこういうように、OSも起動しないでテストプログラムを起動時に実行するやり方を取るようです。

◎質問者からの返答

ありがとうございます。

対象システムはOSは搭載されていない組み込み機器です。


2 ● terra5
●45ポイント

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は載っていない組み込み機器です…。

関連質問


●質問をもっと探す●



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