O que é um sistema operacional?
Tags: sistemasoperacionais, unix, windows, portugues
Published: 2020-08-26 16:26:20

---
title: O que é um sistema operacional?
published: true
description: Estudando sistemas operacionais com os mestres Francis Machado e Luiz Maia, e uma pitada de Tanenbaum
tags: sistemasoperacionais, unix, windows, portugues
cover_image: https://images.unsplash.com/photo-1560762484-813fc97650a0?ixlib=rb-1.2.1&auto=format&fit=crop&w=667&q=80
---
Hoje falaremos um pouco sobre __sistemas operacionais__, estudando através do livro [*Arquitetura de Sistemas Operacionais*](https://www.amazon.com.br/Arquitetura-Sistemas-Operacionais-Incluindo-Exerc%C3%ADcios/dp/8521622104/ref=sr_1_1?__mk_pt_BR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=26LNZNTMJOAPS&dchild=1&keywords=arquitetura+de+sistemas+operacionais&qid=1595692548&sprefix=arquitetura+de+sistemas+%2Caps%2C346&sr=8-1), dos mestres Francis Berenger Machado e Luiz Paulo Maia. 

Recomendo muito a leitura do livro, sério. Os autores trazem inclusive um breve apanhado sobre arquitetura de computadores, que serve muito bem para refrescar a memória.

Abordarei aqui:

1. O que é um sistema operacional?
2. Quais são as funções de um sistema operacional?
3. Quais os tipos de sistemas operacionais?

Como já sabemos, um computador é uma __*máquina de camadas*__, ou seja, possui diferentes níveis, do hardware até abstrações mais avançadas. Podemos entender que o sistema operacional está acima da camada 0, que seria o hardware. 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/xi9251expi5x0429lehh.png)

O fato do sistema operacional ser mais abstrato que o hardware nos permite utilizar o computador como se o mesmo nem existisse, sem se preocupar em interagir com os componentes físicos. 

## O que é um sistema operacional?
Podemos entender como sistema operacional um:

> (...) conjunto de rotinas executadas pelo processador (...)

… Assim como um software, um programa comum que nós usuários utilizamos. 

O objetivo do sistema operacional é ser uma __interface entre o usuário e o computador__, o que torna nossa vida mais simples, pois não precisamos conhecer a fundo detalhes sobre hardware e implementar tudo do zero para resolver nossos problemas.

Essas rotinas são executadas simultaneamente (concorrentemente) com base em eventos, que podem ocorrer a qualquer momento. 

## Quais são as funções de um sistema operacional?
A função principal de um sistema operacional é:

> (...) controlar o funcionamento de um computador, gerenciando a utilização e o compartilhamento dos seus diversos recursos, como processadores, memórias e dispositivos de entrada e saída.

Em outras palavras, a função do sistema é __controlar o hardware e gerenciar o uso de seus recursos__.

## Quais os tipos de sistemas operacionais?
Existem alguns tipos de sistemas operacionais e iremos abordar aqui os __sistemas monotarefa__, __sistemas multitarefa__ e os __sistemas com múltiplos processadores__. 

### Sistemas monoprogramáveis/monotarefa
Em computadores mais antigos os sistemas operacionais funcionavam de forma __bloqueante__, digamos assim. Eram voltados a uma __única tarefa__, como numa única thread de execução. Só era possível fazer qualquer outra coisa com o sistema após o término da tarefa.

Temos que os sistemas monoprogramáveis:

> (...) se caracterizam por permitir que o processador, a memória e os periféricos permaneçam exclusivamente dedicados à execução de um único programa.

Por um lado a implementação desse tipo de sistema operacional é mais simples, mas por outro seu uso é limitado.

### Sistemas multiprogramáveis/multitarefa
Nesse tipo de sistema temos que:

> (...) os recursos computacionais são __compartilhados entre os diversos usuários e aplicações__. 

Aqui vemos o sistema operacional gerenciando o acesso para diversas aplicações e usuários, simultaneamente. 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/w30ff2nula47ebkrd1v3.jpg)

A depender do número de usuários podemos classificar o sistema multiprogramável como:

* *Monousuário*: aqui temos uma única pessoa interagindo com o sistema
* *Multiusuário*: nesse tipo temos dois ou mais usuários interagindo com o sistema simultaneamente

Podemos classificar os sistemas multitarefa a depender da forma como gerenciam as aplicações: 

* Sistemas *batch*
* Sistemas de *tempo compartilhado*
* Sistemas de *tempo real*

Vamos entender cada um deles. 

#### Sistemas batch
Esse sistema foi bastante implementado na década de 60, na época dos cartões perfurados. Aqui __não é necessário que os usuários interajam com a aplicação durante o processamento de uma tarefa__. 

As entradas e saídas desse tipo de sistema operacional são fornecidas por uma memória secundária. Hoje em dias computadores modernos simulam o processamento batch.

#### Sistemas de tempo compartilhado (*time-sharing*)
Nesse tipo de sistema operacional temos que:

> (...) permitem que diversos programas sejam __executados a partir da divisão do tempo do processador em pequenos intervalos__, denominados *fatia de tempo* (*time slice*) (...)

Aqui o sistema possui uma linguagem específica de controle para que o usuário possa dar comandos no sistema operacional. Como você deve ter pensado, esse tipo de sistema é bastante comum atualmente.

Um sistema de tempo compartilhado permite que, se a fatia de tempo não for suficiente, o processamento da tarefa pode ser pausado e depois retomado.

#### Sistemas de tempo real (*real time*)
Este tipo de sistema é muito semelhante ao de tempo compartilhado, a diferença é que __em sistemas de tempo real o tempo de processamento da tarefa não pode variar, ele é rígido e precisa ser obedecido para funcionar corretamente__.   

Ou seja, não há a ideia de fatia de tempo, o programa utilizará o processador pelo tempo que for necessário ou até que apareça outro programa mais importante. Um exemplo aqui são sistemas operacionais com aplicações de monitoramento de usinas de petróleo.

### Sistemas com múltiplos processadores
Sobre esse tipo de sistema temos que:

> (...) caracterizam-se por possuir __duas ou mais CPUs interligadas e trabalhando em conjunto__.

Temos três características importantes sobre esse tipo de sistema operacional:

* *Escalabilidade*: tem a capacidade de aumentar o poder computacional adicionando mais processadores
* *Disponibilidade*: consegue manter-se em operação em situação de falha
* *Balanceamento de carga*: pode distribuir o processamento entre os processadores considerando a “carga de trabalho” de cada um

Como exemplo, podemos pensar aqui em sistemas dedicados a processamento científico. 

Os sistemas com múltiplos processadores podem ser divididos em __fortemente acoplados__ ou __fracamente acoplados__.

#### Sistemas fortemente acoplados (*tightly coupled*)
Aqui os processadores são __gerenciados por um sistema operacional__ e __compartilham a mesma memória e dispositivos de entrada e saída__.

Podemos pensar em sistemas comuns atualmente como Linux, MacOS e Windows. 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ltwog2k50u0wj9yp9sul.jpg)

Esse tópico me fez pensar no Dell G5 com Intel hexa core que está custando absurdos 9000 coronas.

#### Sistemas fracamente acoplados (*loosely coupled*)
São sistemas que possuem dois ou mais sistemas operacionais conectados se comunicando. 

Inicialmente, lá pena década de 80, as aplicações eram centralizadas em um sistema de grande porte. Conforme os computadores evoluíram, atualmente conseguimos ver computadores conectados em forma de rede (*redes de computadores*). Pensando em cada host da rede:

> (...) podemos dividir os sistemas fracamente acoplados em __sistemas operacionais de rede__ e __sistemas distribuídos__.

Em sistemas operacionais de rede os usuários conhecem os hosts e os serviços que estes oferecem, mas em um sistema distribuído o mesmo esconde detalhes dos hosts e de seus serviços para tratá-los como uma coisa única (como se fosse fortemente acoplado).

Um exemplo comum de sistema distribuído são os *clusters*, onde temos servidores interligados.

---
_Fontes:_
MACHADO, Francis Berenger; MAIA, Luiz Paulo. __Arquitetura de Sistemas Operacionais: Incluindo Exercícios com o Simulador SOSIM e Questões do ENADE__. Rio de Janeiro: LTC, 2013.

Imagem:
TANENBAUM, Andrew S; AUSTIN, Todd. __Organização estruturada de computadores__. Tradução Daniel Vieira; revisão técnica Wagner Luiz Zucchi. São Paulo: Pearson Prentice Hall, 2013.

Photo by [Alex Motoc](https://unsplash.com/@alexmotoc?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on [Unsplash](https://unsplash.com/s/photos/mainframe?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)

Photo by [Panos Sakalakis](https://unsplash.com/@meymigrou?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on [Unsplash](https://unsplash.com/?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)

---
_Esse texto não tem intenção de esgotar o tema. Acrescente nos comentários, e também aponte erros quando os identificar._