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.