Sunteți pe pagina 1din 26

Sistemas Operativos: Threads

Pedro F. Souto (pfs@fe.up.pt)

March 8, 2012
Sumrio

Conceito de Thread

Uso de threads

Implementao de Threads

Escalonamento de Threads

Leitura Adicional
Processos em Unix

I Em Unix e SOs dele derivados, como Linux, um processo


dispe essencialmente dum computador virtual:
I a maioria dos recursos usados por um processo
reservado para seu uso exclusivo;
I cada processo usa a sua prpria memria, a qual, por
omisso, no partilhada com outros processos.
I Um processo pode ser visto como:
I Uma mquina virtual para execuo de programas
em vez de
I Um programa em execuo
Comunicao entre Processos em Unix

I A comunicao entre processos em Unix no fcil:


I o processo pai pode passar alguma informao antes de
criar o processo filho, mas depois ...
I o processo filho s pode retornar informao (e muito
limitada) ao processo pai quando termina;
I sincronizao entre processos s entre o pai e os seus
filhos.
I Suporte de memria partilhada entre processos pelo SO:
+ facilita a cooperao entre processos;
no muito conveniente de usar;
relativamente ineficiente, j que requer a interveno do
SO para sincronizao.
Threads
Threads abstraiem a execuo duma sequncia de
instrues.
Grosso modo, enquanto que um processo corre-
sponde execuo dum programa, um thread cor-
responde execuo duma funo.
I Em SOs mais recentes, um processo pode incluir mais do
que um thread.

Text Text

Data Data
Processador de Texto Multithreaded
A ideia usar um thread por tarefa.

Four score and seven nation, or any nation lives that this nation who struggled here here to the unfinished they gave the last full
years ago, our fathers so conceived and so might live. It is have consecrated it, far work which they who measure of devotion,
brought forth upon this dedicated, can long altogether fitting and above our poor power fought here have thus that we here highly
continent a new nation: endure. We are met on proper that we should to add or detract. The far so nobly advanced. resolve that these dead
conceived in liberty, a great battlefield of do this. world will little note, It is rather for us to be shall not have died in
and dedicated to the that war. But, in a larger sense, nor long remember, here dedicated to the vain that this nation,
proposition that all We have come to we cannot dedicate, we what we say here, but great task remaining under God, shall have
men are created equal. dedicate a portion of cannot consecrate we it can never forget before us, that from a new birth of freedom
Now we are engaged that field as a final cannot hallow this what they did here. these honored dead we and that government of
in a great civil war resting place for those ground. The brave It is for us the living, take increased devotion the people by the
testing whether that who here gave their men, living and dead, rather, to be dedicated to that cause for which people, for the people

Kernel
Keyboard Disk

1. Um thread para interagir com o utilizador (teclado e rato);


2. Um thread para formatar o texto (em background);
3. Um thread para guardar o ficheiro periodicamente no
disco.
Partilha de recursos com Threads

I Threads dum mesmo processo podem partilhar a maior


parte dos recursos, com excepo da stack e do estado do
processador:
Thread 2

Thread 1 Thread 3

Process

Thread 1's Thread 3's stack


stack

Kernel
Estado dum Thread
I Tal como um processo, um thread pode estar num de 3
estados:
running

3
1
2

ready waiting

4
I A informao especfica a manter por cada thread
relativamente reduzida:
I o seu estado (pode estar bloqueado espera dum evento);
I o estado do processador (incluindo o SP e PC);
I a stack.
I Operaes tais como:
I criao/terminao
I comutao
de threads dum mesmo processo so muito mais
eficientes do que operaes semelhantes sobre processos
Sumrio

Conceito de Thread

Uso de threads

Implementao de Threads

Escalonamento de Threads

Leitura Adicional
Uso de Threads

I Threads dum mesmo processo podem partilhar muitos


recursos, incluindo o espao de endereamento:
so particularmente apropriados para aplicaes
consistindo em actividades concorrentes.
I P.ex. servidor da Web:
I Recebe e processa pedidos de pginas da Web.
I As pginas da Web so ficheiros guardados em disco.
I Mantm as pginas acedidas mais recentemente em
memria, cache.
I Se a pgina pedida no estiver na cache, o servidor tem
que ir ao disco.
Servidor da Web com um nico Thread

while( TRUE ) {
get_next_request(&buf);
lookup_page_in_cache(buf, &page);
if( page == NULL )
read_page_from_disk(buf, &page);
send_page(page);
}

I Se a pgina pedida no estiver na cache, o servidor tem


que ir ao disco, bloqueando.
I Enquanto a pgina no fr trazida para memria, o
servidor no pode processar outros pedidos.
I O nmero de pedidos que este servidor pode processar
por unidade de tempo muito baixo.
Servidor da Web com E/S Sem Bloqueio

I Alguns SOs suportam chamadas ao sistema de E/S que


no bloqueiam o processo que as invoca. Posteriormente:
I o processo pode interrogar o kernel sobre a concluso da
operao (non-blocking I/O);
I alternativamente, o kernel pode notificar o processo da
concluso da operao (asynchronous I/O).
I Se a pgina pedida no estiver na cache, o servidor pode
executar uma operao de E/S sem-bloqueio/assncrona.
I Depois, pode receber e processar a mensagem seguinte.
I O servidor tem que manter informao sobre o estado de
processamento de cada pedido pendente.
I Este tipo de soluo diz-se event driven, ou baseada
numa finite-state machine.
Servidor da Web com Mltiplos Threads
I Um thread, o dispatcher , recebe os pedidos e passa-os a
outros threads, os worker .
I Cada worker thread processa um pedido de cada vez:
pode usar operaes de E/S que bloqueiem.
Web server process

Dispatcher thread

Worker thread
User
space

Web page cache

Kernel
Kernel space

Network
connection
Servidor da Web com Mltiplos Threads

I Cdigo do dispatcher thread:


while( TRUE ) {
get_next_request(&buf);
handoff_work(buf);
}
I Cdigo dos worker threads:
while( TRUE ) {
wait_for_work(&buf);
lookup_page_in_cache(buf, &page);
if( page == NULL )
read_page_from_disk(buf, &page);
send_page(page);
}
Servidor da Web: Comparao

Modlo Paralelismo Programao


Thread nico No Fcil.
Event-driven Sim Trabalhosa.
Multi-threaded Sim Nem sempre fcil.
Sumrio

Conceito de Thread

Uso de threads

Implementao de Threads

Escalonamento de Threads

Leitura Adicional
Implementao de threads

I Threads podem ser implementados:


1. directamente pelo SO (kernel-level threads);
2. por cdigo que executa em user-level, i.e. acima do SO,
(user-level threads).
Kernel-level Threads

I O kernel suporta processos com mltiplos threads:


os threads so as entidades que disputam o
CPU.
I O SO mantm uma tabela de threads com a informao
especfica a cada thread.
I O PCB dum processo aponta para a sua tabela de threads.
I Todas as operaes de gesto de threads, p.ex. criar um
thread, requerem a execuo de chamadas ao sistema.
User-level Threads

I O kernel no sabe da existncia dos threads:


I so implementados inteiramente por uma biblioteca em
user-space;
I podem ser implementados num SO que no suporta
threads.
Implementao de User-level Threads

I A biblioteca de threads oferece funes que permitem:


I criar/terminar threads;
I sincronizar entre threads;
I ceder o CPU a outros threads (yield);
I A biblioteca executa a comutao entre threads e mantm
uma tabela de threads.
I Funes que encapsulam chamadas ao sistema que
podem bloquear tm que ser alteradas:
para evitar que todos os threads bloqueiem.
I Algumas dificuldades:
I como executar chamadas ao sistema sem bloquear?
I e page-faults?
I como evitar que um thread monopolize o CPU?
User-level vs. Kernel-level Threads

+ O SO no precisa suportar threads.


+ Evita a interveno do kernel em muitas operaes, p.ex.
criao/terminao de threads e comutao de threads.
Page-fault por um thread bloqueia os restantes threads do
processo.
Incapazes de explorar paralelismo em arquitecturas
multiprocessador.
Implementao Hbrida
A ideia multiplexar user-level threads sobre kernel-level
threads
Multiple user threads
on a kernel thread

User
space

Kernel
Kernel Kernel thread space

I O kernel no est a par dos user-level threads.


I A biblioteca de user-level threads atribui estes aos
kernel-level threads.
I O nmero de user-level threads pode ser muito maior do
que o de kernel-level threads
Sumrio

Conceito de Thread

Uso de threads

Implementao de Threads

Escalonamento de Threads

Leitura Adicional
Escalonamento de Threads
User-level vs. kernel-level

Process A Process B Process A Process B


Order in which
threads run

2. Runtime 1 2 3 1 3 2
system
picks a
thread

1. Kernel picks a process 1. Kernel picks a thread

Possible: A1, A2, A3, A1, A2, A3 Possible: A1, A2, A3, A1, A2, A3
Not possible: A1, B1, A2, B2, A3, B3 Also possible: A1, B1, A2, B2, A3, B3
(a) (b)

I Quantum de cada processo de 50 ms.


I Cada thread executa em bursts de 5 ms.
Sumrio

Conceito de Thread

Uso de threads

Implementao de Threads

Escalonamento de Threads

Leitura Adicional
Leitura Adicional

Sistemas Operativos

I Seco 3.4: Modelo Multitarefa

Modern Operating Systems, 2nd. Ed.

I Seco 2.2: Threads

Operating Systems Concepts

I Seco 4.1: Overview (of threads)


I Seco 4.2: Multithreading Models

S-ar putea să vă placă și