Processos, Threads e Escalonamento em Sistemas Operacionais

Classificado em Computação

Escrito em em português com um tamanho de 5,75 KB

Estados e Transições de Processos

  • Novo para Pronto: Admitted – Admitido;
  • Pronto para Executando: Scheduler Dispatch – Expedição do escalonador;
  • Executando para Pronto: Interrupt – Interromper;
  • Executando para Terminado: Exit – Sair;
  • Executando para Esperando: I/O or Event Wait – E/S ou espera de evento;
  • Esperando para Pronto: I/O or Event Completion – E/S ou conclusão do evento.

Troca da CPU entre Processos

O sistema operacional interrompe um processo em execução e executa o escalonador de processos para decidir qual processo será executado a seguir. Com isso, o estado do processo atual é salvo no PCB (Process Control Block) e recarregado posteriormente, quando necessário.

Escalonador de Processos

O escalonador de processos seleciona um processo disponível para execução na CPU.

Filas de Escalonamento

  • Fila de Jobs: Conjunto de todos os processos do sistema;
  • Fila de Prontos: Conjunto de todos os processos prontos que aguardam serem processados;
  • Filas de Dispositivos: Conjunto de processos que aguardam por um dispositivo. Cada dispositivo tem a sua própria fila.

Escalonadores de Longo e Curto Prazo

  • Longo Prazo: Seleciona quais processos devem ser trazidos para a fila de processos prontos. É invocado com menos frequência (segundos, minutos), podendo ser mais lento. Controla o grau de multiprogramação (número de processos na memória);
  • Curto Prazo: Seleciona qual processo deve ser executado a seguir e aloca a CPU para ele. É invocado com muita frequência (milissegundos), precisando ser rápido.

Processos Limitados por E/S e CPU

  • Processos Limitados por E/S: Gastam mais tempo fazendo solicitações de E/S do que executando computação;
  • Processos Limitados por CPU: Gastam mais tempo executando computação do que fazendo solicitações de E/S.

Categorias de Processos no Google Chrome

  • Processo Navegador: Gerencia a interface de usuário, disco e rede;
  • Processos Renderizadores: Manipulam arquivos HTML, JavaScript, um para cada website;
  • Processos Plug-in: Para cada tipo de plug-in em uso.

Processos Cooperantes e Independentes

  • Processos Cooperantes: Podem afetar ou ser afetados pela execução de outro processo;
  • Processos Independentes: Não podem afetar ou ser afetados pela execução de outro processo.

Troca de Mensagens: Bloqueante (Síncrono) e Não Bloqueante (Assíncrono)

  • Bloqueante (Síncrono):
    • Send Bloqueante: Inibe o remetente até que a mensagem seja recebida;
    • Receive Bloqueante: Inibe o receptor até que uma mensagem esteja disponível.
  • Não Bloqueante (Assíncrono):
    • Send Não Bloqueante: O remetente envia a mensagem e continua executando;
    • Receive Não Bloqueante: O receptor obtém uma mensagem válida ou null.

Rendezvous

Ocorre quando as operações send e receive são bloqueantes.

Vantagens da Utilização de Threads

A maioria das aplicações modernas é multithread. Threads são executadas dentro da aplicação, o que pode simplificar o código e aumentar a eficiência.

Benefícios da Utilização de Threads

  • Capacidade de Resposta: Permite que um programa continue a ser executado, mesmo que parte dele esteja bloqueada ou executando uma operação demorada. É útil no projeto de interfaces de usuário;
  • Compartilhamento de Recursos: Threads compartilham recursos do processo ao qual pertencem, tornando o compartilhamento mais simples do que o compartilhamento de memória ou transmissão de mensagens;
  • Economia: É mais econômico criar threads e trocar os contextos, com menor overhead;
  • Escalabilidade: Threads aproveitam melhor o multiprocessamento, pois podem ser executadas em paralelo em diferentes núcleos de processamento.

Diferença entre Paralelismo e Concorrência

  • Paralelismo: Implica na capacidade de um sistema em executar mais de uma tarefa simultaneamente;
  • Concorrência: Dá suporte a mais de uma tarefa, permitindo que todas progridam.

Tipos de Paralelismo

  • Paralelismo de Dados: Distribui subconjuntos dos mesmos dados nos múltiplos núcleos de processamento, executando a mesma operação em cada núcleo;
  • Paralelismo de Tarefas: Distribui tarefas nos múltiplos núcleos de processamento, com cada thread executando uma operação única.

Objetivo da Lei de Amdahl

Identifica ganhos de desempenho potenciais com a inclusão de núcleos de computação adicionais em uma aplicação que tenha componentes tanto seriais quanto paralelos.

Modelos de Multithreading

  • Muitos-Para-Um: Mapeia muitas threads de nível de usuário para uma thread de kernel;
  • Um-Para-Um: Cada thread de nível de usuário mapeia para uma thread do kernel;
  • Muitos-Para-Muitos: Permite que múltiplas threads de usuário sejam mapeadas a um número menor ou igual de threads do kernel.

Entradas relacionadas: