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

Documentos relacionados
Sistemas Operativos 4ª parte - Threads

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

Chapter 4: Threads. Operating System Concepts 8th Edition

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

Arquitetura de Sistemas Operativos

Sistemas Distribuídos Aula 3

Sistemas Operacionais

Sistemas Operacionais I Parte VI Threads

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

Sumário. Sistemas Operativos 1

Arquitetura de Sistemas Operativos

Sobre a apresentação (About(

Sistemas Operacionais

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

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

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

INTRODUÇÃO AOS SISTEMAS OPERACIONAIS SEMANA 13

Sistemas Operacionais Processos. Carlos Ferraz Jorge Cavalcanti Fonsêca

Estruturas de Sistemas Operacionais

Sistemas Operacionais Aula 06: Threads. Ezequiel R. Zorzal

Chamadas de Sistema (SYSCALL)

Threads. MCTA Sistemas Operacionais. Emilio Francesquini 2019.Q1

Linguagem de Programação I

Sistemas Operacionais

Sistemas Operacionais

Multiprocessamento. Escalonamento de Processos: Algoritmos. Escalonamento em POSIX. Escalonamento de Threads. Padrão de Execução dum Processo

Arquitetura de Computadores Sistemas Operacionais II

Sistemas Operativos: Implementação de Processos

Na Aula Anterior... O Conceito de Threads

SSC0640 Sistemas Operacionais I

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

AULA Nº 08 SISTEMAS OPERACIONAIS. Threads

Fundamentos de Sistemas de Operação (FSO)

COS Sistemas Operacionais. SystemCalls() [Linux Kernel Development, 2 nd edition] Prof. Vítor Santos Costa

Sistemas Operativos: Implementação de Processos

Threads. Pedro Cruz. EEL770 Sistemas Operacionais

Sistemas Operacionais. Conceito de Processos

EEL770 Sistemas Operacionais

Introdução. Introdução aos Sistemas Operacionais Volnys Bernal. Sumário. Introdução aos Sistemas Operacionais. Sobre esta apresentação

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

2 - Organização do Sistema Operativo. Prof. Ricardo Silva

Sistemas Operacionais II

Sistemas Operacionais. Universidade Federal de Minas Gerais. Aula 2. Gerência de Processos

UFRJ IM - DCC. Sistemas Operacionais I. Unidade IV Gerência de Recursos Entrada e Saída. 02/12/2014 Prof. Valeria M. Bastos

Sistemas Operativos I/O. Rui Maranhão

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

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

Ambientes de Execução

Sistemas Operacionais. Rodrigo Rubira Branco

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

Arquitetura de Sistemas Operativos

Sistemas Operacionais

Exclusão Mútua (mutex)

Sistemas Operativos. Processos, threads e eventos. Rui Maranhão

INE 5645 Programação Paralela e Distribuída

Sistemas Operacionais

Unix: Processos e o Kernel. Sistemas Operacionais

Unix: Processos e o Kernel

Processos ca 3 pítulo

Sistemas Operativos: Escalonamento de Processos

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

Introdução aos Sistemas Operacionais. Threads

Unidade 2. Processos Threads Concorrência em Java

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

Introdução aos Sistemas Operacionais

Ferramentas para Programação em Processadores Multi-Core

Sistemas Distribuídos. Ricardo Ribeiro dos Santos

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

Sistemas Operacionais II

Conceito de Processo. Estados de Processos. Diagrama de Estados de Processos

Introdução. Introdução aos Sistemas Operacionais Volnys Bernal. Agenda. Introdução aos Sistemas Operacionais. Sobre esta apresentação

Resumo: Sistemas Operacionais Abertos

! Os primeiros computadores permitiam a execução de apenas um programa de cada vez, com acesso completo aos recursos do sistema

Sistemas Operativos Cap. VII Gestão Memória

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

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

Sistemas Operativos 5ª parte - Escalonamento do CPU

Gestor de Processos. Gestor de Processos

(Aula 15) Threads e Threads em Java

Sistemas Operacionais II Weig Tatiele Ludmila

Sistemas Operacionais de Tempo Real. Sérgio Campos

Unix: Processos e o Kernel. Sistemas Operacionais

Introdução. Introdução aos Sistemas Operacionais Volnys Bernal. Agenda. Introdução aos Sistemas Operacionais. Sobre esta apresentação

Sistemas Operativos. Luís Paulo Reis. Sistemas Operativos. Sumário

Sistemas de Arquivos. (Aula 23)

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

Sistemas Operacionais. Introdução a Sistemas Operacionais

Na Aula Anterior... Interrupções por software e hardware; Temporizadores; RTC; Temporizadores via software. Relação Processos Multiprogramação

Sistemas Distribuídos Aula 2

Sistemas Operacionais I

Introdução. Introdução aos Sistemas Operacionais Volnys Bernal. Agenda. Introdução aos Sistemas Operacionais. Sobre estes slides

Processos. Um SO executa uma multiplicidade de programas, em batch ou time-sharing, que se designam por: ÈÖÓ Ó é um programa em execução.

Processos. Programas e Processos. Aula 1 - Chamadas ao sistema. José Pedro Oliveira fork exit getpid, getppid wait, waitpid

Threads. O que é uma Thread? Paralelismo

Sistemas Operacionais Aula 3

Complementos de Programação. Engenharia Electrotécnica - Electrónica e Computadores. Ano Lectivo: 2005/2006. Ana Madureira. Gestão de Processos

Transcrição:

Sistemas Operativos Cap. IV Threads Prof. José Rogado jose.rogado@ulusofona.pt Universidade Lusófona

Threads Necessidades e Conceito Modelos de Multithreading Problemas de Threading As Pthreads Windows XP Threads Linux Threads Java Threads 4.2

Necessidades de Multithreading Browser Browser Servidor Servidor Web Web Browser Browser Grande parte das aplicações interactivas e distribuídas precisa de gerir diversos fluxos de execução simultâneos Interactividade com utilizador (Browser) ou gestão de várias conecções simultâneas (Web server) A utilização de vários processos distintos não é óptima pois implica overhead na comunicação de dados e comutação de contexto 4.3

Múltiplos Fluxos de Execução A solução passa por criar vários fluxos de execução dentro de cada processo Executam código independente Podem bloquear sem que o processo bloqueie Partilham todo o espaço de memória do processo Têm contextos de execução separados Esses fluxos de execução designam-se por threads ou actividades Browser Servidores Web Servidor Web Servidor Web Servidor Web BDs BDs 4.4

Separação de Recursos Um processo é caracterizado por dois tipos de recursos distintos Recursos estáticos: espaço de endereçamento (código, dados, atributos, PCB, etc. Recursos dinâmicos: execução, estado, pilha, registos, escalonamento, etc. O modelo mutithreaded separa estes dois tipos de recursos: Os recursos estáticos são geridos através do conceito de processo ou tarefa (task) Os recursos dinâmicos são geridos através do conceito de thread ou actividade (lightweight process) O processo é a unidade de gestão de recursos A thread é a unidade de escalonamento 4.5

Single and Multithreaded Processes Thread Context No modelo multithreaded, em cada processo existem vários fluxos de execução ou threads (actividades) As várias threads de um processo partilham o espaço de endereçamento, mas têm contextos de execução distintos 4.6

Benefícios Maior interactividade Menor tempo de resposta Partilha de Recursos Economia Utilização de Arquitecturas Multiprocessador Programação paralela de alto desempenho 4.7

Escalonamento Clássico Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. No modelo clássico, em cada processo existe um único fluxo de execução A atribuição do CPU é feita por processo, sendo necessário uma comutação para passar de um fluxo para outro 4.8

Scheduling Progress Escalonamento Multi-threaded Sched init P1 Th1 P2 Th2 Th3 Th4 P3 Th5 Th1 Th6 Th2 No modelo multithreaded, cada processo pode ter vários fluxos de execução A atribuição do CPU é feita por thread, podendo não ser necessário uma comutação para passar de um fluxo para outro 4.9

Implementação do Conceito de Thread A implementação do conceito de Thread (ou actividade) pode ser feito de várias formas Implementação em modo utilizador numa biblioteca, ligada ao executável da aplicação Threads POSIX (pthreads) na implementação inicial Threads Java Fibers Windows Implementadas no sistema operativo, e invocadas através de uma API específica que utiliza os system calls Linux Windows XP/2000 Solaris Mac OS X Frequentemente, a mesma biblioteca de threads pode suportar as duas implementações, com desempenhos diferentes Threads POSIX (pthreads) 4.10

As pthreads Uma API standard POSIX (IEEE 1003.1c) para a criação de threads e sua sincronização A API especifica o comportamento da biblioteca de threads, a implementação é da responsabilidade da biblioteca Comum aos sistemas UNIX (Solaris, Linux, Mac OS X) Alguns métodos: pthread_create: criação de uma thread pthread_join: espera que uma thread acabe pthread_exit: finalização da thread pthread_mutex_init: criação de um mutex pthread_mutex_lock: aquisição do mutex pthread_mutex_try_lock: aquisição não bloqueante pthread_mutex_unlock: libertação do mutex 4.11

Exemplo: Criação das threads Espera Código da thread 4.12

Objectivo: Exemplo: Chat Pretende-se realizar uma aplicação que permita a dois processos comunicarem em modo conversacional (chat) Utilizando dois FIFOs para comunicar Funcionalidades de cada processo Ler o teclado e escrever no FIFO1 Ler o FIFO2 e escrever no terminal Não deve bloquear, permitindo enviar e receber dados simultaneamente São dadas 4 rotinas readkeyboard writeterminal receivebytes sendbytes 4.13

Chat: 1ª Solução Funciona? writeterminal writeterminal receivebytes fifoone fifotwo receivebytes P0 P1 sendbytes sendbytes readkeyboard readkeyboard 4.14

Chat: 2ª Solução Funciona!! writeterminal writeterminal receivebytes fifoone fifotwo receivebytes P0 P1 sendbytes sendbytes readkeyboard readkeyboard 4.15

Problemas de Threading Semântica dos system calls fork() e exec() Cancelamento de Threads Gestão de Sinais Pools de Threads Estruturas de controlo das threads 4.16

Semantica de fork() e exec() Será que fork() deve duplicar todas as threads de um processo, ou só aquela que invocou o system call? Se o processo invoca exec(), não é necessário duplicar as threads pois o novo processo vai carregar código diferente Se o processo continua a sua execução normal, deve ser idêntico ao processo pai, incluindo no número de threads Muitos sistemas (ex. Linux, Solaris) têm duas versões de fork() uma que duplica as threads, outra que não duplica (vfork, clone) No caso de fork() seguido de exec() deve ser utilizado vfork() Em Windows o syscall CreateProcess(), utilizado para criar e executar um novo processo, instancia sempre uma só thread (primary thread). Não existe equivalente de fork() 4.17

Cancelamento de Threads Cancelar uma thread antes do código ter finalizado Ex: caso de um browser que carrega uma página usando uma thread por frame e é interrompido pelo utilizador no meio do carregamento da página Duas aproximações possíveis: Terminação síncrona finaliza a thread imediatamente Pode ser problemático se uma thread se encontra no decurso de uma actualização de um recurso e pode criar problemas de coerência Terminação deferida deixa a thread alvo verificar periodicamente se deve ser terminada Permite que a thread detecte o facto de ter sido cancelada, e realizar as operações necessárias para o fazer de forma correcta A thread examina a ordem de terminar nos chamados cancellation points (pthreads) 4.18

Gestão de Sinais Os Sinais são utilizados em sistemas Unix para notificar um processo de que um dado evento ocorreu Versão utilizador dos interrupts hardware Syscall signal (int signum, sighandler_t handler) Um processo declara um signal handler para gerir sinais 1. Um sinal é gerado por um evento específico 2. O sinal é entregue ao processo sob forma da invocação do signal handler 3. O sinal é gerido pelo processo Em processos com threads: em que thread é executado o handler? Na thread na qual o sinal faz sentido (caso das excepções) Em todas as threads de um processo confuso e difícil de gerir Estabelecer de forma explícita que threads recebem que sinais pthread_sigmask() estabelece os sinais para cada thread sigwait() espera pelos sinais (cancellation point) 4.19

Pools de Threads Criação de um número de threads por antecipação As threads são guardadas numa pool esperando pelo necessidade de actuarem Vantagens: É mais rápido servir um pedido com uma thread existente do que criar uma nova Permitir que o numero de threads numa aplicação seja limitado a um número pré determinado Em caso de necessidade a aplicação pode alocar mais threads, caso tenha direitos para o efeito. Pode também diminuir o número de threads na pool em função da carga. Exemplos Windows: QueueUserWorkItem (Function) Permite executar uma função por uma thread da pool Java: packagethreadpool.java 4.20

Linux Threads Em Linux, uma nova thread cria um novo fluxo de execução que partilha todos os recursos Internamente não há distinção entre thread e processo Implementação one-to-one A criação de threads é feita através do syscall clone() que permite implementar fork e pthread_create Cria um novo fluxo de execução que pode ou não partilhar todos os recursos com o precedente No caso de partilha total, obtém-se uma nova thread no mesmo processo com uma nova pilha clone(clone_thread CLONE_VM CLONE_FILES, )=> pthread_create No caso de duplicação, obtém-se um novo processo com um espaço de endereçamento copiado mas distinto clone(sigchld, ) => fork Ambas as funcionalidades são implementadas por uma rotina comum: do_fork() http://lxr.linux.no/#linux+v2.6.31/kernel/fork.c#l1333 4.21

Estruturas de Dados em Linux thread_info.h thread_info 1 sched.h task_struct 1 thread_info 2 http://lxr.linux.no/#linux+v2.6.31/arch/x86/include/asm/thread_info.h task_struct 2 http://lxr.linux.no/#linux+v2.6.31/include/linux/sched.h#l1166 4.22

A Task List ~2Kbytes de memória Source: Linux kernel Development, Robert Love Novell Press, 2005. 4.23

Localização da thread_struct Source: Linux kernel Development, Robert Love Novell Press, 2005. 4.24

Threads Windows Implementação one-to-one Cada descritor de thread contém: Um identificador: thread id Cópia dos registos 2 pilhas: utilizador e supervisor Dados privados Os registos, as pilhas e os dados privados são designados pelo contexto da thread As estruturas de dados de uma thread incluem: ETHREAD (executive thread block) KTHREAD (kernel thread block) TEB (thread environment block) 4.25

Process Management Memory Management File Management Device Mgmt Infrastructure User Supervisor Arquitectura do Windows NT Libraries T Process Subsystem Hardware Abstraction Layer T NT Executive NT Kernel T T Process Subsystem Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Process T T T T Subsystem I/O Subsystem T Processor(s) Main Memory Devices 4.26

Criação de Processos no NT CreateProcess( ); Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Handle Table Win32 Subsystem ntcreateprocess( ); ntcreatethread( ); NT Executive Process Descriptor NT Kernel 4.27

Estruturas de Dados em XP Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. As estruturas de dados de uma thread incluem: ETHREAD (executive thread block) KTHREAD (kernel thread block) TEB (thread environment block) 4.28

Windows NT Thread Descriptor EPROCESS KPROCESS Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. NT Kernel ETHREAD KTHREAD NT Executive 4.29

API Threads do Windows http://msdn2.microsoft.com/en-us/library/ms684847.aspx 4.30

Exemplo: 4.31

Java Threads As threads Java são geridas pela JVM Podem ser criadas: Estendendo a classe Thread class <name> extends Thread Implementando a interface Runnable class <name> implements Runnable Ver em http://www.codestyle.org/java/faq-threads.shtml 4.32

Java Thread States 4.33

Fim do Capítulo