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