web-dev-qa-db-ja.com

MMU Unix / Linuxカーネル内ですか?それとも独自のメモリを備えたハードウェアデバイス内ですか?

だから私はいつもMMUはアドレスを物理アドレスに変換するunixカーネルの一部だと思っていましたが、MMU wikiページでは通常持っているコンピュータハードウェアだと言っています独自のメモリですが、そのページではUnix/Linuxオペレーティングシステムについてはあまり説明されていません

だから私は混乱しています、すべての翻訳はハードウェアで行われ、カーネルは翻訳を行いませんか?基本的に、オペレーティングシステムは実際の物理アドレスについて何も知りませんか?

Unixベースのオペレーティングシステムについて質問していますが、Windowsのような他のオペレーティングシステムについて知っている場合、または最近のコンピューターで一般的なことを知っている場合は、感謝します。

1
John P

MMU(メモリ管理ユニット) はコンピュータシステムの物理コンポーネントであり、通常はCPUの一部です(必ずしもそうとは限りません)。仮想アドレス(別名x86の世界では線形アドレスとして)を物理アドレスに変換します。メモリアクセス制御、キャッシュ制御、バスアービトレーションを適用することもできます。通常は独自のメモリを持たず、システムのメインメモリ内のデータに依存して動作します。

MMUは、ページテーブルなどのデータ構造に格納されている情報を使用してこの変換を実行します。これらは、線形アドレス範囲に対応する物理アドレス範囲を指定します(存在する場合-ページは「存在しない」可能性があります)。 。ページテーブルはカーネルによって設定され、カーネルがマッピングの内容を決定します。したがって、物理アドレスの最終的な権限はカーネルですが、常にMMUを使用して動作します。言い換えると、CPUは常に線形アドレスで動作し、MMUによって物理アドレスに変換されますが、カーネルは変換を認識し、それらを実行するためにMMUをプログラムします。

ユーザースペースプロセスはこれらすべてに気づかず、(通常は)使用する線形アドレスに対応する物理アドレスを認識せず、通常はマッピングにもアクセスできません。物理的なマッピングが漏洩する場合もありますが、それらは通常、セキュリティの脆弱性と見なされ、迅速に対処されます。ただし、Linuxでは、十分な権限を持つプロセスは、/proc/<pid>/pagemapで物理マップを確認できます。

特にLinuxについては、 メモリ管理ドキュメント 、特に ページテーブルの調査に関するセクション を参照してください。

5
Stephen Kitt

メモリ管理ユニット(MMU)は、仮想アドレスを物理アドレスに変換するハードウェアです。たとえば、CPUが読み取るアドレスを発行すると、MMUはその仮想アドレスを物理アドレスに変換してから、物理アドレスをメモリバスに発行します。

MMUはオペレーティングシステムによってプログラムされます。オペレーティングシステムはメモリ(物理と仮想の両方)を管理し、仮想から物理へのマッピングを管理します。

2
Andy Dalton