O que é o programa no sistema operacional
No sistema operacional, cada programa é encapsulado dentro de uma estrutura chamada processo. Um processo é uma entidade independente, isolada dos demais processos. Essa separação permite que o SO gerencie múltiplos processos simultaneamente, atribuindo recursos como a CPU ou a memória de forma controlada. Sem o isolamento, teríamos enormes problemas com corrupção de dados pois diferentes processos iriam escrever na mesma região na memória.

Repare na imagem de exemplo acima que a memória do computador é vista como uma "grande fita". Sendo o papel do sistema operacional alocar para cada processo uma área reservada nesta "fita", como podemos ver nas áreas verdes.
Esta organização em processos é que torna possível a concorrência no sistema operacional. E aqui temos então o início do conceito.
Esqueça tudo sobre threads e outras palavras que fazem você se sentir mais sênior
Foca no processo.
Enquanto um processo utiliza a CPU para realizar cálculos ou executar instruções, outro pode estar aguardando uma operação de I/O, como a leitura de um arquivo ou o recebimento de dados da rede.

Essa alternância (também chamada de troca de contexto), gerenciada pelo sistema operacional, garante que o tempo da CPU seja aproveitado ao máximo, mantendo todos os processos "em movimento", mesmo que não estejam sendo executados simultaneamente.
Para entender melhor como o sistema operacional gerencia processos, podemos utilizar um comando muito sinistro que certamente muita gente já viu ao menos uma vez na vida: o comando ps que, de acordo com o manual - leiam o manual, sempre - , lista todos os processos ativos no sistema operacional:
$ ps
PID TTY TIME CMD
31504 pts/0 00:00:00 bash
85358 pts/0 00:00:00 ps
Mas para listar todos os processos do usuário e expandidos, é preciso passar as opções aux:
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.2 0.3 167672 13156 ? Ss Nov24 7:05 /sbin/init
root 2 0.0 0.0 0 0 ? S Nov24 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Nov24 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< Nov24 0:00 [rcu_par_gp]
root 5 0.0 0.0 0 0 ? I< Nov24 0:00 [slub_flushwq]
root 6 0.0 0.0 0 0 ? I< Nov24 0:00 [netns]
root 8 0.0 0.0 0 0 ? I< Nov24 0:00 [kworker/0:0H-events_highpri]
root 10 0.0 0.0 0 0 ? I< Nov24 0:00 [mm_percpu_wq]
.
.
.
.
Dica: use o comando "man" para ler o manual de um determinado programa. Por exemplo, man ls. Inclusive, é possível ler o manual do manual, com man man, assim podemos aprender a interpretar o manual de forma geral
A lista é grande, pois existem centenas de processos em execução no meu sistema operacional.
Experimente também rodar o comando htop
, que basicamente traz todos os processos do sistema com com uma visualização melhor e interativa:

Se reparar bem, o htop fica sempre atualizando a lista de processos que está "mais acima". Não importa agora para nós sabermos a prioridade de cada processo, mas é importante notarmos que há sempre uma alternância, feita pelo escalonador de tarefas do sistema operacional.
Last updated