ユーザーアドレス空間とは何ですか?どこで使用されますか?

ユーザーアドレス空間とは何ですか?どこで使用されますか?

私はその過程について読んでいました。私は、次の問題に直面した「プロセスを作成する方法」というトピックを見つけました。

カーネルが見るプロセスイメージは、自分だけの空間user address space、つまり他のユーザーの干渉から自由な保護された空間で実行されています。このアドレス空間には複数のセグメントがあります。

ㅏ。テキストセグメント
B. データセグメント
C. ユーザーセグメンテーション

私はまだこれが何を意味するのか理解していません。誰かがこのトピックについて私に教えてもらえますか?

ベストアンサー1

LinuxまたはUnixプロセスのメモリ(RAM)は単なる線形バイト配列です。各バイトには0から最大値までの数字があります。これがプロセスの「アドレス空間」です。アドレス空間のサイズは、CPUが32ビットか64ビットかによって異なりますが、メモリ内のすべてのバイトは、そのバイトのアドレス(単純な数字)に基づいて読み書きできます。

プロセスには、実行可能コード、使用するデータ、実行可能コードで実行した関数呼び出しのLIFOアクティブ化レコードスタックなど、さまざまな部分があります。これらは彫刻です。アドレス空間ブロックは、実行可能コードである「コードセグメント」専用です。アドレス空間の別のブロックは初期化変数(通常はグローバル変数)に割り当てられます。これは通常「データセグメント」と呼ばれますが、データセグメントとすることができます。これ」BSSセグメント通常は初期化されていない変数に存在し、通常はセグメントを増やすことができます。

プロセスアドレス空間の一部の他の部分は、動的にロードされたライブラリ、C ++コンストラクタまたはデストラクタ、動的リンカコードなどに専用にすることができ、これは非常に複雑になる可能性があります。

その後、実行可能ファイル形式の問題があります。ほとんどのLinuxまたはUnixプロセスでは「ELF」ファイル形式、MacではMach-O形式を使用しますが。多くのプロセスには、初期アドレス空間に対応する実行可能フラグメントがあります。

私の考えではこのページプロセスのアドレス空間を埋めることが何であるかについてのアイデアを提供します。 「アドレス」は、基本的にメモリのバイト名を指定する数値であることを覚えておいてください。一部の作成者は実行プロセスをディスク上のファイルと混同することがあります。

アドレス空間が何であるかについては、実行中のすべてのプロセスのユーザーアドレス空間があります。これにより、あるプロセスが別のプロセスからデータを書き、2番目のプロセスがクラッシュするのを防ぎます。つまり、アドレス空間は、バグのあるプログラムが他のプログラムを破壊するのを防ぐために使用されます。さらに、アドレス空間セグメントは互いにデータを処理するので、あるユーザのプログラムが他のユーザに見せたくない情報をメモリに保持することができる。アドレス空間を使用すると、メモリ内のデータへのアクセスを制御できます。

おすすめ記事