Introdução aos Sistemas Operacionais - FACOM › ~claudio › Cursos › sogi › Artigos ›...

Post on 25-Jun-2020

39 views 0 download

Transcript of Introdução aos Sistemas Operacionais - FACOM › ~claudio › Cursos › sogi › Artigos ›...

Introdução aos Sistemas Operacionais

Prof. Dr. Antônio Fernando Traina

Conteúdo Programático

1.Introdução aos conceitos de S.Os. 2. Processos3. Escalonamento de tarefas (Árbitro)4. Gerente de entrada saida (Supervisor)5. Gerente de memória6. Sistemas de Arquivos7. Conceitos Práticos de S.O. (Unix, NT,

DOS)

Escalonamento de Processos

UNIDADE III

Sumário

Introdução ao Escalonamento de ProcessosCritérios de EscalonamentoEscalonamento preemptivo e não-preemptivo eTipos de EscalonamentoComunicação entre ProcessosExemplos

Introdução ao Escalonamento de Processos

Introdução ao Escalonamento de Processos

Funções de um S.O.Manter o controle dos processos ativosAlocar e desalocar recursos

processadormemóriaarquivosdispositivos

Proteger recursosGarantir que o resultado de um processo independa da sua velocidade de execução

Introdução ao Escalonamento de Processos

Interação de Processos:Processos independentes competindo por recursosProcessos compartilhando recursosProcessos se comunicando

Introdução ao Escalonamento de Processos

Assim diversos processos disputam os recursos disponíveis no sistema.

Divisão do “tempo do processador”.

Uso da multiprogramação.

Escalonamento a curto prazo e a longo prazo (batch).

Introdução ao Escalonamento de Processos

Escalonamento é a tarefa de decidir qual o processo irá ocupar o processador quando este ficar livre.

Escalonador: é a parte do S. O. encarregada de tomar as decisões de escolha.

Introdução ao Escalonamento de Processos

O Escalonador decide baseado em uma política de escolha utilizando os algoritmos de escalonamento.Problemas com o comportamento de cada um dos processos. Muito I/O ou muita utilização do processador.

Introdução ao Escalonamento de Processos

Parâmetros de avaliaçãoJustiça: chances iguais de uso do processador.

Throughput: maximizar o número de jobsprocessados em uma unidade de tempo.

Tempo de Resposta: minimizar o tempo de resposta para os usuários interativos.

Previsível: Rodar as tarefas com igualdade

Turnaround: Minimizar o tempo.

Introdução ao Escalonamento de Processos

Menor overhead: Tempo de gerência.

Uso dos recursos: Deve ser balanceado.

Equilíbrio entre resposta e utilização.

Evitar a postergação indefinida.

Garantia de prioridades.

Dar preferências: Processos com recursos chaves que sejam caros para o sistemas.

Introdução ao Escalonamento de Processos

Oferecer serviços melhores: Para processos que exibem comportamentos desejáveis.

Evitar colapso: Situações de carga pesada.

Introdução ao Escalonamento de Processos

Conceito de Thread (fileira, linha) Uma thread é uma parte separada de um processo.Um processo pode consistir de várias threads cada

uma das quais sendo executada separadamente. Por exemplo, uma thread poderia tratar refresh e gráficos na tela , outra thread trataria impressão, outra thread trataria o mouse e o teclado.

Introdução ao Escalonamento de Processos

Threads são processo simples (ou processos mais fracos) que compartilham:

segmento de códigoconjunto de dadosarquivos

possuindo, no entanto, seus próprios:contador de programa (instruction counter ou program counter)Registradorespilha e apontador de pilha

Introdução ao Escalonamento de Processos

Ou seja:• Task

oMantém os recursos de um processo o Entidade passiva

• ThreadsFluxos de execução de um processo o Entidades ativas o Compartilham os recursos da tasko Cada thread tem sua própria pilha de execução e conjunto de registradores Criação e destruição com pequeno custo

Processo = 1 task + n threads

Introdução ao Escalonamento de Processos

Processo

Um processo ou tarefa é uma porção de um programa em alguma fase de execução. Um programa pode consistir de várias tarefas, cada uma com funcionamento próprio ou como uma unidade (talvez se comunicando entre si periodicamente).

Introdução ao Escalonamento de Processos

O PROCESSO de BOOTSTRAP

Descreve a ação da carga inicial do sistema operacional do disco para a RAM. Uma pequena rotina armazenada em ROM, chamada de CARREGADOR de BOOTSTRAP ou IPL (Carregador de Programa Inicial), lê uma rotina especial de carga no disquete.

Introdução ao Escalonamento de Processos

Em sistema baseado em disquete , essa rotina normalmente reside na trilha 00, setor 00 (ou 01), e é chamado de setor de booting.

O código contido no setor é transferido para a RAM, e então é executada. Tem a responsabilidade exclusiva de carregar o resto do sistema operacional na memória.

Introdução ao Escalonamento de Processos

Conceitos Importantes:Quantum: tempo de execução de cada processo

muito curto: maior o overhead de escalonamento muito longo: degenera em FCFS (FirstCome First Serve)

turnaround:Tempo decorrido da submissão de um processo até o seu término.

Introdução ao Escalonamento de Processos

Interrupção de um programa:Natural

Quando um processo conclui sua tarefa executa uma chamada informando o término ao sistema operacional

Forçada Na ocorrência de erros um processo pode ser abortado pelo sistema operacional Um processo pode solicitar o término de um processo subordinado quando seus serviços não têm mais interesse

Introdução ao Escalonamento de Processos

Tipos de EscalonadoresEscalonador de curto prazo (CPU Scheduler)

Seleciona processos da fila readyDeve ser muito eficiente

Escalonador de longo prazo (Job Scheduler) Seleciona novos processos para entrar no sistema Mantém média de processos I/O-bound e CPU-bound

Escalonador de médio prazo (Swapper) Retira processos temporariamente da memória para manter a média de processos I/O-bound e CPU-bound ou pela exaustão da mesma

Sumário

Introdução ao Escalonamento de ProcessosCritérios de EscalonamentoEscalonamento preemptivo e não-preemptivo.Tipos de EscalonamentoComunicação entre ProcessosExemplos

Critérios de Escalonamento

Critérios de Escalonamento

Processos limitados por E/S.Processos limitados pela CPU.Batch ou interativo.A urgência de uma resposta.Prioridade do processo.Com que freqüência perdem a CPU.Tempo de execução real.Tempo necessário para ser concluído.

Sumário

Introdução ao Escalonamento de ProcessosCritérios de EscalonamentoEscalonamento preemptivo e não-preemptivo.Tipos de EscalonamentoComunicação entre ProcessosExemplo

Escalonamento preemptivo e não-preemptivo.

Escalonamento preemptivo e não-preemptivo.

Escalonamento não-Preemptivo: Estratégia de rodar o processo até o fim. (batch). (não são adequados aos sistemas propósito geral)

Escalonamento Preemptivo: Estratégia de permitir a suspensão temporária dos que poderiam continuar rodando.

Escalonamento preemptivo e não-preemptivo

Não Preemptivo:Escalonamento First-In-First-Out -FIFO: Uma vez que o processo está com a CPU ele é executado até a sua conclusão.Escalonamento Shortest-Job-First -SJF: Tarefas com menor tempo de utilização são executadas por primeiro. Quanto tempo a tarefa irá utilizar a CPU. Livrar-se do maior número de processos quanto antes.

Escalonamento preemptivo e não-preemptivo

Não Preemptivo:Highest-Response-Ration-Next -HRN: A taxa de resposta mais alta. O tempo de execução da tarefa e o tempo que a tarefa tem esperado para executar.Escalonamento Cooperativo: Processo em execução entrega o processador sem a intervenção do S.O.

Escalonamento preemptivo e não-preemptivo

PreemptivoEscalonamento Round Robin: A cada processo atribui-se um intervalo de tempo durante o qual ele poderá utilizar o processador.(quantum). Se esgotar o seu quantum ele perde o processador.Manter uma lista de processos prontos.

Escalonamento preemptivo e não-preemptivo

B F D G A

F D G A B

Processo correnteRound Robin

Escalonamento preemptivo e não-preemptivo

PreemptivoEscalonamento por Prioridades:

Processos devem ser tratados de maneira diferente dos outros;Os processos de maior prioridades são escalonados antes.Sistemas de tempo compartilhado implementam algum tipo de prioridade de forma a dar mais importância na hora do escalonamento.

Escalonamento preemptivo e não-preemptivo

PreemptivoEscalonamento por Múltiplas Filas:

os processos são classificados em função do tipo de processamento realizado, e a cada grupo criado, são aplicados mecanismos de escalonamento distintos;Cada fila possui uma prioridade associada;

Escalonamento preemptivo e não-preemptivo

PreemptivoEscalonamento por Múltiplas Filas com Realimentação:

Possuem prioridade de execução mas não necessariamente permanecem até o final de seu processamento;mecanismo adaptativo, que tem como objetivo ajustar os processos em função do comportamento do sistema.

Escalonamento preemptivo e não-preemptivo

PreemptivoEscalonamento de Sistemas de Tempo Real:

o fator tempo é crítico;não existe o conceito de quantum;Para cada processo é atribuída uma prioridade associada a sua importância dentro do sistema;a prioridade é estática;Quanto maior a importância de uma tarefa, maior sua prioridade de execução.

Escalonamento preemptivo e não-preemptivo

PreemptivoEscalonamento com Múltiplos Processadores:

Em sistemas fracamente acoplados, cada processador faz seu próprio escalonamento local;Nos sistemas fortemente acoplados épossível implementar uma única fila de pronto para todos os processadores.

Escalonamento preemptivo e não-preemptivo

PreemptivoTodos os processos estão presentes nesta única fila e são escalonados no primeiro processador disponível. deve ser implementada a exclusão mútua;A exclusão mútua do Escalonador pode ser obtida através de mecanismos como semáforos e monitores.

Sumário

Introdução ao Escalonamento de ProcessosCritérios de EscalonamentoEscalonamento preemptivo e não-preemptivo.Tipos de EscalonamentoComunicação entre ProcessosExemplo

Tipos de Escalonamento

Tipos de Escalonamento

Serão vistos:Primeiro a Chegar Primeiro atendido (FirstCome First Serve - FCFS)Round-RobinProgramas Pequenos Primeiro (ShortestJob First - SJF)Menor Tempo Restante Primeiro (ShortestRemaining Time First - SRTFFilas Multiníveis

Tipos de Escalonamento

Primeiro a Chegar Primeiro atendido (First Come First Serve - FCFS) Com o algoritmo FCFS, cada programa é inserido no final de uma fila Q (a fila Q é a fila RL, de processos prontos para ganharem o contrele da CPU), quando chega no sistema.

Tipos de Escalonamento

O processo em execução processa atéo final do seu corrente pico de CPU (não preempção) Quando o processo em execução termina, o programa no início da fila Q é selecionado como sendo o próximo a ser executado. Este é um esquema bastante simples.

Tipos de Escalonamento

A eficiência do sistema varia grandemente de acordo com a duração do pico de CPU e da ordem de chegada dos processos. T Por exemplo - três processos chegam ao mesmo tempo. O primeiro possui 24 unidades de tempo de duração (tempo de pico de CPU), o segundo e o terceiro possuem, cada, 3 unidades de tempo de duração.

Tipos de Escalonamento

A media de tempo de turnaround(tempo de existência) para os três processos será:

Tipos de Escalonamento

Se os programas chegarem na ordem 3, 2, 1, o turnaround médio seria:

Tipos de Escalonamento

Portanto, o turnaround médio não é,

em geral, minimal e, pode variar muito,

para um dado conjunto de programas,

dependendo da ordem de suas

chegadas.

Tipos de Escalonamento

Round-RobinNeste algorítmo, todos os processos prontos para ganharem o controle da CPU estão na fila de prontos RL (Ready List). O escalonador de CPU movimenta-se, circularmente, na RL atribuindo a CPU a cada processo por vez por uma duração de tempo chamado "quantum de tempo".

Tipos de Escalonamento

Um quantum de tempo é usualmente 10 a 100 milisegundos ou menos. Novos processo (ou processos que são novos na RL) são adicionadaos no final da fila RL.

Tipos de Escalonamento

Tudo se passa do seguinte modo: o escalonador "arma" um relógio de tempo para disparar após uma deternminada unidade de quanta e despacha o processo que está no inicio da RL para ganhar controle da CPU.

Tipos de Escalonamento

O escalonador escolhe um processo. O escalonador também o despacha para a CPU. Ou o processo (corrente na CPU) libera a CPU voluntariamente (ie, o pico de CPU terminou e um pico de E/S está começando) ou o relógio temporazidor dispara e uma interrupção ocorre, causando preempção do processo.

Tipos de Escalonamento

Se o processo libera voluntariamente a CPU, ele vai para o final da fila apropriada no estado bloqueado. Se o temporizador dispara, o processo vai para o final da fila RL. Por exemplo, com o quantum de tempo de 4 unidades:

O turnaround será: (30("1") + 7("2") + 10("3")) / 3 = ~16

Tipos de Escalonamento

Round RobinDeterminação do tamanho do quantum.

Muito pequeno: há sucessivas trocas de contexto baixando a eficiência do processador. (overhead)

Muito Grande: pode levar a um tempo de resposta não aceitável.

Tipos de Escalonamento

Programas Pequenos Primeiro (Shortest JobFirst - SJF)O tamanho do próximo pico de CPU (CPU burst) de cada programa é utilizado para determinar quem será o próximo. Aquele com o próximo menor pico será o escolhido. Por exemplo - suponha que os seguintes processos, chegam ao mesmo tempo no sistema:

Tipos de Escalonamento

Tipos de Escalonamento

SJFSJF é ótimo (sentido matemático de ótimo) para algoritmos não-preemptivos - isto é, sempre resulta em menor tempo de turnaround. Contudo, é inteiramente impossível de se implementar, devido ao fato de que não existem meios de precisamente determinar, o tamanho do próximo pico de CPU, que terá um dado processo.

Tipos de Escalonamento

Um método informal de se provar que o algoritmo SJF é ótimo é considerar que, se um programa menor for movido para depois de um programa maior, então o tempo de espera para o menor é aumentado mais que o decréscimo do tempo de espera do maior, aumentando assim a média do tempo do turnaround.

Tipos de Escalonamento

Uma aproximação do algoritmo SJF utiliza um método de média exponencial para aproximar o tamanho do próximo pico de CPU, como veremos a seguir

Tipos de Escalonamento

Tipos de Escalonamento

Menor Tempo Restante Primeiro (Shortest Remaining Time First –SRTF) Este algoritmo é como o SJF, exceto que é um algoritmo preemptivo. Se um programa torna-se pronto para ganhar o controle da CPU utilizando o algoritmo SJF, ao programa corrente é permitido finalizar o seu próximo pico de CPU.

Tipos de Escalonamento

Filas MultiníveisAqui, existem varias filas de processos prontos para ganharem o controle da CPU. Cada uma possui escalonamento com características diferentes.Ou seja, uma pode ser RR, enquanto uma outra utiliza FCFS, etc. Cada fila está associada a um tipo específico de programa.

Tipos de Escalonamento

Tipos de Escalonamento

FCFSOs processos do tipo "System" podem utilizar FCFS, quanto os processos do tipo "interactive" podem utilizar RR. É necessário existir alguma política de escalonamento entre filas. Por exemplo, um programa não poderá prosseguir, a menos que não exista programas de maiores prioridades esperando ou não permitir preempção, etc, ou cada fila possui um certo percentual de tempo de CPU.

Sumário

Introdução ao Escalonamento de ProcessosCritérios de EscalonamentoEscalonamento preemptivo e não-preemptivo.Tipos de EscalonamentoComunicação entre ProcessosExemplo

Comunicação entre Processos

=> Deadlocks

Comunicação entre Processos

Ambientes onde surge concorrência– múltiplos aplicativos– aplicativos estruturados– estrutura do S.O.• Aspectos da implementação de concorrência– comunicação– compartilhamento e disputa de recursos– sincronização– alocação de processador

Comunicação entre Processos

Problemas com concorrência– compartilhamento de recursos- escritas a uma variável global– alocação de recursos- recurso alocado enquanto processo estábloqueado

Comunicação entre Processos

depuração de programas• execução não pode ser reproduzida• Os problemas são similares em

ambientes multiprogramados e multiprocessados

Comunicação entre Processos

Condições de corrida ou Seção Crítica: situação onde dois ou mais processos estão acessando dados compartilhados e o resultado do processamento depende de quem roda quando.

Spool de impressão onde um processo da por encerrado a impressão sem que o processo que está gerando tenha terminado.

Comunicação entre Processos

Como evitar a ocorrência de condições de corrida?

Exclusão mútua: Se um processo estiver ocupando uma variável ou arquivo compartilhados, os demais processos serão impedidos de o fazer.Evitar que mais de um processo esteja processando suas regiões críticas ao mesmo tempo.

Comunicação entre Processos

Condições necessárias:Dois ou mais processos não podem estar dentro de suas regiões críticas;Sem controle de tempo, velocidade ou processadores disponíveis.Nenhum processo pode bloquear outro se este estiver rodando fora de sua região crítica.Nenhum processo pode ser obrigado a esperar indefinidamente p/entrar em sua região crítica.

Comunicação entre Processos

Exclusão Mútua: Soluções de Hardware:Inibição das Interrupções: Entra na região crítica, inibe as interrupções, habilita quando sai.Instrução TSL: Test and Set Locked - Transfere o conteúdo do end. memória para um registrador

Exclusão Mútua: Soluções de Software:Variável de travamento: 0-livre, 1-ocupado.Estrita Alternância: Teste inicial e teste contínuo para habilitar-se. Solução de Peterson: O processo avisa que quer entrar, entra e libera.

Comunicação entre Processos

Primitivas Sleep/Wakeup: (Produtor e consumidor): Um dos processos , o produtor coloca informação no Buffer, e o outro, o consumidor retira a informação do buffer.Semáforos: (Dijkstra) - variável do tipo semáforo pode ter o valor 0 = livre e pode ter o valor positivo indicando o número de sinais armazenados.

Comunicação entre Processos

Contadores de Eventos: Lê, incrementa e espera. - contador de inserção e contador de retiradas. (antes de retirar o item x ele espera que o o contador de entradas seja igual a x).

No caso de semáforos e contadores de evento podem ocorrer deadlock.

Monitores: Os processos chamam os procedimentos do monitor mas não acessam as estruturas de dados e variáveis internas.

Comunicação entre Processos

Somente um processo pode estar ativo dentro do monitor em um determinado instante.Wait e Signal - variáveis de condição.

Troca de Mensagens: através das primitivas Send e Receive.Equivalência entre as Primitivas: Método chamado seqüenciadores, expressões de caminho ou serializadores.

Comunicação entre Processos

Isso dá bom tempo de resposta em programas complexos. Windows NT é um exemplo de um sistema operacional que suporta multi-thread.

Comunicação entre Processos

O problema de seções críticas (ou regiões críticas) é um sério problema em concorrência. Este problema envolve dois ou mais processos que possuem uma seção de código que não obedece as condições de Bernstein para concorrência.

Comunicação entre Processos

Estas seções de processos concorrentes são chamadas seções críticas. É dentro das seções críticas de um processo que é realizado o acesso ao dado que está no conjunto de leitura ou de escrita de outro processo.

Comunicação entre Processos

Em geral a solução para o problema de seção crítica provê algum método que somente permite um processo (ou em raros casos, um pequeno número fixo de processos cooperativos) acessar sua seção crítica por vez ( de cada vez).

Comunicação entre Processos

Um excelente exemplo de concorrência e seção-crítica e o problema chamado Produtor/consumidor. Nesta modelagem um processo produtor produz (continuadamente) um pacote de ítens para um processo consumidor consumir (continuamente).

Comunicação entre Processos

Geralmente existe uma lista compartilhada onde o produtor armazena os dados e da qual o consumidor retira os dados. Se ambos os processos tentarem acessar a lista concorrentemente, a lista poderá ficar corrompida ( estado inconsistente).

Comunicação entre Processos

Portanto, é necessário e mandatórioque somente um processo acesse a lista por vez. Um implementação típica (pseudo código) do produtor e consumidor écomo se segue:

Comunicação entre Processos

Note que, no exemplo acima, o problema da seção crítica não é totalmente resolvido.O produtor e o consumidor acima podem

processar juntamente, sem problemas, na maioria das execuções mas, na seção crítica (durante a manipulação da lista) o sistema falha (gera inconsistência) completamente.

Comunicação entre Processos

Qualquer solução para o problema de seção crítica deve satisfazer as seguintes três condições:1.A execução da seção crítica entre processos deve ser

mutuamente exclusiva, isto é, nunca dois processos podem estar acessando a mesma seção crítica simultaneamente. As seções críticas de dois processos estão relacionadas

se elas acessam o mesmo dado compartilhado. Por exemplo, digamos que temos 3 seções críticas, uma em

cada um um dos processos A, B e C. Se A e B manipulam o dado 1 e B e C manipulam o dado 2, então A e B possuem seções críticas relacionadas e, analogamente, B e C. A e C não compartilham dados e portanto não possuem seções críticas relacionadas entre si.

Comunicação entre Processos

2. Um processo, A, fora de sua seção crítca, não pode impedir outro processo, B, entrar em uma de suas seções crítcas.

3. Quando dois processos desejarem entrar em suas seções críticas ao mesmo tempo, a decisão de qual entrará primeiro, não pode ser postergarda indefinidamente.

Comunicação entre Processos

Solução por software Solução de Hardware Semáforos Monitores Comunicação Inter-Processos (Inter-Process Communication -IPC).

Deadlock

Bloqueio permanente de um conjunto de processosque estão competindo por recursos ou secomunicando• Não existe uma boa solução para o caso geral• Surge devido a interesses conflitantes por recursos

Deadlock

Utilizados por um processo de cada vezO uso não acaba com o recursoProcessos adquirem, usam e liberam os recursosExemplos: processadores, canais de E/S, memória,dispositivos, arquivos, banco de dados, semáforosExemplo de deadlock: memória de 200K bytes

Deadlock

Recursos que são criados e destruídosUm processo produtor desbloqueado pode

criarqualquer número de recursosQuando um recurso é adquirido, deixa de

existirExemplos: interrupções, sinais, mensagens,

conteúdo de buffers de E/SExemplo de deadlock: Receive bloqueia o

processo

Deadlock

Condições para Deadlock:Exclusão mútua

– somente um processo pode usar o recurso

• Posse e espera– um processo pode segurar recursos enquanto

espera por outros• Sem preempção

– nenhum recurso pode ser retirado de um processo

Deadlock

Espera circular– uma corrente de processos existe, de

maneira que cada processo possui pelo menos um recurso desejado pelo próximo processo na corrente

– conseqüência possível das 3 primeiras– definição de deadlock

Deadlock

Previnir Deadlocks: Fazer com que uma das condições não se realize:

• Exclusão mútua– exemplo: spooling para impressoras– não pode ser evitada na maioria das situações

• Posse e espera– um processo deve solicitar todos os seus recursos simultaneamente– maior espera por recursos– recursos alocados desnecessariamente– conhecimento anterior dos recursos necessários

Deadlock

Sem preempção– devolve recurso assim que necessário– somente prático quando o estado do recurso pode ser facilmente

salvo e restaurado (processador)• Espera circular

– todos os recursos estão ordenados– recursos são solicitados em ordem – exige conhecimento prévio de todos os recursos necessários– a alocação dos recursos pode não ser a mais eficiente

Deadlock

Estratégias– não disparar um processo cujo uso de

recursos pode levar a um deadlock– não atender pedidos de recursos que

podem levar a um deadlock (algoritmo do banqueiro)

• Vantagens– menos restritivo que prevenção

• Desvantagens– necessidades máximas conhecidas– somente para recursos reusáveis

Deadlock

Detectar DeadlockO S.O. verifica periodicamente o estado dos recursose processos procurando por deadlocks• Essa procura pode demandar recursos de

processador• Recuperação

– cancelar todos os processos em deadlock– rollback e restart dos processos em deadlock– cancelar progressivamente os processos em deadlock

Deadlock

Algoritmo do avestruz• Assumir que deadlocks são raros• Não é justificado o (mau) uso de

recursos para prevenir, evitar ou detectar deadlocks

• Estratégia adotada pela maioria dos Sistemas operacionais

Sumário

Introdução ao Escalonamento de ProcessosCritérios de EscalonamentoEscalonamento preemptivo e não-preemptivo.Tipos de EscalonamentoComunicação entre ProcessosExemplo

Exemplos

Exemplos

Escalonamento Tradicional do UNIXEscalonamento com preempção usando múltiplas filas com prioridades dinâmicas A prioridade (inversa) de um processo ébase + utilização + nice

Exemplos

A prioridade base divide os processos em grupos de prioridades (swapper, disco, arquivos, dispositivos, usuários) O parâmetro nice ajusta a prioridade do processo A utilização de CPU é dividida por 2 a cada segundo, para evitar a inanição de processos longos É utilizado Round-Robin para processos de mesma prioridade

Exemplos

Política de Escalonamento em UnixTrês tipos de aplicações: interativas, batch e real-time. Unix tradicional desenhado para aplicações interactivas. Cada processo tem uma prioridade que varia dinâmincamente. Processos de mais alta prioridade tiram outros processos do CPU mesmo quando o processo não terminou o seu quantum

Exemplos

Kernel não permite preempção: processo sóreturna o CPU quando bloqueia ou quando regressa a User Mode. Prioridades: 0 a 49 para kernel, 50 a 127 para user-mode. Em proc: p_pri, prioridade corrente; p_usrpri, prioridade em modo utilizador, p_cpu, uso de CPU, e p_nice.

Exemplos-NÃO

ClocksResposta a interrupt de clock deve ser o mais rápida possível: reiniciar hw, se necessário. incrementar estatísticas. recalcular prioridades e time-slice. enviar um SIGXCPU para processo se excedeu quota. alterar tempo real. processar calloutsacordar processos de sistemas como swapper e pageout

processar alarmes.

Exemplos-NÃO

Tipos de ThreadsKernel Threads: baratos, não são associados com processos de utilizador, e têm a sua própria pilha.

Úteis para I/O e interrupts.Equivalente ao pagedaeomn e a nfsd em

Unix.

Exemplos-NÃO

Lightweight Process: kernel supported user-thread.

Podem fazer syscalls e bloquear. Podem correr em CPUs diferentes. Precisam de mais estado do que KT: pilha e contexto de registos. Precisam de syscalls para serem criados, sincronização (para blocking), contextswitching e escalonamento. Isso obriga a 2 mode switches atravessando protection boundary

Exemplos-NÃO

User Threads: implementados por bibliotecas (C-threads ou pthreads).

Interação é rápida, escalonamento é feito pela aplicação. AIO permite não bloquear thread àcusta de complexidade de programação. Ideais para window systems. Problema: separação entre UT e LWP: kernelnão pode saber que LWP tem os melhores threads; UTs podem perder LWPs, não suportam paralelismo.

Exemplos

Implementação do EscalonadorEm Unix tradicional:

são mantidas 32 filas com as prioridades (VAX). whichqs contém um bitmask com um 1 para filas ocupadas. swtch() examina primeira fila, muda contexto, e quando retorna processo já está executando. Cada 100 ms (BSD) roundrobin() vai buscar outro processo com a mesma prioridade. Senão, o mesmo processo continua

Exemplos-NÃO

schedcpu() é chamada de segundo a segundo para recalcular a prioridade. clock recalcula prioridade do processo corrente cada vez em 4. flag runrun é usada para indicar que processo de mais alta prioridade está àespera de ser executada, e é verificada antes de entrar em user-mode.

Exemplos

Problemas do Escalonador Não escala bem: muitos processos faz com que recalcular prioridades seja pesado. Não se pode dar uma porção de CPU a um processo. Não há garantias de tempo de resposta para real-time apps. Aplicações não podem controlar as suas prioridades. Kernel nonpreemptive significa que processos de prioridade alta podem ter que esperar muito tempo antes de executar.

Exemplos-NÃO

Inicialização de Processos: forkA chamada fork() duplica processos: fork() cria um novo processo: retorna 0 para filho e PID para o pai. fork() reserva swap, aloca novo PID e proc, inicializa proc, aloca mapas de tradução de endereços, aloca u-area e copia do pai, altera a u-area com novos mapas de endereços e swap, adiciona o filho aos processos que partilham o texto do pai, duplica as áreas de pilhas e dados do pai, obtém referencias a recursos partilhados, inicializa contexto HW, põe o processo runnable e na filha de escalonamento, retorna para o filho e para o pai.

evitar cópia: copy-on-write e vfork().

Exemplos-NÃO

Inicialização de Processos: execA execução de um novo programa é iniciada com exec(): exec() faz overlay com um novo programa. exec() obtém o executável, verifica permissões, lê o cabeçalho, altera se SUID ou SGID, copia os argumentos de exec() e env para kernel space, aloca swap para data e swap, liberta antigos data and stack, aloca mapas de endereço e inicializa-o, restaura env e argumentos, reinicializa os signal handlers, inicializa contexto HW. entre os dois podemos fazer coisas como alterar os

descriptores de entrada-saida, etc.

Exemplos-NÃO

Terminação do Processoexit() é chamada ou de um signal ou do próprio processo. exit() desliga sinais, fecha ficheiros, liberta ficheiro texto e outros recursos como cwd, escreve no log, guarda estatísticas, muda para SZOMB, faz com que init herde o processo, liberta memória, envia SIGCHLD para pai, acorda pai, chama swtch()wait() espera terminação de processos. se processo morre antes do pai e este não chama wait, processo fica zombie. SVR4 permite usar SA_NOCLDWAIT

para indicar que pai não vaiu esperar pelos filhos

Exemplos

Escalonamento no UNIX SVR4160 níveis de prioridade dividido em três classes

100-159 para processos de tempo real podem fazer preempção do kernelprioridades e quantum estáticos

Exemplos

60-99 para o kernelsofre preempção em pontos pré-determinados prioridades estáticas

0-59 para processos usuários prioridade variável (diminuída a cada quantum e aumentada a cada bloqueio) quantum maior para processos menos prioritários

Exemplos

Três classes de prioridade tempo real (16-31) variável (1-15) sistema (0)

Exemplos

Escalonamento no Windows NTPreempção prioridade

independe do modo de processamento a thread volta para o início da fila tempo a thread volta para o fim da fila

Exemplos

Quantum =>depende do tipo e da arquitetura

NT Workstation (15.6-30 ms) NT Server (93.6-160 ms)

Exemplos

Ajustes de prioridadeapós uma espera de E/S ou evento quanto mais lento o dispositivo maior o aumento a cada quantum a prioridade é diminuída após uma espera por entrada do usuário aumenta a prioridade para 14 por 1 quantum após um longo tempo (3-4 s) sem executar aumenta a prioridade para 15 por 1 quantum dobrado

Exemplos

Ajustes de prioridade após uma espera de E/S ou evento quanto mais lento o dispositivo maior o aumento a cada quantum a prioridade é diminuída após uma espera por entrada do usuário aumenta a prioridade para 14 por 1 quantum após um longo tempo (3-4 s) sem executar aumenta a prioridade para 15 por 1 quantum dobrado

Exemplos

Escalonamento Windos95PrioridadesAs threads no Windows 95 têm prioridades que vão de 0 à 31. A prioridade 0 é a mais baixa e é de uso exclusivo do sistema. As demais se classificam nos seguintes grupos:

Ocioso (1-6) Normal (5-11) Background (5-9) Foreground (6-11)Alta (11-15) Real Time (16-31)

Exemplos

EscalonamentoO VMM possui dois escalonadores

primary schedulertimeslice scheduler

O primary scheduler tem a função de escolher o processo, ou os processos, de maior prioridade. Todos os demais permanecerão bloquedos..

Exemplos

O timeslice scheduler divide as fatias de tempo entre os processos de maior prioridades, escolhidos pelo primary scheduler. As prioridades podem ser alteradas pelo sistema ou pelos drivers de dispositivos. Por exemplo, quando ocorre uma interrupção, a thread que lida com aquela interrupção tem sua prioridade aumentada. Depois de atender à interrupção, a prioridade da thread é novamente reduzida

Exemplos

Multitarefa Cooperativa x Preemptiva

O Windows 95 é um sistema multitarefa híbrido. Ele utiliza tanto a multitarefa cooperativa quanto a multitarefa preemptiva.

Exemplos

Multitarefa Cooperativa: um processo precisa ceder a CPU para que outro processo possa usá-la. Para abandonar a CPU um processo chama uma dessas funções: GetMessage, PeekMessage e Yield. Na multitarefa cooperativa o VMM só pode determinar o próximo processo que usará a CPU. Um programa mal escrito que não largar a CPU não poderá ser interrompido e a única solução seráreiniciar o sistema.O Windows 95 utiliza multitarefa cooperativa entre as aplicações 16 bits.

Exemplos

Multitarefa Preemptiva: o VMM pode tirar um processo da CPU a qualquer instante, sem a necessidade do processo chamar uma das funções citadas acima e ceder a CPU. Geralmente é implementada usando uma interrupção gerada por hardware (timer). Ao receber a interrupção do timer, o processador passa o controle ao SO, que executa a mudança de contexto.

Exemplos

O Windows 95 utiliza multitarefa preemptiva entre as aplicações 32 bitse entre os programas MS-DOS.Todos os programas 16 bits juntos são vistos como um único processo para fins de escalonamento preemptivo

Exemplos

SincronizaçãoO Windows 95 oferece várias funções que podem ser usadas em objetos para sincronizar processos. Esses objetos chamam-se objetos de sincronização e

incluem:

Semáforos: usados para limitar o número de acessos concorrentes a um recurso compartilhado. É criado com a função CreateSemaphore. Eventos: o estado de um objeto evento pode ser mudado para sinalizado ou não sinalizado. Para criar um objeto evento usamos a função CreateEvent. Para sinalizar ou não um objeto evento usa-se SetEvent e ResetEvent, respectivamente. Mutex: funcionando de forma similar a um semáforo, um objeto mutex (exclusão mútua) é possuído por uma thread quando esta entra na região crítica. Ele é liberado usando a função ReleaseMutex.

Exemplos

Outro mecanismo de sincronização é o Interlocked Variable Access.Usando as funções InterlockedIncrement e InterlockedDecrement, uma thread pode alterar o valor de uma variável e verificar o resultado de forma atômica, sem ser interrompida por outra thread (que poderia alterar a variável antes que a primeira tivesse a chance de verificar seu valor).

Exemplos

Teste de Multitarefa no WindowsAqui apresenta-se dois programas em pascal para mostrar que a multitarefa do ambiente Windows é não preemptiva.Execute os dois programas lado a lado para ver o funcionamento. Lembre-se de executar primeiro o numeros.exe e depois o loop.exe

Exemplos

PROGRAM Test_Multitarefa;

USES WinCrt;

VAR cont : INTEGER;BEGIN

WHILE TRUE DOFOR cont:=1 TO 9999 DO

WRITE(cont:8);END;

END.

Exemplos

PROGRAM Test_Multitarefa;USES WinCrt;BEGIN

Writeln ('Loop...');WHILE TRUE DO

{Sem Operação};END.

Bibliografia

[1] – Sistemas Operacionais – Projeto e Implementação – Andrew S. Tanenbaum, Albert S. Woodhull -Editora Bookman – 2o edição –2000.[2] – Sistemas Operacionais –Conceitos – Abraham Silberschatz e Peter Baer Galvin – Editora PrenticeHall –2000.

Fim da Unidade III