Sistemas Operacionais — Conceitos Fundamentais — Parte 1
Resumo
Muitos estudantes que desejam se tornar programadores, esquecem da importância de entender os conceitos básicos da computação. Como poderíamos construir aplicações eficientes para sistemas que não conhecemos? Neste artigo falarei um pouco sobre Sistemas Operacionais.
Sistemas Operacionais
Os sistemas operacionais são fundamentais para o funcionamento dos computadores — sem eles, essas máquinas seriam apenas um amontados de placas eletrônicas — mas o que seria um sistema operacional? Para não recriar a roda, vamos ver o que diz o Wikipedia:
“Sistema operativo (português europeu) ou operacional (português brasileiro) é um programa ou um conjunto de programas cuja função é gerenciar os recursos do sistema (definir qual programa recebe atenção do processador, gerenciar memória, criar um sistema de arquivos, etc.), fornecendo uma interface entre o computador e o usuário (português brasileiro) ou utilizador (português europeu).”
Para os entusiastas de uma boa leitura, aconselho dois livros maravilhosos do grande Tanenbaum — sistemas operacionais modernos e sistemas operacionais: design e implementação — autor e criador do Minix, sistema a qual Linus Torvalds se inspirou para criar o Linux. No primeiro livro citado, sistemas operacionais modernos, o autor explica com detalhes o funcionamento de um sistema operacional, usando como base o próprio Minix — com o código fonte no final.
“O Minix é um sistema operacional Unix-like (semelhante ao UNIX), escrito em linguagem C e assembly. Ele é gratuito e com o código fonte disponível.”
Agora que nós já entendemos o que é um sistema operacional, podemos explicar alguns conceitos importantes. Neste artigo, tenho dois objetivos principais, criar um dicionário — conceito + explicação — e resumir ao máximo os assuntos mais complexos.
Antes de prosseguir, o Wikipedia explica de forma muito clara o propósito de um sistema operacional:
“Um sistema operacional é projetado para ocultar as particularidades de hardware (ditas “de baixo nível”) e, com sua atuação, criar uma máquina abstrata que fornece às aplicações serviços compreensíveis ao usuário (ditas “de alto nível”).”
Obs. Não se preocupem, todos os links estarão no final desse artigo.
Arquitetura do Conjunto de Instruções
Explicar este conceito de forma simples e resumida será um desafio, pois um conjunto de instruções é uma funcionalidade muito complexa dos computadores. Antes de fazer a minha própria explicação sobre este assunto, acho importante os deixar a par do que estamos falando—veja como o Wikipedia descreve um conjunto de instruções:
“Conjunto de instruções (tradução de instruction set) são as operações que um processador, microprocessador, microcontrolador, CPU ou outros periféricos programáveis suporta, fornece ou disponibiliza para o programador, ou seja, é a representação em mnemônicos do código de máquina, com a finalidade de facilitar o acesso ao componente.”
Para deixar este assunto mais didático, pense no seu cotidiano. Eu não sei vocês, mas eu tenho muitas tarefas durante o meu dia e cada uma delas tem um conjunto de instruções. Provavelmente, vocês conhecem aquele exemplo clássico do algoritmo e a receita de bolo — onde cada passo da receita é uma instrução e a receita completa um conjunto de instruções — se cada passo for executado de forma correta, completando esse conjunto de instruções teremos um bolo fresquinho.
Os computadores funcionam da mesma forma — para que as tarefas sejam executadas ou concluídas, é necessário um conjunto de instruções — vejamos o exemplo do código abaixo:
function somar() {
let a = 2
let b = 2
let soma = a + b
console.log(soma)
}
- Armazenar a variável “a” na memória, recebendo 2
- Armazenar a variável “b” na memória, recebendo 2
- Armazenar a variável “soma” na memória, recebendo a + b
- Retornar o resultado da variável soma
Cada passo do exemplo acima é uma instrução; o conjunto dos passos, ou seja, os 4 passos, é um conjunto de instruções. Se completarmos o conjunto de instruções, teremos a execução ou conclusão de uma tarefa. Executando o programa acima, o compilador converte o código para uma linguagem que o computador entende — linguagem de máquina — formando um conjunto de instruções. O processador terá que executar cada uma das instruções para concluir a tarefa — somar duas variáveis.
Registradores
Seguindo o mesmo exemplo do capítulo acima, vamos ver o que diz o Wikipedia:
O registrador (português brasileiro) ou registo (português europeu) de uma CPU (unidade central de processamento) é a memória dentro da própria CPU que armazena n bits
O registrador ou acumulador é um local de armazenamento de dados que fica dentro do processador, ou seja, é um tipo de memória mais rápida e versátil do que as outras, mas por ser muito custosa, seu armazenamento é baixo e temporário.
Sistemas Embarcados
São sistemas que já vem embutidos e definidos dentro do processador/microprocessador. São criados para funções específicas e só executam determinada função — MP3, MP4, Semáforo, Impressora e etc — diferente de outros sistemas que precisam ser instalados num disco rígido.
Núcleo ou Kernel
“Em computação, o núcleo ou kernel é o componente central do sistema operativo da maioria dos computadores; ele serve de ponte entre aplicativos e o processamento real de dados feito a nível de hardware”
Quem usa o Linux, provavelmente, já deve ter sido apresentando para este tal de Kernel. Então, meus amigos, Kernel e Núcleo são tudo a mesma coisa. Como está escrito no texto acima, é o componente central do sistema operacional — eu sei, isso parece unto óbvio — mas a sua função principalmente é ser a ponte entre o Hardware e o Software, ou seja, permitir a comunicação entre as instruções e as placas eletrônicas.
Além de servir como este elo, o núcleo também é responsável por todo o gerenciamento do computador — uso de memória ram, processador, registrador, I/O e etc — tornando muito mais simples a nossa vida, seja como usuário ou programador — o kernel nos permite executar tarefas sem que a gente precise se preocupar com o hardware.
Além do núcleo também temos os micronúcleos, núcleos monolíticos, exonúcleos, nanonúcleos e etc.
Processos
Neste exato momento, enquanto você lê este artigo, seu computador esta executando diversos processos — seja do sistema operacional, navegador e etc — explicando de forma bem simples e genérica, podemos dizer que um processo é a execução de um programa, ou seja, se um software é formado por um conjunto de instruções, então um processo é a execução desse conjunto de instruções — um processo é um software.
Existem processos de diversos níveis — programas abertos, drivers, rede, disco, memória, gerenciador de arquivo, hora, som, controlador de bateria e etc — para saber todos os processos que estão sendo executados neste exato momento no seu computador, basta abrir o gerenciador de tarefas do sistema — ctrl + alt + del no Windows e htop no Linux, por exemplo.
Espaço de Endereçamento
No terceiro capítulo, falamos que o registrador e a memória RAM se comunicam entre si. Os dados da memória RAM são enviados para o registrador, manipulados e então retornados.
A partir dessa ideia, podemos nos fazer duas perguntas:
- Onde esses dados são armazenados na memória?
- Como o registrador e a memória RAM sabem o local desses dados?
Todos os dados ou pedaços de dados são armazenados num espaço da memória chamado endereço — que corresponde a 1 byte — quando um determinado dado tem mais de 1 byte, seus pedaços são distribuídos em endereços diferentes — cada endereço tem uma correspondência e identificação — facilitando a busca
Links
https://pt.wikipedia.org/wiki/Sistema_operativo
https://pt.wikipedia.org/wiki/MINIX
https://pt.wikipedia.org/wiki/Conjunto_de_instru%C3%A7%C3%B5es
https://pt.wikipedia.org/wiki/Registrador_(inform%C3%A1tica)
https://pt.wikipedia.org/wiki/N%C3%BAcleo_(sistema_operacional)