1 / 24 Erick Nilsen Pereira de Souza T002 - Sistemas Operacionais e Org. Computadores Análise e Desenvolvimento de Sistemas Universidade de Fortaleza - UNIFOR 8 de janeiro de 2015
2 / 24 Agenda Tópicos Visão Geral Modelos Multithread Exemplo prático: threads em Java
3 / 24 Visão Geral Sumário 1 Visão Geral 2 Modelos Multithread 3 Exemplo prático: threads em Java
4 / 24 Visão Geral Visão Geral Conceito Uma thread pode ser entendida como uma linha de execução em um processo. É uma rotina de um processo em execução que compartilha o mesmo espaço de endereçamento, mas tem seu próprio contexto de hardware e de software. Um processo pode ter várias threads, podendo ser executadas em paralelo.
5 / 24 Visão Geral Processo com uma ou múltiplas threads
6 / 24 Visão Geral Visão Geral Conceito Multiplas tarefas em uma aplicação podem ser executadas por diferentes threads Ex: a verificação ortográfica pode ser realizada em paralelo à entrada de texto de um programa. Vantagens A criação de uma thread é mais leve que a criação de um processo. Se usadas com cuidado, podem simplificar o código e aumentar a eficiência. Há um maior compartilhamento de recursos (economia).
7 / 24 Visão Geral Arquitetura cliente-servidor com threads Conceito Um ou mais clientes solicitam serviços do servidor. Ex: Um servidor WEB aceitando requisições de clientes para páginas WEB. A cada requisição do cliente é criado um novo processo no servidor. É menos custoso criar várias threads dentro do mesmo processo para cada requisição.
8 / 24 Visão Geral Arquitetura cliente-servidor com threads
9 / 24 Visão Geral Benefícios Categorias Responsividade (melhor resposta ao usuário): permite que um programa continue executando mesmo que parte dele esteja realizando uma operação longa (em threads diferentes). Compartilhamento de recursos: as threads compartilham memória e recursos do processo ao qual pertence. Economia: consequência do compartilhamento de recursos; é mais custoso criar processos do que threads. Utilização de arquiteturas multiprocessadas: um processo só pode ser executado em uma CPU, mesmo que haja várias disponíveis; múltiplas threads podem ser executadas em processadores distintos, aumentando o paralelismo.
10 / 24 Visão Geral Execução concorrente em um sistema sigle core
11 / 24 Visão Geral Execução paralela em um sistema multicore
12 / 24 Modelos Multithread Sumário 1 Visão Geral 2 Modelos Multithread 3 Exemplo prático: threads em Java
13 / 24 Modelos Multithread Modelos Multithread Conceito O suporte das threads pode ser fornecido no nível do usuário ou do kernel. As threads do usuário são gerenciadas sem o suporte do kernel. Ex: JVM, As threads do kernel são gerenciadas pelo SO. Ex: Pthreads (API do Linux) e Win32 (API do Windows). Existe uma relação entre as threads do usuário e do kernel. Modelos Many-to-One One-to-One Many-to-Many
14 / 24 Modelos Multithread Modelos Many-to-One Conceito Múltiplas threads do usuário são mapeadas para uma thread do kernel. Somente uma thread do usuário pode acessar o kernel por vez. Várias threads não podem ser executadas em paralelo em multiprocessadores. Implementado no Solaris.
15 / 24 Modelos Multithread Modelo Many-to-One
16 / 24 Modelos Multithread Modelos One-to-One Conceito Cada thread do usuário é mapeada para uma thread do kernel. Permite que várias threads sejam executadas em paralelo em multiprocessadores. Vantagem: aumenta o paralelismo. Desvantagem: custo adicional na criação de threads de kernel prejudica o desempenho das aplicações. Implementado no Windows e Linux.
17 / 24 Modelos Multithread Modelo One-to-One
18 / 24 Modelos Multithread Modelos Many-to-Many Conceito Permite que muitas threads do usuário sejam mapeadas em um número menor ou igual de threads do kernel. PO sistema operacional cria um número suficiente de threads no kernel. Em média, melhora a questão do custo adicional na criação de threads de kernel.
19 / 24 Modelos Multithread Modelo Many-to-Many
20 / 24 Exemplo prático: threads em Java Sumário 1 Visão Geral 2 Modelos Multithread 3 Exemplo prático: threads em Java
21 / 24 Exemplo prático: threads em Java em Java Conceito É possível criar threads programaticamente em Java através da implementação da interface Runnable. Cada thread deve implementar o método Runnable.run(). A chamada a uma thread é feita pelo método start().
22 / 24 Exemplo prático: threads em Java em Java Exercício Criar mais uma thread no exemplo dado. Implementar a seguinte regra: quando a primeira das 3 threads finalizar sua execução, o programa deve suspender a execução das outras duas e mostrar o último valor impresso por cada uma. Teste sua solução para os intervalos de valores [0,10] e [0,1000]. Dica: usar o método interrupt().
23 / 24 Exemplo prático: threads em Java Bibliografia TANENBAUM, Andrew S. Organização estruturada de computadores. Tradução de Arlete Simille Marques. 5. ed. São Paulo: Pearson Prentice Hall, 2007. SILBERSCHATZ, Abraham. Operating system concepts. Colaboração de Peter Baer Galvin. 5. ed. Reading: Addison-Wesley, 1998. TANENBAUM, Andrew S. Sistemas operacionais modernos. Tradução de Ronaldo A. L Goncalves; Luis A Consularo; Luciana do Amaral Teixeira. 3. ed. São Paulo: Pearson Education do Brasil, 2009.
24 / 24 Exemplo prático: threads em Java Erick Nilsen Pereira de Souza T002 - Sistemas Operacionais e Org. Computadores Análise e Desenvolvimento de Sistemas Universidade de Fortaleza - UNIFOR 8 de janeiro de 2015