¿Qué hay en un sistema operativo que no sea el núcleo?

43

Según tengo entendido, el núcleo hace toda la interacción con el hardware y gestiona la memoria, los dispositivos de E / S, etc. Así que el núcleo está haciendo todo, pero es solo una parte del sistema operativo. Entonces, ¿qué más hay en un sistema operativo? ¿Solo las aplicaciones que vienen incluidas? Por ejemplo, ¿qué tiene Ubuntu además de un núcleo? ¿El escritorio Gnome y algunas otras aplicaciones?

AnkurVj
fuente

Respuestas:

54

El caparazón, por supuesto.

La metáfora original que nos dio la palabra "núcleo" para esto en primer lugar se olvida con demasiada frecuencia. La metáfora es que un sistema operativo es una semilla o una nuez. El "núcleo" de la semilla es el núcleo del sistema operativo, proporcionando servicios del sistema operativo a los programas de aplicaciones, que está rodeado por el "caparazón" de la semilla que es lo que los usuarios ven desde el exterior.

Algunas personas quieren vincular "kernel" (y, de hecho, "shell") para ser más específico que eso. Pero, en verdad, hay mucha variación entre los sistemas operativos. No menos importante es que estas variaciones constituyen un "shell" (que puede variar desde Solaris a shtravés del Intérprete de comandos de consola de Netware hasta Workplace Shell de OS / 2 y el Explorador de Windows NT), pero también hay mucha variación de un sistema operativo a otro en lo que es, y no es, una parte de un "núcleo" (que puede o no incluir E / S de disco, por ejemplo). Es mejor recordar que estos términos son metáforas .

Hay otras terminologías. En la terminología de mainframe de IBM, el "núcleo" en la metáfora seed / nut se llama programa de control . Otros nombres incluyen el supervisor , el monitor , el núcleo y el ejecutivo . El núcleo es otra metáfora biológica bastante obvia. Es interesante que también lo sea otro nombre. Harvey M. Deitel, en sus Sistemas Operativos , llama núcleo al programa de control y dice

El núcleo normalmente representa una pequeña porción del código de lo que comúnmente se cree que es todo el sistema operativo [...]

La palabra "núcleo" proviene del núcleo latino y significa el núcleo de una nuez (cf el latín nux , que significa "nuez"). Entonces, incluso llamar al programa de control "el núcleo" es, de hecho, hacer esta misma analogía de sistema operativo como una nuez. Es una analogía que se usa para algo más que sistemas operativos. Si está familiarizado con la química, por ejemplo, sabrá que un núcleo atómico está rodeado de electrones en capas .

Lo que la persona seudónima new123456escribe a continuación ejemplifica los errores resultantes de olvidar los orígenes de estas metáforas en la medida en que uno confunde la parte con el todo y el núcleo con todo el sistema operativo. Ser un programa "userland" no hace que el shell sea menos externo al sistema operativo, ni tampoco lo que encierra el núcleo. Además, lejos de ser una idea solo para DOS que no se aplica a Unix más allá de la versión 7, esta idea es generalizada y actual en el mundo de Unix.

(Es irónico que new123456lo confunda con un DOSismo. La metáfora kernel / shell era bastante extraña para DOS en sus primeros años, lo que favoreció al procesador de comandos y similares, de CP / M. Al igual que CP / M antes, MS-DOS se dividió en el sistema operativo de disco básico (BDOS), el sistema básico de entrada-salida (BIOS, no el firmware del sistema, nota), el procesador de comandos y las utilidades de limpieza . El código se dividió en archivos de esta manera. Esta es otra ejemplo, de hecho, de cómo la metáfora kernel / shell realmente no cubre o coincide completamente con las divisiones reales en muchos sistemas operativos).

new123456está olvidando lo que Deitel escribió acerca de que el núcleo forma parte del sistema operativo general. Un sistema operativo es tanto kernel como shell. Esa es, después de todo, la metáfora. Deitel tampoco está solo. Hay montones de libros de Unix que explican la metáfora de Unix como loco, desde la década de 1980 en adelante. Recomiendo Urban's y Tiemann's Teach Yourself FreeBSD en 24 horas (SAMS, ISBN 9780672324246), por la sencilla razón de que en la página 54 tiene un diagrama que ilustra la metáfora del sistema operativo como semilla y, sorprendentemente, es uno de Pocos libros para hacerlo.

El nombre "núcleo" es probablemente el nombre más antiguo; ciertamente anterior a Unix, que favorece la terminología kernel / shell que hoy, probablemente en gran parte gracias a Unix, es la más frecuente. Esto es lo que hay en el libro de Alan C. Shaw de 1974 El diseño lógico de los sistemas operativos (Prentice-Hall, ISBN 9780135401125), por ejemplo:

La parte del sistema que reside permanentemente en el almacenamiento principal se ha denominado históricamente núcleo . El núcleo generalmente consistirá en un conjunto mínimo de primitivas y procesos para la gestión de procesos, recursos y entrada-salida.
Shaw también tiene un diagrama. ☺

JdeBP
fuente
77
Creo que esta es una respuesta brillante, simplemente porque me recordó la relación entre las metáforas "shell" y "kernel". Los conocía a ambos, nunca los conecté. Sabía la respuesta a la pregunta, pero aún así aprendí algo de esta respuesta. De ahí el voto a favor. ¡Gracias!
Andrew J. Brehm
Dudaría en decir esto, porque el shell de UNIX se abstrajo del núcleo desde la versión 7, y desde entonces tiene un programa de usuario en todos los sentidos de la palabra. Sin embargo, lo que usted dice es cierto para un DOS (que es una elección de diseño particularmente horrible).
nuevo123456
Bien jugado, señor. Sin embargo, deje un @lugar cuando mencione mi nombre de usuario para que se publique en mi cola de respuestas.
nuevo123456
Elegido por ser una respuesta tan completa con mucha historia interesante (no conocía el núcleo como un término informático, o su etimología latina). Sin embargo, creo que se leería mucho mejor como una respuesta independiente si no se refiriera explícitamente a la respuesta de otro usuario (ahora eliminada).
Anthony G - justicia para Monica
45

Otras partes del sistema operativo incluyen los controladores que interactúan con el núcleo, hay varias capas de programas auxiliares que se ocupan de la interfaz de usuario, la red y otras partes centrales del sistema operativo que se encuentran entre el núcleo y la aplicación real.

Para dar un ejemplo, he mostrado la estructura de OS X , como puede ver en la parte superior del núcleo (azul claro) yace varias capas de funcionalidad "núcleo", herramientas del sistema, servicios y API (interfaz de programación de aplicaciones) antes que usted incluso acceda a la GUI, que es con lo que normalmente trabaja en las propias aplicaciones.

ingrese la descripción de la imagen aquí

La mayoría de los sistemas operativos tienen una estructura similar, pero hay un amplio margen para las diferencias con respecto a cuánto es realmente parte del núcleo. Vea el artículo de Wikipedia sobre Microkernels para una comparación.

EDITAR: para responder su comentario (mi comentario se hizo un poco largo)

Usted podría arrancar sólo un núcleo de Linux, pero no sería capaz de lograr realmente mucho, es todas esas aplicaciones de ayuda que proporcionan toda la interfaz que se ve y uso.

Una vez que el kernel se inicia (e inicializa el hardware) intentará pasar a otras partes del sistema operativo GNU / Linux que proporcionan la funcionalidad para iniciar servicios (como UDEV, que se llena /devcon interfaces de dispositivos en bruto para que los programas usen cosas como discos duros y puertos seriales, etc.) y programas para configurar la red ( dhcpcd ) y API como X.org para que las aplicaciones puedan mostrar ventanas e íconos a través de un Administrador de ventanas como GNOME o KDE .

Pero sí, simplemente podría arrancar el núcleo en sí, simplemente se quedaría allí con un "He arrancado, ¿y ahora qué?" rápido.

Mokubai
fuente
Entonces, ¿puedo arrancar solo un kernel y ninguna de las cosas adicionales que el SO generalmente tiene?
AnkurVj
En teoría, supongo, pero no haría nada sin otros programas además. Hay pequeños sistemas operativos que la gente ha creado para divertirse que no son más que un kernel, un shell y tal vez un compilador o ensamblador (creo que Linux comenzó de esta manera, en realidad).
user55325
@AnkurVj He agregado a mi respuesta.
Mokubai
3
No creo que puedas arrancar solo el kernel de Linux. El núcleo alcanza un punto donde llama a init, momento en el cual el sistema cambia del modo de núcleo al modo de usuario. Si init no está disponible (o un init falso, como bash), el kernel entra en pánico y falla. Por lo tanto, debe haber algún proceso de inicio en ejecución para evitar el pánico, momento en el que realmente no se trata solo del núcleo en ejecución.
Joe Internet
1
Podría arrancar un núcleo desnudo, pero sin el resto del sistema operativo, el usuario no tendría interacción con él.
Keltari