Download Lenguajes de Programación - Universidad Nacional del Sur
Document related concepts
no text concepts found
Transcript
Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Lenguajes de Programación Implementación de unidades Ma. Laura Cobo Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación 2017 Prof. Ma. Laura Cobo Página 1 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Agregando unidades Si nuestro lenguaje considera unidades, nuestro procesador abstracto debe considerar la unidad de activación de P. La unidad de activación contiene toda la información relevante en ejecución de la unidad. Unidad de activación de Unidad P la unidad P Segmento de código de P Registro de activación de P 2 Prof. Ma. Laura Cobo Página 2 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Agregando unidades El registro de activación de P contiene la información sobre los objetos de datos, del sistema y declarados en la unidad registro de activación de la unidad P Dirección Registro de activación P Objetos de datos del Sistema Objetos de datos asociados a las declaraciones en P 3 Prof. Ma. Laura Cobo Página 3 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Agregando unidades El acceso a cualquier objeto de dato declarado en P, se calcula como: Dirección Registro de Activación P + desplazamiento de la variable Unidad P ….. var x: real …… x …… En la declaración se determina el desplazamiento de la variable x En la uso se accede a la misma mediante la fórmula: Dir. RA P + desplazamiento de x 4 Prof. Ma. Laura Cobo Página 4 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Agregando unidades El acceso a cualquier objeto de dato declarado en P, se calcula como: Dirección Registro de Activación P + desplazamiento de la variable registro de activación de la unidad P Dirección Registro de activación P Desplazamiento de x Objetos de datos del Sistema Objeto de dato x 5 Prof. Ma. Laura Cobo Página 5 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Agregando unidades Si tratamos con unidades simples, sin parámetros, el único objeto del sistema que resulta imprescindible guardar es el puntero de retorno. registro de activación de la unidad P Dirección Registro de Puntero de retorno activación P Objetos de datos asociados a las declaraciones en P 6 Prof. Ma. Laura Cobo Página 6 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Agregando unidades Los lenguajes de programación puede ser clasificados de acuerdo las decisiones que toman en diseño. Se puede clasificar de acuerdo al manejo de memoria y a las regla de alcance. La clasificación de acuerdo al manejo de memoria que utilizan no conduce a lenguajes: Estático Basado en pila Dinámico 7 Prof. Ma. Laura Cobo Página 7 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Agregando unidades Por otro lado la clasificación de acuerdo a las reglas de alcance y al esquema de manejo de memoria: Alcance estático • Alocación estática • Alocación semiestática (basada en pila) • Alocación semidinámica (basada en pila) • Alocación dinámica (basada en pila) Alcance dinámico Finalmente si tomamos en cuenta la resolución de invocaciones a objetos de datos Acceso local Acceso global Esquema de alocación 8 Prof. Ma. Laura Cobo Página 8 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática En compilación se determina: El alcance de cada variable y el ambiente de referenciamiento de cada unidad. El espacio requerido para mantener cada variable local a la unidad y su desplazamiento dentro del registro de activación. El espacio requerido para ejecutar la unidad. La asociación entre cada variable local del código y cada objeto de dato del registro de activación a través del par: dirección base del registro de activación + desplazamiento. La asociación entre cada variable global del código y cada objeto de dato en el área compartida: dirección base del área compartida + desplazamiento. 9 Prof. Ma. Laura Cobo Página 9 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática En vinculación se conoce el desplazamiento de: La primera instrucción de cada unidad en el área de código C, respecto a una dirección base dC. Cada registro de activación en el área de datos, respecto a una dirección base dD. En la carga del programa: Se reserva espacio de almacenamiento para todo el código y todos los registros de activación. Cada segmento de código queda asociado a un único registro de activación. 10 Prof. Ma. Laura Cobo Página 10 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Acceso al entrono local: Programa program main integer i,j i:= 1 k:= 1 j:= i + k Desplazamiento Identificador Tipo 0 i Integer 1 j Integer 2 k Integer Observaciones: - k está declarada en forma implícita. - El desplazamiento 0 corresponde al puntero de retorno. 11 Prof. Ma. Laura Cobo Página 11 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Acceso al entrono local: Programa program main integer i,j Segmento de código SET Main+,1 i:= 1 k:= 1 j:= i + k SET Main+2,1 SET Main+1, D[Main+0]+D[Main+2] 12 Prof. Ma. Laura Cobo Página 12 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Acceso al entrono local: Segmento de código Programa program main integer i,j i:= 1 k:= 1 j:= i + k SET Main+o,1 SET Main+2,1 SET Main+1, D[Main+0]+D[Main+2] Registro de activación 0 i 1 j 2 k 3 13 Prof. Ma. Laura Cobo Página 13 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Acceso al entrono local: Segmento de código Unidad SET dP+1,1 subroutine P integer i,j i:= 1 k:= 1 j:= i + k SET dP+3,1 SET dP+2, D[dP+1]+D[dP+3] Registro de activación 0 Puntero de retorno 1 i 2 j 3 k 14 Prof. Ma. Laura Cobo Página 14 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Acceso al entrono global: Programa subroutine unit integer i,j common k Desplazamiento Identificador Tipo 1 i Integer 2 j Integer 0 k Integer i:= 1 k:= 1 j:= i + k 15 Prof. Ma. Laura Cobo Página 15 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Acceso al entrono global: Programa subroutine unit integer i,j common k Segmento de código SET unit+1,1 SET Common+0,1 i:= 1 k:= 1 j:= i + k SET unit+2, D[unit+1]+D[Common+0] 16 Prof. Ma. Laura Cobo Página 16 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Acceso al entrono global: Segmento de código Programa subroutine unit integer i,j common k SET unit+1,1 SET Common+0 ,1 SET unit+2, D[unit+1]+D[Common+0] Registro de activación i:= 1 k:= 1 j:= i + k 0 k 1 puntero de retorno 2 i 3 j 17 Prof. Ma. Laura Cobo Página 17 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Programa dC Segmento de código dD Registro de activación program main main subroutine P subroutine Q cP main dP subroutine P cQ subroutine Q subroutine P dQ dCO subroutine Q Common 18 Prof. Ma. Laura Cobo Página 18 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Programa Segmento de código dC dD program main main main subroutine P if x>0 goto 10 …. 10: x=0 subroutine Q Registro de activación 110 SETR R1, D[dP+despx]<=0 dP 111 JUMP R1, 113 112 JUMP 125 .. …… 125 SET dP+despx,0 dQ subroutine Q dCO x subroutine P subroutine Q cQ Common 19 Prof. Ma. Laura Cobo Página 19 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Programa Segmento de código dC dD Registro de activación program main main subroutine P if x>0 goto 10 …. 10: x=0 subroutine Q 110 SETR R1, D[dCo+despx]<=0 111 JUMP R1, 113 112 JUMP 125 .. …… 125 SET dCo+despx,0 main dP subroutine P dQ subroutine Q dCO cQ subroutine Q Common x 20 Prof. Ma. Laura Cobo Página 20 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Activación de una unidad, pasos a realizar: Guardar el puntero de retorno en el primer objeto de dato del registro de activación de la unidad llamada. Actualizar el IP con la dirección de la primera instrucción de la unidad llamada. La traducción involucra estas dos instrucciones del procesador abstracto: SET dU,IP+2 (se guarda en área de datos una dirección del área de código) JUMP cU. 21 Prof. Ma. Laura Cobo Página 21 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Retorno de una unidad, paso a realizar: Transferir el control recuperando el puntero de retorno almacenado en el primer objeto de dato del registro de activación de la unidad llamada. La traducción involucra esta instrucción del procesador abstracto: JUMP D[dU]. 22 Prof. Ma. Laura Cobo Página 22 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Ejemplo, sea el siguiente programa: Programa Unidad P Unidad Q Program main Subprogram P Subprogram Q integer i,j integer i,k integer i,m,n common x,y common x,y common x,y call P call Q x = m*n j = i*x ….. …. ….. End End End 23 Prof. Ma. Laura Cobo Página 23 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Programa program main dC Segmento de código dD Registro de activación common main subroutine P main L1 subroutine P subroutine Q dMain dP subroutine P L2 subroutine Q dQ subroutine Q D[unidad+desplazamiento] 24 Prof. Ma. Laura Cobo Página 24 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Ejemplo Programa Identificador Desplaz. Unidad Program main i 0 main integer i,j j 1 main common x,y x 0 common y 1 common call P j = i*x ….. End 25 Prof. Ma. Laura Cobo Página 25 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Ejemplo Programa Segmento de código Program main SET dP, ip+2 integer i,j JUMP L1 common x,y SET Main+2, D[Main+1]+D[Common+0] Registros de activación call P j = i*x 0 x ….. 1 y End 0 Ptr. Ret 1 i 2 j 26 Prof. Ma. Laura Cobo Página 26 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Ejemplo Unidad P Identificador Desplaz. Unidad Subprogram P x 0 common integer i,k y 1 common common x,y i 1 P k 2 P call Q ….. End 27 Prof. Ma. Laura Cobo Página 27 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Ejemplo Segmento de código Unidad P SET dQ, ip+2 Subprogram P JUMP L2 integer i,k …… common x,y JUMP D[dP+0] call Q Registro de activación de P ….. End 0 Ptr. Ret 1 i 2 k 28 Prof. Ma. Laura Cobo Página 28 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Ejemplo Unidad Q Subprogram Q integer i,m,n common x,y x = m*n Identificador Desplaz. Unidad x 0 common y 1 common i 1 Q m 2 Q N 3 Q …. End 29 Prof. Ma. Laura Cobo Página 29 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 LP con Alcance Estático–Alocación Estática Ejemplo Segmento de código Unidad Q Subprogram Q integer i,m,n common x,y SET common+0, D[dQ+2]*d[dQ+3] …. …… JUMP D[dQ+0] x = m*n Registro de activación de Q …. End Prof. Ma. Laura Cobo 0 Ptr. Ret 1 i 2 m 3 n 30 Página 30 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila En compilación: Se determina la distancia entre la unidad que rereferencia una variable y la unidad que contiene la declaración. No es posible anticipar el espacio de memoria requerido para ejecutar el programa. 31 Prof. Ma. Laura Cobo Página 31 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila En ejecución: Se reserva espacio de almacenamiento para el registro de activación en el momento en que la unidad se activa. Se conoce la dirección base de cada registro de activación. Los registros de activación ocupan y liberan memoria siguiendo un comportamiento de pila. Cada segmento de código puede quedar asociado a varios registros de activación 32 Prof. Ma. Laura Cobo Página 32 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Programa Programa program main program main subroutine P End P subroutine P subroutine Q End Q subroutine Q End Q End main End P End main 33 Prof. Ma. Laura Cobo Página 33 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila main P Q Programa program main subroutine Q …. End Q subroutine P call Q End P Registro Activación Main actual Registro Activación P actual Registro Activación Q actual call P End main 34 Prof. Ma. Laura Cobo Página 34 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Resulta necesario mantener la cadena dinámica de llamadas, en orden de poder resolver las referencias no locales. Es por ello que el registro de activación necesita mantener más información que en el modelo anterior. Registro de activación de la unidad puntero de retorno enlace dinámico 35 Prof. Ma. Laura Cobo Página 35 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila main P Q Programa actual program main subroutine Q …. End Q Puntero retorno actual subroutine P call Q End P Puntero retorno actual call P End main 36 Prof. Ma. Laura Cobo Página 36 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Activación de una unidad, pasos a realizar: Crear el registro de activación Guardar puntero de retorno Guardar enlace dinámico Actualizar actual Actualizar IP 37 Prof. Ma. Laura Cobo Página 37 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Retorno de una unidad, paso a realizar: Actualizar actual utilizando el enlace dinámico. Actualizar IP utilizando el puntero de retorno. Destruir el registro de activación Este modelo admite Recursividad. En caso de utilizarlo, en la cadena dinámica aparecen más de un registro de activación asociados a la misma unidad. 38 Prof. Ma. Laura Cobo Página 38 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila unidad Tabla de símbolos registro de activación de la unidad declaraciones Objetos de datos del Sistema Bloque ejecutable Objetos de datos asociados a las declaraciones en P 39 Prof. Ma. Laura Cobo Página 39 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Acceso al entorno local – estructura de bloques anidados Program main Var i,j: real; Identificador Tipo Anid. Desplaz. Procedure q i real 0 0 var j,k,l: real; j real 0 1 …. j real 1 2 end q k real 1 3 …. l real 1 4 End main 40 Prof. Ma. Laura Cobo Página 40 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Acceso al entorno local – estructura de bloques anidados Program main Var i,j: real; Actual a Registro de activación de Q Procedure q Ptr. Ret var j,k,l: real; Enlace dinámico …., k:=j; j end q k …. l Actual+3 End main Segmento de código SET Actual+3,D[Actual+2] Prof. Ma. Laura Cobo 41 Página 41 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Acceso al entorno global – estructura de bloques anidados Program main ….. main P Q RA de P Actual Procedure q var j,k,l: real; …. i end q Procedure p RA main RA de Q Ptr. Ret Ptr. Ret Enlace dinámico Enlace dinámico I j Var i: real; …. i End P End main Prof. Ma. Laura Cobo k l 42 Página 42 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Acceso al entorno global – estructura de bloques anidados - recursividad Program main Procedure p main P P Q var i: real; Procedure q i End q End p End main RA main RA de P RA de P RA de Q RA de Ptr. Ret Ptr. Ret Ptr. Ret actual Enlace dinámico Enlace dinámico Enlace dinámico i i 43 Prof. Ma. Laura Cobo Página 43 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Si se resuelven los accesos no locales, en lenguajes con estructuras de bloques anidados, se debe mantener información sobre el enlace estático de la unidad. Una forma de hacerlo, es manteniéndolo en el registro de activación de la unidad Registro de activación de la unidad puntero de retorno enlace dinámico enlace estático 44 Prof. Ma. Laura Cobo Página 44 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Acceso al entorno global – estructura de bloques anidados Program main Var i,j: real; Identificador Tipo Anid. Desplaz. Procedure q i real 0 0 var j,k,l: real; j real 0 1 j real 1 3 end q k real 1 4 …. l real 1 5 i End main La distancia entre el uso y el nivel de anidamiento de la declaración es 1 45 Prof. Ma. Laura Cobo Página 45 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Acceso al entorno global – estructura de bloques anidados Program main Var i,j: real; main P Q RA main Procedure q i var j,k,l: real; j RA de Q RA de Ptr. Ret actual ….. Enlace dinámico i end q …. j End main k El acceso al entorno global se logra con D[Actual+2] El acceso a la variable i con D[D[Actual+2]+0] Prof. Ma. Laura Cobo l 46 Página 46 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Acceso al entorno global – estructura de bloques anidados Program main Var i,j: real; Actual Registro de activación de Q Procedure q Ptr. Ret var j,k,l: real; Enlace dinámico …., k:=i+j; Enlace estático end q j …. k End main Actual+3 l Segmento de código SET Actual+4,D[D[Actual+2]+3]+D[actual+3] Prof. Ma. Laura Cobo 47 Página 47 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Acceso al entorno global – estructura de bloques anidados Si la distancia es uno, como en el ejemplo, la situación se resuelve con una indirección; sin embargo claramente la distancia puede ser mayor. La cantidad de indirecciones involucradas es igual a la distancia entre el uso y la declaración. A mayor cantidad de indirecciones, mayor es el costo 48 Prof. Ma. Laura Cobo Página 48 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Alocación de memoria Para trabajar con la pila de datos y tener el control de los registros de activación vamos a contar con dos registros rápidos: - actual: mantiene una referencia al comienzo del registro de activación correspondiente a la unidad que se encuentra en ejecución. - libre: mantiene una referencia al área de datos a partir de donde la misma está disponible para su uso. La alocación de memoria sigue un comportamiento de pila 49 Prof. Ma. Laura Cobo Página 49 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Alocación semi-estática de memoria En compilación se determina: - El espacio requerido para mantener cada variable local a una unidad. - El tamaño del registro de activación - El desplazamiento de cada variable local dentro del registro de activación. - La distancia entre la unidad que referencia a una variable y la unidad que contiene la declaración. 50 Prof. Ma. Laura Cobo Página 50 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Alocación semi-estática de memoria En compilación se determina: - La asociación entre cada variable local del código y cada objeto de dato del registro de activación a través del par: [dirección base RA + desplazamiento]. - La asociación entre cada variable global del código y cada objeto de dato en la Pila. La dirección base considera la distancia entre la declaración y la referencia, utilizando la cadena estática. 51 Prof. Ma. Laura Cobo Página 51 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Activación de una unidad a. Guardar el puntero de retorno: se realiza a través de la siguiente instrucción Pila[libre,0] IP + T Siendo T la cantidad de instrucciones que se van a saltear dentro de la unidad llamadora (como mínimo hay que saltear la instrucción JUMP que realiza la transferencia de control, si hay pasaje de parámetros hay que saltear las instrucciones vinculadas y otras) b. Guardar enlace dinámico: Pila[libre,1] actual 52 Prof. Ma. Laura Cobo Página 52 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Activación de una unidad c. Guardar el enlace estático: se realiza a través de la siguiente instrucción Pila[libre,2] expresión de cálculo de EE Analizaremos la expresión de cálculo de EE a contiuación. d. Actualizar actual: actual libre e. Actualizar libre: libre libre + S Siendo S el tamaño del registro de activación (objetos de datos del sistema, parámetros y variables locales). Este tamaño es calculado por el compilador 53 Prof. Ma. Laura Cobo Página 53 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila f. Actualizar IP: se realiza a través de la siguiente instrucción IP dirección del segmento de código de la unidad invocada (Cc) Si escribimos el código necesario para realizar la activación de la unidad en términos de nuestro procesador abstracto, tendríamos: a. Guardar el puntero de retorno: ASIG IP+6, PILA[LIBRE,0] b. Guardar enlace dinámico: ASIG ACTUAL, PILA[LIBRE,1] c. Guardar enlace estático: ASIG exp. EE, PILA[LIBRE,2] d. Actualizar actual: ASIG LIBRE, ACTUAL e. Actualizar libre: ASIG LIBRE+S, LIBRE f. Actualizar IP: JUMP Cc 54 Prof. Ma. Laura Cobo Página 54 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Alocación semi-estática de memoria Para retornar de una unidad se realizan los siguientes pasos: - Actualizar el valor del registro libre. - Actualizar el valor del registro actual. - Actualizar el valor de IP. Retorno de una unidad a. Actualizar libre: se realiza a través de la siguiente instrucción Libre Actual 55 Prof. Ma. Laura Cobo Página 55 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Alcance Estático–Alocación basada en pila Retorno de una unidad b. Actualizar actual: actual Pila[libre,1] c. Actualizar IP: IP Pila[libre,0] Si escribimos el código necesario para realizar el retorno de la unidad en términos de nuestro procesador abstracto, tendríamos: a. Actualizar libre: ASIG ACTUAL, LIBRE b. Actualizar actual: ASIG PILA[LIBRE,1], ACTUAL c. Actualizar IP: JUMP PILA[LIBRE,0] 56 Prof. Ma. Laura Cobo Página 56 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Cálculo del enlace estático Program Principal Procedure Q Procedure R end R end Q Procedure P End P End Principal Prof. Ma. Laura Cobo Hay tres situaciones posibles: 1. Dos unidades (diferentes entre si) P y Q, ambas del mismo nivel léxico donde P Q. 2. Una unidad, Q, invoca a otra que está declarada dentro de ella, R. Q R 3. Una unidad, R, invoca a una unidad que la contiene. R Q Página 57 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Cálculo del enlace estático Program Principal Procedure Q Procedure R end R end Q Procedure P End P End Principal Prof. Ma. Laura Cobo Situación 1: P Q. En este caso, la distancia entre la unidad llamadora y la llamada es igual a cero(ambas tienen el mismo nivel léxico) por lo tanto en enlace estático de P es el enlace estático de Q también. Enlace estático de Q PILA[ACTUAL,2] En código del procesador abstracto ASIG PILA[ACTUAL,2], PILA[LIBRE,2] Página 58 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Cálculo del enlace estático Program Principal Procedure Q Procedure R end R end Q Situación 2: Q R. En este caso, la distancia entre la unidad llamadora y la llamada es igual a uno por lo tanto en enlace estático de R es la dirección del registro de activación de la unidad llamadora , es decir Q. Procedure P End P End Principal Prof. Ma. Laura Cobo Enlace estático de R ACTUAL En código del procesador abstracto ASIG ACTUAL, PILA[LIBRE,2] Página 59 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Cálculo del enlace estático Situación 3: R Program Principal Procedure Q Procedure R end R end Q Procedure P End P End Principal Q. En este caso, la distancia entre la unidad llamadora y la llamada es igual a negativa, -1. en este caso debe existir una instancia de Q suspendida anteriormente, ya que no habría instancia de R sin alguna instancia de Q. existe por lo tanto una forma de recursión cruzada involucrada. Se debe recorrer la cadena estática tantos niveles como intervienen en la distancia Enlace estático de Q PILA[PILA[ACTUAL,2],2] En código del procesador abstracto ASIG PILA[PILA[ACTUAL,2],2], PILA[LIBRE,2] Prof. Ma. Laura Cobo Página 60 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Ejemplo Universidad Nacional del Sur Primer Cuatrimestre de 2017 Program Princ Var i: integer Procedure A var j,k Procedure B call C end B i:= 0 call B end A i:=1 Procedure C call C if I <> 0 then call A End Princ end C Prof. Ma. Laura Cobo Página 61 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Ejemplo A 10 SET D[Actual+2],0 B 1 SET Libre, IP+6 11 SET Libre, IP+6 2 SET Libre+1,Actual 15 SETR Libre, Libre+3 6 JUMP C PROCEDURE B Prof. Ma. Laura Cobo 17 SETR Libre,Actual 18 SETR Actual,D[Libre+1] RETORNO 9 JUMP D[Libre] 16 JUMP B RETORNO 8 SETR Actual,D[Libre+1] 13 SET Libre+2,Actual 14 SETR Actual,Libre 5 SETR Libre, Libre+3 7 SETR Libre,Actual 12 SET Libre+1,Actual CALL B 4 SETR Actual,Libre CALL C 3 SET Libre+2,D[D[Actual+2]+2] 19 JUMP D[Libre] PROCECURE A Página 62 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2017 Ejemplo 30 SETR Actual,0 C 20 JUMP D[D[Actual+2]]=0, X 31 SETR Libre,1 21 SET Libre, IP+6 32 SET Actual,1 22 SET Libre+1,Actual 24 SETR Actual,Libre CALL A 23 SET Libre+2,D[Actual+2] 33 SET Libre, IP+6 34 SET Libre+1,Actual 35 SET Libre+2,Actual 26 JUMP A 36 SETR Actual,Libre 29 JUMP D[Libre] RETORNO 28 SETR Actual,D[Libre+1] CALL C 25 SETR Libre, Libre+3+2 X 27 SETR Libre,Actual i:=1 37 SETR Libre, Libre+3 38 JUMP C 39 STOP PROCEDURE C Prof. Ma. Laura Cobo Página 63