1. Historia del software en computación aplicado a la informática educativa. 85
3.6.2. Segunda era (1955-
1965).[32][37][35][7][19][38][36][44][12][11]
La multiprogramación y los sistemas multiusuario introdujeron nuevos
conceptos de interacción hombre - máquina. Las técnicas interactivas abrieron un
nuevo mundo de aplicaciones y nuevos niveles de sofisticación del hardware y del
software. Los sistemas de tiempo real podían recoger, analizar y transformar datos de
múltiples fuentes, controlando así los procesos y produciendo salidas en milisegundos,
en lugar de minutos. Los avances en los dispositivos de almacenamiento en línea
condujeron a la primera generación de sistemas de gestión de bases de datos.
La introducción del transistor, a mediados de la década de 1950, alteró el panorama
radicalmente. Los computadores se hicieron lo bastante fiables como para poderse
fabricar, y vender a clientes comerciales, con la expectativa de que seguirían
funcionando el tiempo suficiente para realizar algo de trabajo útil. Por primera vez,
había una separación clara entre diseñadores, constructores, operadores,
programadores y personal de mantenimiento.
Sistemas Operativos.
En la primera Era del software un trabajo o programa se procesaba de manera
independiente a otro. En esta generación el tipo de operaciones era similar a la
anterior, pues cuando un programa finalizaba, se detenía la máquina, y se debía
preparar manualmente para la traducción, o carga y ejecución del siguiente. Para que
el computador procesara un trabajo y a la vez preparara y grabara nuevos trabajos, se
mejoró el hardware de los sistemas de entrada/salida. Normalmente los grababa en
una computador periférico pequeño, después en una cinta magnética los iban
colocando uno detrás de otro, como si fuera una cola de trabajos en la cinta, más
conocido como procesamiento batch. El programador escribía primero el programa en
papel, en esta Era podía utilizar el lenguaje FORTRAN o el ensamblador, y luego lo
perforaba en tarjetas.
Una vez que la cinta contenía una cola de trabajos, se ubicaba en una unidad de
entrada del computador central, y ésta, por medio de un programa supervisor o
monitor, que residía permanentemente en memoria, iba cargando programa tras
programa tan pronto como los pudiese ejecutar. A grandes rasgos, podríamos decir
que esto fue el nacimiento de los sistemas operativos.
Como se ha señalado en la primera Era, se perdía mucho tiempo sin sistema
operativo, por lo que los programadores de la época intentaron buscar una solución ya
que todo el proceso costaba mucho dinero. La solución que se adoptó generalmente,
fue el sistema operativo por lotes. Para que el procesamiento fuese más rápido, los
programas con necesidades similares se agrupaban en lotes y se introducían en el
Daniel Merchán López. 2013
2. 86 Historia del software en computación aplicado a la informática educativa.
computador como un grupo. Los programadores dejaban sus programas con el
operador; éste acomodaba los programas para formar lotes con necesidades similares
y, cuando el computador quedaba disponible, ejecutaba cada lote. La salida de cada
trabajo se devolvía al programador apropiado. Cuando el operador ya había hecho el
lote de tareas, se llevaba la cinta a la máquina que realizaba el procesamiento, esta
máquina era muy cara pero disponía de una alta capacidad de procesamiento para
esos tiempos. Después el operador cargaba un programa especial que leía la primera
tarea de la cinta y la ejecutaba, escribiéndose la salida en una segunda cinta. Cuando
finalizaba cada tarea, el sistema operativo cargaba la siguiente y así sucesivamente
hasta finalizar todas las tareas contenidas. El operador remplazaba las cintas de
entrada y salida, la cinta de entrada se remplazaba con una nueva que contenía otro
lote para su ejecución, la cinta de salida se llevaba a una máquina económica de bajo
procesamiento, que realizaba la impresión fuera de línea (off-line), o lo que es lo
mismo, no conectada a la computadora principal.
El primer sistema operativo creado fue un sistema operativo por lotes, desarrollado
por la General Motors para usar en una computadora IBM 701 (Fig. 51). El nombre de
este sistema operativo es GM-NAA I/O, lo que es lo mismo, sistema de entrada/salida
de General Motors y Norte América Aviación. El creador de este sistema fue Bob
Patrick en el año 1956. La base de su creación fue un sistema monitor, creado en 1955,
por programadores de la General Motors. Su principal función era ejecutar
automáticamente un nuevo programa una vez terminaba el que se estaba ejecutando
en ese momento. Este sistema estaba formado por unas rutinas accesibles a los
programas que proporcionaban un acceso común a los dispositivos de entrada/salida.
Más adelante este sistema se mejoró y se incorporó a la computadora IBM 704 por
una serie de clientes de IBM. Al principio de los 60, un conjunto de vendedores ya
habían desarrollado sistemas operativos por lotes para sus computadores. El sistema
operativo IBSYS de IBM, se creó para los computadores 7090/7094 e influyó en
muchos sistemas de la época.
Fig. 50. Proceso del sistemas operativos por lotes.
En la figura 50 se puede ver el proceso del sistema operativo por lotes, para ello se
utiliza la computadora IBM 1401. Primero los diferentes programadores llevan sus
Daniel Merchán López. 2013
3. Historia del software en computación aplicado a la informática educativa. 87
tarjetas a la computadora 1401, ésta lee los lotes de los trabajos y los graba en cinta.
Después un operador lleva la cinta de entrada a otra computadora 7094 más costosa
que la anterior porque era la que realizaba la computación. De la 7094 sale una cinta
de salida que el operador lleva a la 1401 que dispone de una impresora donde se
imprime la salida con todos los datos. Otro sistema operativo de la época es el Fortran
Monitor System (FMS).
Fig. 51. Computadora IBM 701 en la que se incluye el primer sistema operativo por lotes.
La principal mejora de un sistema por lotes es la falta de interacción entre el usuario y
el trabajo mientras éste se ejecuta. El trabajo se prepara y se entrega, y cierto tiempo
después aparece en la salida. El tiempo de retorno o retardo entre la presentación de
un trabajo y su terminación puede ser el resultado del volumen del cómputo
requerido. En este entorno de ejecución, la CPU con frecuencia esta inactiva. Esta
inactividad ocurre porque el hardware de E/S, que es mecánico, es más lento que los
dispositivos electrónicos. Incluso una CPU lenta realiza sus operaciones en tiempos de
orden de microsegundos, y ejecuta miles de instrucciones cada segundo. Más adelante
y con las mejoras a la tecnología se pudieron diseñar dispositivos de E/S más rápidos.
Desafortunadamente, las velocidades de CPU aumentaron a un ritmo mayor, de modo
que el problema no solo no se resolvió, sino que las diferencias eran cada vez mayores.
Una solución a este problema fue la introducción de la tecnología de discos. Con esta
mejora En lugar de leer las tarjetas directamente del lector a la memoria, para después
procesar el trabajo, las tarjetas se leen del lector al disco. La ubicación de las imágenes
de tarjeta se registra en una tabla mantenida por el sistema operativo. Cuando se
ejecuta un trabajo, el sistema operativo satisface sus solicitudes de entradas del lector
de tarjetas leyendo del disco. Así mismo, cuando el trabajo solicita la impresión al
Daniel Merchán López. 2013
4. 88 Historia del software en computación aplicado a la informática educativa.
computador, la salida se imprime realmente. Esta forma de procesamiento, se llama
spooling.
Realmente, el disco se utiliza como buffer de gran tamaño, para leer por adelantado
todo lo que sea posible de los dispositivos de entrada y para guardar los archivos de
salida hasta que los
dispositivos de salida puedan
aceptarlos. En el caso de que
los datos de entrada/salida se
almacenaran en memorias
intermedias se denominaría
buffering. También se
utilizaban técnicas de acceso
directo a memoria (DMA) en
las que el procesador no
interviene a la hora de realizar
alguna operación con los
periféricos en la memoria.
Fig. 52. Diferencia entre buffering y spooling.
Para entender mejor el sistema por lotes hay que explicarlo desde los dos puntos de
vista, el del monitor y el del procesador. El programa monitor es un elemento del
software, idea central del proceso por lotes. Dicho de otro modo, el monitor es quien
controla la secuencia de sucesos. Para que esto sea posible, gran parte del monitor
debe estar siempre en la memoria principal y disponible para su ejecución. Esta parte
del monitor se conoce como monitor residente. El resto del monitor consta de
utilidades y funciones comunes que se cargan como subrutinas a los programas de los
usuarios al comienzo de cualquier trabajo que las necesite.
El monitor lee los trabajos uno a uno de un lector de tarjetas o una unidad de cinta
magnética. A medida que lo lee, el trabajo actual se ubica en la zona del programa del
usuario y el control pasa al trabajo. Cuando el trabajo termina, se devuelve el control
al monitor, quien lee inmediatamente un nuevo trabajo. Los resultados de cada
trabajo se envían al dispositivo de salida, por ejemplo una impresora, y se entregan al
usuario. Es el monitor el que gestiona el problema de la planificación. Se pone en cola
un lote de trabajos y estos son ejecutados tan rápidamente como sea posible, sin que
haya tiempo alguno de inactividad. El monitor mejora también el tiempo de
organización del trabajo. Con cada trabajo, se incluyen instrucciones de una forma
primitiva de lenguaje de control de trabajos (JCL), que es un tipo especial de lenguaje
de programación empleado para dar instrucciones al monitor.
Daniel Merchán López. 2013
5. Historia del software en computación aplicado a la informática educativa. 89
Fig. 53. Estructura de un trabajo FMS.
La estructura de un trabajo de entrada típico es la siguiente (Fig. 53). El trabajo
comenzaba con una tarjeta $JOB, que especificaba el tiempo de ejecución máximo en
minutos, el número de cuenta al que se debía cobrar el trabajo, y el nombre del
programador. Luego venia una tarjeta $FORTRAN, que ordenaba al sistema operativo
leer el compilador de FORTRAN de la cinta del sistema. Esta tarjeta iba seguida del
programa por compilar y por una tarjeta $LOAD, que ordenaba al sistema operativo
cargar el programa objeto recién compilado. Los programas compilados a menudo se
escribían en cintas temporales y tenían que cargarse explícitamente. Luego venia la
tarjeta $RUN, que ordenaba al sistema operativo ejecutar el programa con los datos
que le seguían. Por último, la tarjeta $END marcaba el final del trabajo. Estas tarjetas
de control primitivas eran los precursores de los lenguajes de control de trabajos e
intérpretes de comandos modernos.
Desde el punto de vista del procesador, éste, en un cierto momento, estará
ejecutando instrucciones de la zona de memoria principal que contiene al monitor.
Estas instrucciones hacen que el trabajo siguiente sea leído en otra zona de la memoria
principal. Una vez que el trabajo se ha leído, el procesador encuentra en el monitor
una instrucción de bifurcación que ordena al procesador continuar la ejecución en el
inicio del programa de usuario. El procesador ejecuta entonces las instrucciones del
programa de usuario hasta que encuentre una condición de finalización o de error.
Cualquiera de estos dos sucesos provoca que el procesador vaya a por la instrucción
siguiente del programa monitor. Dicho de otra manera cuando el control se le pasa al
Daniel Merchán López. 2013
6. 90 Historia del software en computación aplicado a la informática educativa.
trabajo el procesador pasa a leer y ejecutar instrucciones del programa de usuario,
mientras que cuando el control vuelve al monitor el procesador, pasa ahora a leer y
ejecutar las instrucciones del programa monitor.
Lenguajes de programación.
A mediados de la década de 1950 se empezaron a introducir los lenguajes de
alto nivel. Estos lenguajes permitían escribir programas en una forma más próxima a la
naturaleza del problema a resolver que al conjunto de instrucciones que interpreta
directamente el procesador (instrucciones máquina). Estos lenguajes, además podían
utilizarse en distintas máquinas.
De 1954 a 1957, bajo la dirección de Jhon Backus de IBM, se desarrolló el primer
lenguaje de programación de amplia difusión: el FORTRAN (Formula Translation),
proyectado para la programación de aplicaciones de cálculo científico y técnico. El
FORTRAN permite la redacción de expresiones algebraicas en una notación muy
próxima a la notación algebraica convencional. No hay que olvidar que los primeros
computadores se desarrollaron pensando en la resolución de problemas de tipo
matemático. La meta de este lenguaje era un lenguaje de programación en toda forma
que incluyera estructuras de control, condicionales y enunciados de entrada y salida.
El programa "Hola, mundo" escrito en FORTRAN:
PROGRAM HOLA
IMPLICIT NONE
PRINT *, '¡Hola, mundo!'
END
Pocos pensaban que el lenguaje resultante pudiera competir con el lenguaje
ensamblador codificado a mano, por lo cual se concentraron todos los esfuerzos en su
ejecución eficiente y se diseñaron diversos enunciados específicamente para la IBM
704. Los conceptos como la ramificación aritmética de tres vías de FORTRAN
provinieron directamente del equipo físico (hardware) de la 704. FORTRAN tuvo un
éxito extraordinario, tanto es así que cambió para siempre la programación y
probablemente preparó el escenario para su reemplazo final por otros lenguajes. En
esa época, la utilidad de cualquier lenguaje de alto nivel estaba abierta al
cuestionamiento por parte de programadores formados en programación de lenguaje
ensamblador. Su queja más seria se refería a la eficiencia de ejecución del código
compilado a partir de programas en lenguajes de alto nivel. Como consecuencia, el
diseño de las primeras versiones de FORTRAN estaba fuertemente orientado a
proporcionar eficiencia de ejecución. Se hizo una revisión de FORTRAN en 1958
(FORTRAN II). Casi todos los fabricantes implementaron una versión del lenguaje y
reinaba el caos. Finalmente, en 1966 se convirtió en estándar con el nombre de
FORTRAN 66 siendo actualizado varias veces desde entonces hasta la versión actual, la
FORTRAN 2010.
Daniel Merchán López. 2013
7. Historia del software en computación aplicado a la informática educativa. 91
Después de FORTRAN, se desarrollaron varios lenguajes de importancia, éstos
utilizaban también la idea de las abstracciones de datos. En 1958 el ALGOL58
(ALGOrithmic Language) y su sucesor el ALGOL60 (1960), uno de los creadores fue el
científico holandés Edsger Dijkstra, éste se convirtió en el lenguaje académico de
computo estándar desde los años sesenta hasta principio de los setenta. ALGOL nunca
alcanzó éxito comercial en Estados Unidos, aunque consiguió cierto éxito en Europa.
Sin embargo tuvo un impacto más allá de su uso. Como ejemplo de ello, Jules
Schwartz de SDC (System Development Corporation) desarrolló una versión de IAL
(International Algorithmic Language) que se convirtió en una norma para las
aplicaciones de la Fuerza Aérea de Estados Unidos. Backus (informático) fue el editor
del informe de ALGOL que definía el lenguaje. Usó una notación sintáctica comparable
con el concepto de lenguaje libre de contexto desarrollado por Chomsky (lingüista,
filósofo y activista estadounidense, y en estos momentos profesor emérito de
Lingüística en el MIT). Esto constituyó la introducción de la teoría formal de la
gramática al mundo de los lenguajes de programación. A causa de su propio papel y el
de Naur (informático europeo del comité ALGOL) en el desarrollo de ALGOL, la
notación se conoce ahora como BNF, o Backus Naur Form.
"Hola mundo" escrito en ALGOL:
BEGIN
FILE F (KIND=REMOTE);
EBCDIC ARRAY E [0:12];
REPLACE E BY "HOLA MUNDO!";
WHILE TRUE DO
BEGIN
WRITE (F, *, E);
END;
END.
Como un ejemplo más de la influencia de ALGOL, Burroughs, un vendedor de
computadoras que, más tarde, se unió a Sperry Univac para formar Unisys, descubrió
la obra de un matemático polaco llamado Lukasiewicz. Él había desarrollado una
técnica interesante que permitía escribir expresiones matemáticas sin paréntesis, con
un proceso eficiente de evaluación con basado en pilas. Aunque no se trataba de un
resultado matemático importante, esta técnica tuvo un efecto profundo sobre la teoría
de los compiladores. A través de uso de métodos basados en la técnica de Lukasiewicz,
Burroughs desarrolló el hardware de la computadora B5500 basado en una
arquitectura de pilas y pronto tuvo un compilador de ALGOL mucho más rápido que
cualquier compilador de FORTRAN.
El LISP creado por Jhon McCarty del MIT, en 1962, es muy adecuado para operar con
expresiones simbólicas y para aplicaciones de inteligencia artificial. El LISP es diferente
de casi todos los demás lenguajes en varios aspectos. El más notable es la equivalencia
de forma entre programas y datos en el lenguaje, que permite ejecutar estructuras de
datos como programas y modificar programas como datos. Otra característica
Daniel Merchán López. 2013
8. 92 Historia del software en computación aplicado a la informática educativa.
destacada es la fuerte dependencia de la recursividad como estructura de control, en
vez de la iteración (formación de ciclos) que es común en casi todos los lenguajes de
programación.
Hola mundo escrito en LISP:
(format t "¡Hola, mundo!")
El SNOBOL es otro de los lenguajes de alto nivel de aquel momento. Fue producido
para aplicaciones de tratamiento de caracteres, en el Bell Telephone Lab. por David J.
Faber, Ralp E. Griswold e Ivan Polonsky (1962). La implementación clásica se utilizó en
la PDP-10 y se ha usado para estudiar compiladores, gramáticas formales e inteligencia
artificial, en particular traducción automática y comprensión automática de lenguajes
naturales. Se implementó originalmente en una IBM 7090, de los Laboratorios Bell en
Holmdel, Nueva Jersey. Fue diseñado expresamente para la portabilidad así que
rápidamente se exportó a otras plataformas. Sobresale de entre los lenguajes de
programación más famosos de su tiempo por usar los patrones de búsqueda como un
tipo de datos nativo al lenguaje y por proveer operadores para concatenación de
patrones y alternación, además de que las cadenas generadas durante la ejecución
pueden ser tratadas como programas que pueden a su vez ser ejecutados.
Un patrón de búsqueda puede ser muy simple o extremadamente complicado. Un
ejemplo de patrón simple puede ser una cadena de texto (v.g.: "ABCD"), y un ejemplo
de patrón complicado puede ser una gran estructura que describa la gramática
completa de un lenguaje de programación de computadoras. Ofrece al programador
una amplia variedad de características incluyendo algunas muy exóticas, de ahí que se
pueda usar como si fuera un lenguaje orientado a objetos, un lenguaje de
programación lógica, un lenguaje de programación funcional o un lenguaje de
programación imperativa cambiando el conjunto de características usadas para escribir
un programa. También concatena cadenas que estén una junto a la otra en una
sentencia y mantiene las cadenas en un montículo de memoria liberando así a los
programadores de preocupaciones tales como asignación de memoria y manejo de
cadenas.
También se desarrollaron lenguajes de programación de alto nivel para aplicaciones
de gestión administrativa. Se caracterizan por utilizar sentencias que, con nemónicos
ingleses, disponen de las funciones matemáticas típicas de gestión (funciones
financieras, etc.) y actúan fundamentalmente con archivos de información
alfanumérica. El lenguaje de mayor incidencia fue el COBOL, definido en 1959 por la
CODASYL. Una característica importante del COBOL es el uso de palabras inglesas para
construir las expresiones e instrucciones del lenguaje, incluidas las operaciones
aritméticas. El motivo de este uso era para hacer los programas comprensibles a
programadores y ejecutivos. El principal error de COBOL era que no se podían pasar
Daniel Merchán López. 2013
9. Historia del software en computación aplicado a la informática educativa. 93
parámetros a los procedimientos. En este sentido, COBOL representó un paso atrás
respecto a FORTRAN. COBOL se difundió rápidamente y fue convertido en estándar
ANSI en 1968, 1974 y 1985. La CODASYL vigiló su evolución para evitar que se
realizaran versiones incompatibles lo que dio una gran estabilidad al lenguaje.
"Hola mundo" escrito en COBOL:
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
DISPLAY "Hola mundo".
STOP RUN.
Con la introducción de su nueva línea de computadoras 360 en 1963, la IBM
desarrolló NPL (New Programming Language; Nuevo lenguaje de programación) en su
laboratorio Hursley en Inglaterra. Después de algunas quejas por parte del English
National Physical Laboratory (Laboratorio de Física Nacional Inglés), el nombre se
cambio a MPPL (Multi-Purpose Programming Language; lenguaje de programación de
usos múltiples) y más tarde se acortó a solo PL/I. El PL/I incorporó todas las
innovaciones de los lenguajes anteriores, es decir, fusionó los atributos numéricos de
FORTRAN con las características de programación para negocios de COBOL. El PL/I
alcanzó un éxito moderado en los años setenta.
Bases de Datos.
Los primeros SGBD datan de los años sesenta, por aquella época no se les
denominaba así. Estaban orientados a facilitar la utilización de grandes conjuntos de
datos en los que las interrelaciones eran complejas. El arquetipo de aplicación era el
Bill of materials o Parts explosion, típica en las industrias del automóvil, en la
construcción de naves espaciales y en campos similares. Estos sistemas trabajaban
exclusivamente por lotes que ya hemos descrito como funcionaban en los sistemas
operativos. Los SGBD estaban totalmente relacionados con el software de
comunicaciones y de gestión de transacciones. IBM denominaba a este software Data
Base/Data Communications (DB/DC).
Daniel Merchán López. 2013
10. 94 Historia del software en computación aplicado a la informática educativa.
IBM se alió con American
Airlines para desarrollar SABRE,
un sistema operativo de
procesamiento en tiempo real
que manejaba la reserva/compra
de billetes de American Airlines.
SABRE hoy en día resulta uno de
los mejores globalizadores de
reservas dentro de las agencias,
así como uno de los más
utilizados para la enseñanza en
centros educativos de turismo.
Fig. 54. Interfaz de SABRE.
En esta época se desarrollaron las cintas magnéticas para el almacenamiento de
datos. Las tareas de procesamiento de datos, como las nóminas, fueron
automatizadas, con los datos almacenados en cintas. El procesamiento de datos
consistía en leer datos de una o más cintas y escribir datos en una nueva cinta. Los
datos también se podían introducir desde paquetes de tarjetas perforadas e impresos
en impresoras. Por ejemplo, los aumentos de sueldo se procesaban introduciendo los
aumentos en las tarjetas perforadas y leyendo el paquete de cintas perforadas en
sincronización con una cinta que contenía los detalles maestros de los salarios. Los
registros debían estar igualmente ordenados. Los aumentos de sueldo tenían que
añadirse a los sueldos leídos de la cinta maestra, y escribirse en una nueva cinta; esta
nueva cinta se convertía en la nueva cinta maestra. Las cintas y los paquetes de
tarjetas perforadas solo se podían leer secuencialmente, y los tamaños de datos eran
mucho mayores que la memoria principal; así, los programas de procesamiento de
datos tenían que procesar los datos según un determinado orden, leyendo y
mezclando datos de cintas y paquetes de tarjetas perforadas. Generalmente la
preocupación de esta Era consistía en maximizar el rendimiento: el tiempo de
respuesta y las transacciones por segundo.
Para escribir los programas de aplicación se utilizaban lenguajes de alto nivel como
COBOL o PL/I, aunque también se disponía de instrucciones y de subrutinas
especializadas para tratar las bases de datos que requerían que el programador
conociese muchos detalles del diseño físico, y que hacían que la programación fuese
muy compleja.
Daniel Merchán López. 2013