Linuxで使用されるメモリ管理の原則

Linuxで使用されるメモリ管理の原則

Linuxカーネルのメモリ管理は、ページングや分割、またはその両方を使用して行われますか?

答え1

Linuxは両方を使用します。分割を使用して、利用可能なすべてのアドレス空間をマッピングし、同時にさまざまなアクセス権(デフォルトではカーネルとユーザー空間の表示)を提供します。 KERNEL_DS(カーネルデータセグメント)のLinuxソースコードをgrepすることで、いくつかの例を得ることができます。

次に、ページングを使用して仮想メモリを実装します(カーネルの「struct gdt_page」のGrepを開始点として使用)。

答え2

Linuxでのメモリ管理は、完全にページングを介して行われます。

Linuxは「小型」(通常4kB)および「大型」(2M)ページをサポートしています。前者は、ユーザーが特別なことを知ったり実行したりせずに「ただ動作」しますが、後者は特別な処理を必要とします(起動時に持続し、特別なデバイスを介してマッピングする必要があります)。

Linuxで「セグメント」が現れる唯一のコンテキストは、プロセスのデータセグメントを増やすために使用されるbrk()システムコールです(通常これは必要ではなく、mallocはユーザーの注意なしにこれを行います)。ただし、いずれにしてもメモリはページ単位で管理され、x86分割とは何の関係もありません。

関連情報