Arquitetura de Von Neumann Introdução Leandro Tonietto [email protected] ago-09 John Von Neumann, introduziu o projeto lógico de computadores com programa armazenado na memória. Computadores até então não podiam armazenar programas em memória para interpretá-los. Primeiro computador (EDVAC) com este fim surgiu em 1944. O projeto durou 1944—1951 e computador foi utilizado até 1962. Surge então a expressão Arquitetura de Von Neumann [1]: Em 1945, primeiro algoritmo para testar a máquina, cujo objetivo era a classificação de uma série de dados em ordem não decrescente de uma chave. Algoritmo chamado de classificação por intercalação. Arquitetura de Von Neumann Objetivo de mostrar que o EDVAC tinha propósitos gerais e não apenas de cálculos científicos. Toda a codificação foi feita em linguagem de máquina. Arquitetura de Von Neumann Hardware do computador dividido em 3 partes: Unidade central de processamento Dispositivos de entrada e saída: Saída Memória Armazenamento de dados e instruções Arquitetura de Von Neumann Entrada Entrada e saída de dados. Interação com usuários. Memória CPU Buscar, executar e devolver resultado de instruções para a memória Dispositivos de entrada e saída “... Estrutura de computadores digitais com programas armazenados na memória e, portanto, passível de automodificação e de geração por outros programas.” São periféricos/hardware que permitem a entrada de dados e instruções para o computador e exibem o resultado do processamento da CPU. Entrada: teclado, mouse, drive de disquete, drive DVD, ... Saída: impressora, monitor, drive de disquete, ... Interatividade com o usuário. Arquitetura de Von Neumann Memória: Tudo o que é executado é carregado para a memória principal Coleção de posições de memória ou slots de memória. Dados e instruções são acessados através do endereço de memória. Barramentos conectam a memória à CPU 1 Arquitetura de Von Neumann CPU – central process unit: Registradores UC - Unidade de controle Controla todo o fluxo de execução da CPU. Busca dados e instruções da memória e coordena a troca de dados entre registradores e ULA. Funcionamento da CPU: Para uma tarefa ser executada, ela deve ser carregada da memória principal (instrução a instrução) na ULA. A ULA executa e devolve o resultado para a memória. Programação: O conjunto de instruções possíveis que uma CPU pode executar é chamado de linguagem de máquina. Programadores são aqueles que podem controlar o comportamento do computador através de instruções em linguagens de máquina. Na prática, os programas (conjuntos de instruções em seqüência) são programados em linguagens de programação ditas de alto nível e convertidos para linguagem de máquina por compiladores. Execução: Tarefa: c =a+ b Seqüência de execução na CPU: R0 recebe o valor de a R1 recebe o valor de b R0 e R1 são passados para ULA ULA executa a soma Resultado é devolvido para R2 Posição de memória associada a c recebe o resultado Arquitetura de Von Neumann Tarefas complexas são decompostas em seqüência de instruções simples Cada instrução é executa movendo-se dados dos registradores para a ULA, que executa o cálculo ou operação apropriada e retorna dados para os registradores. Ciclo da CPU: Caminho completo de uma instrução: dos registradores até a ULA e da ULA até os registradores, passando por barramentos. Velocidade do computador é medida em ciclos por segundo. Arquitetura de Von Neumann Exemplo: Posições de memória construídas dentro da CPU. Muito mais rápido do que acesso a memória principal (RAM) Arquitetura de Von Neumann Funcionamento da CPU: Coleção de circuitos que realizam as operações (adição, subtração, manipulação de bits, ...) sobre os dados. Unidade central de processamento é dividida em várias subunidades: ULA – Unidade lógica e aritmética Arquitetura de Von Neumann O programa é carregado para a memória O sistema operacional controla a seqüência das operações e alocação de memória. E os programas são lidos a partir da primeira instrução até chegar a uma instrução de stop ou parar. Unidade de controle recebe cada uma das instruções, interpreta e dá seqüência a fluxo de execução operativa (registradores – ULA) Arquitetura de Von Neumann Linguagens de programação: Linguagens – conjunto finito de comandos que são combinados (programados) de tal forma a produzir um programa, para realizar uma tarefa. Baixo nível – são linguagens de máquina, portanto, é o que o computador consegue interpretar e executar. Alto nível – são linguagens de aquelas que facilitam a programação por parte do programador, pois estão mais próximas a linguagem humana. Exemplo: C/C++, Java, Pascal, ... Compilador – é um programa que converte as instruções de um programa escrito em uma linguagem alto-nível em instruções de máquina. 2 Arquitetura de Von Neumann Linguagem de máquina: São comandos simples que a CPU pode executar. Estão comando são combinados para produzir uma tarefa mais complexa. Exemplos de comandos baixo nível: Registrador R0 recebe um valor Registrador R1 recebe um valor ULA computa operação de soma R2 recebe o resultado da soma feita pela ULA Arquitetura de Von Neumann Exercício. Primeira tarefa de programação: Qual seria o conjunto de instruções (programa) para somar 100 números armazenados na memória? Responda com frases, não é necessário saber programar. Primeiro em alto nível... Depois em “linguagem de máquina”... Agora, como desafio, tente programar. Associe um comando com cada frase ou instrução necessária. Arquitetura de Von Neumann Na prática, cada instrução da ULA está associada a uma seqüência de bits. Por exemplo: Soma poderia ser: 01001000 Atribuição de variável: 00000001 Desvio de fluxo: 01001110 Portanto: impossível programar desta forma! Solução: programar em linguagens de alto nível e deixar o trabalho “pesado” para o compilador. Referências REED, David. A Balanced Introduction to Computer Science and Programming. Prentice Hall. Wikipédia. Arquitetura de Von Neumann KOWALTOWSKI, Tomas. A Obra e o Legado de John Von Neumann. Estudos Avançados, V. 10, no. 26, São Paulo, 1996. 3