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



Documentos relacionados
THREADS EM JAVA. George Gomes Cabral

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

Programação Concorrente Conceitos Multiprogramação Threads

Processos e Threads (partes I e II)

Java Threads. Introdução

Programação Concorrente

Disciplina de Sistemas Distribuídos. Sincronização em SD. Prof. M.Sc. Alessandro Kraemer Kraemer

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

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

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

(Aula 17) Threads em Java

Sistemas Operacionais

Programação Concorrente Processos e Threads

Programação Orientada a Objetos Threads

Programação Concorrente em java - Exercícios Práticos Abril 2004

Revisão Ultima aula [1/2]

(Aula 15) Threads e Threads em Java

Fundamentos de Programaçã. ção Concorrente

Sistemas Operacionais Processos e Threads

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

Java : Comunicação Cliente-Servidor.

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

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

Métodos de Sincronização do Kernel

BC1518-Sistemas Operacionais. Prof. Marcelo Z. do Nascimento

Processos. Adão de Melo Neto

Slide. ! Multiprocessamento! Modelo de processo. Dep. Ciência da Computação. Slide. ! Alternância de processos. ! Relação Programa x Processo

Sistemas Distribuídos

SISTEMAS OPERACIONAIS

Arquitetura de Sistemas Operacionais

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

Threads. 8 de janeiro de 2015

7 Processos. 7.1 Introdução

Monitores. Conceito Sistemas Operacionais II

Sistemas Operacionais

Sistemas Operacionais Aula 06: Threads. Ezequiel R. Zorzal

UNIVERSIDADE. Sistemas Distribuídos

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

Introdução a Threads Java

Sistemas Operacionais

7 Processamento Paralelo

Sistemas Operacionais

Universidade da Beira Interior. Sistemas Distribuídos

Threads Aula 04 2 Quadrimestre

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

Universidade Federal da Paraíba

Sistemas Distribuídos

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

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

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

PROCESSOS. Prof. Maicon A. Sartin

SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar

Sistemas Operacionais Sincronização e Comunicação entre Processos

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

IMPLEMENTAÇÃO DE SOCKETS E THREADS NO DESENVOLVIMENTO DE SISTEMAS CLIENTE / SERVIDOR: UM ESTUDO EM VB.NET

Escalonamento no Linux e no Windows NT/2000/XP

Capítulo 8 Arquitetura de Computadores Paralelos

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

O que veremos nesta aula? Principais Aspectos de Sistemas Operacionais. Visão geral de um sistema computacional

Sistemas Distribuídos

Gerenciamento de Processos

Sistemas Operacionais Aula 08: Sincronização de Processos. Ezequiel R. Zorzal

Capítulo 8. Sistemas com Múltiplos Processadores. 8.1 Multiprocessadores 8.2 Multicomputadores 8.3 Sistemas distribuídos

Sistemas Operacionais. Patrícia Megumi Matsumoto Luciana Maria Gregolin Dias

Faculdades Santa Cruz - Inove. Plano de Aula Base: Livro - Distributed Systems Professor: Jean Louis de Oliveira.

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

Aula 3. Sistemas Operacionais. Prof: Carlos Eduardo de Carvalho Dantas

Sincronização e Comunicação entre Processos. Adão de Melo Neto

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

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 1. Cursos de Computação

Sistemas Operacionais

EXEMPLO: Processo para atualização da hora Processo para monitoramento da necessidade de proteção de tela. Figura Exemplo

LABORATÓRIO DE SISTEMAS OPERACIONAIS. PROFª. M.Sc. JULIANA HOFFMANN QUINONEZ BENACCHIO

Sistemas Distribuídos

Programação distribuída e paralela (C. Geyer) RPC 1

Sistemas Operacionais

4. GERÊNCIA DE PROCESSADOR (Escalonamento de processos)

Sistemas Operacionais

Sistemas Operacionais I

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

MODELAGEM E SIMULAÇÃO

8 Threads. 8.1 Introdução

1.6. Tratamento de Exceções

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 04 - Concorrência. Cursos de Computação

Aula 30 - Sockets em Java

Sistemas Distribuídos. Aleardo Manacero Jr.

Java. Marcio de Carvalho Victorino

Transcrição:

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

Conceitos de Programação Concorrente Uma unidade concorrente é um componente de um programa que não exige a execução seqüencial, ou seja, que sua execução seja realizada antes ou após a execução de outros componentes do programa O termo programação concorrente é usado no sentido abrangente, para designar a programação paralela e a programação distribuída Concorrência relaciona-se com fluxo de controle: em um programa, existe mais de um fluxo de controle ativo. 2

Fluxo de Execução Execução seqüencial Comandos de controle de fluxo de execução Seqüencial Condicional Iterativo Requisição de execução de unidades explícita:chamada de métodos implícita: ativação de exceções Programa controla a ordem de execução Execução concorrente Cada tarefa é uma unidade de execução autônoma (um thread) Tarefas podem ser totalmente independentes Exemplo: execução de um mesmo método sobre dois objetos (da mesma classe) Tarefas podem necessitar comunicação Programa não controla a ordem de execução 3

Fluxo Seqüencial x Concorrente Fluxo único de execução Vários fluxos de execução tarefa 1 tarefa 2 tarefa 1 tarefa 2 tarefa 3 tarefa 3 cada fluxo possui uma pilha de execução 4

Execução Concorrente Execução concorrente, também conhecida como execução paralela, não significa execução simultânea A execução de unidades concorrentes admite as seguintes possibilidades: Pseudo-paralela: Execução em um único processador; Paralela: Execução em vários processadores que compartilham uma memória; Distribuída: Execução em vários processadores independentes, sem compartilhamento de memória. O programa geralmente não possui controle sobre a ordem e o tempo de execução das unidades concorrentes 5

Conceito de Threads Definição básica: Fluxo de controle seqüencial isolado dentro de um programa. Outra denominação: LightWeight Processes Programas multithreaded: Múltiplos threads concorrentes de execução num único programa, realizando várias tarefas ao mesmo tempo. Exemplo: programa do usuário + coleta de lixo Diferentes threads podem executar em diferentes processadores, se disponíveis, ou compartilhar um processador único Diferentes threads no mesmo programa compartilham um ambiente global (memória, processador, registradores, etc.) 6

Conceito de Threads As linguagens Java e Ada possuem funcionalidades MULTITHREADING na própria estrutura da linguagem. C e C++ necessitam de biblioteca especificapara processamento MULTITHREADING Posix p_thread 7

Threads em JAVA Em Java, threads são implementadas como uma CLASSE Pacote java.lang.thread É uma extensão da classe Thread Contrutores: public Thread (String nome_da_thread); public Thread ( ); // o nome sera Thread Thread-1, Thread-2, 8

Principais métodos start(): inicia a execução da thread (método run) suspend(): suspende a execução da thread que está executando sleep(): faz a thread que está executando dormir por um tempo determinado yield(): faz a thread que está executando dormir por um tempo indeterminado resume(): resume a execução de uma thread suspensa stop(): termina a execução de uma thread; a thread não pode ser mais executada. 9

Principais métodos join(): método que espera o término da THREAD para qual foi enviada a mensagem para ser liberada. interrupt(): método que interrompe a execução de uma THREAD. interrupted(): método que testa se uma THREAD está ou não interrompida. 10

Estados de uma thread Criação: Neste estado, o processo pai está criando a thread que é levada a fila de prontos; Execução: Neste estado a thread está usando a CPU; Pronto: Neste estado a thread avisa a CPU que pode entrar no estado de execução e entra na fila de prontos; Bloqueado: Neste estado, por algum motivo, a CPU bloqueia a thread, geralmente enquanto aguarda algum dispositivo de I/O; Término: Neste estado são desativados o contexto de hardware e a pilha é desalocada. Esperando e Finalizado. 11

Estados de uma thread 12

Sincronização e Coordenação de Threads Utilizar os métodos multuamente excludentes de um objeto como do tipo synchronized em Java. Utilizar os métodos wait( ) e notify( ) para bloquear e liberar, respectivamente, as threads. 13

A interface Runnable Para utilizar multithreads em Java é necessário instanciar um objeto de uma classe que estende a classe básicathread, certo? Uma vez que Java não possui herança múltipla, como eu posso utilizar um objeto, cuja classe já é derivada, como no caso da ClasseThread? public class Filho extends Pai extends Thread {. } // isto nao eh possivel em Java 14

A interface Runnable A solução encontrada em Java foi a utilização de uma interface: Runnable No caso, tem-se de implementar esta interface, que possui o método run( ). public class Filho extends Pai implements Runnable Ao implementar uma interface, a classe se capacita a ser tratada como se fosse um objeto do tipo da inteface implementada. Se a classe Filho implementar a interface Runnable, ela pode ser tratada como tal. 15

A interface Runnable Cria-se uma thread (Classe Thread), passando para o seu construtor uma referência do objeto que implementa a interface Runnable. Thread uma_thread = new Thread(Runnable obj_thread) Thread uma_thread = new Thread(Runnable obj_thread, nome_da_thread) String 16

Semáforos (Tanenbaum) Definição Sincronização de Processos Bloqueantes Baixo Nível Composto por: Duas Primitivas: UP e DOWN Inteiro não negativo Fila de processos 17

Semáforos (Tanenbaum) Definição UP(s) se s = 0 e existem processos bloqueados então: libera um dos processos Senão: s := s + 1 DOWN(s) se s > 0 então: s:= s 1 senão: processo é bloqueado 18

Semáforos (Tanenbaum) Observações UP e DOWN devem ser atômicos UP representa a primitiva V DOWN representa a primitiva P O contador do semáforo representa o número de recursos disponíveis 19

Semáforos (Java) Criação Modelados pela classe Semaphore Na criação de um objeto pode-se especificar: Valor do contador do semáforo Modo de gerenciamento da fila de processos bloqueados (FIFO ou não ordenada) 20

Semáforos (Java) Criação Protótipo Semaphore(int permits, boolean fair) Onde permits: valor inicial do contador do semáforo fair: se verdadeiro define ordenação FIFO da fila de processos bloqueados 21

Semáforos (Java) Requisição/Liberação Requisição (Primitiva P) Métodos bloqueantes Métodos bloqueantes com timeout Métodos Não bloqueantes Liberação (Primitiva V) Métodos Não bloqueantes 22

Semáforos (Java) Requisição Protótipos Bloqueantes acquire() acquire(int permits) Não Bloquantes tryacquire(int permits, long timeout, TimeUnit unit) Onde permits: decremento do contador do semáforo timeout: tempo de espera pela permissão ao acesso 23

Semáforos (Java) Liberação Protótipos release() release(int permits) Onde Permits: incremento do contador do semáforo 24

Semáforos (Java) Status availablepermits() Informa o número de acessos permitidos no momento getqueuelength() Retorna o número de threads bloquadas Apenas uma estimativa (sem sincronização) 25