Arquiteturas de Computadores
Lista de Conteúdos
Hoje, um computador moderno é um dispositivo eletrônico capaz de receber dados, processar informações e entregar um retorno. A maneira como as diferentes partes de um computador vão ser organizadas e irão interagir para entregar esse retorno é o que chamamos de arquitetura de computadores. Em 1962, Frederick P. Brooks Jr. descreveu isso com as seguintes palavras:
“A arquitetura de computadores, como outras arquiteturas, é a arte de determinar as necessidades do usuário de uma estrutura e, em seguida, projetar para atender a essas necessidades da maneira mais eficaz possível, dentro das restrições econômicas e tecnológicas”.
Seguindo essa definição, a arquitetura de computadores pode ser subdividida em três categorias:
Conjunto de Instruções - ISA (Instruction Set Architecture)
A base da arquitetura de computadores é o Conjunto de Instruções (ISA), que define as funções e capacidades da unidade central de processamento (CPU). Como os computadores não entendem linguagens de programação de alto nível, como Java, C++ ou a maioria das linguagens de programação usadas, um processador precisa receber instruções codificadas de alguma forma numérica, geralmente como números binários. Ferramentas de software, como compiladores, traduzem essas linguagens de alto nível em instruções que o processador pode entender. ISA é a linguagem de programação incorporada e define qual programação uma CPU pode executar ou processar, bem como o tamanho da palavra, modos de endereço de memória, registradores do processador e tipo de dados. Um bom ISA se compromete entre conveniência do programador (quão fácil de entender o código), tamanho do código (quanto código é necessário para fazer uma ação específica), custo do computador para interpretar as instruções (mais complexidade significa mais hardware necessário para decodificar e executar as instruções) e velocidade do computador (com hardware de decodificação mais complexo, o tempo de decodificação é maior).
Microarquitetura
A microarquitetura é a organização do computador e define o elemento de processamento e armazenamento de dados e como eles devem ser implementados no ISA. É a implementação de hardware de como um ISA é implementado em um processador específico. O tamanho do cache da CPU de um computador, por exemplo, é um problema que geralmente não tem nada a ver com o ISA. A organização do computador ajuda a planejar a seleção de um processador para um projeto específico. Projetos multimídia podem precisar de acesso a dados muito rápido, enquanto máquinas virtuais podem precisar de interrupções rápidas. Às vezes, certas tarefas também precisam de componentes adicionais. Por exemplo, um computador capaz de executar uma máquina virtual precisa de hardware de memória virtual para que a memória de diferentes computadores virtuais possa ser mantida separada. A organização e os recursos do computador também afetam o consumo de energia e o custo do processador.
Projeto do Sistema (System Design)
Uma vez que um conjunto de instruções e uma microarquitetura tenham sido projetados, uma máquina prática deve ser desenvolvida. Esse processo de design também é chamado de implementação. A implementação inclui todas as partes de hardware de um computador, incluindo processadores de dados, multiprocessadores, controladores de memória e acesso direto à memória. Também inclui a unidade de processamento gráfico (GPU). O design do sistema é a concretização física da arquitetura, impactando diretamente a eficiência e a capacidade de processamento da máquina.
Voltando na História
A história da arquitetura de computadores remonta a Charles Babbage e sua máquina analítica em 1837. Até os pedidos de patente de Konrad Zuse para a construção do Z1 em 1936, se passaram quase cem anos usando o mesmo conceito. As instruções de máquina poderiam ser armazenadas no mesmo armazenamento usado para dados. Mas os computadores analógicos e eletromecânicos estavam prestes a serem substituídos por computadores puramente eletrônicos.
Arquitetura von Neunamm
Em 1945, o matemático John von Neumann descreveu a organização de elementos lógicos afirmando que um computador é composto por: um processador com uma unidade aritmética e lógica (ALU) e uma unidade de controle; uma unidade de memória que pode se comunicar diretamente com o processador usando conexões chamadas de barramentos; conexões para dispositivos de entrada/saída; e um armazenamento secundário para salvar e fazer backup de dados.
O conceito computacional central desta arquitetura é que instruções e dados são carregados na mesma unidade de memória, que é a memória principal do computador e consiste em um conjunto de localizações endereçáveis. O processador pode então acessar as instruções e dados necessários para a execução de um programa de computador usando conexões dedicadas chamadas barramentos – um barramento de endereço que é usado para identificar o local endereçado e um barramento de dados que é usado para transferir o conteúdo de e para um local.
Essa abordagem tornou-se predominante nas primeiras décadas da computação eletrônica.
Arquitetura Harvard
Em contraste com a arquitetura von Neumann, a arquitetura Harvard é uma arquitetura de computador com armazenamento separado e caminhos de sinal para instruções e dados. A verdadeira distinção de uma máquina de Harvard é que a memória de instruções e de dados ocupam espaços de endereço diferentes. Em outras palavras, um endereço de memória não identifica exclusivamente um local de armazenamento (como faz em uma máquina von Neumann); também é necessário conhecer o espaço de memória (instrução ou dados) ao qual o endereço pertence. No entanto, essa abordagem exige maior complexidade no design do hardware.
Nos dias de hoje
Embora a arquitetura de von Neumann seja muito popular nas aulas de ciência da computação, essas distinções formais em maior parte já desapareceram. Como resultado, você pode olhar para uma CPU moderna e chamá-la de von Neumann, porque os principais componentes estarão lá, mas não se enquadram em uma categoria estrita.
Dispositivos modernos (smartphones ou desktops) não possuem programas em ROM, eles estão em algum armazenamento externo. Como esses dispositivos modernos usam algum tipo de sistema operacional (Windows, Linux, Android, iOS), eles devem carregar o programa na RAM. A ROM é apenas para inicializar depois de ligada e, em seguida, apenas a RAM é usada.
A presença de sistemas operacionais e o armazenamento externo de programas desafiam a rigidez das categorias tradicionais.
Arquitetura Harvard Modificada
Na Arquitetura Harvard Modificada, as modificações são as várias maneiras de afrouxar a separação entre código e dados, enquanto ainda suportam dados simultâneos de alto desempenho e acesso a instruções da arquitetura Harvard.
Um microcontrolador de 32 bits como o ARM Cortex M3, têm espaço de endereço único e barramento único - Von Neuman. Para contornar o gargalo de von Neumann (a CPU não pode acessar o programa e os dados ao mesmo tempo), os caches locais são adicionados para instruções e dados. - Harvard.
Enquanto a CPU executa a partir do cache, ela atua como uma máquina de Harvard pura. Ao acessar a RAM, ele age como uma máquina de von Neumann. Essa modificação é generalizada em processadores modernos, como a arquitetura ARM, Power ISA e processadores x86. Às vezes é vagamente chamado de arquitetura de Harvard, ignorando o fato de que é realmente “modificado”.
No final, essa distinção entre os dois é relevante apenas quando as instruções são tratadas como dados, como em código automodificável ou compiladores Just In Time.
Conclusão
Apesar das inovações ao longo do tempo, a arquitetura de computadores enfrenta desafios contemporâneos. A demanda por processadores mais rápidos e eficientes, aliada à crescente complexidade das aplicações, exige constantes adaptações nas áreas de ISA, microarquitetura e projeto do sistema. Além disso, a computação quântica e novos paradigmas de processamento desafiam as bases tradicionais da arquitetura de computadores.
Referências
https://online.sunderland.ac.uk/what-is-computer-architecture/
https://en.wikipedia.org/wiki/Computer_architecture
https://en.wikipedia.org/wiki/Stored-program_computer
https://en.wikipedia.org/wiki/Von_Neumann_architecture
https://en.wikipedia.org/wiki/Harvard_architecture