Tema 7. La programación de los computadores.

__________________________________

 

7.1. Introducción.

 

7.2. Programación de los computadores.

7.2.1. Evolución histórica.

7.2.2. Lenguajes de alto nivel.

7.2.3. Metodologías.

 

7.3. Sistemas operativos.

 

7.4. Herramientas y sistemas de desarrollo.

 

7.5. Evolución de las máquinas:

Generaciones de computadores.

 

 

7.1. Introducción

 

Máquinas más complejas.

Accesibles a un mayor número de usuarios.

Más potencia y más aplicaciones.

 

Necesidad de:

Indicar a la máquina qué hacer.

Describir correctamente qué hacer.

Trabajar en el entorno de la máquina.

 

Herramientas:

Lenguajes de programación.

Métodos de programación.

Sistemas operativos.

 

 

7.2. Programación de los computadores

 

 

 

Los computadores son máquinas programables.

 

Programar es expresar la resolución de un problema en términos que el computador (en sentido amplio) pueda entender.

 

El programa (final) indica a la máquina qué debe hacer.

 

 

 

7.2.1. Evolución histórica

 

1950

Código máquina

 

Ensamblador

 

 

 

Artesanal

 

 

 

1955

Lenguajes

de

Alto

Nivel

 

1960

Lenguajes

Crisis SW

1970

Metodologías

Estructurada

Ingeniería

1980

Nuevos paradigmas

 

 

La primera programación consiste en configurar la máquina (ENIAC).

 

La segunda programación nace con el concepto de programa almacenado en memoria.

Código Máquina.

Lenguaje ensamblador.

Correspondencia 1 a 1 entre lenguaje y código máquina.

A. Turing: Manchester Mark I.

Short code del UNIVAC.

Uso de subprogramas y macros.

 

Tercera programación: Lenguajes de alto nivel.

Independientes de la máquina.

Facilitan la legibilidad, diseño y mantenimiento de los programas.

Estructuras y funciones variadas y complejas.

Deben ser traducidos a código máquina.

 

 

Hasta 1960:

Programación en ensamblador.

Aparición de los primeros lenguajes de alto nivel: Fortran (56), Lisp (58).

 

1960-1970:

Década de los lenguajes.

Se implantan Fortran y Lisp.

Aparecen Cobol, Algol (1960), PL/1 (1964) y Basic (1965).

Termina con la Crisis del Software:

Complejidad de los problemas.

Falta de métodos de programación.

Baja productividad/calidad.

Cambia la relación de coste SW/HW.

 

 

1970-1980:

Década de las metodologías.

Paso del problema al programa.

Programación estructurada: Pascal, C.

Ingeniería del Software.

Abarca todo el proceso: Requisitos, recursos, datos...

 

 

Desde 1980:

Nuevos paradigmas de programación:

Orientada a objetos: Smalltalk, C++.

Funcional: Lisp.

Lógica: Prolog

Predominio de las comunicaciones:

Lenguajes multiplataforma: Java.

Programación distribuida y concurrente: PVM, MPI, threads...

 

7.2.2. Lenguajes de alto nivel.

 

 

PROBLEMA

 

 

Leer

 

 

---->

 

 

---->

 

 

 

 

 

 

 

Mostrar

 

 

 

---->

 

 

 

 

 

 

 

 

 

 

A

 

 

CPU

A x B

 

 

 

 

 

 

 

 

 

 

 

 

B

 

 

 

La CPU no sabe multiplicar:

AxB = sumar A, B veces.

 

R := 0

LEER B

SI B = 0 ir a FINAL

LEER A

OTRO: R := R + A

B := B - 1

SI B != 0 ir a OTRO

FINAL: ESCRIBIR R

 

 

Codigo Máquina del 68000 (16 bits)

0111 0000 0000 0000 70 00

0001 0010 0011 1001 12 39

0000 0000 0000 0000 00 00

0011 0000 0000 0000 30 00

1000 0010 0000 0001 82 01

0110 0111 0000 1100 67 0C

0001 0100 0011 1001 14 39

0000 0000 0000 0000 00 00

0100 0000 0000 0000 40 00

1101 0000 0000 0010 D0 02

0101 0011 0000 0001 53 01

0110 0110 1111 1010 66 FA

0001 0001 1100 0000 11 C0

0000 0000 0001 0000 00 10

 

 

Lenguaje Ensamblador

 

COMZO EQU 2000H

DISP EQU 10H

 

POS1 DS.B 1

POS2 DS.B 1

 

ORG COMZO

 

MOVEQ 0,D0

MOVE.B POS1,D1

OR.B D1,D1

BEQ FINAL

MOVE.B POS2,D2

OTRO ADD.B D2,D0

SUBQ.B #1,D1

BNE OTRO

FINAL MOVE.B D0,DISP

 

END

 

 

Características de los Lenguajes de alto nivel.

 

Independencia de la máquina.

Legibilidad de los programas.

Mayor potencia y capacidad semántica.

 

Elementos que ofrecen:

Variables: datos o cosas del mundo real

Simples (reales, enteras, carácter...)

Complejas o estructuradas (vector...)

Estructuras algorítmicas

Condicionales (if-then-else, case...)

Iterativas (while, repeat, for...)

Subprogramas

Funciones (devuelven un valor)

Procedimientos

Funciones de librería estándar

 

 

 

 

Ejemplo: multiplicar A y B

 

 

variables variables con tipos

A, B, R: entero

 

programa funciones de librería

leer( A );

leer( B );

R := multiplicar( A, B );

escribir( R );

final.

 

funcion multiplicar( A, B: entero ):entero

 

variables

P: entero

 

programa

P := 0;

mientras B<>0 estructuras propias

P := P + A;

B := B - 1;

finmientras

devuelve P;

final.

 

 

Compiladores e intérpretes

 

Traducen a lenguaje máquina.

Compiladores: todo el módulo de una vez.

Interpretes: instrucción a instrucción.

 

Asumen la labor del programador.

Conocen la máquina para la que traducen.

Conocen el lenguaje de alto nivel.

Asignan memoria (linkers).

Preparan el programa para la carga y ejecución (linkers).

 

Algunos lenguajes de alto nivel

 

FORTRAN

FORmula TRANslator

 

Primer lenguaje de alto nivel

Creado en 1956 para el IBM 704 por John Backus

Orientado a resolución de problemas matemáticos y científicos.

Largo proceso de estandarización y mejora

FORTRAN II a IV de 1962 a 1966

FORTRAN ASA en 1966

FORTRAN 77, 90...

Poco estructurado, no recursivo, E/S elaborada y compleja.

 

ALGOL

ALGOrithmic Languaje

 

Creado en 1958. Revisiones del 60 y 68.

Muy estructurado, con recursión.

Didáctico, poco usado comercialmente.

 

  

COBOL

COmmon Business Oriented Languaje

 

Aparece en 1958, auspiciado por el Departamento de Defensa de los EE.UU.

Aplicado al mundo comercial y de gestión.

Subconjunto del inglés, fácilmente legible.

Estructuras de datos del entorno administrativo y financiero.

Sintaxis muy rígida. 4 partes:

Identificación

Ambiente

Datos

Procedimientos

  

LISP

LISt Processor

 

Creado en 1958 por John McCarthy (MIT).

Típicamente interpretado.

Lenguaje de Inteligencia Artificial en EE.UU.

Diversificado. El más común es el Common LISP (1984).

Maneja expresiones simbólicas: átomos y listas.

Los programas son listas, y hacen uso de la recursividad.

Aparecieron máquinas LISP en los 80.

 

PL/1

Programming Languaje 1

 

De propósito general, entre el FORTRAN y el COBOL.

Uno de los más utilizados hasta los 80.

Complejo y susceptible de errores.

 

BASIC

Beginnerīs All-purpose Symbolic Instruction Code

 

Diseñado en el Dartmouth College en 1965.

Uso en sistemas de tiempo compartido: interactivo e interpretado.

Fácil de aprender y utilizar.

Sintaxis flexible.

Poco estandarizado.

Gran impacto en la época de la microinformática.

 

  

PASCAL

 

Evolución del ALGOL 60

Inventado en 1968 por Niklaus Wirth.

Primer compilador en el 70.

Primer estándar en 1973, revisado en 1980.

Muy estructurado y poco flexible.

Gran impacto didáctico.

Poco uso comercial.

  

PROLOG

PROgrammation LOGique

 

Doble origen:

Colmerauer en Marsella diseña un intérprete de 1972 a 1975.

Warren en Edimburgo, un compilador en 1977.

Lenguaje para inteligencia artificial en Europa y Japón (quinta generación).

Declarativo, no imperativo.

Basado en lógica formal, maneja hechos y reglas.

Motor de inferencia en el propio lenguaje.

  

C

 

Creado por Dennis Ritchie ( lab. Bell) en 1973 para el diseño del sistema UNIX.

Muy difundido junto a UNIX en los 80.

Estructurado, modular y compacto.

Características de lenguaje máquina y de lenguaje de alto nivel.

 

 

Programación Orientada a Objetos

 

Objetos: representación del conocimiento.

Se adaptan a objetos del mundo real.

Conceptual y 'físicamente' aislados.

Estado y procedimientos propios.

 

Los programas son relaciones e interacciones entre objetos.

 

Otras ventajas de los objetos:

Funciones adaptables: sobrecarga y polimorfismo.

Atributos predefinidos: herencia.

Modularidad, reusabilidad y adaptabilidad intrínseca del SW.

 

  

SMALLTALK

 

Desarrollado en los 70 en Xerox Palo Alto.

Lenguaje orientado a objetos de referencia.

Lenguaje integrado en el sistema: editor, interfaz gráfica, compilador... son objetos del sistema.

Aprovecha la capacidad gráfica, con entornos basados en ventanas, iconos y ratones.

 

C++

 

Creado por Bjarne Stroustrup en 1986.

Adaptación del C a la filosofía orientada a objetos.

Soporta las características orientadas a objetos sin perder la potencia del C.

Los programas son preprocesados a C, y luego compilados.

Menos estandarizado que el C.

  

JAVA

 

Creado por SUN Microsystems a principios de los 90.

Lenguaje para Internet y sistemas distribuidos.

Lenguaje interpretado:

Se compila a BYTECODE.

Máquina virtual multiplataforma.

Entorno gráfico independiente.

Lenguaje orientado a objetos, seguro y concurrente.

 

 

7.2.3. Metodologías

  

Programación artesanal.

 

Programación estrucutrada: metodología de programación.

 

Metodologías de diseño de programas.

 

Ingnienría del software.

 

Herramientas CASE.

 

7.3. Sistemas Operativos

 

Inicialmente el SO era la configuración de la máquina, introducción de datos y programas y recogida de resultados.

 

En los años 50, en los laboratorios de la General Motors aparece el primer SO: un sistema de procesamiento por lotes de secuencia única.

 

En los 60 se produce un gran avance:

Multiprogramación.

Tiempo compartido y uso de terminales en línea.

Proceso por lotes e interactivo.

Sistemas de tiempo real.

 

Aparecen muchos SO:

OS/360 de IBM (1964)

Multics (MIT)

CP/CMS (IBM)

  

En los 70 sigue esta evolución.

Aparecen los estándares de comunicaciones. (TCP/IP, Depto. de Defensa).

Redes de área local (Ethernet, de Xerox).

Sistemas de seguridad.

  Se diseña el UNIX y empieza a difundirse en los entornos académicos.

  En los años 80 se evoluciona hacia la informática personal y los sistemas distribuidos.

Se imponen los interfaces gráficos avanzados.

  Se implanta UNIX como SO abierto.

 

Evolución conceptual de los SO.

Monolíticos.

Sistemas en capas.

Núcleos pequeños y modelo cliente/servidor.

 

 

7.4. Herramientas y sistemas de desarrollo.

 

Primeras herramientas.

Compiladores, linkers y gestores de librerías.

Desde línea de comandos, con opciones y variables del sistema.

 

Uso de entornos integrados.

Sistemas con ventanas y menús.

Parámetros de configuración.

Incorporación de otras opciones.

 

Generadores automáticos de código.

Ayudas para ciertos campos.

Uso en entornos gráficos.

Apoyados por librerías específicas.

 

Automatización total.

Generadores de aplicaciones.

Herramientas CASE.

 

 

7.5. Evolución de las máquinas: Generaciones de computadores.

 

La evolución de los computadores se clasifica en generaciones.

Vienen delimitadas por los adelantos en hardware.

 

Primera generación. Hasta 1959.

Tubos de vacío.

Segunda generación. 1959-1966.

Transistores

Tercera generación. 1966-1971.

Circuitos integrados.

Cuarta generación. Desde 1971.

Microprocesadores.

 

 

La segunda generación: La serie 700 y la consolidación de IBM.

 

En 1950 IBM inicia, sin ánimo de lucro, el proyecto NORC por encargo del Depto. de Defensa.

En 1951 se inicia el "Defense Calculator", versión de la máquina IAS, que da lugar al 701 en 1953.

Con él nacen los primeros ensambladores para mejorar la generación de software.

El 704 sucede al 701 incluyendo núcleos de ferrita. Para esta máquina se desarrolla el primer compilador.

En 1953 se inicia el IBM 702 para gestión, con registros de longitud variable.

En 1955 sale al mercado el 702, en 1956 el 705 (mejora del 702), en 1958 el 709, diseño paralelo de alta velocidad.

   

En 1958 Philco Corporation comercializa el Transac S-2000, con circuitos transistorizados.

IBM responde con la serie 7000, que usa tecnología de transistores. (709TX, 7090, 7080...)

  La lentitud de la E/S origina familias de ordenadores periféricos de bajo coste (1401, 1420...)

  

Los primeros supercomputadores.

  

En 1955 IBM saca el STRETCH.

Anticipación de instrucciones.

Circuitería aritmética paralela.

100 veces más rápido que el 704.

 

En 1960 UNIVAC responde con el LARC.

 

En 1956 la Universidad de Manchester saca el ATLAS. Incluye el primer SO complejo.

 

La tercera generación: La serie 360 de IBM.

  A finales de los 59 Honeywell comercializa una serie de ordenadores de tamaño medio. El H200 es capaz de ejecutar programas del 1401 por un 70% del coste.

 

IBM realiza el informe SPREAD en 1961, para planificar su estrategia comercial y protegerse contra la competencia.

- Familias de ordenadores compatibles.

- Sistema operativo común ampliable.

 

En 1964 IBM anuncia 150 nuevos productos. Los más importantes, la familia System/360.

 

La serie es un éxito comercial, y un punto de referencia para el diseño de sistemas de la competencia.

- Palabras de 8 bits.

- Código EBCDIC.

- Familias de sistemas compatibles.

  

La lucha de las grandes compañías.

 

De 1957 a 1961, Control Data Corporation (CDC) pasa de 4 a 10.000 empleados (gracias a contratos militares y de la Comisión de Energía Atómica).

 

De 1966 a 1971 IBM dobla su cifra de negocios, alcanzando 8.000M$ (1.000M$ de ganancias).

 

A finales de los 60 el mercado se reparte entre IBM (>50%), DEC, Burroughs, UNIVAC, NCR, CDC, Honeywell, General Electric y RCA.

- IBM y CDC mercado militar.

- IBM y Burroughs gestión.

- El resto, mercados marginales o periferia para IBM.

 

En 1969 CDC ataca a IBM con la acusación de monopolio. En 1982 IBM es absuelta.

 

 La cuarta generación: decadencia de IBM.

  En los años 60 se dispone de sistemas interactivos en tiempo compartido.

En el MIT surge la idea de dar más inteligencia al terminal, haciendo de él un pequeño ordenador.

El PDP-1 de DEC (1957) evoluciona hasta el PDP-8, que en 1963 se comercializa con 4K de memoria.

 

En 1971 aparece el primer microprocesador, el Intel 4004.

  Este año, IBM saca el 370. El mercado se divide en:

- Mainframes.

- Miniordenadores.

- Microordenadores.

 

A partir de 1975 se popularizan los microordenadores basados en microprocesador, que alcanzan su auge a principios de los 80.

 

  En 1975 IBM retira su política de venta conjunta de hardware y software.

En 1976 aparece al Apple I.

Desde 1975 a 1983 IBM pierde su cuota de mercado. No puede seguir el mercado de mini y microordenadores. DEC pasa a ser la segunda compañía.

De 1980 a 1985 se pasa de 200.000 a 10.000.000 de microordenadores vendidos en el mundo.

En 1982 IBM reacciona, compra acciones de Intel y saca el PC con SO de Microsoft.