Walfredo Cirne walfredo@dsc.ufcg.edu.br Threads Walfredo Cirne walfredo@dsc.ufcg.edu.br.

Slides:



Advertisements
Apresentações semelhantes
Sistemas Operacionais
Advertisements

ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
IC - UFF Sistemas Operacionais Threads. IC - UFF Processos e threads Vimos o conceito de processo englobando duas características básicas: propriedade.
SISTEMAS OPERACIONAIS (SO) Aula 5 Luciana A. F. Martimiano 2002
Sistemas operacionais
Programação Concorrente
Processos no Unix e Linux
Monitores.
Sincronização com Posix Threads
Conceitos de Programação Paralela - 2
PThreads MO801/MC972.
Chapter 4: Threads.
Sistemas Operacionais II
Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação SSC SISTEMAS OPERACIONAIS I Aula.
SSC SISTEMAS OPERACIONAIS I
Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação SSC SISTEMAS OPERACIONAIS I Turmas.
SSC SISTEMAS OPERACIONAIS I
Sistemas Distribuídos
Sistemas Distribuídos
Sistemas Distribuídos Walfredo Cirne & Fubica Brasileiro Aula 4: Mais Conceitos Básicos As figuras que aparecem nesses slides são de Veríssimo&Rodrigues,
Programação Concorrente
Wagner Santos C. de Jesus
Sincronização de Processos (4)
Concorrência Aula X.
Sincronização de Processos (3)
Sincronização de Processos (5) - Monitores -
Sincronização e Comunicação entre Processos
e comunicação entre Processos
Threads.
Threads sem Sincronização
Sincronização de Threads
O Mecanismo de Threads em Java 2. Criar uma classe herdeira da super classe Thread public class minhaThread extends Thread{ public class minhaThread extends.
Concorrência em Java Threads em Java.
Threads: Introdução e Implementação
Monitores.
Concorrência em Java Threads em Java.
Unidade 3 Controle de Concorrência
Concorrência em Java Threads em Java.
Linguagem de Programação IV
Chamada Remota de Procedimentos
Sistemas Distribuídos
Concorrência STRD.
1 Mobilidade de Código com μcode Projeto Giga Alexandre Lages
Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação SISTEMAS OPERACIONAIS Aula 9 Regiane Kawasaki
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
Computação L1: Infra-Estrutura Básica
Programação de Sistemas Distribuídos e Concorrentes
Transações Concorrentes
Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta.
Sistemas operacionais
Paulo Borba e Augusto Sampaio Centro de Informática Universidade Federal de Pernambuco Especificação de Sistemas Distribuídos.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Capítulo 4: Processos.
Remote Procedure Call (RPC) e Rendezvous
Sistemas Distribuídos Aula 05 – Programação Multithread/Paralela
Aula prática de Concorrência Equipe de Monitoria: Bruno Pereira - bpe Davi Pires - dpr Guilherme Barros – gbs2 Thiago Cavalcanti - trc.
Variáveis condicionais e Semáforos Aula de Concorrência.
Implementação de Sincronização n Protocolos que usam busy waiting:  Difíceis de projetar, compreender e provar corretos  Complexos  Variáveis usadas.
Video Capítulo 7: Sincronização de Processos. Silberschatz, Galvin and Gagne  Video Operating System Concepts Assuntos n Cenário n O problema.
Finite State Process 1° Exercício Comentários sobre a primeira prática (para os monitores): Inicialmente expliquem os três slides seguintes, após isto.
Redes e Sistemas Distribuídos II – Cód Prof. MSc. Ronnison Reges Vidal.
Capítulo 8 Threads.
Sistemas Operacionais Distribuídos
Comunicação Interprocesso Condições de Disputa (corrida)
Faculdade Pernambucana - FAPE Sistemas Operacionais Prof. Flávio Gonçalves da Rocha.
CURSO JAVA BÁSICO Módulo 9 – slide 1 Módulo 10 Threads.
ProgramaçãoConcorrente Glêdson Elias
Pearson Education Sistemas Operacionais Modernos – 2ª Edição 1 Sistemas Operacionais FATEC-PB Professor: Gustavo Wagner
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos
ProgramaçãoConcorrente Glêdson Elias
Transcrição da apresentação:

Walfredo Cirne walfredo@dsc.ufcg.edu.br Threads Walfredo Cirne walfredo@dsc.ufcg.edu.br

Memória Compartilhada Uma questão básica em computação paralela é como as tarefas se comunicam Uma alternativa é que as várias tarefas compartilhem a mesma memória Neste caso, as tarefas podem ser implementadas como processos ou threads

Processos  Threads Processos executam em espaço de endereçamento próprio, de modo a evitar interferência de outros processos Threads de um processo usam o mesmo espaço de endereçamento Threads são mais “leves” que processos Além do que, pode-se criar threads a nível de usuário (green threads)

Processos [possível criação de seg. memória compartilhada] ppid = fork(); if (ppid < 0) { fork_error_function(); } else if (ppid == 0) { child_function(); } else { parent_function(); }

Threads Threads de um processo usam o mesmo espaço de endereçamento O programador e a linguagem devem prover proteção contra interferências Algumas linguagens possuem modelo de concorrência próprio (ex: ADA e Java) Outras linguagens utilizam extensões para lidar com threads (ex: C tipicamente usa Posix)

POSIX POSIX: portable operating system interface Objetivo: Portabilidade do código fonte quando serviços do sistema operacional se fazem necessários Padrão IEEE

Aplicabilidade de Threads Threads são muito úteis para paralelismo de “pequena escala” I/O não blocado Interface com o usuário Construção de servidores Threads também são úteis em sistemas de tempo real, onde a concorrência é intrinseca ao problema

Modelo de Programação Um modelo de programação paralelo deve implementar três primitivas básicas Criação de processos/threads Sincronização de processos Comunicação entre processos Em memória compartilhada, a comunicação é feita pela própria memória

Necessidade de Sincronização Por exemplo, considere dois processos atualizando uma variável comum: x = x + 1 Operações: Carregar x em um registro Incrementar registro Armazenar registro em x

C + Posix: Criação de Threads Criação de thread via: int pthread_create ( pthread_t *thread_id, const pthread_attr_t *attributes, void *(*thread_function)(void *), void *arguments ); Termino quando função termina ou via: int pthread_exit (void *status); Um thread pode esperar por outro via: int pthread_join (pthread_t thread, void **status_ptr);

Semáforo Semáforo S: variável não-negativa inteira que só pode se modificada pelos procedimentos up() e down() down(S) se S > 0: decremente S senão: bloqueia esperando up(S) up(S) se há alguém bloqueado: desbloqueie senão: incremente S

Exemplo de Semáforo thread P2; statement A; down(mutex); statement B; (* exclusão mútua *) var mutex: semaphore := 1; thread P2; statement A; down(mutex); statement B; up(mutex); statement C; end P2; thread P1; statement X statement Y statement Z end P1;

Mutex Posix Mutex é um semáforo binário down() é chamado de lock() up() é chamado de unlock() Posix tem as seguintes operações: int pthread_mutex_init (pthread_mutex_t *mut, const pthread_mutexattr_t *attr); int pthread_mutex_lock (pthread_mutex_t *mut); int pthread_mutex_unlock (pthread_mutex_t *mut); int pthread_mutex_trylock (pthread_mutex_t *mut); int pthread_mutex_destroy (pthread_mutex_t *mut);

Condições Mutex servem para proteção de regiões críticas Além disso, precisamos esperar que outro thread faça alguma coisa Resolvido em Posix através de condições

Condições Posix int pthread_cond_init (pthread_cond_t *cond, pthread_condattr_t *attr); int pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mut); int pthread_cond_signal (pthread_cond_t *cond); int pthread_cond_broadcast (pthread_cond_t *cond); int pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mut, const struct timespec *abstime); int pthread_cond_destroy (pthread_cond_t *cond);

Exemplo Posix Produtor/Consumidor retirado de www.uq.edu.au/~cmamuys/humbug/talks/pthreads/pthreads.html

Monitores Lidar com mutexes e condições é muito baixo nível e muito sujeito a erros Monitores encapsulam seções críticas como procedimentos de um modulo, sendo portanto muito mais fáceis de programar Todas as chamadas ao procedimentos são executadas sob exclusão mútua Estruturas de sincronização estão embutidas no monitor

Threads Java Java tem monitores “orientados a objeto” Em Java, existe um lock associado a cada objeto que não pode ser acessado diretamente pela aplicação Quando um método é identificado como synchronized, o acesso e feito apenas quando o lock associado com o objeto é obtido

Criando Threads em Java [1] public class SimpleThread extends Thread { public SimpleThread(String str) { super(str); } public void run() { [ código do thread ]

Criando Threads em Java [2] public class C extends D implements Runnable { private Thread thread = null; public void start() { if (clockThread == null) { thread = new Thread(this, “CThread"); thread.start(); } public void run() { [código do thread ]

Exclusão Mútua em Java class SharedInteger { private int theData; public SharedInteger(int initialValue) { theData = initialValue; } public synchronized int read() { return theData; public synchronized void write(int newValue) { theData = newValue;

Sincronização em Java Java associa condições a cada objeto wait() espera pela condição do objeto notify() e notifyAll() acordam threads esperando pela condição

Exemplo Java Produtor/Consumidor retirado de java.sun.com/docs/books/tutorial/essential/threads ProducerConsumerTest.java CubbyHole.java Producer.java Consumer.java

Agradecimentos A Fabricio Silva que gentilmente nos forneceu seu material sobre tempo real, usados como base destas transparências