Sistemas Operacionais Processos e Threads Thiago Leite <[email protected]> Processos e Threads • Processo • Programa em execução • Todo processo é um programa? • Mais: o programa é apenas parte do estado. • Menos: programas podem gerar vários processos. Processos e Threads • Abstração de processo • permite execução de múltiplas tarefas (multiprogramação) • prevenir que um processo interfira em outro Processos e Threads • 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” Processos e Threads • Espaço de endereçamento • Programa executável • Dados do programa • Registradores • Arquivos abertos • Alarmes pendentes • Listas de processos relacionados Processos e Threads • Segmentos de um processo Unix • Pilha • • Heap • • variáveis não inicializadas Data • • extensão da memória BSS (Block Memory Starting with Symbol) • • conjunto de instruções de uma sub-rotina variáveis inicializadas Texto • instruções do programa Processo Unix Área de Endereçamento Processos e Threads • 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 Processos e Threads • Sistema operacional lida com a Tabela de Processos • estruturas de cada processo em execução Processos e Threads • Á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 Processos e Threads • 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 Processos e Threads • 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 Processos e Threads • 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 e Threads • Processos podem ser criados em • Foreground • Background Processos e Threads • Processos em Foreground • processos sujeitos a interação do usuário • usualmente processos do terminal de comandos ou GUI Processos e Threads • Processos em Background • daemons em Unix • • Disk And Execution MONitor serviços em Windows Processos e Threads • Fluxo de dados para processos em Unix • entrada padrão saída de • • saída normal saída com erro entrada Processo saída Processos e Threads • 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) Processos e Threads • 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 e Threads • Processos em Unix • PID (Process IDentifier) • identificação de um processo • número utilizado para manipular os processos e enviar sinais (alarmes) Processos e Threads • 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. Processos e Threads • 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” Processos e Threads • 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 Processos e Threads • 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 Processos e Threads • 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 Processos e Threads • 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) Processos e Threads • Sistema preemptivo • Escalonador (invisível ao processo) • Interrupções • Inicialização • Bloqueio Processos e Threads • Escalonador • Utiliza a Tabela de Processos • Manipulador de processos (process handler) • Salvar registradores • Alterar ponteiro da pilha • Rotinas em linguagem Assembly Processos e Threads • 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 Processos e Threads • Principais métodos de escalonamento • FIFO (First-In-First-Out) ou FCFS (First-Come-First-Served) • • SJF (Shortest Jog First), SPN (Shortest Process Next) e SRT (Shortest Remaning Time) • • menor tarefa será executada primeiro Por prioridade • • primeiro a chegar em pronto é o primeiro a ser executado 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 0 5 10 15 A B C D E First-come-first served (FCFS) A B C D E Round-robin (RR), q ! 1 A B C D E Round-robin (RR), q ! 4 Shortest process next (SPN) A B C D E Processo Tempo de chegada Tempo de Processament o A B C D E 0 2 4 6 8 3 6 4 5 2 FIFO ou FCFS Shortest remaining time (SRT) A B C D E Exemplo de escalonamento Highest response ratio next (HRRN) A B C 20 415 Algoritmo de tarefa mais curta (SJF) Processos de menor carga têm prioridade D E 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 Feedback q!1 Feedback q ! 2i A B C D E Processo Tempo de chegada Tempo de Processament o A B C D E 0 2 4 6 8 3 6 4 5 2 A B C D E Exemplo de Escalonamento por SJF, SPN e SRT 0 5 escalonamento 10 Exemplo de Figure 9.5 15 20 A Comparison of Scheduling Policies The normalized turnaround time for process Y is way out of line compared to the 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 A B C D E Round-robin (RR), q ! 1 A B C D E 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 Processo Tempo de chegada Tempo de Processament o A B C D E 0 2 4 6 8 3 6 4 5 2 A B C D E Escalonamento Round-Robin Feedback q!1 com Adiferentes tempos de preempção B C D E Processos e Threads • 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 Processos e Threads • 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 Processos e Threads • 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 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 Processos e Threads • 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 Processos e Threads • 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” Processos e Threads • 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 Processos e Threads • 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 Processos e Threads • Semáforos • proposto por Edsger Dijkstra em 1965 • utilizada em sistemas multiprogramados • variável protegida para controle de recursos compartilhados Processos e Threads • Operações sobre semáforos são atômicas • inicialização • operação wait • operação signal Processos e Threads • Inicialização de semáforo • recebe valor inteiro indicando quantos processos poderão ter acesso simultâneo a um recursos compartilhado Processos e Threads • Operação wait em semáforos • decrementa o valor do semáforo • se esse possuir valor 0, esse é colocado em estado de espera ociosa Processos e Threads • 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 Processos e Threads • Os processos fazem uso de uma estrutura FIFO para uso do Semáforo Processos e Threads • 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 • PID • Estados de um processo em Unix • Concorrência • Processos em Unix • Multiprogramação • UID • Escalonador • Espaço de endereçamento • GID • Manipulador de processos • Tabela de processos • ps • Algoritmos de Escalonamento • Imagem do núcleo • kill • Otimização do uso da CPU • Árvore de processos • Término de processo • Threads • Subprocessos • Shell Unix • Condições de corrida • Chamadas de sistema (system calls) • Hierarquias de processos • Região crítica • Comunicação entre processos • Semáforos • Estados de um processo • Exclusão mútua • Diagrama de estados de processo • Mutex • • • Criação de processos Foreground Background 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