Un sistema operativo es básicamente un administrador de recursos de hardware, que proporciona una interfaz simplificada e independiente del dispositivo para esos recursos (en comparación con el cierre manual de la CPU o los registros del dispositivo). En ese rol, también facilita compartir esos recursos, por lo que también es responsable de proporcionar aislamiento y seguridad entre procesos ahora separados (o máquinas virtuales más recientes).
Muchas de estas funciones están fuertemente interrelacionadas. Los procesos necesitan CPU y memoria asignados a ellos. Los dispositivos necesitan memoria e interrupciones, y generalmente no se asignan exclusivamente a un proceso, por lo que el sistema operativo debe compartirlos a través de una capa de abstracción de nivel superior (por ejemplo, sockets, VFS). El núcleo es la colección de estas piezas que se consideran inseparables, de ahí el nombre, y que se ejecutan independientemente de cualquier usuario / proceso.
Existen, por supuesto, diferencias de opinión sobre qué código es realmente inseparable del resto del núcleo y qué código puede ejecutarse realmente (o cómo) como procesos gestionados por el núcleo. Los micro-núcleos demostraron hace mucho tiempo que muchas cosas tradicionalmente consideradas como funciones del núcleo pueden ejecutarse en procesos separados. Un micro-núcleo moderno como L4 [1] puede incluso funcionar de esta manera con un rendimiento comparable al de los “macro-núcleos” monolíticos como Linux, y con propiedades de seguridad / robustez mucho mejores.
- ¿Qué software "To-Do" recomendarías?
- ¿Qué tipo de programa de estudios, videos de conferencias, guías en línea, libros electrónicos, libros de algoritmos, etc. se recomienda para la programación de autoaprendizaje?
- ¿Qué es una aplicación para Android que me permite reproducir canciones incluso cuando la pantalla está apagada?
- ¿Cuál es el mejor software de conversión de video?
- ¿Existe alguna aplicación o sitio de viajes que conecte a los viajeros?
Linux y otros han agregado características tales como módulos de kernel cargables y sistemas de archivos de espacio de usuario para abordar algunos de los problemas más acuciantes con el enfoque monolítico, pero aún enturbian la terminología al tener mucho código en el kernel que realmente no necesita estar allí En un sentido práctico, el núcleo es realmente la colección de cosas escritas y mantenidas por la comunidad de desarrolladores del núcleo, incluso cuando no se ajusta a las definiciones tradicionales.
[1] http://www.l4hq.org/