Title: Unidade 1-2 Processos e Threads
1Unidade 1-2 Processos e Threads
2O que é um Processo
- Um processo é uma atividade (ou tarefa) de um
programa, que contém o código e dados de uma
atividade. - Essas são leitura de dados, escrita de dados,
cálculos no processador, comunicação com o
usuário, comunicação com um BD, comunicação com a
rede interna ou externa, entre outras.
3Processos
- Um trecho de código em execução em uma máquina.
- É a unidade de processamento concorrente que um
processador sob um SO pode processar. - Identificado pelo seu PID (Process Identifier).
- Unix (anos 70) foi construído para executar
processos.
4Problema com Processos
- Nos anos 80, foi descoberto que a noção
tradicional de um sistema operacional, de um
processo que executa um único fluxo de execução,
era diferente dos requisitos dos sistemas
operacionais distribuídos. - Solaris (anos 90), originalmente, utiliza
processos.
5Problema com Processos
- E também, diferente dos requisitos dos
aplicativos mais sofisticados que utilizam um
único processador, mas que exigem concorrência de
suas atividades internas.
6Solução para o Processamento Concorrente
- Aprimorar a noção de processo, para que ele
pudesse ser associado a múltiplas atividades
internas a ele.
7Processo
- Um processo é uma entidade a nível de kernel, que
possui um espaço de endereçamento. - O único modo para seu programa acessar a dados na
estrutura (contexto) de um processo, consultar ou
mudar seu estado, é via uma chamada de sistema.
8Contexto de um Processo
- Um identificador do processo (PID).
- Um segmento de código.
- Um segmento de dados.
- Os valores dos registradores da CPU.
- Um contador de programa lógico.
- Uma pilha de execução.
- O estado do processo.
- Informações para escalonamento (prioridade,
tempo) - Dados para contabilização de uso.
- Recursos alocados arquivos, portas, eventos,
outros.
9Surgimento de Threads
- Com o surgimento de processadores de mais alto
desempenho, uma nova unidade de processamento
concorrente pode ser definida dentro do próprio
processo, novos fluxos de execução e assim
pode-se ter múltiplos fluxos de execução
(múltiplas threads) num mesmo processo. -
- Cada fluxo de execução é chamada Thread.
10Threads
- Atualmente, um processo consiste em um ambiente
de execução, contendo uma ou mais threads. - Thread unidade de processamento concorrente nos
sistemas operacionais atuais, dentro de um
processo.
11Contexto de uma Thread
- Um identificador da Thread.
- Um segmento de código.
- Um segmento de dados.
- Os valores dos registradores da CPU.
- O contador de programa.
- Uma pilha de execução.
- O estado da Thread.
- Informações para escalonamento (prioridade, ...)
- Dados para contabilização de uso.
- Recursos alocados que pertencem a processos
arquivos, portas, eventos, outros.
12Threads
- Definição
- Threads (linhas de execução) são atividades
(tarefas internas) concorrentes executadas dentro
de um processo. - Um processo pode ter uma ou mais threads.
13Multithreading
- Múltiplas threads executam concorrentemente em
um processo, e é análogo a múltiplos processos
executando concorrentemente em um único
processador. - Threads pertencentes a um mesmo processo,
compartilham os mesmos recursos e memória (espaço
de endereçamento) do processo.
14Multithreading
- Suporte a Threads
- Threads nativas do SO (entidades a nível de
kernel). - Threads como entidades a nível do usuário.
- Suporte de programação multithreading.
Exemplo JVM do Java - Linguagem de programação multithreading.
Exemplo Java
15Três Processos - cada um com uma Thread
- Cada thread tem seu espaço de endereçamento.
Thread
Contador de Programa
Processo
16Um Processo com três Threads
- Todas num mesmo espaço de endereçamento.
Processo
Multiplas Threads
17Processos e Threads
- Um confeiteiro.
- O confeiteiro é o processador.
- Um Livro de Receitas é um processo.
- Uma receita corresponde a uma Thread.
- Fazer um bolo de aniversário.
- Ingredientes farinha, ovos, açucar, ...
- Os ingredientes são os dados.
18Processo e Thread
- O processo é a atividade que consiste em nosso
confeiteiro ler a receita (Thread), buscar os
ingredientes (Thread), bater o bolo (Thread) e
cozinhar o mesmo (Thread).
19Alternando para outro processo
- Confeiteiro, Filho do confeiteiro, Abelha
- Ferrada da abelha no filho do confeiteiro.
- Confeiteiro precisa socorrer o filho.
- O confeiterio registra onde estava na receita (o
estado e o contexto do processo são salvos).
20Alternando para outro processo
- Confeiteiro procura um livro de pronto-socorro
(outro processo). -
- Segue a orientações do livro.
- O Confeiteiro alterna do processo (Livro de
Receitas para Fazer o Bolo) para outro, de
prioridade mais alta (Livro de Pronto Socorro),
cada um sendo um processo diferente (receita e
livro).
21Processo Livro de Pronto Socorro
- Threads ???
- Ler o procedimento médico
- Desinfetar o local da picada
- Colocar curativo
22Processo é uma atividade
- Quando a picada for tratada, o confeiteiro volta
a fazer o seu bolo, continuando do ponto onde
parou, quando abandonou o processo (Fazer o
Bolo). - A ideia é que processo é um tipo de atividade que
é concorrente a outros processos. - E em cada atividade (Livro de Receitas / Livro
Pronto-Socorro) existem tarefas, para Fazer um
Bolo ou Um Atendimento Médico, que
correspondem às threads.
23Escalonamento de Threads
- Todo SO tem um programa chamado Scheduler (o
escalonador do SO) que seleciona, num dado
instante, uma thread que deve ser executada pelo
processador, alternando este entre threads.
24Algoritmo de Escalonamento
- Define a ordem de execução de processos/ threads
com - base em uma fila ou prioridade da thread.
- Processos/Threads do sistema SO e de aplicações
críticas exigem maior prioridade. - Em geral, os sistemas operacionais adotam uma
política para atender a todas os
processos/threads de maneira justa . -
-
25Escalonamento por Time-Slicing
- Fracionamento de tempo do processador.
- Divide o tempo do processador entre threads de
igual prioridade. - Implementado por um Timer (hardware) o qual
interrompe o processamento periodicamente, para
permitir o scheduler buscar uma outra thread para
executar.
26Escalonamento Time-Slicing
- Por Processo escalonador aloca tempo para
- execução dos processos, os quais definem como
- usar este tempo para executar suas threads.
- P1 P2
P3 - t11 t12 t21 t22 t23 t31 t32
- Por Thread escalonador aloca tempo e define a
ordem na qual as threads serão executadas. - t11 t31 t21 t32 t23 t12
t22 t16
27Escalonamento Pre-Emptivo
- Baseado nas prioridades dos processos/threads.
- Deve ser implementado para garantir que um
processo/thread de alta prioridade possa executar
logo que torna-se pronto, mesmo que signifique
suspender a execução de um processo de mais baixa
prioridade.
28Ciclo de Vida de um Processo/Thread
Criado
Pronto
Suspenso
Rodando
Morto
29Estados de um Processo/Thread
- Pronto pronto para ser executado,
- mas sem o direito de usar o
processador. - Rodando sendo executado pelo processador.
- Suspenso aguarda operação de I/O, liberação
- de um recurso ou fim de
tempo de - espera em uma fila.
30Estado Suspenso
- Dormindo em espera temporizada.
- Bloqueado aguarda I/O.
- Em Espera - aguarda uma condição ser
satisfeita.
31Mudança de Estado de um Processo
- Processos/Threads trocam de estado de acordo com
o - Algoritmo de escalonamento.
- Troca de mensagens entre esses.
- Interrupções de hardware ou software.
32Threads
- Da mesma forma que os processos.
- Cada thread tem seu estado e segue um
- ciclo de vida particular.
- A vida da thread depende do seu processo.
33Troca de Contexto
- Quando duas threads de um mesmo processo
- se alternam no uso do processador, ocorre
- uma troca de contexto parcial.
- Numa troca parcial, o contador de programa,
- os registradores e a pilha devem ser salvos.
34Processos x Threads
- Troca de Contexto Completa Parcial
- Comunicação Inter-Processo Inter-Threads
- Suporte em S.O.s
Quase todos Os mais atuais - Suporte em Linguagem de Programação
Quase todas As mais recentes