Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf ·...

34
Sistemas Operativos Cap. IV Threads Prof. José Rogado [email protected] Universidade Lusófona

Transcript of Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf ·...

Page 1: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

Sistemas Operativos

Cap. IV

Threads

Prof. José Rogado

[email protected]

Universidade Lusófona

Page 2: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.2 Lições de Sistemas Operativos

Threads

Necessidades e Conceito

Modelos de Multithreading

Problemas de Threading

As Pthreads

Windows XP Threads

Linux Threads

Java Threads

Page 3: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.3 Lições de Sistemas Operativos

Necessidades de Multithreading

Browser

Servidor

Web

Browser

Grande parte das aplicações interactivas e distribuídas precisa de

gerir diversos fluxos de execução simultâneos

Interactividade com utilizador (Browser) ou gestão de várias

conecções simultâneas (Web server)

A utilização de vários processos distintos não é óptima pois implica

overhead na comunicação de dados e comutação de contexto

Browser

Browser

Servidor

Web

Page 4: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.4 Lições de Sistemas Operativos

Múltiplos Fluxos de Execução

A solução passa por criar vários fluxos de execução dentro de cada processo

Executam código independente

Podem bloquear sem que o processo bloqueie

Partilham todo o espaço de memória do processo

Têm contextos de execução separados

Esses fluxos de execução designam-se por threads ou actividades

Servidor

Web

BDs

Servidor

Web Servidor

Web Browser

Servidores

Web

BDs

Page 5: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.5 Lições de Sistemas Operativos

Separação de Recursos

Um processo é caracterizado por dois tipos de recursos distintos

Recursos estáticos: espaço de endereçamento (código, dados, atributos, PCB, etc.

Recursos dinâmicos: execução, estado, pilha, registos,

escalonamento, etc.

O modelo mutithreaded separa estes dois tipos de recursos:

Os recursos estáticos são geridos através do conceito de processo ou tarefa (task)

Os recursos dinâmicos são geridos através do conceito de thread ou actividade (lightweight process)

O processo é a unidade de gestão de recursos

A thread é a unidade de escalonamento

Page 6: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.6 Lições de Sistemas Operativos

Single and Multithreaded Processes

No modelo multithreaded, em cada processo existem

vários fluxos de execução ou threads (actividades)

As várias threads de um processo partilham o espaço de

endereçamento, mas têm contextos de execução distintos

Thread

Context

Page 7: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.7 Lições de Sistemas Operativos

Benefícios

Maior interactividade

Menor tempo de resposta

Partilha de Recursos

Economia

Utilização de Arquitecturas Multiprocessador

Programação paralela de alto desempenho

Page 8: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.8 Lições de Sistemas Operativos

Escalonamento Clássico

No modelo clássico, em cada processo existe um único fluxo de

execução

A atribuição do CPU é feita por processo, sendo necessário uma

comutação para passar de um fluxo para outro

So

urc

e: O

pe

ratin

g S

ys

tem

s, G

ary

Nu

tt

Co

pyrig

ht ©

20

04

Pe

ars

on

Ed

uc

atio

n, In

c.

Page 9: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.9 Lições de Sistemas Operativos

Escalonamento Multi-threaded

No modelo multithreaded, cada processo pode ter vários fluxos de

execução

A atribuição do CPU é feita por thread, podendo não ser

necessário uma comutação para passar de um fluxo para outro

Schedulin

g P

rogre

ss

P1

P2

P3

Th1

Th2

Th3

Th4

Th5

Th1

Th6

Th2

Sched init

Page 10: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.10 Lições de Sistemas Operativos

Implementação do Conceito de Thread A implementação do conceito de Thread (ou actividade) pode ser

feito de várias formas

Implementação em modo utilizador numa biblioteca, ligada ao executável da aplicação

Threads POSIX (pthreads) na implementação inicial

Threads Java

Fibers Windows

Implementadas no sistema operativo, e invocadas através de uma API específica que utiliza os system calls

Linux

Windows XP/2000

Solaris

Mac OS X

Frequentemente, a mesma biblioteca de threads pode suportar as duas implementações, com desempenhos diferentes

Threads POSIX (pthreads)

Page 11: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.11 Lições de Sistemas Operativos

As pthreads

Uma API standard POSIX (IEEE 1003.1c) para a criação de

threads e sua sincronização

A API especifica o comportamento da biblioteca de threads, a

implementação é da responsabilidade da biblioteca

Comum aos sistemas UNIX (Solaris, Linux, Mac OS X)

Alguns métodos:

pthread_create: criação de uma thread

pthread_join: espera que uma thread acabe

pthread_exit: finalização da thread

pthread_mutex_init: criação de um mutex

pthread_mutex_lock: aquisição do mutex

pthread_mutex_try_lock: aquisição não bloqueante

pthread_mutex_unlock: libertação do mutex

Page 12: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.12 Lições de Sistemas Operativos

Exemplo:

Criação das threads

Código da thread

Espera

Page 13: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.13 Lições de Sistemas Operativos

Exemplo: Chat

Objectivo:

Pretende-se realizar uma aplicação que permita a dois

processos comunicarem em modo conversacional (chat)

Utilizando dois FIFOs para comunicar

Funcionalidades de cada processo

Ler o teclado e escrever no FIFO1

Ler o FIFO2 e escrever no terminal

Não deve bloquear, permitindo enviar e receber dados

simultaneamente

São dadas 4 rotinas

readKeyboard

writeTerminal

receiveBytes

sendBytes

Page 14: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.14 Lições de Sistemas Operativos

P0 P1

writeTerminal writeTerminal

readKeyboard readKeyboard

sendBytes

receiveBytes

sendBytes

receiveBytes fifoOne fifoTwo

Chat: 1ª Solução

Funciona?

Page 15: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.15 Lições de Sistemas Operativos

P0 P1

writeTerminal writeTerminal

readKeyboard readKeyboard

sendBytes sendBytes

receiveBytes receiveBytes fifoOne fifoTwo

Chat: 2ª Solução

Funciona!!

Page 16: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.16 Lições de Sistemas Operativos

Problemas de Threading

Semântica dos system calls fork() e exec()

Cancelamento de Threads

Gestão de Sinais

Pools de Threads

Estruturas de controlo das threads

Page 17: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.17 Lições de Sistemas Operativos

Semantica de fork() e exec()

Será que fork() deve duplicar todas as threads de um processo, ou

só aquela que invocou o system call ?

Se o processo invoca exec(), não é necessário duplicar as

threads pois o novo processo vai carregar código diferente

Se o processo continua a sua execução normal, deve ser

idêntico ao processo pai, incluindo no número de threads

Muitos sistemas (ex. Linux, Solaris) têm duas versões de fork()

uma que duplica as threads, outra que não duplica (vfork, clone)

No caso de fork() seguido de exec() deve ser utilizado vfork()

Em Windows o syscall CreateProcess(), utilizado para criar e

executar um novo processo, instancia sempre uma só thread

(primary thread).

Não existe equivalente de fork()

Page 18: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.18 Lições de Sistemas Operativos

Cancelamento de Threads

Cancelar uma thread antes do código ter finalizado

Ex: caso de um browser que carrega uma página usando uma thread por frame e é interrompido pelo utilizador no meio do carregamento da página

Duas aproximações possíveis:

Terminação síncrona finaliza a thread imediatamente

Pode ser problemático se uma thread se encontra no decurso de uma actualização de um recurso e pode criar problemas de coerência

Terminação deferida deixa a thread alvo verificar periodicamente se deve ser terminada

Permite que a thread detecte o facto de ter sido cancelada, e realizar as operações necessárias para o fazer de forma correcta

A thread examina a ordem de terminar nos chamados cancellation points (pthreads)

Page 19: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.19 Lições de Sistemas Operativos

Gestão de Sinais

Os Sinais são utilizados em sistemas Unix para notificar um processo de

que um dado evento ocorreu

Versão utilizador dos interrupts hardware

Syscall signal (int signum, sighandler_t handler)

Um processo declara um signal handler para gerir sinais

1. Um sinal é gerado por um evento específico

2. O sinal é entregue ao processo sob forma da invocação do signal

handler

3. O sinal é gerido pelo processo

Em processos com threads: em que thread é executado o handler ?

Na thread na qual o sinal faz sentido (caso das excepções)

Em todas as threads de um processo – confuso e difícil de gerir

Estabelecer de forma explícita que threads recebem que sinais

pthread_sigmask() estabelece os sinais para cada thread

sigwait() espera pelos sinais (cancellation point)

Page 20: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.20 Lições de Sistemas Operativos

Pools de Threads Criação de um número de threads por antecipação

As threads são guardadas numa pool esperando pelo

necessidade de actuarem

Vantagens:

É mais rápido servir um pedido com uma thread existente do

que criar uma nova

Permitir que o numero de threads numa aplicação seja

limitado a um número pré determinado

Em caso de necessidade a aplicação pode alocar mais

threads, caso tenha direitos para o efeito.

Pode também diminuir o número de threads na pool em

função da carga.

Exemplos

Windows: QueueUserWorkItem (Function)

Permite executar uma função por uma thread da pool

Java: packageThreadPool.java

Page 21: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.21 Lições de Sistemas Operativos

Linux Threads

Em Linux, uma nova thread cria um novo fluxo de execução que partilha todos os recursos

Internamente não há distinção entre thread e processo

Implementação one-to-one

A criação de threads é feita através do syscall clone() que permite implementar fork e pthread_create

Cria um novo fluxo de execução que pode ou não partilhar todos os recursos com o precedente

No caso de partilha total, obtém-se uma nova thread no “mesmo” processo com uma nova pilha

clone(CLONE_THREAD|CLONE_VM|CLONE_FILES, …)=> pthread_create

No caso de duplicação, obtém-se um novo processo com um espaço de endereçamento copiado mas distinto

clone(SIGCHLD, …) => fork

Ambas as funcionalidades são implementadas por uma rotina comum:

do_fork()

http://lxr.linux.no/#linux+v2.6.31/kernel/fork.c#L1333

Page 22: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.22 Lições de Sistemas Operativos

Estruturas de Dados em Linux

task_struct 1

thread_info 1

task_struct 2

sched.h

thread_info.h

http://lxr.linux.no/#linux+v2.6.31/include/linux/sched.h#L1166

http://lxr.linux.no/#linux+v2.6.31/arch/x86/include/asm/thread_info.h

thread_info 2

Page 23: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.23 Lições de Sistemas Operativos

A Task List

~2Kbytes de memória

So

urc

e:

Lin

ux

ke

rne

l Deve

lop

me

nt, R

ob

ert L

ove

No

ve

ll Pre

ss

, 20

05

.

Page 24: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.24 Lições de Sistemas Operativos

Localização da thread_struct S

ou

rce

:

Lin

ux

ke

rne

l Deve

lop

me

nt, R

ob

ert L

ove

No

ve

ll Pre

ss

, 20

05

.

Page 25: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.25 Lições de Sistemas Operativos

Threads Windows

Implementação one-to-one

Cada descritor de thread contém:

Um identificador: thread id

Cópia dos registos

2 pilhas: utilizador e supervisor

Dados privados

Os registos, as pilhas e os dados privados são designados

pelo contexto da thread

As estruturas de dados de uma thread incluem:

ETHREAD (executive thread block)

KTHREAD (kernel thread block)

TEB (thread environment block)

Page 26: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.26 Lições de Sistemas Operativos

Arquitectura do Windows NT

Processor(s) Main Memory Devices

Libraries

Process

Process

Process

Subsystem User

Supervisor

Subsystem Subsystem

Hardware Abstraction Layer

NT Kernel

NT Executive

I/O Subsystem

T T

T

T T T T T

T

Process Management

Memory Management

File Management

Device Mgmt Infrastructure

Source: Operating Systems, Gary Nutt

Copyright © 2004 Pearson Education, Inc.

Page 27: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.27 Lições de Sistemas Operativos

Criação de Processos no NT

CreateProcess(…);

Win32 Subsystem

ntCreateProcess(…);

ntCreateThread(…);

NT Executive

NT Kernel

Handle Table

Process Descriptor

Source: Operating Systems, Gary Nutt

Copyright © 2004 Pearson Education, Inc.

Page 28: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.28 Lições de Sistemas Operativos

Estruturas de Dados em XP

As estruturas de dados de uma thread incluem:

ETHREAD (executive thread block)

KTHREAD (kernel thread block)

TEB (thread environment block)

So

urc

e: O

pe

ratin

g S

ys

tem

s, G

ary

Nu

tt

Co

pyrig

ht ©

20

04

Pe

ars

on

Ed

uc

atio

n, In

c.

Page 29: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.29 Lições de Sistemas Operativos

ETHREAD

Windows NT Thread Descriptor

EPROCESS

KPROCESS

NT Kernel

KTHREAD

NT Executive

Source: Operating Systems, Gary Nutt

Copyright © 2004 Pearson Education, Inc.

Page 30: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.30 Lições de Sistemas Operativos

API Threads do Windows

http://msdn2.microsoft.com/en-us/library/ms684847.aspx

Page 31: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.31 Lições de Sistemas Operativos

Exemplo:

Page 32: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.32 Lições de Sistemas Operativos

Java Threads

As threads Java são geridas pela JVM

Podem ser criadas:

Estendendo a classe Thread

class <name> extends Thread

Implementando a interface Runnable

class <name> implements Runnable

Ver em http://www.codestyle.org/java/faq-Threads.shtml

Page 33: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

4.33 Lições de Sistemas Operativos

Java Thread States

Page 34: Sistemas Operativos Cap. IV Threadsnetlab.ulusofona.pt/so/teoricas/SO-4-Threads-2016.pdf · Lições de Sistemas Operativos 4.3 Necessidades de Multithreading Browser Servidor Web

Fim do Capítulo