Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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.
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);
Resumidamente:
Um processo em execução passa por uma sequência de estados ordenados no tempo e possui duas importantes
propriedades:
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.
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.
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.
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.
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;
• 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.
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;
• 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 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;
• Balancear o uso de recursos: o escalonador deve manter todos os recursos ocupados, ou seja, processos que
usam recursos subutilizados devem ser favorecidos;
É 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.