5

たとえば、グローバル変数はメモリ内の特定の場所に配置されるだけだと授業で聞きました。2 つのプログラムが誤って同じメモリ位置を異なる変数に使用するのを防ぐにはどうすればよいですか?

また、両方のプログラムが引数とローカル変数に同じスタックを使用していますか? もしそうなら、変数が互いにインターリーブしてインデックスを台無しにするのを防ぐにはどうすればよいですか?

ちょっと興味があるんだけど。

4

3 に答える 3

6

最近のほとんどのプロセッサにはメモリ管理ユニット (MMU) があり、OS は、プロセスごとに個別のスタックを含む、保護された個別のメモリ セクションを作成できます。MMU の助けを借りて、プロセッサは、割り当てられたメモリのみを変更/アクセスするように各プロセスを制限できます。これにより、あるプロセスが別のプロセスのメモリ空間に書き込むことができなくなります。

最近のほとんどのオペレーティング システムは、MMU の機能を使用して各プロセスを保護します。

ここにいくつかの役立つリンクがあります:
メモリ管理ユニット
仮想メモリ

于 2012-08-31T18:44:16.297 に答える
5

これは、最新のオペレーティング システムが各プロセスを個別の仮想アドレス空間にロードすることによって行うことです。複数のプロセスが同じ仮想アドレスを参照する場合がありますが、オペレーティング システムは、最新のハードウェアの助けを借りて、各プロセスを個別の物理アドレスにマップし、1 つのプロセスが別のプロセスに割り当てられた物理メモリにアクセスできないようにします1


1デバッガーは注目すべき例外です。オペレーティング システムは、多くの場合、デバッガーが他のプロセスにアタッチしてメモリ空間を調べるための特別なメカニズムを提供します。

于 2012-08-31T18:43:25.530 に答える
3

あなたの質問に対する簡単な答えは、オペレーティング システムがこれらの問題を処理するということです。これらは非常に深刻な問題であり、オペレーティング システムのジョブのかなりの部分が、すべてを別のスペースに保持しています。オペレーティング システムは、他のすべてのプログラムを追跡し、それぞれがスペースを使用していることを確認するプログラムを実行します。これにより、スタックも分離されます。各プログラムは、OS によって割り当てられた独自のスタックを実行しています。OS がこの割り当てを行う方法は、実際には複雑な作業です。

于 2012-08-31T18:48:00.283 に答える