# data[].attributes.body
“Todos deveriam aprender a programar um computador, porque isso ensina a pensar.”

Esta frase é de Steve Jobs, criador de uma das maiores empresas de tecnologia do mundo.

Além de ser utilizada para desenvolver softwares e soluções tecnológicas super complexas, a programação pode trazer benefícios que você nem imagina, como desenvolver o seu raciocínio lógico e simplificar tarefas do dia a dia, por exemplo.

IoT (Internet das coisas), robótica, Inteligência Artificial… os computadores se tornam uma parte cada vez mais importante da nossa rotina. Está mais do que na hora de aprendermos a nos comunicar com eles!

# data[].attributes.body
Qual o sistema operacional que você usa?

# data[].attributes.attachment_link.readable_text
Introdução: Sistema Operacional

Todas as vezes que alguém pergunta: qual o sistema operacional que você usa? Instantaneamente, você pensa na janelinha do Windows, no shell do Linux ou mesmo no ícone de configurações do Android, dentre outros, não é mesmo?!

Mas e se eu te contasse que um sistema operacional não se resume àquele visual com pastinhas bonitinhas clicáveis e tão úteis em nosso dia-a-dia - conhecido como GUI (Graphical User interface, interface gráfica do usuário)? E você pode pensar: "Ah, então é o shell ou terminal?

Já te digo - e vai ser chocante: Nananinanão!

Fonte: hips.hearstapps.com

Durante a leitura, nós vamos identificar qual o conceito de sistema operacional, alguns de seus aspectos fundamentais, compreenderemos sua importância tanto para o usuário comum, quanto para as pessoas desenvolvedoras, e também conheceremos tipos e estruturas de sistemas.

Apertem os cintos e vamos para as revelações...

Leia também: Como instalar o MongoDB, Compass e Shell no sistema operacional Linux?

O que é um sistema operacional?

Fundamentalmente, um sistema operacional é um software, que pode ser o Linux, Windows, Android, macOS, UNIX, entre outros. No entanto, ele não resume aquilo que seus olhos conseguem ver ou ao que você consegue interagir. Em outras palavras, é um programa que conversa diretamente com o hardware da sua máquina.

O sistema operacional assegura que os programas funcionem corretamente. Mas antes de entendermos o que é um sistema operacional, precisamos definir o que é um sistema computacional.

Um computador moderno apresenta alguns elementos principais, que podemos destacar:

Um ou mais processadores (o core);

Memória principal;

Dispositivos de entrada e saída (E/S), como monitores e teclados.

Todos esses componentes lidam em conjunto com os programas na sua máquina. À primeira vista pode parecer pouca coisa, mas você conhece de fato todos os componentes que pertencem ao seu computador? Sabe como todos eles funcionam?

Já pensou então, se todo o usuário e usuária se preocupassem com detalhes de hardware para escrever um arquivo de texto? Ou pior, se os desenvolvedores e desenvolvedoras tivessem que aprender os pormenores dos componentes de um computador moderno para conseguir começar a programar? Parece um trabalho sem fim, não é?

Fonte: tenor.com

Qual a função do sistema operacional?

O autor do livro sistemas operacionais modernos, Tanenbaum, levanta essa questão e justifica que o sistema operacional surgiu para intermediar o diálogo entre máquina e pessoa programadora (ou mesmo usuário/a mais avançado).

Assim, a gente não precisa se preocupar em administrar todos os recursos na mão, ou então, por exemplo, ter que deslocar um espaço na memória específico para determinada variável?

Ademais, certamente a quantidade de programadores e softwares disponíveis na atualidade não seria a mesma se houvesse a necessidade também de gerenciar formas de otimização dos recursos.

Muitas vezes o sistema operacional é considerado um software base, porque fornece suporte às aplicações. Ele funciona como uma interface entre a aplicação e as rotinas de E/S com o hardware, ou seja, é preciso ter um sistema que faça essa conversa, e é nesse campo que o sistema operacional atua. Essa peça mais elementar de software opera em dois modos: o modo núcleo (modo supervisor) e o modo usuário.

No modo supervisor o acesso é completo a todo o hardware, e é possível enviar qualquer instrução que a máquina seja capaz de executar. O modo usuário é mais restrito para instruções que interferem no controle da máquina, mas é onde todo o resto do software opera.

Na imagem abaixo, conseguimos visualizar de forma simplificada as responsabilidades dos modos usuário e núcleo, assim como o local de atuação dos programas de interface com o usuário (GUI ou shell):

Fonte: Sistemas Operacionais Modernos. Tanenbaum, p.1.

Embora a divisão de responsabilidades pareça muito clara, em diversas ocasiões, a distinção entre o campo de atuação do sistema operacional e o modo usuário (software usual) se torna complexa. Um exemplo dessa afirmação é um programa que funciona em modo usuário, mas executa tarefas privilegiadas, como permitir ao usuário a troca de senha.

Em outras palavras, definir exatamente um sistema operacional não é tão simples assim, mas conseguimos diferenciá-los de programas de usuário por meio de suas particularidades.

Em resumo, as principais funções do sistema operacional são: 1) funcionar como uma ponte entre aplicações na camada do usuário e hardware; 2) e gerenciar os recursos de um sistema complexo (por exemplo, quando você executa vários programas ao mesmo tempo, na realidade é o seu sistema operacional que troca, em frações de segundos, o programa processado pela unidade central de processamento).

Além disso, são programas robustos, complexos e possuem longa vida. Apesar de serem muito difíceis de escrever, você acredita que o Linux tem cerca de cinco milhões de linhas? E isso é só a parte que opera no modo núcleo!

Fonte: i.gifer.com

Sistema operacional, o herói mascarado

Já discutimos que lidar com a arquitetura de hardware é algo muito trabalhoso, a linguagem de máquina é complexa e, por essa razão, todos os sistemas operacionais fornecem ao usuário um nível de abstração.

Para criar um arquivo, uma foto ou música no seu computador, você não precisa conhecer os pormenores de hardware, mas usa a abstração fornecida para realizar essa tarefa. Dessa maneira, o hardware fica "escondido" nesse processo.

Os sistemas operacionais também fornecem uma série de benefícios, como maior portabilidade das aplicações (possibilidade de uso de uma mesma aplicação em diferentes computadores), e proporcionam o espaço para que as aplicações se dediquem a problemas de alto nível, ou seja, aos problemas que foram designadas para solucionar.

Além disso, só é possível executar múltiplos programas simultaneamente graças ao gerenciamento de recursos do sistema operacional.

O gerenciamento de recursos apresenta a multiplexação, que é o compartilhamento de recursos no tempo e no espaço. Em outras palavras, quando diferentes programas ou mesmo usuários realizam o revezamento no uso de um recurso, esse recurso é multiplexado no tempo.

Um exemplo bem comum de multiplexação no tempo é quando temos várias saídas de impressão em fila e apenas uma impressora, o que ocorre é que haverá uma decisão sobre qual documento será impresso primeiro.

Fonte: br.pinterest.com

Os sistemas operacionais hoje, na 5ª geração de computadores, não se limitam aos desktops, mainframes ou notebooks. Observamos a presença em diferentes dispositivos, como IoT, celulares, até carros autônomos e muitos outros.

Diversas arquiteturas de sistemas operacionais foram criadas para atender a essas demandas especializadas. Vamos conhecer alguns?

Tipos e estruturas de Sistemas operacionais

Assim como existem dispositivos diferentes, também há tipos de sistemas operacionais específicos, com estruturas que se encaixam melhor em determinados computadores. Essas distintas formas de processamento do sistema operacional, estão divididas em monoprogramada e **multiprogramada.
Formas de processamento:
É através das chamadas de sistemas (System Calls) que executamos ou interrompemos os processos. Um exemplo é a chamada mkdir no terminal, que cria um novo diretório.

Agora que compreendemos de forma sucinta como ocorre a atuação dos sistemas operacionais, é interessante observarmos também algumas estruturas que já foram implementadas na prática, são elas: sistema monolítico, sistemas de camadas, micronúcleos, modelo cliente-servidor, máquinas virtuais e exonúcleos.

Dentre os sistemas citados, podemos destacar alguns que usualmente aparecem em nossa rotina:

Os sistemas operacionais são um universo!

Conclusão

Se conhecer circuitos, dispositivos de entrada e saída, monitor, memória, processador, e demais elementos em detalhes fosse requisito para escrever as linhas de código, sem dúvida nenhuma quase nenhum programa seria feito, como esclarece Tanenbaum.

Os sistemas operacionais então, surgem como programas fundamentais para operar diferentes computadores e garantir maior eficiência e experiência para o usuário e usuária.

Neste apanhado geral, conseguimos vislumbrar o que é sistema operacional e o quanto ele é fascinante. Além disso, também foi possível compreender para que serve o sistema operacional e quais os tipos existentes.

Sabemos agora, que a escolha do sistema operacional também está relacionada à sua necessidade e função do seu computador, ou seja: 1) instale diferentes sistemas operacionais (uma máquina virtual já é um excelente começo!); 2) avalie suas funcionalidades e, por fim; 3) estude seus pormenores, pois os sistemas operacionais são realmente impressionantes. E lembre-se, a inteligência e utilidade no uso da tecnologia quem realiza é você!

E você, o que acha? Quais sistemas operacionais já usou?

Compartilhe sua opinião em suas redes sociais e marque a gente!
E então, vamos aprender mais?

# data[].attributes.attachment_link.title
Sistemas operacionais: conceito e estrutura | Alura

# data[].attributes.attachment_link.description
Sistema Operacional: conheça os principais conceitos e tenha uma visão geral sobre os sistemas operacionais.

# data[].attributes.body
Meus Projetos no GitHub

# data[].attributes.attachment_link.description
Herbert-Galindo has 7 repositories available. Follow their code on GitHub.

# data[].attributes.body
Lógica de programação é a organização coesa de uma sequência de instruções voltadas à resolução de um problema, ou à criação de um software ou aplicação. Cada linguagem tem suas próprias particularidades, como sua sintaxe, seus tipos de dados e sua orientação, mas a lógica por trás de todas é a mesma.

# data[].attributes.body
Converta Moeda do Real para Euro ou Dólar.