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.