Introducción y evolución histórica

El Sistema Operativo es el software que permite controlar el hardware de una manera eficiente para que se puedan realizar las tareas de forma cómoda. El sistema operativo presenta al usuario un entorno en el que se pueden ejecutar aplicaciones para llevar a cabo diversas tareas, gestionando los recursos disponibles (cpu, memoria, disco, comunicaciones en red, dispositivos periféricos...). De este modo un usuario puede realizar tareas como abrir un fichero y acceder a la información que contiene sin preocuparse de aspectos de bajo nivel como: mover los cabezales del disco, la velocidad de giro del motor del disco, la posición que ocupan los bits en la superficie del disco, etc...

capas-hardware-os-applications.png


Mientras el usuario final trabaja con aplicaciones, el administrador de sistemas habitualmente trabajará con el sistema operativo para conseguir que el sistema informático (hardware + software) realice su función con la máxima eficiencia.


Evolución de los sistemas operativos

La evolución de la informática nos proporciona sistemas operativos que cada vez realizan más funciones, facilitando el trabajo a los usuarios.

Pasos evolutivos:

Proceso en serie
Inicialmente, finales de los 40, el programador interactúa directamente con la máquina mediante conmutadores, indicadores luminosos y tal vez una impresora. No existe el sistema operativo y los usuarios de un ordenador se turnan para acceder secuencialmente, en serie.
Proceso por lotes
Se desarrolla un elemento de software denominado monitor que es capaz de ejecutar tareas, lotes, de manera secuencial. En estos sistemas informáticos los programadores pasaban a los administradores de sistemas los programas a ejecutar en cinta (o tarjetas perforadas) y el sistema los ejecutaba secuencialmente y de manera no interactiva.
Multiprogramación o multitarea
Con el ánimo de maximizar el uso de la CPU se cargan varios programas de manera simultánea. Así mientras un proceso está bloqueado por una operación de entrada/salida, la CPU puede continuar la ejecución de otro proceso.
Sistemas de tiempo compartido
El sistema reparte la atención de la CPU (o CPUs) entre diferentes procesos, simulando la ejecución en paralelo de los mismos. Los sistemas de tiempo compartido permiten que varios usuarios trabajen de manera simultánea y en modo interactivo. Uno de los primeros sistemas de tiempo compartido fue el CTSS (Compatible Time-Sharing System) desarrollado en el MIT.


Tipos de sistemas operativos

Según las necesidades que plantean diferentes usos y entornos, encontramos sistemas operativos:

Monousuario:
Desde el punto de vista de la máquina (o el sistema informático) no se hace distinción entre los usuarios que utilizan la máquina. Sólo un usuario puede estar trabajando en un momento determinado. Ejemplos: MS-DOS, Windows 3.x, 95, 98, Me.
Multiusuario:
Varios usuarios pueden trabajar simultáneamente en el mismo sistema informático. Además, el sistema realiza distinciones entre usuarios. La gestión de los recursos (memoria, CPU, disco, etc...) es mucho más complicada, pero al tener a varias personas trabajando a la vez, se rentabiliza con mayor facilidad la inversión.
Monoproceso:
El sistema informático sólo puede mantener un proceso en ejecución, las tareas se realizan secuencialmente.
Multiproceso/Multitarea:
El sistema informático es capaz de ejecutar varios procesos simultáneamente. Si hubiese suficientes CPUs, se ejecutaría cada proceso en una CPU distinta, si el número de CPUs es menor (como habitualmente ocurre) que el de procesos preparados para ejecutar. El sistema operativo asigna franjas de uso de CPU a cada proceso, para simular una ejecución en paralelo. De cualquier modo, realmente o de forma simulada, los procesos en ejecución avanzan en paralelo.
Tiempo compartido:
Se realiza una planificación del uso de las CPUs disponibles entre los procesos preparados para ser ejecutados. De este modo, aparentemente, se ejecutan todos los procesos a la vez.
Tiempo real:
Los sistemas operativos en tiempo real son predecibles, de tal manera que se compromenten a realizar determinadas tareas dentro de unos límites de tiempo. Su aplicación típica es el control de maquinaria y procesos industriales. Ejemplos: Marte, QNX,


Un poco de historia:

Ken Thompson y Dennis Ritchie
Ken Thompson & Dennis Ritchie

Desarrolladores de C y Unix.

1965: Multics
Multics (Multiplexed Information and Computing Service) aportó muchas de las ideas presentes en Unix.
1970: Unix
Sistema operativo multiusuario, multitarea que ha contado con gran aceptación en la industria. Unix es a la vez: un sistema operativo, un tipo de sistemas operativos y una marca comercial.
1973: Se decide reescribir Unix en C
Anteriormente se utilizaba el lenguaje ensamblador para programar los sistemas operativos. Las ventajas de utilizar C son: portabilidad y facilidad de desarrollo.
1981: MS-DOS v1.0
Capaz de soportar 16KB de memoria RAM y discos flexibles de 5.25 pulgadas de 160KB.
1984: Apple Macintosh utiliza interfaz gráfica
Steve Jobs copia de Xerox la idea de utilizar una interfaz gráfica de usuario (GUI) en los ordenadores.
1991: Aparece el núcleo Linux y se completa GNU/Linux
El proyecto GNU necesitaba un kernel para completar su sistema operativo. Gracias al desarrollo de Linux a cargo de Linus Torvalds se pudo contar con un núcleo libre.
1992: Beta de Windows NT 3.1 (primera versión comercial)
Microsoft desarrolla un nuevo sistema operativo multiusuario, multitarea y estable dedicado a competir con los servidores Unix, se trata de Windows NT.
1995: Se lanza al mercado Windows 95 
Evolución del sistema operativo MS-DOS que reemplaza la cónsola y el entorno gráfico de las versiones anteriores (Windows 3.x)
2001: Aparece Mac OS X
Apple abandona su obsoleto sistema operativo para presentar un nuevo sistema operativo que forma parte de la família Unix.
 

Componentes de un Sistema Operativo

En un Sistema Operativo moderno se aprecian diferentes capas, del más alto nivel al más bajo encontramos:

Aplicaciones de usuario:
Colección de herramientas que utilizan los usuarios en sus quehaceres. (The Gimp, Firefox, Inkscape, Apache, GCC...)
Intérprete de comandos/Interfáz gráfica de usuario:
Permite la comunicación entre el sistema y el usuario. Existen distintas posibilidades, tanto de intérprete de comandos (Bash, csh, ksh, ...) como de interfáz gráfica (X Window, Gnome, KDE, ...)
Llamadas al sistema:
Se escriben bibliotecas con funciones de uso frecuente, de tal manera que otros componentes software las puedan utilizar sin tener que volverlas a implementar (funciones matemáticas, de acceso a ficheros, comunicaciones, procesado gráfico...).
Núcleo o kernel:
Controla el hardware y las operaciones básicas que realiza el sistema operativo. Típicamente se encarga de la gestión de procesos, la gestión de memoria y el control de todos los elementos hardware. Se dice que el software del núcleo se ejecuta en modo núcleo. Un fallo en este software arruina todo el sistema informático, por esto, cuanto menor sea la cantidad de código que se ejecuta en modo núcleo, menores serán las posibilidades de introducir bugs fatales. Se distingue entre núcleos monolíticos (los tradicionales) y los micro núcleos (más modernos, pretenden incluir en el núcleo sólo lo esencial).
HAL Hardware Abstraction Layer:
Se encarga de independizar los detalles de la arquitectura hardware para el resto de los componentes. Forma parte del núcleo, de manera que la migración a una nueva arquitectura no suponga reescribir todo el núcleo.

Esquema SO.png



Para saber más: