Aula 7

Data de publicação: Oct 20, 2013 9:18:4 PM

Execução de um programa residente em memória

Na arquitetura de von Neumann, de forma a minimizar os recursos envolvidos, as instruções e dados partilhavam a mesma memória e canais de comunicação (barramentos).

Para que o CPU identifica-se quais as posições de memória que continham instruções ou dados, era necessário que estas estivessem distribuídas de forma consecutiva.

Assim, o CPU sabe que a primeira leitura que fará da memória irá conter o código da instrução (exemplo: somar dois valores) e que a posição seguinte irá conter os operandos que foram indicados na instrução.

Terminada a execução desta instrução sabe automaticamente que na próxima posição de memória encontrar-se-á a próxima instrução a executar.

Organização do conteúdo da memóna no modelo de von Neumann

Como se entenderá, esta "poupança" trouxe problemas sobretudo a nível de velocidade já que dados e instruções são encaminhados em série (von Neumann Bottleneck).

Existe contudo, uma arquitetura de nome Harvard que possui barramentos de dados e endereços distintos, bem como memória de programa e dados independentes. Apesar de parecer uma alternativa melhor, os aperfeiçoamentos realizados sobre a arquitetura de von Neumann, fizeram com que esta última, seja ainda hoje, a base dos nossos microprocessadores. No entanto, algumas características da arquitetura de Harvard foram aproveitadas para melhorar a arquitetura de von Neumann. Por exemplo, o microprocessador 80C51 usa os mesmos barramentos para aceder à memória, mas este processador distingue que parte da memória é referente à memória de programa, e que parte é memoria de dados.

Independentemente das modificações introduzidas, a execução de um programa segue um determinado conjunto de etapas:

    • Busca (fetch) à unidade de memória da próxima instrução a ser executada.

    • Descodificação da instrução a executar. Identificação dos operandos (caso existam) e qual o tipo de operação a realizar (exemplo: somar dois valores).

    • Obtenção dos operandos (caso tenham sido especificados na instrução anterior) e carregamento destes nos registos internos do CPU (exemplo: valores a somar).

    • Execução da tarefa.

    • Armazenamento do resultado em memória ou em registos internos do CPU.

Todo o processo anterior irá repetir-se para a próxima instrução. Todavia nem todos os programas necessitam de percorrer todos estes passos. Resumindo, existe um ciclo que se denomina fetch-decode-execute cycle (ciclo de procura-descodificação-execução) e que engloba todas as ações realizadas por um processador.

Ciclo fetch-decode-execute