mc714 – sistemas distribuídosleandro/ensino/mc714/1s2016/aulas/processos.pdfnos sistemas...
TRANSCRIPT
Leandro Villas
MC714 - Sistemas Distribuídos
Leandro Villas
Processos e Threads
Comunicação
Aula de Hoje
Leandro Villas
O que é um Processo
Um processo é uma atividade (ou tarefa) de um programa, que contém o código e dados de uma atividade
Atividades: 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
Leandro Villas
Processo
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
Leandro Villas
Contexto de um Processo
Um identificador do processo 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
Leandro Villas
Processos
Troca de Contexto
Leandro Villas
Processos
Troca de Contexto
Transfere o controle da CPU
de um processo para outro
Leandro Villas
Processos
Troca de Contexto
Transfere o controle da CPU
de um processo para outro
Tempo gasto
Leandro Villas
Processos
Troca de Contexto
Transfere o controle da CPU
de um processo para outro
Tempo gasto
Desempenho
Leandro Villas
Processos
Desempenho Threads
Leandro Villas
Surgimento 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
Leandro Villas
É uma forma de um processo dividir a si mesmo em
duas ou mais tarefas que podem ser executadas
concorrencialmente
Threads
Leandro Villas
É uma forma de um processo dividir a si mesmo em
duas ou mais tarefas que podem ser executadas
concorrencialmente
Cada thread tem o mesmo contexto de software e
compartilha o mesmo espaço de memória (endereçado
a um mesmo processo-pai), porém o contexto de hardware é diferente
Threads
Leandro Villas
É uma forma de um processo dividir a si mesmo em
duas ou mais tarefas que podem ser executadas
concorrencialmente
Cada thread tem o mesmo contexto de software e
compartilha o mesmo espaço de memória (endereçado
a um mesmo processo-pai), porém o contexto de
hardware é diferente
Um dos benefícios do uso das threads advém do fato do processo poder ser dividido em várias threads
Threads
Leandro Villas
Threads
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
Leandro Villas
Contexto 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
Leandro Villas
Threads
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
Leandro Villas
Três Processos - cada um com uma Thread
Cada thread tem seu espaço de endereçamento
Contador de Programa
Thread
Processo
Leandro Villas
Um Processo com três Threads
Todas num mesmo espaço de endereçamento
Multiplas Threads
Processo
Leandro Villas
Processos 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
Leandro Villas
Processo 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)
Leandro Villas
Alternando 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)
Leandro Villas
Alternando 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)
Leandro Villas
Processo “Livro de Pronto Socorro”
Threads ???
Ler o procedimento médico
Desinfetar o local da picada
Colocar curativo
Leandro Villas
Processo é 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
Leandro Villas
Escalonamento 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
Leandro Villas
Algoritmo 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
Leandro Villas
Escalonamento 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
Leandro Villas
Escalonamento 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
Leandro Villas
Escalonamento 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
Leandro Villas
Ciclo de Vida de um Processo/Thread
Criado
Pronto
Rodando
Morto
Suspenso
Leandro Villas
Estados 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
Dormindo: em espera temporária
Bloqueado: aguarda I/O
Em Espera: aguarda uma condição ser satisfeita
Leandro Villas
Mudanç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
Leandro Villas
Threads
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
Leandro Villas
Troca 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
Leandro Villas
Processos 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
Leandro Villas
É atrativa dado que facilitam muito a comunicação
Possibilidade de manter múltiplas conexões lógicas ao
mesmo tempo
Threads em Sistemas Distribuídos
Leandro Villas
É atrativa dado que facilitam muito a comunicação
Possibilidade de manter múltiplas conexões lógicas ao
mesmo tempo
Cliente
Esconder atrasos de comunicação
Iniciar comunicação e prosseguir com processamento
independente
Ex. browsers web
Começam exibir dados enquanto eles ainda estão entrando
Threads em Sistemas Distribuídos
Leandro Villas
Conforme vimos, sistemas distribuídos que operam em
redes de grandes distância, devem buscar algum
mecanismo de ocultar a latência de obtenção de
informações → Transparência!
Consideremos um cliente Web...
Como implementar multithreading?
Clientes Multithreads
Leandro Villas
Em um browser Web...
Um documento Web consiste em um grande número de objetos
A busca de cada objeto de uma página HTML será feita após
estabelecimento de uma conexão TCP
Estabelecimento e leitura de dados são operações
bloqueadoras
Com uma conexão persistente com paralelismo:
Requisições são feitas sem que os objetos precedentes tenham
chegados no cliente
Cliente é capaz de manipular diversos fluxos em paralelo → Threads
Clientes Multithreads
Leandro Villas
Caso os dados estejam espalhados por diversas
réplicas de servidores ...
A utilização de threads possibilita os clientes estabelecerem
diversas conexões, em paralelo, com o objetivo de
disponibilizar um único documento
Determina efetivamente que o documento Web inteiro seja
totalmente exibido em tempo muito menor do que com um
servidor não replicado
Clientes Multithreads
Leandro Villas
• Simplifica consideravelmente o código do servidor
• Facilita o desenvolvimento paralelo
Servidores Multithreads
Leandro Villas
• Simplifica consideravelmente o código do servidor
• Facilita o desenvolvimento pararelo
• Exemplo: servidor de arquivos
Servidores Multithreads
Leandro Villas
• Simplifica consideravelmente o código do servidor
• Facilita o desenvolvimento pararelo
• Exemplo: servidor de arquivos
Servidores Multithreads
Leandro Villas
Comunicação
Leandro Villas
• “Coração” de qualquer Sistema Distribuído
Comunicação entre Processos
Leandro Villas
• “Coração” de qualquer Sistema Distribuído
• Como processos em diferentes máquinas trocam
informações?
• Devido à ausência de memória compartilhada, toda
comunicação em SDs é baseada no envio e recebimento
de mensagens (de baixo nível)
Comunicação entre Processos
Leandro Villas
• “Coração” de qualquer Sistema Distribuído
• Como processos em diferentes máquinas trocam
informações? • Processo A monta uma MSG em seu próprio espaço de
endereçamento
• Executa uma chamada de sistema, SO envia a MSG pela rede até o
Processo B
• A e B precisam concordar com significado de bits
Comunicação entre Processos
Leandro Villas
• “Coração” de qualquer Sistema Distribuído
• Como processos em diferentes máquinas trocam
informações? • Processo A monta uma MSG em seu próprio espaço de
endereçamento
• Executa uma chamada de sistema, SO envia a MSG pela rede até B
• A e B precisam concordar com significado de bits enviados
• Vários acordo: • Quantos volts são necessários para sinalizar um bit 0 e um bit 1?
• Como o receptor sabe qual é o último bit da mensagem?
• Como o receptor pode detectar se uma msg foi danificada ou perdida?
• Qual é o comprimento dos números, cadeias e outros itens de dados, e
como eles são representados?
Comunicação entre Processos
Leandro Villas
International Organization for Standardization – ISO
Modelo de referência para interconexão de sistemas
abertos (ISO OSI ou Modelo OSI)
Modelo OSI
Cada camada lida com um aspecto específico
• Problema quebrado em pedaços gerenciados independentemente
Cabeçalhos são adicionados em cada nível
Transmissão pela camada física
Cada camada retira e examina seu próprio cabeçalho
Modelo OSI
Leandro Villas
Pilha de protocolos
Modelo referência != protocolos utilizados
• Protocolos desenvolvidos para internet (TCP/IP) são
os mais usados
• 3 camadas inferiores implementam funções básicas
de rede
• Camada Física
• Camada de Enlace
• Camada de Rede
Modelo OSI
Leandro Villas
Responsável pelo envio de bits
Questões fundamentais na camada física
Quantos volts usar para 0 e para 1
Quantos bits por segundo
Ambas as direções simultaneamente?
Tamanho/forma do conector, número de pinos...
Trata da padronização das interfaces elétrica, mecânica e
de sinalização
Camada Física
Leandro Villas
Agrupar bits em unidades (quadros) e providenciar
para que cada quadro seja corretamente recebido
Camada de Enlace
Leandro Villas
Agrupar bits em unidades (quadros) e providenciar
para que cada quadro seja corretamente recebido
Coloca padrão especial de bits no início e no final de
cada quadro
Camada de Enlace
Leandro Villas
Agrupar bits em unidades (quadros) e providenciar
para que cada quadro seja corretamente recebido
Coloca padrão especial de bits no início e no final de
cada quadro e calcula uma soma de verificação
Quando o quadro chega, o receptor soma novamente
a soma de verificação dos dados e compara com a
soma anexada
Camada de Enlace
Leandro Villas
Agrupar bits em unidades (quadros) e providenciar
para que cada quadro seja corretamente recebido
Coloca padrão especial de bits no início e no final de
cada quadro e calcula uma soma de verificação
Quando o quadro chega, o receptor soma novamente
a soma de verificação dos dados e compara com a
soma anexada
Número no cabeçalho para identificar sequencia
Camada de Enlace
Leandro Villas
Em uma LAN, em geral não há necessidade de o
remetente localizar o receptor
Remetente coloca quadro na rede e o receptor o retira
Em uma rede de longa distância?
Para ir do remetente até o receptor, uma mensagem talvez
tenha de fazer alguns saltos escolhendo, em cada um, uma
linha de saída para usar.
A questão de como escolher o melhor caminho é
denominada roteamento e é, em essência a tarefa primária
da camada de rede.
Camada de Enlace
Leandro Villas
Redes diferentes: mensagem pode fazer saltos
Como definir um caminho entre um par origem-
destino?
Camada de Rede
Leandro Villas
Redes diferentes: mensagem pode fazer saltos
Como definir um caminho entre um par origem-
destino?
Roteamento: tarefa primária da camada de rede
Rota mais curta nem sempre a melhor
Camada de Rede
Leandro Villas
Redes diferentes: mensagem pode fazer saltos
Como definir um caminho entre um par origem-
destino?
Roteamento: tarefa primária da camada de rede
Rota mais curta nem sempre a melhor
Mais utilizado: IP – internet protocol
Roteamento independente, por pacote
Pacote – termo para uma mensagem na camada de rede
Camada de Rede
Leandro Villas
Responsável pela comunicação lógica entre diferentes
processos sendo executados em diferentes hosts
(fim-a-fim)
Quebra mensagem, numera e envia
Conexões de transporte confiáveis: rede orientada a
conexão ou não – sequencia correta garantida ou
não. Camada de transporte ordena.
Transmission Control Protocol – TCP – conexão
Universal Datagram Protocol – UDP – sem conexão
Camada de Transporte
Leandro Villas
• Internet agrupou camadas superiores (apresentação,
sessão, aplicação) em uma única camada
• Sessão: controle de diálogo – sincronização – pontos
de verificação em transferências
• Apresentação: significado dos bits – definir campos
da mensagem
• Aplicação: um conjunto de aplicações padronizadas
• Engloba qualquer aplicação que não se ajuste a uma das
camadas subjacentes
• Da perspectiva do modelo OSI, middlewares são
aplicações
Camadas adicionais
Leandro Villas
Camada de software que é situada logicamente entre
uma camada de nível mais alto, composta de
usuários e aplicações e uma camada subjacente, que
consiste de facilidades básicas de comunicação
Inúmeros protocolos para suportar serviços de
middleware:
Autenticação: não estão vinculados a uma aplicação
especifica
Protocolo distribuído de bloqueio de recurso
Comunicação: Serviços de comunicação de alto nível
Camada de Middleware
Leandro Villas
Camada de Middleware
Leandro Villas
Quais são as “alternativas de comunicação” entre
processos executando na mesma máquina ou
máquinas diferentes?
Sockets
IPC “tradicionais”
(e.g., pipe, socket,
memória compartilhada,
fila de mensagens, etc)
Middleware
Leandro Villas
Antes de conhecermos os elementos que
compõem o middleware, vamos ver como
alguns funcionam (visão do programador)
Camada de Middleware
Leandro Villas
Camada de Middleware
Leandro Villas
Socket não é middleware, mas pode ser usado para
construir aplicação distribuída (haja disposição!)
Construir aplicação distribuída usando socket é
equivalente a construir aplicações comuns usando
assembly
Socket: ponto final de uma comunicação full-duplex
entre dois processos
Processo → casa / Socket → Porta
Socket: Porta entre o processo da aplicação e o
protocolo de transporte
Vamos começar com Sockets
Leandro Villas
São abstrações que representam pontos de
comunicação através dos quais processos se
comunicam
Para que dois computadores possam trocar
informações
Cada um utiliza um socket
Sockets
Processo
socke
t TCP ou UDP Sistema
Operacional
Aplicação Processo
socke
t TCP ou UDP
Rede
Leandro Villas
Os sockets adotam o paradigma cliente/servidor.
Sockets
Que horas são?
São 10:20 da manhã.
CLIENTE SERVIDOR
Requisita
serviço
Fornece
serviço
Os papeis de clientes e servidores não são fixos em processos:
um servidor pode ser cliente de outro serviço.
Leandro Villas
Na Internet, cada máquina têm um endereço único:
Endereço IP
Cada endereço IP possui portas associadas, que
representam conexões individuais com este endereço
echo(7) ftp(21) telnet(23) http(80) pop3(110)
Definidas pela IANA (Internet Assigned Numbers Authority)
Para se comunicar com um servidor, um cliente precisa:
• Endereço IP da máquina onde o servidor executa
• Número da porta que o servidor escuta. Ex: 221.13.45.6:80
Binding: quando o socket é criado, uma porta deve ser
associada
Sockets na Internet
Leandro Villas
Modos de Operação
Orientado a conexão: TCP (Transport Control Protocol)
As mensagens são enviadas através de um canal de comunicação
Canal de Comunicação
Leandro Villas
Modos de Operação
Orientado a conexão: TCP (Transport Control Protocol)
As mensagens são enviadas através de um canal de comunicação
Sem conexão: UDP (User Datagram Protocol) As mensagens de tamanho fixo (datagramas) são transmitidas individualmente para destinos especificos
Canal de Comunicação
Leandro Villas
Não existe a transparência de distribuição: toda a
comunicacão está explícita, através de
procedimentos send e receive
Funções mais sofisticadas devem ser feitas na
camada de aplicação
Por que não oferecer comunicação de alto nível,
independente da aplicação?
Sockets
Leandro Villas
Solução!
Middleware de comunicação
Tipos:
Chamada de Procedimento Remoto
Comunicação orientada a Mensagem
Comunicação Orientada a Fluxo
Tipos de Comunicação
Leandro Villas
Crie um sistema de chat cliente-servidor com múltiplos
clientes Opcional: linguagem de programação Java utilizando Socket e Thread
Este programa deve ter um servidor que permita que vários cliente se conectem e conversem entre si. Quando o usuário A enviar uma mensagem para o servidor ela deve ser retransmitida para todos os clientes conectados
Enviar a solução por e-mail até 04/04/2016
Assunto: [MC714A] – Teste 03
Teste 03