Sistemas Operacionais
Threads
Prof. Diovani Milhorim
Threads
Lembrando…

Escalonamentos preemptivos
Um processo pode ter sua execução interrompida e voltar para a fila
dos prontos.

Exemplos:
Round-Robin (fatia de tempo/quantum).
Com prioridades para desempatar…
Prioridades / múltiplas filas com realimentação.
Com Round-Robin para desempatar.
Threads
Lembrando…

Um processo = uma imagem dinâmica de um processo
em execução.

Um processo = um conjunto de recursos de HW
alocados pelo Sis. Op. = uma unidade a escalonar.

A imagem do processo na memória é constituída de
vários segmentos.
Threads
Bloco Descritor de Processo
A estrutura de dados que representa o processo no Sis. Op. É chamada
“Process Control Block” (PCB)
Contém as informações necessárias:
Registradores, memória, disco (arquivos)
Prioridade
Estado
Histórico (contabilidade)
Ponteiro para um outro PCB (lista encadeada)
O Sis. Op. deve manter listas de processos
Listas encadeadas;
A estrutura PCB é usada para tal;
Mantém-se um ponteiro sobre o primeiro e/ou o último PCB.
Threads
Imagem do processo
Threads
A imagem do processo





Texto: contém as instruções binárias do código
executável do processo (imagem).
Dados: espaço para as variáveis do processo,
declaradas como globais no programa.
Heap: memória para alocação sob-demanda durante a
execução Alocação dinâmica
Pilha: memória para alocação:
De variáveis locais a sub-rotinas
Do endereço de retorno de uma sub-rotina.
Área do usuário vs. área do sistema.
Threads
O processo é…








Um programa em execução
Uma unidade de escalonamento
Um fluxo de execução
Um conjunto de recursos (contexto) gerenciados pelo Sis. Op.
Registradores
Memória
Descritores de arquivos
Etc…
A troca de contexto é uma operação pesada
Deve acontecer cada vez que há decisão de escalonamento
Threads
Threads é uma forma de um processo dividir a si
mesmo em duas ou mais tarefas que podem ser
executadas simultaneamente.
Idéia simples: associar mais de um fluxo de
execução a um processo:
Compartilhamento de recursos do PCB
O PCB deve incluir uma lista de threads!
Threads
Em uma máquina multiprocessada ou em um cluster de
computadores, podemos ter vários processos (inclusive
de uma mesma aplicação) rodando ao mesmo tempo
(vale salientar que em máquinas monoprocessadas o
que ocorre é um pseudoparalelismo).
Entretanto, na prática, precisamos de uma granularidade
ainda menor, isto é, precisamos de paralelismo dentro
de um mesmo processo.
Esse paralelismo interno ao processo é obtido com o uso
de Threads.
Threads
Threads
Na realidade, uma thread é análoga a um
processo tendo em vista que ambos são
uma execução seqüencial de um conjunto
de instruções.
Contudo, uma thread é considerada leve
pelo fato de rodar dentro do contexto do
processo, aproveitando-se do
compartilhamento dos recursos alocados
para o ambiente do programa.
Threads
Portanto, uma thread é um subconjunto das informações pertinentes a
um processo e as threads de um mesmo processo compartilham
recursos entre si:
Itens por processo
Itens por threads
Espaço de endereçamento
Variáveis globais
Arquivos abertos
Processos filhos
Alarmes pendentes
Sinais e tratadores de sinais
Uso de recursos
Contador de Programa
Registradores
Pilha
Estado
Threads
Cada thread tem sua própria pilha de execução.
Threads são bem mais fáceis de criar e destruir, o que
implica em um ganho de performance considerável.
Threads
Há dois tipos de threads: de usuário e de sistema (núcleo).
Threads de usuário:








O sistema (núcleo) não sabe da existência de threads
Núcleo gerencia processos monothread
Cada processo tem sua própria tabela de threads
Um sistema supervisor, dentro do processo, gerencia os threads
Salva estado
Faz escalonamento
Melhor desempenho
Threads devem se comportar educadamente -> Ceder a vez
quando não puderem continuar.
Threads
Threads de usuário:
Threads
Threads de sistema:
O núcleo conhece as threads e as gerencia



Núcleo tem tabela de threads e tabela de
processos
Bloqueio de threads = chamadas ao sistema
Núcleo escolhe outro thread do mesmo
processo ou um thread de outro processo
Threads
Threads de sistema:
Threads
Grande parte das aplicações existentes usam o
conceito de multitarefa (multithread).
Por exemplo, quando estamos usando um
navegador WEB (Internet Explorer, Netscape,
...), ao mesmo tempo em que estamos lendo um
texto, também podemos estar efetuando o
download de arquivos e ouvindo música. Para
cada uma dessas atividades, o navegador cria
threads
que
executarão
em
(pseudo)paralelamente.
Threads
Grande parte das aplicações existentes usam o
conceito de multitarefa (multithread).
Por exemplo, quando estamos usando um
navegador WEB (Internet Explorer, Netscape,
...), ao mesmo tempo em que estamos lendo um
texto, também podemos estar efetuando o
download de arquivos e ouvindo música. Para
cada uma dessas atividades, o navegador cria
threads
que
executarão
em
(pseudo)paralelamente.