Você está na página 1de 7

Sistemas Operacionais

O software é o “elo” entre os artefatos eletrônicos, conhecidos como Hardware, e o seu usuário; essa ligação se faz
necessária para equacionar a discrepância entre o tipo de informação manipulada pelo homem e pela máquina.

Os programas computacionais podem ser divididos em dois grupos:

 O software de sistema, que manipula a operação do computador;


 Os aplicativos, que resolvem problemas para o usuário.

Entre os softwares de sistema, o mais importante é o sistema operacional, que controla todos os recursos da máquina
e proporciona a base de sustentação para a execução dos aplicativos.

A arquitetura dos computadores, no nível da linguagem de máquina, é primitiva e de difícil entendimento,


especificamente para operações de entrada e saída; para um programador, é preferível trabalhar com abstrações de
mais alto nível onde detalhes de implementação das abstrações não são visíveis. O programa que faz o papel de
“mascarar” esses detalhes é o Sistema Operacional.

O Sistema Operacional como um Gerenciador de Recursos


Um computador moderno é composto de vários subsistemas tais como processadores, memórias, discos, terminais,
interfaces de rede e outros dispositivos de E/S; neste contexto, o Sistema Operacional tem a função de gerenciar de
forma adequada estes recursos de forma que as tarefas impostas pelos usuários sejam atendidas da forma mais
confiável possível; um exemplo típico é o compartilhamento da unidade central de processamento (CPU) entre as
várias tarefas que estão em execução; o Sistema Operacional é o responsável pela distribuição de forma otimizada da
CPU entre as tarefas em execução.

Revisão SOA 1.4 - Prof. Msc. Mario S. Quinello


Conceitos Básicos em Sistemas Operacionais
Processos

Um conceito fundamental em Sistemas Operacionais é o de processo ou tarefa; um processo é basicamente um


programa em execução, sendo uma entidade ativa que compete por recursos e interage com outros processos; em
um instante qualquer, um processo está em um determinado estado. Estes estados podem ser:

 Novo: O processo está sendo criado;

 Em execução: Instruções do código do processo estão sendo executadas;

 Em espera: O processo está esperando pela ocorrência de algum evento (tal como a realização de uma
operação de E/S ou o recebimento de um sinal);

 Pronto: O processo está pronto para obter o controle do processador;

 Terminado: O processo terminou de ser executado.

Resumidamente:

 Em execução (usando a CPU para executar as instruções do programa);


 Em espera (aguardando recursos, que não CPU, indisponíveis no momento);
 Pronto (aguardando apenas CPU para executar).

Um processo em execução passa por uma sequência de estados ordenados no tempo e possui duas importantes
propriedades:

 O resultado da execução de um processo independe da velocidade com que é executado;


 Se um processo for executado novamente com os mesmos dados, ele passará precisamente pela mesma
sequência de instruções e fornecerá o mesmo resultado.

Revisão SOA 1.4 - Prof. Msc. Mario S. Quinello


Sistemas Multitarefas e Multiusuários

Como já mencionado, um programa em execução é chamado de processo ou tarefa; um Sistema Operacional


multitarefa se distingue pela sua habilidade de suportar a execução concorrente de processos sobre um processador
único, sem necessariamente prover elaborada forma de gerenciamento de recursos (CPU, memória, etc); embora
frequentemente associada com multiprogramação, multitarefa não implica necessariamente em uma operação
multiusuário; a operação multiprocessos sem suporte a multiusuários pode ser encontrado em Sistemas Operacionais
específicos e/ou em Sistemas de Tempo Real.

Por sua vez, Sistemas Operacionais Multiusuários permitem acessos simultâneos ao computador através de dois ou
mais terminais de entrada.

Multiprogramação

Multiprogramação é um conceito mais geral que multitarefa e denota um Sistema Operacional que provê
gerenciamento da totalidade de recursos tais como CPU, memória, sistema de arquivos, em adição ao suporte da
execução concorrente dos processos; em uma máquina podemos ter o conjunto de processos sendo executados de
forma serial ou de forma concorrente, ou seja, os recursos presentes na máquina podem ser alocados a um único
programa até a conclusão de sua execução ou esses recursos podem ser alocados de modo dinâmico entre um número
de programas ativos de acordo com o nível de prioridade ou o estágio de execução de cada um dos programas.

No caso de um computador no qual o Sistema Operacional utilizado permite apenas a monoprogramação, os


programas serão executados instrução-a-instrução, até que seu processamento seja concluído; durante a sua
execução, o programa passará por diversas fases, alterando momentos em que se encontra executando ou bloqueado
aguardando, por exemplo, a conclusão de uma operação de entrada/saída de dados (normalmente lenta, se
comparada à velocidade de execução das instruções por parte do processador).

Através do uso da multiprogramação é possível reduzir os períodos de inatividade da CPU e consequentemente


aumentar a eficiência do uso do sistema como um todo; o termo multiprogramação denota um Sistema Operacional
o qual em adição ao suporte de múltiplos processos concorrentes, permite que instruções e dados de dois ou mais
processos disjuntos estejam residentes na memória principal simultaneamente; o nível de multiprogramação
presente em um sistema pode ser classificado como integral ou serial; a multiprogramação é denominada integral
caso mais de um processo possa se encontrar em execução em um dado instante, enquanto que no caso da serial
apenas um processo se encontra em execução a cada instante, sendo a CPU alocada aos processos de forma
intercalada ao longo do tempo; uma vez que a maioria dos computadores apresenta apenas uma única CPU, a
multiprogramação serial é encontrada com mais frequência.

Revisão SOA 1.4 - Prof. Msc. Mario S. Quinello


Multiprocessamento

Embora inicialmente a maioria dos computadores dispunha de uma única CPU para executar suas instruções, uma a
uma, projetos mais avançados incrementaram a velocidade efetiva de computação permitindo que várias instruções
sejam executadas ao mesmo tempo; um computador com múltiplos processadores que compartilhem uma memória
principal comum é chamado um multiprocessador; o sistema que suporta tal configuração é um sistema que suporta
o multiprocessamento.

Interpretador de Comandos (Shell)

O interpretador de comando é um processo estabelece a interface do usuário com o Sistema Operacional; este
processo acata os comandos enviados pelo teclado, interpreta-os e passa seus parâmetros ao S. O.; serviços como
login/logout, manipulação de arquivos, execução de programas, etc, podem ser solicitados através do interpretador
de comandos.

Chamadas de Sistema (System Calls)

Assim como o interpretador de comandos é a interface usuário/Sistema Operacional, as Chamadas do Sistema (ou
System Calls) constituem a interface dos programas aplicativos com o Sistema Operacional; as Chamadas do Sistema
são funções que podem ser ligadas pelos aplicativos, provendo serviços como: leitura do relógio interno, operações
de entrada/saída, comunicação inter-processos, etc.

Threads

Da mesma forma que os processos sofrem escalonamento, as threads também tem a mesma necessidade; o
escalonamento de threads é variável dependendo do tipo utilizado, sendo que existem as Kernel-Level Thread e
User-Level Thread.

Da mesma forma que quando vários processos são executados em apenas uma CPU eles sofrem escalonamento e
parecem que todos são executados ao mesmo tempo, quando um processo tem threads elas esperam a sua vez para
ser executadas, como esta alternância é muito rápida há impressão de que todos os processos e as thread destes
processos são executadas paralelamente.

Geralmente quando iniciamos um processo com múltiplas threads existe uma principal que é responsável por
gerenciar novas threads a partir dela; quando uma destas finaliza seu trabalho, entra no estado thread_yield, liberando
a CPU para outra thread ou processo.

Revisão SOA 1.4 - Prof. Msc. Mario S. Quinello


Deadlocks

O Deadlock, no contexto dos Sistemas Operacionais, caracteriza uma situação em que ocorre um impasse e dois ou
mais processos ficam impedidos de continuar suas execuções; trata-se de um problema bastante estudado no
contexto dos Sistemas Operacionais, assim como em outras disciplinas, como banco de dados, pois é inerente à própria
natureza destas soluções.

O Deadlock ocorre com um conjunto de processos e recursos não-preemptíveis, onde um ou mais processos desse
conjunto está aguardando a liberação de um recurso por outro processo que, por sua vez, aguarda a liberação de
outro recurso alocado ou dependente do primeiro processo.

A definição textual de Deadlock normalmente, por ser muito abstrata, é mais difícil de compreender, no entanto,
algumas observações são pertinentes:

• O Deadlock pode ocorrer mesmo que haja somente um processo no S.O., considerando que este processo
utilize múltiplas threads que requisitem os recursos alocados a outros threads no mesmo processo;

• O Deadlock independe da quantidade de recursos disponíveis no sistema;

• Normalmente o Deadlock ocorre com recursos como dispositivos, arquivos, memória etc; apesar da CPU
também ser um recurso para o Sistema Operacional, em geral é um recurso facilmente preemptível, pois
existem os escalonadores para compartilhar o processador entre os diversos processos, quando trata-se de
um ambiente multitarefa.

Escalonamento de CPU

A entidade responsável pelo escalonamento é o Escalonador, responsável por determinar qual processo deve sair ou
ir para a CPU em determinado momento; é ele o elemento responsável pela alocação de processos a processadores,
definindo a sua ordem de execução; a Política de Escalonamento é um problema complexo e depende do tipo de
sistema suportado e da natureza das aplicações.

Em sistemas do tipo lote [batch], o escalonamento era feito simplesmente selecionando o próximo processo na fila de
espera; já em sistemas multiusuário de tempo compartilhado geralmente combinados a sistemas em lote, o algoritmo
de escalonamento deve ser mais complexo em virtude da existência de diversos usuários interativos solicitando
serviços, e da execução de tarefas em segundo plano [background].

Um escalonador poderia funcionar da seguinte forma: quando a CPU torna-se disponível, o primeiro elemento da fila
de processos prontos é retirado e inicia a sua execução; caso seja bloqueado, este irá para o final da fila de processos
bloqueados; se a sua quota de tempo para execução se esgotar, este também será retirado da CPU e colocado no final
da lista de processos prontos.

Num sistema multitarefa, normalmente vários programas são executados concorrentemente e o número de processos
é maior que o de CPUs; um dos problemas mais difíceis na administração de recursos está relacionado ao fato de
muitos processos existirem simultaneamente, ocorrendo em alguns casos uma disputa entre processos pelo uso do
mesmo recurso.

Revisão SOA 1.4 - Prof. Msc. Mario S. Quinello


O Escalonamento de Processos é uma atividade organizacional feita pelo escalonador, que possibilita executar
processos concorrentemente; para que a CPU não fique muito tempo sem executar tarefa alguma, existem técnicas
para escalonar processos que não estão em execução.

Os responsáveis por essa tarefa são os Algoritmos de Escalonamento; existem vários algoritmos de escalonamento e,
para melhor escalonar os processos, o Sistema Operacional pode usar apenas um ou combinações de vários deles.

O Escalonamento de Processos é uma tarefa complicada, pois nenhum algoritmo é totalmente eficiente e a prova de
falhas; a complexidade aumenta em se tratando de sistemas interativos, pois o usuário espera respostas rápidas e a
todo o momento processos são tanto criados quanto interrompidos pelos usuários.

Tanenbaum propõem a seguinte definição: quando mais de um processo está em execução, o Sistema Operacional
deve decidir qual será executado primeiro.

Num sistema onde existe um único processador, o escalonamento representa a ordem em que os processos são
executados; já no caso de haver mais de um processador na máquina, o escalonamento de processadores é a forma
como os processadores existentes num sistema computacional são utilizados para efetuar o processamento, isto é,
como os processos são distribuídos para execução nos processadores. O escalonador utiliza alguns critérios de
escalonamento, como:

• Taxa de utilização de CPU: é a fração de tempo durante a qual ela está sendo ocupada;

• Throughput (vazão): são números de processos terminados por unidade de tempo;

• Turnaround (retorno): é o tempo transcorrido desde o momento em que o processo inicia e o instante em
que termina a sua execução;

• Tempo de resposta: intervalo entre a chegada ao sistema e início de sua execução;

• Tempo de espera: soma dos períodos em que o programa estava no seu estado pronto.

A forma com que se dá o escalonamento é, em grande parte, responsável pela produtividade e eficiência atingidas por
um sistema computacional; mais do que um simples mecanismo, o escalonamento deve representar uma política de
tratamento dos processos que permita obter os melhores resultados possíveis; o projeto de um escalonador leva em
consideração uma série de necessidades, envolve uma política de escalonamento e contempla os seguintes objetivos:

• Ser justo: todos os processos devem ser tratados igualmente, tendo possibilidades idênticas de uso do
processador, devendo ser evitado o adiamento indefinido (starvation ou inanição);

• Maximizar a produtividade [throughput]: procurar maximizar o número de tarefas processadas por unidade
de tempo;

• Ser previsível: uma tarefa deve ser sempre executada com aproximadamente o mesmo tempo e custo
computacional;

• Minimizar o tempo de resposta para usuários interativos;

• Maximizar o número possível de usuários interativos;

• Minimizar a sobrecarga [overhead]: recursos computacionais não devem ser desperdiçados;

Revisão SOA 1.4 - Prof. Msc. Mario S. Quinello


• Favorecer processos bem comportados: processos com comportamento adequado podem receber um
serviço melhor;

• Balancear o uso de recursos: o escalonador deve manter todos os recursos ocupados, ou seja, processos que
usam recursos subutilizados devem ser favorecidos;

• Exibir degradação previsível e progressiva em situações de intensa carga de trabalho.

É notório que alguns destes objetivos são contraditórios; a quantidade de tempo disponível para processamento
(tempo do processador) e também os recursos computacionais são finitos, então só tem como favorecer um processo
à custa do prejuízo de outro.

O maior problema no projeto de algoritmos de escalonamento está relacionado à natureza imprevisível dos processos,
pois não tem como prever se um processo utilizará intensamente o processador, se precisará alocar uma grande
quantidade de memória ou se necessitará efetuar um número muito grande de acessos a dispositivos de I/O.

Um processo pode migrar entre as várias filas de escalonamento durante o seu tempo de vida; é tarefa do gerenciador
de processos selecionar os processos nessas filas para usar os recursos computacionais. A parte do gerenciamento de
processos que é responsável por essa seleção é o escalonador de processos, que seleciona com base em algum método
ou algoritmo.

Preempção é a interrupção forçada (arbitrária) de um processo para que outro processo possa usar o processador, e
é usada em sistemas multiprogramados para garantir que todos os processos possam receber a CPU e progredir
uniformemente. A preempção é implementada através de um relógio de tempo (clock) que interrompe o processador
em intervalos de tempo regulares, para que o escalonador possa fazer uma realocação de prioridades e,
possivelmente, escalonar outro processo. Este intervalo é a unidade básica de alocação de tempo do processador, e é
denominado quantum.

 Escalonamento Não-Preemptivo : nenhum evento externo pode ocasionar a perda do uso processador;
 Escalonamento Preemptivo : o sistema operacional pode interromper um processo e passá-lo para o estado
de pronto, a fim de alocar outro processo na CPU.

Vantagem da Preempção:

 Priorizar a execução de processos como no caso de aplicações de tempo real onde o fator de tempo é crítico;
 Implementar políticas de escalonamento que compartilhem o processador de maneira mais uniforme.

Despachante

O despachante [dispatcher] é o módulo que fornece o controle da CPU ao processo selecionado pelo escalonador da
CPU. Essa função envolve:

 Troca de contexto;
 Mudança para o modo usuário;
 Desvio para o endereço adequado no programa do usuário, para reiniciar o programa

Latência de Despacho: tempo gasto pelo despachante para interromper a execução de um processo e iniciar a
execução de outro.

Revisão SOA 1.4 - Prof. Msc. Mario S. Quinello

Você também pode gostar