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