HIERARQUIA DE NÍVEIS – ARQUITETURA VON NEUMMAN AULA 02 – Arquitetura de Computadores Gil Eduardo de Andrade O conteúdo deste documento é baseado no livro “Princípios Básicos de Arquitetura e Organização de Computadores” – Linda Null e Julia Labur. Desenvolvimento Histórico O caminho do desenvolvimento dos computadores passou por descobertas acidentais, pressão comercial e ideias extravagantes. Durante seus mais de 50 anos de história inúmeras tecnologias foram desenvolvidas, melhoradas e adaptadas, porém sem dúvida o componente que revolucionou a era da eletrônica e consequentemente da informática foi o transistor. Contudo para entendermos a história dos computadores ao longo de seus 50 anos de existência (aproximadamente) dividimos sua evolução em gerações, cada geração sendo definida pela tecnologia usada para construir a máquina. Primeira Geração: Computadores à Válvulas (1945–1953) John Mauchly e J. Presper Eckert foram os dois principais inventores do ENIAC, apresentado em 1946. O ENIAC é reconhecido como sendo o primeiro computador digital de uso geral totalmente eletrônico, que usava 17.468 válvulas, ocupava 1800 metros quadrados de chão, pesava 30 toneladas e consumia 174 kilowatts de energia. O ENIAC tinha uma capacidade de memória de cerca de 1000 bits de informação (cerca de 20 números de 10 dígitos decimais) e usava cartões perfurados para armazenar dados. Durante a Segunda Guerra Mundial, o exército do EUA tinha a necessidade de calcular trajetórias dos novos equipamentos de tiro. Milhares de soldados trabalhavam na aritmética necessária para obter resultados das balísticas. Considerando que dispositivos eletrônicos poderiam diminuir o tempo de cálculo de dias para minutos, o exército liberou fundos para o ENIAC, que realmente reduziu o tempo de cálculo de uma tabela, de 20 horas para 30 segundos, mostrando que computadores com válvulas eram rápidos e viáveis. Durante a próxima década, sistemas a válvula continuaram a melhorar e foram comercialmente bem-sucedidos. → O que é uma válvula? São Tubos de vácuo que ficaram conhecidos como válvulas pelo fato de controlarem o fluxo de elétrons em sistemas eletrônicos da mesma forma como as válvulas controlam o fluxo de água em sistemas encanados. Observando uma válvula percebemos sua semelhança com uma lâmpada, e essa semelhança não é mera coincidência. Tanto a válvula eletrônica quanto as lâmpadas incandescentes são dispositivos constituídos de um bulbo de vidro no interior do qual se faz o vácuo e que contém um filamento condutor que deixa atravessar uma corrente elétrica. As válvulas são grandes, são frágeis e só funcionam depois que o filamento fica em brasa, não somente demoram para entrar em carga (antigamente esperava-se “esquentar” os rádios) como também consomem muita potência elétrica. Segunda Geração: Computadores com Transistores (1954–1965) Em 1948, pesquisadores do Bell Laboratories – John Bardeen, Walter Brattain e William Shockley – inventaram o transistor. Esta nova tecnologia não apenas revolucionou dispositivos como televisões e rádios, mas também impulsionou a indústria de computadores para uma nova geração. Visto que transistores consomem menos energia do que válvulas, são menores e trabalham com mais confiabilidade, os circuitos de computadores consequentemente se tornaram menores e mais confiáveis. Apesar do uso de transistores, os computadores desta geração ainda eram grandes e bastante caros. → O que é um transistor O transistor é uma versão em estado sólido de uma válvula, elétrons se comportam melhor em um meio sólido do que no vazio aberto de um tubo de vácuo. Transistores não são apenas pequenas válvulas; eles também operam mais frios e são muito mais confiáveis. Filamentos de tubos de vácuo, como filamentos de lâmpadas, funcionam mais quentes e em algum momento queimam. Computadores que usam componentes transistorizados são naturalmente menores e funcionam em temperaturas menores do que suas válvulas antecessoras. A miniaturização final, entretanto, não é realizada apenas pela substituição de válvulas por transistores, mas sim colocando circuitos inteiros em um pedaço de silício. Terceira Geração: Computadores com circuitos integrados (1965–1980) A verdadeira explosão no uso de computadores veio com a geração de circuitos integrados. Jack Kilby inventou o circuito integrado (CI), ou microchip, feito com germânio. Seis meses depois, Robert Noyce (que também havia trabalhado em projeto de circuitos integrados) criou um dispositivo similar usando silício em vez de germânio, foi sob este chip de silício que foi construída a indústria de computadores. Os CIs pioneiros permitiam que dezenas de transistores existissem em um único chip de silício que era menor do que um transistor simples em “componente discreto”. Os computadores se tornaram mais rápidos, menores e mais baratos, trazendo imensos ganhos ao poder de processamento. Quarta Geração: Computadores VLSI (1980–????) Na terceira geração de evolução eletrônica, vários transistores foram integrados em um chip. À medida que as técnicas de fabricação e as tecnologias de chip avançaram, um número crescente de transistores foram empacotados em um chip. Contudo existem diversos níveis de integração: SSI (small scale integration – integração em pequena escala), na qual existem de 10 a 100 componentes por chip; MSI (medium scale integration – integração em média escala), na qual existem de 100 a 1.000 componentes por chip; LSI (large scale integration – integração em larga escala), na qual existem de 1.000 a 10.000 componentes por chip; e, finalmente, VLSI (very large scale integration – integração em muito larga escala), na qual existem mais de 10.000 componentes por chip. Este último nível, VLSI, marca o início da quarta geração de computadores. HIERARQUIA DE NÍVEIS DO COMPUTADOR A organização de um sistema de computação pode ser abordada em camadas. Podemos imaginar a máquina como sendo construída em uma hierarquia de níveis, em que cada nível tem uma função específica. Cada nível pode ser visto como uma máquina virtual que executa seu próprio conjunto de instruções, solicitando às máquinas dos níveis mais baixos que realizem as tarefas quando necessário. → Nível 6: Nível do Usuário, composto pelas aplicações, é o nível com o qual todos estamos familiarizados. Neste nível executamos programas como processadores de textos, pacotes gráficos ou jogos, sendo os níveis inferiores praticamente invisíveis ao nível do usuário. → Nível 5: Nível das Linguagens de Alto Nível, como C, C++, FORTRAN, essas linguagens devem ser traduzidas (usando um compilador ou um interpretador) para uma linguagem que a máquina possa entender. Linguagens compiladas são traduzidas para a linguagem simbólica do nível abaixo. → Nível 4: Nível da Linguagem Simbólica, são a tradução das linguagens compiladas de alto nível para linguagem simbólica, que em níveis inferiores, será diretamente traduzida para linguagem de máquina. Esta tradução ocorre um-a-um, ou seja, uma instrução em linguagem simbólica é traduzida exatamente para uma instrução em linguagem de máquina (zeros e uns). → Nível 3: Nível do Software de Sistema, trata das instruções de operação do sistema. Este nível é responsável por multiprogramação, proteção de memória, sincronização de processos e várias outras funções importantes. Muitas vezes as instruções traduzidas da linguagem simbólica para a linguagem de máquina são passadas por meio deste nível sem modificação. → Nível 2: Arquitetura do Conjunto de Instruções (ISA), ou Nível de Máquina, consiste da linguagem de máquina reconhecida pela arquitetura particular do sistema de computação, podem ser executados diretamente pelos circuitos eletrônicos sem quaisquer interpretadores, tradutores ou compiladores. → Nível 1: Nível de Controle, é onde a unidade de controle se assegura de que as instruções sejam decodificadas e executadas adequadamente e de que os dados sejam movidos para onde e quando eles devem ser. A unidade de controle interpreta as instruções de máquina passadas para ela, uma de cada vez, fazendo com que as ações requeridas sejam executadas. → Nível 0: Nível de Lógica Digital, onde encontramos os componentes físicos do sistema de computação: as portas e os fios. Estes são os blocos básicos de construção, as implementações da lógica matemática, que são comuns a todos os sistemas de computação. ARQUITETURA VON NEUMMAN Nas primeiras máquinas de computação eletrônicas, programar era sinônimo de conectar fios a pinos, sendo assim trocar a programação, ou seja, o programa que uma máquina devia executar era uma tarefa quase impossível, porém com a proposta de Arquitetura do matemático Von Neumman, foi possível criar computadores com programas armazenados e estes tornaram-se conhecidos como sistemas de Von Neumann. Arquitetura Von Neumman consiste em três sistemas de hardware: → Uma unidade central de processamento (UCP), como unidade de controle, formada pela unidade lógica aritmética (ULA), registradores (pequenas memórias) e um contador de programa; → Um sistema de memória principal, que armazena programas que controlam a execução do computador; → Um sistema de Entrada e Saída. Seu funcionamento agrega os seguintes tópicos: → Capacidade de executar processamento sequencial de instruções; → Possui um único caminho, físico ou lógico, entre o sistema de memória principal e a unidade de controle da UCP, forçando a alternância entre ciclos de instrução e execução. Um ciclo de instrução (ou ciclo de busca-decodificação-execução) consiste em: 1. A unidade de controle busca a próxima instrução do programa na memória usando o contador de programa para determinar onde a instrução está localizada. 2. A instrução é decodificada para uma linguagem que a ULA possa entender. 3. Qualquer operando de dados requerido para executar a instrução é carregado da memória e colocados em registradores dentro da UCP. 4. A ULA executa a instrução e coloca os resultados em registradores ou na memória.