¿Cómo funciona un sistema unix o linux? [cerrado]

37

En pocas palabras, me gustaría saber cómo funciona el sistema operativo :

  • Los componentes básicos sobre los que se basa
  • Cómo funcionan juntos esos componentes
  • Lo que hace unix UNIX
  • Lo que lo hace tan diferente de otros sistemas operativos como Windows
Sander Versluys
fuente
3
wow, esta pregunta tomaría tanto tiempo para responder de manera integral ... como varios libros. Hay muy pocos sistemas operativos (aparte del espacio incrustado y las ventanas son la excepción notable) que no son Unix.
xenoterracide
2
no estoy seguro de si llorar o reír
zvolkov
27
¿Cómo funciona un sistema unix o linux? Muy bien gracias :-).
Gaurav
3
Me encanta la pregunta Es del tipo que hace que los usuarios experimentados verbalicen su propia comprensión y nos da a todos la oportunidad de comprender el universo de Unix y Linux.
Stein Åsmul
55
Bueno, en pocas palabras, tienes un shell, y debajo de eso tienes un kernel. Así es también como funciona Unix.
Tom Zych

Respuestas:

74

Un sistema UNIX consta de varias partes o capas como me gustaría llamarlas.

Para iniciar un sistema, un programa llamado cargador de arranque vive en el primer sector de una partición del disco duro. El sistema lo inicia y, a su vez, localiza el núcleo del sistema operativo y lo carga.

Capas

  1. El Kernel Este es el programa central que inicia el gestor de arranque. Realiza la interacción de hardware básica para el sistema (disco, memoria, video, sonido) y ofrece un entorno virtual en el que puede iniciar programas. El kernel también incluye todos los controladores que se ocupan de todas las pequeñas diferencias entre los dispositivos de hardware. Para el mundo exterior (las capas superiores), cada clase de dispositivos parece comportarse exactamente de la misma manera consistente, que a su vez, los programas pueden construir.

  2. Subsistemas de fondo. Solo hay programas regulares, que se mantienen fuera de su camino. Manejan cosas como el inicio de sesión remoto, proporcionan un bus de mensajes central y realizan acciones basadas en eventos de hardware / red. Por ejemplo, descubrimiento de bluetooth, gestión wifi, etc. Cualquier servicio de red (servidor de archivos, servidor de impresión, servidor web) también vive en este nivel. En los sistemas UNIX, todos estos son solo programas normales.

  3. Las herramientas de línea de comando. Todos estos son pequeños programas que pueden iniciarse para hacer cosas como editar texto, descargar archivos o administrar el sistema. En este punto, un sistema UNIX es totalmente utilizable para los administradores del sistema. En Windows, esta capa ya no existe.

  4. La interfaz gráfica de usuario. Estos también son solo programas, la única diferencia es que dibujan ventanas en la pantalla en lugar de escribir texto. Esto hace que el sistema sea más fácil de usar para usuarios habituales.

Cualquier servicio o evento irá de abajo hacia arriba.

Bibliotecas: la plataforma común

Los programas hacen muchas cosas comunes como mostrar una ventana, dibujar cosas en la pantalla o descargar un archivo. Estas cosas son iguales para múltiples programas, por lo tanto, ese código se coloca en archivos separados de "biblioteca" ( .soarchivos, es decir, objeto compartido). La biblioteca se puede compartir en todos los programas.

Para cada cosa imaginable, hay una biblioteca. Hay uno para leer / escribir archivos PNG. Hay uno para archivos JPEG, para leer XML, para encriptar, para reproducir videos, etc.

En Linux, las bibliotecas comunes para desarrolladores de aplicaciones son Qt y Gtk. Estas bibliotecas utilizan bibliotecas de nivel inferior internamente para sus necesidades específicas, al tiempo que exponen su funcionalidad de una manera coherente y concisa para que los desarrolladores de aplicaciones creen aplicaciones aún más rápido.

Las bibliotecas proporcionan la plataforma de aplicaciones, en la que los programadores pueden crear aplicaciones de usuario final para un sistema operativo. Cuantas más bibliotecas de alta calidad proporcione un sistema, menos código tendrá que escribir un programador para crear un programa hermoso.

Algunas bibliotecas se pueden usar en diferentes sistemas operativos (por ejemplo, Qt es), algunas están realmente vinculadas específicamente a un sistema operativo. Esto restringirá su programa para poder ejecutarse solo en esa plataforma.

Comunicación entre procesos

Una tercera pieza angular de un sistema operativo es la forma en que los programas pueden comunicarse entre sí. Estos son mecanismos de comunicación entre procesos (IPC). Estos existen en varios sabores, por ejemplo, una pieza de memoria compartida, o se configura un pequeño canal entre dos programas para intercambiar datos. También hay un bus de mensajes central en el que cada programa puede publicar un mensaje y recibir una respuesta. Esto se utiliza para la comunicación global, donde se desconoce qué programa puede responder.

De bibliotecas a sistemas operativos

Con las bibliotecas, el IPC y el núcleo en su lugar, los programadores pueden crear todo tipo de aplicaciones para servicios del sistema, administración de usuarios, configuración, administración, trabajo de oficina, entretenimiento, etc. Esto forma el conjunto completo que los usuarios novatos reconocen como el "sistema operativo ".

En los sistemas UNIX / Linux, todos los servicios son solo programas. Todas las herramientas de administración del sistema son solo programas. Todos hacen su trabajo y pueden encadenarse juntos. He resumido muchos programas importantes en http://codingdomain.com/linux/sysadmin/


Piezas distinguibles con Windows

UNIX es principalmente un sistema de programas, archivos y permisos restringidos. Se evitan muchas complejidades, lo que lo convierte en un sistema poderoso mientras parece que tiene un trabajo fácil para hacerlo.

En detalle, estos son principios que se pueden encontrar en los sistemas UNIX / Linux:

  • Hay formas uniformes de acceder a la información. ("Todo es solo un archivo"). Puede abrir un archivo, un socket de red, un canal IPC, parámetros del kernel y bloquear el dispositivo como un archivo. De ahí la aparición de los sistemas de archivos virtuales en / dev, / sys y / proc. La única API que necesitas es open, ready close.

  • El sistema subyacente es transparente. Cada programa opera bajo las mismas reglas. A diferencia de Windows, no existe una diferencia artificial entre un "programa de consola", un "programa gui" o un "servicio en segundo plano". Todos son solo programas, que hacen cosas diferentes. También se pueden observar, analizar y depurar de la misma manera.

  • Las configuraciones son legibles, editables y se pueden anotar con comentarios. Por lo general, tienen un formato de estilo INI, pero pueden usar un formato personalizado para las necesidades de esa aplicación. Debido a que son solo archivos, se pueden copiar a otros sistemas, archivar o respaldar con herramientas estándar.

  • No hay grandes aplicaciones para "hacerlo todo de una vez". El mantra es "haz una cosa, hazlo bien". Las herramientas de línea de comandos se pueden encadenar y juntas pueden ser poderosas Los servicios separados (p. Ej., SMTP, IMAP y POP, y el inicio de sesión) son subprogramas separados, lo que evita problemas complejos de código y seguridad entrelazados. Los entornos de escritorio complejos delegan el trabajo duro a programas individuales.

  • fork(). Los nuevos programas son iniciados por un programa existente que se clona. El clon configura todo (por ejemplo, identificadores de archivos) y, opcionalmente, se reemplaza con el nuevo código del programa. Esto hace que sea realmente fácil aplicar las mismas configuraciones y restricciones de seguridad a los nuevos programas, compartir memoria o configurar un mecanismo IPC. El costo de iniciar un proceso también es muy bajo.

  • El sistema de archivos es un árbol, en el que se pueden montar otras particiones de disco y recursos compartidos de red. Nuevamente, hay una forma universal de acceder a los datos. Ubicaciones comunes del sistema (por ejemplo, /usrse pueden montar fácilmente como recurso compartido de red.

  • El sistema está construido para bajos privilegios de usuario. Después del inicio de sesión, cada usuario (excepto root) se limita a sus propios recursos, ejecutando aplicaciones y archivos solamente. Los servicios de red reducen sus privilegios lo antes posible. Hay una única forma clara de obtener más privilegios, o pedirle a alguien que ejecute un trabajo privilegiado en su nombre. Cada otra llamada está limitada por las restricciones y limitaciones del programa.

  • Cada programa almacena la configuración en una carpeta / archivo oculto del directorio de inicio del usuario. Ningún programa intenta escribir un archivo de configuración global.

  • Un favor hacia los mecanismos de comunicación descritos abiertamente sobre los mecanismos secretos o mecanismos específicos 1 a 1. Se alienta a otros proveedores y desarrolladores de software a que sigan la misma especificación, para que las cosas se puedan conectar, intercambiar fácilmente y, sin embargo, permanecer unidas.

vdboor
fuente
1
Encantadora respuesta, ¡sé que es muy difícil de explicar en pocas palabras! ¡Gracias! ;-)
Sander Versluys
1
si señor, bien hecho en esta respuesta.
Stefan
14
¿Dónde está el botón +10?
EricSchaefer
1
¡Gracias a todos por los comentarios y votos! ¡Es bueno saber que la respuesta se aprecia tan bien!
vdboor
1
@faif, es bastante estándar (incluso los sistemas operativos de Microsoft lo tienen), y la belleza está en el ojo del espectador, supongo. El punto es que todo es un archivo, incluso los especiales.
psusi
11

UNIX es un sistema operativo sólido, construido sobre un diseño de sonido que ha demostrado ser exitoso durante más de 40 años (eso es casi la eternidad en informática). La tecnología central se basa en el lenguaje C y en una miríada de pequeños programas: los comandos UNIX. La filosofía básica ha sido resumida por McIlroy:

Escriba programas que hagan una cosa y que lo hagan bien. Escribir programas para trabajar juntos. Escriba programas para manejar secuencias de texto, porque esa es una interfaz universal.

Puede encontrar más información sobre la filosofía de UNIX en ESRaymond "The Art of UNIX Programming".

Didier Trosset
fuente
2
+1 para "El arte de la programación UNIX". Sin embargo, aunque la API se define alrededor de C, no hay ningún problema técnico con la implementación de todo el sistema en Haskell (con bits de ensamblaje;)) o algo así.
Maciej Piechotka
3
Los bits de ensamblaje también se pueden escribir en Haskell. Echa un vistazo al potencial
Phil Miller
10

Hay algunas respuestas excelentes aquí. Sin embargo, una cosa que creo que se ha dejado de lado es cómo * nix difiere de otros sistemas operativos, particularmente Microsoft Windows.

El concepto fundamental ya mencionado anteriormente "hacer una cosa, hacerlo bien" es tan central para los sistemas operativos * nix que a veces puede pasarse por alto. Sin embargo, es esta filosofía de diseño la que hace que Linux sea tan flexible y poderoso.

Por ejemplo, la interfaz gráfica de usuario (GUI) para MS Windows está entrelazada en el sistema operativo. Es prácticamente imposible instalar un sistema operativo MS sin la GUI. En Linux, puede abrir fácilmente un servidor o sistema integrado que no tiene ningún componente gráfico. Puede estar completamente controlado por la línea de comandos y seguir siendo un servidor con todas las funciones.

El diseño modular de Linux también permite que un administrador del sistema desactive un servicio, lo actualice y lo restablezca sin reiniciar el sistema operativo. De hecho, la única vez que debe reiniciar un sistema operativo Linux es cuando el núcleo mismo se está modificando o actualizando.

Por ejemplo, podría instalar un nuevo administrador de Windows (gnome, kde, lo que sea) en Linux y un usuario que actualmente haya iniciado sesión en el sistema podría no estar al tanto.

En Windows, a menudo los cambios más simples en el sistema requieren un reinicio, aunque a veces esto es más un problema de seguridad que un requisito técnico real. Diría que este es uno de los defectos básicos de los sistemas operativos MS. En Linux, puede actualizar muchos de los módulos de controlador y tener poco o ningún impacto en los usuarios. En Windows, es posible que deba reiniciar todo el cuadro si simplemente instala una nueva aplicación.

Este diseño modular también le da a Linux una flexibilidad extraordinaria. Cada sistema Linux se puede adaptar a la tarea específica que necesita realizar, con la menor carga de recursos posible. Con Windows no puede desactivar la interfaz GUI para ejecutar un servidor HTTP simple. Windows asume una huella de memoria que crea una barrera por debajo de la cual su hardware no puede ir. Esta es una razón principal por la que Linux se ha convertido en el sistema operativo preferido para muchas aplicaciones móviles e integradas.

Podría seguir y seguir, pero espero que estos ejemplos ayuden a explicar por qué Linux se ha vuelto tan popular y cómo realmente difiere de ese otro sistema operativo.

Viejo contador de tiempo
fuente
2

Recomendaría leer Programación avanzada en Unix Environment 2e para aprender mucho sobre la API Single Unix Standard (SUS) y POSIX, lo que le dará una idea sobre lo que hace Unix Unix y cómo funcionan los componentes, y funcionan juntos.

Sin embargo, es un libro muy pesado y más un manual de referencia. Si tiene un problema de insomnio, llévelo a la cama. Aparte de eso, si eres un programador de Unix C es imprescindible.

xenoterracida
fuente
2

En el espíritu de las dos recomendaciones anteriores del libro, también recomendaría

La interfaz de programación LINUX por M. Kerrisk

que, aunque está dirigido al tema de la programación del sistema UNIX / Linux, revela toneladas de información detallada sobre cómo funcionan Linux y, en general, los sistemas UNIX desde la perspectiva del programador / usuario. Profundiza en gran detalle en la mayoría de las viñetas mencionadas en la respuesta de vdboor y revela suficientes detalles de una manera comprensible y legible para tener una idea / imagen de los conceptos fundamentales de UNIX y sus fundamentos.

Darbehdar
fuente