Buscar

Resumo sistemas operacionais

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 13 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 13 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 13 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Concorrência
	Introdução
O mecanismo de concorrência é o princípio básico para o projeto e a implementação dos sistemas multiprogramados. A possibilidade de o processador executar várias tarefas ao mesmo tempo permite que vários programas sejam executados concorrentemente pelo sistema operacional.
Sistemas mono programados versus multi programados
Os sistemas mono programados eram capazes de executar um único programa de cada vez e por isso nestes sistemas operacionais os recursos como processador, memória e dispositivos de entrada e saída, eram usados de forma pouco eficiente, limitando o desempenho destas arquiteturas. Isto porque muitos destes recursos permaneciam ociosos por longos períodos de tempo. 
Por exemplo, enquanto uma leitura em disco é realizada, o processador permanece ocioso. O tempo de espera é longo uma vez que uma operação de entrada e saída é mais lenta do que um calculo realizado pelo processador.
Um outro exemplo, é o desperdício de memória principal uma vez que somente um programa que não ocupe toda a memória, Neste caso existirão vários blocos de memória ociosos durante toda a execução do programa.
Em sistemas multi programados isso não ocorre pois vários programas podem ser executados pelo processador e compartilham a memória principal.
A Concorrência no uso da UCP
A utilização concorrente da UCP deve ser implementada de maneira que, quando um programa perde o uso do processador e depois retorna para continuar o processamento seu estado deve ser idêntico ao do momento em que foi interrompido. O programa deverá continuar sua execução exatamente na instrução seguinte àquela em que havia sido interrompido. Para o usuário este processo é transparente, ficando ao usuário a percepção de que o computador está totalmente dedicado ao usuário e a mais nenhum outro processo.
Pois é exatamente este mecanismo de concorrência que permite o compartilhamento de recursos pelos vários programas sendo executados pelo processador.
As vantagens dos sistemas multi programados
As vantagens de um sistema operacional multi programado fica evidente quando temos um cenário com 3 programas sendo executados em um computador com um disco, uma impressora e um terminal. 
Neste computador, caso os programas sejam executados em um sistema operacional mono programado ocorrerá que os programas serão executados de forma sequencial. Sendo que o programa 1 em 5 minutos, enquanto o programa 2 e o programa 3 aguardam. 
Quando o programa 1 termina sua execução o programa 2 é iniciado e leva 20 minutos sendo executado enquanto o programa 3 aguarda sua vez. Finalmente o programa 3 inicia sua execução apos aguardar 25 minutos e completa seu processamento em dez minutos, totalizando 35 minutos de processamento dos 3 programas. O tempo total de execução dos programas é grande devido ao sequenciamento da execução dos programas. Em um sistema multiprogramado o ganho de execução é grande pois os 3 programas são executados de forma concorrente, com o uso do processador, memória e discos sendo compartilhados pelos 3 programas.
Interrupções e Exceções
Durante a execução de um programa podem ocorrer alguns eventos inesperados, provocando um desvio forçado do fluxo de execução. Estes eventos inesperados são conhecidos por interrupção ou exceção e podem ser consequência de um sinal de um dispositivo de hardware ou da execução de instruções dentro do próprio programa.
Interrupção
A interrupção é o mecanismo que torna possível a implementação da concorrência nos computadores, sendo o fundamento básico dos sistemas multi programados. É em função desse mecanismo que o sistema operacional sincroniza a execução de todas as suas rotinas e dos programas dos usuários, além de controlar os dispositivos.
Uma interrupção é sempre gerada por algum evento externo ao programa, e, nesse caso, independe da instrução que está sendo executada. Um exemplo de interrupção ocorre quando um dispositivo de entrada e saída sinaliza ao processador que uma operação de entrada saída está completa. Neste caso, o processador deve interromper o programa que está sendo executado para tratar o termino da operação de entrada saída.
Identificando e tratando interrupções
Ao final da execução de cada instrução, a unidade de controle verifica a ocorrência de algum tipo de interrupção. Nesse caso, o programa em execução é interrompido e o controle desviado para uma rotina responsável por tratar o evento ocorrido, chamada rotina de tratamento de interrupção. Como existem vários tipos de interrupção, podem haver diferentes rotinas de tratamento de interrupção.
Para que o programa interrompido possa retomar sua execução exatamente do ponto onde foi interrompido, é necessário que, no momento da interrupção, sejam guardadas informações a respeito da execução do programa. Estas informações são basicamente o conteúdo dos registradores que deverão ter seus valores restaurados quando a execução do programa interrompido for reiniciada.
A figura abaixo mostra o esquema de interrupção:
O mecanismo de interrupção envolve, em seus passos, tanto o hardware quanto o software:
	 Via hardware    
	1.  Um sinal de interrupção é gerado para o processador;
2. Apos o termino da execução da instrução corrente, o processador identifica o pedido de interrupção;
3. O conteúdo dos registradores PC e seus status são salvos
4. O processador identifica qual rotina de tratamento de exceção deve ser executada
	 Via software    
	1.  A rotina de tratamento salva o conteúdo dos demais registradores do processador na pilha de controle do programa
2. A rotina de tratamento é executada
3. Após o término da execução da rotina de tratamento, os registradores e uso geral são restaurados, alem do registrador de status, retomando a execução do programa interrompido
Para cada tipo de interrupção existe uma rotina de tratamento associada, para a qual o fluxo de execução deve ser desviado. No momento em que a interrupção é gerada, o processador deve determinar para qual rotina de tratamento de interrupção deve ser desviado o fluxo.
Métodos para tratamento de interrupções
Existem dois métodos para o tratamento de interrupções:
O primeiro método chamado vetor de interrupções possui um vetor com o endereço inicial de cada rotina de tratamento de interrupção. 
O segundo método utiliza um registrador de status que identifica o tipo de interrupção gerada. Neste método existe uma única rotina de tratamento de interrupção que examina o registrador de status a fim de dar o tratamento adequado a interrupção gerada.
Interrupções geradas durante o tratamento de interrupções
As interrupções são geradas por eventos assíncronos, que são externos à instrução do programa corrente. Estes eventos não podem ser previstos e podem ocorrer inúmeras vezes, inclusive podendo ocorrer durante a execução de uma rotina de tratamento de interrupção.
Neste caso, alguns processadores simplesmente ignoram a ocorrência de interrupção quando uma rotina de tratamento de interrupção estiver sendo executada.
Outros processadores não permitem que as interrupções sejam desabilitadas fazendo com que exista sempre um tratamento para cada interrupção. Para isso o processador necessita saber qual a ordem de atendimento que deverá sequir para atender as interrupções. Para isso as interrupções precisam possuir prioridade, de acordo com a importância de cada interrupção.
As Exceções
As exceções são parecidas com as interrupções, a principal diferença é o motivo pelo qual o evento é gerado. A exceção é o resultado direto de uma instrução dentro do próprio programa, como a divisão por zero ou a ocorrência de um erro de estouro de memória em uma operação aritmética ( overflow ).
As exceções são portanto geradas por eventos síncronos dentro do próprio programa e portanto tais eventos são previsíveis e podem ser tratados pelo programador que pode incluir tratamento de exceção no programa para que o mesmo não seja interrompido. 
O tratamento de exceção é similar ao tratamento de interrupções. Para cada exceção geradadurante a execução de um programa a ação é interromper a execução do programa e invocar uma rotina para o tratamento da exceção. Existe uma rotina de tratamento de exceção, para a qual o fluxo de execução é desviado quando a exceção é lançada durante a execução do programa e o programa é interrompido.
Operações de entrada e saída
Nos primeiros sistemas computacionais, a comunicação entre o processador e os dispositivos de entrada saída era controlada por um conjunto de instruções especiais denominadas instruções de entrada saída que eram executadas pelo próprio processador. Estas instruções continham informações detalhadas de cada periférico com o qual o processador precisava se comunicar. Esta abordagem trazia uma forte dependência entre o processador e os dispositivos de entrada saída.
O surgimento do controlador, ou interface, permitiu ao processador agir de forma independente dos dispositivos de entrada e saída. O processador não se comunicava mais diretamente com os periféricos. Cabia agora ao controlador gerenciar a comunicação com os dispositivos de entrada saída. Desta forma as instruções de entrada saída ficaram mais simples pois agora não precisavam ter detalhes de cada periférico.
O controlador usava duas maneiras para gerenciar a comunicação entre o processador e os dispositivos de entrada saída:
· Entrada saída controlada por programa - Onde o sistema ficava testando permanentemente o estado do periférico para saber quando a operação de entrada saída chegava ao seu final. Este modo de gerencia mantinha o processador ocupado até que a operação de entrada saída chegasse ao final.
A evolução deste modelo foi permitir que apos o inicio da operação de entrada saída o processador ficasse livre para outras tarefas e em intervalos de tempo o sistema operacional deveria testar o estado do periférico para saber se a operação de entrada saída tinha terminado. Em sistemas com muitos periféricos, o processamento é interrompido toda hora para testar o estado dos diversos periféricos.
· Entrada saída controlada por interrupção - Com o mecanismo de interrupção ficou mais fácil pois agora o controlador interrompe o processador para sinalizar o termino de uma operação de entrada saída. Neste modo o processador fica livre para executar outras tarefas. Cabe ao controlador sinalizar, através de uma interrupção, ao processador que a operação de entrada saída foi concluída.  O tratamento da interrupção é feito conforme já explicado acima.
    O modo de entrada saída controlada por interrupção é muito mais eficiente pois libera o processador para outras tarefas, principalmente, para executar instruções que é a função principal do processador, ao invés de controlar a comunicação com os dispositivos de entrada saída, ficando esta função para o sistema operacional.
Buffering 
A técnica de buffering consiste no uso de uma área da memória principal denominada buffer que serve para transferência de dados entre os dispositivos de entrada saída e a memória. Esta técnica permite que uma operação de leitura seja transmitida primeiramente para o buffer, liberando imediatamente o dispositivo de entrada para efetuar uma nova leitura.  Neste caso, enquanto o processador manipula o dado localizado no buffer, o dispositivo realiza outra operação de leitura no mesmo instante. Este mesmo mecanismo é usado em operações de escrita de dados.
O buffering foi criado para minimizar o problema de velocidade entre o processador e os dispositivos de entrada saida. O objetivo é manter, na maior parte do tempo, o processador e os dispositivos de entrada saída ocupados.
A unidade de transferência usada no mecanismo de buffering é o registro. O tamanho do registro pode ser especificado de acordo com o dispositivo. Uma linha para uma impressora, um registro para um sistema que processa arquivos ou um carácter para um teclado.
A ideia é que o buffer possa armazenar vários registros ainda que nem todos estejam sendo processados pelo processador. Assim o dispositivo de entrada lê vários registros e os coloca no buffer antes que o processador manipule todos os registros. A ideia é tentar compatibilizar a diferença entre o tempo em que o processador executa as instruções e o tempo em que o dispositivo de entrada saída realiza as operações de leitura e gravação.
Spooling 
A técnica de spooling foi pensada para aumentar o grau de concorrência  e a eficiência dos sistemas operacionais. Esta técnica utiliza uma área em disco como um grande buffer. Neste caso, os dados são lidos ou gravados em disco enquanto programas são executados concorrentemente.
Esta técnica está presente atualmente nos sistemas operacionais e é usada para gerenciar a fila de impressão. No momento em que um arquivo é impresso o mesmo é gravado em disco, em um arquivo de spool,  e o programa que solicitou a impressão fica livre para outras atividades podendo ser continuar sua execução sem ter que aguardar o término da impressão do arquivo, a conclusão da operação de saída. Posteriomente, o sistema operacional envia o arquivo de spool para uma fila de impressão onde será enviado para a impressora.
Reentrância
A reentrância permite que um programa em execução seja compartilhado por vários usuários simultaneamente de forma a evitar que várias cópias do mesmo programa sejam carregadas na memória principal para execução. Isto evita desperdício de espaço em memória e redundância de processos no sistema operacional que são o mesmo programa.
A reentrância permite que apenas uma cópia do programa seja carregada na memória e o código executável seja compartilhado por vários usuários onde cada usuário possui sua área de dados em separado.  Desta forma temos um uso mais eficiente da memória. 
Este recurso é muito usado em programas usados por vários usuários tais como editores de texto, compiladores, planilhas eletrônicas, etc.
Acesso Direto à Memória (DMA) - a técnica DMA permite que o controlador de E/S transmita um bloco de dados entre os dispositivos de E/S e a memória principal. O controlador acessa a memória diretamente, sem a necessidade da intervenção do processador, exceto no início e no final da transferência. O controlador realiza a operação de E/S, bem como a transferência de dados entre a memória e o dispositivo de E/S, e, somente ao final, interrompe o processador para avisar que a operação foi concluída. A área de memória utilizada pelo controlador na técnica de DMA é chamada buffer de entrada/saída.
DirectMemory Access (Acesso Direto à Memória) é uma forma de controle de entradas e saídas sem a utilização constante do microprocessador, como se houvesse uma comunicação direta entre o dispositivo DMA de E/S e a memória. Isto ocorre, por exemplo, com a placa de vídeo e o HD.
Processo é um programa carregado em memória que pode vim a ser executado.
PROCESSOS do tipo FOREGROUND – Permite a comunicação direta do usuário com o processo durante o seu processamento. – Tem como base processamento interativo (teclado, mouse e monitor, etc)
PROCESSOS do tipo BACKGROUND – Não permite a comunicação com o usuário durante o processamento. – Tem como base processamento tipo batch (arquivos de E/S)
CPU-bound: –  É um processo que utiliza muita C.P.U. (Central Processing Unit) que em português significa "Unidade central de processamento". Basicamente, formado pelo próprio microprocessador da máquina, a parte "pensante" do computador.processos com longos tempos de execução e baixo volume de comunicação entre processos • ex: aplicações científicas, engenharia e outras aplicações que demandam alto desempenho de computação.
O seu tempo de execução é definido principalmente pelo tempo dos ciclos(clocks) do processador. Esse tipo de processo realiza poucas operações de leitura e gravação e é encontrado em aplicações cientificas e de muito cálculo. Por exemplo um processo que executa um programa de inversão de matriz é cpu-bound. Após ler alguns poucos dados, ele precisa apenas de processador. 
• I/O-bound: – Se um processo passa a maior parte do tempo esperandopor dispositivos de E/S, diz-se que o processo é orientado à E/S (I/O-bound) Øprocessos I/O-bound devem ter prioridade sobre processos CPU-bound
I/O-Bound( limitado pelas entradas/saídas) – Esse tipo de processamento usa pouco a CPU e passa a maior parte do seu tempo no estado de bloqueado (ou espera), pois realiza muita operações de E/S. – Exemplos: - Aplicações comerciais (leitura X gravação); - Processos interativos ( logon e entrada de dados); - Manipulação de Banco de Dados.
     Nesse caso, o tempo de execução é definido principalmente por estas operações. Por exemplo, um processo que executa um programa de cópia de arquivo é i/o-bound. Ele praticamente não utiliza processador, apenas acessa disco. Este tipo de processo é encontrado principalmente em aplicações comerciais, que se baseiam em leitura, processamento e gravação.Os processos interativos também são bons exemplos de processos I/O-bound, pela forma de comunicação entre o usuário e o sistema, normalmente lenta, devido à utilização de terminais.
THREADS 
 O mecanismo de Threads foi introduzido para reduzir o tempo gasto na criação, eliminação e troca de contexto de processos. Neste caso não há a necessidade de vários processos para a implementação da concorrência economizando recursos do sistema. • Threads compartilham a CPU da mesma forma que um processo, ou seja, enquanto um thread espera por E/S, outro pode ser executado. THREADS • Cada thread possui seu próprio contexto de Hardware, porém divide o mesmo contexto de Software e espaço de endereçamento com os demais threads do processo.
Devido ao amplo suporte para multithread em linguagens de programação, praticamente todos os sistemas operacionais recentes fornecem, no mínimo, algum suporte para threads. Um thread, às vezes denominado processo leve (LightweightProcess — LWP), compartilha muitos atributos de um processo. Threads são escalonados em um processador, e cada thread pode executar um conjunto de instruções independentemente de outros processos e threads. Entretanto, eles não são planejados para existir sozinhos — normalmente pertencem a processos tradicionais, às vezes denominados processos pesados (Heavyweight Processes — HWP). Os threads de um processo compartilham muitos dos seus recursos — mais notavelmente seu espaço de endereçamento e arquivos abertos—para melhorar a eficiência com que realizam suas tarefas. O nome ‘thread’ refere-se a um fluxo único de instruções ou fluxo de controle; threads em um processo podem executar concorrentemente e cooperar para atingir uma meta comum. Em um sistema multiprocessador, múltiplos threads são capazes de executar simultaneamente. Threads possuem um subconjunto dos recursos contidos em um processo. Recursos como registradores de processador, a pilha e outros dados específicos de threads (Thread-Specific Data — TSD) tais como máscaras de sinal (dados que descrevem quais sinais um thread não receberá. Entrega de sinal de thread”) são locais a cada thread, enquanto o espaço de endereçamento pertence ao processo que contém os threads e é global para os threads. Dependendo da implementação de thread para determinada plataforma, os threads podem ser gerenciados pelo sistema operacional ou pela aplicação de usuário que os cria.
Escalonamento
São critérios (regras) que são estabelecidas para definir entre os diferentes processos que foram carregados em memória e que estão solicitando o espaço do processador para ser executado, qual desses processos serão executados primeiro. 
Possui as funções: 
Manter processador ocupado a maior parte do tempo (Em geral, é desejável que o processador permaneça a maior parte do tempo ocupado); 
Balancear o uso da CPU entre os processos; 
Privilegiar aplicações críticas; 
Maximizar o throughput (Número de processos executados em um determinado intervalo de tempo) do sistema;
Minimizar o tempo de execução (turnaroud)
Tempo que um processo leva desde sua admissão no sistema até seu término. Considera tempo de espera para alocação de memória, espera na fila de processos prontos, processamento e operações de entrada e saída.
Minimizar o tempo de espera (Tempo que um processo fica no estado de pronto aguardando ser executado)
Minimizar o tempo de resposta (tempo decorrido do momento da submissão de um pedido ao sistema até a primeira resposta produzida)
Recursos que necessitam escalonamento:
Dispositivos E/S (discos); Processador; Memória.
Quando um sistema pode escolher os processos que executa, deve ter uma estratégia — denominada política de escalonamento de processador (ou disciplina) — para decidir quais processos executar em determinado instante. Uma política de escalonamento deve tentar satisfazer alguns critérios de desempenho, como maximizar o número de processos que terminam por unidade de tempo (rendimento), minimizar o tempo que cada processo espera antes de executar (latência), evitar adiamento indefinido de processos, assegurar que cada processo conclua antes de seu prazo estabelecido, ou maximizar a utilização do processador.
Escalonamento de alto nível — às vezes denominado escalonamento de job ou escalonamento de longo prazo — determina quais jobs o sistema permite que disputem ativamente os recursos do sistema. A política de escalonamento de alto nível determina o grau de multiprogramação — o número total de processos em um sistema em determinado instante. Depois de a política de escalonamento de alto nível ter admitido um job (que pode conter um ou mais processos) no sistema, a política de escalonamento de nível intermediário determina quais processos terão permissão de competir por um processador. Essa política atende às flutuações de curto prazo da carga do sistema. A política de escalonamento de baixo nível de um sistema determina quais processos prontos o sistema designará a um processador quando o próximo ficar disponível. Políticas de escalonamento de baixo nível comumente atribuem uma prioridade a cada processo, que reflete a importância desse processo — quanto mais importante for, maior é a probabilidade de que a política de escalonamento o selecione para ser executado em seguida.
A preempção é a capacidade de um sistema operacional interromper um processo em execução e substituí-lo por um outro.
 Nos ESCALONAMENTO PREEMPTIVOS o sistema operacional pode interromper um processo e passá-lo para o estado de pronto, a fim de alocar outro processo na CPU. O uso da preempção traz alguns benefícios como a possibilidade de se priorizar a execução de processos como no caso de aplicações de tempo real onde o fator de tempo é crítico e Implementar políticas de escalonamento que compartilhem o processador de maneira mais uniforme. 
Nos ESCALONAMENTOS NÃO-PREEMPTIVOS nenhum evento externo pode ocasionar a perda do uso do processador. 
Escalonamentos Não-Preemptivos Nesta categoria enquadram-se os escalonamentos FIFO e SJF.
Escalonadores empregam algoritmos que decidem sobre preemptibilidade, prioridades, tempos de execução e outras características de processos.
O FIFO (First-In-First-Out), também denominado primeiro-achegar-primeiro-a ser-atendido (First-Come-First-Served—FCFS). Os processos são despachados conforme o momento em que chegaram à fila de prontos. O FIFO é não preemptivo — uma vez obtido um processador, o processo executa até o fim. O FIFO é justo no sentido de que escalona processos segundo o momento em que chegaram; desse modo, todos os processos são tratados igualmente, porém, de certa maneira é injusto porque processos longos fazem processos curtos esperar, e processos não importantes fazem processos importantes esperar. O FIFO não é útil para escalonar processos interativos, pois não pode garantir tempos de resposta curtos. O FIFO raramente é usado como esquema mestre nos sistemas de hoje, mas é freqüentemente encontrado dentro de outros esquemas. Por exemplo, muitos esquemas de escalonamento despacham processos segundo a prioridade, mas processos com a mesma prioridade são despachados na ordem FIFO.
Escalonamento Shortest-Job-First (SJF)
Associa cada processo(JOB) ao seu tempo de execução. Quando o processador está livre, o processamento que ocupar menos tempo da CPU para terminar seu processamento é selecionado. 
Favorece os programas menores.
Reduz o tempo médio de espera em relação ao FIFO.
Problemas:
Determinar, exatamente, quanto tempo de CPU o processo vai utilizar para terminar seu processamento.
Escalonamento por Prioridades ou preempção por prioridade
Processos possuem diferentes prioridades de execução.
Processos de maior prioridade são escalonados preferencialmente.
Algoritmo Implementado mediante um clock, que interrompe o processador em determinados intervalos de tempo, reavaliando prioridades e, possivelmente, escalonando outro processo.
Todos os sistemas de tempo compartilhado implementam algum tipo de prioridade, sendo esta uma característica do contexto de software.
Prioridade estática:
Não é modificada durante a existência do processo.
De simples de implementação.
Pode ocasionar tempos de resposta elevados.
Prioridade dinâmcia:
Pode ser modificada durante a execução do processo.
O processo recebe um acréscimo à sua prioridade ao sair do estado de espera.
Processos I/O-bounds terão mais chances de serem escalonados, compensando o tempo que passam no estado de espera.
Os processos CPU-bounds podem ser executados enquanto os processos CPU-bounds esperam por algum evento.
O tempo de resposta compensa o maior overhead e complexidade algorítmica.
Escalonamento Circular (round robin) ou preempção por tempo
· Implementado por um algoritmo semelhante ao FIFO, porém, quando um processo passa para o estado de execução, existe um tempo-limite (quantum ou time-slice) para sua utilização de forma contínua. Se o processo não terminou a execução, volta ao estado de pronto.
· O valor do quantum de tempo está depende da arquitetura de cada sistema operacional.
· Nenhum processo poderá monopolizar a CPU.
· Algoritmo bastante adequado para sistemas multiusuários de tempo compartilhado.
· No caso, o processo CPU-bound tem mais chances de ser executado do que o processo IO-bound
· • É comum a utilização de uma fila auxiliar para os processos que saem do estado de espera fila de espera; 
· • Desta forma a fila de pronto só é dada vazão quando não existem processo na fila auxiliar
 Escalonamento por Múltiplas filas
· Implementa diversas filas de processos no estado pronto, onde cada processo é associado exclusivamente a uma delas.
· Fila de prontos é dividida em várias filas, Ex.: 2 filas Processos em primeiro plano (interativos/foreground); Processos em segundo plano (background/batch);
· Cada fila possui um mecanismo próprio de escalonamento, em função das características dos processos.
· Cada fila possui uma prioridade associada.
· O sistema só pode escalonar processos de uma fila, se todas as outras de prioridade maior estiverem vazias.
· Cada fila possui seu próprio algoritmo de escalonamento: Ex.: Processos em primeiro plano: RR (para manter tempo compartilhado); Processos em background: FCFS; 
 
· É necessário haver escalonamento entre as filas: Para escolher o processo de qual fila será executado; Se usar algoritmo de prioridade fixa de uma fila sobre outra: starvation; Outra opção: dividir o tempo de execução entre as filas: Foreground fica com 80% e background com 20% do tempo de CPU.
Escalonamento por Múltiplas Filas com Realimentação
	Com retroalimentação: processo pode ser trocado de fila;
· Também Implementa diversas filas onde cada uma tem uma prioridade de execução associada, porém, os processos não permanecem em uma mesma fila até o término do processamento.
· O sistema identifica dinamicamente o comportamento de cada processo, ajustando assim suas prioridades de execução e mecanismos de escalonamento.
· Os processos não são previamente associados às filas de pronto, e sim direcionados pelo sistema entre as diversas filas com base em seu comportamento.
· Execução:
· Processo criado entra no final da fila de mais alta prioridade.
· Cada fila implementa o mecanismo de FIFO para escalonamento.
· Quando o processo em execução deixa a CPU por preempção por prioridade ou por solicitação a um recurso do sistema ele é reescalonado para dentro da mesma fila.
· Caso o processo esgote seu quantum de tempo, ele é redirecionado para um a fila de menor prioridade (preempção por tempo), e assim por diante.
· A fila de mais baixa prioridade implementa o mecanismo de escalonamento circular.
· O quantum em cada fila varia em função da sua prioridade. Quanto maior a prioridade, menor seu quantum de tempo.
· Atende as necessidades dos diversos tipos de processos.
· Pode ser implementado em qualquer tipo de Sistema Operacional.
· Pode gerar um grande overhead no sistema, ainda assim, pode justificar sua implementação.

Continue navegando