Date: 2013-01-28 20:55 (UTC)
From: [identity profile] archaicos.livejournal.com
Если я не ошибаюсь, Windows 3.xx, запущенный на 80286 или не в самом каком-то там расширенном режиме на 80386, работал с сегментами, и в OS/2 также использовались сегменты.

Четыре уровня - многовато на практике. Тем не менее, некоторые виртуальные машины использовали один (1-й) в дополнении к двум основным (0 и 3).

С задачами вышла промашка - медленно. Однако, если происходит переполнение стека в ядре на 0-м уровне, единственный гарантированный механизм не умереть прямо там по #DF - использовать задачу в качестве обработчика исключения #DF.
(deleted comment)

Date: 2013-01-28 21:31 (UTC)
From: [identity profile] archaicos.livejournal.com
Медленность не в задачах, а в том, как было сделано аппаратное переключение между ними. Не всегда нужно сохранять и восстанавливать так много контекста и со всеми проверками, не всегда нужно перезагружать корень таблицы страниц, сбрасывая при этом весь TLB, просто читать TSS из памяти - дополнительный тормоз тогда, как, в сегментных регистрах кода ядра обычно сидят константы - чего их из TSS читать-то? Можно так загрузить. Короче, сразу сделать быстро не вышло, а потом уже поздно было - т.к. уже обошлись без и вряд ли бы переписывали, если бы сделали примерно так же быстро - уже ж работает.
(deleted comment)

Date: 2013-01-28 21:49 (UTC)
From: [identity profile] archaicos.livejournal.com
Всех подробностей не знаю/помню, но корень сбрасывать точно не надо, т.к. с перезагрузкой CR3 на 80386 уйдут и записи в TLB для кода и данных ядра, которые должны быть адресуемы в контекстах всех процессов и ниток (иначе как вызывать ф-ции ядра и данными с ним обмениваться?). Потом в 80486 Pentium специально добавили бит Global в элементы таблиц страниц чтобы TLB для таких общих страниц не сбрасывались.
Edited Date: 2013-01-28 21:50 (UTC)
(deleted comment)

Date: 2013-01-28 22:07 (UTC)
From: [identity profile] archaicos.livejournal.com
В какой-то момент придётся, да. Если не это, то ещё есть аргумент гибкости кода без TSS - одной специфичной для железа деталькой меньше (комментарий в старом коде Linux об этом говорит).