BC Sistemas Operacionais. Threads. Aula 04 3 Quadrimestre de Prof. Marcelo Z. do Nascimento.

Documentos relacionados
Threads Aula 04 2 Quadrimestre

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Sistemas Operacionais Prof. Fabrício Sérgio de Paula

Sistemas Operacionais

Threads. Agenda. Threads. Processo. Processo. Processo. Processo. (c) Volnys B. Bernal Versão de 22/3/2012

Chapter 4: Threads. Operating System Concepts 8th Edition

Sistemas Operacionais I Parte VI Threads

AULA Nº 08 SISTEMAS OPERACIONAIS. Threads

SSC0640 Sistemas Operacionais I

Sistemas Operacionais

Sistemas Operacionais

Na Aula Anterior... O Conceito de Threads

EEL770 Sistemas Operacionais

Sistemas Operacionais

Sistemas Operacionais

Sistemas de Computação. Threads e Sincronização

Arquitetura de Computadores Sistemas Operacionais II

Sistemas Operacionais II

Threads em Ambiente LINUX. Estudo e testes com a biblioteca pthreads

Fundamentos de Sistemas Operacionais. Threads. Prof. Edwar Saliba Júnior Março de Unidade Threads

Processos e Threads. Ciclo 2 AT3. Prof. Hermes Senger

Concorrência em Java. Threads em Java

Programação Concorrente com Thread Java. Luiz Affonso Guedes Sistemas Distribuidos

Threads. Sistemas Operacionais. Charles Tim Batista Garrocho. Instituto Federal de São Paulo IFSP Campus Campos do Jordão. charles.garrocho.

Sistemas Operacionais. Processos e Threads

Sistemas Distribuídos Aula 3

SOP - TADS Threads. Revisão Ultima aula. Programa em execução Cada processo têm sua própria CPU

Threads. Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa. Fernando Ramos, Nuno Neves, Sistemas Operativos,

Thread. Thread. Sistemas Operacionais. Leonard B. Moreira. UNIVERSIDADE ESTÁCIO DE SÁ fevereiro, / 41

Processos. Processo (1) Processo (2) Processo (3) Conceitos Básicos

Processos. Conceitos Básicos

INTRODUÇÃO AOS SISTEMAS OPERACIONAIS SEMANA 13

Capítulo 2. Multiprogramação. Conteúdo. Objetivo. Recordando. Recordando. DCA-108 Sistemas Operacionais

TAREFAS IMPLEMENTAÇÃO DE TAREFAS AULA 06 Sistemas Operacionais Gil Eduardo de Andrade

Sistemas Operacionais

UNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO Bacharelado em Sistemas de Informação. Processamento Paralelo Threads. Aluno: Wagner Palacio

Sistemas Operacionais Aula 06: Threads. Ezequiel R. Zorzal

Processos. Conceitos Básicos

Threads. Pedro Cruz. EEL770 Sistemas Operacionais

Trabalhando com Processos e Threads em Ambiente LINUX

Leandro Soares de Sousa (DSc.) Página: Aula 04 - desenvolvimento multithread

Processos. Conceitos Básicos

SISTEMAS DISTRIBUÍDOS PROCESSOS. Slides cedidos pela professora Aline Nascimento

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 07: PROGRAMANDO COM THREADS EM LINGUAGEM C

Threads. O que é uma Thread? Paralelismo

Sistemas Operacionais Aula 07: Scheduling da CPU. Ezequiel R. Zorzal

Processos e Threads e em sistemas distribuídos. Prof. Me. Hélio Esperidião

Roteiro 20/9/2010. Serviço do sistema operacional. Interface. Chamadas de sistemas (System Call) Programas do sistema Projeto e Implementação

Threads. Leonardo Gresta Paulino Murta

Capítulo 5: Escalonamento da CPU. Operating System Concepts 8th Edition

Fundamentos de Sistemas Operacionais

Pthreads. O que são threads? Mario João Junior. Uma thread é um fluxo de execução de instruções que pode ser escalonado pelo sistema operacional.

SISTEMAS OPERACIONAIS

Sistemas Operacionais. Prof. Fabio Augusto Oliveira

Sistemas Distribuídos

Threads em Java. Java Threads. Java Componentes: JVM JVM:

Estruturas de Sistemas Operacionais

Concorrência em Processos

as alterações feitas por um thread num recurso partilhado (ex: fechar um ficheiro) serão "vistaa" pelos outros threads.

Sistemas Operacionais. Prof. Pedro Luís Antonelli Anhanguera Educacional

Sistemas Operativos 4ª parte - Threads

Sistemas Distribuídos. Ricardo Ribeiro dos Santos

Sistemas Operacionais. Conceito de Processos

Processo. Prof. Paulo Cesar F. de Oliveira, BSc, PhD

Curso: Redes de Computadores

Sistemas Operacionais. Prof. Pedro Luís Antonelli Anhanguera Educacional

Processos. Adão de Melo Neto

Ferramentas para Programação em Processadores Multi-Core

Processos O conceito de processos é fundamental para a implementação de um sistema multiprogramável. De uma maneira geral, um processo pode ser entend

Introdução aos Sistemas Operacionais. Threads

Linguagens de Programação Classificação

Redes de Computadores. INF201 - Fundamentos de Sistemas Operacionais - 2º Período

Leandro Soares de Sousa (DSc.) Página: Parte II

Sistemas de Informação. Sistemas Operacionais

Prof. Kleber R. Rovai

INSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

(Aula 15) Threads e Threads em Java

14/05/2017. Conceitos de Processos. Conceitos de Processos. Conceito de processo

Unix Processos. Geraldo Braz Junior

Processo. Gerência de Processos. Um programa em execução. Centro de Informática/UFPE :: Infraestrutura de Software

Estrutura dos Sistemas Operacionais. Sérgio Portari Júnior

Múltiplas Linhas de Execução Java (Threads)

Processo. Gerência de Processos. Um programa em execução. Centro de Informática/UFPE :: Infraestrutura de Software

Thread. Prof. Paulo Cesar F. de Oliveira, BSc, PhD

Sistemas Operacionais I

Threads. MCTA Sistemas Operacionais. Emilio Francesquini 2019.Q1

Sobre a apresentação (About(

OO Engenharia Eletrônica

Tratamento de Exceções, Multithreads e arquivos (em Java) Programação Orientada a Objetos

Disciplina: Introdução aos Sistemas Operacionais Professor: Fernando H. Santorsula

Sistemas Operacionais Processos. Carlos Ferraz Jorge Cavalcanti Fonsêca

Exclusão Mútua (mutex)

Arquitetura de Sistemas Operativos

Linguagem de Programação I

SSC0640 Sistemas Operacionais I

Ferramentas para Programação em Processadores Multi-Core

MULTITHREADING. Prof.: Michele Nasu Tomiyama Bucci

Unidade 2. Processos Threads Concorrência em Java

Transcrição:

BC1518 - Sistemas Operacionais Threads Aula 04 3 Quadrimestre de 2010 Prof. Marcelo Z. do Nascimento Email: marcelo.nascimento@ufabc.edu.br

Roteiro Threads: Visão Geral Benefícios Tipos Modelos de multithread POSIX Thread Threads em Java Exemplo em SO Leituras Sugeridas

Processo requer uma quantidade de sobrecarga para sua execução: Processo

Threads Processo leve (Lightweight Process) Ano de 79 => introduziram o conceito (thread), onde o espaço de endereçamento era compartilhado; Definição: é uma unidade básica de utilização da CPU; compreende um ID, um contador de programa, um conjunto de registradores e uma pilha; Um processo pode consistir de várias threads, cada uma delas executadas separadamente.

Threads A thread mantém suas proprias: Pilha; Registradores; Propriedades de escalonamento (politica ou prioridade); Conjunto de sinais de bloqueio; Dados específicos da thread. Threads pertencentes ao mesmo processo compartilham: Seção de Código; Seção de dados; Outros recursos do SO, como arquivos abertos.

Threads

Processos simples ou múltiplos threads

Exemplo: Uso de Threads Threads para diferentes tarefas; S e l e c t s h a p e a n d s t a r t t y p i n g. R e s i z e b o x t o d e s i r e d d i m e n s i o n s. M o v e c o n t r o l h a n d l e t o a i m p o i n t e r a t s p e a k e r. S e l e c t s h a p e a n d s t a r t t y p i n g. R e s i z e b o x t o d e s i r e d d i m e n s i o n s. M o v e c o n t r o l h a n d l e t o a i m p o i n t e r a t s p e a k e r. S e l e c t s h a p e a n d s t a r t t y p i n g. R e s i z e b o x t o d e s i r e d d i m e n s i o n s. M o v e c o n t r o l h a n d l e t o a i m p o i n t e r a t s p e a k e r. Disco

Exemplo: Uso de Threads Processador de texto: thread para exibir gráfico; thread para ler seqüências de teclas do usuário; thread para efetuar a verificação ortográfica e gramatical em segundo plano. Sistemas computacionais => 3 processos separados não funcionariam, pois todos os três precisam operar sobre o mesmo documento; Então, 3 threads são utilizadas para compartilhar uma memória comum e, desse modo, permitir acesso ao documento que está sendo editado pelo usuário.

Exemplo: Uso de Threads Servidor de arquivos: Recebe diversas requisições de leitura e escrita em arquivos e enviar respostas a essas requisições; O servidor mantém um cache dos arquivos mais recentes; Lê a cache e escreve na cache quando possível; Quando uma requisição é feita, uma thread é alocada para seu processamento. Se essa thread for bloqueada devido a E/S - dos arquivos; Outras threads podem continuar atendendo as demais solicitações.

Benefícios Capacidade de resposta: Aplicações interativas com multithreads permite que um programa continue executando mesmo se parte dele estiver bloqueada, aumentando a capacidade de resposta ao usuário; Exemplo: Servidor WEB; Interação com usuário através de uma thread enquanto uma imagem é armazenada em outra.

Benefícios Compartilhamento de recursos: Mesmo endereçamento; memória e recursos do processo aos quais pertencem; A vantagem de compartilhamento de recurso é permitir que uma aplicação tenha diversos threads de atividades diferentes dentro do mesmo espaço de endereço.

Benefícios Economia: Alocação de memória e de recursos para criação de processos é custoso (sobrecarga); Threads compartilham recursos do processo ao qual pertence; É mais econômico criar e realizar chaveamento de threads. Exemplo: Diferença de overhead: Solaris2 Criação de um processo é cerca de 30 vezes mais lento do que a criação de um thread; Troca de contexto é cinco vezes mais lenta.

Benefícios Utilização de arquiteturas multiprocessador: Vantagem: Cada thread pode ser executado em paralelo em um processador diferente; Um processo com um único thread pode executar somente em uma CPU, não importando quanto estejam disponível; Multithreads em múltiplas CPUs aumenta a concorrência; As Linguagens: Java, C#, Visual C++.NET, Visual Basic.NET e Python.

Modelos de múltiplas threads Usuário: Suportadas acima do kernel e implementadas por bibliotecas no nível do usuário; Criação e escalonamento são realizados sem o conhecimento do kernel; Tabela de threads para cada processo; Processo inteiro é bloqueado se uma thread realizar uma chamada bloqueante ao sistema; Exemplo: Pthreads do POSIX (IEEE 1003.1c).

Modelos de múltiplas threads Mapeia todas a threads de um processo multithread para um único contexto de execução

Kernel: Modelos de múltiplas threads Suportadas diretamente pelo SO; Criação, escalonamento e gerenciamento feitos pelo kernel; Trata de forma separada: Tabela de threads informações das threads usuário Tabela de processos informações de processos monothreads; Processo não é bloqueado se uma thread realizar uma chamada bloqueante ao sistema; Gerenciamento de threads de nível kernel é mais lento que de nível usuário: sinais enviados para os processos;

Modelos de múltiplas threads Tenta resolver as limitações dos threads de usuário mapeando cada thread para seu próprio contexto de execução

Threads - Kernel Quase todos os SOs comtemporâneo implementam esse modelo: Windows XP; Solaris Linux; Tru64 UNIX; Mac OS X.

Modelo de multithreading Muitos-para-um: Mapeia muitas threads de usuário em apenas uma thread de kernel - gerência de threads e feita em nível usuário; Não permite múltiplas threads em paralelo; Threads de usuário Exemplo: Green threads: Thread de kernel threads escalonadas em ambiente virtual em SO nativo.

Modelo de multithreading Um-para-um: Mapeia para cada thread de usuário uma thread de kernel; Permite múltiplas threads em paralelo; Desvantagem: exige de uma thread de usuário crie uma thread de kernel. Threads de usuário Threads de kernel

Muitos-para-muitos: Modelo de multithreading Mapeia para múltiplos threads de usuário um número menor ou igual de threads de kernel; Permite múltiplas threads em paralelo; Cuidado para não ter muitas threads dentro de uma aplicação; Modelo Hibrido: Muitos para muitos e thread usuário ligada diretamente a nível kernel. Threads de usuário Exemplos : Solaris 2, True64 UNIX: Thread de kernel

POSIX Threads (Biblioteca Pthreads) Define uma API, implementada sobre o SO; Utilizada em sistemas UNIX: Linux, Mac OS X; Padrão IEEE POSIX 1003.1c ; Bibliotecas Threads Win 32 Threads Implementação do modelo um para um no kernel; Java threads são gerenciadas pela JVM, a qual é executada sobre um SO; JVM especifica a interface com SO; Utiliza uma biblioteca de thread do SO hospedeiro.

C + Posix: Criação de threads: pthread_create(thread, attr, função, argumento) Esta função cria um novo thread e torna-o executável. A função retorna a identificação do thread através do parâmetro thread. attr é usado para definir as propriedades do thread. Podem-se especificar os atributos ou o NULL. função é o nome da função que vai ser executada pelo thread. Pode-se passar um parâmetro para a função através de argumento.

C + Posix: Terminar a execução de um thread. Existem várias maneiras de um thread terminar: Thread retorna da sua função inicial (a função main para o thread inicial). Thread executa a função pthread_exit. Thread foi cancelado por outro thread através da função pthread_cancel (rc = pthread_cancel(thread)). Todo o processo foi terminado devido à utilização da função exec (que substitui a imagem do processo) ou através da função exit (que termina um processo). pthread_exit(estado)

Pthreads POSIX Threads Exemplo: Compilação: gcc thrd.c -lpthread #include <pthread.h> #include <stdio.h> Biblioteca para trabalhar com thread int sum; /* compartilhado entre as threads*/ void *runner(void *param); /* a thread */ int main(int argc, char *argv[]){ pthread_t tid; /* identificador da thread*/ pthread_attr_t attr; /* atributos para a thread */ if (argc!= 2) { fprintf(stderr,"usage: a.out <integer value>\n"); return -1; }

Pthreads POSIX Threads Exemplo (1): if (atoi(argv[1]) < 0) { fprintf(stderr,"argumento %d deve ser não negativo\n",atoi(argv[1])); return -1; } /* recebe os atributos ex. escalonamento */ pthread_attr_init(&attr); /* cria a thread */ pthread_create(&tid,&attr, runner, argv[1]); /* espera a thread parar finalizar */ pthread_join(tid,null); Sem estado atual->exit } printf("soma= %d\n",sum);

Pthreads POSIX Threads Exemplo (1): /** A thread começa controlar essa função */ void *runner(void *param) { int i, upper = atoi(param); sum = 0; if (upper > 0) { for (i = 1; i <= upper; i++) sum += i; } } pthread_exit(0);

POSIX Threads void* SayHello(void *foo) { printf( "Hello, world!\n" ); return NULL; } int main() { pthread_t threads[16]; int tn; for(tn=0; tn<16; tn++) { pthread_create(&threads[tn], NULL, SayHello, NULL); } for(tn=0; tn<16 ; tn++) { pthread_join(threads[tn], NULL); } return 0; }

Threads em Java Fornece um ambiente abstrato, que permite aos programas Java executar em qualquer plataforma com o JVM; Threads são gerenciadas pelo JVM; Pacote java.lang.thread; Duas formas de manipulação: Criar uma nova classe derivada da classe Thread; Classe que implemente a interface Runnable (mais utilizada); Nos dois casos o programador deve apresentar uma implementação para o método run( ), que é o método principal da thread.

Threads em Java Exemplo (1): public class Trabalhador extends Thread { String nome, produto; int tempo; public Trabalhador(String nome, String produto, int tempo) { } this.nome = nome; this.produto = produto; this.tempo = tempo;

Threads em Java Exemplo (1): public void run() { for (int i=0; i<50; i++) { try { Thread.sleep(tempo); } catch (InterruptedException ex) { ex.printstacktrace(); } System.out.println(nome+"produziu o(a)"+i+ " "+ produto); }

Threads em Java Exemplo (1): public static void main(string[] args) { Trabalhador t1 = new Trabalhador("Mario", "bota", 1000); Trabalhador t2 = new Trabalhador("Sergio", "camisa", 2000); } t1.start(); t2.start();

Threads em Java Exemplo (2): class MutableInteger{ private int value; public int get() {return value; } public void set(int sum) { this.value = sum; } } class Summation implements Runnable{ private int upper; private MutableInteger sumvalue;

Threads em Java Exemplo (2): public Summation(int upper, MutableInteger sumvalue) { if (upper < 0) throw new IllegalArgumentException(); this.upper = upper; this.sumvalue = sumvalue; } public void run() { int sum = 0; for (int i = 0; i <= upper; i++) sum += i; sumvalue.set(sum); } }

Threads em Java Exemplo (2): public class Driver{ public static void main(string[] args){ if (args.length!= 1){ } System.err.println("Usage Driver <integer>"); System.exit(0); MutableInteger sumobject = new MutableInteger(); int upper = Integer.parseInt(args[0]); Thread worker = new Thread(new Summation(upper, sumobject)); worker.start();

Threads em Java Exemplo (2): try { worker.join(); } catch (InterruptedException ie) { } } System.out.println("The value of " + upper + " is " + sumobject.get());

Threads em Java As threads podem estar em um dos 4 estados: Novo: quando é criada (new); Executável: método start( ) para alocar memória e chama o método run ( ); Bloqueado: utilizado para realizar uma instrução de bloqueo ou para invocar certos métodos como sleep( ); Morto: passa para esse estado quando termina o método run();

Semântica do fork() e exec() Aspectos do uso de threads fork( ) cria novo processo=>sistemas UNIX podem ter duas versões de fork( ): Uma que duplica todas as threads Outra que duplica apenas a thread que invocou a chamada de sistema fork() fork( ) seguida de exec( ): é feita apenas a duplicação da thread de chamada; fork( ) não seguida de exec( ): é feita a duplicação de todas as threads; Chamada de sistema exec( ) isoladas: em geral substituem o processo inteiro, incluindo todas as suas threads.

Cancelamento de Thread Corresponde à tarefa de terminar um thread antes que se complete. Exemplos: multiplas threads pesquisando em banco de dados; Navegador web acessando uma página. Denominada thread alvo e pode ocorrer em dois diferentes cenários: Cancelamento assíncrono: um thread imediatamente termina o thread-alvo. Pode não liberar os recursos necessários a nível de sistema. Cancelamento adiado permite o thread alvo ser periodicamente verificado se deve ser cancelada;

Cancelamento de Thread Cancelamento adiado em Java - Interromper a thread

Cancelamento de Thread Cancelamento adiado em Java - Verificando status de interrupção

Tratamento de Sinais Sinais são usados nos sistemas UNIX para notificar um processo de que um evento específico ocorreu; Um sinal pode ser: Síncrono: se forem liberados para o mesmo processo que provocou o sinal; Exemplo: processo executa divisão por 0 e recebe sinal de notificação. Assíncrono: se forem gerados por um evento externo (ou outro processo) e entregues a um processo;

Sinais para processos comuns São liberados apenas para o processo específico (PID); Sinais para processos multithread: várias opções Tratamento de Sinais Liberar o sinal para a thread conveniente (ex.: a que executou divisão por zero); Liberar o sinal para todas as threads do processo (ex.: sinal para término do processo); Liberar o sinal para determinadas threads; Designar uma thread específica para receber todos os sinais.

Cadeias de Threads A criação/finalização de threads traz alguns problemas: overhead: Caso do servidor web: recebe muitas conexões por segundo: Criar e terminar inúmeras threads é um trabalho muito grande; Trabalha-se com um número ilimitado de threads: término dos recursos

Cadeias de Threads Solução: utilizar cadeia de threads em espera Na inicialização do processo, cria-se um número adequado de threads As threads permanecem aguardando para entrar em funcionamento Quando o servidor recebe uma solicitação, desperta uma thread da cadeia (se houver disponível, senão espera) e repassa trabalho Quando thread completa serviço, volta à cadeia de espera Vantagens: mais rápido que criar thread, limita recursos

Threads em Linux O Linux refere-se a elas como tarefas, em vez de threads; A criação de thread é feita através da chamada de sistema clone( );

Aula 04 - Sumário Uma thread é a unidade básica utlizada pela CPU, onde um processo é composto de uma ou mais threads; Cada thread tem: registradores, pilha, contadores; As threads compartilham: código, dados, e recurso do SO, como arquiivo aberto; Threads de nível usuário e nível kernel; Modelos de mapeagemnto de threads usuário para kernel: N-para -1, 1-para-1, N-para-N. Bibliotecas: Pthreads, Win32, Java

Silberschatz, A., Galvin, P. B. Gagne, G. Sistemas Operacionais com Java. 7º, edição. Editora, Campus, 2008. Leituras Sugeridas Silberschatz, Abraham; Galvin, Peter Baer; Gagne, Greg. Fundamentos de sistemas operacionais. 6 ed. Rio de Janeiro: LTC, 2009. https://computing.llnl.gov/tutorials/ pthreads/

Nota de Aula Acesse o link abaixo: http://hostel.ufabc.edu.br/~marcelo.nascimento/ Obrigado!!!