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
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.
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.
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.
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" ( .so
archivos, 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
, read
y 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, /usr
se 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.