Threads Aula 04 2 Quadrimestre



Documentos relacionados
Sistemas Operacionais Aula 06: Threads. Ezequiel R. Zorzal

(Aula 15) Threads e Threads em Java

Sobre a apresentação (About(

PROCESSOS. Prof. Maicon A. Sartin

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.

Programação Concorrente Processos e Threads

8 Threads. 8.1 Introdução

Threads. 8 de janeiro de 2015

SISTEMAS OPERACIONAIS

Threads e Concorrência em Java (Material de Apoio)

É a associação de mais de um fluxo de execução em um único processo.

Sistemas Distribuídos Processos I. Prof. MSc. Hugo Souza

Escalonamento de CPU 2 Quadrimestre

Sistemas Operacionais I

SO: Gerenciamento de Processos

Multithreading. Programação Orientada por Objectos com Java. Ademar Aguiar. MRSC - Programação em Comunicações

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

Threads em Java. Sistemas Operacionais - Laboratório Professor Machado

THREADS EM JAVA. George Gomes Cabral

Java Threads. Introdução

Introdução à Computação: Sistemas de Computação

Até o final de década de 70, os sistemas operacionais suportavam apenas processos com um único thread;

Programação Concorrente Conceitos Multiprogramação Threads

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

CONCEITOS BÁSICOS DE UM SISTEMA OPERATIVO

insfcanceof new public switch transient while byte continue extends for int null

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

Escalonamento de processos

Sistemas Operacionais. Prof. André Y. Kusumoto

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Sistemas Operativos. Threads. 3º ano - ESI e IGE (2011/2012) Engenheiro Anilton Silva Fernandes (afernandes@unipiaget.cv)

Processos e Threads (partes I e II)

Computação II Orientação a Objetos

Analisar os sistemas operacionais apresentados na figura e responder as questões abaixo: Identificar

Programação Concorrente em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM

(Aula 17) Threads em Java

Infra-Estrutura de Software. Introdução. (cont.)

Programação Orientada a Objetos em Java. Threads Threads Threads. Threads

Capítulo 2 Processos e Threads Prof. Fernando Freitas

Universidade Federal da Paraíba

Sistema Operacional Correção - Exercício de Revisão

Guia de utilização da notação BPMN

implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Fernando Ramos, Nuno Neves, Sistemas Operativos,

Especificação do Trabalho Prático

BC Sistemas Operacionais Sistema de Arquivos (aula 10 Parte 2) Prof. Marcelo Z. do Nascimento

Gerenciamento Básico B de Memória Aula 07

Permitir a troca de mensagens de texto entre os dois alunos; Permitir que um aluno enviasse para o outro uma cópia de prova;

BC0505 Processamento da Informação

Programação com Posix Threads

Sistemas Operativos Cap. IV Threads. Prof. José Rogado Universidade Lusófona

Métodos de Sincronização do Kernel

Carga horária : 4 aulas semanais (laboratório) Professores: Custódio, Daniel, Julio foco: introdução a uma linguagem de programação Linguagem Java

Processos (Threads,Virtualização e Migração de Código)

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar

Algoritmos e Programação II. Sobrecarga

Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger

Sistemas Operacionais

Linguagens de Programação Aula 10

Exercícios de Revisão Java Básico

Notas da Aula 6 - Fundamentos de Sistemas Operacionais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais

O mecanismo de alocação da CPU para execução de processos constitui a base dos sistemas operacionais multiprogramados.

Introdução à Sistemas Operacionais. Glauber Magalhães Pires

Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede

Arquitetura dos Sistemas Operacionais

Implementando uma Classe e Criando Objetos a partir dela

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

DESENVOLVIMENTO PARA DISPOSITIVOS MÓVEIS. PROFª. M.Sc. JULIANA H Q BENACCHIO

Fundamentos de Programaçã. ção Concorrente

Java. Marcio de Carvalho Victorino

Sistemas Operacionais Arquitetura e organização de sistemas operacionais: Uma visão estrutural hardware & software. Prof. MSc.

Sistemas Operacionais

Udesc/Ceplan Bacharelado em Sistemas de Informação Sistemas Operacionais. Prof. Alexandre Veloso

LINX POSTOS AUTOSYSTEM

AULA 16 - Sistema de Arquivos

Sistemas Operacionais I Parte VI Threads

Nível do Sistema Operacional

Análise e Projeto Orientados por Objetos

SERVIDORES REDES E SR1

ARQUITETURA DE COMPUTADORES

Arquitetura e Organização de Computadores

Introdução. O que vimos. Infraestrutura de Software. (cont.) História dos Sistemas Operacionais. O que vimos 12/03/2012. Primeira geração:

UML: Diagrama de Casos de Uso, Diagrama de Classes

Sistemas Operacionais

Sistemas Operacionais Aula 03: Estruturas dos SOs. Ezequiel R. Zorzal

1. TSA Inovação - TSA DT_Arquivo_de_Log_do_Integrador_Separado_por_Thread DT_Central_de_Ajuda_UX9...

Sistemas Operacionais

Gerência do Sistema de Arquivos. Adão de Melo Neto

Threads e Sockets em Java. Threads em Java. Programas e Processos

Sistemas Distribuídos: Conceitos e Projeto Threads e Migração de Processos

Transcrição:

BC1518 - Sistemas Operacionais Threads Aula 04 2 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; Select shape and start typing. Resize box to desired dimensions. Move control handle to aim pointer at speaker. Select shape and start typing. Resize box to desired dimensions. Move control handle to aim pointer at speaker. Select shape and start typing. Resize box to desired dimensions. Move control handle to aim pointer at speaker. 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 todas a threads de de um um processo multithread para para um um único único contexto de de execução

Modelos de múltiplas threads Kernel: 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 Tenta resolver as as limitações ões dos dos threads threads de de usuário rio mapeando cada cada thread thread para para seu seu próprio prio prio contexto de de execução ã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 Thread de kernel Exemplo: Green threads: threads escalonadas em ambiente virtual em SO nativo.

Um-para-um: Modelo de multithreading 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) Bibliotecas Threads Define uma API, implementada sobre o SO; Utilizada em sistemas UNIX: Linux, Mac OS X; Padrão IEEE POSIX 1003.1c ; 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.

POSIX Threads Exemplo: #include <pthread.h> #include <stdio.h> int sum; /* compartilhado entre as threads*/ void *runner(void *param); /* a thread */ Pthreads Compilação: gcc thrd.c -lpthread Biblioteca para trabalhar com 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 */ pthread_attr_init(&attr); /* cria a thread */ pthread_create(&tid,&attr,runner,argv[1]); /* espera a thread finalizar */ pthread_join(tid,null); } 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);

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 Tratamento de Sinais São liberados apenas para o processo específico (PID) ; Sinais para processos multithread: várias opções 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!!!