> For the complete documentation index, see [llms.txt](https://concorrencia101.leandronsp.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://concorrencia101.leandronsp.com/parte-i-concorrencia-no-sistema-operacional/escalonador-preemptivo-de-tarefas.md).

# Escalonador preemptivo de tarefas

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

<figure><img src="/files/UOJJDYdGdDWUwa0pQmr5" alt=""><figcaption></figcaption></figure>

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?*
