Sistemas Operacionais Processos e Threads Thiago Leite <thiago.leite@udf.edu.br>
Processo Programa em execução Todo processo é um programa? Mais: o programa é apenas parte do estado. Menos: programas podem gerar vários processos.
Abstração de processo permite execução de múltiplas tarefas (multiprogramação) prevenir que um processo interfira em outro
Cada processo possui um espaço de endereçamento recursos de auxílio ao processo O processo e seu respectivo espaço de endereçamento chamam-se imagem do núcleo
Espaço de endereçamento Programa executável Dados do programa Registradores Arquivos abertos Alarmes pendentes Listas de processos relacionados
Segmentos de um processo Unix Pilha conjunto de instruções de uma sub-rotina Heap extensão da memória BSS (Block Memory Starting with Symbol) variáveis não inicializadas Data variáveis inicializadas Texto instruções do programa
Processo Unix Área de Endereçamento
Multiprogramação vários processos em memória vários fluxos de execução processos desconhecem o momento que serão executados apenas um contador de programa real
Multiprogramação Somente um processo ativo em um determinado instante
Sistema operacional lida com a Tabela de Processos estruturas de cada processo em execução
Árvore de Processos Pode criar um ou mais processos filhos Processos filhos também podem criar processos filhos
Árvore de Processos Relação entre processos
Hierarquias de processos Em Unix todos os processos compõe uma árvore com a raíz o INIT Em Windows todos os processos são iguais
Chamadas de sistema de gestão de processos criação e término de processos requisitar mais memória ou esperar o término de outro processo
Momentos em que os processos geralmente são criados Início do sistema Execução de uma chamada de sistema de criação Requisição do usuário Início de tarefa em lote (batch)
Processos podem ser criados em Foreground Background
Processos em Foreground processos sujeitos a interação do usuário usualmente processos do terminal de comandos ou GUI
Processos em Background daemons em Unix Disk And Execution MONitor serviços em Windows
Fluxo de dados para processos em Unix entrada padrão saída de saída normal entrada Processo saída com erro saída
Término de processo Saída normal (voluntário) Saída por erro (voluntário) Erro fatal (involuntário) Cancelamento por outro processo (involuntário)
Comunicação entre processos processo envia saída para entrada de outro processo dois processos solicitando o mesmo recurso um processo depende de outro para realizar uma tarefa
Pipe Unix Saída de um processo e entrada de outro
Processos em Unix PID (Process IDentifier) identificação de um processo número utilizado para manipular os processos e enviar sinais (alarmes)
Processos em Unix Possui um UID (User IDentifier) associado Vários UIDs podem pertencer a um GID (Group IDentification) Sistemas baseados em Unix possuem um UID especial com super-poderes.
Outros elementos de processos em Unix Ambiente de execução (Ex: PATH) Diretório de trabalho Instruções do programa Registradores e Pilha de instruções Heap (alocação de memória dinâmica) Descritores de arquivos Ações de sinais Bibliotecas compartilhadas Sistema de comunicação entre processos (filas de mensagens, pipes ou memória compartilhada)
Informações sobre Processos comando ps
A Tabela de Processos em sistemas Unix-like usualmente é representada por /proc Em Linux procfs é um sistema de arquivos virtual com a Tabela de Processos
Tabela de Processos Sistema virtual de arquivos que representa a tabela de processos
Significado de alguns elementos de /proc cmdline - comando e opções associados ao processo cwd - diretório de trabalho do processo. environ - variáveis de ambiente criadas pelo processo exe - executável do processo fd - descritores de arquivos utilizados maps - regiões de memória ocupadas pelo processo
Ciclo de vida de um processo da concepção do processo ao término
Estados principais de um processo Em execução (realmente usando a CPU) Pronto (executável; esperando seu momento) Bloqueado (esperando recursos)
Ciclo de vida de um processo Mudança possíveis de estados de um processo
O momento das interrupções depende do tipo de sistema a adotar Preemptivo (processos podem ser interrompidos sem consentimento) Não-preemptivo (processos que decidem o momento de parar)
Sistema preemptivo Escalonador (invisível ao processo) Interrupções Inicialização Bloqueio
Escalonador Utiliza a Tabela de Processos Manipulador de processos (process handler) Salvar registradores Alterar ponteiro da pilha Rotinas em linguagem Assembly
Escalonamento 1. Hardware guarda contador de programa atual 2. Hardware carrega o novo contador de programa 3. Rotinas Assembly salvam os registradores 4. Rotinas Assembly carregam novos registradores 5. Serviço de interrupção em C carrega os buffers 6. Escalonador decide quem será o próximo a executar 7. Procedimentos em C retornam comando às rotinas Assembly 8. Rotina Assembly inicia o processo atual
Principais métodos de escalonamento FIFO (First-In-First-Out) ou FCFS (First-Come-First-Served) primeiro a chegar em pronto é o primeiro a ser executado SJF (Shortest Jog First), SPN (Shortest Process Next) e SRT (Shortest Remaning Time) menor tarefa será executada primeiro Por prioridade processos são associados a prioridades. Processos com prioridades iguais obedecem ao FIFO. Round-Robin ou circular revezamento com preempção
9.2 / SCHEDULING ALGORITHMS 415 0 5 10 15 20 First-come-first served (FCFS) A B C D E Round-robin (RR), q 1 Round-robin (RR), q 4 Shortest process next (SPN) Shortest remaining time (SRT) Highest response ratio next (HRRN) A B C D E A B C D E A B C D E 8 2 E FIFO ou FCFS A B C D E Exemplo de escalonamento A B C Processo Tempo de chegada Tempo de Processament o A 0 3 B 2 6 C 4 4 D 6 5
Algoritmo de tarefa mais curta (SJF) Processos de menor carga têm prioridade
D E The normalized turnaround time for process Y is way out of line compared to the Shortest process next (SPN) Shortest remaining time (SRT) A B C D E A B C D E Highest response ratio next (HRRN) Feedback q 1 Feedback q 2 i Figure 9.5 A B C D E A B C D E A B C D E Processo Tempo de chegada Exemplo de Escalonamento por SJF, SPN e SRT Exemplo de escalonamento 0 5 10 15 20 A Comparison of Scheduling Policies Tempo de Processament o A 0 3 B 2 6 C 4 4 D 6 5 E 8 2
Algoritmo por Prioridade Processos de maior prioridade possuem preferencia
Processo B possui maior prioridade de execução P = Pronto E = Execução W = Espera Exemplo de Escalonamento por Prioridade Processos de menor prioridade apenas serão escalonados se não houver outros processos de maior prioridade
Algoritmo Round-Robin ou Circular Algoritmo democrático
C D E Round-robin (RR), q 1 Round-robin (RR), q 4 Shortest process next (SPN) Shortest remaining time (SRT) A B C D E A B C D E A B C D E A B C D E Processo Tempo de chegada Tempo de Processament o A 0 3 B 2 6 C 4 4 D 6 5 E 8 2 Highest response ratio next (HRRN) Feedback q 1 A B C D E Escalonamento Round-Robin com diferentes tempos de preempção A B C D E
Métodos compostos de escalonamento Fila Múltipla (Multilevel Queue) divide a fila de prontos em várias filas separadas, com base em alguma propriedade do processo. Cada fila possui seu próprio algoritmo de escalonamento Fila Múltipla com Realimentação (Multilevel Feedback Queue) identifica dinamicamente o comportamento de cada processo, ajustando assim suas prioridades de execução e mecanismos de escalonamento.
Algoritmo Fila Múltipla diferentes filas para diferentes tipos de processos
Escalonador com Fila Múltipla diferentes filas para diferentes tipos de processos podendo os processos mudarem de fila em tempo de execução
Tipos de processos CPU Bound Uso intensivo da CPU Poucas operações de Entrada/Saída Pode monopolizar a CPU dependendo do tipo de algoritmo de escalonamento utilizado I/O Bound Orientado a Entrada/Saída Devolve deliberadamente o uso da CPU
Cenários de uso da CPU grau de multiprogramação diante diferentes tipos de processos
Threads Miniprocessos Múltiplas atividades simultâneas Compartilhamento do espaço de endereçamento Criar threads é cem vezes mais rápido
Vida e Morte Processos e Threads
Exemplo do uso de Threads Editor WYSIWYG (What You See Is What You Get) Edição e resultado simultâneo O Microsoft Word e BrOffice.org são exemplos de editores WYSIWYG
Editor de texto com três Threads cada thread de forma concorrente realizando diferentes instruções dentro do mesmo processo
Servidor Web Multithread thread dispatcher delegando funções para threads escravas
Condições de corrida processos que compartilham dados ex: spool de impressão dois processos acessam a mesma região e ocasionalmente entrem em conflito ex: dois processos acham o mesmo espaço livre e gravam no local
Condição de corrida Dois processos incluindo arquivos a serem impressos no spool ao mesmo tempo
Exclusão mútua apenas um processo poderá acessar determinado recurso por vez o código de um processo que faz uso de recurso compartilhado chama-se região crítica
Condições para acesso a dados compartilhados dois processos nunca podem estar simultaneamente em suas regiões críticas nenhum processo fora de sua região crítica poderá bloquear outro processo nenhum processo deverá esperar eternamente por sua região crítica
Condição de corrida Exclusão mútua usando regiões críticas
Espera ociosa espera para que um processo deixe sua região crítica e possa realizar o mesmo expectativa de espera por um tempo razoável
Semáforos proposto por Edsger Dijkstra em 1965 utilizada em sistemas multiprogramados variável protegida para controle de recursos compartilhados
Operações sobre semáforos são atômicas inicialização operação wait operação signal
Inicialização de semáforo recebe valor inteiro indicando quantos processos poderão ter acesso simultâneo a um recursos compartilhado
Operação wait em semáforos decrementa o valor do semáforo se esse possuir valor 0, esse é colocado em estado de espera ociosa
Operação signal em semáforos se houver um processo em espera ociosa, esse é acordado se não houver processo em espera ociosa, o valor do semáforo é incrementado
Os processos fazem uso de uma estrutura FIFO para uso do Semáforo
Mutex tipo mais simples de semáforo semáforo binário, onde o recurso está disponível ou não
Condição de corrida Chave de Acesso ao Recurso Compartilhado com Mutex
Revisão Processo Concorrência Multiprogramação Espaço de endereçamento Tabela de processos Imagem do núcleo Árvore de processos Subprocessos Chamadas de sistema (system calls) Criação de processos Foreground Background PID Processos em Unix UID GID ps kill Término de processo Shell Unix Hierarquias de processos Comunicação entre processos Estados de um processo Diagrama de estados de processo Estados de um processo em Unix Escalonador Manipulador de processos Algoritmos de Escalonamento Otimização do uso da CPU Threads Condições de corrida Região crítica Semáforos Exclusão mútua Mutex
Laboratório Comandos Bash Shell ls - listar o conteúdo de um diretório ou informações sobre um arquivo $ ls cd - navegar entre diretórios $ cd diretorio
Laboratório Comandos Bash Shell cat - exibe e concatena arquivos $ cat arquivo1 arquivo2 grep - filtra uma entrada por uma string $ grep filtro arquivo
Laboratório Comandos Bash Shell echo - imprime uma mensagem $ echo Ola Mundo rm - remove arquivos do sistema $ rm arquivo
Laboratório Comandos Bash Shell sudo - solicitar execução em modo Super Usuário $ sudo comando su - autenticar-se como Super Usuário $ su
Laboratório Uso do pipe ( ) em Bash Shell $ cat arquivo1 arquivo2 grep filtro
Laboratório Comandos Bash Shell ; - finalização de um comando comando1 ; comando2 \ - continuação de um mesmo comando em várias linhas comando \ continuaçãocomando;
Laboratório Redirecionamento de entradas e saídas em Bash Shell < - entrada padrão comando < arquivo_com_argumentos > ou >> - saída padrão comando > arquivo_saida 2> ou 2>> - saída de erro comando 2>> arquivo_erro_apendice 2>&1 - saída padrão e de erros comando 2>&1 arquivo_saidas
Laboratório Comandos em Bash Shell & - execução de um comando em segundo plano (background) comando & jobs - apresenta comandos em background [1]+ Running comando & fg - traz processo novamente para o foreground fg 1 bg - leva um processo para background bg 1
Laboratório Comandos em Bash Shell ps - obtém informações sobre os processos do sistema ps aux kill - envia um sinal para um determinado PID kill -9 1000