Sistema operativo
Sistema operativo (SO), programa que gestiona los recursos de un ordenador, especialmente la asignación de esos recursos entre otros programas. Los recursos típicos incluyen la unidad central de procesamiento (CPU), la memoria del ordenador, el almacenamiento de archivos, los dispositivos de entrada/salida (E/S) y las conexiones de red. Las tareas de gestión incluyen la programación del uso de los recursos para evitar conflictos e interferencias entre los programas. A diferencia de la mayoría de los programas, que completan una tarea y terminan, un sistema operativo se ejecuta indefinidamente y sólo termina cuando el ordenador se apaga.
Los modernos sistemas operativos multiproceso permiten que haya muchos procesos activos, donde cada proceso es un «hilo» de computación que se utiliza para ejecutar un programa. Una forma de multiprocesamiento se llama tiempo compartido, que permite a muchos usuarios compartir el acceso al ordenador cambiando rápidamente entre ellos. El tiempo compartido debe evitar las interferencias entre los programas de los usuarios, y la mayoría de los sistemas utilizan la memoria virtual, en la que la memoria, o «espacio de direcciones», utilizada por un programa puede residir en la memoria secundaria (como en una unidad de disco duro magnético) cuando no está en uso inmediato, para volver a ocupar la memoria principal del ordenador, más rápida, bajo demanda. Esta memoria virtual aumenta el espacio de direcciones disponible para un programa y ayuda a evitar que los programas interfieran entre sí, pero requiere un cuidadoso control por parte del sistema operativo y un conjunto de tablas de asignación para hacer un seguimiento del uso de la memoria. Quizá la tarea más delicada y crítica para un sistema operativo moderno sea la asignación de la CPU; cada proceso puede utilizar la CPU durante un tiempo limitado, que puede ser una fracción de segundo, y luego debe ceder el control y quedar suspendido hasta su próximo turno. El cambio entre procesos debe utilizar a su vez la CPU mientras se protegen todos los datos de los procesos.
Los primeros ordenadores digitales no tenían sistemas operativos. Ejecutaban un programa a la vez, que tenía el mando de todos los recursos del sistema, y un operador humano proporcionaba los recursos especiales necesarios. Los primeros sistemas operativos se desarrollaron a mediados de la década de 1950. Se trataba de pequeños «programas supervisores» que proporcionaban operaciones básicas de E/S (como el control de los lectores de tarjetas perforadas y las impresoras) y llevaban la cuenta del uso de la CPU para la facturación. Los programas supervisores también proporcionaban capacidades de multiprogramación para permitir la ejecución de varios programas a la vez. Esto era especialmente importante para que estas primeras máquinas multimillonarias no estuvieran inactivas durante las lentas operaciones de E/S.
Los ordenadores adquirieron sistemas operativos más potentes en la década de 1960 con la aparición del tiempo compartido, que requería un sistema para gestionar que varios usuarios compartieran el tiempo de la CPU y los terminales. Dos de los primeros sistemas de tiempo compartido fueron el CTSS (Compatible Time Sharing System), desarrollado en el Massachusetts Institute of Technology, y el Dartmouth College Basic System, desarrollado en el Dartmouth College. Otros sistemas multiprogramados fueron Atlas, de la Universidad de Manchester (Inglaterra), y el OS/360 de IBM, probablemente el paquete de software más complejo de la década de 1960. Después de 1972, el sistema Multics para el ordenador GE 645 de General Electric Co. (y más tarde para los ordenadores de Honeywell Inc.) se convirtió en el sistema más sofisticado, con la mayoría de las capacidades de multiprogramación y tiempo compartido que más tarde se convirtieron en estándar.
Las minicomputadoras de la década de 1970 tenían memoria limitada y requerían sistemas operativos más pequeños. El sistema operativo más importante de esa época fue UNIX, desarrollado por AT&T para grandes minicomputadoras como una alternativa más sencilla a Multics. Su uso se generalizó en la década de 1980, en parte porque era gratuito para las universidades y en parte porque se diseñó con un conjunto de herramientas que eran potentes en manos de programadores hábiles. Más recientemente, Linux, una versión de código abierto de UNIX desarrollada en parte por un grupo liderado por el estudiante de informática finlandés Linus Torvalds y en parte por un grupo liderado por el programador informático estadounidense Richard Stallman, se ha hecho popular en los ordenadores personales, así como en ordenadores más grandes.
Además de estos sistemas de propósito general, los sistemas operativos de propósito especial funcionan en pequeños ordenadores que controlan líneas de montaje, aviones e incluso electrodomésticos. Son sistemas en tiempo real, diseñados para dar una respuesta rápida a los sensores y utilizar sus entradas para controlar la maquinaria. También se han desarrollado sistemas operativos para dispositivos móviles como teléfonos inteligentes y tabletas. El iOS de Apple Inc., que se ejecuta en iPhones y iPads, y el Android de Google Inc. son dos sistemas operativos móviles destacados.
Desde el punto de vista de un usuario o de un programa de aplicación, un sistema operativo proporciona servicios. Algunos de ellos son simples comandos de usuario como «dir» -mostrar los archivos de un disco- mientras que otros son «llamadas al sistema» de bajo nivel que un programa gráfico podría utilizar para mostrar una imagen. En cualquiera de los casos, el sistema operativo proporciona el acceso adecuado a sus objetos, las tablas de ubicaciones del disco en un caso y las rutinas para transferir datos a la pantalla en el otro. Algunas de sus rutinas, las que gestionan la CPU y la memoria, son generalmente accesibles sólo a otras partes del sistema operativo.
Los sistemas operativos contemporáneos para ordenadores personales suelen proporcionar una interfaz gráfica de usuario (GUI). La GUI puede ser una parte intrínseca del sistema, como en las versiones más antiguas del Mac OS de Apple y el Windows OS de Microsoft Corporation; en otras es un conjunto de programas que dependen de un sistema subyacente, como en el sistema X Window para UNIX y el Mac OS X de Apple.