Article image
Fernando Araujo
Fernando Araujo15/01/2024 09:29
Compartilhe

Direto ao Ponto: IV - A Arquitetura do Computador

  • #Informática Básica

Artigos da série: ( < ) Anterior | Índice | Seguinte ( > )


 

Olá, dev!

 

Este é mais um artigo da série DIRETO AO PONTO, que eu estou escrevendo para a DIO. Ele vai tratar da arquitetura do computador, focando na arquitetura de von Neumann, base dos computadores atuais, surgida nos anos 40.


Também serão tratadas outras formas de arquiteturas específicas, que surgiram após os avanços da tecnologia.

 

Sumário

1.   Introdução

2.   Arquitetura x Organização do computador

3.   Arquitetura básica de um computador

4.   Organização do computador

5.   Arquiteturas novas

6.   Considerações finais

7.   Referências

 

1 – Introdução


A série DIRETO AO PONTO enfoca artigos sobre conhecimentos básicos da programação e é voltada, principalmente, para os iniciantes.


Serão publicados artigos técnicos e artigos contando alguma história relacionada à computação/programação. Os artigos técnicos serão publicados no início da semana (às segundas ou terças), de manhã, seguindo a agenda prevista, enquanto que os artigos com histórias serão ser publicados antes do final de semana (às quintas ou sextas), complementando os assuntos tratados nos artigos técnicos.


Neste novo artigo, eu vou apresentar a arquitetura do computador, focando na arquitetura mais comum, a de von Neumann, base dos computadores atuais, e surgida nos anos 40.


Também serão tratadas outras formas de arquitetura diferenciadas que surgiram recentemente, após muitos avanços da tecnologia.


Mais uma vez, eu deixo claro que boa parte do conteúdo escrito aqui vem da minha própria vivência pessoal ao longo dos anos em que convivi com a tecnologia e informática, desde 1980 (e até antes). Nestes casos, não haverá referências de livros, revistas ou sites, apenas as minhas lembranças pessoais.

 

2 – Arquitetura x Organização do computador

 

Eu vou começar tirando uma dúvida que muita gente tem. A arquitetura e organização de computador são a mesma coisa? Existem livros com títulos apenas sobre a arquitetura e outros apenas sobre a organização de computadores, bem como cursos nas faculdades e universidades de tecnologia. Por isso, a dúvida.


No entanto, segundo (Stallings, 2018), os termos são diferentes e cada um tem uma definição específica.

 

           A Arquitetura de computador se refere aos atributos de um sistema visíveis ao programador, possuindo impacto direto sobre a execução lógica de um programa.

 

           Esse termo está associado à arquitetura do conjunto de instruções (“Instruction Set Architecture” – ISA), que define:

·        os formatos de instruções;

·        códigos de operação da instrução (“opcodes”);

·        o conjunto de registradores;

·        memória de instruções e de dados;

·        efeito das instruções executadas nos registradores e na memória; e

·        um algoritmo para o controle da execução das instruções.

 

Já a Organização de computador trata das unidades operacionais e suas interconexões, seguindo as especificações de uma arquitetura.

 

           Os atributos da arquitetura incluem:

·        conjunto de instruções;

·        número de bits usados para representar os tipos de dados (números, caracteres etc.);

·        mecanismos de Entrada e saída (E/S);

·        técnicas para endereçamento de memória.

 

           Já os atributos da organização incluem detalhes do hardware transparentes ao programador:

·        sinais de controle,

·        interfaces entre o computador e periféricos e

·        tecnologia de memória utilizada.

 

           Por exemplo, no projeto de arquitetura de um computador será decidido se ele terá uma instrução de multiplicação.

 

           Já na organização deste computador, será decidido se essa instrução será implementada por uma unidade de multiplicação especial ou por um mecanismo que faça uso repetido da unidade de adição do sistema. Esta decisão pode levar em consideração:

·        previsão da frequência de uso da instrução de multiplicação;

·        velocidade relativa das duas técnicas;

·        tamanho físico de uma unidade de multiplicação especial;

·        custo de uma unidade de multiplicação especial.

 

           Resumindo, uma organização de computador precisa ser projetada para implementar determinada especificação de arquitetura.

 

           Os fabricantes de computador costumam lançar uma família de modelos de computador, todos com a mesma arquitetura, mas com diferenças na organização. Assim, os diferentes modelos na família apresentam diferenças de preço e de desempenho.

 

           Além disso, uma arquitetura em particular pode se manter por muitos anos, abrangendo diversos modelos diferentes de computador, com sua organização variando conforme as mudanças da tecnologia.

 

           Um exemplo relevante é a arquitetura IBM System/370, introduzida pela primeira vez em 1970 e lançou diversos modelos. Ela sobreviveu, com algumas melhorias, até os dias de hoje como a arquitetura da linha de produtos de mainframe da IBM. A série IBM S/370 foi citada no artigo anterior desta série de artigos.

 

           No caso dos microcomputadores, a relação entre arquitetura e organização é muito próxima, pois as mudanças na tecnologia influenciam a organização, mas também resultam na introdução de arquiteturas mais poderosas.

 

           Um computador é um sistema complexo, contendo milhões de componentes eletrônicos elementares. Para descrevê-lo com clareza, precisamos reconhecer a sua natureza hierárquica, como um conjunto de subsistemas interrelacionados, de um subnível hierárquico maior até o nível mais baixo, de um subsistema elementar.

 

           Assim, cada nível terá seu próprio projeto, tratando apenas da descrição e projeto dos componentes daquele nível e sua interrelação com os demais níveis. Em cada nível, o projetista só precisa se preocupar com:

·        Estrutura: o modo como os componentes são inter-relacionados;

·        Função: a operação individual de cada componente como parte da estrutura.

 image



3 – A Arquitetura básica de um computador

 

A arquitetura dos computadores atuais segue a arquitetura de von Neumann, criada por John von Neumann, em 1945. Ele foi um dos criadores do computador EDVAC, de 1951, já citado no artigo anterior desta série.

 

Segundo (Carter, 2022), praticamente todos os projetos de computadores modernos são baseados na arquitetura de von Neumann, que estabelece 3 conceitos principais:

·        Dados e instruções são armazenados em uma única memória de leitura e escrita;

·        O conteúdo dessa memória é endereçável pela localização, sem considerar o tipo de dados contido ali;

·        A execução ocorre em um padrão sequencial de uma instrução para a seguinte, a não ser que isso seja modificado explicitamente.

 

De acordo com (Null, 2024), detalhando a estrutura em blocos funcionais, o hardware desta arquitetura requer, pelo menos, a presença de:

 

·        Uma Unidade Central de Processamento (ou “Central Processing Unit” – CPU), que engloba:

 uma Unidade de Controle,

  uma Unidade Lógica e Aritmética (“Arithmetic Logic Unit” – ALU),

 um conjunto de registradores e

 um Contador de Programa (“Program Counter”);

 

·        Um sistema de memória principal, que armazena os programas para controlar a operação do computador;

·        Um sistema de Entrada e Saída - E/S (“Input/Output” – I/O);

·      Um único caminho (barramento – “bus”), físico ou lógico, entre a memória principal e a Unidade de Controle da CPU, que força uma alternância entre os ciclos de instrução e execução.

 

A figura a seguir ilustra esta arquitetura, que hoje representa a estrutura básica de um processador moderno:

 image

 

           A versão atual para o programa armazenado. Esta arquitetura executa o programa no que é conhecido como o ciclo de execução de von Neumann (“fetch–decode–execute cycle” ou ciclo busca-decodifica-executa), que descreve como a máquina funciona.

 

 

           A arquitetura von Neumann também descreve com deverá se dar a execução de um programa, que seguirá os passos seguintes:

 

Carregue o programa em linguagem de máquina (em formato binário);

Inicialize o Contador de Programa

Faça {

Busque (“fetch”) a próxima instrução;

Decodifique (“decode”) o código da instrução (“Opcode”);

Incremente o Contador de programa;

Execute (“execute”) a instrução que foi pega;

}

Enquanto (a instrução de parar (“Stop”) não for executada.

 

           Uma iteração do ciclo é a seguinte:

 

1. A unidade de controle busca a próxima instrução de programa na

memória, usando o contador de programa para determinar onde a instrução está localizada;

2. A instrução é decodificada em uma linguagem que a ALU possa entender;

3. Quaisquer operandos de dados necessários para executar a instrução são buscados na memória e colocados em registradores na CPU;

4. A ALU executa a instrução e coloca os resultados nos registradores ou na memória.

 

 

           Como o objetivo deste artigo é apresentar uma introdução sobre a arquitetura de computadores, os detalhes de sua implementação e o tratamento dos programas vai ficar para artigos posteriores.

 

 

4 – A Organização básica de um computador

 

Até agora, a gente viu muito conceito, muito princípio, mas no mundo real, vamos ver como ficam os componentes de um computador associados à arquitetura de von Neumann.


A figura a seguir mostra uma placa-mãe comum de um computador moderno, com os seus componentes básicos (OBS: não estão mostrados os chips do processador e memórias, apenas os slots na placa):


image

 

 

5 – Outras arquiteturas

 

           Segundo (Ledin, 2022), conceitualmente, usar uma única região de memória para todo o código e os dados torna a sua localização simples para programadores e relativamente mais fácil para projetistas de circuitos.

 

Isso simplificou o projeto e a construção das primeiras gerações de processadores e computadores, mas o compartilhamento de memória entre programas e dados apresenta algumas dificuldades:

 

Limitação de desempenho do sistema - esta arquitetura requer vários ciclos de memória para recuperar uma instrução do processador e acessar os dados necessários. Este problema é conhecido como o gargalo de von Neumann; 

A limitação pode ser mitigada significativamente usando-se memórias cache para instruções e dados de programas, mas se os códigos e dados excederem o tamanho da memória cache, o benefício do seu uso será bem reduzido.

 

Criação de uma brecha de segurança - programadores maliciosos podem se aproveitar da memória compartilhada para armazenar sequências de instruções na memória como se fossem “dados” e direcionarem o processador para executar essas instruções. É uma vulnerabilidade conhecida como estouro do buffer (“Buffer Overflow”).

Esta é uma falha muito comum em ferramentas de software amplamente utilizadas, como sistemas operacionais, servidores web e bancos de dados, tendo sido explorada há anos por hackers.

Fabricantes de processadores e desenvolvedores de sistemas operacionais implementaram uma variedade de recursos para combater este tipo de ataque, com correções eficazes, até certo ponto.

Foram propostas algumas arquiteturas alternativas, que procuram evitar, ou minimizar, estes problemas discutidos na arquitetura von Neumann.

 

A arquitetura de Harvard

 

Esta arquitetura foi originalmente implementada no computador Harvard Mark I, em 1944. Uma arquitetura de Harvard estrita usa espaços de endereçamento e barramentos de memória completamente separados para armazenar instruções de programa e dados.


Ela configuração permite o acesso simultâneo a instruções e dados, implementando uma forma de paralelismo. Além disso, a melhoria ocorre à custa da duplicação do número de linhas de endereço, linhas de dados e sinais de controle, que precisam ser implementados no processador para acessar as duas regiões de memória.

 

A arquitetura de Harvard fornece potencialmente um nível de desempenho mais alto, ao paralelizar acessos a instruções e dados, além de remover todos os problemas de segurança associados ao “buffer overflow”.

 

O diagrama a seguir mostra o layout de um processador implementando a arquitetura de Harvard:


image

 

Na prática, uma arquitetura de Harvard estrita raramente é usada em computadores modernos. Diversas variantes desta arquitetura são comumente empregadas, chamadas de arquiteturas de Harvard modificadas.

 

 

A arquitetura de Harvard modificada

Em geral, computadores projetados assim têm algum grau de separação entre instruções do programa e dados, o que já reduz os efeitos do gargalo de von Neumann e mitiga os problemas de segurança discutidos, mas essa separação raramente é absoluta.


O diagrama a seguir mostra uma arquitetura Harvard modificada, que é utilizada por muitos computadores atuais:


image

 

 

De acordo com (Ledin, 2022), os computadores modernos utilizam arquiteturas baseadas nas características dos seus processadores, com as mais comuns listadas a seguir:

·        x86 (Intel e AMD),

·        x64 (Intel e AMD),

·        ARM de 32 bits; 

·        ARM de 64 bits.

 

Em relação ao design do processador, as arquiteturas x86 e x64 seguem, principalmente, uma abordagem CISC (“Complex Instruction Set Computer”, ou Computador com um Conjunto Complexo de Instruções), enquanto as arquiteturas ARM implementam processadores RISC (“Reduced Instruction Set Computer”, ou Computador com Conjunto de Reduzido de Instruções).

 

Atualmente, foi estabelecida uma nova especificação da arquitetura RISC (RISC V), que tem como objetivo:

 

·        Ser adequada para uso em um largo espectro de aplicações, desde dispositivos embarcados de baixíssima potência até servidores multiprocessados de alto desempenho para a nuvem (“cloud”);

 

·        Ser gratuita para uso por qualquer um, para qualquer aplicação, contrastando com todos os outros processadores disponíveis comercialmente, que têm sua propriedade intelectual cuidadosamente guardada pelos fabricantes.

 

           Algumas aplicações relevantes com processadores RISC-V já começaram a fazer avanços significativos:

·        Inteligência Artificial e Machine Learning;

·        Sistemas embarcados;

·        Computação de escala extrema;

·        Processamento de potência ultra baixa;

·        Processamento de borda de IoT.

 

Saindo um pouco da arquitetura original de von Neumann, existem outras arquiteturas, para implementações no mundo real de sistemas de computação modernos, de alto desempenho ou de segurança extrema, que precisam ser adaptadas às necessidades específicas do usuário, como:

·        Smartphones;

·        computadores pessoais voltados para jogos (alto desempenho);

·        computação em escala para implementação de warehouses;

·        redes neurais;

·        blockchain,

·        mineração de bitcoin,

·        veículos autônomos.

 

Finalmente, estão surgindo tecnologias potencialmente disruptivas que podem alterar o caminho das futuras arquiteturas de computadores, como a computação quântica, por exemplo.

 

6 – Considerações finais

Este é mais um artigo da série DIRETO AO PONTO, que eu estou escrevendo para a DIO. Ele tratou da arquitetura do computador.


Inicialmente, foi feita a distinção entre arquitetura e a organização de computador, com a arquitetura sendo o conceito e a organização a implementação desta arquitetura.

Depois, foi detalhada a arquitetura von Neumann, presente na maioria dos computadores atuais modernos.


Foram descritos outros tipos de arquiteturas, surgidas para reduzir os problemas principais da arquitetura de von Neumann: o gargalo de von Neumann e problemas de segurança. Eles são resultado da decisão de se usar o mesmo espaço de memória para instruções do programa e dados.


Também foram listadas arquiteturas existentes para aplicações específicas, que exigem mais desempenho ou mais segurança, como smartphones, jogos digitais, blockchain e veículos autônomos, ou então bem disruptivas, como a computação quântica.


Finalmente, foi mostrada uma organização de um computador pessoal, que implementa a arquitetura von Neumann.


O assunto é vasto, mas esta é apenas uma introdução, para se começar a entender como um computador funciona dentro da caixa.


Ou, como a gente costuma dizer, os bits e os bytes da computação!

Espero que tenha gostado. Até o próximo artigo, ainda nesta semana!

 

OBS: a ideia desta série era escrever artigos Direto ao Ponto, que levassem, no máximo, 2 horas para pesquisar as fontes, escrever e publicá-los, não tomando muito do meu tempo. Este foi o segundo artigo de conteúdo da série, e também levou MUITO MAIS tempo do que isso! Preciso continuar reajustando a rota.

 

 

7 – Referências

 

[1] STALLINGS, William. Arquitetura e Organização de Computadores. 10ª. Ed, Pearson, 2018.

 

[2] CARTER Nicholas, Schaum’s Outline of Computer Architecture. McGraw-Hill, 2002.

 

[3] NULL, Linda. Essentials of Computer Organization and Architecture. 6th Edition. Jones & Bartlett Learning, 2024.

 

[4] LEDIN, Jim. Modern Computer Architecture and Organization. 2nd Edition. Packt Publishing, 2022.

 

 

Artigos da série: ( < ) Anterior | Índice | Seguinte ( > )

Compartilhe
Comentários (6)
Fernando Araujo
Fernando Araujo - 16/01/2024 09:28

Obrigado, Renato!

Vem mais coisa por aí... Aguarde!!!!

Renato Neto
Renato Neto - 15/01/2024 20:25

Excelente artigo.

Leitura obrigatória.

Fernando Araujo
Fernando Araujo - 15/01/2024 17:33

Obrigado, Luiz!

Aguarde os próximos artigos, que eu só estou esquentando!!!

Vem coisa boa por aí!!!

Luiz Café
Luiz Café - 15/01/2024 15:40

Tema muito importante Fernando. Antes de decifrar o mundo dos códigos, precisamos entender também sobre a arquitetura de um computador. Um artigo que contribui para um aprendizado enriquecedor. Parabéns mais uma vez.

Fernando Araujo
Fernando Araujo - 15/01/2024 10:25

Obrigado, Marcio.

Eu também tenho boas lembranças dela, tanto como aluno de Engenharia Elétrica como professor de Informática em uma faculdade.

Adoro o assunto!

Marcio Herrero
Marcio Herrero - 15/01/2024 10:15

Parabéns pelo artigo, boas lembranças dessa matéria na faculdade.