Un nucli del sistema operatiu (kernel en anglès), en informàtica sovint només nucli, és la part fonamental d'un sistema operatiu. És el programari responsable de facilitar als diversos programes accés segur al maquinari de l'ordinador. Ja que hi ha molts programes i l'accés al maquinari és limitat, el nucli també s'encarrega de decidir quin programa podrà fer ús d'un dispositiu i durant quant de temps, cosa coneguda com a multiplexat. Accedir al maquinari directament pot ser realment complex, per això els nuclis solen implementar una sèrie d'abstraccions del maquinari. Això permet amagar la complexitat, i proporciona una interfície neta i uniforme al maquinari subjacent, facilitant-ne l'ús per part del programador.
No es necessita necessàriament un nucli per a utilitzar un ordinador. Els programes poden carregar-se i executar-se directament en un ordinador «buit», sempre que els seus autors vulguin desenvolupar-los sense utilitzar cap abstracció del maquinari ni cap ajuda del sistema operatiu. Aquesta era la manera habitual d'utilitzar els primers ordinadors: per a utilitzar diferents programes s'havia de reiniciar i reconfigurar l'ordinador cada cop. Amb el temps, es va començar a deixar en memòria (fins i tot entre diferents execucions) petits programes auxiliars, com ara el carregador i el depurador, o es carregaven des de memòria de només lectura. A mesura que es van anar desenvolupant, es van convertir en els fonaments del que esdevindrien els primers nuclis de sistema operatiu.
Hi ha quatre grans tipus de nuclis:
Els nuclis monolítics faciliten abstraccions del maquinari subjacent realment potents i diverses.
Els micronuclis (o microkernel) proporcionen un petit conjunt d'abstraccions simples del maquinari, i utilitzen les aplicacions anomenades servidors per a oferir una funcionalitat major.
Els híbrids (micronuclis modificats) són molt semblants als micronuclis purs, però inclouen codi addicional a l'espai de nucli per tal que s'executi més ràpidament.
Els exonuclis no faciliten cap abstracció, però permeten l'ús de biblioteques que proporcionen una major funcionalitat gràcies a l'accés directe o quasi directe al maquinari.
Fins i tot si cada mòdul està separat de la resta, la integració del codi és molt forta, i és difícil fer-la bé. A més, com que tots els mòduls s'executen en el mateix mode, un error en un d'ells pot penjar tot el sistema. Tanmateix, quan se n'ha completat la implementació i aquesta és fiable, la forta integració dels components permet un ús molt efectiu de les característiques de baix nivell del sistema subjacent, fent que un bon nucli monolític sigui molt eficient. Els partidaris del plantejament monolític afirmen que si el codi no és correcte, no hauria de trobar-se al nucli, i que si ho és, llavors l'aproximació micronucli té pocs avantatges.
La majoria dels nuclis monolítics, com ara Linux i el nucli de FreeBSD, poden carregar mòduls executables en qualsevol moment, permetent una forma fàcil d'ampliar les capacitats del nucli a mesura que es necessitin, però alhora possibilitant que la quantitat de codi que s'executa en espai de nucli es mantingui al mínim.
Alguns exemples de nuclis monolítics:
Nuclis Unix tradicionals, com ara els nuclis de la família BSD.
L'aproximació dels micronuclis consisteix a definir una abstracció molt simple sobre el maquinari, amb un conjunt de primitives o crides al sistema que implementen serveis del sistema operatiu mínims, com ara la gestió de fils, l'espai d'adreçament i la comunicació entre processos.
L'objectiu principal és la separació de la implementació dels serveis bàsics de la política de funcionament del sistema. Per exemple, el procés de l'E/S es pot implementar amb un servidor en espai d'usuari executant-se sobre el micronucli. Aquests servidors d'usuari, que s'utilitzen per a gestionar les parts d'alt nivell del sistema, són molt modulars i simplifiquen l'estructura i el disseny del nucli. Si falla un d'aquests servidors, no es penjarà tot el sistema, i es podrà reiniciar aquest mòdul de forma independent.
Sovint es prefereixen els nuclis monolítics en lloc dels micronuclis a causa del menor nivell de complexitat que comporta el tractar amb tot el codi de control del sistema en un sol espai d'adreçament. Per exemple, l'XNU, el nucli del Mac OS X, està basat en el nucli Mach 3.0 i en FreeBSD, en el mateix espai d'adreçament per a disminuir la latència que comporta el disseny de micronucli convencional.
A principis dels anys 1990, els nuclis monolítics es consideraven obsolets. El disseny de Linux com a nucli monolític en lloc de com a micronucli fou el tema d'una famosa disputa entre en Linus Torvalds i Andrew Tanenbaum.[1] Els arguments d'ambdues parts en aquesta discussió presenten raonaments interessants.
Els nuclis monolítics solen ser més fàcils de dissenyar correctament, i per tant poden créixer més ràpidament que un sistema basat en un micronucli, però hi ha casos d'èxit als dos bàndols. Els micronuclis se solen utilitzar en robòtica incrustada o ordinadors mèdics, ja que la majoria dels elements del sistema operatiu resideixen al seu propi espai de memòria privat i protegit. Això no seria possible amb els nuclis monolítics, ni tan sols amb els moderns que permeten carregar mòduls.
Tot i que Mach és el micronucli generalista més conegut, s'han desenvolupat d'altres micronuclis amb propòsits més específics. L'L3 fou creat per a demostrar que els micronuclis no necessàriament són lents. La família de micronuclis L4 n'és la successora, i una de les seves últimes implementacions, anomenada Pistachio (microkernel L4), permet executar el Linux simultàniament amb altres processos, en espais d'adreçament separats.
QNX és un sistema operatiu que ha estat disponible des de principis dels anys 1980, i té un disseny de micronucli molt minimalista. Aquest sistema ha aconseguit arribar a les metes del paradigma del micronucli amb molt més èxit que el Mach. S'utilitza en situacions en què no es pot permetre que hi hagi errades del programari, com ara braços mecànics en naus espacials, o màquines que poleixen vidres on un petit error podria costar centenars de milers d'euros.
Molta gent creu que com que el Mach bàsicament va fallar en l'intent de resoldre el conjunt de problemes que els micronuclis intentaven resoldre, tota la tecnologia de micronuclis és inútil. Els partidaris del Mach afirmen que aquesta és una actitud estreta de mires que ha arribat a ser prou popular perquè molta gent l'accepti com a veritat.
Nuclis híbrids (micronuclis modificats)
Els nuclis híbrids fonamentalment són micronuclis que tenen codi «no essencial» en espai de nucli perquè s'executi més ràpid del que ho faria si estigués en espai d'usuari. Aquest fou un compromís que molts dissenyadors dels primers sistemes operatius amb arquitectura basada en micronucli van adoptar abans que es demostrés que els micronuclis poden tenir un molt bon rendiment. La majoria de sistemes operatius moderns pertanyen a aquesta categoria, sent-ne el més popular el Microsoft Windows. XNU, el nucli del Mac OS X, també és un micronucli modificat, degut a la inclusió de codi del nucli de FreeBSD al nucli basat en Mach. DragonFly BSD és el primer sistema BSD que adopta una arquitectura de nucli híbrid sense basar-se en Mach.
Hi ha gent que confon el terme «nucli híbrid» amb els nuclis monolítics que poden carregar mòduls després de l'arrancada, cosa que és un error. «Híbrid» implica que el nucli en qüestió utilitza conceptes d'arquitectura o mecanismes tant del disseny monolític com del micronucli, específicament el pas de missatges i la migració de codi «no essencial» cap a l'espai d'usuari, però mantenint cert codi «no essencial» al mateix nucli per raons de rendiment.
Alguns exemples de nuclis híbrids:
MicrosoftWindows NT, utilitzat a tots els sistemes que utilitzen el codi base del Windows NT.
Els exonuclis, també coneguts com a sistemes operatius verticalment estructurats, representen una aproximació radicalment nova al disseny de sistemes operatius.
Es basen en la idea de permetre que el desenvolupador prengui totes les decisions relatives al rendiment del maquinari. Els exonuclis són extremadament petits, ja que limiten expressament la seva funcionalitat a la protecció i el multiplexat dels recursos.
Els dissenys de nuclis clàssics (tant el monolític com el micronucli) abstreuen el maquinari, amagant els recursos sota una capa d'abstracció del maquinari, o darrere dels controladors de dispositiu. Als sistemes clàssics, si s'assigna memòria física, ningú pot estar segur de quina és la seva localització real, per exemple.
La finalitat d'un exonucli és permetre a una aplicació que sol·liciti una regió específica de la memòria, un bloc de disc concret, etc., i simplement assegurar-se que els recursos demanats estan disponibles, i que el programa té dret a accedir-hi.
Ja que l'exonucli només proporciona una interfície al maquinari de molt baix nivell, mancant-li totes les funcionalitats d'alt nivell d'altres sistemes operatius, se'l complementa amb una «biblioteca de sistema operatiu». Aquesta biblioteca es comunica amb l'exonucli subjacent, i facilita als programadors d'aplicacions les funcionalitats disponibles a altres sistemes operatius.
Algunes de les implicacions teòriques d'un sistema exonucli són que és possible tenir diferents tipus de sistemes operatius (p. ex. Windows, Unix, ...) executant-se sobre un sol exonucli, i que els desenvolupadors poden triar si prescindir de funcionalitats (o incrementar-les) per raons de rendiment.