Linuxカーネルのメモリ管理は、ページングまたはセグメンテーション、あるいはその両方を使用して行われますか?
Linuxカーネルのメモリ管理は、ページングまたはセグメンテーション、あるいはその両方を使用して行われますか?
回答:
Linuxは両方を使用します。それはセグメンテーションを使用して、さまざまなアクセス権を与えながら、利用可能なすべてのアドレス空間をマッピングします。基本的には、カーネルとユーザー空間のビューです。いくつかの例については、KERNEL_DS(カーネルデータセグメント)のLinuxソースコードをgrepできます。
その後、ページングは仮想メモリの実装に使用されます(開始点として、カーネル内の「struct gdt_page」のGrep)。
Linuxでのメモリ管理は、ページングによってのみ機能します。
Linuxは「小さい」(通常は4kB)ページと「大きい」(2M)ページの両方をサポートしています。前者は特別なことを何も知らない、または実行しなくても「そのまま動作」し、後者は特別な処理が必要です(ブート時に予約し、特別なデバイスを介してマップする必要があります)。
Linuxで「セグメント」が現れる唯一のコンテキストは、プロセスのデータセグメントを増やすために使用されるbrk()syscallです(通常、これは必要ありません。mallocは、気にすることなくそれを行います)。ただし、どちらの方法でも、メモリはページ単位で提供され、ページ単位で管理されます。x86セグメンテーションとは関係ありません。