Qué es un sistema operativo

Para qué sirve, y cómo pasamos de tarjetas perforadas a teléfonos en el bolsillo

Marco González Luengo

Tabla de contenidos
  1. Las piezas de un sistema computacional
  2. Entonces, ¿qué es?
  3. Tres grandes ideas
  4. Espacio de usuario y espacio del núcleo
  5. Cómo llegamos hasta aquí
  6. Los 40 y 50: la máquina desnuda y el procesamiento por lotes
  7. Los 60: multiprogramación y tiempo compartido
  8. Los 70: UNIX y las redes
  9. Los 80: el computador personal
  10. Los 90: internet para todos y el software libre
  11. 2000 en adelante: móviles, nube y contenedores
  12. Tipos de sistemas
  13. Multiprocesador
  14. Distribuidos
  15. De tiempo real
  16. Generaciones de computadores
  17. Ejercicios

Todo el mundo usa uno, pocos saben decir qué es exactamente. Partamos por ahí.

Las piezas de un sistema computacional

Un sistema computacional se puede ver en cuatro capas:

Usuariospersonas, máquinas, otros computadores Aplicacionesnavegador, editor, compilador, juegos Sistema operativocoordina y reparte el hardware Hardwareprocesador, memoria, dispositivos de E/S
Las capas de un sistema computacional

Entonces, ¿qué es?

No hay una definición única y perfecta, pero estas tres miradas se complementan:

Al programa que está corriendo todo el tiempo, con control total del hardware, se le llama kernel o núcleo. Todo lo demás son programas que corren encima.

El sistema operativo tiene dos objetivos que a veces tiran para lados opuestos:

  1. Conveniencia: que usar el computador y escribir programas sea fácil.
  2. Eficiencia: aprovechar el hardware lo mejor posible.

Un sistema operativo de teléfono se inclina hacia la conveniencia y el ahorro de batería; uno de un servidor que atiende millones de solicitudes, hacia la eficiencia.

Tres grandes ideas

El libro Operating Systems: Three Easy Pieces resume todo lo que hace un sistema operativo en tres ideas, que recorren el resto de estos temas:

Espacio de usuario y espacio del núcleo

Los programas no pueden tocar el hardware directamente. Viven en el espacio de usuario, con permisos limitados. Cuando necesitan algo que solo el sistema operativo puede hacer (leer un archivo, abrir una conexión, crear un proceso), le piden ese servicio a través de una puerta bien definida: las llamadas al sistema.

   Aplicación    Aplicación    Aplicación         espacio de usuario
 ---------------------------------------------
         Interfaz de llamadas al sistema
 ---------------------------------------------
   Componentes del sistema operativo              espacio del núcleo

Cómo funciona esa puerta, y por qué el hardware tiene que ayudar a que nadie se la salte, lo vemos en El computador por dentro y en Estructura del sistema operativo.

Cómo llegamos hasta aquí

Los sistemas operativos no se diseñaron de una vez: cada época resolvió el problema más caro que tenía.

Los 40 y 50: la máquina desnuda y el procesamiento por lotes

Los primeros computadores no tenían sistema operativo. Eran máquinas enormes que se operaban desde una consola, de a una persona a la vez, que era programador, operador y usuario. Los programas entraban en cinta de papel o tarjetas perforadas. Preparar cada ejecución tomaba mucho tiempo, y mientras tanto el carísimo procesador estaba sin hacer nada.

La primera mejora fue separar al usuario del operador y agrupar trabajos parecidos en lotes (batch). Un pequeño programa, el monitor residente, se quedaba en memoria y pasaba automáticamente de un trabajo al siguiente: el antepasado de los sistemas operativos.

Pero los lectores de tarjetas y las impresoras eran lentísimos comparados con el procesador. La solución fue el spooling (Simultaneous Peripheral Operation On-Line): usar el disco como intermediario. Los trabajos se leían a disco antes de ejecutarse, y las impresiones se escribían en disco para salir por la impresora cuando se pudiera. El procesador ya no esperaba al dispositivo lento. Tu cola de impresión sigue funcionando así.

Los 60: multiprogramación y tiempo compartido

La multiprogramación carga varios trabajos en memoria a la vez. Cuando uno se queda esperando un dispositivo, el procesador pasa a otro en vez de quedarse ocioso. Esto obligó al sistema operativo a hacer tres cosas nuevas:

En 1964, IBM lanzó la familia System/360, con un mismo sistema operativo para computadores de distintos tamaños.

Luego vino el tiempo compartido (time sharing): el procesador cambia de un usuario a otro tan rápido que cada uno, sentado en su terminal, siente que tiene el computador para él. Sistemas como CTSS (1961) y MULTICS (1965) introdujeron ideas que seguimos usando, como la memoria virtual y los sistemas de archivos jerárquicos. En 1969 nace ARPANET, la red que daría origen a internet.

Los 70: UNIX y las redes

En 1969, en los Laboratorios Bell, nace UNIX, inspirado en MULTICS pero mucho más simple. En 1973 se reescribe en C y se vuelve portable a muchas máquinas. Se desarrolla también TCP/IP, que en 1983 pasa a ser el protocolo de ARPANET.

Los 80: el computador personal

Los computadores bajan de precio y llegan a oficinas y casas: el IBM PC (1981), con MS-DOS, y la Macintosh (1984), que popularizó la interfaz gráfica. El sistema operativo ahora apunta a la conveniencia de una sola persona. Las redes locales se vuelven comunes, y aparece el modelo cliente-servidor. En 1989, en el CERN, Tim Berners-Lee propone la World Wide Web.

Los 90: internet para todos y el software libre

El hardware se vuelve potente y barato, y el soporte de red pasa a ser estándar en todo sistema operativo. Windows domina los escritorios. Aparece Linux (1991) y, junto con el proyecto GNU y el servidor web Apache, el software libre y de código abierto se vuelve una alternativa real. Llega también el plug and play: conectar un dispositivo y que el sistema lo configure solo.

2000 en adelante: móviles, nube y contenedores

Tipos de sistemas

Multiprocesador

Varios procesadores (o núcleos) que comparten la memoria y el reloj, en estrecha comunicación. Se dice que están fuertemente acoplados. Ventajas: más trabajo por unidad de tiempo, más barato que varias máquinas separadas y, si un procesador falla, el sistema puede seguir funcionando más lento.

Los procesadores actuales de teléfonos y de muchos computadores mezclan núcleos de alto rendimiento y de bajo consumo. El sistema operativo tiene que decidir qué va a cada tipo: un poco de cada modelo.

Distribuidos

Varios computadores que no comparten memoria ni reloj, conectados por una red: débilmente acoplados. Permiten compartir recursos, repartir la carga, seguir funcionando si uno falla y comunicarse.

Los clusters y los servicios en la nube son sistemas distribuidos.

De tiempo real

Sistemas donde responder a tiempo es parte de responder bien. Una respuesta correcta que llega tarde es una respuesta incorrecta.

Desde 2024, el kernel Linux incluye oficialmente el soporte PREEMPT_RT, que le permite atender aplicaciones de tiempo real.

Generaciones de computadores

Generación Época Tecnología
0 hasta 1945 Mecánicas y electromecánicas
1 1945–1955 Tubos de vacío
2 1955–1965 Transistores
3 1965–1980 Circuitos integrados
4 1980 en adelante Microprocesadores (VLSI): millones y luego miles de millones de transistores en un chip

Ejercicios

¿Cuáles son los dos objetivos de un sistema operativo, y por qué a veces se contraponen?

Conveniencia, que el sistema sea fácil de usar y de programar, y eficiencia, que aproveche bien el hardware.

Se contraponen porque lo cómodo suele costar recursos. Una interfaz gráfica con animaciones es conveniente pero consume procesador y memoria. Revisar cada operación para proteger al usuario de errores lo hace más seguro pero más lento. Cada sistema elige su punto de equilibrio según para qué se usa.

¿Qué problema resolvió el spooling, y dónde lo sigues viendo hoy?

La enorme diferencia de velocidad entre el procesador y los dispositivos de entrada y salida, como lectores de tarjetas e impresoras. En vez de que el procesador espere al dispositivo, los datos se dejan en disco y el dispositivo los procesa a su ritmo.

Hoy lo ves en la cola de impresión: mandas tres documentos a imprimir, sigues trabajando, y la impresora los va sacando de a uno.

¿Qué diferencia hay entre multiprogramación y tiempo compartido?

La multiprogramación mantiene varios trabajos en memoria y cambia de uno a otro cuando el que está corriendo se queda esperando (por ejemplo, un dispositivo). Su objetivo es que el procesador no esté ocioso.

El tiempo compartido va más allá: cambia de un trabajo a otro muy seguido, aunque ninguno esté esperando, para que muchos usuarios interactúen al mismo tiempo y cada uno sienta que el computador responde de inmediato. Su objetivo es el tiempo de respuesta.

¿En qué se diferencia un sistema multiprocesador de uno distribuido?

En un sistema multiprocesador, los procesadores comparten la memoria y el reloj, y se comunican a través de esa memoria compartida: están fuertemente acoplados.

En uno distribuido, cada computador tiene su propia memoria y su propio reloj, y se comunican enviándose mensajes por una red: están débilmente acoplados.

¿El control de frenos de un auto y una plataforma de streaming de video son sistemas de tiempo real? ¿De qué tipo?

Los dos lo son, pero de distinto tipo:

  • Los frenos son de tiempo real duro: si la respuesta llega tarde, puede haber un accidente. No se admite incumplir un plazo.
  • El streaming es de tiempo real blando: si un cuadro llega tarde, el video se entrecorta o baja de calidad, pero nada grave pasa.

Sigue con El computador por dentro.