Il kernel preventivo significa solo che non esiste un Big Kernel Lock .
Linux aveva un multi-tasking preventivo (cioè il codice utente era pre-eseguibile) sin dal suo primo momento (per quanto ne so, il primissimo Linux 0.0.1 caricato da Linus sul server ftp funet era già multitasking preventivo). Se ad esempio sono stati eseguiti più processi di compressione o compilazione, sono stati eseguiti in parallelo dal primo momento.
Contrariamente al - all'epoca - Win31 ampiamente usato. Su Win31, se un'attività ha ottenuto la CPU dal "kernel", per impostazione predefinita era sua responsabilità determinare quando restituire il controllo al sistema operativo (o ad altre attività). Se un processo non aveva un supporto speciale per questa funzione (che richiedeva un lavoro di programmazione aggiuntivo), durante l'esecuzione, tutte le altre attività venivano sospese. Anche la maggior parte delle app di base integrate in Win31 ha funzionato così.
Multitasking preventivo significa che le attività non hanno modo di allocare la CPU come vogliono. Invece, se il loro intervallo di tempo scade, il kernel toglie loro la CPU. Pertanto, nei sistemi operativi preventivi, un processo scritto in modo errato o mal funzionante non può bloccare il sistema operativo o evitare l'esecuzione di altri processi. Linux è sempre stato preventivo per i processi dello spazio utente.
Il Big Kernel Lock significa che in alcuni casi, all'interno dello spazio del kernel , potrebbero esserci ancora alcuni blocchi, impedendo ad altri processi di eseguire il codice protetto. Ad esempio, non è possibile montare più filesystem contemporaneamente: se si impartiscono più comandi di mount, questi vengono comunque eseguiti consecutivamente, poiché il montaggio di elementi necessari per allocare il Big Kernel Lock.
Rendere preventivo il kernel aveva richiesto l'eliminazione di questo grosso blocco del kernel, ovvero fare in modo che il mount e qualsiasi altra attività potessero essere eseguiti contemporaneamente. È stato un grande lavoro.
Storicamente, ciò è stato reso davvero urgente dal crescente supporto di SMP (supporto multi-CPU). Per la prima volta, c'erano davvero schede madri con più CPU. Successivamente più CPU ("core") sono state integrate in un singolo chip, oggi le schede madri con più CPU sono già rare (in genere si trovano in costosi sistemi server). Anche i sistemi veramente single-core (dove esiste solo una CPU, con un singolo core) sono rari.
Pertanto, la risposta alla tua domanda non è quella "qual è stata la ragione della non preventività", perché è sempre stata preventiva. La vera domanda è: cosa ha reso davvero necessaria l'esecuzione preventiva del kernel . La risposta è per questo: il rapporto crescente tra molti sistemi CPU e molti core.