Capítulo 2 Processos e Threads 1 Processos e threads 1. Processos 2. Threads 3. Comunicação inter processos (IPC) 4. Problemas clássicos de IPC 5. Escalonamento (Scheduling) 2 1
Processos: O modelo de processos Multiprogramação de 4 programas Modelo conceitual de 4 processos sequenciais independentes apenas um programa ativo em um dado instante 3 Criação de Processos 4 Principais eventos que causam a criação de processos 1. Inicialização do sistema Execução de um sistema de criação de processos 2. Solicitação do usuário para a criação de um processo 3. Início de um processamento em lote 2
Término de processos Condições que terminam um processo 1. Normal (voluntária) 2. Erro (voluntária) 3. Erro Fatal (involuntária) 4. Morto por outro processo (involuntária) 5 Hierarquias de Processos Pai cria um processo filho, processos filhos podem criar seus próprios processos Formam uma hierarquia UNIX denomina um grupo de processos (process group) Windows não tem o conceito de hierarquia de processos todos os processos são criados iguais 6 3
Estados de um processos 7 Sete Estados de um Processo 8 4
Estados de um processos 9 Camada inferior de Sos estruturados à processos administram interrupções e escalonamento Acima desta camada estão os processos sequenciais Administração de Processos e Recursos Um SO mantém as seguints tabelas Memoria E/S Arquivos Processos 10 5
Implementação de Processos 11 Campos de uma entrada em uma tabela de processos Imagem do processo (constituentes do processo) Programa do Usuário (texto) Dados do Usuários Pilha(s) para chamadas de procedimentos e passagem de parâmetros PCB - Process Control Block (contexto de execução) Dados requeridos (atributos dos processos) pelo SO para controlar o processo: Informação de identificação Informação de estado Informação de Controle 12 6
Implementação de Processos Esquema do que a camada inferior do SO faz quando uma interrupção ocorre 13 Imagens de processos na memória virtual 14 7
Threads: O modelo de Treads 15 (a) 3 processos cada um com uma thread (b) 1 processo com 3 threads Threads: O modelo de Treads 16 Itens compartilhados por todas as threads em um processos Itens privados de cada thread 8
Threads: O modelo de Treads Cada thread tem sua própria pilha 17 Thread Usage (1) Um processador de texto com 3 threads 18 9
Uso de Thread 19 Um Web server multithreaded Threads: O modelo de Treads (a) thread Dispatcher (b) thread trabalhadora 20 10
Threads: O modelo de Treads Três formas de construir um servidor 21 Implementando Threads no espaço do usuário 22 Um pacote de threads no nível do usuário 11
Implementando Threads no Kernel 23 Um pacote de threads administrada pelo kernel Implementações Híbridas 24 12
Ativações do Escalonador (Scheduler) Objetivo imitar a funcionalidade das threads do kernel obter os ganhos de performance das threads do espaço do usuário Evita transições desnecessárias de user/kernel O Kernel atribui processadores virtuais para cada processo permite ao sistema de runtime alocar threads aos processadores Problema: Dependência fundamental no kernel (camada inferior) procedimentos chamantes no espaço do usuário (camadas superiores) 25 Pop-Up Threads 26 Criação de uma nova thread quando uma mensagem chega (a) antes da chegada da mensagem (b) depois da chegada da mensagem 13
Transformando um código Single-Threaded em Multithreaded Conflitos entre as threads em relação ao uso de uma variável global 27 Transformando um código Single-Threaded em Multithreaded 28 Threads podem ter variáveis globais privadas 14
comunicação entre processos Condições de corrida Dois processos querem ter acesso à memória compartilhada ao mesmos tempo 29 30 Regiões críticas Quatro condições para proporcionar exclusão mútua 1. Dois Processos NÃO podem estar simultaneamente nas suas regiões críticas 2. Nenhuma suposição pode ser feita em relação à velocidade e número de CPUs 3. Nenhum processo fora de sua região crítica pode bloquear outro processo 4. Nenhum processo deve esperar para sempre para entra em sua região crítica 15
Regiões Críticas Exclusão Mútua Usando Regiões Críticas 31 Esclusão Mútua com Espera Ocupada 32 16
Esclusão Mútua com Espera Ocupada 33 Solução de Peterson Esclusão Mútua com Espera Ocupada 34 Uso da instrução TSL 17
Sleep and Wakeup 35 Produtor Consumidor com uma condição de Corrida Fatal Semáforos 36 Produtor-Consumidor usando Semáforos 18
Mutexes Implementação de mutex_lock e mutex_unlock 37 Monitores 38 19
Monitor 39 Processos em espera ficam na fila de entrada ou em uma fila de condição Um processo se coloca em uma fila de condição pela chamada cwait(cn) csignal(cn) traz um processo da fila de condição cn Consequentemente csignal(cn) bloqueia o processo e o coloca na fila urgente (a menso que csignal seja a última operação do monitor) Monitores Produtor Consumidor com monitores 40 apenas um procedimento do monitor ativo por vez buffer tem N entradas 20
Monitores: Produtor-Consumidor usando Java 41 42 l Produtor-Consumidor usando Java 21
Passagem de Messagens 43 Produtor Consumidor com N mensagens Barreiras 44 Uso de uma barreira processos se aproximando de uma barreira todos os processos exceto um bloqueados em uma barreira último processo chega, todos podem passar 22
Filósofos Jantando 45 Filósofos Jantando: uma não solução 46 23
47 Solução para o problema do jantar dos filósofos (parte 1) 48 Solução para o problema do jantar dos filósofos (parte 2) 24
49 Uma solução para o problema dos leitores e escritores O problema do Barbeiro Dorminhoco 50 25
51 Solução para O problema do Barbeiro Dorminhoco Escalonamento: Introdução Rajadas de uso de CPU alternam-se com períodos de espera por entrada e saída um processo limitado por CPU um processo limitado por E/S 52 26
53 Objetivos dos Algoritmos de Escalonamento Escalonamento com 1 processador 54 27
Escalonamento de CPU Concentramos no problema de escalar o uso de um único processador entre todos os processos existentes no sistema Objetivo é atingir: Alta utilização do processador Alto throughput número de processos completados por unidade de tempo baixo tempo de resposta tempo entre a submissão de uma solicitação e o início da resposta 55 Classificação das Atividades do Escalonador 56 Longo prazo: qual processo admitir Médio prazo: qual processo será swap in ou out Curto prazo: qual processo pronto será executado a seguir 28
Diagrama de fila para escalonamento 57 Escalonamento a longo prazo 58 Determina quais programas são admitidos no sistema para processamento Controla o grau de multiprocessamento Se mais processos são admitidos: Menos provável que todos processos estejam bloqueados Melhor uso da COU Cada processo tem uma fração menor da CPU O escalonador de longo prazo pode tentar manter uma mistura de processos limitados por CPU e por E/S 29
Escalonamento de médio prazo Decisões de swap são baseadas na necessidade de administrar multiprogramação Feita por software de administração de memória 59 Escalonamento de curto prazo Determina qual processo será executado a seguir. (também chamada de escalonamento de CPU) É o assunto deste item O escalonador de curto prazo é chamado de dispatcher É invocado quando ocorre um evento que pode levar à escolha de outro processo para execução : Interrupção do clock Interrupção de I/O Chamadas do sistema operacional e traps Sinais (signal) 60 30
Critérios de escalonamento a longo prazo Orientados ao usuário Tempo de resposta: Tempo entre a submissão de uma solicitação ao início da resposta Tempo de Turnaround: Tempo entre a submissão de uma solicitação ao seu término Orientados ao sistema Utilização do processador Justiça throughput 61 Prioridades 62 Implementadas por filas de Pronto múltiplas para representar cada nível de prioridade O Escalonador sempre escolhe um processo de maior prioridade sobre um de menor prioridade Processos de menor prioridade podem passar fome Permite que um processo mude sua prioridade baseado na sua idade ou história de execução 31
Caracterização de políticas de escalonamento A função de seleção: determina qual processo na fila de pronto será selecionado para a próxima execução O modo de decisão: especifica o instante no tempo no qual a função de seleção é utilizada Não preemptivo Uma vez que um processo esteja executando, ele continuará até que termine ou bloqueie (a si próprio) para IO Preemptivo Processo em execução pode ser interrompido e movido para o estado Pronto pelo SO Permite melhor serviço pois nenhum processo pode monopolizar o processador por muito tempo 63 O ciclo CPU-I/O 64 Observamos que os processos requerem o uso do processador e I/O de uma maneira repetitiva Cada ciclo consiste de uma rajada de CPU (burst) (freqüentemente de 5 ms) seguido por uma rajada de I/O (normalmente mais longa) Um processo termina em uma rajada de CPU Processos limitados por CPU têm rajadas de CPU mais longas que processos limitados por I/O 32
Exemplos de execução para discutir políticas de escalonamento Process 1 2 3 4 5 Arrival Time 0 2 4 6 8 Service Time 3 6 4 5 2 65 Tempo de Serviço = tempo total de processador requerido em um ciclo (CPU-I/O) Jobs com tempo de serviço longo são limitados por CPU e são ditos tarefas longas ( long jobs ) Primeiro a chegar primeiro a ser servido (First Come First Served (FCFS)) 66 Função de seleção: o processo que está esperando a mais tempo na fila de Pronto (daí, FCFS) Modo de decisão: não preemptivo um processo executa até que se bloqueie 33
Desvantagens do FCFS Um processo que não faça I/O irá monopolizar o processador Favorece processos limitados por CPU processos limitado por I/O tem que esperar até que os limitados por CPU terminem Podem ter que esperar até mesmo quando o seu I/O foi completado (mal uso de dispositivos) pode-se manter os dispositivos de I/O mais ocupados dando mais prioridade aos processos limitados por I/O 67 Round-Robin Função de seleção : o processo que está esperando a mais tempo na fila de Pronto 68 Modo de decisão preemptivo um processo executa até que sua fatia de tempo expire (quantum, tipicamente entre 10 e 100 ms) então, uma interrupção de relógio (clock) ocorre e o processo em execução é colocado na fila de pronto 34
Quantum de tempo para Round Robin 69 Deve ser substancialmente maior que o tempo requerido para administrar a interrupção de relógio e escalonamento deve ser maior que a interação típica (mas não muito maior para evitar penalizar processos limitados por I/O) Round Robin: crítica 70 Favorece processos limitados por CPU Um processo limitado por I/O usa a CPU por um tempo menor que seu quantum e então é bloqueado esperando por I/O Um processo limitado por CPU executa por todo seu quantum e é colocado de volta na fila de pronto (consequentemente fica na frente dos processos bloqueados) Uma solução: Round Robin virtual Quando um I/O é completado, o processo bloqueado é colocado em uma fila auxiliar que tem preferência sobre a fila de Pronto principal Uma processo escalado a partir da fila auxiliar não roda mais que o quantum básico menos o tempo gasto rodando desde que foi selecionado da fila Pronto 35
Fila para Round Robin Virtual 71 Menor Processo Próximo (Shortest Process Next (SPN) ou Shortest Job First) 72 Função de seleção: o processo com a menor rajada de CPU esperada Modo de Decisão: não preemptivo processos limitados por I/O serão selecionados primeiro Sempre produz tempo de resposta médio mínimo 36
Menor Processo Próximo A B C D 8 4 4 4 B C D A 4 4 4 8 Turnaround: 8, 12, 16 e 20 Média: 14 Turnaround: 4, 8, 12 e 10 Média: 11 Geral: (4a+3b+2c+d)/4 (a,b,c,d término do proc) Seria bom se fosse usado para processos interativos também Precisamos estimar o tempo de processamento requerido para cada processo (rajada de CPU) at 0 + (1-a)T 1, a escolhido 73 Estimando a rajada de CPU requerida Seja T[i] o tempo de execução para a i-ésima instância deste processo: a duração real da i-ésima rajada deste processo Seja S[i] o valor predito para a i-ésima rajada de CPU deste processo. A escolha mais simples é: S[n+1] = (1/n) Σ_{i=1 até n} T[i] Para evitar recalcular a soma inteira, podemos rescrever como: S[n+1] = (1/n) T[n] + ((n-1)/n) S[n] Porém, esta combinação dá peso igual a cada instância No entanto, instâncias mais recentes são mais prováveis de refletir comportamento futuro 74 37
Estimando a rajada de CPU requerida Uma técnica comum para isto é usar média exponencial S[n+1] = α T[n] + (1-α) S[n] ; 0 < α < 1 Mais peso é colocado em instâncias recentes sempre que α > 1/n Expandindo esta equação vemos que os pesos de instâncias passadas decrescem exponencialmente S[n+1] = αt[n] + (1-α)αT[n-1] +... (1-α) {i} αt[n-i] +... + (1-α) {n} S[1] o valor predito da primeira instância S[1] não é calculado; normalmente é definido como 0 (zero) para dar prioridade a novos processos 75 Coeficientes Decrescentes Exponencialmente 76 38
Coeficientes Decrescentes Exponencialmente 77 Aqui S[1] = 0 para dar alta prioridade a novos processos Média exponencial acompanha mudanças no comportamento de processos muito mais rapidamente que médias simples Menor Processo Próximo : crítica Possibilidade de fome para processos mais longos caso haja um fluxo contínuo de processos curso Falta de preempção não é adequado em um ambiente de tempo compartilhado Processos limitados por CPU obtém menor prioridade (como deveriam) mas um processo realizando I/O ainda pode monopolizar a CPU se for o primeiro a entrar no sistema Implicitamente incorpora prioridades: processos mais curtos são prioritários 78 39
Escalonamento com Filas Múltiplas (ou multi-nível) com feedback 79 Escalonamento Preemptivo com prioridades dinâmicas Diversas filas Pronto com prioridades decrescentes: P(RQ0) > P(RQ1) >... > P(RQn) Novos processos são colocados em RQ0 Quando atingem o quantum de tempo são colocados em RQ1, se atingem novamente, são colocados em RQ2... Até atingirem RQn Processos limitados por I/O permanecem em filas de alta prioridade. Processos limitados por CPU irão cair O escalonador escolhe um processo em RQi apenas se RQi-1 até RQ0 estão vazias Consequentemente, processos longos podem passar fome Escalonamento em Filas Múltiplas com feedback 80 FCFS é usado em cada fila exceto na de menor prioridade onde Round Robin é usado 40
Quantum para escalonamento com feedback 81 Com um quantum fixo, o tempo de turnaround para processos longos pode se estender de forma alarmante Para compensar, podemos aumentar o quantum de acordo com a profundidade da fila Ex: quantum de RQi = 2^{i-1} Processos mais longos ainda podem passar fome Solução possível: promover a prioridade do processo após certo tempo Qual algoritmo é melhor? Depende da situação! Carga do sistema Suporte de hw para o dispatcher Método de avaliação 82 41
83 Escalonamento em sistemas em lote Um exemplo de um escalonamento shortest job first 84 42
Escalonamento em sistemas em lote 85 Escalonamento em 3 Níveis Escalonamento em sistemas Interativos Round Robin lista de processos prontos (runnable) lista de processos prontos depois que B usa o seu quantum 86 43
Escalonamento em sistemas Interativos 87 Um escalonamento com quatro classes de prioridades Escalonamento em sistemas de tempo real Sistema de tempo real escalonável Dados m eventos periódicos 88 evento i ocorre dentro do período P i e requer C i segundos Então, a carga só pode ser administrada se m i= 1 Ci P i 1 44
Política versus Mecanismo Separa o que é permitido fazer de como é feito um processo saber quais de suas threads filhas são importantes e precisam de prioridades Algoritmo de escalonamento parametrizado mecanismo no kernel 89 Parâmetros fornecidos por processos do usuários política definida por processos dos usuários Escalonamento de Threads 90 Possível escalonamento para threads no nível do usuário 50-msec quantum de processo threads rodam em rajadas de 5 msec/cpu 45
Escalonamento de Threads 91 Possível escalonamento para threads de kernel 50-msec quantum de processo threads rodam em rajadas de 5 msec/cpu 46