Onde vivem os Softwares

Albert Viana
4 min readMar 14, 2022
Photo by Boitumelo Phetla on Unsplash

Dentro dos hardwares, que vimos em Da tomada até o bem vindo.

Os softwares, chamados assim, da mesma forma que os hardwares, pela predominância da língua inglesa no mundo dos sistemas computacionais, são programas de computador que auxiliam o acesso e utilizam os componentes de hardware que compõem o computador para executar uma tarefa complexa.

Eles se dividem em, de baixo e alto nível.

Os de baixo nível são responsáveis por tornar mais fácil o entendimento da linguagem de máquina, aquela que vem definida no hardware e sua arquitetura e foi definida por quem criou os chips e as placas em primeiro lugar. Esta linguagem, que mais parece alienígena, é uma série instruções básicas para os circuitos internos, os comandando a ligar ou desligar seus estados.

Exemplo de circuito booleano

Esse ligar e desligar é melhor compreendido após estudarmos um pouco de circuitos booleanos, mas o importante agora é entender que no fim das contas estas instruções se tornam 1 ou 0, ligado ou desligado, sendo transportados em cadeias de uns ou zeros, como por exemplo “001011”, pelos barramentos até o componente desejado.

Se fossemos traduzir estas instruções para português elas se pareceriam com: “faça isso e faça aquilo”, “não faça isso se aquilo”, “ou faça isso, ou faça aquilo”. Perceba que o software de baixo nível tem esse adjetivo porque é criado utilizando uma linguagem de baixo nível e baixo nível significa, basicamente, difícil de ler para humanos.

Você pode estar se perguntando:

— Se é tão difícil por que ainda a utilizamos?—

Esta dificuldade na nossa leitura traz consigo a facilidade de leitura pela máquina. E esta é toda a motivação por trás. É de nosso total interesse que a máquina receba instruções básicas (ligue, desligue, calcule, guarde) o mais rápido possível.

— Como são criadas afinal estas instruções se elas são difíceis de entender para humanos? —

Ora, o que você faz quando vai se comunicar com uma pessoa que fala outra língua? Uma das duas partes precisa assumir a responsabilidade de transformar a sua linguagem nativa em algo que a outra parte entenda, ou seja, traduzir.

É isso que faz a linguagem Assembly por exemplo. Ela transforma a linguagem que conhecemos em linguagem de máquina por um processo chamado compilação que é outro nome para tradução.

Exemplo de código assembly

O Assembly, apesar de ser mais fácil de entender do que a linguagem de máquina, não é, nem de longe, tão fácil de entender quanto o nosso português. Isto porque ele é bastante resumido com seus substantivos e verbos e tem suas própria regras de leitura e escrita.

Assim como no português temos um conjunto de caracteres, o alfabeto, fazemos a leitura da esquerda para a direita, temos sujeito e predicado, acentuações e pontuações, no Assembly fazemos a leitura da mesma forma, temos sujeito e predicado, sentenças escritas com verbos e sujeitos, pontuações e um conjunto de caracteres.

Uma vez escrita uma sentença em Assembly, ou seja, uma instrução para o computador, uma ferramenta de programação chamada Assembler fará a tradução do código entendível para código de maquina.

Photo by Markus Spiske on Unsplash

As linguagem de baixo nível, como o Assembly, são utilizadas para executar tarefas muito próximas do hardware, que exijam alto desempenho e baixo consumo de recursos. Estão presentes por exemplo no Kernel, ou Núcleo, que é o software principal de um computador.

É ele quem serve de interface entre os componentes físicos, abrindo caminho para a criação e utilização de softwares mais fáceis de ler e escrever, por não precisarem refazer o trabalho que este já executa tão brilhantemente.

Nesta camada de dependências entre softwares o próximo da lista é o Sistema Operacional, ou encurtando, SO, que utiliza o Kernel para construir uma outra interface entre os componentes físicos.

Esta camada tem como especialidade fornecer funcionalidades mais atrativas ao usuário final, porque já possui tradução da linguagem de máquina suficiente para poder inclusive ser chamado de português.

Divisão entre camadas de usuário, de kernel e de hardware

Apesar de virtualmente possível o código de um SO não é escrito em Assembly, dada a restrição da linguagem, não seria trabalho fácil construir uma toda uma lista de funcionalidades, clicáveis, botões, janelas, cores, texto em uma linguagem tão “limitada”.

Os Kernels e os Sistemas operacionais são escritos geralmente em C ou em uma linguagem baseada em C.

Diferente do Assembly, a linguagem de programação C é cheia de verbos, substantivos e adjetivos. Possui uma outra série de conceitos que ajudam a estruturar o texto daquilo que virá a ser a instrução final para a máquina. É altamente entendível por humanos e tem uma série de facilidades para definir uma determinada tarefa repetitiva por exemplo.

Apesar de bem mais amigável a leitura e escrita humana o C, assim com o Assembly, no fim das contas tem que ser traduzido para a linguagem de máquina.

A seguir veremos como esta tradução é feita, ou seja, como funciona o processo de compilação.

--

--