Processos e Threads Linha de execuo Conceito Linha
- Slides: 15
Processos e Threads (Linha de execução )
Conceito • Linha de execução (Thread) é uma corrente única de controle sequencial dentro de um programa. • É uma forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas concorrentemente. A sua execução pode ser suportada tanto pelo sistema operativo, no caso da linha de execução a nivel do núcleo ( KLT- Karnel Level Threads), assim como por bibliotecas de linguagens de programação para o caso de linha de execução a nivel do usuário (ULT- User Level Threads). 2/23/2021 Elaborado por: dr. Ivo Passe 2
Conceito • Uma linha de execução, permite ao usuário, utilizar uma funcionalidade do ambiente do programa, enquanto outras linhas de execução realizam outras operações. No contexto de hardwares existem os que processam as linha de execução uma de cada vez, são os que possuem apenas um CPU chamados monothread, e os que processam multiplas linha de execução em simultanêo, os que possuem multiplos CPUs (multi-cores), os chamados multithread. 2/23/2021 Elaborado por: dr. Ivo Passe 3
Estados de uma linha de execução • Os possiveis estados de uma linha de execução são: • Criação - Neste estado, o processo pai cria a linha de execução que é em seguida é levada a fila de prontos; • Pronto - Neste estado a linha de execução, declara-se pronta, aguardando pelo espaço no CPU para que entre em execução; • Execução - Neste estado a linha de execução faz o uso do CPU; • Espera / Bloqueado - Neste estado, por algum motivo, a CPU bloqueia a linha de execução, geralmente enquanto aguarda algum dispositivo de I/O; 2/23/2021 Elaborado por: dr. Ivo Passe 4
Estados de uma linha de execução • Saida / Término - Neste estado a linha de execução termina seu processamento e abandona o CPU. 2/23/2021 Elaborado por: dr. Ivo Passe 5
Categorias de linhas de execução (threads) • Linha de execução a nivel do usuário (ULT- User Level Threads) § ULT, é implementada basicamente por pacotes de rotina de programação, fornecidos por uma bibliotecas de limguagens de programação tais como a biblioteca padrão da linguagem C, da linguagem Java e outras, pacotes esses que baseam-se em (códigos para criação, término, escalonamento e armazenamento de dados). A ULT possui a vantagem de poder ser implementada em sistemas operativos que não suportam nativamente este recurso, geralmente são mais rápidas e eficientes pois dispensam o acesso ao núcleo, evitando assim mudanças no modo de acesso, e, a sua estrutura de dados fica no espaço do usuário, levando a uma significativa queda de overhead (saturação), 2/23/2021 Elaborado por: dr. Ivo Passe 6
Categorias de linhas de execução (threads) • além de poder escolher entre as diversas formas de escalonamento em que melhor se adequa. Esta categoria suporta as mesmas operações que as linha de execução KLT (criação, termino, juntar e desistir). • Diagrama de ULT: 2/23/2021 Elaborado por: dr. Ivo Passe 7
Categorias de linhas de execução (threads) • Linha de execução a nivel do núcleo ( KLT- Karnel Level Threads) § KLT, o gerenciamento de linha de execução KLT não é realizado através do código do próprio programa tal como o ULT; todo o processo é gerido pelo sistema operativo. Esse modelo tem a vantagem de permitir o suporte a multiprocessamento e o fato do bloqueio de uma linha de execução não leva ao bloqueio de todo processo, não obstante, temos a desvantagem de ter que mudar o tipo de acesso sempre que o escalonamento for necessário aumentando assim o tão temido overhead. 2/23/2021 Elaborado por: dr. Ivo Passe 8
Categorias de linhas de execução (threads) • Diagrama de KLT: 2/23/2021 Elaborado por: dr. Ivo Passe 9
Gerenciamento das linhas de execução • Exitem quatro operações básicas de gerenciamento de linhas de execução: • • Criação (Thread creation) ; Término (Thread termination) ; Junção (Thread join); Rendimento da linha de execução (Thread yield). • Criação (Thread creation) - Basicamente uma linha de execução pode dividir-se em duas, que executam em simultâneo, a linha de execução criadora é a linha de execução pai e a criada é a linha de execução filha. 2/23/2021 Elaborado por: dr. Ivo Passe 10
Gerenciamento das linhas de execução • As linhas de execução incluidas na função main, quando executadas podem criar linhas de execução filhas podendo ser mais de uma, onde todas elas disputarão o CPU para que possam ser executadas. • Término (thread termination) - Para maioria dos casos as linhas de execução não são criadas e executadas eternamente. Depois de terminado seu trabalho, elas terminam. No caso, a linha de execução criadora (linhas de execução pai) também termina porque sua tarefa se completa. Em geral quando a tarefa atribuída a linhas de execução se completa, esta pode ser terminada. Há que notar, se 2/23/2021 Elaborado por: dr. Ivo Passe 11
Gerenciamento das linhas de execução • a linhas de execução pai terminar, todas as linhas de execução filhas também terminam, porque as filhas compartilham recursos com a linha de execução pai, incluindo variáveis. • Quando a linha de execução pai termina, todas as variáveis são perdidas e a linha de execução filha perde o acesso aos recursos que a linha de execução pai possui. • Uma linha de execução pode terminar das seguintes maneiras: § Retornando a sua rotina mais externa, a linha de execução criadora. 2/23/2021 Elaborado por: dr. Ivo Passe 12
Gerenciamento das linhas de execução § Quando termina a rotina em que foi começada. § Chamando pthread_exit, fornecendo um estado de saída. § Terminando através da função pthread_cancel. • Junção (Thread Join) - A junção de linhas de execução (thread join) consiste em, a linha de execução pai adicionar a si uma outra linha de execução filha, que possa em simultâneo executar uma tarefa que a complemente. Neste caso a linha de execução pai só termina depois que a linha de execução filha termine. 2/23/2021 Elaborado por: dr. Ivo Passe 13
Gerenciamento das linhas de execução • Rendimento da linhas de execução (Thread Yield) – atingi-se o rendimento da linha de execução quando temos programas com linhas de execução longas ou linhas de execução que levam muito tempo a fazer o uso do CPU, dessa maneira as linhas de execução que aguardam pelo espaço no CPU, para a sua execução ficam a espera por longo tempo. Isso pode ser um problema de politica de planejamento do sistema operativo, o que faz com que, a linha de execução, execute o thread yield. • Quando o thread yield entra em execução, a linha de execução é suspensa de forma a libertar o CPU e aguardar que esteja novamente disponivel para retornar. 2/23/2021 Elaborado por: dr. Ivo Passe 14
Tema para proxima aula: • Escalonamento das Linhas de execução • Modelo de Geração de Multithreads FIM 2/23/2021 Elaborado por: dr. Ivo Passe 15