DEV Community

Cover image for Dia 12 - 1.2 Oito grandes ideias sobre arquitetura de computadores
Matheus Gomes
Matheus Gomes

Posted on

Dia 12 - 1.2 Oito grandes ideias sobre arquitetura de computadores

Esse post fala sobre o capítulo 1.2 do livro "Organização e Projeto de Computadores: Interface Hardware/Software"

-

1 - Projete pensando na "Lei de Moore"

Lei de Moore é uma observação feita por Gordon Moore, cofundador da Intel, em 1965. Essa lei declara que os recursos do circuito integrado dobram a cada 18 a 24 meses. O livro nesse trecho alega: Como projetos de computador podem durar anos, os recursos disponíveis por chip podem facilmente dobrar ou quadruplicar entre o inicio e o final do projeto, então o ideal, é que antecipemos onde a tecnologia estará quando terminarmos o projeto.

Fazendo algumas pesquisas, achei uma matéria no Terra explicando que a Lei de Moore está desacelerando, pois os desafios físicos e de engenharia estão tornando cada vez mais difícil manter o ritmo de miniaturização dos transistores.

2 - Use a abstração para simplificar o projeto

Nesse trecho é dito como tivemos que inventar técnicas para nos tornar mais produtivos, se não, o tempo de projeto aumentaria de modo insustentável quando os recursos aumentassem pela Lei de Moore. Então, uma técnica de produtividade é a abstração, os detalhes de baixo nível são ocultados, enquanto oferece um modelo mais simples de alto nível. (Um exemplo para melhor entendimento, são as infinitas bibliotecas em Python escritas em C.)

3 - Torne o caso comum veloz

"Tornar o caso comum veloz costuma melhorar mais o desempenho do que otimizar o caso raro."
O caso comum é mais fácil de melhorar. Por ser comum, ele é mais simples. Saber o que é o "caso comum" será ensinado seções mais a frente no livro.

4 - Desempenho pelo paralelismo

Esse conceito também será aprofundado ao decorrer do livro, mas basicamente consiste em mais desempenho realizando operações em paralelo.

5 - Desempenho pelo pipelining

É um padrão de paralelismo. Darei um exemplo:
Imagine uma fábrica de carros com 5 estágios:

  • Chassis montado.
  • Motor instalado.
  • Pintura aplicada.
  • Interior montado.
  • Teste realizado.

Se a fábrica não utilizar pipelining, cada carro terá que passar por todos os cinco estágios antes que o próximo carro comece. Se cada estágio demorar uma hora, para montar o primeiro carro vai demorar cinco. Para otimizar isso, após o primeiro carro terminar o estágio um, será adicionado outro carro nesse estágio, enquanto o primeiro carro segue a pipeline, e assim funcionará sucessivamente.

6 - Desempenho pela predição

Esse é um conceito que honestamente não consegui entender pela definição do livro, então busquei outras fontes:

Um exemplo é a predição de desvio, técnica usada em processadores para melhorar o desempenho ao prever o caminho que o código seguirá em instruções condicionais (if, switch). Em vez de esperar pela avaliação da condição, o processador faz uma previsão e continua executando instruções antecipadamente. Se a previsão estiver correta, o desempenho melhora porque o processador não fica ocioso. Se errada, ele apenas descarta as instruções incorretas. Isso reduz o tempo ocioso e aumenta a eficiência do sistema, especialmente em loops e condições frequentes.

7 - Hierarquia de memórias

É um conceito que organiza diferentes tipos de memórias de um sistema em níveis com diferentes velocidades e capacidades. Utilizando memórias mais rápidas e menores (cache) para armazenar dados frequentemente acessados e memórias mais lentas (disco rígido/SSD) para armazenar grandes volumes de dados menos utilizados.

Um exemplo disso em sistemas web, é quando utilizamos o Redis para realizar o cache de uma listagem frequentemente acessada pelo client. Isso reduz o tempo de resposta e o overhead de buscar novamente os dados no banco de dados.

8 - Estabilidade pela redundância

"Além de rápidos, os computadores precisam ser estáveis."

Em um serviço web por exemplo, isso pode se assemelhar a redes de servidor em cluster, onde há vários servidores que hospedam o serviço, e se caso um deles falhe, outro servidor assume a função. Nesses clusters é possível inclusive adicionar balanceadores de carga que distribuem requisições entre servidores. Caso um servidor fique sobrecarregado ou inativo, as requisições são direcionados a outro servidor.

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay