49289218 antologia de pro todo
TRANSCRIPT
-
7/31/2019 49289218 Antologia de Pro Todo
1/44
ANTOLOGIAPROGRAMACION
DE SISTEMASUNIDADES 5,6,7,8
ALUMNOS: AMAN JOACHIN PALAFOX
MELCHOR NOVELO HERNANDEZ
LUIS JILBERTO ACOSTA MENDEZ
MIGUEL MORENO CHAMIZ
2010
INSTITUTO TECNOLOGICO SUPERIOR DE CHAMPOTON
14/12/2010
-
7/31/2019 49289218 Antologia de Pro Todo
2/44
PROGRAMACION DE SISTEMAS
2
INDICE
Unidad 5: Anlisis semntico.................................................................................................... 4
Semntica de instrucciones condicionales..................................................................... 5
Semntica de etiquetas y GOTO ..................................................................................... 6
5.1 ANALIZADOR SEMNTICO.......................................................................................... 7
5.2 VERIFICACIN DE TIPOS EN EXPRESIONES........................................................ 8
5.3 CONVERSIN DE TIPOS............................................................................................ 11
5.4 Acciones agregadas en un analizador sintctico descendente (top-down).......... 14
5.5 Pila semntica en un analizador sintctico ascendente (bottom-up). ................... 15
5.6 Administracin de la tabla de smbolos ...................................................................... 16
5.7 Manejo de errores semnticos. ................................................................................... 20
6. GENERACION DE CODIGO INTERMEDIO ................................................................... 24
6.1Generador de cdigo intermedio .................................................................................. 24
6.2 Notaciones ...................................................................................................................... 25
6.2.1Infija ........................................................................................................................... 25
6.2.2 Postfija...................................................................................................................... 25
6.2.3 Prefija ....................................................................................................................... 25
6.3 Representacin de cdigointermedio ......................................................................... 26
6.3.1 Notacin Polaca...................................................................................................... 26
6.3.2 Cdigo P .................................................................................................................. 26
6.3.3 Triplos....................................................................................................................... 26
6.3.4 Cudruplos .............................................................................................................. 27
6.4 Esquemas de generacin............................................................................................. 276.4.1 Expresiones............................................................................................................. 27
6.4.2 Declaracin de variables,constantes................................................................... 27
6.4.3 Estatuto de asignacin .......................................................................................... 27
6.4.4 Estatuto condicional ............................................................................................... 28
6.4.5 Estatuto de ciclos.................................................................................................... 28
6.4.6 Arreglos .................................................................................................................... 28
6.4.7 Funciones ................................................................................................................ 28
7. Optimizacin ......................................................................................................................... 29
-
7/31/2019 49289218 Antologia de Pro Todo
3/44
PROGRAMACION DE SISTEMAS
3
7.1. Tipos de Optimizacin.................................................................................................. 29
7.1.1. Locales .................................................................................................................... 29
7.1.2. Globales .................................................................................................................. 30
7.1.3 Bucles....................................................................................................................... 31
7.1.4 De mirilla .................................................................................................................. 31
7.2. Costos............................................................................................................................. 31
7.2.1. Maquinas Virtuales................................................................................................ 31
7.2.2. Criterios de Mejoramiento .................................................................................... 33
7.2.3 herramientas para el anlisis del flujo de datos................................................. 33
8. Generacin de cdigo objeto. ............................................................................................ 34
8.1 Lenguaje mquina. ........................................................................................................ 34
8.1.1 Caractersticas ...................................................................................................... 36
8.1.2 Direccionamiento ................................................................................................. 37
8.2 Lenguaje ensamblador ................................................................................................. 38
8.2.1 Caractersticas ........................................................................................................ 38
8.2.2 Almacenamiento ..................................................................................................... 39
8.3 Registros........................................................................................................................ 39
8.3.1 Distribucin .............................................................................................................. 41
8.3.2 Asignacin ............................................................................................................... 41
8.4 Administracin de memoria .......................................................................................... 42
Bibliografa................................................................................................................................. 43
-
7/31/2019 49289218 Antologia de Pro Todo
4/44
PROGRAMACION DE SISTEMAS
4
INTRODUCCION
En esta investigacin de las ultimas unidades de la materia se estudiara laforma en la que debemos utilizar algunas mtodos a la hora de la elaboracinde un lenguaje para la programacin, la cual tiene que cumplir con las
necesidades de un programador y que dicho lenguaje funcione correctamente ypueda cumplir con las expectativas del programador as como del programa aelaborar en dicho lenguaje y cumplir con las caractersticas de un lenguaje deprogramacin.
Algunos de los temas que se abordaran en esta investigacin son anlisissemntico que se ayudara en la verificacin de la semntica utilizada en unlenguaje as como de igual manera en otros aspectos de igual importancia enun compilador de lenguaje, tambin en la optimizacin del lenguaje para vercon que este va a trabajar, como la generacin de cdigo objetos q interpreta ointerpretaran diferentes formas como la interaccin con el lenguaje mquina ya su vez en lenguaje ensamblador.
-
7/31/2019 49289218 Antologia de Pro Todo
5/44
PROGRAMACION DE SISTEMAS
5
Unidad 5: Anlisis semntico
Se compone de un conjunto de rutinas independientes, llamadas por losanalizadores morfolgico y sintctico.
El anlisis semntico utiliza como entrada el rbol sintctico detectado por elanlisis sintctico para comprobar restricciones de tipo y otras limitacionessemnticas y preparar la generacin de cdigo.
En compiladores de un solo paso, las llamadas a las rutinas semnticas serealizan directamente desde el analizador sintctico y son dichas rutinas lasque llaman al generador de cdigo. El instrumento ms utilizado paraconseguirlo es la gramtica de atributos.
En compiladores de dos o ms pasos, el anlisis semntico se realizaindependientemente de la generacin de cdigo, pasndose informacin atravs de un archivo intermedio, que normalmente contiene informacin sobreel rbol sintctico en forma linealizada (para facilitar su manejo y hacer posiblesu almacenamiento en memoria auxiliar).
En cualquier caso, las rutinas semnticas suelen hacer uso de una pila (la pilasemntica) que contiene la informacin semntica asociada a los operandos (ya veces a los operadores) en forma de registros semnticos.
Semntica de instrucciones condicionales
Sean las reglas ::= If S2 then S1 |
If S2 then else S3 S1
Una secuencia de cudruplas equivalente a "If E1 then I1 else I2"
(p-1) (?,?,?,t1) Anlisis de E1(p) (TRZ,(q+1),t1,) S2: Crear cudrupla (p) | Push p
... Anlisis de I1(q) (TR,(r),,) S3: Crear cudrupla (q)
Poner (cl.sig.) en top | PopPush (q)(q+1) ... Anlisis de I2(r) S1: Poner (cl.sig.) en top | Pop
Una secuencia de cudruplas equivalente a "If E1 then I1"
(p-1) (?,?,?,t1) Anlisis de E1(p) (TRZ,(r),t1,) S2: Crear cudrupla (p) | Push p
... Anlisis de I1(r) S1: Poner (cl.sig.) en top | Pop
-
7/31/2019 49289218 Antologia de Pro Todo
6/44
PROGRAMACION DE SISTEMAS
6
Al generar la cudrupla (p) no conocemos el valor de (q). Guardamos en unapila el nmero de la cudrupla asociada y lo rellenamos ms tarde, comoindican los ejemplos.
Semntica de etiquetas y GOTO
Suponemos que las etiquetas aparecen en la tabla de smbolos con tresvalores asociados: (tipo=etiqueta, bit=declarada/no declarada, nmero decudrupla).
Sea la regla
::= id :
Semntica asociada:
{Buscar id en la tabla de smbolos;if (no est)
Insertar id,valor=(etiqueta, declarada, cudrupla siguiente);else {
if (tipo==etiqueta && bit==no declarada) {i=nmero de cudrupla;while (i) {j=cudrupla[i][2];cudrupla[i][2]=cudrupla siguiente;i=j;}
Cambiar valor a (etiqueta, declarada, cudrupla siguiente);}
else error();}
}
Sea la regla
::= GOTO id
Semntica asociada:
{Buscar id en la tabla de smbolos;if (no est) {
Insertar id,valor=(etiqueta, no declarada, cudr.siguiente);Generar cudrupla (TR,,,);}
else {if (tipo==etiqueta) {
if (bit==declarada)Generar cudrupla (TR,nmero de cudrupla,,);
-
7/31/2019 49289218 Antologia de Pro Todo
7/44
PROGRAMACION DE SISTEMAS
7
else if (bit==no declarada) {i=nmero de cudrupla;Cambiar valor a (etiqueta, no declarada, cudr.siguiente);Generar cudrupla (TR,i,,);}
}else error();}
}
Si se permiten etiquetas locales a bloques, podemos encontrar el siguientecaso:
L: ...{
...
GOTO L;...
Tenemos ambigedad: GOTO L puede ir a la etiqueta externa (ya definida ono) o a una etiqueta local al bloque posterior a la instruccin. Tenemos tresposibilidades:
Un compilador en dos pasos.
Forzar declaraciones de etiquetas.
Tratar L en el bloque como si fuera local. Si al final del bloque descubrimos queno ha sido declarada, tratarla como si fuera global. La lista de referenciasdebera fundirse con la de L global (si L global no ha sido definida an) orellenarse con el valor de L (si ya ha sido definida). Si L global no existe, debecrearse, y pasarle la lista de referencias de L local.
5.1 ANALIZADOR SEMNTICO
Ajuste significativoComprobacin de tipos: operandos-operadoresComprobacin del flujo de control:
for (;;)}break;w= a+2;{
Comprobacin de unicidadint a;
-
7/31/2019 49289218 Antologia de Pro Todo
8/44
PROGRAMACION DE SISTEMAS
8
char a; //una sola vezComprobacin relacionada con nombres
Tabla de smbolos: Estructura en memoria
Almacena informacin sobre los tiposSistemas de tipo:Tipo bsico: entero, carcter, real, lgicoNombres de tipo
Constructores de tipo: estructuras, uniones, ObjetosApuntadores: referencias a tiposFunciones a=suma ();Sistema de tipos: conjunto de reglas que determinan el criterio paraasignar expresiones de tipo a las diferentes partes del cdigo fuente.
Cada analizador semntico implementa un sistema de tiposComprobacin dinmica y estticaEsttica: compilacinDinmica: Ejecucin char a [5]; strcpy(a, abcdefghijk);
Fuertemente tipificadoDbilmente tipificado Smbolo
}nombre;tipo ;mbito;{
5.2 VERIFICACIN DE TIPOS EN EXPRESIONES
Se emplean para establecer el tipo de una construccin del lenguaje; estapuede ser o un tipo simple (predefinido por el lenguaje), o estar formado por laaplicacin del operador especial llamado constructor de tipos a otrasexpresiones de tipos.
Tipos simples.- Son los tipos predefinidos por el lenguaje. Como por ejemploint, float, double
Nuevos tipos simples.- En algunos lenguajes es posible definir nuevos tipossimples. Estos nuevos tipos simples suelen ser subintervalos de tipos simples olos tipos enumerated.
Tipos estructurados.- Son tipos creados por constructores de tipo, tales comoarray, record o struct. Tales constructores toman los tipos ya creados como
parmetros y devuelven nuevos tipos con una estructura que depende delconstructor.
-
7/31/2019 49289218 Antologia de Pro Todo
9/44
PROGRAMACION DE SISTEMAS
9
- Array: Toma dos parmetros de tipo el tipo ndice y el tipo componente. Paratener acceso a un componente del tipo array, se hace uso del ndice. Confrecuencia existen restricciones acerca de los tipos que se pueden presentarcomo tipos ndice. Normalmente los tipos que se utilizan son ordinales, para los
cuales hay un predecesor y un sucesor. Una complicacin de estos tipossuelen ser los tipos multidimensionales.
- Record: Un constructor de este tipo toma una lista de nombres y tiposasociados construyendo un nuevo tipo. Para tener acceso a un componente deltipo record se hace uso del nombre del componente al cual se quiere acceder.
- Pointer: Si T es una expresin de tipo, pointer (T) es una expresin de tipoque indica un apuntador a un objeto T.
Nombres de tipo.- Son alias que se le pueden dar a los tipos.
Inferencia y verificacin de tipos
La inferencia y verificacin de tipos se realizan teniendo en cuenta tresacciones, las declaraciones las sentencias y las expresiones.Las declaraciones causan que el tipo de un identificador se introduzca en latabla de smbolos, asocindole un tipo al mismo.
Ej;i : intse corresponde con la regla gramatical:var-decl id : tipo-expy la accin semntica asociadainsert (id.name, tipo-exp.type)que aade un identificador en la tabla de smbolos y le asocia un tipo.
Las sentencias no tienen tipos en s mismas sino subestructuras que esnecesario verificar en cuanto a la exactitud del tipo
Ej;If expresin then sentenciaSe corresponde con la regla gramatical:Sent if exp then sent
Y la accin semntica asociadaIf not typeEqual (exp.type, bolean) then type-error (sent)que lo que hace es comprobar que exp es de tipo booleano, y si no es
as enva un error.Las expresiones constantes como nmeros y valores bolanos, tienen
los tipos implcitamente definidos. Los nombres de variables tienen sus tiposdeterminados mediante una bsqueda en la tabla de smbolos. Lassubexpresiones tienen que ser del tipo correcto para la operacin indicada enla expresin.
Ej;- sent id:= exp
Provoca la accin semnticaIf not typeEqual (lookup(id.name),exp.type) then type-error (sent)
-
7/31/2019 49289218 Antologia de Pro Todo
10/44
PROGRAMACION DE SISTEMAS
10
- exp1 exp2 or exp3
Provoca la accin semnticaIf not (typeEqual (exp2.type, boolean) and typeEqual (exp3.type,Boolean)) then type-error (exp1);
Equivalencias de expresiones de tipo
En el apartado anterior hemos utilizado la funcin typeEqual (t1,t2: TypeExp) :boolean. Todo verificador de tipos debe saber cuando dos expresiones de tiporepresentan al mismo tipo, y de eso es de lo que se encarga esta funcin.La equivalencia de tipos se puede explicar haciendo uso de los conceptos deequivalencia estructural y equivalencia de nombre. El anlisis se hace medianteuna representacin de grafos de las expresiones de tipos, con hojas para lostipos bsicos y nodos interiores para los constructores de tipo.
Ejemplo;La expresin de tipo:RecordX: pointer to realY: array [10] of inEndEsta expresin se puede representar mediante el rbol sintctico.
Record
Var
(x)
Pointer
IntReal
Array (10)
Var
(y)
-
7/31/2019 49289218 Antologia de Pro Todo
11/44
PROGRAMACION DE SISTEMAS
11
Ya que las expresiones de tipos se construyen a partir de tipos bsicos yconstructores, una nocin natural de equivalencia entre dos expresiones detipos es la equivalencia estructural; es decir dos expresiones son, o bien elmismo tipo bsico, o estn formadas aplicando el mismo constructor a tiposestructuralmente equivalentes.Dada la siguiente gramtica:
P D ; ED D ; DD id : TT char
T integerT T1
T array [ nm ] of T1
La verificacin de los tipos de datos se hace asignando el valor de tipode cada una de los componentes lxicos.Estos valores se comparan para verificar que los tipos de datoscoincidan y sean congruentes, de lo contrario no se pueden realizar losclculos.
5.3 CONVERSIN DE TIPOS
En ciencias de la computacin la conversin de tipos (type casting en ingls) se
refiere a la transformacin de un tipo de dato en otro. Esto se hace para tomar
las ventajas que pueda ofrecer el tipo a que se va a convertir. Por ejemplo, los
valores de un conjunto ms limitado, como nmeros enteros, se pueden
almacenar en un formato ms compacto y ms tarde convertidos a un formato
diferente que permita las operaciones que anteriormente no eran posibles, talescomo la divisin con decimales.
Hay dos tipos de conversin: la implcita y la explcita. En la implcita se
convierte un tipo de dato de menor rango a un supertipo (tipo de dato de mayor
rango); este tipo de conversin lo realiza el compilador, ya que no hay prdida
de datos si, por ejemplo, se pasa un int (tipo entero) a long.
En la conversin explcita, el compilador no es capaz de realizarla por s solo y
por ello debe definirse explcitamente en el programa.
Existen varios tipos de conversin explcita:
-
7/31/2019 49289218 Antologia de Pro Todo
12/44
PROGRAMACION DE SISTEMAS
12
controlada: antes de realizar la conversin se controla en tiempo de
ejecucin si el tipo de destino puede tener el valor de origen, y si no
se produce un error.
no controlada: no se realiza ningn control, si el tipo de dato destino
no puede contener al de origen el resultado es indefinido(generalmente se produce un desbordamiento de bfer y en algunos
casos como en java el cambio se produce sin mayores
consecuencias).patrn de bits: La representacin de bits en bruto de la fuente es una copialiteral, y se reinterpreta de acuerdo con el tipo de destino. Esto tambin puedelograrse a travs de aliasing.
Hay situaciones en las cuales se tiene un valor de un tipo dado y sedesea almacenar ese valor en una variable de un tipo diferente.En algunos tipos es posible almacenar simplemente el valor sin unaconversin de tipos; lo que se denomina conversin automtica.
Esto slo es posible en algn lenguaje de programacin, si el compiladorreconoce que la variable destino tiene la suficiente precisin paracontener el valor origen.En Java se puede almacenar un valor byte en una variable int, dado queeste tipo de datos es de mayor precisin que el primero.
A esto se le llama ensanchamiento o promocin, dado que el tipo mspequeo se ensancha o promociona al tipo compatible ms grande. Sipor el contrario, se desea asignar un valor de variable int a una variablebyte se necesita realizar una
Conversin de tipos explcita.En algunos casos se puede realizar la conversin pero se pueden perderdatos, como por ejemplo al pasar un valor flotante a un entero.A esto se le llama estrechamiento, dado que se estrecha explcitamenteel valor para que quepa en el destino.
La conversin de un tipo se realiza poniendo delante un nombre de tipoentre parntesis, por ejemplo, (tipo) valor.byte a; int b; a=(byte) b;Existen dos tipos de comprobacin: esttica y dinmica.La comprobacin ayuda a evitar la mayora de los errores deprogramacin. Ejemplos:Comprobacin de tipos. Para saber si el operador aplicado a losoperadores es correcto
Comprobacin de flujo de control. Se debe verifica que las instruccionesque cambia el flujo de un programa sean vlidos. Ejemplo: break, goto.Comprobacin de unicidad: definir un objeto una sola vez.
-
7/31/2019 49289218 Antologia de Pro Todo
13/44
PROGRAMACION DE SISTEMAS
13
Comprobacin relacionadas con nombres. El mismo nombre debeaparecer dos veces. Variables que se declaran pero no utilizan.La comprobacin de tipos es la ms complicada. Las demscomprobaciones son rutinarias.El operador % ocupa que los dos operandos sean enteros.
es una funcin suma(a,b) que est sobrecargada para distintos tipos dedatos.
Siempre se disean reglas de tipos como los valores numricos seconvierten al de mayor jerarqua o el tipo de datos punteros slo apuntaal tipo de datos declarado.Algunos lenguajes revisan el tamao de los arreglos (Java) de maneraesttica otros lo hacen de manera dinmica (en tiempo de ejecucin).
Diferenciar el uso de +, * enteros que con puntero (aritmtica depunteros)
Al conjunto de reglas que se definen para la comprobacin de los tiposde datos se denomina sistema de tiposLa mayora de veces la recuperacin de errores se l suele omitir ya queel programa no finaliza pero tal vez no obtenga los valores deseados.
Generalmente en la etapa de anlisis sintctico se suelen agregar lostipos a la tabla de smbolos.Se revisa el rbol sintctico para comprobar los tipos asignados.Existen conversiones explcitas en las cuales el usuario indica el tipo dedatosa = (int)(23.3/18.2);Las conversiones implcitas requieren de mayor tiempo de ejecucin.Un ciclo de 1 a N tard 5.4 y 48.4 nanosegundos utilizando conversionesimplcitas.
Polimorfismo: una funcin puede tener el mismo nombre con diferenteselementos. El tipo de datos debe ser diferente.Un ejemplo de polimorfismo son las plantillas en algn lenguaje deprogramacin.Se debe considerar el mbito de las variables (locales y globales).
Conversin de tipos
Una extensin comn de las reglas de tipo de un lenguaje es permitirexpresiones aritmticas de tipo mezclado tal como 2 + 3.1 donde se suman unnmero real y un nmero entero. En tales casos, debe hallarse un tipo comnque sea compatible con todos los tipos de las subexpresiones y debenaplicarse operaciones para convertir los valores en tiempo de ejecucin a lasrepresentaciones apropiadas antes de aplicar el operador. En el ejemploanterior el entero 2 debera convertirse a punto flotante antes de la suma, y la
expresin resultante ser del tipo suma. Existen dos formas que un lenguajepueda tomar para tales conversiones.
-
7/31/2019 49289218 Antologia de Pro Todo
14/44
PROGRAMACION DE SISTEMAS
14
Una forma que el programador suministrase la funcin de conversin demanera que ejemplo anterior sera FLOAT(2) + 3.1 o se causar un error detipo.El otro mtodo consistira en que el verificador de tipo suministre la operacinde conversin de manera automtica, basndose en los tipos de las
subexpresiones. Las conversiones automticas se conocen como coercin. Lacoercin se puede expresar de manera implcita mediante el verificador de tipo,ya que el tipo inferido de una expresin cambia a partir de una sobreexpresin.
5.4 Acciones agregadas en un analizador sintctico descendente (top-down)
Muchas de las actividades que realiza un analizador semntico no son
estndares, dependern del objetivo del lenguaje de programacin; porejemplo, en algunas aplicaciones es interesante conocer que los datosestn en algn rango vlido o que ciertos valores se utilicen para usoreservado
En algunas ocasiones nos interesa conocer el significado de laspalabras de algn lenguaje dependiendo del contexto (gramticas detipo 1) para diferenciar palabras poli semnticas.La Web es una base de datos en la mayora de los casos sin sentidospor lo que la tercera generacin de la Web ser la llamada Websemntica. ntica en un .
En un parser recursivo-descendente, el cdigo de las accionessemnticas es mezclado dentro del flujo de control de las acciones delparser. En un parser especificado en java CC, las acciones semnticasson fragmentos de cdigo de programa en java unido a lasproducciones gramaticales.Cada smbolo terminal y no terminal puede asociarse con su propio tipode valor semntico.
Por ejemplo en la siguiente gramtica para YACC de una calculadorasimple, el tipo asociado con exp e INT podra ser int:
%token INT PLUS MINUS TIMES UMINUS
%start exp%left PLUS MINUS%left TIMES%left UMINIS exp: INT | exp PLUS exp | exp MINUS exp | exp TIMES exp 1MINUS exp %prec UMINUS
Los otros tokens no necesitaran tener un valor.Por otra parte el tipo asociado a un token debe por supuestocoincidir con el tipo de token que el scanner retorne.Para una regla ABCD, la accin semntica debe retornar un
valor cuyo tipo es el asociado al no terminal A. Pero puede
-
7/31/2019 49289218 Antologia de Pro Todo
15/44
PROGRAMACION DE SISTEMAS
15
construir este valor de los valores asociados a los terminales y noterminales B, C, D.
Recursivo-descendente
En un parser recursivo-descendente, las acciones semnticas sonlos valores retornados por las funciones de parsing, o los efectoslaterales de esas funciones o ambos.Por cada smbolo terminal y no terminal, asociamos un tipo(desde el lenguaje de implementacin del LP del compilador) devalor semntico representando frases derivadas desde ese
smbolo.El siguiente programa es un intrprete recursivo descendentepara una parte de la gramtica en la cual eliminamos la recursinpor la izquierda (por conveniencia la volvemos a mostrar):S E$ ET E E+ T E E - T E E lTF T T* F T T/ F T T lF id F num F (E)
5.5 Pila semntica en un analizador sintctico ascendente (bottom-up).
Como fue visto en el capitulo anterior (4), un parser ascendenteutiliza durante el anlisis una pila. En esta va guardando datosque le permiten ir haciendo las operaciones de reduccin quenecesita.Para incorporar acciones semnticas como lo es construir el rbolsintctico, es necesario incorporar a la pila del parser otra
columna que guarde los atributos de los smbolos que se vananalizando.Estos atributos estaran ligados a la correspondiente produccinen la tabla de parsing (consultar seccin 5.3 del libro de Aho,Ullman, Sethi para verms detalles de la implementacin).El diseo ascendente se refiere a la identificacin de aquellosprocesos que necesitan computarizarse con forme vayanapareciendo, su anlisis como sistema y su codificacin, o bien, laadquisicin de paquetes de software para satisfacer el problemainmediato.
-
7/31/2019 49289218 Antologia de Pro Todo
16/44
PROGRAMACION DE SISTEMAS
16
Pila semntica
Los problemas de integracin entre los subsistemas son sumamentecostosos y muchos de ellos no se solucionan hasta que la programacin
alcanza la fecha lmite para la integracin total del sistema.Se necesita una memoria auxiliar que nos permita guardar los datosintermedios para poder hacer la comparacin.
5.6 Administracin de la tabla de smbolos
La tabla de smbolos tambin recibe el nombre de ambiente. Unambiente contiene un conjunto de parmetros que slo son visibles enese ambiente.La tabla de smbolos se mantiene durante todo el proceso de traduccinagregando elementos especficos en cada paso.
Operaciones sobre la tabla de smbolosInserta(smbolo)
Existe(nombre)Tipo(nombre)TIPO {tipo = obtengo (yytext());} Declaracinlistavar PYCvar {inserta(smbolo);} | var Listavar{Inserta (smbolo) ; }ID {simbolo=yytext; smbolo.tipo=tipo; Varsimbolo.amb=ambito;}
Operaciones sobre la tabla de smbolosPI exprlog {A=A;} PD Exprlog
|NOT exprlog {A=A;}|exprlog {A1=A;} OPLOG exprlog
{A2=AIf(A1==INT && A2==INT)A=INT;ElseA=ERROR_TIPO;}
El anlisis semntico conecta las definiciones de las variables con sususos, checa que cada expresin tenga un tipo correcto y traduce la
sintaxis abstracta a una representacin mas simple para generar cdigomquina.
-
7/31/2019 49289218 Antologia de Pro Todo
17/44
PROGRAMACION DE SISTEMAS
17
Esta fase es caracterizada por el mantener la tabla de smbolos(tambin llamada environment) la cual mapea identificadores con sus
tipos y localidades.
Cada variable local en un programa tiene un mbito (scope) dentro del cual es
visible. Por ejemplo, en un mtodo Mini Java m, todos los parmetros formalesy variables locales declarados en m son visibles solo hasta que finalice m.
Un ambiente es un conjunto de atados (bindings) denotados por. Por ejemplo, podemos decir que el ambiente z0 contiene losatados {gstring,aint}, que significa que el identificador a esuna variable entero y g es una variable string.Ejemplo
Suponer que compilamos esta clase en el ambiente z0. Las
declaraciones de campo en lnea 2 nos da la tabla z1 igual a z0 +{aint,bint,cint}. Los identificadores en lnea 4 pueden encontrarse(look up) en ambiente z1. En lnea 5, la tabla o ambiente z2=z1+{jint}es creada; y en lnea 6, z3=z2+{astring} es creada.
Implementacin de la Tabla
Existen dos opciones: El estilo funcional donde cuando z1 existe yz2 es creado, z1 sigue existiendo. Y el imperativo en donde z1 esdestruido al crearse z2. Mientras z2 existe no podemos mirar z1.
Pero al morir z2, z1 de nuevo existe.Mltiple Tablas de Smbolos
En algunos LP pueden existir varios ambientes a la vez: Cadamdulo, o clase o registro en el programa tiene una tabla desmbolos z propia. Ejemplos (ML y Java).
-
7/31/2019 49289218 Antologia de Pro Todo
18/44
PROGRAMACION DE SISTEMAS
18
Al analizar los 2 programas anteriores, sea z0 el ambiente baseconteniendo funciones predefinidas, y sea
z1={aint}
z2={Ez1}
z3={bint,aint}
z4={Nz3}
z5={dint}
z6={Dz5}
z7=z2+z4+z6
En ML, N es compilado usando el ambiente z0+z2 para buscar losidentificadores en la tabla;D es compilado usando z0+z2+z4 y elresultado del anlisis es {Mz7}.En Java, referencias adelantadas son permitidas (dentro de N laexpresin D.d sera legal), asi E,N y D son compilados en elambiente z7.
TABLAS DE SIMBOLOS EN LENGUAJES IMPERATIVOS
Un programa grande puede contener miles de distintosidentificadores. Esto hace que la bsqueda en la tabla (loock up)tenga que ser eficiente.En ambientes imperativos usualmente se usan tablas dedispersin. La operacin z=z+{at} es implementada insertandot en la tabla de dispersin usando la llave a. Una tabla dedispersin con encadenamiento externo funciona bien y soportaeliminacin fcil de at para recuperar z al final del mbito de a.El siguiente programa implementa una tabla de dispersin. Elbucket i es una lista ligada de todos los elementos cuya llave
genere i mod SIZE.
-
7/31/2019 49289218 Antologia de Pro Todo
19/44
PROGRAMACION DE SISTEMAS
19
Considere z+{at2} cuando z ya contiene at1. La funcin insertdeja at1 en el bucket y pone at2 antes en la lista. Entonces,cuando pop se realiza despus del ambito de a, z es restaurado.
SIMBOLOS
Para evitar comparaciones innecesarias de cadenas podemosconvertir cada cadena a un smbolo, y as todas las diferentesocurrencias de cualquier cadena se conviertan a un mismo objetosmbolo.El mdulo smbolo implementa los smbolos y tiene estaspropiedades:Comparar smbolos por igualdad o por mayor es rpido(comparacin por apuntador o por entero).Extraer una llave hash de tipo entero es rpidoLos ambientes son implementados en la clase Symbol.Tablecomo Tables mapeando Symbols a ligados (bindings).Para eso se manejan ligaduras para diferentes propsitos en elcompilador ligadura para tipos, para variables, para funciones,etc.Entonces, una ligadura es un Objeto.Para implementar la clase Symbol, usaremos el mtodo intern()(java.lang.String), para darnos un objeto nico a partir de unacadena de caracteres.
Para el uso de la tabla de smbolos usaremos java.util.Hashtable.La funcin beginScope recuerda el estado actual de la tabla yendScope restaura la tabla a donde estaba en el mas recientebeginScope que no ha terminado.Cuando la atadura xb es metido a la tabla (table.put(x,b)), x esdispersado a un ndice i, y un objeto binder xb es puesto en lacabeza de la lista ligada para el bucket i.Si la tabla ya tiene una ligadura xb, esto permanecera en elbucket, pero escondido por xb. Esto es importante ya que
soportara la implementacin de undo (beginScope y endScope).Tambin deber existir una pila auxiliar, que muestre en queorden los smbolos son metidos (pushed) a la tabla de smbolos.Cuando xb es encontrado, entonces x es metido a la pila(beginScope). Entonces, para implementar endScope, lossmbolos deben sacarse de la pila.
Por ejemplo, considere la siguiente figura, que muestra un programa ysu tabla de smbolos.
-
7/31/2019 49289218 Antologia de Pro Todo
20/44
PROGRAMACION DE SISTEMAS
20
5.7 Manejo de errores semnticos.
Los errores semnticos son pocos y los que existen no se puedendetectar tan fcilmente.Hasta esta etapa los errores son mostrados a los usuarios. Los demserrores ya son muy difciles de detectar y generalmente se dan entiempo de ejecucin
Algunos problemas se presentan durante la fase de gestin de memoriaal pasar argumentos o al crear la pila semntica.Muchos errores se generan durante la etapa del enlazador, al tratar deobtener cdigo existente de algunas funciones/mtodos ya
implementadas en bibliotecas/APIs
Cuando el checador de tipos detecta un error de tipos o un identificadorno declarado, debe imprimir el mensaje de error y continuar.Esto debido a que normalmente el programador prefiere que ledescriban todos los errores posibles del programa fuente.Esto quiere decir, que si un error de tipos es encontrado, no debeproducirse un programa objeto por parte del compilador.As, las siguientes fases no deben ejecutarse.
Hasta esta etapa (chequeo de tipos), la parte del compilador se conocecon el nombre de front End.
REGISTROS DE ACTIVACION
En casi cualquier LP, una funcin (mtodo) puede tener variableslocales que son creadas cuando se llama la funcin (al entrar a esta).Diferentes invocaciones a la funcin pueden existir a la vez, y cadainvocacin tiene su propia instanciacin de variables.
En el siguiente mtodo de Java
-
7/31/2019 49289218 Antologia de Pro Todo
21/44
PROGRAMACION DE SISTEMAS
21
Una nueva instancia de x es creada (e inicializada por el llamador de f)cada vez que f es llamada. Debido a que existen llamadas recursivas,
muchas de esas x existen simultneamente. Similarmente, una nuevainstancia de y es creada cada vez que el cuerpo f es iniciado.
En muchos LP (incluyendo Pascal, C y java), las variables localesson destruidas cuando una funcin retorna. Ya que las variables
locales son creadas y destruidas en una forma LIFO, podemosusar una pila para manejarlas.
MARCOS DE PILA
Debido a que se trabaja con bloques de datos por funcin unpush y pop no funciona.Entonces la pila es tratada como si fuera un gran arreglo, con unregistro especial- el stack pointer que apunta a una localidad.Todas las localidades despus del apuntador son basura y todaslas que estn antes estn asignadas.El rea en la pila dedicada a las variables locales, parmetros,direccin de retorno y otras variables temporales para una funcines llamada el registro de activacin o marco de pila de la funcin.El diseo de la estructura de los marcos es de acuerdo con laarquitectura y el LP que se compila.Aunque normalmente el constructor de la arquitectura define undiseo de marco standard para todos los compiladores para esaarquitectura.
-
7/31/2019 49289218 Antologia de Pro Todo
22/44
PROGRAMACION DE SISTEMAS
22
Marco de Pila
Los argumentos de entrada son los pasados por el llamador(tcnicamente son parte del marco anterior pero puedenaccesarse usando un desplazamiento del apuntador de marco).
Cuando la funcin actual llama otras funciones, puede usar elespacio de los argumentos de salida para pasar parmetros.La direccin de retorno es creada por la instruccin CALL.Las variables locales tambin tienen su espacio.Las variables mantenidas en registros algunas veces sonsalvadas a memoria.
El Apuntador de Marco (FP)
Suponer que una funcin g() llama la funcin f(a1,an).
Diremos que g es el llamador (caller) y f el llamado (callee). Alentrar a f, el apuntador de la pila (SP) apunta al primer argumentoque g pasa a f. Al entrar, f coloca un marco solo con restar eltamao del marco de el SP.El viejo SP se convierte en el actual FP y el viejo FP es salvadoen el marco.Cuando FP termina, solo copia FP de regreso a SP y regresa elvalor viejo salvado de FP.Si los marcos son siempre del mismo tamao entonces no es
necesario contar con FP y todo se simplifica sumando o restandola constante framesize a SP.
Registros
Por eficiencia, es importante mantener las variables locales,resultados intermedios y otros valores en registros en lugar de lapila de marcos.Si funcin f llama a g y ambas hacen uso de registro r, entonces rdebe ser salvado (dentro de la pila de marcos) antes de que lo
use g y restaurado (desde la pila) despus de que termine g.de quien es responsabilidad de salvar r? de f o g? si lo salva fse dice que r es un registro caller-save; si lo salva g se llamacallee-save.
Pase de Parmetros
Estudios actuales han mostrado que raramente una funcin pasamas de 4 parmetros.Debido a esto, la mayora de las mquinas definen que losprimeros k argumentos (con k=4) se pasan en registros y el restoen memoria.
-
7/31/2019 49289218 Antologia de Pro Todo
23/44
PROGRAMACION DE SISTEMAS
23
Direcciones de Retorno
Si g llama a f, entonces si la instruccin call dentro de g est endireccin a, el lugar de retorno en g es a+1, la siguienteinstruccin del call.
En mquinas modernas la direccin de retorno es pasada a unregistro en lugar de la memoria.En funciones hoja la direccin no necesita ponerse en la pila.
Registros vs. Memoria
Registros siempre deben usarse en asignacin a menos que:La variable sea pasada por referenciaLa variable es accesada por una funcin anidada dentro de lafuncin actual.
El valor es demasiado grande para un registro.La variable es un arreglo, donde es necesario realizar aritmticade direcciones.El registro que contiene la variable es necesitado para otrospropsitos.Existen demasiadas variables locales y valores temporales
Ligas Estticas (Static Links)
En LP que admiten funciones anidadas (Pascal,ML y Java) las
funciones de mas adentro pueden usar variables declaradas enfunciones de mas afuera (Estructuras de Bloque).En el siguiente programa (sig. Diapositiva) la funcin write hacereferencia a la variable de afuera output e indent hace referencia a ny output. Para cumplir con esto, indent debe tener acceso no solo asu propio marco (para i y s) sino tambin a los marcos de show (porn) y prettyprint (por output).Programa de funciones Anidadas
-
7/31/2019 49289218 Antologia de Pro Todo
24/44
PROGRAMACION DE SISTEMAS
24
Existen varios mtodos para solucionar lo anterior:Siempre que una funcin f sea llamada, puede pasarse unapuntador a el marco de la funcin que estticamente encierra a f;este apuntador es la liga esttica.Un arreglo global puede mantenerse, conteniendo -en posicin i -un apuntador a el marco del procedimiento mas recientementeactivado cuyo profundidad de anidamiento esttico es i. Estearreglo es llamado un display.
6. GENERACION DE CODIGO INTERMEDIO
6.1Generador de cdigo intermedio
La administracin de la memoria se da enesta etapa.Se debe considerar tanto la memoria estticacomo dinmica, y en esta seutilizangeneralmente pilas.Los lenguajes intermedios generalmentetienen rboles de derivacin mspequeosque su contraparte original.Se puede representar un rbol sintctico conun Grafo Dirigido As clic (GDA).La notacin postfija es una maneralinealizada de representar un rbolsintctico.
a := b*-c+b*-cabc -*bc -*+=
x := y op zx+y*zt1:=y*zt2:=x+t1
Los lenguajes intermedios nos sirven pararepresentar la produccin final denuestrolenguaje fuente.Existen muchos lenguajes intermedios, la mayora de ellos son unarepresentacinms simplificada del cdigo original parafacilitar la traduccinhacia el cdigo final.Otros lenguajes intermedios sirven de base ocomo representacin parcial de
otrosprocesos.
-
7/31/2019 49289218 Antologia de Pro Todo
25/44
PROGRAMACION DE SISTEMAS
25
Por ejemplo al compilar un programa en C en Windows o DOS, se produce uncdigoobjeto con extensin .obj para queposteriormente el enlazador creefinalmenteel cdigo ejecutable .exe
6.2 NotacionesLas notaciones sirven de base para expresarsentencias bien definidas.El uso ms extendido de las notaciones sirve para expresar operacionesaritmticas.Las expresiones aritmticas se pueden expresar de tres formas distintas: infija,prefija y postfija.
6.2.1InfijaLa notacin infija es la ms utilizada por los humanos porque es la mscomprensible yaque ponen el operador entre los dosoperandos. Por ejemploa+b-5.No existe una estructura simple pararepresentar este tipo de notacin en lacomputadora por esta razn se utilizan otrasnotaciones.
6.2.2 PostfijaLa notacin postfija pone el operador al finalde los dos operandos, por lo quelaexpresin queda: ab+5-La notacin posftfija utiliza una estructura del tipo LIFO (Last In FirstOut) pila, lacual es la ms utilizada para la implementacin.
6.2.3 Prefija
La notacin prefija pone el operador primeroque los dos operandos, por lo quelaexpresin anterior queda: +ab-5. Esto se representa con una estructura deltipo FIFO(First In FirstOut) o cola.Las estructuras FIFO son ampliamente utilizadas pero tienen problemas conelanidamiento aritmtico.
-
7/31/2019 49289218 Antologia de Pro Todo
26/44
PROGRAMACION DE SISTEMAS
26
6.3 Representacin de cdigointermedio
Existen maneras formales para representar cdigo intermedio.Estas notaciones simplifican la traduccin de nuestro cdigo fuente a nuestro
cdigo objeto ya que ahorran y acotan smbolos de la tabla de smbolos
6.3.1 Notacin Polaca
La notacin polaca, tambin conocida como notacin de prefijo o notacinprefija, es una forma de notacin para la lgica, la aritmtica, y el lgebra. Su
caracterstica distintiva es que coloca los operadores a la izquierda de susoperandos. Si la aridad de los operadores es fija, el resultado es una sintaxisque carece de parntesis u otros signos de agrupacin, y todava puede seranalizada sin ambigedad. El lgico polacoJanukasiewicz invent estanotacin alrededor de 1920 para simplificar la lgica proposicional.
Notacin polaca.
6.3.2 Cdigo P
El cdigo P hace referencia a mquinas que utilizan o se auxilian de pilas paragenerar cdigo objeto.En muchos caso la P se asociado a cdigo portable el cual garantiza que elcdigo compilado en una mquina se puedaejecutar en otras.
Para garantizar la portabilidad del cdigo senecesita que el lenguaje esteestandarizadopor algn instituto y que dicho cdigo notenga extensionesparticulares.
6.3.3 Triplos
Las proposiciones de tres direcciones se parecen mucho al ensamblador, elcual es unlenguaje intermedio ms entendible para la mquina.Las estructuras de control (if, switch, while,do-while, for) son realmenteetiquetas gotodisfrazadas.
El problema de utilizar cudruplos radica en que se tienen que colocar losvalorestemporales en la tabla de smbolo.
http://es.wikipedia.org/wiki/L%C3%B3gicahttp://es.wikipedia.org/wiki/Aritm%C3%A9ticahttp://es.wikipedia.org/wiki/%C3%81lgebrahttp://es.wikipedia.org/wiki/Operadorhttp://es.wikipedia.org/wiki/Operandohttp://es.wikipedia.org/wiki/Aridadhttp://es.wikipedia.org/w/index.php?title=Signos_de_agrupaci%C3%B3n&action=edit&redlink=1http://es.wikipedia.org/wiki/Poloniahttp://es.wikipedia.org/wiki/Poloniahttp://es.wikipedia.org/wiki/Poloniahttp://es.wikipedia.org/wiki/L%C3%B3gica_proposicionalhttp://es.wikipedia.org/wiki/Archivo:Prefix-dia.pnghttp://es.wikipedia.org/wiki/L%C3%B3gica_proposicionalhttp://es.wikipedia.org/wiki/Poloniahttp://es.wikipedia.org/wiki/Poloniahttp://es.wikipedia.org/w/index.php?title=Signos_de_agrupaci%C3%B3n&action=edit&redlink=1http://es.wikipedia.org/wiki/Aridadhttp://es.wikipedia.org/wiki/Operandohttp://es.wikipedia.org/wiki/Operadorhttp://es.wikipedia.org/wiki/%C3%81lgebrahttp://es.wikipedia.org/wiki/Aritm%C3%A9ticahttp://es.wikipedia.org/wiki/L%C3%B3gica -
7/31/2019 49289218 Antologia de Pro Todo
27/44
PROGRAMACION DE SISTEMAS
27
Cuando se utilizan triples se ocupan punteros a la misma estructura de lostriples.* b t1 t2 //cudruplos* b (0) //triple
6.3.4 Cudruplos
Es una estructura tipo registro con cuatros campos que se llaman: op, arg1,arg2 y resultado. OP tiene un cdigo intermedio.Los operadores unarios como x:=-y no utilizan arg2. Generalmente arg1, arg2 yresultado son valores de tipo puntero yapuntan a una entrada en la tabla desmbolos.
6.4 Esquemas de generacin
Los esquemas de generacin son las estrategias o acciones que se debernrealizarse y tomarse en cuenta en el momento de generar cdigo intermedio.Los esquemas de generacin dependen de cada lenguaje. Tomaremosalgunosesquemas de generacin del lenguaje C.
6.4.1 Expresiones
Para generar expresiones estas debenrepresentarse de manera ms simple ymsliteral para que su conversin sea ms rpida.Por ejemplo la traduccin de operaciones aritmticas debe especificarse unapor una,de tal forma que una expresin sea lo ms mnimo posible.
6.4.2 Declaracin de variables,constantes
Las declaraciones de variables y constantes deben separarse de tal maneraque quedenlas expresiones una por una de manera simple. Por ejemplointa,b,c; se descompone a int a;int b; intc; respectivamente.
6.4.3 Estatuto de asignacin
Las operaciones de asignacin deben quedar expresadas por unaexpresinsencilla, si est es compleja se debe reducir hasta quedar unoperador sencillo.
Por ejemplo: x = a+b/5; debe quedar de laforma y = b/5; z = a+y; x=z.
-
7/31/2019 49289218 Antologia de Pro Todo
28/44
PROGRAMACION DE SISTEMAS
28
6.4.4 Estatuto condicional
Las condiciones deben expresarse de manera lo ms sencilla posible de tal
forma que puedan evaluarse en cortocircuito. Porejemplo una instruccin como:if (a == b &&f!=5 && f%3==0) se evala primero x = (a==b&& f!=5) y = x &&f%3==0; if (y)Las instrucciones de decisin compleja comoswitch se reducen a una versincomplejasde ifs.
6.4.5 Estatuto de ciclos
Los ciclos se descomponen en un ciclo genrico, por lo que ciclos while, for ydowhiletienen la misma representacin interna.En el caso de C, todo queda enforma dewhile.Las condiciones lgicas tambin pueden ser evaluadas encortocircuito y reducidas.
6.4.6 Arreglos
Los arreglos se descomponen en estructurasbsicas de manejo de manerasimple, as porejemplo: char *a=Hola; se reduce a: a[0]=H; a[1]=o; a[2]=l;a[3]=a; a[4]=\0;
6.4.7 Funciones
Las funciones pueden reducir a en lnea, loque se hace es expander el cdigooriginalde la funcin.
Las funciones se descomponen simplificando los parmetros de maneraindividual al igualque el valor de retorno.
-
7/31/2019 49289218 Antologia de Pro Todo
29/44
PROGRAMACION DE SISTEMAS
29
7. Optimizacin
7.1. Tipos de Optimizacin
7.1.1. Locales
Se realiza despus de la generacin de cdigo de todo el programa o de unelemento ejecutable del programa (funcin, procedimiento, etc).Dependiente del contexto
Objetivo
Obtener cdigo que se ejecuta ms eficientemente segn los criterios
Tiempo de ejecucin (optimizacin temporal)
Espacio de memoria utilizado (optimizacin espacial)
Funcionamiento
Revisa el cdigo generado a varios niveles de abstraccin y realiza lasoptimizaciones aplicables al nivel de abstraccin
Representaciones de cdigo intermedio de ms a menos abstractasrbol sintctico abstracto: optimizar subexpresiones redundantes, reduccin
de frecuencia, etc. Tuplas o cuadruplas: optimizar en uso de los registros o delas variables temporales.
Ensamblador/Cdigo mquina: convertir saltos a saltos cortos, reordenarinstrucciones
Las optimizaciones locales se realizan sobre el bloque bsico
Optimizaciones localesFoldingPropagacin de constantesReduccin de potenciaReduccin de subexpresiones comunes
-
7/31/2019 49289218 Antologia de Pro Todo
30/44
PROGRAMACION DE SISTEMAS
30
Un bloque bsico es un fragmento de cdigo que tiene una nica entrada ysalida, y cuyas instrucciones se ejecutan secuencialmente.
Implicaciones:Si se ejecuta una instruccin del bloque se ejecutan todas en un orden
conocido en tiempo de compilacin.
La idea del bloque bsico es encontrar partes del programa cuyo anlisisnecesario para la optimizacin sea lo ms simple posible.
7.1.2. Globales
Grafo del flujo de ejecucinAntes de realizar una optimizacin global es necesario crear el grafo de flujode ejecucin.El grafo de flujo de ejecucin representa todos los caminos posibles de
ejecucin del programa.La informacin contenida en el grafo es til para
el programador y el optimizador
La optimizacin global a partir del anlisis del grafo del flujo de ejecucinpermite Una propagacin de constantes fuera del bloque bsico. Problema: la
optimizacin global es muy costosa en tiempo de compilacin
Construccin del Grafo del Flujo de Ejecucin
Tipos de grafoOrientado a procedimiento/funcinGrafo de llamadas
Ejemplo
int fact(int n) {int r;r=1;i=1;while (i
-
7/31/2019 49289218 Antologia de Pro Todo
31/44
PROGRAMACION DE SISTEMAS
31
7.1.3 Bucles
Los ciclos son una de las partes ms esenciales en el rendimiento de unprograma
dado que realizan acciones repetitivas, y si dichas acciones estn malrealizadas, el problema se hace N veces ms grandes.La mayora de las optimizaciones sobre ciclos tratan de encontrar elementosque no deben repetirse en un ciclo.
Ciclos
while(a == b){int c = a;c = 5; ;
}
En este caso es mejor pasar el int c =a; fuera del ciclo de ser posible.
El problema de la optimizacin en ciclos y en general radica es que muy difcilsaber el uso exacto de algunas instrucciones. As que no todo cdigo deproceso puede ser optimizado.
Otros uso de la optimizacin pueden ser el mejoramiento de consultas en SQLo en aplicaciones remotas (sockets, E/S, etc.)
7.1.4 De mirilla
La optimizacin de mirilla trata de estructurar de manera eficiente el flujo delprograma, sobre todo en instrucciones de bifurcacin como son las decisiones,ciclos y saltos de rutinas.
La idea es tener los saltos lo ms cerca de las llamadas, siendo el salto lo mspequeo posible
7.2. Costos
7.2.1. Maquinas Virtuales
Las MV se construyeron para simplificar el proceso del control del hardware deun ordenador porque extienden y enmascaran la funcionalidad del hardware atravs de procedimientos y datos abstractos. Se pueden identificar dos tipos deMV concretas: las que juegan un papel en la preparacin de un programa parasu ejecucin (tiempo de compilacin) y las que permiten la ejecucin de dichoprogramaLas MV suelen aparecer en una jerarqua (como se ver acontinuacion ).Usamos la jerarqua de MV de compilacin, por ejemplo, cada vez que
-
7/31/2019 49289218 Antologia de Pro Todo
32/44
PROGRAMACION DE SISTEMAS
32
invocamos el compilador de C++. Y dos ejemplos muy comunes del papel deuna MV en la jerarqua de MV de ejecucin son PostScript (que define una MVpara una impresora) y MSDOS bajo MS Windows (que define una MV quepermite que antiguos programas de DOS funcionen bajo Windows). PostScriptes una MV que incluye el estado grfico, la ruta actual, el estado del diccionario
y, aunque sea bastante complejo, presenta una visin de alto nivel de muchostipos distintos de impresoras, aislando las caractersticas de las impresoras delas aplicaciones que las usan.
Jerarquas de mquinas virtuales
La realidad es que el desarrollador de un lenguaje suele implementar las MV(de compilacin y/o ejecucin) de su lenguaje en trminos de otras MV yaexistentes. Y en el futuro, un programador de aplicaciones utilizar las MV
implementadas por el desarrollador del lenguaje para producir programas que asu vez puedan servir como MV para otras aplicaciones, etc. La conclusin,como puede verse, es que una MV no suele existir aislada, sino como parte deuna jerarqua de MV. A continuacin se va a ver el papel de las jerarquas deMV en el tiempo de compilacin y de ejecucin.En primer lugar, se va a considerar el papel de la jerarqua de MV en el tiempode compilacin. En el caso de C++, como lenguaje de alto nivel que se compilaa un lenguaje tan cerca del nivel de mquina como sea posible, se puede verque el proceso de compilacin de un programa de C++ consiste en lainteraccin de la jerarqua de MV (aunque puede haber diferencias entrecompiladores de C++; por ejemplo, aqu se supone que es un proceso decompilacin que usa C como cdigo intermedio). El pre-procesador acepta elcdigo C++ como fuente y produce otra versin del mismo cdigo C++ conalgunas extensiones e incorporaciones resueltas. El traductor convierte elcdigo fuente C++ estndar a cdigo fuente C. El compilador C acepta estecdigo como fuente y lo traduce a cdigo ensamblador (una representacinsimblica del cdigo mquina). El ensamblador traduce este cdigo simblico aun cdigo mquina reubicable. Y por fin, el cargador de libreras acepta estecdigo mquina como entrada y produce un programa simple ejecutable,compuesto por el cdigo mquina de entrada y todos los subprogramasnecesarios con direcciones de memoria contiguas. Adems del proceso de
compilacin, la traduccin completa de los programas de alto nivel (previa a suejecucin) en una forma que corre sobre la mquina, tambin existe otroproceso, que se llama interpretacin, que tiene ms que ver con el papel de lasMV en el tiempo de ejecucin que en el tiempo de compilacin.
-
7/31/2019 49289218 Antologia de Pro Todo
33/44
PROGRAMACION DE SISTEMAS
33
7.2.2. Criterios de Mejoramiento
La mejor manera de optimizar el cdigo es hacer ver a los programadores queoptimicen su cdigo desde el inicio, el problema radica en que el costo podraser muy grande ya que tendra que codificar mas y/o hacer su cdigo maslegible.
Los criterios de optimizacin siempre estn definidos por el copilador
Muchos de estos criterios pueden modificarse con directivas del compiladordesde el cdigo o de manera externa.
Este proceso lo realizan algunas herramientasdel sistema como losofuscadores para cdigo mvil y codifo para dispositivos mviles
7.2.3 herramientas para el anlisis del flujo de datos
Existen algunas herramientas que permiten el anlisis de los flujos de datos,entre ellas tenemos los depuradores y desambladores.
La optimizacin al igual que la programacin es un arte y no se ha podidosistematizar del todo.
-
7/31/2019 49289218 Antologia de Pro Todo
34/44
PROGRAMACION DE SISTEMAS
34
8. Generacin de cdigo objeto.
8.1 Lenguaje mquina.
Se denomina lenguaje mquina a la serie de datos que la parte fsica de lacomputadora o hardware, es capaz de interpretar.
Una computadora digital o, mejor dicho, su parte fsica, slo distingue datos detipo binario, es decir, constituidos por dos nicos valores a los que se denomina
valor 0 y valor 1 y que, fsicamente, se materializan con tensionescomprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios, respectivamente. Pararepresentar datos que contengan una informacin se utilizan una serie de unosy ceros cuyo conjunto indica dicha informacin.
La informacin que hace que el hardware de la computadora realice unadeterminada actividad de llama instruccin. Por consiguiente una instruccin esun conjunto de unos y ceros. Las instrucciones as formadas equivalen aacciones elementales de la mquina, por lo que al conjunto de dichasinstrucciones que son interpretadas directamente por la mquina sedenomina lenguaje mquina.
-
7/31/2019 49289218 Antologia de Pro Todo
35/44
PROGRAMACION DE SISTEMAS
35
El lenguaje mquina fue el primero que empleo el hombre para la programacinde las primeras computadoras. Una instruccin en lenguaje mquina puederepresentarse de la siguiente forma:011011001010010011110110.
Esta secuencia es fcilmente ejecutada por la computadora, pero es de difcilinterpretacin, siendo aun mas difcil la interpretacin de un programa (conjuntode instrucciones) escrito de esta forma. Esta dificultad hace que los erroressean frecuentes y la correccin de los mismos costosa, cuando no imposible, aligual que la verificacin y modificacin de los programas.
La anterior secuencia de dgitos binarios (bits) puede indicar a la computadoraque:
Si lo vemos escrito de esta forma, lo entenderemos fcilmente, ya que est ennuestro lenguaje natural, pero la mquina elemental ser incapaz de entendernada. Vemos, pues, que la forma de indicar a la mquina lo que debe hacer estotalmente diferente de la indicar a un ser humano lo mismo, por lo que debenemplearse sistemas de traduccin de una forma a otra.
Ya se ha dicho que en un principio el programador empleaba directamente ellenguaje mquina. En este caso el traductor era el programador; pero vimostambin los problemas que esto causaba.
Con la prctica en el manejo de la mquina se cay en la cuenta de que sepodra utilizar la propia mquina para ayudar en la traduccin de estosprogramas. Es decir, que si a una mquina elemental se le dotaba de unprograma, tambin elemental, que tradujera un nmero determinado decaracteres de caracteres alfabticos en una secuencia de unos y ceros, sepodra escribir un programa constituido por una secuencia de grupos decaracteres alfabticos, en la que cada uno de los grupos indicara una accin arealizar por el ordenador y, una vez escrito el programa, sera la propiamquina la que pasara los grupos de caracteres a bits.
Las ventajas de esto son evidentes, ya que para el hombre resulta mas fcil
manipular grupos de caracteres y la traduccin se hara de manera automtica.Por ejemplo, se podra escribir:
TRASLADAR 11010110, 00011101.
Esto indicara que el contenido de la posicin 11010110 haba que pasarlo a laposicin 00011101 si se sabe que al grupo alfabtico TRASLADAR lecorresponde la secuencia de bits 11110101. La mquina traducira la anteriorinstruccin como:
11110101 11010110 00011101
-
7/31/2019 49289218 Antologia de Pro Todo
36/44
PROGRAMACION DE SISTEMAS
36
Al grupo alfabtico se le denomina mnemotcnico, y existir un mnemotcnicopor cada instruccin. Se le da este nombre porque sirve para recordar conmayor facilidad el conjunto de instrucciones de una determinada mquina.De esta forma aparecieron los lenguajes ensambladores (Assembler, eningls). Poco a poco, con el avance de la programacin (Software), estas
primeras y sencillas ayudas se fueron haciendo ms complejas, permitiendoque, adems de los mnemotcnicos correspondientes a la operacin a realizar,se pudieran emplear otros para indicar, por ejemplo, los operandos. La anteriorinstruccin se podra escribir de la siguiente forma:
TRASLADAR POS-A POS-B
Que nos resulta de ms fcil comprensin.
Tambin se introdujo la posibilidad de indicar a la computadora la direccin deun salto en la secuencia de ejecucin de un programa mediante la utilizacin
de etiquetas.
A los programas que permiten pasar del programa escrito de esta manera(programa fuente, en ensamblador) al lenguaje mquina tambin se lesdenomina normalmente ensambladores. Estos traductores, como ya se hadicho, se fueron complicando cada vez ms para que la labor del programadorfuera ms fcil, incluyendo los denominados directivos del ensamblador, queson rdenes o informaciones que el programador da al traductor, noinstrucciones de lenguaje mquina.
Aun con todas estas sofisticaciones y ayudas, el programador de lenguajeensamblador debe conocer perfectamente el sistema fsico (Hardware) de lamquina con que trabaja, pues aunque emplee mnemotcnicos, etiquetas, etc.,stas sirven para indicar una posicin de memoria determinada, un registro ocualquier otra parte de la mquina.
Por eso se dice que el lenguaje ensamblador es un lenguaje de bajo nivel, esdecir, ligado con el concreto de una determinada mquina. Aquradica la diferencia importante con los lenguajes ms complejos, llamados dealto nivel, como el Basic, Pascal, Cobol, etc., ya que en stos el programadorno tiene porque reconocer el de la mquina. Trabaja con variables,
constantes e instrucciones simblicas, y es el traductor quien las transforma enlas direcciones apropiadas.
8.1.1 Caractersticas
El lenguaje mquina realiza un conjunto de operaciones predeterminadasllamadas micro operaciones.
Las micro operaciones slo realizan operaciones del tipo aritmtica (+,-,*, /),lgicas (AND, OR, NOT) y de control (secuencial, decisin, repetitiva)
Caractersticas
-
7/31/2019 49289218 Antologia de Pro Todo
37/44
PROGRAMACION DE SISTEMAS
37
El lenguaje mquina es dependiente del tipo de arquitectura. As un programamquina para una arquitectura intel x86 no se ejecutar en una arquitecturaPower PC de IBM (al menos de manera nativa).
Algunos microprocesadores implementan ms funcionalidades llamado CISC,
pero son ms lentos que los RISC ya que estos tienen registros ms grandes.
8.1.2 Direccionamiento
Es la forma en cmo se accede a la memoria. Recordar que un programa nopuede ejecutarse sino se encuentra en memoria principal.
La forma de acceder a la memoria depende del microprocesador, pero engeneral existen dos tipos de direccionamiento: directo e indirecto.
Direccionamiento
El direccionamiento directo tambin recibe el nombre de direccionamientoabsoluto y el acceso a las direcciones se hace de manera directa.
El direccionamiento indirecto tambin recibe el nombre de direccionamientorelativo y se basa a partir de una direccin genrica, generalmente el inicio delprograma.
Direccionamiento
Para acceder a una direccin relativa se suma a ladireccin base el nmerode espacios de memorias necesarias.
El direccionamiento relativo hace a los programas relocalizables eindependientes.
Si la direccin base es el inicio de la memoria fi direccionamiento pasa a ser
un variante de direccionamiento absoluto
-
7/31/2019 49289218 Antologia de Pro Todo
38/44
PROGRAMACION DE SISTEMAS
38
8.2 Lenguaje ensamblador
El lenguaje ensamblador, o assembler(assembly language en ingls ) es un lenguajede programacin de bajo nivel para los
computadores, microprocesadores,microcontroladores, y otros circuitos integradosprogramables. Implementa una representacinsimblica de los cdigos de mquina binarios yotras constantes necesarias para programar unaarquitectura dada de CPU y constituye larepresentacin ms directa del cdigo mquinaespecfico para cada arquitectura legible por unprogramador. Esta representacin es usualmente definida por el fabricante dehardware, y est basada en los mnemnicos que simbolizan los pasos deprocesamiento (las instrucciones), los registros del procesador, las posicionesde memoria, y otras caractersticas del lenguaje. Un lenguaje ensamblador espor lo tanto especfico a cierta arquitectura de computador fsica (o virtual).Esto est en contraste con la mayora de los lenguajes de programacin de altonivel, que, idealmente son portables.
Un programa utilitario llamado ensamblador es usado para traducir sentenciasdel lenguaje ensamblador al cdigo de mquina del computador objetivo. Elensamblador realiza una traduccin ms o menos isomorfa (un mapeo de unoa uno) desde las sentencias mnemnicas a las instrucciones y datos demquina. Esto est en contraste con los lenguajes de alto nivel, en los cualesuna sola declaracin generalmente da lugar a muchas instrucciones demquina.
Muchos sofisticados ensambladores ofrecen mecanismos adicionales parafacilitar el desarrollo del programa, controlar el proceso de ensamblaje, y laayuda de depuracin. Particularmente, la mayora de los ensambladoresmodernos incluyen una facilidad de macro (descrita ms abajo), y son llamadosmacro ensambladores.
Fue usado principalmente en los inicios del desarrollo de software, cuando anno se contaba con potentes lenguajes de alto nivel y los recursos eran
limitados.Muchos dispositivos programables (como los microcontroladores) aun cuentancon el ensamblador como la nica manera de ser manipulados.
8.2.1 Caractersticas
El cdigo escrito en lenguaje ensamblador posee una cierta dificultad deser entendido ya que su estructura se acerca al lenguaje mquina, es
decir, es un lenguaje de bajo nivel.
-
7/31/2019 49289218 Antologia de Pro Todo
39/44
PROGRAMACION DE SISTEMAS
39
El lenguaje ensamblador es difcilmente portable, es decir, un cdigoescrito para un microprocesador, puede necesitar ser modificado, parapoder ser usado en otra mquina distinta. Al cambiar a una mquina conarquitectura diferente, generalmente es necesario reescribirlocompletamente.
Los programas hechos, por un programador experto, en lenguajeensamblador, son generalmente mucho ms rpidos y consumen menosrecursos del sistema (memoria RAM y ROM) que el programaequivalente compilado desde un lenguaje de alto nivel. Al programarcuidadosamente en lenguaje ensamblador se pueden crear programasque se ejecutan ms rpidamente y ocupan menos espacio que conlenguajes de alto nivel.Con el lenguaje ensamblador se tiene un control muy preciso de lastareas realizadas por un microprocesador por lo que se pueden crearsegmentos de cdigo difciles y/o muy ineficientes de programar en unlenguaje de alto nivel, ya que, entre otras cosas, en el lenguaje
ensamblador se dispone de instrucciones del CPU que generalmente noestn disponibles en los lenguajes de alto nivel.Tambin se puede controlar el tiempo en que tarda una rutina enejecutarse, e impedir que se interrumpa durante su ejecucin.
8.2.2 Almacenamiento
Una de las principales ventajas del uso del ensamblador, es que se encarga deadministrar de manera transparente para el usuario la creacin de memoria, lasbifurcaciones y el paso de parmetros.
Adems nos permite acceder directamente a los recursos de la mquina paraun mejor desempeo.
8.3 Registros
Los registros del procesador se emplean para controlar instrucciones enejecucin, manejar direccionamiento de memoria y proporcionar capacidadaritmtica. Los registros son espacios fsicos dentro del microprocesador concapacidad de 4 bits hasta 64 bits dependiendo del microprocesador que seemplee. Los registros son direccionables por medio de una vieta, que es unadireccin de memoria. Los bits, por conveniencia, se numeran de derecha aizquierda (15, 14, 13. 3, 2, 1, 0), los registros estn divididos en seis gruposlos cuales tienen un fin especfico. Los registros se dividen en:
Registros de segmento
-
7/31/2019 49289218 Antologia de Pro Todo
40/44
PROGRAMACION DE SISTEMAS
40
Registros de apuntadores de instrucciones Registros apuntadores Registros de propsitos generales Registro ndice Registro de bandera.
Registros de uso general
AX = Registro acumulador, dividido en AH y AL (8 bits cada uno).- Interviene enlas operaciones aritmticas y lgicas, despus de la operacin arroja unresultado.
BX = Registro base, dividido en BH y BL.- Se utiliza en transferencias de datosentre la memoria y el procesador.
CX = Registro contador, dividido en CH y CL.- Se utiliza como contador enbucles(LOOP), en operaciones con cadenas(REP), y en desplazamientos(CL).
DX = Registro de datos, dividido en DH y DL.- Se utiliza en operaciones demultiplicacin y divisin junto con Ax y en operaciones de entrada y salida depuertos, su mitad inferior DL contiene el nmero de puertos.
Registros de segmento.
Un registro de segmento se utiliza para alinear en un limite de prrafo o dichode otra forma codifica la direccin de inicio de cada segmento y su direccin enun registro de segmento supone cuatro bits 0 a su derecha.
Un registro de segmento tiene 16 bits de longitud y facilita un rea de memoriapara direccionamientos conocidos como el segmento actual. Los registros desegmento son: CS (cdigo), DS (datos), SS (pila), ES , FS y GS.
Registro Apuntador de instrucciones.(IP)
El registro apuntador de instrucciones (IP) de 16 bits contiene el
desplazamiento de direccin de la siguiente instruccin que se ejecuta.Registro ndice.
Los registros SI y DI estn disponibles para direccionamientos indexados ypara sumas y restas. Que son las operaciones de punta.
-
7/31/2019 49289218 Antologia de Pro Todo
41/44
PROGRAMACION DE SISTEMAS
41
Registro de bandera.
Los registros de banderas sirven parar indicar el estado actual de la maquina yel resultado del procesamiento, Cuando algunas instrucciones pidencomparaciones o clculos aritmticos cambian el estado de las banderas.
8.3.1 Distribucin
La distribucin es el proceso en el que el programa generado puede ejecutarseen otras mquinas.
Con respecto al ensamblador, la mayora del direccionamiento se hace relativopara que el programa sea relocalizable por un programa llamado cargador.
En el caso de programas compilados se necesitan de las libreras, si sonestticas se incluyen en el ejecutable por lo que el programa se hace grfico, sison dinmicas no pero el programa es ms pequeo.
Debido a la complejidad del software actual se necesitan de asistentes para
poder instalar y ejecutar un programa.
8.3.2 Asignacin
La asignacin de valores a variables se hace a travs de un proceso de mover
el contenido de memoria a registro, o de registro a memoria, pero nunca dememoria a memoria.
Cuando se trata de memoria dinmica se debe seguir el rastro de los datos.
-
7/31/2019 49289218 Antologia de Pro Todo
42/44
PROGRAMACION DE SISTEMAS
42
8.4 Administracin de memoria
La administracin de memoria serefiere a los distintos mtodos yoperaciones que se encargan deobtener la mxima utilidad de lamemoria, organizando losprocesos y programas que se
ejecutan de manera tal que seaproveche de la mejor maneraposible el espacio disponible.
Para poder lograrlo, la operacinprincipal que realiza es la detrasladar la informacin que deberser ejecutada por el procesador, ala memoria principal. Actualmenteesta administracin se conoce como Memoria Virtual ya que no es la memoriafsica del procesador sino una memoria virtual que la representa. Entre algunas
ventajas, esta memoria permite que el sistema cuente con una memoria msextensa teniendo la misma memoria real, con lo que esta se puede utilizar demanera ms eficiente. Y por supuesto, que los programas que son utilizados noocupen lugar innecesario.
Entre las principales operaciones que desarrolla la administracin de memoriase encuentran la reubicacin, que consiste en trasladar procesos activos dentroy fuera e la memoria principal para maximizar la utilizacin del procesador; laproteccin, mecanismos que protegen los procesos que se ejecutan deinterferencias de otros procesos; uso compartido de cdigos y datos, con lo queel mecanismo de proteccin permite que ciertos procesos de un mismo
programa que comparten una tarea tengan memoria en comn.
-
7/31/2019 49289218 Antologia de Pro Todo
43/44
PROGRAMACION DE SISTEMAS
43
Bibliografa
(s.f.). Recuperado el LUNES de DICIEMBRE de 2010, dehttp://arantxa.ii.uam.es/alfonsec/docs/compila5.html
(s.f.). Recuperado el LUNES de DICIEMBRE de 2010, dehttp://serdis.dis.ulpgc.es/~a013775/asignaturas/itis-ti2/TI2/Apuntes%20del%20curso%202004-2005/An_lisis_sem_ntico-by_Ermis.pdf
(s.f.). Recuperado el MARTES de DICIEMBRE de 2010, de
http://es.wikipedia.org/wiki/Conversi%C3%B3n_de_tipos
(s.f.). Recuperado el MARTES de DICIEMBRE de 2010, dehttp://es.wikipedia.org/wiki/Lenguaje_ensamblador
(s.f.). Recuperado el MARTES de DICIEMBRE de 2010, dehttp://www.mastermagazine.info/termino/3780.php
(s.f.). Recuperado el MIERCOLES de DICIEMBRE de 2010, dehttp://www.unse-prog2.comxa.com/downloads/Sesion-10.pdf
(s.f.). Recuperado el MIERCOLES de DICIEMBRE de 2010, dehttp://www.mitecnologico.com/Main/RegistrosLenguajeEnsamblador
(s.f.). Recuperado el JUEVES de DICIEMBRE de 2010, dehttp://148.202.148.5/cursos/cc206/programaciondesistemas_1_3.html
-
7/31/2019 49289218 Antologia de Pro Todo
44/44
PROGRAMACION DE SISTEMAS