Ir para o conteúdo

CCT-UFCA/Ciência da Computação/Sistemas Operacionais/Gerenciamento de Processos

De Wikiversidade

Conceito de Processos e Threads

[editar | editar código]
  • Processo:
    • Um processo é uma instância de um programa em execução. Ele inclui o código executável, os dados necessários (variáveis, pilha) e o contexto do processador (valores dos registradores).
    • Cada processo possui seu próprio espaço de memória.
Exemplo: Um navegador da web aberto com várias guias é um processo, onde cada aba pode ser gerida separadamente.
  • Thread:
    • Threads são divisões de um processo que compartilham o mesmo espaço de memória, mas possuem seu próprio contexto de execução.
    • Vantagem: Permitem maior eficiência na execução de tarefas concorrentes dentro de um mesmo processo.
Exemplo: Em um editor de texto, uma thread pode cuidar do salvamento automático enquanto outra gerencia a digitação do usuário.

Estados dos Processos e Transições

[editar | editar código]

Os processos podem estar em diferentes estados durante sua execução, dependendo do uso de recursos e do escalonamento.

  • Estados Principais:
    1. Novo (New): O processo foi criado, mas ainda não está pronto para executar.
    2. Pronto (Ready): O processo está aguardando para ser escalonado e usar a CPU.
    3. Executando (Running): O processo está atualmente usando a CPU.
    4. Bloqueado (Blocked): O processo está esperando por um evento (como a conclusão de I/O).
    5. Encerrado (Terminated): O processo terminou sua execução.
  • Transições Entre Estados:
    • Pronto → Executando: Quando o escalonador atribui a CPU ao processo.
    • Executando → Pronto: Quando ocorre uma interrupção, como a preempção.
    • Executando → Bloqueado: Quando o processo solicita I/O.
    • Bloqueado → Pronto: Quando o evento esperado ocorre.
Exemplo: Em um sistema multitarefa, um editor de texto (pronto) pode ser colocado em execução ao clicar em salvar e, em seguida, bloqueado enquanto espera pela conclusão do I/O do disco.

Escalonamento de Processos e Algoritmos de Escalonamento

[editar | editar código]

O escalonador de processos decide a ordem em que os processos terão acesso à CPU. Diferentes algoritmos são usados para otimizar o desempenho.

  • Objetivos do Escalonamento:
    • Maximizar a utilização da CPU.
    • Garantir justiça na alocação de recursos.
    • Reduzir tempos de espera e resposta.
  • Principais Algoritmos:
    1. First-Come, First-Served (FCFS): Processos são atendidos na ordem de chegada.
      • Desvantagem: Pode causar altos tempos de espera para processos longos.
    2. Shortest Job Next (SJN): O processo com menor tempo de execução é atendido primeiro.
      • Desvantagem: Pode causar starvation (processos longos nunca executam).
    3. Round Robin (RR): Cada processo recebe um tempo fixo (quantum) para executar.
      • Vantagem: Justo para todos os processos.
    4. Priority Scheduling: Processos com maior prioridade são executados primeiro.
      • Desvantagem: Processos de baixa prioridade podem ficar bloqueados.
    5. Multilevel Queue: Diferentes filas com prioridades diferentes (ex.: interação com usuário e processos em background).
Exemplo: Em um sistema Round Robin, se cada processo recebe 10ms de quantum, os processos alternam entre si a cada 10ms, garantindo que nenhum monopolize a CPU.

Sincronização e Comunicação entre Processos

[editar | editar código]

Quando processos ou threads precisam trabalhar juntos, o sistema operacional oferece mecanismos para sincronização e comunicação.

  • Problema Clássico: Processos podem precisar acessar recursos compartilhados, como uma variável, sem causar conflitos.
  • Mecanismos de Sincronização:
    • Semáforos: Sinalizam o acesso a recursos, bloqueando ou desbloqueando outros processos.
    • Mutexes (Mutual Exclusion): Garante que apenas um processo acesse um recurso por vez.
    • Monitores: Abstrações de alto nível que oferecem sincronização interna.
  • Comunicação entre Processos (IPC):
    • Shared Memory (Memória Compartilhada): Processos acessam uma área comum da memória.
    • Message Passing (Passagem de Mensagens): Processos enviam e recebem mensagens, evitando acesso direto à memória.
Exemplo: Ao imprimir um documento, um semáforo pode garantir que apenas um processo acesse a impressora por vez.

Tratamento de Deadlocks

[editar | editar código]

Um deadlock ocorre quando dois ou mais processos ficam permanentemente bloqueados, esperando por recursos que nunca serão liberados.

  • Condições para Deadlock (Banco de Dados de Coffman):
    1. Exclusão mútua: Um recurso só pode ser usado por um processo por vez.
    2. Retenção e espera: Processos mantêm recursos já alocados enquanto esperam por novos.
    3. Não-preempção: Recursos não podem ser retirados à força de um processo.
    4. Espera circular: Uma cadeia de processos espera por recursos uns dos outros.
  • Tratamento de Deadlocks:
    1. Prevenção: Evitar ao menos uma das condições para o deadlock.
      • Exemplo: Evitar espera circular impondo uma ordem para a alocação de recursos.
    2. Detecção: Monitorar o sistema para identificar ciclos que indicam deadlocks.
    3. Recuperação: Eliminar o deadlock ao:
      • Finalizar um ou mais processos.
      • Revogar recursos alocados.
Exemplo: Em sistemas de banco de dados, a técnica de timeout pode liberar recursos de um processo que está esperando por muito tempo, evitando deadlocks.

Referências

[editar | editar código]
  1. https://tecnoblog.net/responde/o-que-e-thread-processador/
  2. https://blog.grancursosonline.com.br/sistemas-operacionais-gerenciamento-de-processos/
  3. https://www.oficinadanet.com.br/post/12781-sistemas-operacionais-o-que-e-escalonamento-de-processos
  4. https://pt.slideshare.net/slideshow/sistemas-operacionais-aula-08-sincronizao-e-comunicao-entre-processos-76671505/76671505
  5. https://www.oficinadanet.com.br/post/12786-sistemas-operacionais-o-que-e-deadlock