Escalonamento Prof. Alexandre Monteiro Recife ‹#› Contatos Prof. Guilherme Alexandre Monteiro Reinaldo Apelido: Alexandre Cordel E-mail/gtalk: [email protected] [email protected] Site: http://www.alexandrecordel.com.br/fbv Celular: (81) 9801-1878 Mais uma vez: O que é um SO? É uma Máquina Estendida •Oculta os detalhes complicados que têm quer ser executados •Apresenta ao usuário uma máquina virtual, mais fácil de usar É um Gerenciador de Recurso •Cada programa tem um tempo com o recurso - Ex.: compartilhamento de CPU •Cada programa tem um espaço no recurso - Ex.: compartilhamento de memória História dos SO’s Primeira geração: 1945 - 1955 •Válvulas, painéis de programação Segunda geração: 1955 - 1965 •transistores, sistemas em lote Terceira geração: 1965 – 1980 •CIs (circuitos integrados) e multiprogramação Quarta geração: 1980 – presente •Computadores pessoais Hoje: onipresença – computação ubíqua Mono vs. Multi SO Monoprogramado/tarefa ou Multiprogramado/tarefa: são os SO que executam apenas um programa do usuário de cada vez ou que executam dois ou mais programas aparentemente em simultâneo. Este é o conceito de Paralelismo Concorrente. SO Monoprocessamento ou Multiprocessamento: são os SO que executam vários processos compartilhando memória utilizando apenas um processador (mono) ou vários (multi) processadores, este é o conceito de Paralelismo Real. SO Monousuário ou Multiusuário: o SO controla e considera apenas um usuário por vez ou o SO identifica usuários diferentes por suas contas (username e senha) e permite perfis diferentes. SO Monothread ou Multithread: um processo um thread ou um processo dividido em vários threads. Registradores Registradores de propósito geral: armazena variáveis importantes e resultados temporários Contador de Programas: contém o endereço de memória da próxima instrução a ser buscada. Depois que busca é atualizado para apontar a próxima instrução. Ponteiro de Pilha: aponta para o topo da pilha atual na memória. A pilha contém uma instrução PSW (program status word – palavra de estado do programa): contém os bits de códigos de condições de instruções de comparação, pelo nível de prioridade da CPU. Conceitos Básicos Chamadas ao Sistema (System Call) Modo usuário: •Aplicações não têm acesso direto aos recursos da máquina, ou seja, ao hardware; •Quando o processador trabalha no modo usuário, a aplicação só pode executar instruções sem privilégios, com um acesso reduzido de instruções; •Por que? Para garantir a segurança e a integridade do sistema; 7 Conceitos Básicos Chamadas ao Sistema (System Call) Modo Kernel: •Aplicações têm acesso direto aos recursos da máquina, ou seja, ao hardware; •Operações com privilégios; •Quando o processador trabalha no modo kernel, a aplicação tem acesso ao conjunto total de instruções; •Apenas o SO tem acesso às instruções privilegiadas; 8 Conceitos Básicos Chamadas de Sistema TRAP: instrução que permite o acesso ao modo kernel; Exemplo: •Instrução do UNIX: count = read(fd,buffer,nbytes); Arquivo a ser lido Bytes a serem lidos Ponteiro para o Buffer O programa sempre deve checar o retorno da chamada de sistema para saber se algum erro ocorreu!!! 9 Chamadas ao Sistema Endereço 0xFFFFFFFFF Retorno TRAP 5 Colocar o código para read no registrador 6 READ 10 4 Espaço do Usuário Biblioteca do Procedimento 3 2 1 Incrementa SP 11 Comando read Empilha fd Empilha &buffer Empilha nbytes Chamada ao Procedimento READ 9 Tabela de ponteiros para Chamadas Kernel SO Endereço 0 Dispatch 7 8 Manipulador de Chamadas 10 Introdução a Processos Um processo é formado por três partes •Contexto de Hardware •Contexto de Software •Espaço de endereçamento Estas três partes mantêm todas as informações necessárias à execução de um programa Quando um processador troca de processo caracteriza uma mudança de Contexto de Execução Estrutura de um Processo Processo: Estrutura Detalhada Estado do Processo Para haver o compartilhamento da CPU em um sistema multiprogramável, os processos passam por diferentes estados ao longo do seu processamento • A troca de estado ocorre em função de eventos gerados pelo próprio processo (voluntário) ou pelo SO (involuntário) Os estados em que um processo pode se encontrar variam de sistema para sistema mas, de uma maneira geral, pode-se citar: • Executando (Running) • Pronto (ready) • Bloqueado (blocked) – Também conhecido com Espera (Wait) • Terminado (exit) Transições Possíveis entre Estados PCB - Bloco de Controle do Processo Algumas informações típicas que o PCB possui são: • Identificador de processo (pid); • Estado atual do processo; • Cópia do conteúdo do registrador contador de programa (PC – Program Counter); • Cópia do conteúdo dos demais registradores do processador; • PID do processo pai (parent process); • Ponteiro para a pilha; • Tempo em que o processo iniciou; • Tempo utilizado do processador; • Informações sobre diretório raiz e de trabalho. OBS: Os PCBs de todos os processos residem na memória principal em uma área exclusiva do SO Troca de Contexto Término de Processos Condições que levam ao término de processos 1. Saída normal (voluntária) 2. Saída por erro (voluntária) 3. Erro fatal (involuntário) 4. Cancelamento por um outro processo (involuntário) 18 Threads (ou Processo Leve) Thread é uma unidade básica de utilização da CPU, que consiste em: 1. Apontador de instruções 2. Conjunto de registradores 3. Espaço de pilha Uma Thread compartilha com Threads irmãs: 1. Área de código 2. Área de Dados 3. Recursos do SO (coletivamente conhecidos como tarefas) Um Processo tradicional é equivalente uma tarefa com uma única Thread. Interação entre Threads TCB 1 TCB 2 Ambiente Multithread Cada thread possui seu próprio contexto de HW, porém divide o mesmo contexto de SW e espaço de endereçamento com os demais threads do processo Thread Semelhante a processos, threads são implementados internamente através de uma estrutura de dados Bloco de Controle de Thread (Thread Control Block - TCB) •O TCB armazena, além do contexto de HW, dados exclusivos sobre o thread, como prioridade e estado de execução •PCB X TCB ? Vantagens de Mutithreading Tempo de criação/destruição de threads é inferior ao tempo de criação/destruição de processos Chaveamento de contexto entre threads é mais rápido em tempo que chaveamento entre processos Como threads compartilham o descritor do processo que as contem, elas dividem o mesmo espaço de endereçamento o que permite a comunicação por memória compartilhada, sem interação com o núcleo Comunicação Interprocessos Os processos podem precisar trocar informações entre eles ou podem solicitar a utilização de um mesmo recurso simultaneamente, como arquivos, registros, dispositivos de E/S e memória. O compartilhamento de recursos entre vários processos pode causar situações indesejáveis e, dependendo do caso, gerar o comprometimento da aplicação. O Sistema Operacional tem a função de gerenciar e sincronizar processos concorrentes, com o objetivo de manter o bom funcionamento do sistema. Comunicação Interprocesso Condições de Disputa/Corrida Dois processos querem ter acesso simultaneamente à memória compartilhada (Ex: spool de Impressão ) 25 Regiões Críticas Para se evitar uma condição de corrida é preciso definir métodos que proíba que mais de um processo acesse uma determinada área de memória compartilhada ao mesmo tempo. Esses métodos são conhecidos como exclusão mútua ou MUTEX (MUTual EXclusion). A parte do programa no qual o processo acessa memória compartilhada é chamada seção crítica ou região crítica. Dessa forma, a solução para se evitar uma condição de corrida seria organizar os problemas de tal forma que nenhum de dois ou mais processos estivessem em suas regiões críticas ao mesmo tempo. Regiões Críticas (2) Espera Ativa Exclusão mútua usando regiões críticas proposta de exclusão mútua na qual, um processo quando está acessando sua região crítica, outro processo que deseja entrar também em região crítica fica aguardando. 27 Algoritmos de Exclusão Mútua MUTEXES Semáforo Monitores Produtor x Consumidor Dormir x Acordar Troca de Mensagens Barreiras Jantar dos Filósofos Barbeiro Sonolento Leitor xEscritor Objetivos do Escalonamento Maximizar a utilização do processador Maximizar o nº de processos executados por unidade de tempo (throughput) Minimizar o tempo total de execução de um processo (turnaround) Minimizar o tempo de espera (na lista de processos aptos) Minimizar o tempo de resposta decorrido entre a requisição e sua realização Características de Escalonamento Justiça (fairness) • Todos os processos têm chances iguais de uso dos processador Eficiência • Taxa de ocupação do processador ao longo do tempo Tempo de Resposta • Tempo entre a ocorrência de um evento e o termino da ação correspondente Turnaround • “Tempo de resposta” para usuários em batch • Minimizar o tempo que usuários batch devem esperar pelo resultado Throughput • No. de “jobs” (processos) executados por unidade de tempo Situações típicas para execução do escalonador Depende se o escalonador é preemptivo ou não- preemptivo, se considera prioridades ou não: Sempre que a CPU estiver livre e houver um processo apto para executar Criação e término de processos Um processo de mais alta prioridade ficar pronto para executar Interrupção de tempo • Processo executou por um período de tempo máximo permitido Interrupção de E/S Interrupção de Falta de Página em Memória • Endereço acessado não está carrego na memória (memória virtual) Interrupção por erro Chaveamento de Contexto (Dispatcher) Níveis de escalonamento Longo Prazo Médio Prazo Curto Prazo Diagrama de Escalonamento Filas de Escalonamento High-level (Longo Prazo) • Decide quantos programas são admitidos no sistema • Aloca memória e cria um processo • Controla a long-term queue Short-term (Curto prazo) • Decide qual processo deve ser executado • Controla a short-term queue I/O (Médio prazo) • Decide qual processo (com I/O) pendente deve ser tratado pelo dispositivo de I/O • Controla a I/O queue Filas de Escalonamento Short-term scheduling Process request Longterm queue High-level scheduling Interrupt of process Interrupt from I/O Interrupt Handler Shortterm queue CPU I/O I/O queue I/O I/O queue I/O I/O queue FIM I/O scheduling Algoritmos de Escalonamento Algoritmos Não-Preemptivos (cooperativos) • First-In-First-Out (FIFO) ou First-Come-First-Served (FCFS) • Shortest Job First (SJF) ou Shortest Processo Next (SPN) Algortimos Preemptivos • Round Robin (Circular) • Baseado em Prioridades • Híbridos - Partições de Lote (Batch) - MFQ - Multiple Feedback Queue Existem outros algoritmos de escalonamento • High Response Ratio Next (HRRN) • Shortest Remaining Time (SRT) • Ect... Escalonamento Preemptivo Permite a suspensão temporária de processos Quantum ou time-slice: período de tempo durante o qual um processo usa o processador a cada vez Preempção T12 mP1 T11 1 T0 41 51 T22 70 T0 90 121 t Quantum Quando uma tarefa recebe o processador, o núcleo ajusta um contador de ticks que essa tarefa pode usar, ou seja, seu quantum é definido em número de ticks. A cada tick, o contador é decrementado; quando ele chegar a zero, a tarefa perde o processador e volta à fila de prontas. Troca de Contexto 5 ms Round Robin Cada processo recebe um tempo limitado (time slice = quantum) para executar um ciclo de processador Fila de processos aptos é circular Necessita de relógio para delimitar as fatias de tempo (interrupção de tempo/relógio) ∞) obtem-se o comportamento de um escalonador FIFO. Se o (quantum = Tamanho do quantum igual prejudica processos I/O bound (prioridade) Políticas de Escalonamento First-In First-Out (FIFO) Shortest Job First Shortest Job First Algoritmo ótimo, fornece o menor tempo médio de espera para um conjunto de processos Processos I/O bound são favorecidos Dificuldade é determinar o tempo do próximo ciclo de CPU de cada processo, porém: • Pode ser empregado em processos batch (long term scheduler) • Prever o futuro com base no passado Escalonamento em Sistemas Interativos Um algoritmo de escalonamento com quatro classes de prioridade 45 Como definir a Prioridade? Prioridade Estática: Processo é criado com determinada prioridade e esta é mantida durante todo o processo. Prioridade Dinâmica: Prioridade é ajustada de acordo com o estado de execução do processo e/ou sistema. Ex. ajustar a prioridade em função da fração de quantum que foi realmente utilizada pelo processo. • q = 100ms • Processo A = 2ms -> nova prioridade = 1/0.02 = 50 • Processo B = 50ms -> nova prioridade = 1/0.5 = 2