Você está na página 1de 3

Processos

Processo → Programa em execução

Um processo fornece os subsídios necessários para o gerenciamento


de tarefas concorrentes, mas não necessariamente paralelas.

Competem pelo direito de uso Atuam ao mesmo


da CPU, memória, … tempo!

* Ligado a um espaço de endereçamento 232 ou 64


max →
pilha
* Tabela de processos do SO (recursos alocados)

- Process ID (PID) dados


- User ID (UID); Group ID (GID)
- Arquivos abertos 0 → código
- Processos relacionados (pai e filhos)
- Signals (interrupções recebidas: alarmes, erros, etc.)
- Contabilidade e prioridade de uso da CPU
- Diretório de trabalho
- Threads alocadas
- Estado atual de execução de cada thread (new, ready, running…)
- Estado atual dos registradores
- Segmento de pilha
- Parâmetros de escalonamento (prioridade)
- Status de saída (exit code)

“O processo é a unidade de gerenciamento de recursos”


UNIXes → Um registro de entrada na tabela de processos é mantido mesmo após o
término deste, pelo menos até que o processo pai requisite o status de saída do processo
que terminou: (zombie process).

Processos em primeiro plano: Apps do usuário


Processos em segundo plano (Background): Serviços (daemons)

Um processo não interfere no espaço de endereçamento de outro processo: mecanismo


de proteção por hardware, porém controlado pelo SO.
Threads
Thread → Linha de execução independente, porém confinada ao
espaço de endereçamento de um processo.

Processo com
3 threads

• Threads são as entidades escalonadas para execução na CPU.

• Atuam como “sub-processos” que compartilham de um mesmo espaço de


endereçamento.

• Oferecem “paralelismo” mesmo com chamadas bloqueantes, mas


também são a fonte de muitos problemas: concorrência / consistência.

Servidor
Internet Web

cache

thread principal threads operárias


“dispatcher” “workers”

A técnica garante um maior número de requisições por segundo


Maior vazão → throughput

Pense em como seria com uma única thread!


Windows

Job
Jobs e Fibers: Opcional

Job: Controle/restrições sobre um grupo

Fiber = Lightweight thread


Fibers devem ser escalonadas cooperativamente
pela aplicação (user-mode): SwitchToFiber()

Fibers Uma thread executa uma única fiber por vez

Fibers

Thread

Tipos de implementação...

1. Threads de usuário: rápidas; sem intervenção do kernel;


bloqueantes de processo.
2. Threads de núcleo: menos eficientes; kernel responsável pela
troca de contexto e escalonamento; não bloqueiam o processo.
3. Lightweight Process (Processos Leves): eficiência
intermediária; kernel responsável pela troca de contexto e
escalonamento de “grupos” de threads; não bloqueiam o
processo quando há grupos suficientes.

Importante: Uma melhora de ativação pelo escalonador pode ser


obtida fazendo-se uma upcall quando uma chamada bloqueante é
submetida ao núcleo. Neste caso, pode-se evitar uma troca de
contexto pelo núcleo permitindo que uma implementação de threads
em nível de usuário selecione a próxima thread para execução.

Você também pode gostar