¿Cómo funcionan las computadoras sin sistema operativo?

La mayoría de las computadoras como las conocemos en estos días tienen un sistema operativo incorporado, comúnmente para computadoras de escritorio y portátiles: Windows (83%) y macOS (11%) con Linux como la mayoría del resto. En computadoras más antiguas, es posible que haya visto MS-DOS.

Hace años, cuando teníamos computadoras que arrancaban sin SO de software, teníamos chips de firmware que tenían los conjuntos de instrucciones en ellos. O cargó un programa desde un disco o una cinta, o los programó directamente usando lo que estaba en el firmware. No se pudieron ejecutar múltiples tareas.

Hoy en día esto está restringido en gran medida a pequeños microcontroladores. Habrá un programa de arranque que tiene el conjunto de instrucciones, y puede cargar algún código creado o crear el suyo propio en un IDE dedicado. Programará en un lenguaje de alto nivel, aunque podría ser ensamblado, y el IDE compilará el código en lenguaje máquina. Lo que esté en el conjunto de instrucciones lo ejecutará.

Para pequeños usos individuales, un sistema operativo no es necesario y, de hecho, puede estropear las cosas. Para las máquinas que necesitan hacer más de una tarea, un sistema operativo ayuda a navegar por el software y el hardware.

Un sistema operativo es básicamente una capa de software que expone algunos servicios, entre los que se encuentran el sistema de memoria virtual, el planificador, etc.

Hay situaciones, típicamente los sistemas integrados, que necesitan servicios diferentes, por ejemplo, los ofrecidos por RTOS (sistemas operativos en tiempo real), o que no necesitan esos servicios, confiando solo en procedimientos personalizados codificados por el programador.

Personalmente he usado muchas veces esta solución. Un ejemplo reciente es Arduino que no tiene sistema operativo, sino solo un montón de bibliotecas a las que se puede llamar para realizar alguna manipulación de hardware (establecer, restablecer bits, temporizadores y cosas similares).

Las principales ventajas son

  • Menor huella: su código contiene solo lo que necesita
  • Mayor rendimiento: a medida que escribe su propio código, puede adaptarlo a sus necesidades específicas, manteniendo todo lo que no necesita.

Las principales desventajas son

  • Debe tener algunos conocimientos de hardware. Si debe implementar una rutina de servicio de interrupción (usando un sistema operativo, esto normalmente se hace por el núcleo mismo o por los controladores del dispositivo), entonces la depuración con frecuencia necesita un osciloscopio y mucha paciencia.
  • Debes reinventar la rueda. Solo tiene lo que escribe o lo que está disponible en las bibliotecas estándar del idioma que utiliza, por lo que con frecuencia necesita escribir más código para implementar lo que normalmente ofrece el sistema operativo.

La CPU no requiere un sistema operativo para funcionar. Solo necesita algún software que le diga qué hacer a través de las instrucciones del código de máquina de la CPU ubicadas en la memoria persistente comenzando en la dirección de interrupción de reinicio. Después de todo, un sistema operativo es solo software.

Si, por ejemplo, programa un Arduino, no tiene un sistema operativo, solo un código de arranque y una biblioteca que abstrae las características de la MCU.

Muchas soluciones integradas / de la industria necesitan un SO básico, a menudo un RTOS (SO en tiempo real) para manejar las muchas tareas paralelas que ejecuta la CPU, así como la administración de memoria y posiblemente el Sistema de archivos Flash, etc.

Cualquier programa que ejecuten debe incluir toda la funcionalidad que necesita, ya que no hay llamadas al sistema para que el sistema operativo haga las cosas por usted.

La computadora en sí funciona exactamente de la misma manera que cualquier otra computadora.

Su única aplicación tiene que incluir dentro de sí todos los servicios que normalmente se encuentran dentro de un único sistema operativo de tareas. O al menos tantos como sea necesario.