Fundamentos de Sistemas Operacionais: Processos, Deadlock e Threads

Classificado em Computação

Escrito em em português com um tamanho de 4,86 KB

Tabela de Processos: Necessidade e Aplicações

Por que a Tabela de Processos é Essencial em Sistemas de Tempo Compartilhado?

A Tabela de Processos é necessária para armazenar o estado de um processo que está com seu estado suspenso (pronto ou bloqueado). Sistemas modernos executam diversos processos simultaneamente, mesmo sem interação direta do usuário, como:

  • Atualização de antivírus;
  • Atualização de sistema operacional;
  • Serviços em segundo plano.

A Tabela de Processos é Necessária em Sistemas de Usuário Único (UNIX/Windows)?

Sim. Mesmo em sistemas com apenas um processo em execução, esta tabela é crucial. Ela é utilizada pelo mecanismo de interrupções para salvar o contexto do processo e tratá-las adequadamente. No Windows, o gerenciamento é feito através do Gerenciador de Tarefas, e no UNIX/Linux, geralmente é acessado via comandos de terminal (como ps ou top).

Mecanismos de Solicitação de Serviços ao Sistema Operacional

Qual mecanismo os programas de usuário utilizam para solicitar serviços?

O mecanismo utilizado é a Chamada de Sistema (System Call). Uma System Call é uma interrupção de software que permite que um programa de usuário solicite serviços privilegiados ao núcleo do sistema operacional, garantindo um acesso legal e controlado à memória e aos recursos do sistema.

Multithreading e Regiões Críticas

Regiões Críticas em Sistemas Multithread

Em um sistema operacional multithread onde 3 processos compartilham 2 recursos, cada processo deve possuir no mínimo duas (2) regiões críticas, uma para cada recurso compartilhado.

Justificativa: A região crítica é a seção do código onde o recurso compartilhado é acessado. Para garantir a exclusão mútua e evitar condições de corrida, cada recurso (R1 e R2) deve ter sua própria região crítica associada. Se um processo precisar acessar ambos os recursos, ele precisará entrar em ambas as regiões críticas em algum momento.

O Conceito de Deadlock

O que é Deadlock?

O Deadlock (Impasse) ocorre quando cada processo em um conjunto de processos está esperando por um evento (geralmente a liberação de um recurso) que somente outro processo do mesmo conjunto pode causar. Isso resulta em um bloqueio permanente.

Para que um Deadlock ocorra, quatro condições devem ser satisfeitas simultaneamente (Condições de Coffman):

  1. Exclusão Mútua: Cada recurso está associado a exatamente um processo ou está disponível.
  2. Posse e Espera (Hold and Wait): Um processo que já possui algum recurso pode requisitar outros e aguardar por sua liberação.
  3. Não Preempção: Recursos dados a um processo não podem ser tomados de volta; eles precisam ser liberados voluntariamente pelo processo.
  4. Espera Circular: Deve haver uma cadeia circular de dois ou mais processos, onde cada um está aguardando um recurso em posse do próximo membro da cadeia.

Interrupções de Relógio em Sistemas de Tempo de Execução (Runtime)

Problemas de Interrupção de Relógio em Threads

Se uma interrupção de relógio (clock interrupt) ocorrer enquanto o sistema de tempo de execução (runtime system) está manipulando as filas de agendamento (por exemplo, bloqueando ou desbloqueando uma thread), pode ocorrer uma condição de corrida (race condition) ou um estado inconsistente nas estruturas de dados do agendador.

O momento da interrupção seria inadequado, pois o manipulador de interrupção do relógio também pode tentar manipular as mesmas estruturas de dados, causando corrupção.

Solução Proposta

Uma solução eficaz é utilizar um sinalizador (flag) ou um mecanismo de exclusão mútua. O sistema de tempo de execução define um sinalizador quando está manipulando as filas críticas.

O manipulador de interrupção do relógio, ao ser acionado, verifica esse sinalizador:

  • Se o sinalizador estiver ativo (o runtime está ocupado), o manipulador do relógio simplesmente define sua própria flag de "interrupção pendente" e retorna imediatamente.
  • Quando o sistema de tempo de execução concluir suas manipulações críticas, ele verifica a flag de interrupção pendente do relógio. Se estiver ativa, ele executa o manipulador do relógio naquele momento seguro.

Alternativamente, o sistema de tempo de execução pode desabilitar temporariamente as interrupções durante a manipulação das estruturas de dados críticas.

Entradas relacionadas: