セグメンテーションは Linux では (ほとんど) 使用されていませんが、x86 ではセグメンテーションをオフにできないため、セグメンテーションは保護されたフラット メモリ モデルを通じてバイパスされるだけです。
実際にはセグメンテーションは必須であり、カーネルを作成するときにコードとデータ セグメント セレクターをセットアップする必要があります。これは、これらのセグメント セレクターが実行の現在の特権レベル (CPL) をセットアップするためです: 基本的にリング 0 (スーパーバイザー モード) またはリング 3 (ユーザーランド)。セレクター (レジスター CS、DS、...) は、GDT へのオフセットをホストします。このオフセットが指す記述子に応じて、システムは特定のレベルの特権で実行されます。セグメントの使用に関する詳細については、Intel マニュアル 3A の第 3.2.2 章を参照してください。
ご覧のように、保護されたフラット メモリ モデルでは、メモリへのアクセス時に属性を直接チェックすることはありません (コードまたはデータのいずれでもありません)。そして、あなたはそれを正しく推測しました!MMU (むしろpagingと呼びます) は、システムの CPL とページの U/S 属性に応じてアクセスをチェックします。
関連するページの属性を使用してページディレクトリをセットアップするのは、カーネル (したがってリング 0で実行) 次第です。