Итак, я знаю, что Linux использует четыре сегмента по умолчанию для процессора x86 (код ядра, данные ядра, код пользователя, пользовательские данные), но все они имеют одинаковую базу и ограничение (0x00000000 и 0xfffff), что означает, что каждая карта сегмента к одному и тому же набору линейных адресов.
Учитывая это, почему даже есть сегменты пользователя/ядра? Я понимаю, почему для кода и данных должны быть отдельные сегменты (только из-за того, как процессор x86 имеет дело с регистрами cs и ds), но почему бы не иметь один сегмент кода и один сегмент данных? Защита памяти осуществляется через пейджинг, а сегменты пользователей и ядра в любом случае сопоставляются с одинаковыми линейными адресами.