Saltar a navegación,
búsqueda
|
Este artículo o sección necesita fuentes o referencias que aparezcan en
una publicación acreditada, como libros
de texto u otras publicaciones especializadas en el tema. |
Para otros usos de este término, véase Núcleo (desambiguación).
Esquema básico de la interacción entre un Núcleo, el resto
del Software
(los programas de aplicación, las bases de datos, etc.) y el Hardware.
En informática, el núcleo (también conocido en
español con el anglicismo kernel, de raíces germánicas
como kern) es la parte fundamental de un sistema
operativo. Es el software responsable de facilitar a los distintos programas acceso seguro al hardware de la computadora
o en forma más básica, es el encargado de gestionar recursos, a través de
servicios de llamada al sistema. Como hay muchos programas y el acceso al
hardware es limitado, el núcleo también se encarga de decidir qué programa
podrá hacer uso de un dispositivo de hardware y durante cuánto tiempo, lo que
se conoce como multiplexado. Acceder al hardware directamente puede
ser realmente complejo, por lo que los núcleos suelen implementar una serie de abstracciones del hardware. Esto permite
esconder la complejidad, y proporciona una interfaz limpia y uniforme al
hardware subyacente, lo que facilita su uso para el programador.
Una visión típica de la arquitectura de computadores como una
serie de capas de abstracción: hardware, firmware, ensamblador, núcleo, sistema
operativo y aplicaciones
En informática, el núcleo de un sistema operativo, es el programa
informático que se asegura de:
La mayoría de los sistemas operativos se construyen en torno al concepto de
núcleo. La existencia de un núcleo, es decir, de un único programa responsable
de la comunicación entre el hardware y el programa informático, resulta de
compromisos complejos referentes a cuestiones de resultados, seguridad y
arquitectura de los procesadores. El núcleo tiene grandes poderes sobre la
utilización de los recursos materiales (hardware), en particular, de la
memoria.
Los núcleos tienen como funciones básicas garantizar la carga y la ejecución
de los procesos, las entradas/salidas y proponer un interfaz entre el espacio
núcleo y los programas del espacio del usuario.
Aparte de las funcionalidades básicas, el conjunto de las funciones de los
puntos siguientes (incluidos los pilotos materiales, las funciones redes y
sistemas de ficheros o los servicios) necesariamente no son proporcionados por
un núcleo de sistema de explotación. Pueden establecerse estas funciones del
sistema de explotación tanto en el espacio usuario como en el propio núcleo. Su
implantación en el núcleo se hace en el único objetivo de aumentar los
resultados. En efecto, según la concepción del núcleo, la misma función llamada
desde el espacio usuario o el espacio núcleo tiene un coste temporal obviamente
diferente. Si esta llamada de función es frecuente, puede resultar útil
integrar estas funciones al núcleo para aumentar los resultados.
Hay que señalar que estas técnicas son utilizadas para atenuar defectos de
los núcleos como los elevados estados. En la medida de lo posible, es
preferible escribir un programa informático fuera del núcleo, en el espacio
usuario. En efecto, el espacio del núcleo, supone la ausencia de mecanismos
como la protección de la memoria. Es pues más complejo escribir un programa
informático que funciona en el espacio del núcleo, que en el espacio usuario;
los errores y faltas de seguridad pueden ser elevados.
No necesariamente se necesita un núcleo para usar una computadora. Los
programas pueden cargarse y ejecutarse directamente en una computadora «vacía»,
siempre que sus autores quieran desarrollarlos sin usar ninguna abstracción del
hardware ni ninguna ayuda del sistema operativo. Ésta era la forma normal de
usar muchas de las primeras computadoras: para usar distintos programas se
tenía que reiniciar y reconfigurar la computadora cada vez. Con el tiempo, se
empezó a dejar en memoria (aún entre distintas ejecuciones) pequeños programas
auxiliares, como el cargador y el depurador, o
se cargaban desde memoria de sólo lectura. A medida que se fueron
desarrollando, se convirtieron en los fundamentos de lo que llegarían a ser los
primeros núcleos de sistema operativo.
Hay cuatro grandes tipos de núcleos:
Esquema del funcionamiento de un micronúcleo
Artículo principal:
Micronúcleo
El enfoque micronúcleo consiste en definir una
abstracción muy simple sobre el hardware, con un conjunto de primitivas o
llamadas al sistema que implementan servicios del sistema operativo mínimos,
como la gestión de hilos, el espacio de
direccionamiento y la comunicación entre procesos.
El objetivo principal es la separación de la implementación de los servicios
básicos y de la política de funcionamiento del sistema. Por ejemplo, el proceso
de bloqueo de E/S se puede implementar con un servidor en espacio
de usuario ejecutándose encima del micronúcleo. Estos
servidores de usuario, utilizados para gestionar las partes de alto nivel del
sistema, son muy modulares y simplifican la estructura y diseño del núcleo. Si
falla uno de estos servidores, no se colgará el sistema entero, y se podrá
reiniciar este módulo independientemente del resto.
Algunos ejemplos de micronúcleos:
Artículos principales:
Núcleo monolítico y Micronúcleo
Frecuentemente se prefieren los núcleos monolíticos frente a los micronúcleos debido al menor nivel de complejidad que
comporta el tratar con todo el código de control del sistema en un solo espacio
de direccionamiento. Por ejemplo, XNU, el núcleo de Mac OS X, está basado
en el núcleo Mach 3.0 y en FreeBSD, en el mismo
espacio de direccionamiento para disminuir la latencia que comporta el diseño
de micronúcleo convencional.
A principios de los años 1990, los núcleos monolíticos se consideraban
obsoletos. El diseño de Linux como un núcleo monolítico en lugar de como un micronúcleo fue el tema de una famosa disputa[1]
entre Linus Torvalds
y Andrew Tanenbaum.
Los argumentos de ambas partes en esta discusión presentan algunas motivaciones
interesantes.
Los núcleos monolíticos suelen ser más fáciles de diseñar correctamente, y
por lo tanto pueden crecer más rápidamente que un sistema basado en micronúcleo, pero hay casos de éxito en ambos bandos. Los micronúcleos suelen usarse en robótica embebida o
computadoras médicas, ya que la mayoría de los componentes del sistema
operativo residen en su propio espacio de memoria privado y protegido. Esto no
sería posible con los núcleos monolíticos, ni siquiera con los modernos que
permiten cargar módulos del núcleo.
Aunque Mach
es el micronúcleo generalista
más conocido, se han desarrollado otros micronúcleos
con propósitos más específicos. L3 fue creado para demostrar
que los micronúcleos no son necesariamente lentos. La
familia de micronúcleos L4 es la descendiente de L3,
y una de sus últimas implementaciones, llamada Pistachio,
permite ejecutar Linux simultáneamente con otros procesos, en espacios de
direccionamiento separados.
QNX es un sistema
operativo que ha estado disponible desde principios de los años 1980,
y tiene un diseño de micronúcleo muy minimalista.
Este sistema ha conseguido llegar a las metas del paradigma del micronúcleo con mucho más éxito que Mach. Se usa en
situaciones en que no se puede permitir que haya fallos de software, lo que
incluye desde brazos robóticos en naves espaciales,
hasta máquinas que pulen cristal donde un pequeño error podría costar mucho
dinero.
Mucha gente cree que como Mach básicamente falló en el intento de resolver
el conjunto de problemas que los micronúcleos
intentaban subsanar, toda la tecnología de micronúcleos
es inútil. Los partidarios de Mach afirman que ésta es una actitud estrecha de
miras que ha llegado a ser lo suficientemente popular para que mucha gente la
acepte como verdad.
Artículo principal:
Núcleo híbrido
Los núcleos híbridos fundamentalmente son micronúcleos
que tienen algo de código «no esencial» en espacio de núcleo para que éste se
ejecute más rápido de lo que lo haría si estuviera en espacio de usuario. Éste
fue un compromiso que muchos desarrolladores de los primeros sistemas
operativos con arquitectura basada en micronúcleo
adoptaron antes que se demostrara que los micronúcleos
pueden tener muy buen rendimiento. La mayoría de sistemas operativos modernos
pertenecen a esta categoría, siendo el más popular Microsoft
Windows. XNU, el núcleo de Mac OS X, también es
un micronúcleo modificado, debido a la inclusión de
código del núcleo de FreeBSD en el núcleo basado en
Mach. DragonFlyBSD es el primer sistema BSD que adopta una arquitectura
de núcleo híbrido sin basarse en Mach.
Algunos ejemplos de núcleos híbridos:
Hay gente que confunde el término «núcleo híbrido» con los núcleos
monolíticos que pueden cargar módulos después del arranque, lo que es un error.
«Híbrido» implica que el núcleo en cuestión usa conceptos de arquitectura o
mecanismos tanto del diseño monolítico como del micronúcleo,
específicamente el paso de mensajes y la migración de código «no esencial»
hacia el espacio de usuario, pero manteniendo cierto código «no esencial» en el
propio núcleo por razones de rendimiento.
Artículo principal:
Exonúcleo
Esquema básico de la interacción entre un Exonúcleo (Exokernel) con el Software a través
de bibliotecas.
Los exonúcleos, también conocidos como sistemas
operativos verticalmente estructurados, representan una aproximación radicalmente
nueva al diseño de sistemas operativos.
La idea subyacente es permitir que el desarrollador tome todas las
decisiones relativas al rendimiento del hardware. Los exonúcleos
son extremadamente pequeños, ya que limitan expresamente su funcionalidad a la
protección y el multiplexado de los recursos. Se llaman así porque toda la
funcionalidad deja de estar residente en memoria y pasa a estar fuera, en librerías dinámicas.
Los diseños de núcleos clásicos (tanto el monolítico como el micronúcleo) abstraen el hardware, escondiendo los recursos
bajo una capa de abstracción del hardware, o detrás de los controladores de
dispositivo. En los sistemas clásicos, si se asigna memoria física, nadie puede
estar seguro de cuál es su localización real, por ejemplo.
La finalidad de un exonúcleo es permitir a una
aplicación que solicite una región específica de la memoria, un bloque de disco
concreto, etc., y simplemente asegurarse que los recursos pedidos están
disponibles, y que el programa tiene derecho a acceder a ellos.
Debido a que el exonúcleo sólo proporciona una
interfaz al hardware de muy bajo nivel, careciendo de todas las funcionalidades
de alto nivel de otros sistemas operativos, éste es complementado por una
«biblioteca de sistema operativo». Esta biblioteca se comunica con el exonúcleo subyacente, y facilita a los programadores de
aplicaciones las funcionalidades que son comunes en otros sistemas operativos.
Algunas de las implicaciones teóricas de un sistema exonúcleo
son que es posible tener distintos tipos de sistemas operativos (p.e. Windows, Unix) ejecutándose
en un solo exonúcleo, y que los desarrolladores pueden
elegir prescindir de o incrementar funcionalidades por motivos de rendimiento.
Actualmente, los diseños exonúcleo están
fundamentalmente en fase de estudio y no se usan en ningún sistema popular. Un
concepto de sistema operativo es Nemesis,
creado por la Universidad de Cambridge,
la Universidad de Glasgow, Citrix Systems y el Instituto Sueco de
Informática. El MIT también ha diseñado
algunos sistemas basados en exonúcleos. Los exonúcleos se manejan en diferente estructura dado que
también cumplen funciones distintas