Essa pergunta me foi feita por um conhecido e, apesar de eu ter dado uma explicação rápida e satisfatória na hora percebi que essa dúvida, ainda que simples, é bastante pertinente. Então resolvi desenvolver o assunto e a coisa foi aumentando até resultar nestas laudas.
Vejam bem, as informações aqui presentes apesar de serem bastantes básicas, são completas, mas de forma alguma encerram o assunto. Contudo, por uma questão de tamanho do artigo optei por deixá-lo de forma básica.
Um computador funciona, logicamente, movido à eletricidade. Em grego, a palavra "elektron" significa âmbar, pois foi através do âmbar que foi descoberta a eletricidade e a partir desse vocábulo surgiram as palavras elétron e eletricidade.
Há cargas elétricas positivas e negativas. As cargas de nome igual (mesmo sinal) se repelem e as de nomes distintos (sinais diferentes) se atraem.
Elétron - partícula mais leve que leva carga elétrica negativa.
Próton - partícula de carga elétrica positiva.
Nêutron - tem quantidades iguais de cargas elétricas positiva e negativa.
Um corpo tem carga negativa, se nele há um excesso de elétrons e carga positiva, se há falta de elétrons em relação ao número de prótons.
Note que os termos carga elétrica "negativa" e carga elétrica "positiva" são convenções para distinguir as cargas. Poderiam ter chamado de carga branca e carga preta, carga yin e carga yang, sei lá.
Graças à força do seu campo eletrostático uma carga pode realizar trabalho ao deslocar outra carga por atração ou repulsão. Essa capacidade de realizar trabalho é chamada de potencial. Quando uma carga for diferente da outra haverá entre elas uma diferença de potencial.
A Diferença de Potencial (ddp), mais conhecida como Tensão Elétrica, tem como unidade fundamental o volt (V), por isso é conhecido popularmente como voltagem que não é um termo tecnicamente correto, mas é usual. Quando fala-se aqui de voltagem entenda-se Diferença de Potencial ou Tensão Elétrica.
A Corrente Elétrica, por sua vez, é simplesmente o fluxo de elétrons. Essa corrente é produzida pelo deslocamento de elétrons através de uma ddp (tensão) em um condutor (fio de cobre, por exemplo). A unidade fundamental de corrente é o ampère (A). O termo Amperagem, que também não é um termo tecnicamente correto, refere-se à Corrente Elétrica.
A fonte de alimentação converte a corrente alternada (AC - Alternate Current) da sua casa para corrente contínua (DC - Direct Current) necessária para o funcionamento do seu computador.
Ela é a responsável por converter os 110 ou 220 volts da rede elétrica para as voltagens básicas de 3.3V, 5V e 12V (que são voltagens baixas) fornecidas nas diferentes saídas da fonte de alimentação do computador, além de filtrar a corrente e atenuar picos de tensão. Alguns dos problemas que causam travamentos, erros na instalação de programas, etc, são ocasionados por problemas elétricos.
Vejam bem, em programação estamos, grosso modo, manipulando voltagens, pois um computador é uma máquina movida à eletricidade e são voltagens que correm por seus circuitos eletrônicos através da corrente elétrica. Não falarei aqui das frequências, pois o assunto se estenderia demais sem ter razão para tal uma vez que o escopo do artigo não é esse, contudo, deixo aqui um resumo: na corrente elétrica a Frequência é o número de vezes que uma onda se repete ou quando completa um ciclo positivo-para-negativo. Quanto mais ciclos ocorrerem por segundo, maior a Frequência.
Os famosos "bits" são representados por voltagens. Um bit 0 em um determinado circuito representa uma determinada voltagem. Um bit 1 num determinado circuito representa uma voltagem também, e essa voltagem é um valor em volts, inclusive zero. Por exemplo, num circuito, um bit 0 pode ser 0,2V e em outro circuito um bit 0 pode ser 0,5V. O bit 0 geralmente é um valor próximo de zero volt, mas depende do circuito.
As funções dos transistores, dos resistores, dos capacitores e etc, envolvem aumentar voltagens, diminuir voltagens, conduzir o fluxo e armazenar cargas elétricas para que cada circuito receba a voltagem correta.
Há certo tempo atrás os travamentos em sistemas operacionais, programas, etc, ocorriam mais por problemas de Hardware do que de Software; da seguinte forma: em um determinado circuito da placa mãe, por exemplo, deveria passar uma determinada voltagem, mas devido ao componente (capacitor, resistor, etc) não suportar essa voltagem, para mais ou para menos, ele apresentava mau funcionamento e interrompia o fluxo da eletricidade fazendo a execução do programa travar. Esse mau funcionamento poderia ser causado pela má qualidade do componente, por aquecimento do computador, etc. Daí tinha-se de reiniciar o computador. Para resolver esse problema criou-se o conceito de "limites" além de, com o tempo e novas tecnologias foram descobrindo novos materiais, como o silício.
Um exemplo bem claro desses limites são as memórias RAMs. Elas funcionam, geralmente, com voltagens de até 5V (as DDR5 trabalham com 1,1V; as DDR4 trabalham com 1,2V; as DDR3 trabalham entre 1,35-1,5V; DDR2 com 1,8V e DDR com 2,5V). Um bit 0 pode ser, por exemplo, uma voltagem de 0 a 1V, ou seja, se é enviado 0,5V como sendo um bit 0 a memória aceitará. Esses números são apenas exemplos, a faixa varia muito, porém, são sempre voltagens muito baixas e dentro dos limites estabelecidos pelo fabricante. E temos ainda, nas memórias RAMs, a Taxa de dados (Mb/s) e a Taxa de transferência (GB/s) que também operam dentro de limites pré-estabelecidos.
Às vezes, essa mudança aleatória de voltagem (e/ou de frequência) pode ocorrer por aquecimento dos componentes do circuito. Antigamente ocorriam mais travamentos porque os computadores esquentavam demais e isso acarretava em mudança nas voltagens internas e quando determinado componente recebia uma voltagem errada ele interrompia o fluxo.
Cada componente de um circuito eletrônico é fabricado para trabalhar com uma determinada voltagem e uma determinada frequência. Um exemplo claro é ligar em 220 volts uma fonte de alimentação que está colocada para trabalhar em 110 volts. A fonte queimará ou se for uma fonte de boa procedência terá um mecanismo de proteção para evitar a queima dos componentes, ou se for uma fonte que tolera 90 Volts AC até 240 Volts AC dispensando a chave de mudança 110/220, não queimará.
Se acontecer um pico muito elevado de tensão na rede elétrica, esse pico passará tão rápido e atingirá os componentes do circuito e somente depois o fusível queimará. Nesse caso, diz-se que a fonte "torrou". A não ser que tenha um bom No-Break entre a fonte e a tomada.
E se você ligar o computador em 110 volts com a fonte colocada em 220 volts, ele irá ligar, acenderá as luzinhas, mas não funcionará, pois não tem energia suficiente para seus componentes que foram fabricados para trabalhar naquelas determinadas voltagens, às quais não estão sendo fornecidas apropriadamente. Não terá "força".
Código-Fonte em Voltagens
Como que um monte de caracteres de um código-fonte transforma-se em voltagens?
Quando o vivente está programando, ou seja, virando noites digitando em uma determinada linguagem de programação e ingerindo quantidades absurdas de café, prejudicando o estômago e o fígado e ficando pançudo, ele está, indiretamente, determinando voltagens que passarão pelos circuitos, por exemplo, da placa mãe.
Uma placa mãe é uma placa de circuito eletrônico com seus diversos componentes. Um processador, grosso modo, também é uma placa de circuito eletrônico, porém, em tamanho muito mais reduzido, é um circuito integrado.
O código-fonte com seus comandos e instruções é compilado em um processo que não dá para ser explicado minuciosamente aqui, pois envolve análise léxica, análise sintática, análise heurística, etc, e não vem ao caso.
O computador armazena e movimenta as informações de forma eletrônica, podendo utilizar um valor de corrente elétrica. Para um computador representar eletricamente todos os símbolos da linguagem humana seriam necessárias mais de 100 voltagens diferentes. Uma máquina assim, além de ter custo elevado, seria difícil de construir. Dessa forma, num passado não muito distante, optou-se por construir máquinas binárias capazes de entender apenas dois valores diferentes, o 0 e o 1.
Apesar de que a Computação Quântica está vindo aí com seus qubits (Bits Quânticos) que executam algoritmos quânticos multidimensionais, ainda usaremos computadores clássicos por um bom tempo. Um bit binário clássico pode representar apenas um único valor binário, como 0 ou 1, o que significa que ele só pode estar em um dos dois estados possíveis. Um qubit, no entanto, pode representar um 0, um 1 ou qualquer proporção de 0 e 1 na superposição de ambos os estados, com uma determinada probabilidade de ser 0 e uma determinada probabilidade de ser 1, tipo o Gato de Schrödinger, mas não vem ao caso. Além disso, um computador quântico necessita de um hardware diferente que, atualmente, um Computador Quântico é do tamanho de um carro, assim como antigamente quando os computadores clássicos surgiram ocupavam uma sala inteira.
No link ao final tem maiores explicações sobre Computação Quântica, mas deixo um gostinho:
"Seu computador desktop provavelmente usa um ventilador para esfriar o suficiente para funcionar. Nossos processadores quânticos precisam estar muito frios – cerca de um centésimo de grau acima do zero absoluto – para evitar a “decoerência” ou manter seus estados quânticos. Para conseguir isso, usamos superfluidos super-resfriados. Nessas temperaturas ultrabaixas, certos materiais exibem um importante efeito da mecânica quântica: os elétrons se movem através deles sem resistência. Isso os torna “supercondutores”.
Quando os elétrons passam por supercondutores, eles se combinam, formando "pares de Cooper". Esses pares podem carregar uma carga através de barreiras, ou isolantes, por meio de um processo conhecido como tunelamento quântico. Dois supercondutores colocados em cada lado de um isolante formam uma junção Josephson."
Os "pares de Cooper" foram criados por Sheldon Lee Cooper... bazinga!
Vê-se que Computadores Quânticos também usam eletricidade.
Um bit clássico isolado representa apenas 2 valores, ou seja, em um determinado circuito uma determinada voltagem pode ser um bit 0 ou um bit 1. E esses bits que formam os caracteres são convencionados pela famosa tabela ASCII. A tabela ASCII Completa contém a tabela dos Caracteres de Controle (0 a 31), a tabela ASCII Normal (32 a 127) e a tabela ASCII Estendida (128 a 255).
Porém, não confunda a tabela ASCII com o padrão Unicode, mais conhecido pelo seu esquema de padronização de transformação (UTF - Unicode Transformation Format). Este é outro assunto que também não vem ao caso agora.
Para a letra "a" se formar na tela do monitor o processador envia para a placa de vídeo a sequência 01100001 que trabalhará essas voltagens e as enviará ao monitor. O monitor, por sua vez, iluminará os pixels correspondentes nas cores determinadas formando a letra "a" na tela. A letra "A" maiúscula é a sequência 01000001. Cada símbolo da tabela ASCII tem a sua sequência pré-determinada, convencionada.
É assim que são formadas as letras, as palavras, as frases, etc. Um caractere é formado por uma sequência pré-convencionada de bits. A letra "a" minúscula, por exemplo, é a sequência 01100001 de oito bits, um Byte. E cada um desses bits representa, em um determinado circuito, uma voltagem magnetizada em algum lugar como a memória RAM, o HD/SD, etc, cabendo ao processador interpretar esses bits, ou seja, interpretar a sequência de voltagens. O Clock, de maneira geral, é a medida de tempo, é a velocidade com que o processador trabalha essas voltagens. O Clock do processador é medido em MHZ - MegaHertz (ou atualmente, em GHz - GigaHertz); o Hertz é a unidade da frequência.
O monitor tem as linhas e as colunas que formam a resolução (o conceito de resolução é mais amplo, aqui se optou por esse conceito básico).
Por exemplo, a resolução 1440x900 num monitor Widescreen: são 1440 colunas por 900 linhas. A interseção dessas linhas e colunas formam os pixels. A resolução 1440x900 tem 1.296.000 pixels (1440 multiplicado por 900). Quanto maior a resolução, maior o número de pixels e, tecnicamente, melhor será a definição da imagem.
Nos antigos monitores CRT (Catodic Ray Tube - Tubo de Raios Catódicos), tinha um canhão de elétrons que bombardeava uma camada de fósforo (aquela cor de diarréia no tubo quando o monitor estava desligado) fazendo os pixels brilharem em uma determinada cor formando a imagem.
Nos monitores LCD (Liquid Cristal Display - Tela de Cristal Líquido) o fósforo foi substituído pelo cristal líquido e a iluminação é feita por tubos fluorescentes embutidos na lateral e, às vezes, atrás do LCD e temos uma superfície de eletrodo comum e uma barra de eletrodo simples que controlam quais cristais líquidos respondem a qual carga elétrica dispensando o canhão de elétrons. Os monitores de LED são telas de LCD nos quais a iluminação é feita por LEDs. Atualmente temos monitores LED, OLED (Organic Light Emitting Diode), QLED (Quantum Dot LED), IPS (In-Plane Switching), TN (Twisted Nematic), etc. Os monitores de plasma não vingaram.
A placa de vídeo envia as voltagens necessárias para o monitor e a intensidade da iluminação faz os pixels brilharem em determinadas cores. É uma propriedade do material empregado desde a antiga camada de fósforo ao atual cristal líquido que ainda é o mais utilizado.
Esses materiais quando submetidos a uma determinada voltagem com uma determinada iluminação brilham numa determinada cor. Num monitor colorido cada pixel é composto por um conjunto de 3 pontos: verde, vermelho e azul; e cada um desses pontos pode exibir 256 tonalidades diferentes da mesma cor (vermelha, verde e azul - RGB, Red, Green e Blue).
Basicamente, o processador forma a sequência de bits, envia para a placa de vídeo que, por sua vez, envia para o monitor, formando as imagens.
Mas ainda não respondemos à pergunta: "Como que um monte de letras de um código-fonte transforma-se em voltagens?".
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" 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, escovando bits como antigamente. Os IDEs tem a vantagem de já virem com o compilador embutido e o sujeito só fica "montando as caixinhas" ou você pode usar um IDE como um editor de texto de luxo, à sua escolha.
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 e frequências 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 dão a impressão de que ficam passando de um lado para o outro, sendo que essas letras nada mais são do que LEDs (ou lâmpadas) estáticas acendendo e apagando numa determinada sequência.
Um processador tem milhões/bilhões de transistores dentro dele. Um processador já mais antigo Intel Core i7 de 4ª geração, por exemplo, com a tecnologia de 22 nm (nanômetros), possuía, 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. Já o Intel Core i9-13900K, de 2022, tem 10 nm e 14 bilhões de transistores. O AMD Ryzen 9000 baseado na arquitetura Zen 5 traz 8,315 bilhões de transistores com litografia de 4nm.
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 4 e temos o tamanho de um transistor de 4 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 como 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/SD 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.
As famosas "extensões de arquivos" (.doc, .docx, .jpg, .pdf, etc) são informações magnetizadas em forma de voltagens que instruem o sistema operacional em qual formato é o arquivo e isso permite ao sistema saber se ele está apto a abrir o arquivo nativamente ou se precisa de um programa extra, por exemplo, um leitor de PDF que saiba ler aquelas voltagens específicas.
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 um editor de texto, um leitor de PDF, um programa de imagens, etc, não sabem interpretar arquivos binários, eles não foram feitos para isso. Para ler e ditar arquivos binários você precisa de um Editor de Arquivos Binários que praticamente sabe ler essas voltagens básicas específicas e não precisa de um compilador, um interpretador, etc, ou seja, um intermediário.
E assim, de forma brusca, chegamos ao fim. Mas acredito que a pergunta foi respondida de maneira satisfatória.
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 um editor de texto, um leitor de PDF, um programa de imagens, etc, não sabem interpretar arquivos binários, eles não foram feitos para isso. Para ler e ditar arquivos binários você precisa de um Editor de Arquivos Binários que praticamente sabe ler essas voltagens básicas específicas e não precisa de um compilador, um interpretador, etc, ou seja, um intermediário.
E assim, de forma brusca, chegamos ao fim. Mas acredito que a pergunta foi respondida de maneira satisfatória.
* Escrito em 2013 e reescrito nesta data.
Sobre Computação Quântica:
Nenhum comentário:
Postar um comentário