concorrencia101
  • Introdução
  • First things first
  • Agradecimentos
  • Parte I - Concorrência no sistema operacional
    • O que é o programa no sistema operacional
    • Escalonador preemptivo de tarefas
    • Uma nota sobre escalonamento cooperativo
    • Propriedades de um processo
    • Clone de processo (forking)
    • Clone leve de processo (thread)
    • Todo processo tem uma thread principal
    • Uma nota sobre paralelismo
    • Principais desafios em cenário de concorrência
      • Race condition
      • Sincronização com locks
      • Modelo de atores
    • E o I/O?
      • Latência de CPU vs Latência de I/O
      • Chamadas bloqueantes
      • Chamadas não-bloqueantes
      • Assincronismo e escalonamento cooperativo
    • Vamos colocar em prática...
  • PARTE II - Concorrência em diferentes linguagens
    • Definindo ambientes de execução
    • Concorrência em C
      • Forking de processos
      • Threads
      • Race condition e sincronização de threads com mutex
      • Desafios com o uso de threads
      • Thread Pool em C
      • Green threads
      • Modelo de Atores
      • Trabalhando com I/O
    • Concorrência em Ruby
      • Forking de processos
      • Threads
      • Race condition, YARV, GVL e paralelismo em Ruby
      • Modelo de Atores
      • Trabalhando com I/O
Powered by GitBook
On this page
  1. Parte I - Concorrência no sistema operacional

Escalonador preemptivo de tarefas

PreviousO que é o programa no sistema operacionalNextUma nota sobre escalonamento cooperativo

Last updated 5 months ago

O escalonador de tarefas do sistema operacional é o componente responsável por gerenciar o uso da CPU entre os processos, estabelecendo assim a concorrência. Por alternar tão rápido entre processos, temos a impressão que são executados simultaneamente - mesmo que na realidade, a CPU execute apenas um processo por vez em sistemas single-core.

Em sistemas UNIX-like, o modelo de escalonamento é chamado de preemptivo. Isso significa que o escalonador pode interromper a execução de um processo a qualquer momento para dar lugar a outro processo.

Essa interrupção é feita de forma controlada, pelo que o controle pode ser feito de algumas formas:

  • fatia de tempo (time slice): sinais que notificam o escalonador para alternar entre processos após um intervalo de tempo definido

  • prioridade: a cada processo é associada uma prioridade, e processos mais prioritários podem ser escalonados antes de outros

  • estado dos processos: o escalonador analisa se um processo está aguardando I/O, bloqueado ou pronto para ser executado

O escalonamento preemptivo permite ao sistema operacional controlar a concorrência de processos sem que determinado processo monopolize a CPU, balanceando o uso da CPU de forma eficiente.

TIL: enquanto preparava o conteúdo deste guia, descobri dois comandos que permitem rodar programas modificando a prioridade em sistemas UNIX-like: nice e renice.

Nice, uh?