1. Núcleo:
* kernel monolítico: El núcleo del sistema UNIX. Gestiona los recursos del sistema (CPU, memoria, dispositivos de E/S), proporciona llamadas del sistema para que los programas de espacio de usuario interactúen con estos recursos y manejen procesos. Esto contrasta con los microkernels, donde reside más funcionalidad en el espacio del usuario.
* Arquitectura en capas (en muchas implementaciones): Si bien no se aplican estrictamente en todos los sistemas UNIX, muchos exhiben una arquitectura en capas donde diferentes módulos de núcleo tienen diferentes niveles de privilegios y acceso al hardware.
* Controladores del dispositivo: Módulos dentro del núcleo que interactúan con dispositivos de hardware específicos, abstraiendo sus complejidades de las aplicaciones del espacio de usuario.
2. Shell:
* Interpreter de línea de comandos: La interfaz principal para que los usuarios interactúen con el sistema. Toma comandos como entrada y los ejecuta, a menudo llamando a programas en el espacio del usuario. Los ejemplos incluyen Bash, ZSH y KSH.
3. Llamadas al sistema:
* Interfaz entre el núcleo y el espacio de usuario: La única forma para que los programas de espacio de usuario accedan a los servicios del núcleo y los recursos del sistema es a través de llamadas al sistema. Esto proporciona una interfaz bien definida y segura.
4. Sistema de archivos:
* Sistema de archivos jerárquicos: Organiza archivos y directorios en una estructura similar a un árbol. Esto proporciona una forma consistente de acceder y administrar datos. Las características clave incluyen:
* inodes: Estructuras de datos que representan archivos y directorios, que contienen metadatos, como permisos y marcas de tiempo.
* Directorios: Archivos especiales que contienen punteros a otros inodos.
* Portabilidad: El diseño del sistema de archivos facilita la portabilidad entre los diferentes sistemas UNIX.
5. Utilidades:
* Programas pequeños y especializados: UNIX enfatiza el uso de muchas utilidades pequeñas de un solo propósito que se puede combinar utilizando tuberías y redirección para crear una funcionalidad más compleja. Esto promueve la modularidad y la reutilización.
6. Tuberías y redirección:
* Comunicación entre procesos: Mecanismos que permiten que los programas se comuniquen entre sí conectando sus secuencias de entrada/salida estándar. Esto permite combinaciones poderosas de utilidades simples.
7. Bibliotecas:
* Código reutilizable: Las bibliotecas proporcionan funciones preescritas y estructuras de datos que las aplicaciones pueden usar, reduciendo el tiempo de desarrollo y promoviendo la reutilización del código.
En resumen: La arquitectura Unix se basa en una filosofía de diseño simple, pero poderosa, que enfatiza la modularidad, la portabilidad y la combinación de programas pequeños y especializados. El kernel proporciona servicios principales, el shell proporciona interacción del usuario y los servicios públicos proporcionan funcionalidades específicas. Este diseño en capas, junto con un sólido sistema de archivos y mecanismos de comunicación entre procesos, ha demostrado ser muy influyente en el desarrollo de sistemas operativos y software. Sin embargo, es crucial tener en cuenta que "Unix" es un término amplio que abarca muchas implementaciones diferentes, y los detalles específicos pueden variar considerablemente.