# Introdução aos Sistemas Operacionais/Estruturas dos Sistemas Operacionais

Um sistema operacional fornecia o ambiente no qual os programas (softwares) são executados. Os SOs variam internamente entre si devido às diversas necessidades e restrições de softwares e hardwares.

## Estruturas de Sistemas Operacionais
### Sistemas monolíticos

conhecida como estrutura simples ou composta, esta é a estrutura dos primeiros SO’s e Hardware. Consistida, basicamente, por um programa dividido em sub-rotinas e retinadas, na estrutura monolítica é permitido a qualquer uma dessas sub-rotinas em qualquer parte do programa chamar outra(s) sub-rotina(s). A construção do programa final é dada com base nos módulos compilados separadamente, unidos através de um linker. A boa definição de parâmetros de ligação entre as diferentes rotinas existentes aumenta e muito o desempenho, porém o sistema pode parar devido a algum erro ocasionado por uma dessas rotinas. A exemplo temos o próprio UNIX, o MS DOS, o FreeBSD, dentre outros.

### Sistemas em camadas

À medida que os sistemas operacionais tornaram-se mais complexos e maiores, projetos puramente monolíticos tornaram-se inviáveis e, então a arquitetura em camada, ou modular, tornou-se uma boa opção, agrupando "camadas" de componentes, ou seja, conjunto de procedimentos, que realizam tarefas similares.
Cada camada comunica-se somente com as suas camadas imediatamente inferior e superior. Uma camada inferior sempre presta um serviço à sua camada superior, sendo que a camada superior não sabe como o serviço é feito, apenas o solicita. A implementação de uma camada pode ser modificada sem exigir modificação em outra camada, pois possuem componentes autocontidos.
Em uma abordagem em camadas, a solicitação de um serviço pode precisar passar por muitas camadas antes de ser atendida, assim o desempenho se degrada em comparação ao de núcleos monolíticos.
A exemplo temos o Windows NT, o THE e o MULTICS.

### Máquina Virtual

Uma máquina virtual é uma cópia via software que busca simular uma máquina real. Uma máquina virtual (Virtual Machine – VM) pode ser definida como “uma duplicata eficiente e isolada de uma máquina real”. A IBM define uma máquina virtual como uma cópia isolada de um sistema físico, e esta cópia está totalmente protegida, a JC ( Primeira empresa a criar máquinas virtuais atuais ) events de Computação ja promoveu eventos em relação as máquinas virtuais.
Ao invés de ser uma máquina real, isto é, um computador real, feito de hardware e executando um sistema operacional específico, uma máquina virtual é um computador fictício criado por um programa de simulação. Sua memória, processador e outros recursos são virtualizados. A virtualização é a interposição do software (máquina virtual) em várias camadas do sistema. É uma forma de dividir os recursos de um computador em múltiplos ambientes de execução.

### Sistemas Cliente-Servidor

A comunicação entre os módulos do kernel do SO é feita através de solicitações de serviços através de mensagens de processos clientes a processos servidores (memória, arquivo, terminal...).
A divisão do sistema operacional em várias partes facilita o desenvolvimento e evolução de um sistema operacional, além de permitir que uma falha em um servidor – por exemplo, o de arquivos – não afete toda a máquina.
Este modelo oferece fácil adaptabilidade a sistemas distribuídos.

## Utilização dos Recursos de Sistemas
### Monoprogramação ou Monotarefa

Em computação, chama-se monotarefa ou monoprogramado um sistema operacional que permite a realização de apenas uma tarefa (job) de cada vez. O processador, memória e periféricos ficam dedicados a um processo, e cada tarefa para ser executada, deve aguardar o encerramento da tarefa atual. Enquanto há algum tipo de acesso à disco ou E/S, a CPU fica ociosa sem realizar qualquer tipo de processamento. A memória pode também acabar sendo sub-utilizada. Apesar da fácil implementação, sistemas monoprogramados apresentam demasiadas desvantagens.

### Multiprogramação ou Multitarefa

Multiprogramação ou Multitarefa é o nome dado à característica de alguns sistemas operacionais de rodar diversas aplicações de forma que parecem serem executadas simultaneamente. Na realidade, na execução multitarefa, o tempo do processador é dividido entre as aplicações em execução, e a execução das tarefas passa rapidamente de uma para a outra, criando a ilusão de que as aplicações ocorrem de forma conjunta.

## Tipos de Sistemas Operacionais
### Sistemas Batch

Os sistemas batch ou sistemas em lote foram os primeiros sistemas multiprogramáveis a serem implementados (primeira fase da computação), caracterizando-se por programas armazenados em disco ou fita, que uma vez iniciados, exigem pouca ou nenhuma interação do usuário, processando de forma sequencial e contínua até o fim do serviço (job), quando então é devolvido o resultado final do processamento. O tempo de execução da tarefa é conhecido como turnaround.

### Sistemas multiprogramados

Nos sistemas monoprogramados o que temos é a existência de um único processo sendo executado de cada vez na memória. Com a multiprogramação existem vários processos na memória aptos à executar e um em execução. Sem dúvida, o conceito de multiprogramação é um dos mais importantes nos sistemas operacionais modernos. Se existirem vários programas carregados na memória ao mesmo tempo, a CPU pode ser compartilhada entre eles, aumentando a eficiência da máquina e produzindo mais resultados em menos tempo. A idéia por detrás da multiprogramação é bastante simples. Quando um programa libera a CPU, seja para realizar alguma operação de E/S ou por outro motivo, ela fica parada. Enquanto espera que o programa volte para executar, a CPU não realiza nenhum trabalho útil. Para acabar com a ociosidade deste tempo vários programas são mantidos ao mesmo tempo na memória e o sistema operacional se encarrega de escolher um deles para executar. Assim, sempre que um programa é interrompido, um outro é escolhido para ser executado em seu lugar. Com isso, a CPU estará durante grande parte do tempo ocupada processando instruções de programas. Os benefícios da multiprogramação são vários: aumento da utilização da CPU e da taxa de saída do sistema computacional, isto é, da quantidade de trabalho realizada dentro de um intervalo de tempo (throughput).

### Sistemas de Tempo Compartilhado (PSP)

São sistemas que compartilham o tempo de uso da CPU entre diversos programas. Também conhecido como time-sharing, consegue executar diversas tarefas simultaneamente, pois existe a divisão do tempo do processador em pequenos intervalos, denominados fatia de tempo. Caso a tarefa não termine durante a fatia a ela determinada, há uma interrupção e ela volta para a fila de escalonamento, aguardando novamente sua vez.
Diferente do sistema batch, esse tipo de sistema operacional permite a interação do usuário. Dessa maneira, os terminais possuem teclado, vídeo e mouse.

### Sistemas de Tempo Real

São sistemas no qual o tempo tem uma função essencial. Em geral, um ou mais dispositivos físicos externos ou computador geram estímulos, e o computador deve reagir apropriadamente a eles dentro de um dado intervalo de tempo.

### Sistemas multiprocessados

Sistemas multiprocessados são sistemas construídos sobre máquinas computacionais que possuem mais de um processador para propósitos gerais. Entre suas vantagens estão:
* Maior produção (throughput)
* Reconfiguração
* Balanceamento
* Simetria
* Se torna um Sistema Multiprogramado

## Acoplamento-Sistemas multiprocessáveis

Modo de comunicação entre os processadores e o grau de compartilhamento de memória e dos dispositivos de entrada/saída.

## Chamadas ao Sistema

Instruções que um programa utiliza para acessar/ conversar com o Sistema Operacional. O aplicativo "chama" o S.O., requisitando algo.