Si sente spesso insultare Linux in questo modo:
È un sistema operativo che usa ancora un kernel monolitico degli anni ‘70
Farà piacere sapere a chi afferma questo con lo scopo di denigrare Linux che Windows ha un kernel monolitico, e anzi.. “più” monolitico di Linux.. (anche se lo chiamano Kernel Ibrido)
E ora vi spiego anche perché..
Iniziamo a capire cos’è un kernel..
Kernel
Prima di tutto: Linux È il kernel, dire “Kernel di Linux” non è corretto.. perché il kernel non è parte di Linux, Linux è un kernel!
il kernel (nucleo) è un programma che si occupa di dare le funzionalità di base per l’utilizzo di un computer come:
- gestione della CPU (o processore), che è quell’hardware che esegue effettivamente i programmi
- gestione della memoria (RAM e non solo), nella quale vengono caricati i dati su cui si lavora, compresi i programmi stessi (un programma viene caricato in RAM prima di poter essere eseguito)
- gestione della comunicazione con le periferiche ( I/O – Input/Output)
- può fornire il multi-tasking: a voi sembra che più programmi funzionino contemporaneamente, in realtà è un illusione creata grazie alla velocità di esecuzione del processore, si esegue un pezzo di ogni programma per volta, ma sempre uno alla volta (a meno di non avere sistemi a più processori, come i nuovi Dual Core / Quad Core e dei programmi scritti per sfruttare questi sistemi)
- schedulazione dei processi: decide in che ordine e “quanto” allocare il processore ai singoli programmi (processi) attivi.
- crea lo spazio degli indirizzi che le applicazioni sovrastanti possono utilizzare (qui si crea il limite dei 4 GB di RAM nei kernel Windows ad esempio, in Linux questo limite è 64GB )
- fornire dei modi per far comunicare i programmi
- meccanismi di sicurezza
- una serie di servizi.. ( system calls – chiamate di sistema )
Il Kernel è il sistema operativo, anche se siamo abituati a concepirlo come “un insieme di programmi”. In windows anche l’interfaccia grafica fa parte del Kernel, in Linux invece è un programma “utente” che gira sopra il kernel.
I servizi messi a disposizione dal server non sono in genere orientati agli utenti, non direttamente almeno. Sono orientati ai programmi: ad esempio ci sarà un servizio che permette di preparare l’esecuzione di un programma, uno che permette di scrivere sulla memoria.. e così via.. In windows anche tutto il server grafico (come già detto) è composto da servizi, tutti forniti dal Kernel del sistema.
Ma se il Kernel è un programma.. cos’ha di diverso dagli altri programmi?
È molto semplice: è molto più difficile programmare un kernel perché si utilizza direttamente l’hardware, non esistono meccanismi di protezione e un piccolo errore può bloccare tutto il sistema.
I programmi che utilizziamo di solito girano SOPRA al kernel, in uno spazio protetto (detto user space, spazio utente). I programmi in user-space non possono scrivere in qualunque area di memoria (neppure per sbaglio) perché è il kernel che si preoccupa che questo non accada! Se un programma si blocca (auspicabilmente) il Kernel non si blocca e il sistema resta utilizzabile.
In contrapposizione non c’è nulla che controlla l’operato del Kernel e quindi, come già detto, un piccolo errore può far crashare l’intero sistema, bloccandolo e forzandoci al riavvio! Lo “spazio” senza protezioni e complesso in cui “gira” il kernel si chiama kernel-space.
In genere anche tutti i driver e l’architettura di rete funzionano in kernel space, ecco perché un driver difettoso può rendere instabile tutto il sistema (sia su windows che su Linux).
Come state iniziando a capire.. tutti i programmi che girano in kernel-space possono causare problemi di stabilità, corruzione dei dati ecc.. ecc..
Kernel Monolitico e Microkernel
Esistono sostanzialmente 2 tipologie di kernel:
- microkernel: visto che scrivere un programma in kernel space è difficile e rischioso si scrive un kernel minimale con “lo stretto indispensabile” ad utilizzare l’hardware, e quindi si scrivono tutti i servizi (chiamate di sistema) in user-space, esse comunicano direttamente con il kernel minimale, tutte le altre applicazioni in user-space possono decidere di utilizzare le chiamate di sistema o riferirsi direttamente al microkernel. L’approccio è più sicuro e semplice da programmare ma meno efficiente dal punto di vista delle prestazioni perché la comunicazione tra chiamate di sistema e kernel deve avvenire tramite uno scambio di messaggi che appesantisce tutto il sistema. I driver girano in user space.
- kernel monolitico: tutto quanto necessario ad usare il sistema e a fornirne un utilizzo ai programmi che vi girano è programmato in un unico programma (monolitico) che gira in kernel-space. I driver (solitamente) girano in kernel-space.
Alcuni sostengono che il kernel monolitico sia obsoleto e i microkernel siano superiori.
Kernel Linux, Kernel Windows
Linux è un kernel monolitico ma modulare..
mi spiego: un kernel monolitico “standard” prevede che tutto il kernel funzioni come un blocco unico, in Linux invece parti di kernel (moduli), in genere driver, possono essere inseriti nel kernel durante il suo utilizzo, e secondo le necessità.
Il kernel Windows è stato battezzato dalla Microsoft: Kernel Ibrido ( Hybrid Kernel )
Il motivo è che (secondo Microsoft) il kernel di windows è un “miscuglio” di microkernel e kernel monolitico, nella pratica hanno scritto un microkernel, e lo hanno fatto comunicare tramite messaggi con i restanti servizi ( server grafico compreso ) ma fanno girare il tutto in “kernel-space”
In altre parole hanno preso il peggio dei 2 sistemi ( unico vantaggio una semplicità maggiore ad implementarlo )
In più il numero di chiamate di sistema messe a disposizione dal kernel Windows è molto più alto del kernel Linux (questo è dovuto principalmente alla presenza del server grafico di windows all’interno del kernel), e più chiamate non vuol dire meglio, vuol dire più complessità.. e più possibilità di trovare problemi e bachi di sicurezza!
Ecco perché il kernel di windows è “più” monolitico di Linux, e di conseguenza l’insulto: “Linux è obsoleto perché usa ancora un kernel monolitico” denota ignoranza, inclinazione a parlare senza prima informarsi e per sentito dire / luoghi comuni nonché un certo grado di trollaggine¹
Nota finale: su Linux esistono alcuni driver che funzionano in User-Space
- USB
- Sistema di stampa
- FUSE (è un filesystem utilizzato per molti scopi)
Link di approfondimento:
Wikipedia [EN]: Kernel Monolitico
Kernel Linux ( 2.6.20 ) e Kernel di Windows (Vista) a confronto ( grazie a Debianway per il link)
Descrizione del kernel Linux [EN]
¹ trollaggine: troll è una parola che si utilizza nel gergo di internet per indicare una persona che comunica in modo provocatorio, irritante o stupido.. “trollaggine” è un derivato che ho inventato sul momento
25 Aprile, 2007 at 22:33
wow, interessante! avevo sentito parlare di microkernel e kernel monolitico, ma non sapevo in cosa differivano. e soprattutto non sapevo che il kernel di windows fosse messo così male
motivo in più per odiarlo
26 Aprile, 2007 at 0:06
@Neo
beh.. non direi che “fa schifo”
diciamo che ha degli aspetti positivi, e altri negativi..
bisogna dar atto a microsoft che da windows 4.0 (nt) la stabilità del suo kernel è molto migliorata..
nonostante questo limiti come i 4GB di RAM in un sistema come Vista credo siano semplicemente inaccettabili
comunque il senso di questo articolo era chiarire cosa significa Kernel Monolitico, e soprattutto precisare (perché sia chiaro) che anche Windows ha un kernel Monolitico
26 Aprile, 2007 at 0:07
Ti ringrazio per la segnalazione
Comunque il tuo blog è pieno di informazioni molto interessanti! Complimenti!
Un difetto del kernel linux( lo conosco perchè mi ci sono imbattuto pochi giorni fa) è che quando sviluppano un driver, molte volte le aziendo lo fanno solo ed unicamente per uno specifico kernel. Ad esempio io per far funzionare un modem usb dovrei ”tornare” al kernel 2.4.x mandando a quel paese tutte le ottimizzazioni e le innovazioni dell’attuale 2.6.20.qualcosa che ho ora….
Peccato, ma rimane un piccolo difetto nel mare dei pregi dell’utilizzare Linux come sistema operativo
26 Aprile, 2007 at 0:20
@aniceweb
suppongo che il problema si ponga perché il driver è chiuso giusto?
in realtà non è un difetto di Linux
le incompatibilità grosse tra kernel avvengono tra cambi “grossi” di versione in genere
2.4 -> 2.6 appunto
un po’ come si hanno problemi di compatibilità da win98 -> winXP -> win vista
penso che sarebbe facilmente risolvibile se ci fossero i sorgenti
in genere si tratta di sostituire qualche chiamata deprecata con qualcuna “nuova”
grazie del contributo comunque, e dei complimenti
26 Aprile, 2007 at 0:38
Si il driver è chiuso, e purtroppo mi porterà alla vendita del modem(purtroppo è un regalo) per un router.
Purtroppo le aziende non arrivano a capire che per ogni sistema operativo supportato un’utenza maggiore potrà comprare il proprio prodotto = ricavi maggiori. Se poi teniamo conto che se le aziende rilasciassero le specifiche, la comunità svilupperebbe il driver GRATIS, non è più un problema ma l’applicazione di una mentaità ottusa e stupida
26 Aprile, 2007 at 0:45
@aniceweb
in realtà anche senza rilasciare le specifiche gli sviluppatori del kernel si sono offerti di firmare NDA per poter avere le specifiche e quindi scrivere i driver, o in alternativa avere qualcuno a loro disposizione che possa rispondere a domande su come fare una cosa o l’altra…
il tutto gratuitamente e a beneficio di tutti..
adesso stiamo a vedere… ora non hanno più scuse ( salvo che ci siano altri motivi che non ci vogliono dire, e non saprei quali )
ti passerei il link ma non ce l’ho più, dovrei cercarlo..
26 Aprile, 2007 at 18:37
[...] Link [...]
26 Aprile, 2007 at 18:38
molto interessante, ho linkato sul nostro blog questo articolo, grazie
26 Aprile, 2007 at 19:12
@realtebo
grazie..
vengo subito a vedere che dici
26 Aprile, 2007 at 23:07
Ti ho “linkato” anche io
28 Aprile, 2007 at 0:24
Be’ dicendo che ….l’insulto: “Linux è obsoleto perché usa ancora un kernel monolitico” denota ignoranza… dai dell’ignorante ad Andy Tanenbaum docente di informatica presso l’Università Vrije di Amsterdam e inventore di minix, uno unix per macchine intel da cui Linus Torvalds ha preso spunto per creare la prima versione di Linux.
Quell’insulto, come lo chiami tu ha origini molto chiare in un flame nel 92 su usenet. Qui c’è tutta la “litigata” :
http://www.dina.dk/~abraham/Linus_vs_Tanenbaum.html
28 Aprile, 2007 at 2:32
@sughero
grazie del contributo
comunque il mio post è molto chiaro:
Si sente spesso quell’insulto contro Linux, io ho semplicemente fatto notare che se è un “difetto” di Linux lo è anche di Windows, e forse di più!
inoltre che un microkernel sia migliore di un kernel monolitico è tutto da dimostrare.. a mio parere dipende dall’applicazione e da cosa ci devi fare
21 Maggio, 2007 at 17:29
@mastro
Non sempre le incompatibilità sono tra cambi “grossi” di versione.
Ad esempio il driver Open Source per il modem Conexant (vedi https://help.ubuntu.com/community/DialupModemHowto/Conexant ) non compila con la versione 2.6.17 del kernel, mentre funzionava con la 2.6.15
Ho provato a modificare il codice del driver, andando per lo più alla cieca, non sono un programmatore di driver.
Quello che ho ottenuto al massimo è stato un crash totale della macchina tanto per riallacciarsi al discorso del kernel space vs user space
21 Maggio, 2007 at 17:48
@Massimo S.
se non fosse crashato tutto mi sarei stupito
non sei un programmatore e modifichi il driver alla cieca? lol…
comunque esistono casi in cui cambia qualcosa, come in questo caso, e quindi alcune applicazioni/driver possono smettere di funzionare
in genere però questi cambiamenti sono preceduti da un lungo periodo in cui ciò che viene rimosso o cambiato è contrassegnato come “deprecato” e degli avvertimenti lo segnalano..
quindi in genere esce una diversa versione del programma ( si tratta di cambiare pochissime righe di codice, talvolta semplicemente il nome di una funzione richiamata )
in questo caso specifico è anche possibile che dipenda dalla configurazione che gli sviluppatori di ubuntu hanno scelto per il kernel, ad esempio rimuovendo il supporto a qualcosa di ormai deprecato
22 Maggio, 2007 at 10:39
@mastro
Beh ci ho provato, come dice il detto, tentar non nuoce, sono soddisfatto solo del fatto che sono riuscito a farlo compilare (comunque ho detto che non sono un programmatore di driver, non che non sono un programmatore, però programmo in Java)
Il problema è che nessun altro ha modificato quel driver, almeno cercando sulla rete non ne ho trovato notizia, quindi mi ci sono provato da solo
A quanto pare l’autore del driver adesso lavora per la linuxant che produce una versione a pagamento del driver stesso, quindi …… ci siamo capiti no!?
22 Maggio, 2007 at 13:21
@Massimo S.
ottimo..
se funziona perché non metti a disposizione del mondo la tua patch?
postala in qualche lista (per esempio)
22 Maggio, 2007 at 16:19
Non hai capito, a compilare compila, ma come dicevo assolutamente non funziona, fa crepare il SO!
22 Maggio, 2007 at 16:25
@Massimo S.
ah..
scusa..
hum…
se hai voglia puoi andare su irc (freenode) e chiedere in #kernel se sanno spiegarti perché quel modulo non funziona più con il 2.6.17
23 Maggio, 2007 at 10:54
@mastro
più che voglia mi sa che dovrei avere una padronanza della lingua inglese che non ho
Comunque una volta cercando su kernel.org credo di aver capito che c’è stato un cambiamento in una cosa chiamata “tty api”
23 Maggio, 2007 at 21:21
@Massimo S.
allora vai nel canale italiano di supporto alla tua distribuzione e chiedi se gentilmente qualcuno può fare la segnalazione per te
con un po’ di fortuna risolveranno il problema
24 Luglio, 2007 at 3:55
Arrivo tardi, ma giusto per fare un commento: il mio problema non è che linux è monolitico, perchè windows da qst punto di vista è anche peggio, il problema imho è che linux ha un kenel vecchio di 40 anni. E 40 anni, in informatica sono eoni…
24 Luglio, 2007 at 12:02
@Blackstorm
la tua affermazione non ha senso
il kernel è stato CREATO 40 anni fa, poi è stato continuamente aggiornato e modificato, di quello che c’era 40 anni fa non è rimasto quasi più nulla..
e comunque un software non è come una macchina… non si deteriora con il tempo o con l’uso
i softwarere per l’end user possono sfruttare nuove tecnologie, l’architettura di base di un computer non è cambiata radicalmente in 40 anni
e quel che è cambiato si è adattato anche nel kernel
30 Agosto, 2007 at 8:55
Comunque linus torvald ha scritto direttamente linux da minix, solo in seguito ha deciso di continuare il proprio lavoro sul nuovo sistema..-
7 Settembre, 2007 at 16:22
[...] di utilizzare una periferica (per meglio comprendere cosa questo significhi consiglio la lettura di questo mio articolo). Installare un driver su Linux equivale ad installare un qualunque altro programma. Se il driver [...]
11 Gennaio, 2008 at 13:41
Secondo me l’articolo è sbagliato di partenza.
Non esiste una struttura di kernel migliore di un’altra, dipende tutto da quello che si vuole fare.
Ad esempio anche il Kernel del MacOSX è ibrido, e non ho mai avuto problemi di stabilità.
Quello che bisogna capire è per cosa si utilizza un certo kernel; ad esempio i kernel ibridi sono più lenti, ma hanno una modularità maggiore e quindi possono essere adattati e convertiti per altre piattaforme in tempi brevissimi. In oltre proprio grazie alla loro modularità garantiscono una sicurezza superiore.
Non so se avete sentito parlare della NASA e della stazione spaziale internazionale; quì usano il NetBSD che è basato su microkernel, perché è un sistema in cui non sono concessi margini di errore.
I microkernel vengono usati molto anche per i dispositivi specifici (embedded) in modo da avere una pressoché totale uniformità anche in presenza di parecchie architetture diverse.
14 Gennaio, 2008 at 17:43
@zanshi
non ho mai detto che una struttura è meglio di un altra: anzi mi pare di aver chiaramente distinto i pregi dell’una e dell’altra
ma ho distinto tra microkernel e monolitico non tra monolitico o ibrido!
ho spiegato molto chiaramente perché parlare di kernel ibrido (nel caso di windows) è assolutamente fuorviante..
perché è un kernel monolitico..
linux ha un kernel monolitico e modulare che, in un certo senso, aggiunge qualche vantaggio dei microkernel mantenendo le prestazioni del kernel monolitici perché i moduli non girano in user space ma finiscono diritti in kernel space
forse dovresti dare una rilettura al mio articolo perché non credo tu l’abbia capito
infine: dici che i microkernel vengono usati quando non ci si possono permettere errori…
in realtà nei sistemi che tu citi vengono utilizzati dei kernel real time: totalmente diversi dai kernel per personal computer!!! e in genere si.. sono microkernel… come tu giustamente dici perché si devono limitare le possibilità di “system failure” anche se le priorità di un sistema real time non sono tanto le prestazioni quanto una corretta progettazione degli algoritmi di scheduling e dell’interazione tra i thread/della scelta delle priorità
i dispositivi embedded invece NON sempre utilizzano microkernel
e quando li utilizzano non li utilizzano per il motivo che tu riporti (totale uniformità in presenza di architetture diverse) ma perché i microkernel sono più piccoli, cosa necessaria e fondamentale per un dispositivo embedded (anche se ultimamente diventa sempre meno necessaria)
per smentire ciò che hai detto mi basta farti notare che il tom tom (chiaramente un dispositivo embedded) utilizza Linux! un kernel monolitico, come ben dovresti sapere se hai letto il mio articolo…
questo kernel è stato compilato con i soli driver e moduli occorrenti al dispositivo, non è in alcun modo modulare probabilmente perché non è necessario che lo sia…
avendo ridotto il kernel eliminando tutto ciò che non occorreva hanno ottenuto un piccolo kernel adatto al dispositivo
davvero zanshi
è meglio che rileggi l’articolo perché hai le idee un po’ confuse
5 Marzo, 2008 at 10:05
@zanshi
Innanzitutto che il kernel XNU di Mac Os X non abbia problemi di stabilità lo pensi tu. Problemi ne ha, eccome.
NetBSD ha un kernel monolitico, e non un microkernel. Utilizzano NetBSD perchè è un ottimo sistema operativo e gira su una quantità impressionante di piattaforme.
Per concludere il kernel di Mac Os X deriva dallo stesso dal quale deriva NetBSD, e non hanno scelto Mac Os X per andare sullo spazio.
Hai le idee molto confuse o parli per sentito dire.
5 Marzo, 2008 at 13:10
@tristano
eheheh si lo avevo già cazziato io
14 Settembre, 2009 at 12:00
Ma quante minchiate hai scritto…… la gui parte del kernel.. ecc ecc
ahahah
14 Settembre, 2009 at 20:14
Il kernel di windows integra le api per l’interfaccia grafica utente direttamente nel kernel
il software corrispondente a X su linux è parte integrante del kernel.
non sono minchiate
io ho citato le mie fonti
e ti aggiungo anche questa:
http://msdn.microsoft.com/en-us/library/aa480220.aspx
(fonte microsoft)
CIT
“In Windows XP, display drivers, which are large and complex, can be a major source of system instability. These drivers execute entirely in kernel mode (i.e., deep in the system code) and hence a single problem in the driver will often force the entire system to reboot.
[...]
(Parlando ora di Windows Vista) At a technical level, WDDM display drivers have two components, a kernel mode driver (KMD) that is very streamlined, and a user-mode driver that does most of the intense computations. With this model, most of the code is moved out of kernel mode”
come vedi in XP il kernel integrava l’intera parte grafica
su vista si sono impegnati per portarla fuori e l’hanno fatto solo in parte.
tu che fonti hai per dire il contrario?
Almeno abbi la decenza di chiedere scusa
1 Dicembre, 2009 at 1:19
che razza di cafone.
comunque è molto interessante l’articolo, anche se noto una lievissima vena polemica…
1 Dicembre, 2009 at 1:53
in realtà il “cafone” potrebbe anche aver espresso un pensiero di altre persone..
mi ha semplicemente aiutato a dimostrare che non ho parlato da non informato.
riguardo la vena polemica: la noti perché c’è.
si fa un gran parlare di kernel monolitico sostenendo che Linux è obsoleto perché è un kernel di questo tipo.
chi sostiene questa tesi è, semplicemente, un ignorante. Senza offesa alcuna.
e questo articolo è stato scritto apposta per chiarire le cose.
Se vi dicono che Linux è sorpassato perché monolitico ridete pure in faccia al vostro interlocutore prima di spiegargli perché ha detto fregnaccia