Cuando aparecieron los primeros ordenadores, la programación de estos era hecha íntegramente en código máquina, lo cual resultaba una tarea extremadamente pesada: cada vez que se escribía un nuevo programa, además de escribir el algoritmo adecuado era preciso añadir todo el código necesario para que el ordenador pudiese leer datos desde una cinta perforada, imprimir en un teletipo, etc. Dado que, en general, todas estas rutinas eran exactamente iguales para todos los programas que se hacían, pronto los programadores de aquellas máquinas aprendieron a organizarlas en bibliotecas de rutinas. Cada vez que había que escribir un nuevo programa, solo tenían que ir a su libreta y copiar las rutinas de Entrada/Salida que necesitaban, lo cual les simplificaba un poco el trabajo. Otro sistema era el que la propia empresa que fabricaba el ordenador incluyese un paquete de fichas perforadas con dichas rutinas, de modo que el programador solo tenía que coger las que le interesasen y añadirlas estratégicamente en su paquete.
El siguiente paso fue generalizar este conjunto de rutinas. La idea era incluir juntas todas las rutinas necesarias para acceder al hardware, y hacerlas accesibles a cualquier programador en forma de llamadas a subrutina. De este modo, cada vez que se hacía un programa no era preciso incluir en él todas esas rutinas. Había nacido el Sistema Operativo.
Los primeros 'Sistemas Operativos' (si es que podían recibir ese nombre) no eran más que un conjunto de subrutinas que ayudaban al programador, ofreciéndole servicios básicos como lectura de caracteres desde un teletipo, escritura en tambor, disco, etc.
Sin embargo, pronto se vio la necesidad de un nuevo enfoque. Los ordenadores eran caros, y su mantenimiento también, por lo que solo algunas grandes empresas y universidades podían disponer de ellos. Para amortizarlos, se alquilaba tiempo de proceso, de modo que se podía ir allí con un programa, ejecutarlo, y pagar por el tiempo que le llevase hacerlo al ordenador.
El primer problema que había era que se tardaba mucho en cargar cada programa. Cuando el ordenador terminaba de ejecutar uno, el operador tenía que insertar el siguiente, lo cual era una tarea bastante pesada y larga. Durante el tiempo que se hacía esto, el ordenador estaba totalmente inactivo, se estaba desperdiciando tiempo. Fue entonces cuando surgieron los sistemas de proceso por lotes (batch).
En los sistemas de proceso por lotes, los programas se almacenan en una cinta, todos seguidos. Cada vez que el ordenador terminaba de ejecutar un programa, leía el siguiente de dicha cinta. Si llegaba alguien con un programa, este se añadía a continuación del último que hubiese, mientras el ordenador iba ejecutando el que ya tenía en memoria. El coste de mantenimiento del nuevo sistema era ligeramente superior, pues había que añadir al sistema el lector de cintas en donde se escribían los programas; pero como podía ejecutar muchos más programas en el mismo tiempo (porque no se perdía parte de este en cargar los programas), el precio de alquiler bajó drásticamente, permitiendo que más gente tuviese acceso a los ordenadores.
Es en los sistemas de proceso por lotes donde empieza a aparecer realmente lo que hoy conocemos como Sistema Operativo: un programa principal que es el que va cargando los distintos programas desde la cinta, les cede el control de la CPU pero ofreciéndoles una serie de servicios de Entrada/Salida, y cuando terminan, recupera el control del ordenador.
Pronto los programadores se dieron cuenta de que había aún más tiempos muertos de los que parecía: si un ordenador tenía que leer algo de una cinta o una tarjeta con datos, como el sistema era mecánico tardaba mucho tiempo en encontrarlo (mucho tiempo de cara al ordenador, claro. Una décima de segundo es algo muy relativo). Así mismo, se empezaban a usar terminales para dar entrada de datos en tiempo real al ordenador, y el tiempo que éste esperaba a que el usuario pulsase cada tecla también era una eternidad. Entonces se empezó a pensar en los Sistemas Operativos multitarea.
La idea consistía en tener varios programas simultáneamente en memoria, si bien, como el ordenador es único, solo uno estaría activo en cada momento. Cuando dicho programa hace una operación de Entrada/Salida en la que se pierde tiempo de CPU (como leer una tarjeta, por ejemplo), mientras la mecánica realiza la operación de búsqueda y lectura, el ordenador conmuta al siguiente programa que tiene en memoria, el cual continuará ejecutándose hasta que haga una operación de Entrada/Salida. Cuando se llega al último, se vuelve a empezar. Para ese momento, la operación de Entrada/Salida pedida por el primer programa ya estará lista, con lo que podrá seguir su ejecución. De esta forma, hemos aprovechado un tiempo que antes perdíamos.
Finalmente, llegamos a los sistemas distribuidos. Generalmente, lo que tenemos es una red de ordenadores (por ejemplo, en una universidad es normal tener una gran cantidad de PC's) conectados entre sí. Si nos fijamos, normalmente solo unos cuantos están en uso en cada momento, y el resto simplemente se dedican a ejecutar un bonito salvapantallas, o peor aún, a realizar la estética función de caro pisapapeles. En otras palabras, estamos desperdiciando una vez más tiempo de proceso. Para solucionarlo, se han ideado los Sistemas Operativos distribuidos. Estos sistemas operativos son el siguiente paso en la evolución de los Sistemas Operativos multitarea.
La idea consiste en que en los Sistemas Operativos multitarea los programas suelen estar divididos en varios Threads o hilos de ejecución. Cada uno de estos Threads se puede ver como un programa absolutamente independiente de los demás, si bien, trabajando todos en conjunto forman el programa completo. Dado que cada Thread es independiente de los demás, nada impediría, en principio, que se ejecutase cada uno en un procesador diferente. Esa es la base de los Sistemas Operativos distribuidos: cada nuevo Thread es ejecutado en una máquina distinta, de modo que la potencia de cálculo se halla distribuida por toda la red. De esta forma, los equipos que estaban inactivos son aprovechados al máximo. Por desgracia, esta idea resulta extremadamente compleja de implementar, por lo que esta clase de Sistemas Operativos se encuentran todavía poco extendidos.
No hay comentarios:
Publicar un comentario