自作のプログラムをUSBから実行しているときにUSBメモリを引っこ抜いた場合、ファイル操作がないためか処理が正常に動作し続けました。実行ファイルは、実行後になくなっても正常動作し続けるものなのでしょうか?

Windowsのバージョンごとに違うと思いますが、考え方も含めて教えていただきたく宜しくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/03/13 10:51:11
  • 終了:2007/03/18 14:32:48

ベストアンサー

id:ardarim No.7

ardarim回答回数896ベストアンサー獲得回数1442007/03/16 02:42:33

ポイント30pt

ページサイズはOSによって異なりますが、Windowsの場合は4096バイトのはずです。

RAM, Virtual Memory, Pagefile and all that stuff機械翻訳版もありますがあまりにへっぽこな日本語なのでおすすめしません...)

Process, Working Set, _Total - this is a measure of the amount of virtual memory in "active" use
          It shows how much RAM is required so that the actively used virtual memory for all processes is in RAM. This is always a multiple of 4,096, which is the page size used in Windows.  As demand for virtual memory increases above the available RAM, the operating system will adjust how much of a process's virtual memory is in its Working Set to optimize the use of available RAM and minimize paging.
id:harunoharuno

回答ありがとうございます。英語文章は

苦手なのですが、避けては通れぬ道ですね。

読んでみることにします。

2007/03/18 14:28:46

その他の回答(6件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982007/03/13 10:56:52

ポイント30pt

http://www.sugilab.net/jk/joho-kiki/1406/index.html

パソコンには メモリという記憶するところがあります。

パソコンによって違いますが、そのメモリは 256MBとか 512MBなどの容量があります。

実行させるプログラムは たいてい 数メガ以下ぐらいでしょう。

たとえば 1MBの場合、パソコンは いったんそれを メモリにすべて読み込みます。

256MBのメモリに1MB読み込むと 残りは 255MBとなります。

そして実行は、すべてそのメモリの中で 行われるため そのプログラムの元は 必要なくなります。

巨大なブログラムの場合は、その実行単位のプログラムを 細かくわけて メモリにすべて読み込まなくていいようにしています。

id:harunoharuno

変数などがメモリに蓄えられるという話は聞いたことがあります。起動後exeがなくなってもそのエリアを見て処理を行っているため動作し続けることができるのですね。回答ありがとうございました。

2007/03/13 21:57:36
id:Kumappus No.2

くまっぷす回答回数3784ベストアンサー獲得回数1852007/03/13 11:17:54

ポイント30pt

http://www.atmarkit.co.jp/fwin2k/special/winxp_over/winxp_over_1...

基本的にプログラムが実行されるのは本体内のメモリ(RAM)にロードされてからです。

したがって質問者さんのプログラムがメモリ上に全部入りきってしまったとするとそのまま動きつづけることはありえます。

もちろん、プログラムが大きくて、かつメモリが少ない場合は部分的に必要なところだけ適宜読み込んで実行、ということを行うので例えばその自作のプログラムも全ての機能が問題なく動いたかどうかはわかりません。

id:harunoharuno

基本的にプログラムはメモリに読み込んで実行するが、でかいプログラムの場合は、必要な場所のみ順次メモリに蓄えられて処理を行うという感じなんですね。私が作ったプログラムは、2M位なのでメモリにすっぽり収まった形になったようですね。

2007/03/13 22:25:31
id:goldenden No.3

goldenden回答回数103ベストアンサー獲得回数52007/03/13 11:51:39

ポイント20pt

RAMディスク

http://ja.wikipedia.org/wiki/RAM%E3%83%87%E3%82%A3%E3%82%B9%E3%8...


メモリは高速な記憶領域としての利用も可能です。

かつてのDOS、また最近の特化した1FDLinux(HDDレス、FDDレス)も

メモリ領域にOS、プログラムがメモリにコピーされ利用されています。


RAMディスクにプログラムを置いて、実行するのと同じような状態だと思います。

id:harunoharuno

回答ありがとうございます。

2007/03/13 22:33:42
id:kurukuru-neko No.4

kurukuru-neko回答回数1844ベストアンサー獲得回数1552007/03/13 12:06:12

ポイント40pt

>正常動作し続けるものなのでしょうか?

プログラムを実行→

USBメモリーよりプログラムを主記憶(RAM)

に読み込み実行する。 このときWindowsは、

主記憶(RAM)に余裕がある場合、プログラム

を全て主記憶(RAM)に読み込んでしまう。

プログラムの容量が大きい場合は、必要な部分

のみを主記憶(RAM)に適時読み込みを行う。

通常プログラム実行中はUSBメモリーを

抜けない場合Windowsが警告をだすが、

人が勝手に抜いた場合プログラムがエラー

となり処理を中断する可能性もある。

http://www.wincons.or.jp/view/vol23/page8.html

http://ja.wikipedia.org/wiki/%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%B...

http://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E3%83%A1%E3%83%A...

id:harunoharuno

プログラムの容量が大きい場合は、必要な部分

のみを主記憶(RAM)に適時読み込みを行うのですね。

私のプログラムは容量が少ないので、USBメモリを抜いても問題なかったのでしょう。

仮想記憶という仕組みの説明を見て、メモリが不足した場合、

HDDなどにデータを待避するようなイメージかなぁと考えました。

これだったら、メモリに全てのデータが入っている場合でも、

HDDなどに待避されるはずですし、USBがなくても

動作上問題がないように思えます。

2007/03/13 23:50:23
id:hissssa No.5

hissssa回答回数423ベストアンサー獲得回数1272007/03/13 17:14:26

ポイント30pt

Windowsのメモリ管理の仕組みに依存する話ですね。ある程度は他の方も言及されているので補足をば。

Windowsでアプリケーションを実行する際、当然そのプログラムコードがメモリに読み込まれて実行されるわけですが、このときにそのメモリエリアには「Discardable」(破棄可能)な属性が付与されています。この属性が付与されたメモリエリアは、もしメモリが不足した場合にOSによって削除されてしまいます。

ただ、そこに置かれていたプログラムコードは、通常ならディスク装置に残っているわけなので、必要ならいつでもまた読み込む事ができます。よって、プログラム処理がまたその部分のコードを必要としたときに、OSはその部分のメモリを再確保してプログラムコードを読み込み、何事もなかったかのように処理を継続するわけです。

ご質問のようにUSBメモリに書かれたプログラムを実行し、その後そのメモリを強制的に抜いたような場合は、そのプログラムがこのメモリ破棄という状態にならない限り、継続して動作し続けることが出来ます。もし破棄が実施されて、その後に再読込みが必要になった場合、その時点でアプリケーションエラーが発生してプロセスが停止することになります。

まぁUSBメモリにおく程度の小さなプログラムなら、破棄されるようなことはめったにないとは思いますが・・・。

http://support.microsoft.com/kb/112676/ja

id:harunoharuno

>>メモリエリアには「Discardable」(破棄可能)な属性が付与されています

破棄可能ということならEXEがなくなったときの

動作は、かなり不安定な状態ということになりますね。回答ありがとうございます。

2007/03/13 23:53:39
id:ardarim No.6

ardarim回答回数896ベストアンサー獲得回数1442007/03/14 00:17:46

ポイント30pt

一般的には、正常に動作することが保証されません。


実行ファイルのコード部分は、基本的にはオンデマンドでデバイスから読み込みが行われます。したがって、ワーキングセット(プログラム中で頻繁に動作するコード)の実行は問題がありませんが、たとえば何か例外処理が発生した場合など、プログラムが起動してから1度も動作していないようなコードに制御が移った場合に、その部分がまだUSBデバイスからRAM上にロードされていない可能性があり、その場合はカーネルがコードにアクセスすることができず、アプリケーション例外(この場合はページ違反かな?)が発生します。


ただ、デバイスからRAMへのロードはページ単位で行われるため、ある関数がまだ1度も実行されていなくても、同じページ内に既にロードされた関数があればその関数もページごとロードされているのでこの場合は問題はありません。1度も実行されていないページに制御が移ると問題が発生します。


ダミー

http://q.hatena.ne.jp/1173750669

id:harunoharuno

いつも回答ありがとうございます。USBを抜いたとしても読み込んだページにある関数は

正常に動作し、それ以外の場所を実行するとエラーになるということですか・・・。

ページの概念が浅いので質問しますが、

1ページにはどの程度のデータ量がはいるものなのでしょうか?教えていただきたく宜しくお願いします。

2007/03/15 22:02:47
id:ardarim No.7

ardarim回答回数896ベストアンサー獲得回数1442007/03/16 02:42:33ここでベストアンサー

ポイント30pt

ページサイズはOSによって異なりますが、Windowsの場合は4096バイトのはずです。

RAM, Virtual Memory, Pagefile and all that stuff機械翻訳版もありますがあまりにへっぽこな日本語なのでおすすめしません...)

Process, Working Set, _Total - this is a measure of the amount of virtual memory in "active" use
          It shows how much RAM is required so that the actively used virtual memory for all processes is in RAM. This is always a multiple of 4,096, which is the page size used in Windows.  As demand for virtual memory increases above the available RAM, the operating system will adjust how much of a process's virtual memory is in its Working Set to optimize the use of available RAM and minimize paging.
id:harunoharuno

回答ありがとうございます。英語文章は

苦手なのですが、避けては通れぬ道ですね。

読んでみることにします。

2007/03/18 14:28:46

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません