Executando verificação de segurança...
46

Instruction Set Architecture ou Como Ensinar uma Pedra a Pensar

Instruction Set Architecture

Quando nos referimos à magia da computação, estamos falando da maneira como os computadores transformam correntes elétricas em instruções lógicas e, eventualmente, nos software que usamos todos os dias. Ou simplesmente na "Arquitetura do Conjunto de Instruções", mais conhecida pela sigla em inglês: ISA (Instruction Set Architecture).

Mas o que exatamente é a ISA? É o conjunto de instruções que um processador de computador entende. É a única coisa que o hardware é capaz de processar. Talvez o ápice da engenharia humana. Ela literalmente nos dá o poder de ensinar uma pedra a pensar.

Como Ensinar uma Pedra a Pensar

Tudo começa com os transistores

Um transistor, em sua essência, é um dispositivo com três 'pinos': a base, o coletor e o emissor. Ao aplicar uma corrente à base, podemos controlar o fluxo de corrente entre o coletor e o emissor. Em outras palavras, quando a corrente é aplicada à base, ela atua como uma "chave", permitindo ou impedindo a passagem de corrente elétrica entre o coletor e o emissor. Esse mecanismo de "ligar e desligar" que forma a base da lógica binária: 1 para "ligado" e 0 para "desligado".

Do Simples ao Complexo

Imagine que os transistores são como tijolos. Isolados, têm pouca utilidade, mas quando combinados, podem formar estruturas mais complexas. Ao combinarmos transistores, criamos portas lógicas, como AND, OR e NOT. Estas portas realizam operações lógicas básicas.

AND (E): Esta porta retorna verdadeiro (1) - permite a passagem de corrente elétrica - apenas quando ambas as suas entradas são verdadeiras.

Entrada AEntrada BSaída
000
010
100
111

OR (OU): Esta porta retorna verdadeiro (1) - permite a passagem de corrente elétrica - quando pelo menos uma de suas entradas é verdadeira.

Entrada AEntrada BSaída
000
011
101
111

NOT (NÃO): Esta porta inverte o valor de entrada.

EntradaSaída
01
10

Do Complexo ao Extraordinário

Combinando de certas maneiras estas postas lógicas, podemos fazer cálculos e tomar decisões baseadas em diferentes condições. A Unidade Lógica Aritmética é fundamentalmente o núcleo de processamento da CPU, ou apenas uma calculadora que realiza operações aritméticas e lógicas básicas.

Então, como decidimos se a ULA deve somar dois números ou compará-los? Aqui entra a Unidade de Controle. A Unidade de Controle direciona a corrente elétrica para o 'caminho' certo dentro do CPU. Dependendo das instruções fornecidas, ela habilita ou desabilita certas funções da ULA, determinando, por exemplo, se deve ocorrer uma soma ou uma comparação, ou ainda aonde o resultado deve ser salvo.

Do Fisíco para o Virtual

A Unidade de Controle não decide suas ações arbitrariamente. Ela é guiada por um conjunto de instruções, ou pela Arquitetura de Conjunto de Instruções. A ISA essencialmente direciona a corrente elétrica para os caminhos que ela precisa seguir. Garantindo que quando um programa executa uma operação específica, a corrente elétrica siga por uma trilha uma exata.

Mas o que extamente é uma operação, Trata-se de uma instrução de assembly, que é essencialmente uma representação legível de instrução de máquina. Para ilustrar isso, consideremos um exemplo prático usando a arquitetura MIPS.

A instrução de adição é dada como:

add $t0, $t1, $t2

Ou simplesmente:

opcode | rs    | rt    | rd    | shamt | funct 
000000 | 01001 | 01010 | 01000 | 00000 | 100000

Este é apenas um breve vislumbre de como as correntes elétricas se abstraem do mundo físico e se tornam entidades virtuais, código, ou simplesmente matemática.

Para aprender de verdade

Para aqueles que desejam se aprofundar mais e entender realmente o funcionamento dos processadores, há dois livros que se destacam como pilares na literatura de organização de computadores. Juntos, esses dois complementam-se, proporcionando ao estudande uma visão ampla e detalhada da organização de computadores.

  • "Structured Computer Organization", Tanenbaum detalha com maestria e bom humor, desde a lógica de transistores até a estrutura e funcionamento dos sistemas operacionais. É uma abordagem top-down que permite ao leitor apreciar a beleza da complexidade organizada dos computadores.

  • "Computer Organization and Design, Patterson e Hennessy não se limitam apenas à teoria e empregam exemplos práticos e exercícios que permitem aos leitores a oportunidade de experimentar e implementar os conceitos discutido. Diferentes edições do livro abordaram diferentes linguagens assembly.

E para os programadores que estão lendo: a criação de um processador simples não é um feito apenas por gênios da computação ou da engenharia elétrica. É um exercício desafiador, porém viável e recompensador, frequentemente explorado nos melhores cursos universitários de Organização de Computadores.

Se você se auto-intitula um "programador de computador", deve tentar criar um, pelo menos uma vez. Fazer isso não só aprofundará sua compreensão da mecânica fundamental dos computadores, mas também, sem sombra de dúvidas, aprimorará suas habilidades de programação. É a base das bases, e a partir daí, o céu é o limite.

Um abraço e bons estudos!

Este artigo era apenas a introdução de algo maior, mas já se estendeu muito. Os outros tópicos que gostaria de cobrir originamente eram:

  • Intel 8086 ao x86 Moderno
  • Explorando Outras Arquiteturas
  • RISC vs. CISC
  • Modelos de Negócios: Intel vs. ARM
  • Consolidação do ARM Como o Novo Padrão
  • Ascensão do RISC-V e o Futuro

Você tem interesse de ler sobre alguns destes tópicos? Até a próxima.

Carregando publicação patrocinada...
6

Muito bom o conteúdo. 👏👏👏

Só queria fazer uma pequena correção:

Mas o que exatamente é a ISA? É o conjunto de instruções que um processador de computador entende. É a única coisa que o hardware é capaz de processar. Talvez o ápice da engenharia humana. Ela literalmente nos dá o poder de ensinar uma pedra a pensar.

Na verdade o conjunto de instruções se chama instruction set. A Instruction Set Architecture (ISA) é uma especificação de arquitetura de computador abstrata, que determina a arquitetura do ponto de vista de execução do software (diferentemente de microarquitetura que determina como o hardware é implementado).

Engloba também, obviamente, a definição do conjunto de instruções mas não apenas isto. Registradores, flags, configurações, modos de operação, proteções de memória, níveis de acesso, paginação, interrupções, exceções, gerenciamento de tarefas, gerenciamento de múltiplos cores, processadores lógicos, cache de memória etc., etc., etc. tudo isso faz parte da especificação da ISA.

Ou seja, tudo o que o manual da arquitetura especifica faz parte da ISA e não somente o conjunto de instruções.


Aproveitando o assunto eu deixo três recomendações para a galera:

  1. Se quiserem saber como processadores modernos são feitos hoje em dia, pesquisem sobre linguagens de descrição de hardware. Hoje os processadores são complexos demais para serem feitos manualmente "porta lógica por porta lógica", é humanamente impossível. Por isso se utiliza linguagens de descrição de hardware para esta finalidade. E quem quiser uma solução barata para fazer seu próprio processador caseiro usando uma linguagem de descrição de hardware, pesquisem sobre FPGA. Vejam o Tang Nano, vocês encontram no AliExpress por menos de 100 reais.
  2. O jogo Turing Complete na Steam é ótimo para estudar esse tipo de coisa. Nele você vai criar um processador do zero, incluindo as próprias portas lógicas que você também precisará criar (o jogo só te dá a porta NAND, o resto você tem que fazer). Esse jogo é muito massa
  3. Eu fiz uma apresentação no YouTube há uns meses atrás falando sobre introdução ao baixo nível. Explico, inclusive, como o processadores multicore funcionam e como o código de máquina funciona. Focado na arquitetura x86-64 mas os conceitos se aplicam a qualquer arquitetura. Quem tiver interesse em assistir: https://www.youtube.com/live/E7TEz60UA90?si=RjOxTBmLuZCxOm_U
5

Excelente, Silva,

Muito obrigado por sua correção, você está absolutamente correto sobre o conceito de ISA.

As recomendações são fastasticas, pessoalmente não conhecia o Tang Nano, fiquei bastante interessado.
Como é para suporte dela, qual plataforma é utilizado como IDE? Como se compara ao Quartus ou Vivaldo?

1
1
4

Muito Obrigado por compartilhar este valioso estudo! Meu computador tem um sério problema de processamento, ele não consegue processar jogos ou programas com 700, ou 800MB, preciso comprar um processador e eu não entendo nada nessa área de informática, queria tirar algumas dúvidas como, por exemplo:
Existem modelos ou marcas de processadores diferentes, ou são tudo a mesma coisa?

2

Existem modelos e marcas diferentes sim, no seu caso você vai querer um processador da Intel ou AMD. Dependendo de qual você comprar ele pode não ser compatível com sua placa-mãe. Você também pode acabar comprando um processador muito potente (e caro) mas o restante do seu hardware cria gargalo de performance e não adiantará de nada.

E um detalhe: o tamanho do jogo não deveria influenciar na capacidade do processador. Existem vários outros fatores que podem estar criando gargalo aí: como a quantidade de RAM ou o disco rígido que é muito lento. Outra possibilidade é a capacidade de processamento de vídeo do seu PC, que possivelmente você está usando vídeo onboard e não tem placa de vídeo.

Fazer upgrade na sua máquina também pode exigir que você compre uma fonte melhor para o seu PC, pois sua fonte atual pode não ser potente o suficiente para aguentar hardware que consome mais energia elétrica.

Eu sugiro que procure um técnico de informática de confiança para te ajudar a fazer upgrade na sua máquina. Ou se quiser fazer isso por conta própria, melhor estudar sobre montagem/manutenção de computadores antes.

E já deixo a sugestão de dar uma olhada no Clube Do Hardware, eles têm um fórum onde pode lhe ser útil para tirar dúvidas, pedir recomendações etc.

3

Conteúdo sensacional.

Adoro esse tipo de informação, é inspirador!
Se não for incômodo, adoraria que continuasse com os próximos tópicos listados no fim desse post. :)

Uma boa didática de ensino.
Se ainda não tiver, recomendaria que criasse um canal no youtube para apresentar tais conteúdos a mais pessoas, se possível claro...

No mais, muito obrigado pelo conhecimento :D

3

Excelente. Continue a saga meu amigo, por favor. Qualquer um dos tópicos que mencionou ao final eu gostaria de ler através de sua escrita :>

2

Muito massa. Entender um pouco mais a fundo como realmente um computador funciona me deu um novo ponto de vista sobre programação em geral, e me destravou em muitos aspectos. Infelizmente algumas pessoas ignoram isso, pq acham difícil ou algo do tipo, e realmente é no começo, mas com paciência e persistência você vai entendendo.

Só para complementar, recomendo a playlist do Fabio Akita - Como computadores funcionam.

1