Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Nomes: Amanda Kelly
	Giovanna Sampaio
	Giulianni Oliveira
PARADIGMAS LIGUAGENS DE PROGRAMAÇÃO
CAPÍTULO 10
1. Qual é a definição usada neste capítulo para subprogramas “simples”?
Subprogramas simples são os subprogramas que não podem ser aninhados e que todas as variáveis locais são estáticas.
2. Qual dos dois – chamador ou chamado – grava informações acerca do estado da execução? 
3. O que deve ser armazenado para a ligação a um subprograma?
As ações de chamada e de retorno requerem armazenamento para o seguinte:
• Informações de estado sobre o chamador
• Parâmetros
• Endereço de retorno
• Valor de retorno para funções
• Variáveis temporárias usadas pelo código dos subprogramas.
4. Qual é a tarefa de um ligador? 
5. Quais são as duas razões pelas quais implementar subprogramas com variáveis locais dinâmicas da pilha é mais difícil do que implementar subprogramas simples? 
• O compilador deve gerar código que faça alocação e liberação implícitas de variáveis locais.
• A recursão adiciona a possibilidade de múltiplas ativações simultâneas de um subprograma, ou seja, pode existir mais de uma instância (execução incompleta) de um subprograma em um dado momento, com ao menos uma chamada de fora do subprograma e uma ou mais chamadas recursivas. A recursão, então, requer múltiplas instâncias de registros de ativação, uma para cada ativação do subprograma que puder existir ao mesmo tempo. O número de ativações é limitado apenas pelo tamanho da memória da máquina. Cada uma delas requer sua instância de registro de ativação.
6. Qual a diferença entre um registro de ativação e uma instância de registro de ativação? 
7. Por que o endereço de retorno, a ligação dinâmica e os parâmetros são colocados na parte inferior do registro de ativação? 
O endereço de retorno, a ligação dinâmica e os parâmetros são colocados na instância de registro de ativação pelo chamador, essas entradas devem aparecer primeiro. O endereço de retorno normalmente consiste em um ponteiro para a instrução seguinte à chamada no segmento de código da unidade de programa chamadora. A ligação dinâmica é um ponteiro para a base da instância de registro de ativação do chamador. Em linguagens de escopo estático, essa ligação é usada para fornecer informações de rastreamento quando um erro em tempo de execução ocorre. Em linguagens de escopo dinâmico, a ligação dinâmica é usada para acessar variáveis não locais. Os parâmetros reais no registro de ativação são os valores ou os endereços fornecidos pelo chamador.
8. Que tipos de máquinas geralmente usam registradores para passagem de parâmetros? 
9. Quais são os dois passos para localizarmos uma variável não local em uma linguagem de escopo estático com variáveis locais dinâmicas da pilha e subprogramas aninhados?
Uma referência para uma variável não local em uma linguagem com escopo estático com subprogramas aninhados requer um processo de acesso de dois passos. Todas as variáveis não estáticas que podem ser acessadas não localmente estão em instâncias de registro de ativação existentes e, logo, estão em algum lugar na pilha. O primeiro passo do processo de acesso é encontrar a instância de registro de ativação na pilha em que a variável foi alocada. A segunda parte é usar o deslocamento local da variável (dentro da instância de registro de ativação) para acessá-la.
 
10. Defina encadeamento estático, profundidade estática, profundidade de aninhamento e deslocamento de encadeamento. 
11. O que é um PE e qual o seu propósito? 
É um item necessário para controlar a execução de um subprograma. O PE é usado como a base do deslocamento de endereçamento do conteúdo de dados da instância de registro de ativação – parâmetros e variáveis locais.
Inicialmente, o PE aponta para a base, ou primeiro endereço da instância de registro de ativação do programa principal. Logo, o sistema de tempo de execução deve garantir que ele sempre aponte para a base da instância do registro de ativação da unidade de programa que está sendo executada. 
Quando um subprograma é chamado, o PE atual é salvo na nova instância de registro de ativação como a ligação dinâmica. O PE é então configurado para apontar para a base da nova instância de registro de ativação. Após o retorno do subprograma, o topo da pilha é configurado para o valor do PE atual menos um, e o PE é configurado para a ligação dinâmica da instância de registro de ativação do subprograma que completou sua execução. Reinicializar o topo da pilha efetivamente remove a instância de registro de ativação do topo.
12. Como as referências a variáveis são representadas no método de encadeamento estático? 
13. Cite três linguagens de programação bastante usadas que não permitem subprogramas aninhados. 
C++, C# e JAVA.
14. Cite dois problemas em potencial com o método de encadeamento estático. 
15. Explique os dois métodos de implementar blocos. 
Os blocos podem ser implementados pelo uso do processo de encadeamento estático para implementar subprogramas ninhados. Blocos são tratados como subprogramas sem parâmetros, sempre chamados a partir do mesmo local do programa. Logo, cada bloco tem um registro de ativação. Uma instância de seu registro de ativação é criada a cada vez que o bloco é executado.
Os blocos também podem ser implementados de uma maneira mais simples e mais eficiente. A quantidade máxima de armazenamento necessária para variáveis de um bloco em qualquer momento durante a execução de um programa pode ser determinada estaticamente, porque os blocos são acessados (entrada e saída) em ordem estritamente textual. 
16. Descreva o método de acesso profundo de implementação de escopo dinâmico. 
17. Descreva o método de acesso raso de implementação de escopo dinâmico.
 No método de acesso raso, as variáveis declaradas em subprogramas não são armazenadas nos registros de ativação desses subprogramas. Como com o escopo dinâmico existe, no máximo, uma versão visível de uma variável de um nome específico em um momento do tempo, uma abordagem bastante diferente pode ser usada. 
Uma variação do acesso raso é ter uma pilha separada para cada nome de variável em um programa completo. Cada vez que uma nova variável com um nome em particular é criada por uma declaração no início de um subprograma chamado, é dada uma célula no topo da pilha para o nome da variável. Cada referência ao nome é para a variável no topo da pilha associada com tal nome, porque a variável do topo é a mais recentemente criada. 
Quando um subprograma termina, o tempo de vida de suas variáveis locais termina, e as pilhas para esses nomes de variáveis têm tais nomes removidos. Esse método permite referências rápidas a variáveis, mas manter as pilhas nas entradas e saídas de subprogramas é custoso.
Outra opção para implementar acesso raso é usar uma tabela central com uma posição para cada nome diferente de variável em um programa. Com cada entrada, um bit chamado ativo é mantido para indicar se o nome tem uma vinculação ou associação atual a uma variável. Qualquer acesso a qualquer variável
pode então ser para um deslocamento na tabela central. O deslocamento é estático, então o acesso pode ser rápido.
18. Quais são as duas diferenças entre o método de acesso profundo para acesso a variáveis não locais em linguagens de escopo dinâmico e o método de encadeamento estático para linguagens de escopo estático? 
19. Compare a eficiência do método de acesso profundo com a do método de acesso raso, em termos de chamadas e de acesso a variáveis não locais.
A escolha entre o acesso raso e o profundo para as variáveis não locais depende da frequência relativa das chamadas a subprogramas e referências não locais. 
O método de acesso profundo fornece uma ligação rápida de subprogramas, mas as referências às variáveis não locais, especialmente referências às variáveis não locais distantes (em termos do encadeamento de chamadas) são caras. 
O método de acesso raso fornece referências muito mais rápidas para variáveis não locais, especialmente para variáveis não locais distantes, mas é mais custosaem termos de ligação de subprogramas.

Mais conteúdos dessa disciplina