Linuxカーネルのメモリ管理は、ページングや分割、またはその両方を使用して行われますか?
答え1
Linuxは両方を使用します。分割を使用して、利用可能なすべてのアドレス空間をマッピングし、同時にさまざまなアクセス権(デフォルトではカーネルとユーザー空間の表示)を提供します。 KERNEL_DS(カーネルデータセグメント)のLinuxソースコードをgrepすることで、いくつかの例を得ることができます。
次に、ページングを使用して仮想メモリを実装します(カーネルの「struct gdt_page」のGrepを開始点として使用)。
答え2
Linuxでのメモリ管理は、完全にページングを介して行われます。
Linuxは「小型」(通常4kB)および「大型」(2M)ページをサポートしています。前者は、ユーザーが特別なことを知ったり実行したりせずに「ただ動作」しますが、後者は特別な処理を必要とします(起動時に持続し、特別なデバイスを介してマッピングする必要があります)。
Linuxで「セグメント」が現れる唯一のコンテキストは、プロセスのデータセグメントを増やすために使用されるbrk()システムコールです(通常これは必要ではなく、mallocはユーザーの注意なしにこれを行います)。ただし、いずれにしてもメモリはページ単位で管理され、x86分割とは何の関係もありません。