Почему Linux на x86 использует разные сегменты для пользовательских процессов и ядра?

Итак , Я знаю, что Linux использует четыре сегмента по умолчанию для процессора x86 (код ядра, данные ядра, пользовательский код, пользовательские данные), но все они имеют одинаковую базу и ограничение (0x00000000 и 0xfffff), что означает, что каждый сегмент соответствует одному и тому же набору линейные адреса.

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

18
задан Ciro Santilli 新疆改造中心法轮功六四事件 9 November 2015 в 16:49
поделиться