Grado en Ingeniería Informática (IB) - Historia de la Informática - PDF
Document Details
Uploaded by GenialNeon2153
Universidad de Burgos
Jesus M. Maudes Raedo, Carlos Pardo Aguilar
Tags
Summary
Este documento resume la historia de la informática, desde los sistemas antiguos de cálculo hasta las primeras máquinas de cálculo mecánicas y electromecánicas. También se discuten las bases lógicas y las máquinas de cálculo y tabulación desarrolladas a lo largo de la historia. Está enfocado en la historia de la informática.
Full Transcript
Grado en Ingeniería Informática INFORMÁTICA BÁSICA Tema 5. Historia de la Informática Docentes: Versión 2 010 Jesus M. Maudes Raedo Revisado 2 014 Carlos Pardo Aguilar Antecedentes de la Informática y Generaciones de Computadoras Antecedentes de la Informática Dado q...
Grado en Ingeniería Informática INFORMÁTICA BÁSICA Tema 5. Historia de la Informática Docentes: Versión 2 010 Jesus M. Maudes Raedo Revisado 2 014 Carlos Pardo Aguilar Antecedentes de la Informática y Generaciones de Computadoras Antecedentes de la Informática Dado que un aspecto importante de la informática es la automatización de cálculos, es habitual que en cualquier texto que hable de los antecedentes de la informática sitúe estos en los sistemas de cálculo y nu- meración existentes en la antigüedad. Cabe destacar entre ellos, el uso de piedras o calculus para contar, el ábaco para hacer operaciones y la numeración romana y la arábiga que es la que su utiliza en nuestros días. También dentro de estos antecedentes suele incluirse las técnicas de razonamiento que más tarde sirvieron a la programación, como es el caso de las bases de la lógica sentadas por los griegos en el siglo IV AC. El concepto de algoritmo se atribuye al matemático árabe Al-Khowarizimi (825 DC), quien al parecer los utilizaba para describir operaciones aritméticas. Las matemáticas fueron avanzando lentamente, y es John Napier (1560-1617), quien a la postre también fue inventor de los logaritmos, el que crea una primera máquina de cálculo conocida como las Varillas de Napier que permite realizar más deprisa multiplicaciones y divisiones. Más tarde, entre 1620 y 1630 aparecen las reglas de cálculo en Inglaterra, que se basan en el uso de loga - ritmos para realizar operaciones, transformando las multiplicaciones en sumas de longitudes de segmen- tos, y las divisiones en restas de longitudes de segmentos. Lo curioso de las reglas de cálculo es que si- guieron siendo de uso común para cálculos ingenieriles y científicos hasta mediados del siglo XX, cuando empezaron a ser sustituidas por las calculadoras de bolsillo. En 1642 aparece la máquina de Pascal, capaz de hacer sumas y restas haciendo girar las ruedas de un me- canismo con engranajes. Había una rueda para las unidades, otra para las decenas, otra para las centenas, etc... Cuando una rueda giraba en un sentido se sumaba una unidad, decena, etc.. dependiendo de la rueda que fuese, y los acarreos de la suma pasaban de una rueda a la siguiente a través de los engranajes al su- frir una rotación completa y volver al 0. La máquina de Pascal también era capaz de hacer restas, pero el mecanismo era más complicado. En 1671 Leibniz perfecciona la máquina de Pascal de forma que es ca- paz de hacer multiplicaciones y divisiones. En 1790 el francés Jaquard inventa las tarjetas perforadas, que más tarde sería el mecanismo por el que se introducirían datos e instrucciones en los primeros ordenadores. Las tarjetas de Jaquard en realidad tan solo perseguían automatizar los telares para que tejieran ellos solos determinados patrones que venían es- pecificados vía las perforaciones de la tarjeta. En 1800 Jacquard cristaliza su idea en una máquina. Por tanto, cabe pensar que aquellas tarjetas perforadas contenían los primeros programas de la historia, los cuales tenía por fin tejer. Georges Boole (1815-1869), desarrolla un poco más tarde el álgebra de Boole. Es un álgebra para la lógi- ca, en su momento sin transcendencia, pero actualmente sirve para el diseño de circuitos lógicos de las computadoras, pero su aplicación se extiende a la programación, bases de datos, inteligencia artificial... Entre 1822 y 1833 Charles Babagge desarrolla la Máquina de Diferencias, que es una máquina de vapor capaz de calcular tablas numéricas. No era una máquina programable. Una serie de problemas mecánicos hacen que Babagge abandone la idea y pase a diseñar la Máquina Analítica, la cual sí que es programable a través de tarjetas perforadas, y permite el cálculo de funciones analíticas en general. La máquina se con- sidera el primer precursor del ordenador moderno, en cuanto ya puede distinguirse en ella un procesador aritmético a modo de ALU, una unidad de control, memoria, y un dispositivo de salida a modo de rudi- mentaria impresora. El proyecto es abandonado por problemas de financiación, pero aún no construyén- dose existen programas para dicha máquina. Ada Byron realizó algunos de estos programas, por lo que se la considera la primera programadora de la historia. En 1896 aparece la Máquina Tabuladora de Hollerith, que tenía como propósito elaborar el censo de los Estados Unidos. El sistema utiliza tarjetas perforadas en los que los agujeros representan datos de la po- blación (sexo, edad, raza, …). El sistema es capaz de ordenar 60 tarjetas por minuto utilizando un sistema eléctrico basado en unas varillas que hacen contacto cuando no hay agujero, y si que lo hacen cuando no lo hay. Utiliza ya la lógica booleana. El éxito es total, pues una tarea que sin máquina se pensaba iba a durar 12 años, queda reducida a 3 años. Por ello, Hollerith se anima a crear una empresa que construiría este tipo de máquinas y que tras un par de cambios de nombre y de socios vendría a ser la actual IBM en 1924. En 1936 aparecen las máquinas de Turing como modelo teórico que permite ver lo que es o no es compu- table. Alan Turing, establece la relación entre la lógica y la computación electrónica. La Máquina de Tu- ring se considera la base de la Teoría de la Computación actual, y a su vez, Turing considerado el padre de la Teoría de la Computación. En 1943 Howard Aiken de la Universidad de Harvard construye el computador MARK I, que es un calcu- lador automático de uso general, si bien cada vez que se quería que cambiara de tarea había que reprogra - marlo, recablendo parte del sistema. MARK I es un coloso (15,5 mts x 2,40 mts x 60 cms, 5 Toneladas, 800 Kms de cables y 3 millones de co- nexiones). Aunque es de propósito general se utiliza fundamentalmente para computar tablas de balística. Era capaz de realizar sumas y restas de 23 dígitos e 3 décimas de segundo, multiplicaciones en 6 segun- dos y divisiones en 12 segundos. Utilizaba como entrada de datos una cinta de papel perforado, y la salida venía dada vía máquinas de escribir eléctricas y tarjetas perforadas. La tecnología que utiliza no es toda- vía electrónica, pues está basado en relés1. Las máquinas de Turing Motivación David Hilbert en 1928 formuló el “Entscheidungsproblem” o problema de decisión. Este problema plan- teaba la cuestión de si existiría algún procedimiento mecánico general que permitiera demostrar de forma automática si una proposición matemática es cierta (y por tanto un teorema) o no lo es. En definitiva el problema plantea si es posible encontrar un algoritmo genérico que sirva para demostrar cualquier teore- ma. En 1931 Gödel a través del Teorema de Incompletitud prueba que no sólo no existe un algoritmo que pue- da demostrar todos los teoremas en matemáticas, sino que además no todos los resultados son demostra- bles; y es en este contexto, cuando en 1936 Alan Turing plantea su máquina, que no es una máquina como tal, sino un modelo computacional. En su origen, las máquinas de Turing servirían para conocer si hay un método definido que pueda aplicarse a cualquier sentencia matemática y que nos diga si esa sentencia ma- temática es cierta o no. Turing construyó un modelo formal de computador, la máquina de Turing, y demostró que existían pro- blemas que una máquina no podía resolver. ¿En qué consiste una máquina de Turing? La máquina de Turing es un modelo matemático abstracto que formaliza el concepto de algoritmo. Como se verá más adelante, una característica de la máquina de Turing es que podría computar cualquier cosa que pudiera ser computable por un ordenador presente o futuro. Esta formado por: 1. Una cinta de tamaño infinito que hace el papel de la memoria en los computadores reales 1 Un relé es un conmutador que tiene 2 estados. El relé consiste en un contacto mecánico que puede abrir o cerrar un circuito aplicando una pequeña corriente a un electroimán que atrae o repele una lengüeta de contacto. 2. Un dispositivo de E/S, llamémosle cabeza lectora, que es capaz de escribir y leer un sím- bolo de esa cinta La máquina puede cambiar de un estado a otro de entre un conjunto finito de estados definidos por el pro- gramador. En función del estado actual y del símbolo que acaba de leer de la cinta, la máquina hace 3 cosas: 1. Pasa a un nuevo estado 2. Escribe otro símbolo en la cinta 3. Mueve la cinta para dejar listo para leer el siguiente símbolo de la misma. Hay 3 posibles movimientos: 1. Izquierda (I) 2. Derecha (D) 3. Parada (P) (o también H de Halt) El programa que implementa una determinada función vendría dado por una tabla de 5 columnas, o tabla de acción, que va marcando cuál es el símbolo a escribir, el movimiento de la cabeza lectora, y el nuevo estado que se alcanza, en función del estado actual y el símbolo leído. Por ejemplo, el siguiente programa serviría para incrementar un número binario: Estado actual Símbolo leído Símbolo a escribir Movimiento Nuevo estado 0 # 1 D 1 0 0 1 D 1 0 1 0 I 0 1 # # I P 1 0 0 D 1 1 1 1 D 1 Vemos que esta máquina tiene dos estados 0 y 1, y que procesa 3 símbolos, el cero el uno y el #, que sim - boliza que lo que leemos está en blanco. Supongamos que en la cinta tuviéramos el número binario 1011, que la cabeza lectora estuviera posicio- nada en el último 1 de la derecha y que el estado de partida es 0. Cabeza Estado=0 Lectora 1 0 1 1 Esta sería la traza del programa: 1. Como estado actual = 0 y estoy leyendo un 1, aplico la fila de la tabla Estado actual Símbolo leído Símbolo a escribir Movimiento Nuevo estado 0 1 0 I 0 Cabeza Estado=0 Lectora 1 0 1 0 2. Vuelvo a aplicar la misma regla que antes pues también leo un 1 estando en el estado 0 Cabeza Estado=0 Lectora 1 0 0 0 3. Ahora leo un 0 estando en estado 1, así que aplico: Estado actual Símbolo leído Símbolo a escribir Movimiento Nuevo estado 0 0 1 D 1 Cabeza Estado=1 Lectora 1 1 0 0 4. Ahora leo un 0 estando en estado 1, por lo que aplico Estado actual Símbolo leído Símbolo a escribir Movimiento Nuevo estado 1 0 0 D 1 Cabeza Estado=1 Lectora 1 1 0 0 5. Esta paso es otra vez el mismo que el anterior Cabeza Estado=1 Lectora 1 1 0 0 6. Ahora estando en estado 1, leemos un blanco (representado por # en la tabla), así que apli- camos: Estado actual Símbolo leído Símbolo a escribir Movimiento Nuevo estado 1 # # I P Es decir, no escribiríamos nada (#) volveríamos a la izquierda, y pararíamos (P) Cabeza Estado=1 Lectora 1 1 0 0 Vemos que el número resultante1100 efectivamente es el que se obtiene de incrementar 1011, y podría- mos probar con cualquier número binario, y funcionaría. Cada problema requeriría definir unos estados apropiados y un alfabeto de símbolos, junto con la corres- pondiente tabla de acción. Cualquier programa podría programarse así en esta máquina, su programación claramente sería sumamen- te engorrosa, y los tiempos de ejecución serían prohibitivos debido a que dependemos de lo lento que es el movimiento de la cinta frente a lo veloces que son los ordenadores actuales. Pero estos inconvenientes, son eclipsados por una ventaja, y es que al constituir una forma tan sencilla de definir un computador, permite analizar y demostrar matemáticamente los límites de lo que es computable, y de lo que no lo es. Máquina de Turing: Es una 7-tupla (,,b,Q,q0,F, f), donde: es el alfabeto de elementos llamados: símbolos o caracteres de pila. es un alfabeto de símbolos de entrada (-{b}). b símbolo especial de (b y b). Es el blanco de la cinta. Q es un alfabeto de estados. q0 es un elemento de Q , es decir, q0 Q. F es un subconjunto de Q de estados finales o de aceptación (F Q ). f (la tabla de acción) es una función de la forma: Q x Q x x {I, D, P} Ilustración 1: Definición formal de una máquina de Turing. Máquina Universal de Turing (UTM) El problema de una máquina de Turing como la anterior es que no es de propósito general, pues sólo vale para incrementar números binarios; sin embargo un computador moderno es capaz de realizar múltiples tareas, y por tanto ser de propósito general. Una Maquina de Turing Universal sería la que sí es de propósito general, en tanto sí que es capaz de si - mular cualquier otra máquina de Turing arbitraria. Para ello, la tabla de acción debe de estar codificada en la propia cinta infinita, y la máquina, a su vez debe de tener otra tabla de acción capaz interpretarlo. Por tanto, en una UTM, la cinta tendría codificada la tabla de acción en forma de varias cadenas de sím- bolos delimitadas por algún otro símbolo separador, más los datos correspondientes a la entrada del pro- grama, y cuando finalizase la ejecución la cinta tendría además el resultado. Esta máquina es descrita con detalle por Turing en 1936. Consecuencias de las Máquinas de Turing En una UTM el programa (que es la tabla de acciones) se almacena de la misma forma que los datos, am- bos en la cinta. Por tanto, estamos ante la misma idea que Von Neumann más tarde desarrollaría en su ar- quitectura; esto es: el programa y los datos residen ambos en memoria. La otra consecuencia importante es la tesis2 de Church – Turing, enunciada en 1936 por Alonzo Church junto a Turing, y que dice que “todo algoritmo es computable por una máquina de Turing”. Por tanto, para saber si algo es computable basta con demostrar que es computable por una máquina de Turing. Esta afirmación tiene otras derivaciones que lindan con la filosofía. Por ejemplo: “No existen funciones que puedan ser definidas por personas, y cuyo cálculo sea descrito por algún algoritmo, que no puedan computarse con una máquina de Turing”. Es decir, que hay un límite en el tipo de cosas que puede com- putar una máquina, pero ese límite es el mismo que tienen las personas. Un ejemplo de utilización de las Máquinas de Turing para demostrar si algo es computable es la resolu - ción del denominado Problema de Parada, que simplificando mucho lo que pretende es conocer si existi- ría un programa capaz de predecir si otro programa finalizaría. Este problema es muy útil, pues si los compiladores supiesen resolverlo podrían darnos un mensaje de error cuando por ejemplo programáramos accidentalmente un bucle infinito. Mediante Máquinas de Turing es posible demostrar que tal programa no puede existir. Generaciones de Computadores Se distinguen cuatro generaciones: 1. Primera generación 1946-1954 2. Segunda generación 1955-1963 3. Tercera generación 1964-1970 4. Cuarta generación 1971 hasta nuestros días La Primera Generación (1946-1954) En la primera generación se sustituyen los relés por tubos de vacío, también conocidas como válvulas de vacío, que ofrecen mayor rapidez y fiabilidad al prescindir de elementos mecánicos. Un tubo de vacío tiene el aspecto de una bombilla. Tiene en su interior un filamento que se calienta por resistividad que es el cátodo, y una placa que es el ánodo, a donde en principio irían a parar los electrones que se liberan del cátodo. Entre el ánodo y el cátodo hay una rejilla. Cuando pasa corriente por la rejilla 2 Esta afirmación es una tesis, en tanto existen evidencias de que seguramente sea cierta, y no hay nada que de momento la contradiga, pero no ha sido demostrada de forma rigurosa. intermedia, dependiendo de su intensidad puede aumentar o atenuar la corriente entre cátodo y ánodo. Por tanto, puede utilizarse como un conmutador que deje pasar o no la corriente, que es precisamente lo que requiere un sistema informático: un componente que pueda representar dos estados. Los problemas de las válvulas de vacío, es que tampoco son muy rápidas, pues (i) el filamento necesita un cierto tiempo para calentarse, (ii) se funden con frecuencia y (iii) son caras. En esta primera generación ya hay dispositivos de memoria externa: cintas magnéticas y tambores mag- néticos. Estos últimos son los precursores de los discos duros. Una diferencia con los discos duros es que la información se registra en los laterales de un cilindro. Los tambores, son muy voluminosos y consumen mucha energía. Otras características de los ordenadores de esta generación son: 1. El ciclo de reloj es del orden de milisegundos (kHz) 2. Soporta aritmética de punto fijo 3. En el mejor de los casos se programaba directamente en código máquina, aunque a finales de los 50 aparece el primer lenguaje ensamblador. En cuanto a los sistemas operativos, no hay sistema operativo; por lo que había que introducir ma- nualmente en cada momento el programa a ejecutar. Cada máquina lleva asociado un equipo de personas que diseña, construye opera y da mantenimiento al sistema. Si hay averías, son los operadores quienes tienen que detectar los problemas, arreglarlos, y rei- niciar el sistema, lo cual no era ni mucho menos anormal. Por ejemplo, la frecuencia de rotura media en el ENIAC era de alrededor de 1 hora (la vida media de un tubo eran 3000 horas y cada vez que se rompía uno había que buscar cuál de los 1800; además normalmente se repe- tían los cálculos para ver si daban lo mismo … ). Mejoran el proceso de entrada por medio de tarjetas perforadas mediante algunas rutinas (pro- gramas) que lo controla. El tener unos programas que liberan al usuario de la gestión de la E/S del momento, puede considerarse un primer germen de la idea de sistema operativo. Al ser la programación directamente en lenguaje máquina, los programadores gestionan los re- cursos directamente, en lugar del sistema operativo. Sólo soportaba un usuario (monousurio y monotarea). Sólo se ejecuta un proceso simultá- neamente (monoproceso) y el control de cuál toca en cada momento se lleva manualmente, a través de una hoja de papel y de los operadores. Las máquinas más representativas de esta generación son: 1. ENIAC (1946 Ecker y Mauchly), que similar al MARK I se utilizaba para calcular tablas balísti- cas. Se seguía programando mediante conexiones en un panel, seguía teniendo aritmética decimal (no binaria). También era de grandes dimensiones (30 Tn, 140 m2, 18 válvulas). El avance respec- to a MARK I es el uso de válvulas en vez de relés. 2. EDVAC (1950 Von Neumann), que surge como continuación del proyecto anterior, pero ya con arquitectura Von Neumann, y por tanto con programa almacenado en memoria, junto a los datos (ya no hay que recablear para cambiar el programa). Otro avance es que utiliza aritmética bina- ria. 3. Otras máquinas son el UNIVAC I y el IBM 704. De todas estas máquinas se construyen muy pocos ejemplares, al alcance de algunos gobiernos (para cen- sos, ejército, … ), universidades de élite y grandes multinacionales. La Segunda Generación (1955-1963) El principal avance es la sustitución de las válvulas de vacío por los transistores, los cuales son más pe- queños , fiables, duraderos y baratos que las válvulas. La tecnología utilizada para las memorias son las denominadas memorias de ferrita, en el que cada cero o uno se almacenaba en un pequeño toro de ferrita imantado con una u otra polaridad. En cuanto a memoria externa aparecen los primeros discos magnéticos, más ligeros y con más capacidad que los tambores. Además son apilables, de forma que un dispositivo de almacenamiento podía estar for- mado por varios discos. Otras características de los ordenadores de esta generación son: 1. Ciclo de reloj en microsegundos (MHz) 2. Ya hay aritmética exponencial (para punto flotante) 3. Ya hay procesadores de E/S 4. Aparecen los primeros lenguajes de programación de alto nivel (FORTRAN, ALGOL, LISP, COBOL), que son más fáciles de usar que el código máquina y los ensambladores, y permiten ha- cer programas más portables. En cuanto a los sistemas operativos: Los ordenadores venían con un programa especial llamado programa monitor, que podía consi- derarse una especie de sistema operativo muy primitivo. El monitor venía motivado por la apari- ción del modo de trabajo en batch o por lotes que todavía se utiliza en nuestros días. En el modo por lotes el operador ordena al computador la ejecución de varios trabajos, uno detrás de otro con una sola orden. Esto representa un avance, porque en la generación anterior había que pedir manualmente la ejecución del siguiente programa cuando se veía que había finalizado el an- terior. Esto podía ocurrir después de varios días, a media noche, en fin de semana, etc … perdién- dose tiempo de cómputo. El programa monitor era el que permitía este modo de trabajo por lotes. El programa monitor, como el sistema operativo, siempre estaba en memoria (i.e. era residente). Inicialmente tenía el control de la CPU, tomaba el primer trabajo delo lote, lo cargaba en memoria, le daba el control de la CPU, se ejecutaba, y cuando acaba de ejecutarse devolvía el control al monitor para que pudiera ejecutarse el siguiente trabajo del lotes, y así sucesivamente. El monitor también se encargaba de las operaciones de E/S. Ilustración 2: El trabajo en batch en los primeros tiempos (Ilustración extraída del libro Modern Operative systems de A. Tanenbaum). (a) El programador llevaba las tarjetas perforadas a un IBM 1401 (b) El 1401 lee las tarjetas de todos los programadores y genera una cinta magnética con los trabajos batch, (c) el operador lleva la cinta con los trabajos batch a una máquina potente para cálculo, una IBM 7094 en la figura. (d) la 7094 genera otra cinta magnética con los resultados, (e) el operador lleva la cinta de resultados a otro IBM 1401 que se encarga de pasar los resultados a impresora para ser distribuidos a los programadores. En la ilustración se muestra uno de estos sistemas por lotes. Normalmente se utilizaban 2 compu- tadoras de menor coste (los IBM 1401 en la figura) para realizar la lectura de las tarjetas perfora- das, y la impresión, y así no malgastar el tiempo de CPU de la máquina – carísima – de cálculo en estas tareas menores. En esta época ya hay más variedad de máquinas y fabricantes: diversos modelos de IBM, UNIVAC y PDP. La Tercera Generación (1964-1970) La principal innovación es la aparición de los circuitos integrados (CI), consistentes en una pastilla de material semiconductor que contienen circuitos electrónicos grabados a través de una técnica de impre- sión (fotolitografía). La pastilla aparece encapsulada en cerámica. Es lo que vulgarmente se conoce por un chip. Esta tecnología es más fiable, consumen menos y da lugar a componentes más pequeños que los de la ge- neración anterior. Precisamente, por ello, los componentes están más cercanos, y se reducen retardos, au- mentando la velocidad del sistema. Además es una tecnología más barata pues permite una fabricación en seria más automatizada, reducien- do el trabajo manual de interconexión de componentes. Todo ello, abrirá la informática a compañías con menos poder económico, empezando a popularizarla. La tecnología de los circuitos integrados irá evolucionando, de manera que será capaz de concentrar ma- yor número de transistores en menos espacio. Así: En 1961 aparece la tecnología SSI (Small Scale Integration) que integra en un mismo CI de 4 a 100 transistores, lo que permite implementar elementos muy básicos (biestables que permiten al- macenar un 1 o un 0, puertas lógicas para hacer operaciones booleanas, … ) En 1966 aparece la tecnología MSI (Medium Scale Integration) que integra en un mismo CI de 100 a 1000 transistores, lo que permite implementar circuitos aritméticos, registros, … Esta tendencia se mostrará imparable hasta nuestros días. La Ley de Moore (cofundandor de Intel) esta- blece que cada dos años se dobla el número de transistores en un CI a la par que los precios se reducen a la mitad. Otras características de los ordenadores de esta generación son: 1. Las memorias de ferrita serán desplazadas por las construidas mediante CIs. 2. Los ciclos de reloj alcanzan los nanosegundos (GHz) 3. Aparecen unidades de control más flexibles, de forma que el juego de instrucciones de la unidad de control podría cambiarse a través de unos programas de muy bajo nivel (unidades de control microprogramadas) 4. Aparecen las memorias caché y los controladores DMA 5. Aparecen también las unidades de control con pipeline. La idea es que la unidad de control fun- cione como una línea de montaje de una fábrica, donde no se está fabricando por ejemplo un sólo coche al mismo tiempo, sino que mientras en una sección de la cadena de montaje están quizás pintando un coche, en la otra le acoplan el motor etc, de forma que en la cadena se están fabrican- do de facto, tantos vehículos a la vez como secciones tiene la cadena. De la misma manera, la eje- cución de una instrucción en código máquina podría dividirse en n etapas, de forma que de facto, fuese como si se ejecutarán n instrucciones a la vez. Por ejemplo, en un mismo instante la unidad de control podría estar leyendo de memoria una instrucción I5, decodificando la instrucción I4 an- terior a I5, ejecutando en la ALU la instrucción I3 anterior a I4, obteniendo el resultado de la ins- trucción I2 anterior a I3, y escribiendo en memoria el resultado de la instrucción I1, que a su vez es la anterior a I2; con lo que la unidad de control está trabajando 5 veces más rápido. 6. Aparecen los primeros disquetes. 7. Aparecen nuevos lenguajes de programación: BASIC, PL I, Pascal En cuanto a los sistemas operativos, hay fabricantes como IBM con la serie 360, que crea varios modelos cuyo software ha de ser compatible. Esto hace que el sistema operativo de estas máquinas sea grande para poder soportar las distintas configuraciones. Estos primeros sistemas operativos son propietarios de cada fabricante. Las memorias de ferrita tienen mayor capacidad a menos precio que sus antecesoras, esto permite guardar una fotografía en memoria del estado de la CPU a mitad de la ejecución de un programa, con esa instanta- nea el programa podría reaunudarse más tarde en el mismo punto, lo que va a abrir la puerta a la multipro- gramación y después al tiempo compartido. Los grandes procesos de cálculo para los que inicialmente se utilizaban los computadores tenían poca car- ga de E/S, pero a medida que se fueron utilizando para usos comerciales, esa situación se invirtió. Si se producía una operación de E/S la CPU quedaba ociosa a la espera de que terminase. Para resolver este problema aparece la multiprogramación en los sistemas operativos. Esta técnica divi- de la memoria en varias particiones, una para el sistema operativo y otras n particiones para n procesos susceptibles de entrar en la CPU cuando esté desocupada por una operación de E/S, de manera que puede haber varios programas en ejecución, aunque sólo uno esté en cada instante realmente ejecutándose. Si en un momento se produce una operación de E/S (lenta) el proceso actual queda en espera hasta que acabase dicha operación, lo que permite que otro proceso entre en ese momento a ejecutarse mientras se produce esa espera para que la CPU no quede ociosa. Cuando acaba la operación de E/S el primer proceso puede reaunudarse en el mismo punto. Otro problema a resolver respecto a la generación anterior es el tener una máquina dedicada a la lectura de tarjetas, otra a impresión, y el correspondiente trasiego de cintas magnéticas entre estas máquinas y la máquina principal. Para solucionarlo aparece el SPOOLING (Simultaneus Peripheral Operations On-Li- ne). Mediante esta técnica las tarjetas perforadas con un determinado programa a ejecutar eran leídas y pasaban al disco formando parte de una cola. Tan pronto una tarea terminaba liberaba su partición de me- moria y cargaba en una nueva partición de memoria la siguiente tarea de la cola en disco. De igual forma, los trabajos de impresión se podían mandar a disco formando una cola y a medida que la impresora fura acabando uno iba recogiendo el siguiente de la cola. Toda esta gestión de colas, E/S y disco corre a cargo del sistema operativo. Asimismo, algunos usuarios, típicamente los programadores, pierden mucho tiempo trabajando en batch. Cada vez que cometen un error de programación, no tienen la más mínima respuesta hasta el día siguien- te, por lo que necesitan un uso interactivo de la máquina desde un terminal. Por otro lado, el 90% del tiempo los programadores, piensan, hablan, toman café, … es decir no usan la CPU de la máquina. Por ello, los sistemas operativos también empiezan a proveer la capacidad de realizar ejecuciones en Tiempo Compartido, que es una variante de multiprogramación. En este modo de procesamiento los pro- cesos se ceden la CPU entre ellos, no sólo por esperas en la E/S, sino también de forma voluntaria ofre- ciéndo el control de la CPU a otros procesos (cooperative multitasking3). Con ello, se pretendía que a un mismo computador se conectaran mediante terminales un gran número de usuarios, los cuales tienen la sensación virtual de ser los únicos que manejan el computador en ese momento. El modelo batch optimizaba el tiempo de CPU porque no había lugar a tiempos muertos de CPU que se derivaran de las interacciones de los usuarios que gran parte del tiempo están parados. El tiempo compar- tido lo que hace es que al haber trabajando un gran número de usuarios, la CPU normalmente no queda desocupada aún trabajando en modo interactivo. Además el tiempo compartido permite que convivan pro- cesos interactivos con procesos batch, que podrían correr con menos prioridad rellenando los huecos en los que la CPU este libre. 3 El tiempo compartido mediante cooperative multitasking es el que que había entonces, posterirmente aparecieron otras técnicas de multipragramación más avanzadas. Resumiendo: aparecen los primeros sistemas operativos, con multiprogramación (un proceso puede ocupar la CPU mientras otro queda a la espera de una operación de E/S), multiproceso (permiten ejecutar varias tareas simultáneamente) y memoria virtual (permiten dar la sensación de que hay más RAM de la que realmente hay, utilizando para ello una parte del disco). Las máquinas más representativas de esta generación son: Las series 360 y 370 de IBM, con instrucciones máquina compatible Cray CIBER, considerado el primer supercomputador, con instrucciones máquina que admiten paralelismo La serie PDP de DEC, considerados microcomputadores por tener menos prestaciones, pero que debido a su relativo bajo precio, permite ventas de decenas de miles de unidades. Cuarta Generación (1971 - … ) La cuarta generación continúa aumentando la integración, miniturización y abaratameinto anunciados por la ley de Moore. Así aparecen dos tecnologías: LSI (Large Scale of Integration) que consigue entre 1.000 y 10.000 transistores/CI VLSI (Very Large Scale of Integration) que consigue más de 20.000 transistores/CI, y en la actua- lidad del orden de cientos de millones de transistores en cada circuito. Esto permite integrar en un sólo CI el microprocesador (UC+ALU). Los microprocesadores evolucionan aumentando la longitud de palabra, que pasa de 8 a 64 bits en la actualidad, y las frecuencias de reloj su- peran la barrera de los gigahercios. Otro elemento que aparece en forma de CI, son las RAMs dinámicas o DRAM, que es una tecnología que permite que un CI de memoria pueda tener más capacidad con menos transistores. Así en la actuali - dad tenemos CIs con varios Gigabytes de capacidad. Otros circuitos que aparecen o se abaratan son los controladores DMA, controladores de E/S, coprocesa- dores matemáticos (ALU adicional que va en un CI distinto del microprocesador, y que se usa para opera- ciones de coma flotante) Como consecuencia de este abaratamiento, los computadores pasan a extenderse a todos los ámbitos. Hasta esta generación, los sistemas operativos, los componetes electrónicos, los periféricos, etc. eran pro- pios de cada fabricante, pero surgen los sistemas abiertos de forma que el usuario puede configurar su hardware y software juntando elementos de distintos fabricantes. Para que esos elementos sean compati- bles se hace necesario que los fabricantes se pongan de acuerdo, motivo por el que nacen multitud de es- tándares. Aunque en la segunda generación ya aparecen los discos magnético, no tenían que ver mucho con los dis- cos duros actuales. En 1973 IBM comienza a distribuir discos duros de 30 Mb con tecnología Winchester. Luego vendrán más avances: discos SCSI, discos IDE, discos magneto-ópticos, discos redundantes o RAID. La informática doméstica nace de la mano de los PCs con el Apple II en 1977, y con el IBM PC en 1981. Eran de bajo coste y monousario. También aparecen las estaciones de trabajo (HP Apollo, DEC Alpha, Sun, … ) combinado el bajo coste con capacidad gráfica y de cómputo, y se desarrolla la telemática, apa- reciendo las redes locales e internet. En cuanto a las grandes máquinas evolucionan las arquitecturas que favorecen el paralelismo: máquinas RISC que reducen los accesos a memoria aumentando el número de registros, computadores vectoriales capaces de hacer operaciones simultáneamente sobre múltiples datos. Estos supercomputadores tienen muchas veces cientos de CPUs trabajando en paralelo y alcanzan velocidades del orden de Tera-FLOPs. A nivel de sistemas operativos Surgen sistemas operativos que ya no dependen directamente del fabricante del hardware y que son los que perviven en versiones más avanzadas actualmente (UNIX en 1974, MS-DOS en 1981, OS-2 en 1988, Win-NT en 1993, Linux en 1991). Algunos de ellos orientados a la informática personal, como MS-DOS, dan lugar a un cierto retro- ceso en cuanto son sistemas operativos monousuario y monotarea. Otros avanzan en la usabilidad de la interfaz, pues nacen las interfaces gráficas. Los sistemas operativos comienzan a dar soporte a las comunicaciones con la llegada primero de las redes locales, y luego de internet. Cada vez se hace más común el procesamiento paralelo. De hecho en la actualidad es común en- contrar procesadores de 2 y 4 núcleos. Los sistemas operativos modernos son capaces de sacar partido de esta mejora del hardware, asignando uno de los procesadores en cada momento a al- guno de los programas en ejecución. En la misma línea los sistemas operativos modernos permiten crear clusters de ordenadores y ges- tionar de forma eficiente sus procesadores. En cuanto a lenguajes de programación, en 1972 nace el lenguaje C, y aparecen nuevos paradigmas de programación: la programación lógica de la mano del lenguaje PROLOG, la programación Orientada a Objetos de la mano de Small Talk, Ada, C++, Java, C#, …