Primeiras aulas do curso Arquitetura de computadores: por trás de como seu programa funciona

Arquitetura de computadores: por trás de como seu programa funciona

Como o computador lê o seu código - Apresentação

Olá, um prazer ter você neste curso meu nome é Andrew Ijano, você já se perguntou como o computador entende as instruções que passamos para ele por meio de linguagem de programação?

Ou como os componentes internos se comunicam para funcionar em harmonia? Ou o que acontece entre a linguagem de programação que escrevemos e o emaranhado de fios e eletricidade que tem dentro do computador?

A resposta para essa e várias outras perguntas, está neste Curso Como o Computador Funciona. E você vai ver que diferente do que as pessoas pensam, não tem nada de mágico. Neste Curso, você vai ver como o computador lê o programa, como transforma os vários símbolos que escrevemos nos editores de texto.

E como o computador entende de verdade e você vai ver por que programas escritos em C são mais rápidos do que programas escritos em Python, e porque mesmo assim Python pode ser sua melhor escolha em certos casos. Você também vai entender como um computador executa um programa.

Para isso vamos usar diversos componentes internos do computador como SSD/HD, memória RAM, CPU, você vai ver o que significam e qual a diferença entre eles e como se comunicam para executar o seu programa.

Você vai também entender termos como Multicore, dispositivos de I/O, memória cache. Por fim você vai ver como dados são armazenados, como, por exemplo, números inteiros, caracteres, listas, números decimais são representados internamente no computador e porque faz sentido na programação.

Esse curso para quem é? Para você, que sabe um pouco de programação ou tem grande interesse em tecnologia e quer saber mais o que está se passando por “debaixo dos panos” do computador. Porque para saber programar é importante você entender o que está acontecendo no seu programa.

Para você tomar as melhores decisões para seu projeto. Vamos começar? Te vejo no curso.

Como o computador lê o seu código - O código de máquina

Hoje em dia vivemos num mundo que está cercado de computadores, temos computador na nossa mesa, tem computador que cabe na nossa mão e leva de um lado para o outro.

Tem computador que está lá fechado numa sala do outro lado do mundo só fazendo contas e tem computador na nossa cozinha, na geladeira que auxilia nosso dia a dia. O que queremos que cada um desses computadores faça?

Queremos que sempre quando formos interagir com eles - executem ações ou programas, só que para que esses computadores executem os programas, os programas precisam antes ter sido escritos por alguém. Por exemplo, se quisermos fazer ligações no celular, alguém precisa ter escrito: “se ficar no botão ligação o celular vai ligar para alguém”.

Se você já teve algum contato com linguagem de programação, você já deve ter aprendido a fazer esse tipo de programa - para executar e para escrever esses programas você deve ter usado, por exemplo, o próprio navegador, editor de texto online como p5*ou Scratch, IJ ou Eclipse.

Então você vai lá, usa os editores, escreve seu código e na hora de executar, o que provavelmente deve ter acontecido é ele vai pegar seu código, o computador vai fazer alguma mágica. Então vou ver o resultado.

Só que o computador está longe de ser mágico. Na verdade, ele executa ações bem definidas e algo bem real e factível. Para quebrar essa impressão de que computador é mágico e totalmente abstrato; e para entender melhor o que está acontecendo por debaixo daquele emaranhado de circuitos, eletricidade, vamos entender como funciona o computador.

Quando você vai escrever um código, normalmente escreve algo numa linguagem que chama de alto nível – que é uma linguagem que nós humanos conseguimos entender.

Uma linguagem, por exemplo, como Java Script, onde consegue escrever palavras em inglês como function e let, escreve nome de variáveis como palavras que entendemos, conseguimos escrever os textos que queremos que o computador imprima na tela.

Então é bem perto da nossa linguagem que usamos no dia a dia, só que tem um problema: o computador não entende esse tipo de linguagem porque ele tem na verdade, o tipo de linguagem que ele entende é uma linguagem bem restrita.

Que só consegue fazer operações aritméticas como soma, subtração, multiplicação, algumas operações, por exemplo, como guardar as coisas da memória e fazer comparações para ver se duas coisas são iguais ou diferentes.

Esse tipo de instruções, uma sequência desse tipo de instruções é chamada de código de máquina, tem linguagem de alto nível e código de máquina - para entender a diferença desses dois tipos de linguagem, vamos pegar um pequeno exemplo.

Temos código em Javascript, que faz uma sequência de operações, que não tem tanta aplicação prática assim; são duas variáveis A e B, A vai receber o valor 7 e B receber o valor 2, em seguida criamos uma terceira variável C.

C vai receber a soma de A e B, em seguida faz uma condição: se o C ele for diferente de zero, vai dentro da condicional e incrementa o ciclo, c++; essa é uma linguagem de alto nível Java Script e para demonstrar o código de máquina vai usar uma notação simplificada de uma linguagem de montagem ou assembly.

A linguagem de montagem que está representando o código de máquina, ele tem mais ou menos a disposição mostrada, tem mais código, são bem maiores e que tem mais ou menos significado.

Guarda 7 em a:

let a = 7; 

Guarda 2 em b:

let b = 2; 

Pega a, soma b e guarda em c:

let c = a + b; 

Compara c e 0, se_igual_pula 1 linha e incrementa c:

if (c !== 0) {
    c++;
}

Vamos e guardamos o valor 7 dentro de alguma posição lá do computador. Em seguida faremos a mesma coisa para B, pega o valor 2 e guarda em alguma posição na memória lá no computador, em seguida, precisa inicializar o C que será a soma de A e B.

Para isso, primeiro pega o valor já - o computador vai lá encontra onde é que está guardado o valor de A, e pega para ele, fica lá dentro para ele fazer as próximas operações; em seguida ele soma, ele adiciona o valor que está guardado na posição do B.

Se pegamos o A tinha valor 7, o computador encontrou o valor de B e somou. Agora tem 9, em seguida ele vai pegar o resultado dessa operação de soma que é 9 e guarda esse valor em C.

Ele vai em alguma posição lá do computador e guarda esse 9, em seguida realiza uma operação de comparação, ele vai comparar C e zero, ver se o C e o zero são iguais e se eles forem iguais - se você comparar no código Javascript o que você quer é que não execute a coisa dentro da condicional, if.

Não queremos que o C incremente, se C for igual, por isso executa se for igual, pula uma linha, sem instrução de incrementar C. Caso seja diferente ele vai incrementar C.

Você já consegue comparar esses dois tipos de linguagem e ver que no código de máquina é um pouquinho mais granular, ela um pouquinho mais limitada na expressividade que podemos fazer.

Você não precisa entender código de máquina para programar. Mas é interessante você saber o que está se passando por “debaixo dos panos”, no entanto, o computador não usa essa anotação para representar esse tipo de comando.

Na verdade o computador usa uma sequência de zeros e uns, que chama de código binário. E você já pode até ter ouvido falar que o computador eles se comunicam apenas com zeros e uns, isso acontece porque o computador internamente é formado por um conjunto de fios e circuitos que está passando eletricidade. [07:16] Se tem o fio que está passando eletricidade, o computador vai entender como um isso e se tem um que não está passando eletricidade ele vai entender como zero. Essa lógica de ligado, desligado é uma coisa que vai se estender por todos os componentes do computador.

E é daí que surge essa parte do código binário, porque na sequência de ligado desligado consegue representar a informação, tem é o código-fonte da nossa linguagem de alto nível - código-fonte que entendemos de imprimir dois mais dois.

E o que precisa é chegar num código de máquina que é o código que o computador entende, aquele conjunto de zeros e uns, ligado ou desligado, dentro do circuito.

Precisamos transformar esse código-fonte e código de máquina; precisa de uma espécie de tradutor que pega aquele código que entendemos e transforma para um código que o computador entende.

Vamos ver como funciona esse tipo de tradutor.

Como o computador lê o seu código - O tradutor do computador

Para podermos executar o código que escrevemos vamos precisar desse tradutor que vai pegar o código fonte, transformar em código de máquina para depois poder pegar e mandar para o computador executar.

Porém, como funciona esse tradutor, o processo de tradução? Vamos pegar um pequeno exemplo. Digamos que não tem trecho de código let c = a + b que recebe a mais b, que no caso criando uma nova variável a C e ela vai receber o valor de duas variáveis a + b.

A primeira coisa que vai fazer nesse processo de tradução é que o tradutor vai interpretar o comando, esse código de escrever como texto puro, uma sequência de caracteres.

O tradutor vai ler um caractere por vez, vai ler l, e, os caracteres com espaço, as letras, os símbolos especiais e até caracteres especiais invisíveis de quebra de linha.

Feito isso, depois que ele leu um caractere por vez, interpretou a coisa como texto, ele vai identificar as palavras, identificar conjuntos de caracteres – por exemplo let, e tentar identificar quais são os significados desses caracteres.

E a relação entre eles, então vai identificar os nomes de variáveis - que c, a e b são nomes de variáveis, ele vai identificar let, a sequência l e t significa está fazendo declaração de uma nova variável.

Tem os símbolos igual e mais, então ele sabe agora que vai ter que fazer uma atribuição para uma variável e vai somar dois valores, dessa forma ele pega o significado de todos os conjuntos de símbolos e nesse meio tempo identifica erros.

Vê se as variáveis que você está usando já foram declaradas antes, identifica quais são os tipos das variáveis que você está usando, vê se A é um texto ou número e coisas do tipo - ele faz todo esse processo de verificação, de tentar entender o que que esse conjunto de caracteres significa.

A partir disso ele começa a produzir o código de máquina - tem uma coisa que ele vai fazer, ele olha lá que ele vai usar a variável A, precisa do código de máquina para pegar o valor de A.

Na hora de executar depois pega o valor de A, coloca no balde que nosso exemplo vai ter o valor de 7, em seguida quando ele viu lá que ele também vai usar o B e vai somar o valor de A com o valor de B; ele usa o comando de código de máquina de soma.

Para adicionar o valor de B nesse molde que ele está guardando no computador, nosso exemplo B vale 2 - a soma deles na hora de executar ele vai ver que vai valer 9.

Em seguida, depois de somados os valores de A e B, ele vai ter que criar essa nova variável C e guardar o resultado da soma, ele usa esse terceiro comando de código de máquina, que é guarda C.

Ele guarda o resultado que está nesse balde fictício e vai guardar dentro da variável c, dessa forma vai ter esses 3 comandos em código de máquina que vão significar aquela linha do código fonte e esses códigos de máquina vão ser transformados em código binário.

Tanto instruções, quanto para quem eles estão realizando a instrução, vão ser transformadas em conjunto de zeros e uns, vão ser agrupados numa coisa só e vai virar o código de máquina final que pode dar para o computador executar.

Dessa forma que funciona a tradução, na realidade ela tem um conjunto de passos a mais, é bem complexa, ela usa várias contas e conceitos bem avançados, mas a ideia básica é essa: o código que você escreve vai ser interpretado por esse tradutor como texto simples.

Ele vai tentar identificar as palavras-chaves e o que significa dentro desse texto, vai transformar isso para código de máquina zero e uns e zeros e uns vão ser mandados depois para o computador executar.

Você sabe como traduzir um trecho de código, só que como que o nosso código-fonte inteiro, com várias linhas de comando é traduzido para esse código de máquina?

Esse processo pode acontecer basicamente de duas formas, a primeira forma pega o nosso código-fonte e o tradutor vai ler o código fonte inteiro e traduzir ele por completo, agrupa tudo em outro arquivo, segundo arquivo, de código de máquina.

Vai ler o meu código fonte inteiro, vai comando por comando e gera todos os comandos no arquivo só que gera esse código de máquina, depois que o tradutor terminou de fazer essa transformação não precisa mais dele e posteriormente pode pegar esse código de máquina e mandar para o computador executar.

Você vê que tem dois passos que é traduzir o código-fonte todo de uma vez e depois pegar e mandar executar, isso é bem semelhante ao que ocorre com tradução de livro.

Se eu tenho um livro em inglês, o tradutor decidiu que ele vai ler o livro inteiro, vai traduzir o livro todo de uma vez e gera novo livro em português; depois que terminou de traduzir não precisa mais dele.

Quando a pessoa que foi comprar esse livro e ler, ela não precisa do tradutor do lado para conseguir entender esse livro, porque ela diretamente consegue entender o significado dele.

Então é basicamente o mesmo processo o tradutor lê o livro todo em inglês, traduz em português e depois na hora que o leitor ver que não precisa do tradutor para conseguir ler, da mesma forma no computador não precisa do tradutor para executar o código.

Pelo motivo de que compila todo o código, a instrução agrupa num arquivo apenas, esse tipo de tradutor é chamado de compilador, mas ainda tem uma segunda forma de fazer esse tipo de tradução.

Temos o código fonte e o tradutor pode traduzir um trecho de código e mandar para o computador executar, traduz trecho de código e manda para o contador executar e vai fazer nisso linha por linha, trecho por trecho.

E está continuamente com o tradutor rodando no momento de execução, precisa desse tradutor específico para estar executando código, porque ao mesmo tempo que ele o traduz já manda executar comando por comando.

Isso é semelhante a outro tipo de tradução, aos intérpretes em tempo real, por exemplo, se tem uma pessoa que se comunica inglês e outra que se comunica em português o intérprete tempo real vai fazer - a pessoa vai lá e fala good morning e em seguida o tradutor vai interpretar o que a pessoa está falando.

E vai responder para a segunda pessoa em português dizendo “bom dia”, é nesse processo que a pessoa vai falar o conteúdo na primeira linha, o tradutor vai ao mesmo tempo que traduz já responde para outra pessoa o significado desse trecho de conteúdo.

Precisa estar continuamente com o tradutor junto para entender o que significa, então no computador precisa do tradutor para executar e pela sua forma, com essa semelhança que tem do intérprete em tempo real esse tipo de tradutor é chamado de interpretador.

Ele vai interpretando um conteúdo por vez e mandando para executar. Tem essas duas formas de tradutores e os interpretadores, só que com a diferença prática nos dois ou por que que eu escolheria um ao outro no dia a dia?

Vamos ver quais são as diferenças entre esses dois tradutores.

Sobre o curso Arquitetura de computadores: por trás de como seu programa funciona

O curso Arquitetura de computadores: por trás de como seu programa funciona possui 175 minutos de vídeos, em um total de 54 atividades. Gostou? Conheça nossos outros cursos de Computação em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Computação acessando integralmente esse e outros cursos, comece hoje!

Plus

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$85
à vista R$1.020
Matricule-se

Pro

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$120
à vista R$1.440
Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas