Este é o segundo artigo da série que discute as abstrações encontradas na computação.
No primeiro artigo foi dada uma pequena explicação sobre o uso do assembly para programar diretamente instruções em processadores. O uso dessa técnica é complexo, pois as instruções dessa linguagem não possuem uma analogia com aquelas que usamos para nos comunicarmos.
Antes de chegarmos às linguagens de programação de mais alto nível, precisamos entender o papel dos sistemas operacionais e o porquê de constituírem mais uma das abstrações com que lidamos na computação.
Bem resumidamente, um sistema operacional provê um conjunto de serviços para os programas executados em um computador. Consequentemente ao escrever programas, tarefas como leitura e gravação de dados, interação do usuário, exibição de informações entre outras são delegadas ao sistema operacional.
O sistema operacional é inicializado após o carregamento das instruções BIOS (Basic Input Output System). Esse sistema usa as funções BIOS para comunicar-se com as diferentes partes que compõe o computador (processador, memória, discos de armazenamento, dispositivos de entrada de dados, monitores, etc.) e controla a execução dos programas.
Todo sistema operacional, possui um mecanismo para carregar em memória programas a executar no computador. A ação para carregar programas normalmente é via solicitação de quem está usando o computador, mas eventualmente é feita via agendamento de tarefas a executar.
Quem utiliza um computador tem à disposição comandos que configuram a execução do sistema operacional e solicitam informações sobre o estado do computador. Por exemplo, ao listar os arquivos que se encontram em um dado local do computador, o que se tem em ultima instancia é o disparo de um comando do sistema operacional que faz essa tarefa.
Assim como o assembly varia de acordo com o processador ao qual se refere, existem diferentes sistemas operacionais e de maneira análoga eles também variam de acordo com o processador. A diferença é que pode haver mais de um sistema operacional para um mesmo tipo de processador.
A escolha de um sistema operacional é basicamente ligada aos gostos e preferências de quem usa o computador. Atualmente isso está mais claro nos dispositivos móveis (tablets e smartphones) onde ao escolher uma marca e modelo torna-se implícito o sistema operacional adotado.
Graças ao nível de abstração proporcionado pelo sistema operacional, o desenvolvimento de programas deixou de ser algo possível de ser feito apenas com assembly. Um próximo artigo tratará de linguagens de programação e o que faz com que o código delas seja executado por sistemas operacionais.
OBSERVAÇÃO: Este é o primeiro artigo de uma série que discute as diferentes abstrações que fazem parte da computação.
O uso da computação se tornou ubíquo graças à evolução da eletrônica, simbolizada pelos microprocessadores. Estes dispositivos, construídos a partir da combinação da química do silício com as chamadas terras raras, são circuitos eletrônicos miniaturizados que combinam um número muito grande de transistores para realizar operações binárias.
Transístores nada mais são que espécies de chaves que permitem ou não a passagem de sinais elétricos. Essa característica os torna bastante adequados para o desenvolvimento de dispositivos que trabalham com lógica binária. Nela as operações são baseadas através da combinação de dois estados - ligado e desligado – daí a praticidade de se usar algo que permita controlar mudanças nesses estados.
Os microprocessadores mais simples e especializados são desenhados para atender objetivos específicos. Assim não é necessário considerar a necessidade de programá-los, pois sua construção embute as funcionalidades que atenderão.
No entanto a maioria dos usos de microprocessadores está na construção de sistemas, quer seja uma central de controle de um veículo automotor da atualidade ou encapsulado num chip que vai num smartphone. Nesse caso um sistema é um conjunto de instruções para realização de diversas atividades, por exemplo, controlar a injeção de combustível ou apresentar informações numa rede social, nos respectivos exemplos de uso citados acima.
A forma primordial para programar um microprocessador, i.e., fazer com que realize tarefas específicas, está no uso do assembly. Este é um tipo de programação voltado especificamente para as instruções de um determinado processador. De qualquer forma, ele já é considerado como uma linguagem de programação, mas com propósito bastante específico e requerendo o conhecimento de como o processador funciona.
O assembly é um primeiro nível de abstração, pois cria instruções que possibilitam um processador realizar operações com finalidades por vezes bastante distintas. Seu uso não é fácil e para se ter uma analogia próxima a como usá-lo, pode-se voltar no tempo das calculadoras de bolso programáveis, onde uma combinação de sequencias de teclas criavam instruções próximas às que se encontram no assembly (por exemplo, o famoso “goto”).
As dificuldades para se programar com assembly remetem ao uso de uma camada de abstração presente em todo equipamento que roda algum tipo de programa: o Sistema Operacional, que será tratado no próximo artigo.