Sunteți pe pagina 1din 12

I.T.S.C.

– Máquinas virtuales
Técnico Superior en Desarrollo de Software Programación II

LENGUAJES, NIVELES Y MÁQUINAS VIRTUALES

INTRODUCCION

• Una computadora es una máquina que puede resolver problemas ejecutando las instrucciones
que le son indicadas mediante un programa.

• El conjunto de instrucciones que puede ejecutar una computadora constituyen su lenguaje


denominado lenguaje máquina.

• El lenguaje coloquial empleado por las personas difiere considerablemente del empleado por
las máquinas.

• La solución para el entendimiento entre personas y máquinas, podría ser:


– Emplear una jerarquía de niveles en los que cada uno de ellos emplee un lenguaje de
mayor nivel de abstracción.
_ La idea es que a medida que ascendemos en la jerarquía el lenguaje se vaya alejando de
la máquina y al mismo tiempo se vaya acercando a las personas.

- Una máquina puede resolver problemas ejecutando instrucciones sencillas

- Programa: secuencia de instrucciones


Instrucciones Básicas:
Sumar dos números
Comprobar si un número es cero
Acceder a la memoria
conjunto de instrucciones
Primitivas

Lenguaje
de
Máquina

VISIÓN MULTINIVEL

El contar con múltiples niveles permite crear nuevas máquinas sobre un mismo hardware:
Lenguaje L2

Lenguaje L1

Hardware

 L2 está más próximo a los algoritmos que se quieren implementar..


 L1 (L.M.): está compuesta de aquellas Primitivas de uso “convenientes”. Permite implementaciones
flexibles ya que independiza a la máquina del HW subyacente
Esto facilita la programación y también posibilita la resolución de problemas más complejos.

Prof. Rearte, Judith


1/12
I.T.S.C.– Máquinas virtuales
Técnico Superior en Desarrollo de Software Programación II

VINCULACIÓN ENTRE LOS NIVELES

Existen esencialmente dos mecanismos que nos permiten vincular a los niveles entre sí:

 Traducción: la traducción consiste en tomar un programa escrito en un cierto lenguaje para


transformarlo en una secuencia de instrucciones equivalente en un lenguaje de nivel inferior.

 Interpretación: la interpretación consiste en tomar instrucción por instrucción de un cierto


lenguaje para ir transformándolas en tiempo de ejecución en un conjunto de instrucciones
equivalente del lenguaje de nivel inferior.

MECANISMO DE TRADUCCIÓN

Características del mecanismo de traducción:


 El programa que se utiliza para llevar adelante la traducción se denomina compilador y está
compuesto de instrucciones del nivel inferior.
 El programa original de nivel superior sólo se utiliza durante la traducción.
 Luego, la computadora se desentiende de este programa ya que en tiempo de ejecución sólo
accederá al nuevo programa de nivel inferior.

MECANISMO DE INTERPRETACIÓN

Características del mecanismo de interpretación:


 El programa que se utiliza para llevar adelante la interpretación se denomina intérprete y
también está compuesto de instrucciones del nivel inferior.
 En contraste, este mecanismo no genera un nuevo programa en el nivel inferior, ya que la
conversión se hace dinámicamente en tiempo de ejecución.
 Por esta razón, se debe conservar el programa original de nivel superior hasta el tiempo de
ejecución, puesto que recién ahí se lleva adelante la conversión.

CONCEPTO DE MÁQUINA VIRTUAL

Más que pensar en términos de compilación o de interpretación para vincular las distintas capas entre sí,
es conveniente abstraerse completamente de las capas inferiores.

 La idea es imaginar que existe una máquina virtual que directamente ejecuta las instrucciones de
ese nivel superior.
 El lenguaje de ese nivel superior se convierte en un nuevo lenguaje máquina, en esta ocasión de
una máquina virtual.

Con el objeto de que la traducción y/o la interpretación resulten viables y eficientes esencial que los
niveles adyacentes no difieran en gran medida.

 Recordemos nuestro objetivo inicial, cada nuevo nivel tiene por objeto acercarnos más a los
usuarios.

Prof. Rearte, Judith


2/12
I.T.S.C.– Máquinas virtuales
Técnico Superior en Desarrollo de Software Programación II

 En principio podemos ir incorporando nuevas capas, cada una con su respectivo lenguaje
máquina, hasta que alcancemos un un nivel cuyo lenguaje resulte satisfactorio, es decir, lo
suficientemente próximo a los usuarios del sist
sistema.

LENGUAJES Vs. MÁQUINAS

En cada nivel de esta organización en capas se identifican dos componentes principales:


 La máquina (virtual o no), caracterizada por el conjunto de instrucciones que puede ejecutar.
 El lenguaje,, caracterizado por las facilidades a disposición del programador en ese nivel.

Obsérvese que una máquina determina a su lenguaje de la misma manera queun lenguaje
lengu determina a su
máquina.

ORGANIZACIÓN MULTINIVEL
VEL

Los programas en Ln, son interpretados por un


• Maquina Virtual Mn programa que se ejecuta en un nivel inferior, o
Nivel n • Lenguaje de máquina Ln son traducidos al lenguaje de una máquina de
nivel inferior

• Máquina Virtual M4, con


Nivel 4 • Lenguaje de máquina L4
Los programas en L3, son interpretados por un
• Máquina Virtual M3, con programa que se ejecutan en M2 o M1,
M1 o son
Nivel 3 • Lenguaje de máquina L3 traducidos al lenguaje L2 o L1

• Máquina Virtual M2, con Los programas en L2,, son interpretados por un
programa que se ejecutan en M1,, o son
Nivel 2 • Lenguaje de máquina L2 traducidos a L1

• Máquina Virtual M1, con Los programas en L1, deben ser ejecutados
directamente por los circuitos electrónicos
Nivel 1 • Lenguaje de máquina L1

Recordemos que esta organización multinivel permite a su vez atacar el complicado problema de
relacionar humanos con computadoras de una manera paulatina.

 La idea es que cada capa se construya con las capacidades


capacidades provistas por la capa inferior.
 A su vez, cada capa proveerá de mayores capacidades a las capas superiores.

Prof. Rearte, Judith


3/12
I.T.S.C.– Máquinas virtuales
Técnico Superior en Desarrollo de Software Programación II

MÁQUINAS CONTEMPORANEAS
EAS

La organización multinivel de una máquina contemporánea se compone de dos o más niveles.Más aun,
no ha de resultar llamativo que abarque hasta seis o incluso más niveles.
Nuestro repaso de los distintos niveles que usualmente componen estas máquinas comienza a nivel del
hardware (unn electrónico estaría en condiciones de concebir incluso varias capas adicionale
adicionales por debajo)

• Nivel de lenguajes orientados


Nivel 5 a Programas
Traducción (compilador)
• Nivel de lenguaje
Nivel 4 ensamblador
Traducción (ensamblador)
• Nivel de máquina del sistema
Nivel 3 operativo
Interpretación parcial (sistema
• Nivel de máquina del sistema operativo)
Nivel 2 convencional
Interpretación (microprograma)
• Nivel de microprogramación
Nivel 1
Los microprogramas son ejecutados
directamente por el hardware
• Nivel de lógica digital
Nivel 0

 Nivel 0 (la máquina real, no virtual):


o Este es el nivel de corte de nuestro análisis, por debajo existen otros niveles cuyo estudio
en detalle corresponde a otras ramas de la ciencia.
o Está compuesto del conjunto de compuertas lógicas que implementa cada uno de las la
unidades funcionales que conforman la computadora.
o Cabe destacar que se construye usando componentes analógicos los cuales, sin embargo,
terminan evidenciando un comportamiento digital.

 Nivel 1 (microprogramación):
o Es el verdadero lenguaje máquina, pues en el nivel anterior no existe el concepto de
programa como una secuencia de instrucciones a ser ejecutadas.
o En este nivel corre un programa denominado microprograma el cual es capaz de
interpretar las instrucciones del nivel 2.
o Puede tener más de un intérprete
intérprete corriendo en este nivel, y naturalmente cada uno
definirá un nuevo lenguaje de nivel 2 junto con su correspondiente máquina virtual.

Prof. Rearte, Judith


4/12
I.T.S.C.– Máquinas virtuales
Técnico Superior en Desarrollo de Software Programación II

Microprogramación
Recordemos a su vez que la técnica de microprogramación floreció en la época en la que
la memoria principal era muy lenta.
 En ese contexto contar con un set de instrucciones complejo permitía generar
programas más compactos y con menor requerimiento de ancho de banda.
 Este tipo de arquitectura se denomina justamente Complex Instruction Set
Computer (CISC).
 La familia Intel x86 es posiblemente el ejemplo más conocido de arquitectura
CISC

Finalmente, la utilidad de la microprogramación empezó a ceder de la mano de dos


avances:
 Por un lado el crecimiento exponencial de la cantidad de transistores disponibles
permitió implementar en hardware más y más funcionalidad del nivel 2.
 Naturalmente el mayor impacto vino de la mano de la mejora en el desempeño de
la memoria principal.

Por esto, en la actualidad se opta por simplificar el set de instrucciones, dando a lugar a lo
que hoy en día se conoce como arquitecturas RISC ( Reduced Instruction Set Computer,
Computador con Conjunto de Instrucciones Reducidas) .

 Nivel 2 (máquina convencional):


o Este es el primer nivel al alcance del programador, más allá de que el
verdadero lenguaje máquina sea el provisto por el nivel inmediato inferior.
o Es posible que un mismo HW soporte múltiples máquinas convencionales (a
través de múltiples intérpretes corriendo en el nivel anterior).
o En las computadoras de tipo RISC se ejecutan las instrucciones de este nivel
directamente en HW, es decir, no cuentan con la capa de microprogramación.

 Nivel 3 (sistema operativo):


o Se trata de un nivel híbrido, gran cantidad de las instrucciones de este nivel son
las mismas que las del nivel inmediato inferior.
o Existen muchas más variantes de máquinas en este nivel que en los niveles
anteriores.
o Las nuevas facilidades provistas por este nivel fueron incorporadas por un
intérprete llamado sistema operativos por razones históricas como veremos.
o En este nivel aparece la posibilidad de correr dos o más programas en simultáneo

Existe una separación fundamental entre los niveles 3 y 4:

 A diferencia de los niveles superiores, los niveles 1, 2 y 3 no fueron diseñados para ser usados
directamente por el programador de aplicaciones.
 Los primeros tres niveles tiene por objeto sustentar a los intérpretes necesarios para que las
máquinas virtuales de nivel superior funcionen correctamente.
 Los encargados de implementar estos programas se denominan programadores de sistema.

Prof. Rearte, Judith


5/12
I.T.S.C.– Máquinas virtuales
Técnico Superior en Desarrollo de Software Programación II

 Nivel 4 (lenguaje ensamblador):


o Este es el primer nivel en donde se hace uso de los programas traductores.
o Por otra parte, es el primer nivel que cuenta con un lenguaje simbólico (los
niveles inferiores sólo cuentan con un lenguaje numérico, compuesto de 1s y 0s).
o Este cambio hace que el nivel 4 sea el primer nivel inteligible por personas.
o El programa encargado de traducir los programas de este nivel se denomina
ensamblador

 Nivel 5 (lenguajes de alto nivel):


o Este nivel está compuesto
compuesto por los distintos lenguajes de programación de alto
nivel, tales como Java, Pascal, C y C# entre otros.
o Nótese que como es usual cada lenguaje define una máquina virtual diferente.
o Los programas escritos en estos lenguajes suelen ser traducidos a instrucciones
inst de
los niveles 3 o 4 mediante compiladores, si bien también existen algunos
lenguajes de programación que son directamente interpretados.

ARQUITECTURA

USUARIO FINAL (no programa)

•Aplicaciones dedicadas
Nivel •Traducidos (bases de datos, juegod....)
6
•Lenguajes Evolucionados
Nivel •Traducidos (compiladores)
5
•Lenguaje ensamplador
Nivel •Traducidos (prog. ensamblador)
4
•Nucleo (Kernel) del sistema Operativo
Nivel •Interprete Parcial (programa del S.O.)
3
•Lenguaje máquina (convencional)
Nivel •Interprete. Microprograma intérprete.
2
•Microprograma
Nivel •El microprograma es ejecutado
directamente por el hardware.
1
Nivel •Hardware / circuitos digitales

0
Prof. Rearte, Judith
6/12
I.T.S.C.– Máquinas virtuales
Técnico Superior en Desarrollo de Software Programación II

MODELOS DE CADA NIVEL

 Cada nivel puede ser descrito desde el punto de vista funcional, estructural y de realización práctica.

– Modelo funcional o de caja negra: describe la función del sistema, sus acciones sobre el
entorno y sus reacciones a éste.
– Modelo estructural: describe la organización del sistema como conjunto de partes
relacionadas.
– La realización práctica de cada modelo puede llevarse a cabo de modos muy diferentes.

 A un mismo modelo funcional pueden corresponder distintos modelos estructurales.


 Los modelos se emplean con el fin de aplicarlos en la práctica y resolver un determinado problema

FORMAS DE CREAR LA MÁQUINA VIRTUAL L2

 Por TRADUCCION: Un programa traductor ejecutándose en el nivel 1 transforma sentencias de L2


en una o más (equivalentes) de L1. Luego se ejecuta el programa transformado directamente en L1.
 Una traducción  N ejecuciones.
 2 versiones del mismo algoritmo (L1 y L2).

 Por INTERPRETACION: Un programa intérprete ejecutándose en el nivel L1 busca, decodifica y


ejecuta las sentencias de L2.
 Cada re-ejecución del programa L2  nueva interpretación.

Máquina
Programa Virtual
L2 + Datos Resultados

Trad. o Inter

 La idea puede extenderse a varios niveles.


 Programador de aplicaciones Niveles altos
 Programador de sistemas Niveles bajos

Prof. Rearte, Judith


7/12
I.T.S.C.– Máquinas virtuales
Técnico Superior en Desarrollo de Software Programación II

PRODUCCIÓN Y EJECUCIÓN DE EJECUTABLES

Fichero objeto / ejecutable Espacio Lógic


Fuente AN

{ 0A
int i, j;
cabecera 00
i = i + j;
} 0001
00
datos inicializador 00
00
datos no inicializados
2 00
00
.data código 2
1 BB
.byte i, 0
Fuente LE

.byte j, 0 A3000001CDB0 00
.code 0 00
ini:
addb i, i, j
jmppc_so
.end ini

OBJETOS Y EJECUTABLES

compilador
Objeto 0
Unidad
Unidas fuente
fuente
D0 dato
C0
D2
Objeto 1 D1
Unidas fuente compilador D0
D1 Enlazador
C1 C2
C1
Objeto 2 C0
compilador
Unidas fuente D2
C2 dato

Prof. Rearte, Judith


8/12
I.T.S.C.– Máquinas virtuales
Técnico Superior en Desarrollo de Software Programación II

VINCULADOR (Linker, Link-editor)

 No cambia de nivel (no traduce ni interpreta)


 Más rápido que el ensamblador, lo que facilita la programación modular.
 Tareas:
 reubicación (si se juntan varios módulos).
 dirección reubicada = dirección reubicable + DIC.
 resolución referencias externas.
 Creación de archivo cargable, con información añadida de reubicación para el
cargador.

CARGADOR (loader)

 Busca el ejecutable en almacenamiento (disco, red, etc.), y lo carga en memoria.


 Resuelve las reubicaciones dinámicas.
 Inicializa algunos registros (p.ej.: SP).
 Inicializa el contador de programa, y transfiere el control del procesador al programa
cargado.

EJEMPLO

Ejemplos de diferentes tipos de lenguajes basados en:

Una rutina que calcula e imprime la suma de los cuadrados de los enteros entre 0 y 100.

 Ejemplo para lenguaje de máquina MIPS

00100111101111011111111111100000
10101111101111110000000000010100
10101111101111110000000000010100
10101111101111110000000000010100
10101111101111110000000000010100
10101111101111110000000000010100
10101111101111110000000000010100


 Ejemplo para lenguaje assembler de MIPS

.text
.aligm 2
|.globl main

Prof. Rearte, Judith


9/12
I.T.S.C.– Máquinas virtuales
Técnico Superior en Desarrollo de Software Programación II

main;
subu $sp. Ssp. 32
sw $ra 20($sp)
sd $a0. 32($sp)
sw $a. 24($sp)
sw $a. 28($sp)

Toop
lw $t6. 28($sp)
mul $t7. $t6, $t6
lw $t8. 24($sp)
addu $t9. $t8. $st7
sw $t9. 24($sp)
addu $t0. $st6.l
sw $t0. 28(sp)
ble $t0. 100. loop
la $a0. str
lw $a1. 24($sp)
jal printf
move $v0. $0
lw $ra. 20($sp)
addu $sp. $sp. 32
ir $ra.

.data
.aling 0
str:
.asciiz ‘The sum from 0 .. 100 is %d\n’

 Lenguaje de alto nivel

#include<stdio.h>
int main( intargc, char *argv[])
{
int i;
int sum = 0;
for (i=0; i<100; i+1)
sum = sum + i * i ;
printf("Sum 0 .. 100 is %d\n",sum);
}

Prof. Rearte, Judith


10/12
I.T.S.C.– Máquinas virtuales
Técnico Superior en Desarrollo de Software Programación II

UNIDAD CENTRAL DE PROCESO


OCESO

Archivo Archivo Fuente Archivo Fuente


Fuente

Assembler
Assembler Assembler

Archivo Objeto
Archivo Objeto Archivo Objeto
Biblioteca

Vinculador

Archivo Ejecutable

Archivo Fuente

Compilador

Assembler

Vinculador

Archivo Ejecutable

Prof. Rearte, Judith


11/12
I.T.S.C.– Máquinas virtuales
Técnico Superior en Desarrollo de Software Programación II

LENGUAJES INTERMEDIOS

Lenguaje intermedio es el lenguaje de una máquina abstracta diseñada para ayudar en el análisis de los
programas de computadora. El término viene de su uso en los compiladores, donde un compilador
primero traduce el código fuente de un programa, en una forma más apropiada para las transformaciones
de mejora del código (forma usualmente llamada byte code), como un paso intermedio antes de generar
el archivo objeto o el código máquina para una máquina específica.
Una variante del significado de "lenguaje intermedio" se da en esos lenguajes de alto nivel que no
soportan o no generan un archivo objeto o código máquina, pero sí generan un lenguaje intermedio.
Luego ese lenguaje intermedio se transfiere a un compilador que termina de realizar el archivo objeto o
el código máquina. Esto se emplea generalmente por cuestiones de optimización y portabilidad

Cada una de estas etapas tiene como principal objetivo:


 Verificar que el programa fuente está exento de errores.
o Cuando llegamos al bloque de síntesis podemos asegurar que el programa no tiene
errores.
o Si tiene errores no tiene sentido realizar el proceso de síntesis

VENTAJAS DE GENERAR CÓDIGO INTERMEDIO

 Facilita la redestinación:
o Permite crear compiladores para máquinas distintas reutilizando las etapas iniciales.
 Hace que el optimizador de código pueda ser independiente de la máquina destino
 Posibilidad de aplicar optimización al Código Interno.

Prof. Rearte, Judith


12/12

S-ar putea să vă placă și