Universidade Estadual de Mato Grosso do Sul – UEMS Curso de Licenciatura em Computação Sistemas Operacionais Processos Prof. José Gonçalves Dias Neto [email protected] Introdução O SO é o responsável por controlar o ambiente multiprogramado, organizando o uso concorrente do processador; Um programa em execução deve sempre estar vinculado a um processo; Através da gerência de processos os programas podem alocar recursos, compartilhar dados, trocar informações e sincronizar execuções; Estrutura do Processo O processador busca a instrução a ser executada na memória principal, armazena-a no registrador de instruções, decodifica seus bits e realiza a instrução; O processador executa instruções em saber a qual programa esta pertence; Para que não haja problemas na concorrência entre programas, é necessário salvar informações sobre cada programa interrompido; Conceito de Processo: “Conjunto necessário de informações para que o sistema operacional implemente a concorrência de programas.” Estrutura do Processo Um processo é formado por três partes: Contexto de Hardware, Contexto de Software; Espaço de Endereçamento; Contexto de Hardware Armazena o conteúdo dos registradores gerais da CPU, além do PC, Stack Pointer (SP), registrador de Status; Quando um processo está em execução, seu contexto está armazenado nos registradores do processador; Quando o processo pára de executar, o sistema salva estas informações no contexto de hardware; O SO efetua a multiprogramação, apenas salvando o contexto de processos que devem parar sua execução e carrega o contexto de hardware do próximo processo a utilizar CPU. Troca de contexto Contexto de Software No contexto de software são especificados limites e características dos recursos que podem ser alocados pelo processo. O Contexto de software é composto por três grupos de informações sobre o processo: Identificação Quotas; Privilégios; Contexto de Software - Identificação Cada processo criado recebe uma identificação única PID – Process Idenfitication); Com o PID o SO ou outros processos podem referenciar, consultar o contexto e/ou alterar características; O processo também recebe um UID (User Identification), ou seja, a identificação do usuário ou processo que o criou; Apenas objetos que possuem as mesmas UID do usuário podem ser acessados; Contexto de Software - Quotas São os limites de cada recurso do sistema que um processo pode alocar; Número máximo de arquivos abertos simultaneamente; Tamanho máximo de memória principal e secundária que o processo pode alocar; Número máximo de operações de E/S pendentes Tamanho máximo de buffer para operações de E/S Número máximo de processos, subprocessos e threads que podem ser criados; Contexto de Software - Privilégios Indicam as ações que um processo pode fazer em relação a ele mesmo, aos demais processos e ao sistema operacional; Próprio processo / Demais processos: Prioridade, limites de alocação de memória, Sistema Operacional: Desativação do SO, regras de segurança, criação de outros processo privilegiados, Os SO geralmente criam uma conta com todos esses privilégios: root, system, administrador... Espaço de endereçamento É a área de memória que os dados e instruções do programa são armazenados; Cada processo possui seu próprio espaço de endereçamento que deve ser protegido do acesso pelos demais processos; Veremos mais sobre isso em “Gerência de memória” Estrutura geral do processo Bloco de Controle de Processo (BCP) Process Control Block (PCB); O SO cria o processo através da estrutura de PCB; Todo processo ativo deve possuir seu PCB residente em memória principal no espaço do sistema operacional; Toda a gerência de processos é realizada por meio de chamadas de rotinas de sistema operacional; Comando ps (process status) Mostra os processos que estão em execução no sistema operacional; Parâmetros do comando ps: -a: todos os processos criados; -u: nome do usuário e hora da criação; -x: processos que não são controlados pelo terminal; Saída do comando ps USER - Nome do usuário dono do processo. UID - Número de identificação do usuário dono do processo. PID - Número de identificação do processo. PPID - Número de identificação do processo pai de cada tarefa. PRI - Número de prioridade da tarefa. (Números altos são prioridades baixas). NI - Valor preciso da prioridade da tarefa. %CPU - O consumo de processamento do processo. %MEM - O consumo de memória do processo. SIZE - Tamanho do código da tarefa em kilobytes. RSS - Soma total da memória física usada pelo processo, em kilobytes. WCHAN - Endereço ou nome da função do kernel da tarefa que está atualmente suspensa. STAT - Estado do processo: S - Suspenso, R - em Execução, T - Interrompido, Z – Terminado; TTY - Terminal onde são executados os processos. TIME - Tempo total da CPU usado pelo processo desde que foi iniciado. COMMAND - Nome do comando do processo. www.vivaolinux.com.br Comando TOP Mostra a atividade do processador em tempo real, exibindo as tarefas que estão sendo executadas na CPU. Processos mais dispendiosos aparecem no topo; Parâmetros do comando TOP: -d [tempo] - Atualiza a tela após o tempo especificado. -s - Executa o top em modo seguro -i - Executa o top ignorando processos zumbis. -c - Mostra a linha de comando ao invés do nome do programa. Comando pstree Visualizar os processos em forma de árvore, tornando mais visível as relações entre eles. Utilizado quando se deseja identificar os processos pais e filhos de cada processo; Estados do processo Execução (running): Está sendo processado pela CPU; Em sistemas monoprocessados apenas um processo estará neste estado por vez; Em sistemas multiprocessados existe a possibilidade de mais de um processo estar em execução ao mesmo tempo; Pronto (ready): Está aguardando para ser processado; No SO existe um fila de processos aguardando serem processados (Fila de Prontos); Quem escolhe qual processo ganhará CPU primeiro é a politica de escalonamento adotada pelo SO; Estados do processo Espera (wait) / Bloqueados (block): São processos que aguardar a ocorrência de de eventos externos, como o termino de outro processo, ou a liberação de recursos como dispositivos de E/S; Este estado existe pois o acesso e retorno de dispositivos de E/S é demorado; Processos neste estado também são organizados em uma fila denominada fila de bloqueados, geralmente esta fila é subdividida em filas segundo o tipo de evento associado; Estados do processo Mudança de estado do processo Existem 4 (quatro) mudanças que podem ocorrer: Pronto → Execução: O processo está na fila de prontos, e após o algoritmos de escalonamento selecioná-lo, ele ganha CPU entrando em estado de execução; Execução → espera ou bloqueado: O processo pára sua execução e entra no estado de espera quando necessita da utilização de E/S ou aguarda eventos externos; Mudança de estado do processo Espera ou bloqueado → Pronto: O processo finalizou sua execução de E/S ou o evento externo necessário para seu reinicio já foi deflagrado; Não existe a mudança do estado de espera para o estado de execução diretamente; Execução → Pronto O processo ainda não finalizou sua execução, porém teve sua fatia de tempo de CPU esgotada; Seu contexto deve ser salvo e ele voltara para a fila de prontos aguardando para ganhar mais tempo de CPU para finalizar sua tarefa; Mudança de estado do processo Criação de Processos Há 4 (quatro) eventos principais que fazem com que processos sejam criados: 1 – Inicio do programa; 2 – Execução de uma chamada de sistema de criação de processos por um processo em execução (criação de filho); 3 – Uma requisição do usuário para criar um novo processo; 4 – Inicio de uma tarefa em lote; Criação de Processos No Unix e alguns derivados, há somente uma chamada de sistema para criar um novo processo (fork); fork cria um clone idêntico ao processo que o chamou; Assim processo pai e filhos ficam com a mesma imagem de memória, variáveis de ambiente e arquivos abertos; Em seguida o processo filho executa a chamada execve para mudar sua imagem de memória e executar um novo programa; Criação de processos No Windows existe uma única chamada Win32 CreateProcess; Ela tanto cria um novo processo quanto carrega o programa correto no novo processo; Tanto em Unix quanto no Windows, depois que o processo é criado, o pai e o filho têm seus próprios espaços de endereçamento. Término de Processo Um processo pode terminar devido: 1- Saída Normal (voluntário); 2- Saída por erro (voluntário); 3- Erro fatal (involuntário); 4- Cancelamento por outro processo (involuntário) Término de Processo 1- Saída Normal (voluntário): Ao terminar o compilador faz chamada de sistema indicando que ele terminou; Unix usa exit já o Windows usa ExitProcess 2- Saída por erro (voluntário): O próprio processo descobre um erro que impede sua execução; Exemplo: compilar um arquivo que não existe; O compilador simplesmente termina a execução; Término de Processo 3- Erro Fatal (Involuntário): Erro causado diretamente pelo processo (programa); Instrução ilegal, referencia a memória inexistente, erro de divisão por zero; 4- Cancelamento por outro processo (involuntário): Através de uma system call, um processo sinaliza que o outro deve ser finalizado; kill no Unix e TerminateProcess no Windows; Antes o “processo cancelador” deve ter permissão para tal; Criação e Eliminação de Processos Processos são criados e eliminados por motivos diversos; A criação de um processo ocorre quando o SO cria, adiciona à sua estrutura e aloca espaço para um novo PCB; No caso de eliminação, o SO desaloca os recursos para esse processo e remove o PCB da estrutura; Criação e Eliminação de Processos A maioria dos SO estabelece 2 (dois) novos estados para os processos recém criados e eliminados; Criação (new): O processo permanece neste estado após a criação do processo, porém quando o SO ainda não colocou ou não tem recursos para colocá-lo na fila de prontos; O SO geralmente limitam a quantidade de processos com status ativo; Terminado (exit): Não possui mais programa executando em seu contexto, porém o PCB ainda existe; Após o SO salvar as infos necessárias para estatísticas, ele realmente elimina o PCB e o processo passa a não mais existir; Criação e Eliminação de Processos Processos I/O-bound e CPU-bound CPU-bound: Utiliza massivamente a CPU; Passa a maior parte do tempo em execução ou na fila de prontos; Realiza poucas ações de leitura/escrita; Geralmente são aplicações que efetuam muitos cálculos; I/O-bound: Passa a maior parte do tempo na fila de espera; Utiliza massivamente leitura/escrita; Aplicativos comerciais devido a necessidade de busca e gravação de informação e de meios de interação com o usuário; Foreground e Background Processo em foreground: Processo em primeiro plano; Permite a interação direta com o usuário durante o seu processamento. Processo em background: Processo em segundo plano (ou por trás); Não existe interação com o usuário durante o seu processamento. Processos em background são também chamados de Daemons Hierarquia de Processos Processo independente: Não existe vinculo de processo criado e seu criador; Subprocesso ou processo filho: O processo criador é denominado processo pai, enquanto o novo processo é denominado processo filho; Existe dependência entre o processo filho e o processo pai; Caso um processo pai deixe de existir, o processo filho também deixará; Hierarquia de Processos Hierarquia de Processos Em alguns sistemas quando um processo cria outro, o processo pai e o processo filho continuam de certa maneira associados; O processo filho pode gerar mais processos; No Unix, um processo, todos seus filhos e descendentes destes formam um grupo de processos; Quando um usuário envia um sinal de teclado, todos do grupo o recebem; Cada um decide o que fazer: capturar, ignorar, ou executar a ação predefinida para esse sinal; O Windows não apresenta hierarquia de processos; No Windows, quando um processo é criado, o processo pai recebe um handle, mas pode optar por passar para outro processo. Sinais Mecanismo capaz de notificar processos de eventos gerados pelo SO ou por outros processos. Possibilita a gerência, comunicação e sincronização entre processos. Exemplo: usuário pressiona [ctrl + c] durante a execução de um programa. ✔ SO gera um sinal ao processo; ✔ Processo identifica a chegada do sinal; ✔ Uma rotina de tratamento é executada. Sinais Sinais Podem ser utilizados junto a temporizadores; A maior parte dos sinais são gerados pelo SO ou pelo hardware (exceções, interrupções, limites de quotas excedidos, alarmes de tempo); Os sinais são indicados através da alteração de bits de sinalização dentro do PCB; Quando o processo é escalonado, seus bits são testados e o evento referente à sinalização é executado; Assim o processo só será excluído do sistema quando for selecionado para execução.