Un kernel y muchos programas
Linux es solo una pieza de lo que usas cada día. Al terminar sabrás qué hace el kernel y qué ponen las distribuciones alrededor.
Primero, la idea completa
Mira el video entero o salta a la parte que quieras repasar. Después, cada idea tiene su propia escena para tocarla.
Qué es un sistema operativo
Un sistema operativo es el software de sistema que administra el hardware y los recursos de software de la computadora, y ofrece servicios comunes a los programas. Gracias a él se pueden ejecutar varios programas a la vez, compartir la máquina entre varios usuarios, tener una interfaz, un sistema de archivos, red y seguridad, y que quien programa se concentre en la lógica de su aplicación.
¿Puede un programa ejecutarse sin sistema operativo? Sí: algunos sistemas embebidos muy pequeños, como un sensor IoT, no tienen recursos para otra cosa que una sola aplicación, que corre directamente sobre el hardware (bare metal).
02 · 1969Unix y su filosofía
Unix es una familia de sistemas operativos multitarea y multiusuario que derivan del Unix original de AT&T, cuyo desarrollo empezó en 1969 en Bell Labs, con Ken Thompson y Dennis Ritchie, entre otros. Sus ideas siguen vivas: guardar datos en texto plano, un sistema de archivos jerárquico, tratar los dispositivos y la comunicación entre procesos como archivos, y construir con muchos programas pequeños que se combinan desde la línea de comandos. Es la filosofía Unix:
- Escribe programas que hagan una sola cosa y la hagan bien.
- Escribe programas que trabajen juntos.
- Escribe programas que manejen flujos de texto, porque el texto es una interfaz universal.
La fuerza de un sistema así está más en cómo se relacionan los programas que en cada programa por separado.
Cuatro programas pequeños encadenados con tuberías responden "¿qué producto se vendió más?". Agrega o quita cada uno.
GNU y Linux
El proyecto GNU fue anunciado por Richard Stallman el 27 de septiembre de 1983 para dar a los usuarios libertad y control: software que se puede ejecutar, copiar, distribuir, estudiar y modificar, incluido un sistema operativo completo. GNU es un acrónimo recursivo: "GNU no es Unix". GNU reunió casi todas las herramientas de un sistema tipo Unix, pero su kernel, Hurd, después de más de tres décadas aún no tiene una versión lista para producción.
En 1991 Linus Torvalds anunció Linux, un kernel. Unido a las herramientas GNU formó un sistema operativo completo. Linux es multiusuario y multitarea, monolítico pero modular, portable, con memoria virtual y de código abierto. Se considera basado en Unix porque comparte su arquitectura y su diseño: modularidad, línea de comandos, sistema de archivos jerárquico, llamadas al sistema y la forma de manejar procesos y memoria.
04 · Muchas formasTipos y componentes de un sistema operativo
Hay sistemas de un usuario o de varios, de una tarea o de varias, distribuidos, de tiempo real y embebidos. En general se componen de un kernel, un sistema de archivos, una interfaz de usuario, controladores, bibliotecas del sistema, un gestor de paquetes, servicios de red y de seguridad, y herramientas de administración. En la nube son la base de la virtualización, los contenedores, la automatización y la escalabilidad.
05 · Un kernel, muchos saboresDistribuciones
Linux tiene más de 30 años de desarrollo, es el sistema operativo más usado y está en teléfonos, servidores, la nube e IoT, sobre arquitecturas como x86, ARM y RISC-V. Casi nadie instala "solo Linux": se instala una distribución, que reúne el kernel con herramientas y bibliotecas GNU, un gestor de paquetes, una organización del sistema de archivos, un sistema de inicio, una shell y, a menudo, un entorno gráfico. Algunas populares: Debian, Ubuntu, Red Hat Enterprise Linux, Fedora, CentOS y Arch Linux.
06 · El núcleoQué hace el kernel
El kernel es el núcleo del sistema operativo y tiene el control de todo. Su función principal es abstraer el hardware y ofrecer una API: programando contra ella, una aplicación no tiene que saber dónde ni cómo se ejecuta. La arquitectura de Linux tiene tres capas:
- Hardware: CPU, memoria, discos, interfaces de red y periféricos.
- Kernel: los componentes que comunican el hardware con el resto.
- Espacio de usuario (user land): donde corren casi todos los programas, incluidos los del propio sistema como la shell,
ps,idossh. Se comunican con el kernel mediante las llamadas al sistema.
Hacia abajo, el kernel no tiene una sola interfaz con el hardware, sino varias, agrupadas por tipo: procesos (CPU), memoria, red, sistemas de archivos y periféricos. También separa el código genérico del específico de cada arquitectura de CPU, lo que facilita llevar Linux a arquitecturas nuevas.
Elige qué hace un programa y mira por dónde pasa hasta llegar al hardware.
Los componentes del kernel
El kernel de Linux es monolítico y modular: todos sus componentes forman un único binario, pero se le pueden agregar funciones en marcha mediante módulos. Cada área tiene su responsabilidad:
- Procesos: interrupciones, semáforos, planificadores… El kernel organiza en sesiones (SID), que contienen grupos de procesos (PGID), que contienen procesos (PID), que tienen uno o más hilos (TID). En Linux un hilo es un proceso que comparte ciertos recursos con otros.
- Memoria: la memoria física y la virtual se dividen en páginas, típicamente de 4 KB. La tarea es dar a cada proceso la ilusión de que sus páginas están en RAM aprovechando bien el espacio. Desde la versión 2.6 también hay huge pages, páginas grandes (por ejemplo de 2 MB) para cargas modernas.
- Red: una pila en capas: sockets para abstraer la comunicación, TCP y UDP para comunicación con y sin conexión, e IP para direccionar máquinas.
- Sistemas de archivos: ext4, FAT32, NTFS y otros, unificados por el sistema de archivos virtual (VFS).
- Controladores: código que corre en el kernel y maneja un dispositivo. Algunos vienen incluidos; otros se cargan como módulos.
Los procesos de una terminal: una sesión, tres grupos, cuatro procesos y cinco hilos. Toca cada nivel.
Antes de leer la respuesta
Es una simulación de un Linux Ubuntu: escribe comandos como en uno real. Con
? ves la lista de comandos que entiende y con las flechas recuperas los anteriores.Tu turno: reconoce la máquina
Una terminal en una máquina que no conoces. Averigua qué distribución es, qué kernel y qué arquitectura tiene, cómo se agrupan sus procesos y de qué tamaño son sus páginas de memoria. Cada dato que descubras se anota en la ficha.
Comprueba lo que entendiste
Cada respuesta incorrecta explica por qué parece correcta y en qué falla.