¿Cuál es la diferencia entre un kernel y un shell?

La respuesta breve es que en los viejos tiempos (50, 60 y principios de los 70) no había diferencia entre los dos, pero a mediados de los 60 como desarrolladores de sistemas operativos decidimos que era una mala idea y comenzamos a superponer mejor el sistema para separar funcionalidad Hoy, no importa qué sistema operativo use, la imagen se ve más o menos así:

El núcleo tiene algunas responsabilidades básicas:

  1. Interfaz con el hardware y proporcionar nombres y modelos uniformes para diferentes servicios que el sistema operativo proporciona a los programas en ejecución
  2. proporcionando protección / seguridad entre diferentes acciones que ocurren en el sistema
  3. cargar / descargar programas de memoria e iniciarlos / detenerlos según corresponda

El núcleo hace esto con un pequeño número de interfaces bien definidas, que llamamos “llamadas al sistema” que tienen resultados bien especificados para acciones específicas. Si el programa presenta algo o algún conjunto de información al núcleo, el núcleo devolverá algo más a cambio de ese programa (o un error).

El shell, o sistema de comando, por otro lado, es principalmente un programa para interactuar con el humano, aunque a veces también se puede programar en un sentido de secuencia de comandos para que se puedan realizar acciones más complejas. Su trabajo es traducir de ideas de nivel superior a acciones que la computadora puede tomar a instancias de los humanos. Utiliza las interfaces del sistema operativo con los servicios que proporciona el núcleo para realizar esas operaciones para el ser humano. Como resultado, el término “shell” proviene de la idea / observación de que, como usuario, “ves: la computadora como si estuvieras encerrada en un shell” ( es decir, en una habitación cerrada) y las únicas cosas sobre la computadora que lo que puedes observar son las cosas que el caparazón te permite ver. Todo lo demás sobre la computadora está oculto para usted, el usuario.

Como dije, en épocas anteriores, el sistema de comando se atornillaba en el núcleo y normalmente no era un programa separado. Así fue como se desarrollaron sistemas como TSS / 360, OS / 360, RT / 11, TOPS, etc. y originalmente VMS. Al hacer que el sistema de comandos, también conocido como el shell, fuera un programa separado del núcleo en sí, como se hizo con Multics y UNIX, significaba que se podían crear diferentes experiencias de interfaz de usuario a partir de las mismas partes fundamentales. A fines de la década de 1970, la mayoría de los sistemas operativos separaron el intérprete de comandos / shell y el kernel en el modelo que muestro arriba.

Considere Mac OSx y Linux, por ejemplo. Si bien ambos se basan en tecnologías “UNIX” y todos admiten algún tipo de shell de UNIX como interfaz de línea de comandos, la experiencia de inicio de sesión básica varía enormemente dependiendo de la ‘distribución, cómo está configurada, qué interfaz gráfica de usuario o qué shell está configurado como un shell de inicio de sesión. La “sensación” de los sistemas puede ser muy diferente. De hecho, Linux y UNIX a menudo están ‘integrados’ en dispositivos como los sistemas de navegación en automóviles o su ‘TiVo’, y es poco probable que vea un ‘aviso de shell’ en esos dispositivos.

Tenga en cuenta que Windows no es diferente en funcionalidad y puede hacer lo mismo, aunque el reemplazo de su interfaz se realiza con menos frecuencia. El punto clave es que el núcleo y la interfaz de usuario se han separado en las capas y, como resultado, se pueden insertar diferentes interfaces de usuario cuando tiene sentido.

La explicación de Travis Hance da en el clavo. Solo aumentaré eso con el punto de vista a continuación.

Tomemos una perspectiva diferente solo para aclarar las cosas:

  • ¿Qué sucede si SOLO tenemos el kernel PERO SIN shell?
    Luego tiene una máquina con el sistema operativo real, pero NO hay forma de que pueda usarla. No hay una “interfaz” para que el humano interactúe con el sistema operativo y, por lo tanto, con la máquina. (Suponiendo que las GUI no existen, por simplicidad 🙂
  • ¿Qué sucede si SOLO tenemos la cáscara PERO NO el núcleo?
    Esto es imposible. Shell es un programa proporcionado por el sistema operativo para que pueda interactuar con él. Sin el kernel / OS, nada puede ejecutarse (en cierto sentido, no es 100% cierto, pero se entiende la idea)

Un shell es solo un programa que ofrece alguna funcionalidad que se ejecuta en el sistema operativo. El núcleo es la “esencia / núcleo” del sistema operativo. Las palabras pueden ser confusas, así que aquí está la definición del diccionario del núcleo:

[código] Kernel: una parte más blanda, generalmente comestible de una nuez, semilla o piedra de fruta contenida dentro de su cáscara dura. [/ código]

¿Ves cómo se relacionan las palabras kernel / shell? Ese es el origen y su uso prestado en informática. El núcleo es la esencia / núcleo del sistema operativo. Accede a la máquina a través del sistema operativo y el sistema operativo a través de un “shell” que parece “contener” el núcleo.

Espero que esto aclare tu confusión 🙂

El núcleo es la parte del sistema operativo que se ejecuta en modo privilegiado. Hace todo tipo de cosas como interactuar con el hardware, hacer E / S de archivos y generar procesos.

El shell (por ejemplo, bash), por el contrario, es un programa específico que se ejecuta en el espacio del usuario (es decir, en modo no privilegiado). Cada vez que intenta iniciar un proceso con el shell, el shell tiene que pedirle al kernel que lo haga. En Linux, probablemente haría esto con las llamadas al sistema fork y execve . Además, el shell reenviará su entrada (generalmente, desde sus propias pulsaciones de teclas) al stdin del programa en ejecución, y reenviará la salida del programa ( stdout y stderr ) a su propia salida (generalmente se muestra en su pantalla). Nuevamente, hace todo esto con la ayuda del núcleo.

Básicamente, el núcleo es el centro del sistema operativo que gestiona todo. El shell es solo un programa en particular, una interfaz amigable que traduce sus comandos en algunas llamadas de bajo nivel al núcleo.

Pregunta: ¿Cuál es la diferencia entre kernel y shell?

Responder :

El uso de los términos del sistema operativo proviene de significados análogos de kernel y shell of seed.

Núcleo :
la parte interna más suave del núcleo de una semilla O
parte central o esencial de un sistema

Cáscara :
El protector exterior que cubre parte de una semilla O
marco o estructura exterior

La parte interna central del sistema operativo es el kernel (kernel de Linux o kernel de Windows o kernel de FreeBSD), pero los usuarios interactúan con esto utilizando la parte externa o shell (por ejemplo, bash shell o cmd.exe o korn shell)
Los usuarios no pueden controlar directamente hardware como impresoras o monitores. Los usuarios no pueden controlar directamente la memoria virtual o la programación de procesos. Mientras el kernel se ocupa de tales asuntos, el usuario usa la interfaz de usuario o shell para comunicarse con el kernel. La UI puede ser CLI (bash shell o DOS shell) o GUI (Kde para Linux o Metro UI para Windows)

Fin de la respuesta

Más detalles con muchas simplificaciones : el usuario usa shell para escribir el comando ‘rm abc’ y bash ejecuta / bin / rm que usa funciones de biblioteca que usa llamadas del sistema, que a su vez usan funciones de kernel, para eliminar el archivo.
O si no es posible eliminar el archivo, las funciones del kernel devuelven códigos de error o advertencias extrañas, que se devuelven mediante llamadas del sistema a las funciones de la biblioteca, lo que podría imprimir los errores o advertencias de una manera más fácil de usar, y luego el shell también obtiene estado de salida de la operación.

Analógicamente tratamos de decir, Kernel es un chef que prepara la comida, y Shell es una especie de camarero que toma el pedido y lo entrega al usuario.

Técnicamente, Shell es un programa de software que entiende lo que el usuario quiere y lo transmite al kernel. Kernel realiza el trabajo de acuerdo con las instrucciones y vuelve al usuario a través de shell.

Si está realmente entusiasmado con la forma en que shell y kernel trabajan juntos, no dude en navegar por el código NEKTech-Linux Jitendra-khasdev / NEKTech-Linux-Shell

El software de sistemas “GNU / Linux o GNU + Linux” es una combinación entre el kernel de Linux y la interfaz de usuario (UI). Solo hay dos tipos de interfaz de usuario en GNU / Linux, la GUI y la CLI. El kernel de Linux se puede comparar con la máquina del automóvil, el usuario final, es el conductor del automóvil, la transmisión se puede comparar con la de la interfaz de usuario, puede optar por manual (shell) o automático (entorno de escritorio). Espero haber podido explicártelo de una manera que puedas comprender fácilmente, con la menor cantidad de palabras 🙂

  • Un shell es un intérprete de comandos, es decir, el programa que procesa el comando que ingresa en su emulador de terminal (modo interactivo) o procesa scripts de shell (archivos de texto que contienen comandos) (modo por lotes). En los primeros tiempos de Unix, solía ser la forma única para que los usuarios interactuaran con sus máquinas. Hoy en día, los entornos gráficos están reemplazando el shell para la mayoría de los usuarios casuales.
  • Un kernel es un programa de bajo nivel que interactúa con el hardware (CPU, RAM, discos, red, …) sobre el que se ejecutan las aplicaciones. Es el programa de nivel más bajo que se ejecuta en computadoras, aunque con la virtualización puede tener múltiples núcleos ejecutándose sobre máquinas virtuales que se ejecutan sobre otro sistema operativo.
  • Una API es un término genérico que define la interfaz que los desarrolladores deben usar al escribir código usando bibliotecas y un lenguaje de programación. Los núcleos no tienen API, ya que no son bibliotecas. Tienen un ABI , que, más allá de otras cosas, define cómo interactúan las aplicaciones con ellas a través de llamadas al sistema. Los desarrolladores de aplicaciones Unix usan la biblioteca C estándar (por ejemplo: libc, glibc) para construir binarios compatibles con ABI. printf (3) y fopen (3) no son envoltorios para las llamadas al sistema sino (g) las instalaciones estándar de libc. Las llamadas de sistema de bajo nivel que eventualmente usan son write (2) y open (2) y posiblemente otras como brk, mmap. El número entre paréntesis es una convención que indica en qué manual se encuentra el comando.

El primer volumen de las páginas del manual de Unix contiene los comandos de shell .
El segundo contiene los contenedores de llamadas del sistema como escribir y abrir. Forman la interfaz al núcleo .
El tercero contiene las funciones de la biblioteca estándar (incluida la API estándar de Unix) (excluidas las llamadas al sistema) como fopen e printf. Estos no son envoltorios para llamadas específicas del sistema, sino solo código utilizando llamadas del sistema cuando sea necesario.

Shell y el kernel son las partes de este sistema operativo. Estas dos partes se utilizan para realizar cualquier operación en el sistema.

Cuando un usuario da su comando para realizar cualquier operación, la solicitud se dirige a las partes de Shell, también se llama a las partes de Shell como el intérprete que traduce el programa humano al lenguaje de máquina y luego la solicitud se transferirá al kernel.

El núcleo es el centro del sistema operativo: asigna tiempo y memoria a los programas y maneja el almacén de archivos y las comunicaciones en respuesta a las llamadas del sistema.

Kernel también se llama como el corazón del sistema operativo y cada operación se realiza utilizando el kernel, cuando el kernel recibe la solicitud del Shell, esto procesará la solicitud y mostrará los resultados en la pantalla.

El kernel también mantiene una tabla de tiempo para todos los procesos que están en ejecución. Significa que el kernel también prepara el horario de programación, lo que proporcionará el tiempo para varios procesos de la CPU y el kernel también coloca los trabajos en espera y suspendidos en el área de memoria diferente.

Saludos,

Entrenamiento Linux en Hyderabad

Kernel es “el Linux” en sí mismo. Es un montón de código que se ocupa de las redes, la gestión de la memoria, hablar con dispositivos de hardware como discos, tarjetas gráficas, mouse, etc. También sabe cómo se organiza el contenido de un disco en archivos y cómo abrir archivos y leer / escribir datos en ellos. Sin embargo, desde la perspectiva del usuario, el núcleo es silencioso e invisible. Simplemente se sienta allí y no hace nada útil por sí mismo. Su único propósito es proporcionar la “magia” donde los programas pueden ejecutarse e interactuar entre sí y con el hardware. El núcleo de Linux fue escrito inicialmente por Linus Torvalds.

Un shell, por otro lado, es un programa que usas para interactuar con una computadora escribiendo comandos. Shell lee tus comandos y los ejecuta uno tras otro. Por ejemplo, si escribe “cp file1 file2”, shell entiende que desea copiar un archivo. En su nombre, luego llama a una o más funciones del núcleo para crear el archivo2, abrir el archivo1 para leerlo, leer fragmentos de datos de él, escribir fragmentos de datos en el archivo2 y finalmente cerrar ambos archivos. Del mismo modo, si escribe “rm file3”, shell llamará a una o más funciones del núcleo para hacerlo, y así sucesivamente. Si algo sale mal (archivo no encontrado, etc.), shell imprimirá el error. Un shell también se usa para iniciar otros programas. Si escribe un comando que el propio shell no comprende, buscará una lista de directorios predeterminados ($ PATH) e intentará encontrar un programa con ese nombre. En lugar de escribir comandos una y otra vez, también puede escribirlos en un archivo (llamado script de shell), y el shell los tratará como nuevos programas / comandos.

En un sistema Linux en ejecución, siempre hay exactamente un núcleo en ejecución. Pero puede tener cero, uno o más shells ejecutándose en paralelo. Hay muchos shells diferentes, como bash, zsh, ksh, etc., cada uno con sus propias fortalezas y debilidades. Hasta donde yo sé, bash es el más popular. Puede obtener más información al respecto si escribe “man bash”.

El núcleo interactúa con el hardware del sistema y organiza lo que hacen los procesos del usuario, limitando y representando sus acciones. Todas las E / S, todas interactuando con el usuario que procesa y las aplicaciones eventualmente pasan a través del núcleo, que le dice a la GPU que muestre algo (y la GPU calcula los píxeles que se envían a la pantalla para mostrar), el mouse y el teclado para dar sus entradas (todos los movimientos del mouse y las teclas que escribe pasan a través del núcleo), el HDD o SSD para leer o escribir datos (los archivos son, de hecho, una abstracción, ya que el disco físico son unos y ceros agrupados como bloques de 512 bytes llamados sectores ), la tarjeta Ethernet envía un paquete (y la tarjeta Ethernet lo advierte cuando se recibe un paquete, por lo que el kernel lo guarda en la RAM antes de que se pierda), etc. Los dispositivos USB pueden tener un controlador de modo de usuario parcial (especialmente con dispositivos como impresoras, donde el núcleo realmente representa la conexión USB en sí misma mientras la comunicación real es con un programa de modo de usuario)

Windows tiene un conjunto de API que llama el shell (que es abuso de lenguaje al menos, si no un nombre inapropiado completo o incluso incorrecto). El “shell” realmente es solo cosas como los cuadros de diálogo Abrir, Guardar, cómo se representan los iconos, lo que se muestra en “Esta PC” (o “Computadora” en Vista y 7, “Mi PC” en XP y supongo que los sistemas más antiguos) . Es un componente crítico de Windows, pero no lo llamaría un shell. Tampoco llamaría a la interfaz de escritorio que el Explorador de Windows muestra como “el shell”, incluso si está más cerca de ser un nombre preciso (después de todo, es el programa de modo de usuario el que conecta al usuario con la computadora).

El shell (cosa real) es el programa (generalmente en modo de usuario) que te conecta a ti, el usuario, con la computadora. Es lo que realmente ves como la interfaz. Como dije, el escritorio de Windows (barra de tareas, Centro de acción, …), el escritorio de Linux (puede considerar KDE, Gnome, Unity, etc. como shells bajo esta definición), así como las interfaces de línea de comandos (Powershell, cmd, command. com en DOS, Bash y los demás en sistemas Unix). Algunos prefieren una definición restringida de la palabra “shell”, que significa solo las interfaces de línea de comandos (que mencioné), sin las gráficas. Pero esa no es la definición original, general, de libro escolar de shell.

El concepto de un núcleo es que existe para coordinar y administrar el acceso a todos los recursos que se compartirán entre todas las aplicaciones y demonios que se ejecutan en el espacio de usuario en la computadora. El kernel tiene un medio primitivo de muy bajo nivel para acceder a sus servicios, y solo los mecanismos internos de las aplicaciones tienen algún medio para acceder a esos servicios (en Linux, existe básicamente el syscall () y una pequeña cantidad de otros métodos para acceder al núcleo).

Esto se entiende mejor si imagina una computadora que la gente quería usar para ejecutar múltiples tareas simultáneamente, de manera ordenada y organizada. Se diseña un núcleo y las aplicaciones se crean para ejecutarse, utilizando el núcleo para administrar las cosas que hace el núcleo. Todas las aplicaciones se guardan en la memoria y se ejecutan, comenzando desde el arranque. Pero, ¿qué sucede cuando desea detener un proceso o agregar uno nuevo? Necesita un método interactivo para acceder a los servicios del núcleo. Este es el papel de un shell.

Proporciona acceso al servicio del núcleo que crea y lanza un proceso. Proporciona acceso a los servicios del núcleo que manejan los archivos y el sistema de archivos. Proporciona acceso a los servicios del kernel que informan sobre qué recursos se están utilizando, como memoria, tiempo de CPU, etc. El shell es solo un medio para acceder interactivamente a los servicios del kernel. Con el tiempo, los shells se han incrementado con capacidades de programación, por lo que puede ser más eficiente sobre cómo administrar el acceso al kernel en los procesos de inicio, la administración de los datos que entran y salen de esos procesos (IO estándar), el acceso a las estadísticas de tiempo de ejecución, el acceso al sistema de archivos y redes, etc.

Básicamente, el núcleo es el centro del sistema operativo que gestiona todo.

El shell es solo un programa en particular, una interfaz amigable que traduce sus comandos en algunas llamadas de bajo nivel al núcleo.

Un KERNEL es la parte del sistema operativo que se comunica entre el hardware y el software de una computadora y gestiona cómo se utilizan los recursos de hardware para cumplir con los requisitos de software.
Un SHELL es la interfaz de usuario que permite a los usuarios solicitar tareas específicas de la computadora. Dos tipos de interfaces de usuario son la “Interfaz de línea de comandos” basada en texto (CLI) o la “Interfaz gráfica de usuario” basada en iconos (GUI).
Tenga en cuenta que la “CLI” utiliza menos recursos y es una interfaz más estable.
Sin embargo, aquellos de nosotros que usamos enrutadores domésticos usaremos una “GUI”. Tenga en cuenta que el sistema operativo (OS) de un enrutador doméstico se llama realmente “Firmware”.

Piensa en una avellana o una nuez. El núcleo es la parte comestible en el interior y la carcasa es el resistente recinto no comestible en el exterior.

En términos de computadora, el núcleo es el componente interno del sistema operativo. El caparazón es el ‘envoltorio’ que lo mantiene todo unido.

Kernel es como una interfaz entre software y hardware.
Shell le permite comunicarse con el núcleo a través de varios comandos.

Representación pictórica:

En Linux, básicamente, Wheel actúa como proveedor de seguridad contra el virus. Funciona como el shell en Linux es Pres no entre la aplicación y el kernel, por lo que cualquier aplicación que tenga virus tendría que pasar a través del shell, lo que ciertamente no le permitiría ir al kernel. Por lo tanto, mantiene el es seguro.

Un kernel es un programa que se ocupa del hardware.
Un shell es un programa que permite al usuario comunicarse con el núcleo mediante comandos y llamadas al sistema.