MMUはUnix / Linuxカーネル内にありますか?それとも、独自のメモリを持つハードウェアデバイスにのみありますか?

MMUはUnix / Linuxカーネル内にありますか?それとも、独自のメモリを持つハードウェアデバイスにのみありますか?

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

だから混乱しています。すべての変換がハードウェアで行われ、カーネルは変換を実行しませんか?デフォルトでは、オペレーティングシステムは実際の物理アドレスについて何も知りません。

Unixベースのオペレーティングシステムについて尋ねていますが、他のオペレーティングシステム(Windowsなど)についても知っているか、最新のコンピュータで一般的に使用されている場合はお知らせください。ありがとうございます。

ベストアンサー1

MMU(メモリ管理装置)コンピュータシステムの物理コンポーネントであり、通常(必ずしもそうではない)CPUの一部です。仮想アドレス(x86世界では線形アドレスとも呼ばれます)を物理アドレスに変換します。また、メモリアクセス制御、キャッシュ制御、バス調停を実行することもできます。通常、それ自身のメモリがなく、システムのメインメモリのデータに依存して動作します。

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

ユーザー空間プロセスはこれについて何も知らず(通常)自分が使用する線形アドレスに対応する物理アドレスを知らず、通常はマッピングにアクセスできません。場合によっては、物理マッピングは破損しますが、通常はセキュリティの脆弱性として扱われ、すばやく解決されます。ただし、Linuxでは十分な権限を持つプロセスが/proc/<pid>/pagemap

特にLinuxの場合は、以下を参照してください。メモリ管理文書、特にページテーブルのセクションを確認してください。

おすすめ記事