Documente Academic
Documente Profesional
Documente Cultură
– Máquinas virtuales
Técnico Superior en Desarrollo de Software Programación II
INTRODUCCION
• Una computadora es una máquina que puede resolver problemas ejecutando las instrucciones
que le son indicadas mediante un programa.
• El lenguaje coloquial empleado por las personas difiere considerablemente del empleado por
las máquinas.
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
Existen esencialmente dos mecanismos que nos permiten vincular a los niveles entre sí:
MECANISMO DE TRADUCCIÓN
MECANISMO DE INTERPRETACIÓN
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.
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.
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
• 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.
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 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.
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
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) .
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.
ARQUITECTURA
•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
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.
Máquina
Programa Virtual
L2 + Datos Resultados
Trad. o Inter
{ 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
CARGADOR (loader)
EJEMPLO
Una rutina que calcula e imprime la suma de los cuadrados de los enteros entre 0 y 100.
00100111101111011111111111100000
10101111101111110000000000010100
10101111101111110000000000010100
10101111101111110000000000010100
10101111101111110000000000010100
10101111101111110000000000010100
10101111101111110000000000010100
…
…
Ejemplo para lenguaje assembler de MIPS
.text
.aligm 2
|.globl main
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’
#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);
}
Assembler
Assembler Assembler
Archivo Objeto
Archivo Objeto Archivo Objeto
Biblioteca
Vinculador
Archivo Ejecutable
Archivo Fuente
Compilador
Assembler
Vinculador
Archivo Ejecutable
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
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.