Arquitetura do computador - Computer architecture

Diagrama de blocos de um computador básico com CPU uniprocessador. Linhas pretas indicam fluxo de dados, enquanto linhas vermelhas indicam fluxo de controle. As setas indicam a direção do fluxo.

Na engenharia da computação , a arquitetura do computador é um conjunto de regras e métodos que descrevem a funcionalidade, a organização e a implementação dos sistemas de computador . A arquitetura de um sistema refere-se à sua estrutura em termos de componentes especificados separadamente desse sistema e seus inter-relacionamentos.

Algumas definições de arquitetura a definem como a descrição dos recursos e do modelo de programação de um computador, mas não de uma implementação específica. Em outras definições, a arquitetura do computador envolve o projeto da arquitetura do conjunto de instruções , o projeto da microarquitetura , o projeto lógico e a implementação .

História

A primeira arquitetura de computador documentada foi a correspondência entre Charles Babbage e Ada Lovelace , descrevendo o mecanismo analítico . Ao construir o computador Z1 em 1936, Konrad Zuse descreveu em dois pedidos de patente para seus projetos futuros que as instruções da máquina poderiam ser armazenadas no mesmo armazenamento usado para os dados, ou seja, o conceito de programa armazenado . Dois outros exemplos importantes são:

O termo "arquitetura" na literatura da computação pode ser atribuído ao trabalho de Lyle R. Johnson e Frederick P. Brooks, Jr. , membros do departamento de Organização de Máquinas no principal centro de pesquisa da IBM em 1959. Johnson teve a oportunidade de escrever um documento proprietário comunicação de pesquisa sobre o Stretch , um supercomputador desenvolvido pela IBM para o Laboratório Nacional de Los Alamos (na época conhecido como Laboratório Científico de Los Alamos). Para descrever o nível de detalhe para discutir o computador luxuosamente decorado, ele observou que sua descrição de formatos, tipos de instrução, parâmetros de hardware e melhorias de velocidade estavam no nível de "arquitetura de sistema", um termo que parecia mais útil do que "organização de máquina ”.

Posteriormente, Brooks, um designer de Stretch, abriu o Capítulo 2 de um livro chamado Planning a Computer System: Project Stretch afirmando: “Arquitetura de computador, como outra arquitetura, é a arte de determinar as necessidades do usuário de uma estrutura e, em seguida, projetar para atender a essas necessidades da forma mais eficaz possível dentro das restrições econômicas e tecnológicas. ”

Brooks continuou ajudando a desenvolver a linha de computadores IBM System / 360 (agora chamada IBM zSeries ), na qual “arquitetura” se tornou um substantivo que define “o que o usuário precisa saber”. Mais tarde, os usuários de computador passaram a usar o termo de muitas maneiras menos explícitas.

As primeiras arquiteturas de computador foram projetadas no papel e, em seguida, construídas diretamente na forma final de hardware. Mais tarde, os protótipos de arquitetura de computador foram fisicamente construídos na forma de um computador com lógica transistor-transistor (TTL) - como os protótipos do 6800 e do PA-RISC - testados e ajustados, antes de se comprometer com a forma de hardware final. A partir da década de 1990, novas arquiteturas de computador são tipicamente "construídas", testadas e ajustadas - dentro de alguma outra arquitetura de computador em um simulador de arquitetura de computador ; ou dentro de um FPGA como um microprocessador soft ; ou ambos - antes de se comprometer com a forma final de hardware.

Subcategorias

A disciplina de arquitetura de computadores possui três subcategorias principais:

Existem outras tecnologias na arquitetura de computadores. As seguintes tecnologias são usadas em empresas maiores, como a Intel, e foram estimadas em 2002 como responsáveis ​​por 1% de toda a arquitetura de computador:

  • Macroarquitetura : camadas arquitetônicas mais abstratas do que microarquitetura
  • Arquitetura do conjunto de instruções de montagem : um montador inteligente pode converter uma linguagem de montagem abstrata comum a um grupo de máquinas em linguagem de máquina ligeiramente diferente para diferentes implementações .
  • Macroarquitetura visível para o programador : ferramentas de linguagem de nível superior, como compiladores, podem definir uma interface consistente ou contratar os programadores que as usam, abstraindo as diferenças entre ISA, UISA e microarquitetura subjacentes . Por exemplo, os padrões C , C ++ ou Java definem diferentes macro-arquiteturas visíveis para o programador.
  • Microcódigo : microcódigo é um software que traduz instruções para rodar em um chip. Ele atua como um invólucro em torno do hardware, apresentando uma versão preferencial da interface do conjunto de instruções do hardware. Este recurso de tradução de instruções oferece opções flexíveis aos projetistas de chips: Ex. 1. Uma nova versão aprimorada do chip pode usar o microcódigo para apresentar exatamente o mesmo conjunto de instruções da versão do chip antigo, de modo que todo software direcionado a esse conjunto de instruções será executado no novo chip sem precisando de mudanças. Por exemplo, 2. O microcódigo pode apresentar uma variedade de conjuntos de instruções para o mesmo chip subjacente, permitindo que ele execute uma variedade maior de software.
  • UISA : Arquitetura do conjunto de instruções do usuário, refere-se a um dos três subconjuntos das instruções RISC CPU fornecidas pelos processadores PowerPC RISC. O subconjunto UISA, são as instruções RISC de interesse para desenvolvedores de aplicativos. Os outros dois subconjuntos são instruções VEA (Arquitetura de Ambiente Virtual) usadas por desenvolvedores de sistema de virtualização e OEA (Arquitetura de Ambiente Operacional) usadas por desenvolvedores de Sistema Operacional.
  • Arquitetura de pinos : as funções de hardware que um microprocessador deve fornecer a uma plataforma de hardware, por exemplo, os pinos x86 A20M, FERR / IGNNE ou FLUSH. Além disso, mensagens que o processador deve emitir para que caches externos possam ser invalidados (esvaziados). As funções da arquitetura de pinos são mais flexíveis do que as funções ISA porque o hardware externo pode se adaptar a novas codificações ou mudar de um pino para uma mensagem. O termo "arquitetura" se ajusta, porque as funções devem ser fornecidas para sistemas compatíveis, mesmo que o método detalhado seja alterado.

Funções

Definição

A arquitetura do computador está preocupada em equilibrar o desempenho, a eficiência, o custo e a confiabilidade de um sistema de computador. O caso da arquitetura do conjunto de instruções pode ser usado para ilustrar o equilíbrio desses fatores concorrentes. Conjuntos de instruções mais complexos permitem que os programadores escrevam programas mais eficientes em termos de espaço, uma vez que uma única instrução pode codificar alguma abstração de nível superior (como a instrução x86 Loop). No entanto, instruções mais longas e complexas levam mais tempo para o processador decodificar e podem ser mais caras para implementar de forma eficaz. O aumento da complexidade de um grande conjunto de instruções também cria mais espaço para falta de confiabilidade quando as instruções interagem de maneiras inesperadas.

A implementação envolve projeto de circuito integrado, embalagem, energia e resfriamento. A otimização do design requer familiaridade com compiladores, sistemas operacionais para design lógico e empacotamento.

Arquitetura do conjunto de instruções

Uma arquitetura de conjunto de instruções (ISA) é a interface entre o software e o hardware do computador e também pode ser vista como a visão do programador da máquina. Os computadores não entendem as linguagens de programação de alto nível , como Java, C ++ ou a maioria das linguagens de programação usadas. Um processador só entende 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.

Além das instruções, o ISA define itens no computador que estão disponíveis para um programa - por exemplo, tipos de dados , registros , modos de endereçamento e memória. As instruções localizam esses itens disponíveis com índices de registro (ou nomes) e modos de endereçamento de memória.

O ISA de um computador é geralmente descrito em um pequeno manual de instruções, que descreve como as instruções são codificadas. Além disso, pode definir nomes mnemônicos curtos (vagamente) para as instruções. Os nomes podem ser reconhecidos por uma ferramenta de desenvolvimento de software chamada assembler . Um montador é um programa de computador que converte uma forma legível do ISA em uma forma legível por computador. Os desmontadores também estão amplamente disponíveis, geralmente em depuradores e programas de software para isolar e corrigir defeitos em programas binários de computador.

As ISAs variam em qualidade e integridade. Um bom ISA se compromete entre a conveniência do programador (a facilidade de compreensão do código), o tamanho do código (quanto código é necessário para realizar uma ação específica), o 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 vem mais tempo de decodificação). A organização da memória define como as instruções interagem com a memória e como a memória interage consigo mesma.

Durante a emulação de design , os emuladores podem executar programas escritos em um conjunto de instruções proposto. Emuladores modernos podem medir tamanho, custo e velocidade para determinar se um determinado ISA está atingindo seus objetivos.

Organização de computadores

A organização do computador ajuda a otimizar produtos baseados em desempenho. Por exemplo, os engenheiros de software precisam conhecer o poder de processamento dos processadores. Eles podem precisar otimizar o software para obter o máximo de desempenho pelo menor preço. Isso pode exigir uma análise bastante detalhada da organização do computador. Por exemplo, em um cartão SD, os designers podem precisar organizar o cartão para que a maioria dos dados possa ser processada da maneira mais rápida possível.

A organização do computador também 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.

Implementação

Uma vez que um conjunto de instruções e microarquitetura tenham sido projetados, uma máquina prática deve ser desenvolvida. Este processo de design é chamado de implementação . A implementação geralmente não é considerada projeto de arquitetura, mas sim engenharia de projeto de hardware . A implementação pode ser subdividida em várias etapas:

  • A implementação lógica projeta os circuitos necessários em um nível de porta lógica .
  • A implementação do circuito faz projetos no nível do transistor de elementos básicos (por exemplo, portas, multiplexadores , travas ), bem como de alguns blocos maiores ( ALUs , caches etc.) que podem ser implementados no nível da porta lógica ou mesmo no nível físico se o projeto exige isso.
  • A implementação física atrai circuitos físicos. Os diferentes componentes do circuito são colocados em uma planta baixa do chip ou em uma placa e os fios que os conectam são criados.
  • A validação de design testa o computador como um todo para ver se funciona em todas as situações e em todos os tempos. Uma vez que o processo de validação do projeto é iniciado, o projeto no nível lógico é testado usando emuladores lógicos. No entanto, isso geralmente é muito lento para executar um teste realista. Assim, após fazer as correções com base no primeiro teste, os protótipos são construídos usando Field-Programmable Gate-Arrays ( FPGAs ). A maioria dos projetos de hobby param neste estágio. A etapa final é testar o protótipo de circuitos integrados, que podem exigir várias reformulações.

Para CPUs , todo o processo de implementação é organizado de maneira diferente e costuma ser chamado de design de CPU .

Metas de design

A forma exata de um sistema de computador depende das restrições e objetivos. As arquiteturas de computador geralmente trocam padrões, potência versus desempenho, custo, capacidade de memória, latência (latência é a quantidade de tempo que leva para as informações de um nó viajarem até a origem) e rendimento. Às vezes, outras considerações, como recursos, tamanho, peso, confiabilidade e capacidade de expansão também são fatores.

O esquema mais comum faz uma análise de energia em profundidade e descobre como manter baixo o consumo de energia enquanto mantém o desempenho adequado.

atuação

O desempenho do computador moderno é frequentemente descrito em instruções por ciclo (IPC), que mede a eficiência da arquitetura em qualquer frequência de clock; uma taxa de IPC mais rápida significa que o computador é mais rápido. Os computadores mais antigos tinham contagens de IPC tão baixas quanto 0,1, enquanto os processadores modernos chegam facilmente perto de 1. Os processadores superescalares podem chegar a três a cinco IPC executando várias instruções por ciclo de clock.

Contar instruções em linguagem de máquina seria enganoso, porque elas podem fazer várias quantidades de trabalho em diferentes ISAs. A "instrução" nas medidas padrão não é uma contagem das instruções em linguagem de máquina do ISA, mas uma unidade de medida, geralmente baseada na velocidade da arquitetura do computador VAX .

Muitas pessoas costumavam medir a velocidade de um computador pela taxa de clock (geralmente em MHz ou GHz). Isso se refere aos ciclos por segundo do clock principal da CPU. No entanto, essa métrica é um tanto enganosa, pois uma máquina com uma taxa de clock maior pode não ter necessariamente um desempenho melhor. Como resultado, os fabricantes deixaram de usar a velocidade do clock como medida de desempenho.

Outros fatores influenciam a velocidade, como a combinação de unidades funcionais , velocidades de barramento , memória disponível e o tipo e a ordem das instruções nos programas.

Existem dois tipos principais de velocidade: latência e taxa de transferência. Latência é o tempo entre o início de um processo e sua conclusão. A taxa de transferência é a quantidade de trabalho realizado por unidade de tempo. A latência de interrupção é o tempo de resposta máximo garantido do sistema a um evento eletrônico (como quando o drive de disco termina de mover alguns dados).

O desempenho é afetado por uma ampla variedade de opções de design - por exemplo, canalizar um processador geralmente piora a latência, mas melhora o rendimento. Os computadores que controlam o maquinário geralmente precisam de baixas latências de interrupção. Esses computadores operam em um ambiente de tempo real e falham se uma operação não for concluída em um determinado período de tempo. Por exemplo, os freios antibloqueio controlados por computador devem começar a frear dentro de um período de tempo previsível e limitado após o pedal do freio ser detectado ou então ocorrerá falha no freio.

O benchmarking leva todos esses fatores em consideração medindo o tempo que um computador leva para executar uma série de programas de teste. Embora o benchmarking mostre pontos fortes, não deve ser como você escolhe um computador. Freqüentemente, as máquinas medidas se dividem em medidas diferentes. Por exemplo, um sistema pode lidar com aplicativos científicos rapidamente, enquanto outro pode renderizar videogames com mais facilidade. Além disso, os designers podem direcionar e adicionar recursos especiais a seus produtos, por meio de hardware ou software, que permitem que um benchmark específico seja executado rapidamente, mas não oferecem vantagens semelhantes às tarefas gerais.

Eficiência energética

A eficiência energética é outra medida importante em computadores modernos. Freqüentemente, uma maior eficiência de energia pode ser trocada por uma velocidade menor ou um custo mais alto. A medida típica quando se refere ao consumo de energia na arquitetura do computador é MIPS / W (milhões de instruções por segundo por watt).

Os circuitos modernos têm menos energia necessária por transistor conforme o número de transistores por chip aumenta. Isso ocorre porque cada transistor que é colocado em um novo chip requer sua própria fonte de alimentação e requer a construção de novos caminhos para alimentá-lo. No entanto, o número de transistores por chip está começando a aumentar a uma taxa mais lenta. Portanto, a eficiência energética está começando a se tornar tão importante, senão mais importante do que encaixar mais e mais transistores em um único chip. Projetos recentes de processadores têm mostrado essa ênfase, pois colocam mais foco na eficiência de energia em vez de amontoar o máximo possível de transistores em um único chip. No mundo dos computadores embarcados, a eficiência de energia há muito é uma meta importante depois da taxa de transferência e da latência.

Mudanças na demanda do mercado

Os aumentos na frequência do clock têm crescido mais lentamente nos últimos anos, em comparação com as melhorias na redução de energia. Isso foi impulsionado pelo fim da Lei de Moore e pela demanda por uma vida útil mais longa da bateria e reduções no tamanho da tecnologia móvel. Essa mudança de foco de taxas de clock mais altas para consumo de energia e miniaturização pode ser mostrada pelas reduções significativas no consumo de energia, de até 50%, que foram relatadas pela Intel em seu lançamento da microarquitetura Haswell ; onde eles diminuíram seu benchmark de consumo de energia de 30 para 40 watts para 10-20 watts. Comparando isso com o aumento da velocidade de processamento de 3 GHz a 4 GHz (2002 a 2006), pode-se ver que o foco em pesquisa e desenvolvimento está mudando da frequência de clock e passando a consumir menos energia e ocupando menos espaço.

Veja também

Referências

Fontes

links externos