Un sistema operativo (SO) es un conjunto de programas destinados a permitir la comunicación del usuario con un ordenador y gestionar sus recursos de manera eficiente. Comienza a trabajar cuando se enciende el ordenador, y gestiona el hardware de la máquina desde los niveles más básicos.

Es el programa (o software) más importante de un Computador. Para que funcionen los otros programas, cada computador de uso general debe tener un sistema operativo. Los sistemas operativos realizan tareas básicas, tales como reconocimiento de la conexión del teclado, enviar la información a la pantalla, no perder de vista archivos y directorios en el disco, y controlar los dispositivos periféricos tales como impresoras, escáner, etc. impresoras, escáner, etc. Desempeña tanto el cometido de administrador, con el fin de vigilar que los recursos sean empleados de manera eficiente y respetuosa de las ne­cesidades de las aplicaciones, como el de potenciador de la funcionalidad. Así, los procesadores podrán atender a un mayor número de procesos, la memoria disponible a los procesos podrá sobrepasar la RAM disponible en el sistema, las aplicaciones po­drán colaborar entre sí de formas desconocidas cuando se desarrollan y, con ello, podrán aprovechar la funcionalidad que se logre posteriormente o en formas novedosas como las facilidades de comunicación que el sistema operativo les proporciona, entre otras cualidades. 

La historia reciente del computo tienen su propio merito. Debido a la evolución rápida de la tecnología, modificar una aplicación implicaba grandes costos, debido a esas circunstancias las etapas de desarrollo tomaba largos periodos de tiempo. Por esta razón, en vez de seguir una cronología comentaremos las características y presiones que afectan una serie de etapas de desarrollo de los sistemas operativos, e incluso las más primitivas de estas pueden tener variantes relevantes para diversas aplicaciones aun en la época futura y han de convivir con soluciones que aún estén en proceso de ser desarrolladas.

Las primeras computadoras se realizaron con cierto propósito, este propósito fue el calculo de tablas de tiro para la marina durante la SEGUNDA GUERRA MUNDIAL, como la aplicación era especifica se diseño con al capacidad necesaria sin emplear esfuerzo significativos adicionales.
Los primeros sistemas computacionales no poseían sistemas operativos. Los usuarios tenían completo acceso al lenguaje de la maquina. Todas las instrucciones eran codificadas a mano.Abarca desde la década de los 40 y se caracteriza por porque no existían los sistemas operativos, el usuario debía codificar manualmente en lenguaje máquina las instrucciones que le permitían usarlos recursos de la computadora y controlar así la ejecución de sus programas.



Con el éxito de la primera computadora y con el avance en materia de los lenguajes de programación, resulto rentable el desarrollo de computadoras comerciales como UNIVAC, o los sistemas 360 de IBM, estas computadoras eran comercializadas junto con los servicios necesario para el desarrollo de las aplicaciones.Los sistemas operativos de los años cincuenta fueron diseñados para que sean más ágiles. Antes de que los sistemas fueran diseñados, se perdía un tiempo considerable entre la terminación de un trabajo y el inicio del siguiente. este fue el comienzo de los sistemas de procesamiento por lotes, donde los trabajos se reunían por grupos o lotes. Cuando el trabajo estaba en ejecución, este tenía control total de la máquina. Al terminar cada trabajo, el control era devuelto al sistema operativo, el cual limpiaba y leía e iniciaba el trabajo siguiente. Después de tantos esfuerzos de Babbage, hubo poco progreso en la construcción de las computadoras digitales, hasta la Segunda Guerra Mundial.Luego Howard Aiken (Harvard), John Von Newman (Instituto de Estudios Avanzados, Princeton), J. Prespe R. Eckert y Williams Mauchley (Universidad de Pennsylvania), así como Conrad Zuse (Alemania), lograron construir máquinas de cálculo mediante bulbos. Estas máquinas eran enormes y llenaban cuartos completos con decenas de miles de bulbos, pero eran mucho más lentas que la computadora casera más económica en nuestros días.


Con la relativa abundancia de recursos disponibles en las computadoras, es posible albergar múltiples programas en la memoria y alternar la atención del procesador para atenderlas con una frecuencia que no solo aproveche los tiempos de bloqueo, sino que incluso genere .Además, el desarrollo de los controladores de dispositivos de entrada y salida tratan de ser desarrollados de forma separada, por lo que se implementan estándares para que estos sean capaces de integrarse a la funcionalidad del sistema operativo. Para soportar la portabilidad de las aplicaciones entre diversos sistemas operativos, se proponen estándares de funciones que el sistema operativo exponga mediante interfaces de programación para el desarrollo de aplicaciones, entre los que se cuenta POSIX.

Para aprovechar mejor los recursos de un equipo de computo, los programas se dividen en tareas mas pequeñas, las cuales se ejecutaran 1 a la vez, pero alternando entre uno y otro programa, dando la impresión al usuario de que existe mas de un programa al mismo tiempo, la idea es aprovechar los tiempos muertos entre las operaciones de cada programa, para que mientras se espera por algún dato que esta en disco, por ejemplo, otro programa haga uso de los recursos.

En el sistema operativo de red, los usuarios están conscientes de la existencia de varias computadoras y pueden conectarse con máquinas remotas y copiar archivos de una máquina a otra. Cada máquina ejecuta su propio sistema operativo local y tiene su propio usuario. Por el contrario, un sistema operativo distribuido es aquel que aparece ante sus usuarios como un sistema tradicional de un solo procesador, aun cuando esté compuesto por varios procesadores. En un sistema distribuido verdadero, los usuarios no deben ser conscientes del lugar donde su programa se ejecute o de lugar donde se encuentren sus archivos; eso debe ser manejado en forma automática y eficaz por el sistema operativo.