(Tema 2)
Introduccin
Los primeros lenguajes al ejecutarse en equipos costosos se proyectaban para producir un cdigo de mquina eficiente, an cuando la escritura de los programas era difcil.
Ejemplos: Fortran y LISP
Introduccin
En la actualidad los equipos son de bajo costo, por lo que, permiten el desarrollo de programas que son fciles de escribir correctamente aunque se ejecuten con lentitud algo mayor.
Ejemplos: C++, Java, Ada
La arquitectura de una computadora la podemos describir como la unin de microprocesadores, memoria y dispositivos de I/O.
Una computadora es un conjunto de tipos de datos, operaciones y caractersticas, capaz de almacenar y ejecutar programas.
Tipos de Arquitecturas
Arquitectura Tradicional Von Newmann Arquitecturas Alternativas Multiprocesadores
Memoria Cach
UCP
Registro de Direcciones
Registros de Datos
Intrprete
Operacin Primitiva
Operacin Primitiva
Control de Secuencia
Acceso a Datos
Gestin de Almacenamiento
Entorno de Operacin.
Datos
Elementos de informacin integrados a la computadora, manipulables directamente a travs de operaciones primitivas de hardware.
Operaciones Primitivas
Una computadora debe contener un conjunto de operaciones primitivas interconstruidas, tiles para la manipulacin de datos.
Control de Secuencia
Una computadora debe proporcionar mecanismos para controlar el orden en el que se van a ejecutar las Operaciones primitivas.
Acceso a Datos
Una computadora debe incorporar algn medio para designar operandos y un mecanismo para recuperar operandos de un designador de operandos dado.
Gestin de Almacenamiento
Una computadora debe proveer mecanismos para la asignacin de almacenamiento para programas.
Entorno de Operacin
El entorno de operacin de una computadora consiste ordinariamente en un conjunto de dispositivos perifricos de almacenamiento de entrada / salida
Estados de Computadoras
Computadoras de Firmware
Es la computadora simulada por un microprograma que se ejecuta en una computadora microprogramable de hardware especial. Su lenguaje de mquina consiste en un conjunto de microinstrucciones de nivel extremadamente bajo.
Programa Fuente
Preprocesador
Compilador
Ensamblador
Cargador
Preprocesador
Bsicamente es un procesador de texto, toma como entrada una forma ampliada de un lenguaje fuente y su salida es una forma estndar del mismo lenguaje fuente.
Compilador
Un compilador es un traductor cuyo lenguaje fuente es un lenguaje de alto nivel y cuyo lenguaje objeto se aproxima al lenguaje mquina de una computadora real , ya sea que se trate de un lenguaje ensamblador o alguna variedad de lenguaje mquina.
Ensamblador
Es un traductor cuyo lenguaje objeto es tambin alguna variedad de lenguaje mquina para una computadora real, pero cuyo lenguaje fuente, un lenguaje ensamblador, constituye en gran medida una representacin simblica del cdigo de mquina objeto.
Cargador
Es un traductor cuya entrada es un lenguaje objeto y la salida es un programa en lenguaje mquina relocalizable.
Mquina Virtual
Son las estructuras de datos y algoritmos de un lenguaje que se emplean durante el tiempo de ejecucin de un programa.
Programa en C
ADD #1, AX MOV BX, 300
Mquina virtual de C
Oculta las operaciones y estructuras de bajo nivel
010111011
Mquina virtual de C
Una computadora con n niveles puede verse como n mquinas virtuales diferentes, cada una de las cuales tiene un lenguaje especial.
Nivel de lenguaje orientado a problemas Nivel de lenguaje ensamblador
Programador
Nivel del Sistema Operativo Nivel del Sistema Convencional Nivel de Microprogramacin
0101
Nivel de Lgica Digital Nivel de Dispositivo Fsica Estado Slido
Se debe suministrar un traductor para traducir programas de usuario al lenguaje de mquina de la computadora virtual definida por el lenguaje. traductor
traductor traductor
Programa en C
Computadora virtual de C
...
Computadora de Hardware Real
Cada nivel representa una abstraccin con objetos y operaciones diferentes Cada nivel esta construido sobre su predecesor Si se quiere escribir programas para la mquina virtual del nivel n, no se necesita conocer los interpretes ni los traductores de los niveles de abajo.
Las computadoras estn diseadas como una serie de niveles Para disear nuevos niveles, se necesita conocer todos.
Habrs odo que con el lenguaje de programacin Java, puedes "escribir una vez, ejecutar en cualquier parte". Esto significa que cuando se compila un programa, no se generan instrucciones para una plataforma especfica. En su lugar, se generan bytecodes Java, que son instrucciones para la Mquina Virtual Java (Java VM). Si tu plataforma- sea Windows, UNIX, MacOS o un navegador de internet-tiene la Java VM, podr entender los bytecodes.
Un enlace es la asignacin de atributos a una celda de memoria para un elemento de programa. El momento en que el programa hace esta eleccin se conoce como el tiempo de enlace.
nombre a tipo entero Tabla de Smbolos direccin a Memoria
Tiempo de ejecucin
El enlace de parmetros formales a reales A travs de la asignacin de valores a variables
Tiempo de compilacin
Tipos para las variables Como se guardan las estructuras de datos y sus descriptores
Tiempo de carga
Fusionar los subprogramas en un ejecutable nico enlazando las variables a direcciones reales de memoria
Por ejemplo, cuntos tipos de enlace tiene este sencillo enunciado de asignacin escrito en un lenguaje L:
X := X + 10
Cuando un enlace se efecta durante el tiempo de ejecucin, se dice que es de tipo dinmico.
Ejemplos: Prolog, LISP y ML
Alcance esttico
Programa A var x,l,m : entero comienza Proc B var l : entero comienza . . . termina Proc C var m, r : entero comienza Proc D var x,y,z : entero comienza . . . termina termina termina
Diagrama de Contorno
x,l,m A
m,r
x,y,z D
Alcance Dinmico
El alcance se determina de acuerdo al lugar donde se hizo la ltima definicin del identificador. Se puede decir que va siguiendo la historia del programa. El alcance dinmico se determina utilizando los registros de activacin.
Enlace dinmico Enlace esttico Dir. de retorno Valor de retorno Variables Locales Parmetros
Quien lo llam
Diagrama de Contorno
a=7 B
P1
a=0
P2
Alcance esttico
Imprime 7
Registros de Activacin
Enlace dinmico Enlace esttico Dir. de retorno Valor de retorno
P1
P2
Alcance dinmico
Imprime 0
+ -
En ciencias de la computacin un paradigma se puede definir como un conjunto de conceptos que permiten modelar el mundo. Un paradigma es usado para formular una solucin de cmputo a un problema.
imperativos o de procedimientos aplicativos o funcionales con base en reglas o lgicos orientados a objetos concurrentes
Son controlados por enunciados imperativos enunciado 1; enunciado 2; ... La ejecucin de un enunciado hace que el interprete cambie el valor de una o mas localidades en memoria Ejemplos: Fortran, Pascal, C, Algol, Ada, PL/1
FORTRAN
INTEGER I REAL X(10), SUM SUM = 0.0 DO 100 I=1,10 100 SUM=SUM+ X(I)**2 IF (SUM .GT. 1E+5) STOP WRITE(6,200) I,SUM 200 FORMAT ('SUMA', I, 'VALORES E',E15.7) END
Los lenguajes aplicativos hacen uso de las funciones puras con composicin funcional, recursin y expresiones condicionales Tienen 4 componentes:
un conjunto de funciones primitivas un conjunto de formas funcionales la operacin de aplicacin un conjunto de objetos de datos
Ejemplos: LISP, ML
LISP
; Factorial (defun fact (n) (if (= n 1) ; caso de terminacin -> 1! = 1 1 (* n (fact (- n 1))) ; relacin recursiva: n! = n * (n-1)! ) )
Se ejecutan verificando una condicin, que cuando se satisface ejecutan una accin condicin 1 entonces accin 1 condicion 2 entonces accion 2 ... Ejemplo: Prolog
PROLOG
/* Esta linea es un comentario */ /* BASE DE HECHOS */ padre(pam, bob). padre(tom, bob). padre(tom, liz). padre(bob, ann). padre(bob, pat). padre(pat, jim). femenino(pam). femenino(liz). femenino(ann). femenino(pat). masculino(bob). masculino(tom). masculino(jim).
Pam
Tom
Bob
Liz
Ann
Pat
Jim
/* REGLAS */ es_hijo(X,Y):- padre(Y,X), masculino(X). tia(X,Y):- padre(PY,Y), hermanos(X,PY), femenino(X). hermanos(X,Y):- padre(PX,X), padre(PX,Y), no_es_igual(X,Y). abuelo(X,Y):- padre(PY,Y), padre(X,PY), masculino(X). no_es_igual(X,X):- !,fail. no_es_igual(X,Y):- true. /* PREGUNTA */ ?- abuelo(tom,liz).
Las actividades a realizarse se tornan alrededor de los objetos mediante mtodos (funciones) La comunicacin con el objeto se da a travs de mensajes Un aspecto fundamental es el concepto de herencia que se da cuando los objetos pertenecen a la misma clase Ejemplos: Simula, Smalltalk, Java
Java
class TestTh extends Thread { private String nombre; private int retardo; // Constructor para almacenar nuestro nombre // y el retardo public TestTh( String s,int d ) { nombre = s; retardo = d; } // El metodo run() es similar al main(), pero para // threads. Cuando run() termina el thread muere public void run() { // Retasamos la ejecucin el tiempo especificado try { sleep( retardo ); } catch( InterruptedException e ) { ; } // Ahora imprimimos el nombre System.out.println( "Hola Mundo! "+nombre+" "+retardo ); } }
Java
public class MultiHola { public static void main( String args[] ) { TestTh t1,t2,t3; // Creamos los threads t1 = new TestTh( "Thread 1",(int)(Math.random()*2000) ); t2 = new TestTh( "Thread 2",(int)(Math.random()*2000) ); t3 = new TestTh( "Thread 3",(int)(Math.random()*2000) ); // Arrancamos los threads t1.start(); t2.start(); t3.start(); } }
5. Lenguajes Concurrentes
Su principal objetivo es mejorar la velocidad de computo, compartir recursos y distribuir la carga de trabajo
Ada
procedure DECOD_MENSAJE task GENERAR_CODIGOS; task DECODIFICAR is entry ENVIAR_CODIGO (C: in CHARACTER); entry RECIBIR_CAR (C: out CHARACTER); end; task IMPR_MENSAJES; task body GENERAR_CODIGOS is CODIGO_SIGUIENTE: CHARACTER; begin loop --setencias para recibir datos --y generar un valor para CODIGO_SIGUIENTE DECODIFICAR.ENVIAR_CODIGO (CODIGO_SIGUIENTE); end;
task body DECODIFICAR is CODIGO, CAR : CHARACTER; begin loop accept ENVIAR_CODIGO (C: in CHARACTER) do CODIGO := C; end; --setencias para decodificar el valor de CODIGO --y presentar el valor decodificado en CAR accept RECIBIR_CAR (C: out CHARACTER) do C:= CAR; end; end loop; end; task body IMPR_MENSAJE is TAM_LINEA := 1; CAR_SIGUIENTE: CHARACTER; POSICION_LINEA: INTEGER; LINEA: STRING (1..TAM_LINEA); begin POSICION_LINEA := 1; loop DECODIFICAR.RECIBIR_CAR (CAR_SIGUIENTE); LINEA(POSICION_LINEA):=CAR_SIGUIENTE; if POSICION_LINEA < TAM_LINEA then POSICION_LINEA := POSICION_LINEA + 1; else IMPRIMIR(LINEA); POSICION_LINEA := 1; end if; end loop; end; begin PUT (SE HAN ACTIVADO LAS TAREAS PARA DECODIFICAR MENSAJES) end;
Bibliografa
Pratt, Terrence W. Programming languages: design and implementation. 4th Ed. Prentice Hall. ISBN 0130276782 Bruce Eckel Aplique C++ / Madrid ; Mxico : Osborne McGraw-Hill, c1991 ISBN 84-7615-567-0
Fin
Mucho más que documentos.
Descubra todo lo que Scribd tiene para ofrecer, incluyendo libros y audiolibros de importantes editoriales.
Cancele en cualquier momento.