TLDPの仮想メモリの誤った説明

TLDPの仮想メモリの誤った説明

TLDPの仮想メモリの説明は完全に混乱しています。

http://www.tldp.org/LDP/tlk/kernel/processes.html#tthFtNtAAB

彼らは言った:

各個々のプロセスは独自の仮想アドレス空間で実行され、セキュアカーネル管理メカニズムを介さないと他のプロセスと対話することはできません。

私にとって、「自己仮想アドレス空間」は、32ビットモードの4GB RAM(0000:0000 - FFFF:FFFF)です。しかし、その意味はそれではありませんか?両方のプロセスが仮想アドレス 1111:1111 を指す場合、同じ物理アドレスを意味するため、すべてのプロセスが同じ 4Gb 仮想アドレス空間を共有しますか?

また、Windowsに関する内容も読みました。ここ、それらを本物各プロセスには別々の仮想アドレス空間があり、ユーザーモードには別々の2Gb RAMがあり、カーネルモードには2Gb RAMが共有されるため、2つの異なるプロセスが1111:1111を指し、異なる物理メモリにマップできます。彼ら? :)

更新:私の質問の写真。 Linux用の写真は何ですか?

ケース1: ここに画像の説明を入力してください。

ケース2 ここに画像の説明を入力してください。

答え1

LinuxとWindowsはここでほぼ同じように動作します。各プロセスには独自の「仮想」アドレス空間があります。これは、メモリが実際に物理的に利用可能であるという意味ではなく(明らかにほとんどの32ビットシステムには十分なメモリがないため)、これが仮想的な理由です。

さらに、そこに使用されたアドレスは物理アドレスと一致しません。したがって、AAAA:0000の物理メモリセグメントは9128:2af2に対応します。ポイントは気にする必要がないということです。アプリケーションが興味を持っているのは、興味のあるコンテンツが独自のメモリセグメントにある場所です。はい、これはまた、両方のアプリケーションが独自のメモリビューで同じアドレスを指し、異なるものを取得できることを意味します。

プロセスの物理メモリページに加えて、デバイス(ビデオカードなど)に属するアドレス、ダイナミックリンクライブラリ、またはプロセス間で共有されるメモリ(これは「セキュアカーネル管理」「メカニズム」とはどういう意味ですか?

仮想メモリとプロセスアドレス空間のレイアウトについてより深く知りたい場合や、わかりにくい場合は、「Tanenbaum」「Operating Systems」などの教科書をお勧めします。http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memoryまた読む価値があります。

答え2

「自分の仮想アドレス空間」は、実際に話すのと反対です。つまり、アドレス 11111111 が次を指すことを意味します。その他物理メモリ内の各プロセスの位置。仮想アドレスが異なるプロセスの同じ物理アドレスに対応する場合、プロセスはアドレス空間を共有します。実際、一部のアドレス空間は複数のプロセス間で共有されます(たとえば、後でほぼforkすべてのページが親プロセスと子プロセス間で共有されます)。これは「ケース2」の図に対応します。この点では、LinuxとWindowsも変わりません。

forkLinuxは実際にはいくつかのコンパクトな組み込みデバイスで実行できます(ダウングレードモードではこのモードはサポートされていません)。メモリ管理ユニット、MPU(メモリ保護装置)は1つしかありません。これらのデバイスには仮想アドレス空間はありませんが(ケース2)、各プロセスにはメモリページに固有の特権セットがあるため、プロセス間でまだ分離されています。

関連情報