Упреждающее ядро означает только то, что Big Kernel Lock не существует .
У Linux была вытесняющая многозадачность (т. Е. Пользовательский код был вытесняемым) с самого первого момента (насколько я знаю, самая первая Linux 0.0.1, загруженная Линусом на ftp-сервер funet, уже была вытесняющей многозадачностью). Если вы выполнили, например, несколько процессов сжатия или компиляции, они выполнялись параллельно с первого момента.
Вопреки - в то время - широко используемому Win31. На Win31, если задача получила ЦП от «ядра», по умолчанию она должна была определить, когда вернуть управление операционной системе (или другим задачам). Если процесс не имел специальной поддержки для этой функции (что требовало дополнительной работы по программированию), то при выполнении все остальные задачи были приостановлены. Так работали даже самые простые приложения, интегрированные в Win31.
Упреждающая многозадачность означает, что задачи не могут распределять процессор так, как они хотят. Вместо этого, если их временной интервал истекает, ядро отнимает у них процессор. Таким образом, в приоритетных операционных системах плохо написанный или плохо функционирующий процесс не может заморозить ОС или предотвратить запуск других процессов. Linux всегда был преимуществом для процессов пользовательского пространства.
Большая блокировка ядра означает, что в некоторых случаях внутри пространства ядра все еще могут быть некоторые блокировки, не позволяющие другим процессам запускать защищенный код. Например, вы не могли монтировать несколько файловых систем одновременно - если вы дали несколько команд монтирования, они все равно выполнялись последовательно, потому что монтирование требовало выделения Big Kernel Lock.
Превентивное ядро потребовало устранения этой большой блокировки ядра, т. Е. Монтирование и любые другие задачи для одновременной работы. Это была большая работа.
Исторически это было действительно актуально из-за растущей поддержки SMP (поддержка нескольких процессоров). В первый раз были действительно многопроцессорные материнские платы. Позже несколько процессоров («ядер») были интегрированы в один чип, сегодня действительно многопроцессорные материнские платы уже редки (как правило, в дорогих серверных системах). Также действительно одноядерные системы (где есть только один процессор с одним ядром) встречаются редко.
Таким образом, ответ на ваш вопрос не в том, «что послужило причиной отсутствия вытеснения», потому что оно всегда было вытесняющим. Реальный вопрос в том, что сделало упреждающее выполнение ядра действительно необходимым . Ответ за это: увеличение соотношения многоядерных, многоядерных систем.