Como um monte de letras de um código fonte transforma-se em voltagens?

Artigo de assunto geral. Como que um monte de letras de um código fonte transforma-se em voltagens?

[ Hits: 18.339 ]

Por: Buckminster em 18/12/2013


Respondendo à pergunta



Vamos tomar como exemplo, o teclado.

Ao pressionar a tecla "a" em um teclado, um sinal eletrônico é enviado à CPU (entenda-se aqui por CPU, o gabinete com todos os seus componentes; a definição de CPU não é bem essa, mas para esse artigo, vamos tomar essa definição), e esse sinal que vai para a CPU, ou seja, aquela sequência pré-determinada de bits da letra "a" minúscula, é processada e percorre todo o caminho anteriormente citado até chegar ao monitor que desenha a letra "a", iluminando os pixels correspondentes na posição desejada na tela.

Posição esta, determinada pela interseção das linhas e colunas. Ou seja, a letra "a" irá se formar com uma determinada cor em um lugar na tela determinado pelo código fonte do programa que está sendo executado. Esse processo atualmente é transparente até para o programador.

Em um monitor Touchscreen, o processo é basicamente o mesmo, com a diferença de que a tela faz o papel do teclado.

Essa programação pode ser feita através de um IDE (Integrated Development Environment - Ambiente Integrado de Desenvolvimento), que são os programas que fazem programas, tipo Eclipse, Delphi, NetBeans, etc, ou pode programar no bloco de notas. Os IDEs tem a vantagem de já virem com o compilador embutido e o sujeito só fica "montando as caixinhas".

O teclado possui um microprocessador em seu interior que interpreta a forma como as teclas são pressionadas, e cada tecla do teclado tem seu próprio sinal eletrônico, bem como todos os outros componentes de um computador tem a sua arquitetura com seu respectivo padrão de funcionamento.

Quando instalamos um programa no computador, esse programa vem com seu código fonte, onde tem as informações da localização das imagens na tela, das cores das imagens, etc.

Ou seja, todo o processamento de um computador pessoal comum é feito, basicamente, em cima da formação de imagens na tela. Por isso que um jogo exige um bom processador, uma boa placa de vídeo e um bom monitor, pois as imagens estão em constante movimento e o processador está sempre "recalculando" as voltagens, fazendo a tela dar a impressão de que a imagem está se movendo, quando na verdade, os pixels estão se acendendo e se apagando e brilhando em diferentes tonalidades de cores.

Mais ou menos como aqueles painéis eletrônicos de anúncios, onde as letras ficam passando de um lado para o outro e as letras, nada mais são do que LEDs (ou lâmpadas) acendendo e apagando em sequência.

Um processador tem milhões de transistores dentro dele. Um processador Intel Core i7 de 4ª geração, por exemplo, com a tecnologia de 22 nm (nanômetros), possui, aproximadamente, 1 bilhão e 600 milhões de transistores de layout. Apesar de que existe uma diferença entre transistores esquemáticos e transistores de layout, mas não vem ao caso. De transistores esquemáticos esse processador tem, aproximadamente, 1 bilhão e 400 milhões.

O nanômetro é uma medida de distância, assim como o centímetro também o é. Um nanômetro corresponde a um milímetro dividido em 1 milhão de partes iguais. Pega-se uma única dessas partes e multiplica-se por 22, e temos o tamanho de um transistor de 22 nm. O "troço" é pequeno mesmo.

A função básica do transistor, geralmente feito de silício (que é um material abundante na natureza e próprio para isso), é chavear (tipo um interruptor de luz) a passagem do sinal elétrico e amplificar esse sinal, quando for o caso.

As voltagens que passam pelo processador podem ser transformadas (aumentadas e mudadas de sentido de fluxo) formando as sequências de voltagens (bits) que cada programa determina.

As diversas imagens que se formam na tela e que não fazem parte da tabela ASCII, são sequências de bits pré-determinadas pelos diversos programas que o computador executa, ou seja, é a programação que consta do código fonte de um determinado programa.

Para evitar processamento excessivo do processador, existe o conceito de memória cache, que pode ser a do processador, pode ser a do HD, pode ser armazenada na memória RAM, etc.

O cache armazena, por exemplo, a sequência de bits de uma página inteira já desenhada na tela para que o processador não tenha o trabalho de recalcular esta página. Quando esta página for chamada de novo, a sequência estará pronta no cache.

Por isso que, por exemplo, quando você abre um site pela primeira vez, a página demora mais para se formar do que a segunda vez (com o computador funcionando sem desligar, pois, ao desligar ou reiniciar o computador, as memórias cache geralmente são apagadas).

Não estamos falando aqui de conexão ao site, mas da formação de imagens após a conexão estabelecida.

Na primeira vez, o processador tem que fazer todos os cálculos (entenda-se por cálculos, a montagem da sequência de bits [voltagens]); na segunda vez, a página é chamada já pronta no cache (quando estiver armazenada em um cache). Praticamente, todos os navegadores fazem cache. A tecla F5 (atualizar) verifica no servidor do site e não no cache para trazer a página atualizada. Não confunda.

Para entender melhor: quando você minimiza uma página, ao maximizar, ela é buscada no cache.

Quando o programador digita seu código fonte, as sequências de bits estão sendo magnetizadas em algum lugar no computador, cada qual na sua respectiva voltagem, em arquivos de texto, por exemplo (podem ser arquivos de imagens, etc), geralmente situados no HD, em uma pasta que o programador criou para salvar seu código fonte. Arquivos de texto são mais simples de serem manipulados e permitem acesso mais fácil ao seu conteúdo.

Durante a compilação, os arquivos do código fonte (não todos) são transformados em arquivos binários. Arquivos binários têm seu conteúdo armazenado no formato binário, ou seja, em sequências de bytes respeitando uma determinada estrutura.

Esses arquivos podem ser visualizados como uma tabela onde cada linha possui um determinado conjunto de campos (colunas). Cada linha dessa tabela, terá um número que identificará sua posição no arquivo. Por essas características, os arquivos binários têm a vantagem de permitir o acesso aleatório às posições.

Quando você abre um arquivo binário com seu editor de texto preferido no GNU/Linux, aparece uma sequência de caracteres estranhos. Cada um desses caracteres é uma sequência de bits (voltagens), sendo que um arquivo binário pode conter qualquer tipo de conteúdo, imagens, sons, versões comprimidas de outros arquivos, etc.

E por que aparecem os caracteres estranhos?

Simples. É porque o editor de texto não sabe interpretar arquivos binários, ele não foi feito para isso. Para ler e ditar arquivos binários, você precisa de um Editor de Arquivos Binários.


E assim, de forma brusca, chegamos ao fim. Mas acredito que a pergunta foi respondida de forma satisfatória.

Página anterior    

Páginas do artigo
   1. Introdução
   2. Código fonte em voltagens
   3. Respondendo à pergunta
Outros artigos deste autor

Compilação de Kernel

Compilação e instalação do Vim e habilitando a copiar e colar com o mouse

Tradução do artigo do filósofo Gottfried Wilhelm Leibniz sobre o sistema binário

Como utilizar de forma correta os repositórios e pacotes Backports

ClamAV, o kit de ferramentas antivírus

Leitura recomendada

Antergos - Um caminho para conhecer o Arch Linux

Instalando o Insigne Momentum 5.0

AlmaLinux - Sua Alternativa ao CentOS

Pop!_OS Linux - Uma boa distribuição baseada no Ubuntu

A origem do nome Fedora

  
Comentários
[1] Comentário enviado por px em 18/12/2013 - 03:13h

Só você para me fazer ler um artigo as 3 da matina, kk. Poderia estender esse último assunto sobre a edição de binários (assembly, registradores, etc...) acredito que assim chegaria mais a fundo e próximo de responder a pergunta do título, no mais nota 10, como de costume rsrs.

PS: 01000001 01100111 01110101 01100001 01110010 01100100 01100001 01101110 01100100 01101111 00100000 01101111 00100000 01110000 01110010 11110011 01111000 01101001 01101101 01101111 00100000 01011110 01011110

[2] Comentário enviado por darkstarfire em 18/12/2013 - 10:21h

px:

Aguardando o pr?ximo ^^

[3] Comentário enviado por Buckminster em 18/12/2013 - 14:24h


[2] Comentário enviado por darkstarfire em 18/12/2013 - 10:21h:

px:

Aguardando o pr?ximo ^^


Obrigado px:

01001111 00100000 01110000 01110010 11110011 01111000 01101001 01101101 01101111 00100000 01110011 01100101 01110010 11100001 00100000 01110011 01101111 01100010 01110010 01100101 00100000 01110100 01110010 01100001 01100100 01110101 11100111 11100011 01101111 00100000 01100100 01100101 00100000 01100010 01101001 01101110 11100001 01110010 01101001 01101111 01110011 00100000 01100101 01101110 01110100 11100011 01101111 00101110

01001001 01110011 01110011 01101111 00100000 01110110 01100001 01101001 00100000 01101101 01100101 00100000 01100100 01100001 01110010 00100000 01110101 01101101 01100001 00100000 00100010 01110100 01110010 01100001 01100010 01100001 01101100 01101000 01100101 01101001 01110010 01100001 00100010 00100000 01100100 01100001 01101110 01100001 01100100 01100001 00100001

Não vale usar um tradutor automático!

[4] Comentário enviado por px em 18/12/2013 - 14:49h

@Buckminster:

O próximo será sobre tradução de binários então.

Isso vai me dar uma "trabalheira" danada!

De nada:

01000100 01100001 00100000 01110100 01110010 01100001 01100010 01100001 01101100 01101000 01101111 00100000 01101101 01100001 01101001 01110011 00100000 01100110 01101001 01100011 01100001 00100000 01101100 01100101 01100111 01100001 01101100 00100000 00111010 01000100

[5] Comentário enviado por Buckminster em 18/12/2013 - 15:37h

010101100110111101110101001000000010001001100101011011100110001101101000011001010111001000100010001000000110010001100101001000000110010101111000011001010111001001100011111011010110001101101001011011110111001100100000011100000110000101110010011000010010000001100110011000010111101001100101011100100010000001101110011011110010000001100001011100100111010001101001011001110110111100101110

[6] Comentário enviado por juno em 18/12/2013 - 15:45h

01000011 01100001 01110010 01100001 01101101 01100010 01100001 00100000 01101001 01101101 01100001 01100111 01101001 01101110 01100001 00100000 01110011 11110011 00100000 00100001 00100001 00100001

[7] Comentário enviado por Buckminster em 18/12/2013 - 19:13h


[6] Comentário enviado por juno em 18/12/2013 - 15:45h:

01000011 01100001 01110010 01100001 01101101 01100010 01100001 00100000 01101001 01101101 01100001 01100111 01101001 01101110 01100001 00100000 01110011 11110011 00100000 00100001 00100001 00100001


01000101 01110011 01110100 01101111 01110101 00100000 01101001 01101101 01100001 01100111 01101001 01101110 01100001 01101110 01100100 01101111 00100001

[8] Comentário enviado por px em 18/12/2013 - 19:42h


[7] Comentário enviado por Buckminster em 18/12/2013 - 19:13h:


[6] Comentário enviado por juno em 18/12/2013 - 15:45h:

01000011 01100001 01110010 01100001 01101101 01100010 01100001 00100000 01101001 01101101 01100001 01100111 01101001 01101110 01100001 00100000 01110011 11110011 00100000 00100001 00100001 00100001

01000101 01110011 01110100 01101111 01110101 00100000 01101001 01101101 01100001 01100111 01101001 01101110 01100001 01101110 01100100 01101111 00100001


01001111 00100000 01110000 01100101 01110011 01110011 01101111 01100001 01101100 00100000 01101001 01110010 11100001 00100000 01100110 01101001 01100011 01100001 01110010 00100000 01101100 01101111 01110101 01100011 01101111 00100001 00100000 01110010 01110011 01110010 01110011

[9] Comentário enviado por Buckminster em 18/12/2013 - 19:54h

01000011 01101111 01101110 01100011 01101111 01110010 01100100 01101111 00101110 00100000 01001101 01100001 01110011 00100000 01101100 01101111 01110101 01100011 01101111 00100000 01101010 11100001 00100000 01100101 01110011 01110100 01101111 01110101 00100000 01100101 01110101 00100000 01110100 01110010 01100001 01100100 01110101 01111010 01101001 01101110 01100100 01101111 00100000 01101110 01101111 00100000 00100010 01100010 01110010 01100001 11100111 01101111 00100010 00101110 00100000 01010110 01101111 01110101 00100000 01100011 01101111 01101101 01100101 11100111 01100001 01110010 00100000 01100001 00100000 01110101 01110011 01100001 01110010 00100000 01110101 01101101 00100000 01110100 01110010 01100001 01100100 01110101 01110100 01101111 01110010 00101100 00100000 01110000 01101111 01101001 01110011 00100000 01100100 01100101 01110000 01100101 01101110 01100100 01100101 01101110 01100100 01101111 00100000 01100001 00100000 01100011 01101111 01101001 01110011 01100001 00100000 01110110 01100001 01101001 00100000 01101100 01101111 01101110 01100111 01100101 00101110 00101110 00101110 00100000 01110010 01110011 01110010 01110011

[10] Comentário enviado por px em 18/12/2013 - 21:36h


[9] Comentário enviado por Buckminster em 18/12/2013 - 19:54h:

01000011 01101111 01101110 01100011 01101111 01110010 01100100 01101111 00101110 00100000 01001101 01100001 01110011 00100000 01101100 01101111 01110101 01100011 01101111 00100000 01101010 11100001 00100000 01100101 01110011 01110100 01101111 01110101 00100000 01100101 01110101 00100000 01110100 01110010 01100001 01100100 01110101 01111010 01101001 01101110 01100100 01101111 00100000 01101110 01101111 00100000 00100010 01100010 01110010 01100001 11100111 01101111 00100010 00101110 00100000 01010110 01101111 01110101 00100000 01100011 01101111 01101101 01100101 11100111 01100001 01110010 00100000 01100001 00100000 01110101 01110011 01100001 01110010 00100000 01110101 01101101 00100000 01110100 01110010 01100001 01100100 01110101 01110100 01101111 01110010 00101100 00100000 01110000 01101111 01101001 01110011 00100000 01100100 01100101 01110000 01100101 01101110 01100100 01100101 01101110 01100100 01101111 00100000 01100001 00100000 01100011 01101111 01101001 01110011 01100001 00100000 01110110 01100001 01101001 00100000 01101100 01101111 01101110 01100111 01100101 00101110 00101110 00101110 00100000 01110010 01110011 01110010 01110011


01001011 01001011 01001011 01001011 01001011 00101100 00100000 01101010 11100001 00100000 01100001 01110100 11101001 00100000 01100011 01100001 01101110 01110011 01100101 01101001 00100000 01100100 01100101 00100000 01101111 01101100 01101000 01100001 00100000 01100001 00100000 01110100 01100001 01100010 01100101 01101100 01100001 00101100 00100000 01110010 01110011 01110010 01110011 00101110

01010000 01010011 00111010 506172656920706f722061717569205e5e

[11] Comentário enviado por Buckminster em 18/12/2013 - 22:41h

45752074616d62e96d21

[12] Comentário enviado por juno em 18/12/2013 - 23:23h

20:61:75:61:75:61:75:75:61:20:2e:2e:2e:2e:20:73:1f:20:6d:61:74:65:6d:1f:74:69:63:61:20:70:75:72:61:20:2e:2e:2e:20:6b:6b:6b:6b:6b

[13] Comentário enviado por removido em 19/12/2013 - 07:10h

Traduzindo para o brasileiro: 4-3-3, 4-4-2, 3-5-2, 4-5-1, 3-6-1

[14] Comentário enviado por phoemur em 19/12/2013 - 09:53h

Eu uso python, é bem tranquilo:

>>> frase = 'Parabéns pelo artigo Buckminster'
>>> resultado = []
>>> for elem in frase:
... resultado.append(bin(ord(elem))[2:])
...
>>> lista = ' '.join(resultado)
>>> lista
'1010000 1100001 1110010 1100001 1100010 11101001 1101110 1110011 100000 1110000 1100101 1101100 1101111 100000 1100001 1110010 1110100 1101001 1100111 1101111 100000 1000010 1110101 1100011 1101011 1101101 1101001 1101110 1110011 1110100 1100101 1110010'
>>> lista = ['0b' + elem for elem in lista.split()]
>>> ''.join([chr(int(elem, base = 2)) for elem in lista])
'Parabéns pelo artigo Buckminster'

[15] Comentário enviado por junior em 19/12/2013 - 11:10h

Sou leigo no assunto, então pergunto:

É correto usar o termo "voltagem"?
Assim como, na proporção, poderíamos utilizar: amperagem, "vatagem (W)"?

-

Parabéns pelo artigo!

[16] Comentário enviado por lcavalheiro em 19/12/2013 - 11:47h


[15] Comentário enviado por junior.rocha em 19/12/2013 - 11:10h:

Sou leigo no assunto, então pergunto:

É correto usar o termo "voltagem"?
Assim como, na proporção, poderíamos utilizar: amperagem, "vatagem (W)"?

-

Parabéns pelo artigo!


Amperagem sim, mas uatágem (James Watt, como todo bom inglês, infartaria se seu nome fosse pronunciado como Vatt, já que pronunciar o W como V é um privilégio dos alemães que pronunciam ainda o V como F) não. Usa-se potência mesmo.

[17] Comentário enviado por Buckminster em 19/12/2013 - 18:54h

Obrigado phoemur e junior.rocha.

Voltagem - tensão elétrica medida em volts - Substantivo Feminino - (Está no Dicionário)

Amperagem - s.f. Intensidade da corrente elétrica (está no Dicionário).

[18] Comentário enviado por macalencar em 20/12/2013 - 09:55h

Ótimo artigo...
--
$ gcc comments.c -o bincomment
$ ./bincomment
Segmentation fault
_

[19] Comentário enviado por cytron em 27/12/2013 - 01:02h

Artigo legal !!!!!

Me fez entrar pelo túneo do tempo, voltei uns 15 anos atrás... lá no assembly... madrugadas e madrugadas intermináveis, controlando registradores e "desenroscando parafusos" usando assembly kkkkk. Usando como fonte de conhecimento a "bíblia do programador", tutorial "RBT" e "Guadilajara", algumas coisas do "Nash Leon" também... cadê ele heim? kkkkkk.

Droga! É nessas horas que fico triste por existir o "tempo" e ele "passar". Tem coisas que deveriam ser "etérnas". Como era bom!

Quem é da época sabe exatamente a sensação! Ter a tabela ASCII decorada, tando em decimal quando em hex, decorar até um monte de binários, saber a sequencia dos múltiplos de 8 e impressionar qualquer professor de matemática... 8, 16, 32, 64, 128, .... até o cara pedir pra parar. Coitado, mal sabia ele que era tudo decorado de tanto assembly.

Tinha uns que eram tão fissurados no assembly que já reconhecia até a "linguagem de máquina", (eu por exemplo kkkk), dava um "copy con" e mandava ver no ALT + ...., fazia um ".com" com uns 15 bytes que já mudava o cursos ou mostrava uma frase na tela.

Aqui no VOL deve ter muita gente que sabe e sente o que estou falando.

E quando apareceu o "BB" no Linux? Um verdadeiro show pirotécnico em ASCII, tinha gente que via mesmo um monte de "letrinhas" passando na tela kkkkk. Mas quem era do "underground" ficava "paralizado" com tamanha maravilha.

Mais uma vez torno a repetir.... COMO ERA BOM!

Entendo porque nossos avós e pais ficam as vezes relembrando a vida na roça e dizendo "como era bom" o fogão a lenha, o cheiro da terra, o canto dos pássaros ou qualquer outra coisa da infância. "No nosso mundo" o canto do pássaro era o som do modem US-Robotics conectando em uma BBS.

O que tem a ver essa retrospectiva com o artigo do nosso amigo????

Ele fala sobre os barramentos (indiretamente), ASCII, e outras coisas, tudo ligada diretamente com o programador assembly. O mais tocante para mim foi a parte do vídeo, onde o programador assembly tem que controlar "fisicamente" a placa de vídeo para conseguir mostrar algo na tela, as páginas de vídeo, os pixels e tudo mais! Que maravilha.

[20] Comentário enviado por devauxcl em 02/01/2014 - 21:56h

Excelente Artigo ! Interessante o assunto

[21] Comentário enviado por Buckminster em 03/01/2014 - 02:07h

macalencar, cytron e devauxcl:

obrigado!

[22] Comentário enviado por mrxrobot em 04/01/2014 - 22:41h

Execelente artigo !

[23] Comentário enviado por Buckminster em 05/01/2014 - 21:46h


[22] Comentário enviado por marcos_warlock em 04/01/2014 - 22:41h:

Execelente artigo !


Obrigado!

[24] Comentário enviado por Ghroll em 06/01/2014 - 20:47h

Post fantástico!!
A tecnologia e sua infinitas possibilidades. :)

[25] Comentário enviado por VandersonDiniz em 07/01/2014 - 15:43h

Para você, Buckminster: (y) <----- interprete como se estivesse no facebook.kkkk.

[26] Comentário enviado por albfneto em 07/01/2014 - 19:01h

Muito bom, Buck!
Seu artigo é excelente, alta qualidade, 10 e favoritado.
Obrigado por compartilhar
seu conhecimento aqui no VOL!

[27] Comentário enviado por Buckminster em 08/01/2014 - 21:17h

Ghroll e VandersonDiniz,

obrigado!

[28] Comentário enviado por Buckminster em 08/01/2014 - 21:19h

Opa, obrigado Alberto.
É sempre uma satisfação receber um elogio teu.

[29] Comentário enviado por mitz em 12/02/2014 - 23:32h

Há tempos não via alguém tão apaixonado por cargas eletricas.
Valeu pela aula, mas sinto choque quando ouço as expressões "voltagem", "amperagem" e outras do tipo.
Como está bem explicado no texto, correspondem a tensão elétrica e corrente elétrica e por aí vão...

[30] Comentário enviado por mitz em 12/02/2014 - 23:39h

[15] Comentário enviado por junior.rocha em 19/12/2013 - 11:10h: Sou leigo no assunto, então pergunto:É correto usar o termo "voltagem"?Assim como, na proporção, poderíamos utilizar: amperagem, "vatagem (W)"?-Parabéns pelo artigo!


O certo seria dizer tensão elétrica, corrente elétrica.
As expressões voltagem, amperagem e outras são termos normalmente usados por leigos ou profissionais que aprenderam fazendo, sem influência da teoria.
De qualquer forma não tira o valor do profissional de forma alguma...

Parabéns!

[31] Comentário enviado por asdf2 em 15/04/2014 - 01:33h

Um dos melhores Artigo que ja li aqui no no site, ficou perfeito, valeu demais. Foi pros favoritos

[32] Comentário enviado por JFurio em 19/05/2014 - 09:40h

Realmente muito bom !!! o que seria dos programados, desenvolvedores, arquitetos de rede, etc... se não fossem a união da física, química e a eletrônica!

[33] Comentário enviado por Buckminster em 19/06/2014 - 21:51h


[31] Comentário enviado por asdf2 em 15/04/2014 - 01:33h:

Um dos melhores Artigo que ja li aqui no no site, ficou perfeito, valeu demais. Foi pros favoritos


Obrigado.

[34] Comentário enviado por Buckminster em 19/06/2014 - 21:51h


[32] Comentário enviado por JFurio em 19/05/2014 - 09:40h:

Realmente muito bom !!! o que seria dos programados, desenvolvedores, arquitetos de rede, etc... se não fossem a união da física, química e a eletrônica!


Obrigado.

[35] Comentário enviado por JJSantos em 15/11/2014 - 22:46h

Excelente Artigo!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts