El kernel preventivo solo significa que no hay Big Kernel Lock .
Linux tenía multitarea preventiva (es decir, el código de usuario era preferente) desde su primer momento (que yo sepa, el primer Linux 0.0.1 subido por Linus al servidor ftp de funet ya era multitarea preventiva). Si ejecutó, por ejemplo, múltiples procesos de compresión o compilación, se ejecutaron en paralelo desde el primer momento.
Contrariamente a la, en ese momento, ampliamente utilizada Win31. En Win31, si una tarea obtuvo la CPU del "núcleo", por defecto era su responsabilidad determinar cuándo devolver el control al sistema operativo (u otras tareas). Si un proceso no tenía soporte especial para esta característica (que requería trabajo de programación adicional), entonces mientras se ejecutaba, todas las demás tareas se suspendían. Incluso la mayoría de las aplicaciones básicas integradas en Win31 funcionaron así.
La multitarea preventiva significa que las tareas no tienen forma de asignar la CPU como desean. En cambio, si su intervalo de tiempo caduca, el kernel les quita la CPU. Por lo tanto, en los sistemas operativos preventivos, un proceso mal escrito o que funciona mal no puede congelar el sistema operativo o evitar que se ejecuten otros procesos. Linux siempre fue preventivo para los procesos de espacio de usuario.
El Big Kernel Lock significa que en algunos casos, dentro del espacio del kernel , todavía podría haber algunos bloqueos, evitando que otros procesos ejecuten el código protegido. Por ejemplo, no podría montar varios sistemas de archivos al mismo tiempo: si daba varios comandos de montaje, aún se ejecutaban consecutivamente, porque era necesario montar los elementos para asignar Big Kernel Lock.
Hacer que el kernel sea preventivo había requerido eliminar este gran bloqueo del kernel, es decir, hacer que el montaje y cualquier otra tarea pudieran ejecutarse simultáneamente. Fue un gran trabajo.
Históricamente, esto se hizo realmente urgente por el creciente soporte de SMP (soporte multi-CPU). En la primera vez, había realmente placas base de múltiples CPU. Más tarde, se integraron múltiples CPU ("núcleos") en un solo chip, hoy las placas base realmente multi-CPU ya son raras (generalmente están en sistemas de servidores costosos). Además, los sistemas realmente de un solo núcleo (donde solo hay una única CPU, con un solo núcleo) son raros.
Por lo tanto, la respuesta a su pregunta no es "cuál fue la razón de la no preferencia", porque siempre fue preventiva. La verdadera pregunta es qué hizo que la ejecución preventiva del núcleo fuera realmente necesaria . La respuesta es para eso: la relación creciente de los sistemas con muchas CPU y muchos núcleos.