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