# data[].attributes.body
El núcleo del sistema operativo, también llamado kernel es aquella parte de un sistema operativo que interactúa de forma directa con el hardware de una máquina. Entre las funciones principales del kernel se encuentran:
• La gestión de memoria.
• La administración del sistema de archivos.
• La administración de servicios de entrada/salida.
• La asignación de recursos entre los usuarios.

# data[].attributes.body
El Núcleo (o kernel) es una colección de módulos de software que se ejecutan en forma privilegiada –lo que significa que tienen acceso pleno a los recursos del sistema.
La manipulación del hardware se realiza por medio de controladores de dispositivo, que conocen la forma de comunicarse directamente con el hardware de la máquina.
El software por su parte puede comunicarse con el kernel por medio de llamadas al sistema, las cuales le indican al kernel que realice tareas como abrir y escribir un archivo, ejecutar un programa, finalizar un proceso u obtener la fecha y hora del sistema.

# data[].attributes.body
El principal concepto en cualquier sistema operativo es el de proceso.
Un proceso es un programa en ejecución, incluyendo el valor del program counter, los registros y las variables.
Conceptualmente, cada proceso tiene un hilo (thread) de ejecución que esvisto como un CPU virtual.
El recurso procesador es alternado entre los diferentes procesos que
existan en el sistema, dando la idea de que ejecutan en paralelo
(multiprogramación)

# data[].attributes.body
Una tendencia de los sistema operativos modernos es la de trasladar el código a capas superiores, y eliminar la mayor parte posible del sistema operativo para mantener un núcleo mínimo. El punto de vista usual es el implantar la mayoría de las funciones del sistema operativo como procesos de usuario. Para solicitar un servicio, como la lectura de un bloque de cierto fichero, un proceso de usuario (denominado en este caso proceso cliente) envía la solicitud a un proceso servidor, que realiza el trabajo y devuelve la respuesta.

# data[].attributes.body
Otra de las ventajas del modelo cliente-servidor es su capacidad de adaptación para su uso en sistemas distribuidos (véase la figura 5.4). Si un cliente se comunica con un servidor mediante mensajes, el cliente no necesita saber si el mensaje se gestiona de forma local, en su máquina, o si se envía por medio de una red a un servidor en una máquina remota. En lo que respecta al cliente, lo mismo ocurre en ambos casos: se envió una solicitud y se recibió una respuesta.

# data[].attributes.body
*Un Thread (Hilo) es una unidad básica de utilización de la CPU consistente en un juego de registros y un espacio de pila. Es también conocido como proceso ligero.
*Cada thread contendrá su propio program counter, un conjunto de
registros, un espacio para el stack y su prioridad.
*Comparten el código, los datos y los recursos con sus hebra (thread) pares.
*Una tarea (o proceso pesado) está formado ahora por uno o varios threads.
*Un thread puede pertenecer a una sola tarea.

# data[].attributes.body
Microkernel
Estos núcleos proporcionan un pequeño conjunto de abstracciones simples 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. Además usan las aplicaciones llamadas servidores para ofrecer mayor funcionalidad.

# data[].attributes.body
Núcleo Monolítico
Estos núcleos facilitan abstracciones del hardware subyacente realmente potentes y variadas. Estos sistemas tienen un núcleo grande y complejo, que engloba todos los servicios del sistema.
Está programado de forma no modular, y tiene un rendimiento mayor que un micronúcleo. Sin embargo, cualquier cambio a realizar en cualquier servicio requiere la recopilación del núcleo y el reinicio del sistema para aplicar los nuevos cambios.