Você está na página 1de 116

Infraestrutura e Sistemas Computacionais

Aula 02 – Prof. Sérgio Johann Filho


• Apresentação dos principais conceitos
relacionados à processos e threads
• Definições
O que você • Comunicação
• Suporte do kernel e bibliotecas
vai aprender
nessa aula
• Parte 1
• Processos e escalonamento
• Parte 2
O que você • Comunicação entre processos
vai aprender • Parte 3
nessa aula • Modelos de comunicação
• Parte 4
• Threads (fios)
• Parte 5
• Bibliotecas para suporte de threads
• Parte 1 – Processos e escalonamento
• Estados de um processo
• Estruturas de dados
O que você • Escalonamento (agendamento)
vai aprender • Troca de contexto
• Criação de processos
nessa aula
• Parte 2 – Comunicação entre processos
• Terminação e comunicação entre processos
• Problema do produtor-consumidor
O que você • Comunicação direta e indireta
vai aprender • Sincronização e bufferização

nessa aula
• Parte 3 – Modelos de comunicação
• Exemplos de IPC
• Modelo cliente-servidor
O que você • Sockets, pipes e RPC
vai aprender
nessa aula
• Parte 4 – Threads (fios)
• Modelos de threading
• Processos e threads
O que você • Exemplos, vantagens, desvantagens
vai aprender • Execução concorrente e paralela
• ULT (user-level threads) e KLT (kernel-level
nessa aula threads)
• Parte 5 – Bibliotecas para suporte de
threads
• Pthreads, Java Threads
O que você • Questões sobre threads
vai aprender
nessa aula
• Referência base dessa aula:
• SILBERSCHATZ, Abraham; GALVIN, Peter B.;
GAGNE, Greg. Fundamentos de Sistemas
O que você vai Operacionais. 9.ed. Rio de Janeiro: LTC, 2015.
precisar para ISBN 978-85-216-3001-2. (e-book da Minha
Biblioteca).
acompanhar • https://integrada.minhabiblioteca.com.br/books/9
essa aula 78-85-216-3001-2
• As figuras utilizadas nessa aula foram
retiradas dessa referência
Infraestrutura e Sistemas Computacionais
Aula 02 – Parte 1
• Parte 1
• Processos e escalonamento
• Parte 2
O que você • Comunicação entre processos
vai aprender • Parte 3
nessa aula • Modelos de comunicação
• Parte 4
• Threads (fios)
• Parte 5
• Bibliotecas para suporte de threads
• Processos
• Conceito de Processo
• Escalonamento de Processos
• Operações com Processos
• Processos Cooperativos
• Comunicação entre Processos
• Comunicação em sistemas Cliente-Servidor
• Conceito de processo
• Um sistema operacional executa uma variedade de programas:
• Sistema Batch – jobs
• Sistema Tempo Compartilhado (Time-shared) – programas do usuário ou tarefas
• Livros usam os termos job e processo de forma similar
• Processo – um programa em execução
• O sistema operacional carrega um programa na memória
• Entidade viva
• Execução do processo deve progredir de maneira seqüencial
• Um processo inclui:
• Contador de programa
• Pilha
• Seções de dados
• Processo na memória
• Estados de um processo
• Durante a execução de um processo, ele altera seu estado
• Novo (new): O processo está sendo criado
• Executando (running): instruções estão sendo executadas
• Esperando (waiting): O processo está esperando algum evento acontecer
• Pronto (ready): O processo está esperando ser associado a um procesador
• Terminado (terminated): O processo terminou sua execução
• Process control block (PCB)
• A PCB ou Bloco de Controle de Processos armazena informações
associadas a cada processo
• Estado do processo
• Contador de programas
• Registradores da CPU
• Informações de escalonamento da CPU
• Informação de gerenciamento de memória
• Informação para contabilidade
• Informações do status de E/S
• Troca de processos
• Filas de escalonamento de processos

• Fila de Job
• Conjunto de todos os processos no sistema

• Fila de Processos prontos (ready queue)


• Conjunto de todos os processos residentes na memória principal, prontos e esperando
para executar

• Fila de dispositivos
• Conjunto dos processos esperando por um dispositivo de E/S

• Migração de processos entre as várias filas


• Filas de processos prontos e filas de E/S
• Escalonamento de processos
• Escalonadores

• Escalonador de longo prazo (ou escalonador de Jobs)


• Seleciona quais processos devem ser trazidos para a fila de processos prontos
• Admissão

• Escalonador de curto prazo (ou escalonador da CPU)


• Seleciona qual processo deve ser executado a seguir e aloca CPU para ele
• Mais comum durante o ciclo de vida do processo

• Escalonador de médio prazo (intermediário)


• Swap
• Inclusão do escalonador de médio prazo (intermediário)
• Escalonadores
• Escalonador de curto prazo
• É invocado muito freqüentemente (milisegundos) -> (deve ser rápido)
• Escalonador de longo prazo
• É invocado muito infreqüentemente (segundos, minutos) -> (pode ser lento)
• O escalonador de longo prazo controla o grau de multiprogramação

• Processos podem ser descritos como:


• Processos com E/S predominante (I/O-bound processes)
• Gasta mais tempo realizando E/S do que computando, muitos ciclos curtos
de CPU
• Processos com uso de CPU predominante (CPU-bound processes)
• Gasta mais tempo realizando computações, poucos ciclos longos de CPU
• Troca de contexto

• Quando a CPU alterna para outro processo, o sistema deve salvar o


estado do processo deixando o processador e carregar o estado
anteriormente salvo do processo novo via troca de contexto

• Contexto de um processo é representado na PCB

• Tempo de troca de contexto é sobrecarga no sistema


• O sistema não realiza trabalho útil durante a troca de contexto

• Tempo de troca de contexto é dependente de suporte em hardware


• Instruções da arquitetura para otimizar o tempo
• Número de registradores
• Criação de processos

• Processo pai cria processo filho, o qual, por sua vez, pode criar outros
processos, formando uma árvore de processos.

• Geralmente, processos são identificados e gerenciados via um Identificador


de Processos (Process IDentifier - PID)

• Processos podem comunicar-se entre si por meio de recursos


(identificadores) herdados
Infraestrutura e Sistemas Computacionais
Aula 02 – Parte 2
• Conceito de processo
• Estados de um processo
• Filas de processos
Relembrando • Escalonamento de processos
o conteúdo do • Criação de processos
vídeo anterior
• Parte 1
• Processos e escalonamento
• Parte 2
O que você • Comunicação entre processos
vai aprender • Parte 3
nessa aula • Modelos de comunicação
• Parte 4
• Threads (fios)
• Parte 5
• Bibliotecas para suporte de threads
• Comunicação entre processos (IPC)
• Processos em um sistema podem ser independentes ou cooperantes

• Processos independentes não podem afetar ou ser afetados pela


execução de outro processo

• Processos cooperantes podem afetar ou ser afetados pela execução de


outro processo

• Um sistema operacional possui um grande conjunto de processos


• Alguns fazem parte da mesma aplicação (são cooperantes)
• Diversas aplicações executando em um mesmo sistema
• Comunicação entre processos (IPC)
• Razões para cooperação entre processos:
• Compartilhamento de informações
• Aumento na velocidade da computação
• Modularidade
• Conveniência

• Processos cooperantes precisam de mecanismos para Comunicação


entre Processos (IPC – interprocess communication)

• Dois modelos de IPC: memória compartilhada e troca de mensagens


• Comunicação entre processos (IPC)
• Problema do produtor-consumidor
• Paradigma para processos cooperantes, processos produtores
produzem informação que é consumida por processos consumidores
• Buffer de tamanho ilimitado (unbounded-buffer) não coloca limite prático no
tamanho do buffer
• Impossível na realidade – seria necessário um sistema com memória infinita!
• Buffer de tamanho limitado (bounded-buffer) assume que existe um
tamanho fixo do buffer
• Problema do produtor-consumidor, buffer fixo
• Recurso acessado (buffer)
• Produtores e consumidores acessam o recurso
• Acesso deve ser feito de forma sincronizada
• Como proteger o acesso ao recurso?
• Processo produtor
• Produz um item
• Adiciona o item ao buffer (se houver espaço)
• Processo consumidor
• Remove um item do buffer (se houver um item)
• Consome o item

• Problema - sincronização
• Não é possível produzir e adicionar em uma única operação
• Não é possível remover e consumir em uma única operação
• IPC – Troca de mensagens
• Mecanismo para processos se comunicarem e sincronizarem suas ações

• Sistema de mensagens – processos se comunicam uns com os outros sem


utilização de variáveis compartilhadas
• Não existe compartilhamento de memória
• Passagem de mensagens

• Suporte a IPC (Interprocess Communication) provê duas operações, uma


para envio outra para recebimento:
• send(mensagem)
• receive(mensagem)
• IPC – Troca de mensagens
• Se P e Q querem se comunicar, eles necessitam:
• Estabelecer um link de comunicação entre eles
• Trocar mensagens via send() / receive()

• Implementação de links de comunicação


• Físico (ex. memória compartilhada, barramento de hardware)
• Exemplo: comunicação entre processos executando em computadores independentes,
conectados por meio de uma rede
• Lógico (ex. propriedades lógicas)
• Exemplo: comunicação entre processos locais (no mesmo sistema), por meio de uma
biblioteca de software
• IPC - Questões de implementação
• Como são estabelecidas as ligações?
• Rede? Localmente? Como encontrar um outro processo?
• Pode um link estar associado com mais de dois processos?
• Comunicação coletiva
• Quantos links podem existir entre cada par de processos comunicantes?
• Limitação do sistema
• Qual a capacidade de um link?
• Quantidade de dados, velocidade
• O tamanho da mensagem utilizado pelo link é fixo ou variável?
• O link é unidirecional ou bidirecional?
• IPC - Comunicação direta
• Processos devem nomear o outro explicitamente:
• send(P, mensagem) – envia uma mensagem ao processo P
• receive(Q, mensagem) – recebe uma mensagem do processo Q

• Propriedades dos links de comunicação


• Links são estabelecidos automaticamente
• Uma mensagem enviada possui informações sobre o remetente
• O processo recebedor pode enviar uma resposta
• Um link é associado com exatamente um par de processos comunicantes
• Entre cada par de processos existe exatamente um link
• O link pode ser unidirecional, mas é usualmente bidirecional
• IPC - Comunicação indireta
• Mensagens são dirigidas e recebidas de caixas postais – mailboxes
(também chamadas de portas)
• Cada mailbox possui uma única identificação
• Processos podem se comunicar somente se eles compartilham a mailbox

• Propriedades do link de comunicação:


• O link é estabelecido somente se os processos compartilham uma mailbox comum
• Um link pode estar associado com muitos processos
• Cada par de processos pode compartilhar vários links
• Link pode ser unidirecional ou bidirecional
• IPC - Comunicação indireta
• Operações
• Criar uma nova caixa postal
• Enviar e receber mensagens através da caixa postal
• Destruir uma caixa postal

• Primitivas são definidas como:


• send(A, mensagem) – envia uma mensagem para a caixa postal A
• receive(A, mensagem) – recebe uma mensagem da caixa postal A
• IPC - Comunicação indireta
• Compartilhamento de Caixa Postal
• P1, P2, e P3 compartilham caixa postal A
• P1, envia; P2 e P3 podem receber
• Quem recebe a mensagem?

• Soluções:
• Permitir que um link esteja associado com no máximo dois processos
• Permitir somente a um processo de cada vez executar uma operação de recebimento
• Permitir ao sistema selecionar arbitrariamente por um receptor → Remetente é
notificado de quem foi o receptor
• Sincronização
• Troca de Mensagens pode ser bloqueante ou não-bloqueante

• Bloqueante é considerado síncrono


• send() Bloqueante: inibe o remetente até que a mensagem seja recebida
• receive() Bloqueante: inibe o receptor até uma mensagem estar disponível

• Não-Bloqueante é considerado assíncrono


• send() Não-bloqueante: o remetente envia a mensagem e continua executando
• receive() Não-bloqueante: o receptor obtém uma mensagem válida ou null
• Bufferização
• Fila de mensagens associada ao link
• Implementada em uma dentre três formas

• 1. Capacidade Zero – 0 mensagens


• Remetente deve esperar pelo receptor (rendezvous)
• Pouco utilizado na prática - limitado pelo processo mais lento

• 2. Capacidade Limitada – tamanho finito de N mensagens


• Remetente deve aguardar se link está cheio
• Implementação mais utilizada (em função do custo / benefício)

• 3. Capacidade Ilimitada – tamanho infinito


• Remetente nunca espera
• Impossível implementar na prática
• Exemplos de sistemas IPC – Mach (parte do MacOS X)
• Comunicação no Mach é baseado em mensagens
• Até mesmo chamadas de sistema são mensagens
• Cada tarefa obtém duas mailboxes na criação - Kernel e Notify
• Somente três chamadas de sistemas são necessárias para transferência
de mensagens
• msg_send(), msg_receive(), msg_rpc()
• Mailboxes necessárias para comunicação, criadas via
• port_allocate()
• Exemplos de sistemas IPC – Windows

• O sistema operacional é composto por diversos subsistemas


• Recurso de troca de mensagens é chamado de advanced local procedure
call (ALPC)
• Só funciona entre processos no mesmo sistema
• As aplicações comunicam-se com o sistema por meio de mensagens
• Podem comunicar-se com diferentes subsistemas
• Usa portas (como mailboxes) para estabelecer e manter canais de
comunicação
• Exemplos de sistemas IPC – Windows

• Comunicação funciona da seguinte forma:


• O cliente abre um manipulador para o objeto porta de conexão do subsistema com o
qual deseja se comunicar
• O cliente envia uma solicitação de conexão
• O servidor cria duas portas de comunicação privadas e retorna o manipulador de uma
delas para o cliente
• O cliente e o servidor usam o manipulador da porta correspondente para enviar
mensagens ou retornos de chamadas e ouvir respostas
• Exemplos de sistemas IPC – Windows
• Conceito de IPC
• Comunicação por memória compartilhada
Resumo do • Problema do produtor / consumidor
que vimos • Comunicação por mensagens
• Comunicação direta / indireta
até agora • Sincronização (bloqueante / não bloqueante)
• Bufferização
• Exemplos
Infraestrutura e Sistemas Computacionais
Aula 02 – Parte 3
• Conceito de IPC
• Comunicação por memória compartilhada
• Problema do produtor / consumidor
Relembrando • Comunicação por mensagens
o conteúdo do • Comunicação direta / indireta
vídeo anterior • Sincronização (bloqueante / não bloqueante)
• Bufferização
• Exemplos
• Parte 1
• Processos e escalonamento
• Parte 2
O que você • Comunicação entre processos
vai aprender • Parte 3
nessa aula • Modelos de comunicação
• Parte 4
• Threads (fios)
• Parte 5
• Bibliotecas para suporte de threads
• Comunicação cliente-servidor

• Cliente – realiza uma busca / chamada a um recurso


• Uma página web, um processo ou recurso
• Servidor – atende a solicitação de clientes
• Possui a página ou recurso
• Pode atender diversos clientes, passando a informação ou resultado do
processamento aos mesmos

• A internet é estruturada de acordo com esse modelo

• A comunicação entre clientes e servidores pode ser implementada de


diverentes formas
• Mensagens, chamadas de função/método
• Comunicação cliente-servidor

• Sockets
• Troca de mensagens
• Pipes
• Memória compartilhada
• Chamada a Procedimento Remoto (RPC)
• Abstrai o modelo de passagem de mensagens
• Invocação Remota de Método (RMI em Java)
• Abstrai o modelo de passagem de mensagens
• Sockets
• Um socket é definido como um ponto final de comunicação
• Concatenação de um endereço IP e porta
• O socket 161.25.19.8:1625 refere a porta 1625 na máquina 161.25.19.8
• Comunicação ocorre entre um par de sockets
• Diferentes modos: datagrama (UDP) e fluxo (TCP)
• Comunicação pode ser feita entre processos na mesma máquina ou
processos em máquinas distintas
• Permite mapear processos de forma livre – os processos podem existir localmente ou
em uma máquina remota
• Não é necessário modificar a aplicação
• Sockets - aplicação acessando um servidor
• Pipes (tubos)

• Agem como canalizações permitindo a comunicação entre dois processos

• Questões
• A comunicação é unidirecional ou bi-direcional?
• No caso da comunicação de duas vias, ela é half ou full-duplex?
• Existe uma relação (ex. pai-filho) entre os processos comunicantes?
• É possível usar pipes em uma rede?
• Pipes comuns

• Pipes comuns permitem a comunicação no estilo produtor-consumidor


entre processos, utilizando descritores
• Descritor é um recurso do sistema operacional

• Produtor escreve em um extremo (o extremo de escrita do pipe)


• fd[0] – utilizado para leitura
• fd[1] – utilizado para escrita
• Consumidor lê do outro extremo (o extremo de leitura do pipe)

• Pipes comuns são unidrecionais


• Para comunicação bidirecional são necessários dois pipes
• Necessitam de relação pai-filho entre os processos comunicantes
• Pipes comuns
• Pipes comuns – exemplo

• Um exemplo mais complexo


• curl -k "https://en.wikipedia.org/wiki/Pipeline_(Unix)" | sed 's/[^a-zA-
Z ]/ /g' | tr 'A-Z ' 'a-z\n' | grep '[a-z]' | sort -u
• O primeiro comando (curl) acessa o conteúdo da página
• O segundo comando (sed) remove todos os caracteres que não são espaços ou
letras, substituindo-os por espaços
• O terceiro comando (tr) converte todos os caracteres maiúsculos em minúsculos e os
espaços nas linhas de texto em linhas individuais
• O quarto comando (grep) remove linhas em branco
• O quinto comando (sort) ordena a lista de palavras em ordem alfabética, mostrando
apenas palavras únicas
Case

• Pipes comuns - acessar o link:


• VM Linux
• No terminal, executar o comando "ls | wc -l"
• Executado sozinho, o comando ls retorna uma lista dos arquivos no diretório corrente
• O comando wc -l conta o número de linhas (ou arquivos)
• A saída do primeiro comando (lista de arquivos) é redirecionada (com o uso de um
pipe) para o segundo comando
• O resultado é uma contagem do número de arquivos
Case

• Pipes comuns - um exemplo mais complexo


• curl -k "https://en.wikipedia.org/wiki/Pipeline_(Unix)" | sed 's/[^a-zA-
Z ]/ /g' | tr 'A-Z ' 'a-z\n' | grep '[a-z]' | sort -u
• O primeiro comando (curl) acessa o conteúdo da página
• O segundo comando (sed) remove todos os caracteres que não são espaços ou
letras, substituindo-os por espaços
• O terceiro comando (tr) converte todos os caracteres maiúsculos em minúsculos e os
espaços nas linhas de texto em linhas individuais
• O quarto comando (grep) remove linhas em branco
• O quinto comando (sort) ordena a lista de palavras em ordem alfabética, mostrando
apenas palavras únicas
• Pipes nomeados
• Pipes Nomeados são mais poderosos que pipes comuns
• Comunicação é bi-direcional
• Não é necessária relação pai-filho entre processos comunicantes
• Programas diferentes podem se comunicar
• Pipes comuns: dois processos comunicantes são criados a partir do mesmo programa
• Vários processos podem usar os pipes noemados para se comunicarem
• Fornecidos nos sistemas UNIX (Linux e derivados) e Windows
• Fornecidos por meio do sistema de arquivos
• É necessário criar um pipe no sistema de arquivos
• O pipe pode ser lido e escrito por diferentes processos
• Pipes nomeados - exemplo
Case • No Linux, criar um pipe utilizando o
comando:
• mkfifo named_pipe
• Escrever no pipe. No exemplo, colocaremos
uma lista de arquivos no pipe, e também o
conteúdo de um arquivo:
• ls –la > named_pipe &
• cat bench.py > named_pipe &
• Ler do pipe:
• cat named_pipe
• Remover o pipe:
• rm named_pipe
• Chamada a procedimento remoto
• Chamada a Procedimento Remoto ou Remote procedure call (RPC) abstrai
chamadas de procedimentos entre processos executando nos sistemas em
rede
• Conceito semelhante a chamadas locais
• No entanto, o chamador pode estar em uma máquina, chamado em outra
• Permite explorar em alto nível um modelo de computação distribuída
• Stubs – proxy no lado do cliente para o procedimento real no servidor
• O stub no lado do cliente localiza o servidor e empacota (marshall) os parâmetros
• O stub no lado do servidor recebe esta mensagem, desempacota os parâmetros e
dispara a execução do procedimento no servidor
• Chamada a procedimento remoto
• Invocação remota de método (Java)
• Invocação Remota de Método ou Remote Method Invocation (RMI) é um
mecanismo Java similar a RPC
• RMI permite a um programa Java executando em uma máquina invocar um
método em um objeto remoto
• Invocação remota de método (Java)
• Registro
• Mantém informações sobre os métodos registrados pelo servidor
• Servidor
• Implementação dos métodos remotos
• Registra os métodos (Naming.Rebind())
• Cliente
• Conhece apenas as interfaces dos métodos remotos
• Busca os métodos no registro (Naming.Lookup())
• Realiza a invocação remota
• Comunicação cliente-servidor
• Sockets
Resumo do • Pipes
• Exemplos
que vimos
• Chamada remota de procedimento (RPC)
até agora
• Invocação remota de método (Java)
Infraestrutura e Sistemas Computacionais
Aula 02 – Parte 4
• Comunicação cliente-servidor
• Sockets
• Pipes
Relembrando • Exemplos
o conteúdo do • Chamada remota de procedimento (RPC)
vídeo anterior • Invocação remota de método (Java)
• Parte 1
• Processos e escalonamento
• Parte 2
O que você • Comunicação entre processos
vai aprender • Parte 3
nessa aula • Modelos de comunicação
• Parte 4
• Threads (fios)
• Parte 5
• Bibliotecas para suporte de threads
• Threads
• Visão geral
• Modelos de múltiplas threads
• Bibliotecas de threads
• Questões sobre threads
• Exemplos em sistemas operacionais
• Threads
• Uma unidade fundamental de utilização de CPU que forma a base de
sistemas computacionais com múltiplas threads (multithreaded)
• Exploração de desempenho utilizando SMT
• Multiprocessamento simétrico
• As CPUs atuais possuem múltiplos núcleos de execução
• Os programas atuais utilizam esses núcleos em paralelo, com o objetivo de aumentar
o desempenho
• Questões relacionadas a programação com múltiplas threads
(multithreaded programming)
• Sincronização
• Acesso a recursos compartilhados
• Threads
• Thread (fio) é uma abstração que permite que uma aplicação execute mais
de um trecho de código simultaneamente (ex: um método)
• Um processo pode possuir múltiplos fios
• Um programa multithreading pode continuar executando e respondendo ao
usuário mesmo se parte dele estiver bloqueada ou executando uma tarefa
longa
• Por exemplo, um programa cliente comunica-se com o servidor e ao mesmo tempo
apresenta informações e interage em tempo real por meio de uma interface (3
atividades)
• Sem threads, seria impossível realizar as 3 atividades em paralelo
• O programa perderia sua responsividade
• Processos com uma e múltiplas threads
• Threads - benefícios
• Responsividade
• Compartilhamento de Recursos
• Economia
• Escalabilidade
• Utilização de arquiteturas multiprocessadas (MP) ou multicore
• Múltiplos processadores ou processadores com múltiplos núcleos
• Vantagens sobre processos
• É possível executar em paralelo cada uma das threads criadas para um mesmo
processo usando diferentes CPUs
• Em alguns sistemas, mais rápido criar threads do que processos
• Troca de contexto é mais rápida, bem como a comunicação
• Threads – exemplos
• Editor de texto
• Permite que o usuário edite o arquivo enquanto ele ainda está sendo carregado do
disco
• Processamento assíncrono (salvamento periódico)
• Navegador
• Consegue fazer o download de vários arquivos ao mesmo tempo, e ao mesmo tempo
permite que o usuário continue interagindo (navegando)
• Arquitetura de um servidor multithreaded
• Cliente realiza uma solicitação
• Servidor cria uma thread para atendimento do cliente
• Servidor volta a atender outros clientes imediatamente
• Programação multicore
• Sistemas multicore tem pressionado programadores, desafios incluem:
• Dividir atividades
• Balanceamento
• Separação de dados (data splitting)
• Dependência de dados
• Seções críticas
• Teste e depuração
• Muitos programas não podem ser eficientemente implementados em
múltiplos fios
• Execução concorrente em um único core

• Execução paralela em multicore


• Threads em nível de usuário
• Gerência de threads é feito por bibliotecas em nível de usuário
• Mais simples de implementar
• Não requer privilégios de kernel, pois todo o gerenciamento ocorre no
espaço de endereços de um único processo
• Alta portabilidade
• Três bibliotecas de threads principais:
• POSIX Pthreads
• Win32 threads
• Java threads
• Threads em nível de usuário
• Desvantagens
• Muitas chamadas ao sistema são bloqueantes e o kernel bloqueia processos – nesse
caso todas as threads do processo podem ser bloqueadas enquanto uma ULT executa
uma SVC
• ULT – User level thread
• Em um esquema ULT puro, uma aplicação multithreading não pode tirar vantagem do
multiprocessamento
• O kernel vai atribuir o processo a apenas uma CPU
• Threads em nível de kernel
• Gerenciamento das threads é realizado pelo kernel (núcleo do SO)
• Kernel pode aproveitar melhor o multiprocessamento
• Escalonamento é feito pelo núcleo e é thread-basis
• Bloqueio de uma thread não implica em bloqueio de outras threads de um mesmo
processo
• Exemplos
• Windows XP/2000/NT/10
• Solaris, Linux, Tru64 UNIX, MacOS X
• Threads em nível de kernel
• Desvantagens
• O kernel precisa manter informações sobre o contexto para processos e threads
• Mais complicado
• O usuário enxerga uma API para threads do núcleo, porém a transferência de controle
entre threads de um mesmo processo requer o chaveamento para modo kernel
• Aumento do custo para troca de contexto (alternar entre diferentes threads)
• O tempo desperdiçado reduz o desempenho do sistema em algumas situações
• Modelos de múltiplas threads
• Muitos-para-um
• Diversas user-level threads mapeadas em uma única kernel thread
• Um-para-um
• Cada user-level thread é mapeada em uma única kernel thread
• Muitos-para-muitos
• Permite que diferentes user-level threads de um processo possam ser mapeadas em
kernel threads distintas
• Permite ao SO criar threads com número suficiente
• Modelo Muitos-para-um
• Muitas threads em nível usuário são mapeadas para uma única thread no
kernel
• Exemplos:
• Solaris Green Threads
• GNU Portable Threads
• Modelo Um-para-um
• Cada thread em nível usuário é mapeada para uma thread em nível kernel
• Exemplos
• Windows NT/XP/2000
• Linux
• Solaris 9 e posteriores
• Modelo Muitos-para-muitos
• Permite que muitas threads em nível usuário sejam mapeadas para muitas
threads em nível kernel
• Permite que o sistema operacional crie um número suficiente de threads no
kernel
• Solaris versão anterior a 9
• Windows NT/2000 com o pacote ThreadFiber
• Modelo de dois níveis
• Similar ao M:M, exceto que ele permite que uma thread do usuário seja
amarrada (bind) a uma thread no kernel
• Exemplos
• IRIX
• HP-UX
• Tru64 UNIX
• Solaris 8 e anterior
• Threads
• Visão geral / conceito
• Relação entre processos / threads
• ULT e KLT
Resumo do • Modelos de múltiplas threads
que vimos • Exemplos em sistemas operacionais
até agora
Infraestrutura e Sistemas Computacionais
Aula 02 – Parte 5
• Threads
• Visão geral / conceito
• Relação entre processos / threads
• ULT e KLT
• Modelos de múltiplas threads
Relembrando • Exemplos em sistemas operacionais
o conteúdo do
vídeo anterior
• Parte 1
• Processos e escalonamento
• Parte 2
O que você • Comunicação entre processos
vai aprender • Parte 3
nessa aula • Modelos de comunicação
• Parte 4
• Threads (fios)
• Parte 5
• Bibliotecas para suporte de threads
• Bibliotecas de thread
• Bibliotecas de thread (thread library) fornecem ao programador uma API
para criar e gerenciar threads
• Duas formas principais de implementação
• Biblioteca totalmente em espaço de usuário
• Biblioteca em nível de kernel suportada pelo SO
• Pthreads
• Pode ser oferecida tanto em nível de usuário como de kernel
• Uma API padrão POSIX (IEEE 1003.1c) para criação e sincronização de
threads
• Conjunto de regras a serem seguidas
• A API especifica o comportamento da biblioteca de threads, a
implementação está a cargo do desenvolvedor da biblioteca
• Existem diversas implementações
• Comum nos sistemas operacionais UNIX (Solaris, Linux, MacOS X)
• Threads em Java
• Java threads são gerenciadas pela JVM
• JVM – Java Virtual Machine
• Ambiente de execução de programas escritos em Java
• Tipicamente implementadas usando o modelo de threads fornecido pelo
SO em que executa
• Java threads podem ser criadas:
• Estendendo a classe Thread
• Implementando a interface Runnable
• Estados das threads em Java
• Questões sobre threads
• Semântica das chamadas de sistemas fork() e exec()
• Cancelamento de thread de uma thread alvo
• Assíncrono ou delegado
• Manipulação de sinais
• Conjunto de thread (thread pools)
• Dados específicos de thread
• Ativações de escalonamento
• Semântica de fork() e exec()
• Cada processo pode possuir diversas threads.
• Uma chamada de sistema fork() duplica somente a thread chamadora ou
todas as threads?
• fork() duplica um processo, com apenas uma única thread
• Apenas a thread que invocou o fork() é duplicada
• Solução: realizar um join() de todas as threads e depois realizar o fork()
• join() é uma chamada que aguarda o término de todas as threads antes de completar
• Cancelamento de thread
• Terminação de uma thread antes dela ter finalizado
• Duas abordagens:
• Cancelamento assíncrono - termina a thread alvo imediatamente
• Cancelamento delegado - permite que a thread alvo seja periodicamente verificada se
deve ser cancelada
• Manipulação de sinais
• Sinais são usados nos sistemas UNIX para notificar um processo que um
evento particular ocorreu
• Um manipulador de sinais (signal handler) é usado para processar
sinalizações
• Sinal é gerado por um evento particular
• Sinal é enviado a um processo
• Sinal é manipulado
• Manipulação de sinais
• Opções:
• Enviar o sinal para a thread para qual ele se aplica
• Enviar o sinal para cada thread no processo
• Enviar o sinal para determinadas threads no processo
• Associar uma thread específica para receber todos os sinais enviados para o processo
• Thread servidora de sinais
• Conjunto de threads
• Cria um número de threads que formam um conjunto para espera de
trabalho
• Vantagens:
• Usualmente torna um pouco mais rápido o atendimento a uma requisição com uma
thread existente do que criar uma nova
• É necessário utilizar sincronização
• Bloqueios, seções críticas, barreiras
• Permite que o número de threads na aplicação seja limitado pelo tamanho do conjunto
• Dados específicos de thread
• Permite que cada thread tenha seu próprio conjunto de dados
• Manter o estado de um programa
• Útil quando não se tem controle sobre o processo de criação de threads
(ex. quando se usa um conjunto de threads)
• Ativações de escalonamento
• Tanto o modelo M:M (muitos-para-muitos) quanto em dois níveis requer
comunicação para manter o número apropriado de threads no kernel
alocado para a aplicação
• Ativações de escalonamento fornecem upcalls - um mecanismo de
comunicação do kernel para a biblioteca de threads
• Essa comunicação permite uma aplicação manter o número correto de
threads no kernel
• Exemplos de implementação de threads em sistemas operacionais
• Windows Threads
• Linux Threads
• Windows Threads
• Implementa o mapeamento um-para-um em nível de kernel
• Cada thread contém
• Um identificador de thread (id)
• Conjunto de registradores que armazena o estado de operação do processador
• Pilhas separadas para kernel e usuário
• Área privada de armazenamento de dados (para bibliotecas compartilhadas)
• Windows Threads
• O conjunto de registradores, pilhas e área de armazenamento privado são
denominados contexto da thread
• As principais estruturas de dados de uma thread são:
• ETHREAD (executive thread block)
• KTHREAD (kernel thread block)
• TEB (thread environment block)
• Windows Threads
• Linux Threads
• No Linux são denominadas de tarefas (tasks) ao invés de threads
• Criação de threads é feita através da chamada de sistema clone()
• clone() possibilita que uma tarefa filha compartilhe o espaço de
endereçamento com a tarefa pai (processo)
• Permite a sincronização e comunicação
• Linux Threads
• clone() possibilita que uma tarefa filha compartilhe o espaço de
endereçamento com a tarefa pai (processo)
• Permite a sincronização e comunicação
• Diferentemente do fork(), clone() permite que um processo filho compartilhe partes do
seu contexto de execução
• Espaço de memória
• Descritores
• Sinais
• Pode ser utilizado para criar threads
• Bibliotecas de thread
• Questões sobre threads
Resumo do • Exemplos de implementação de threads em
sistemas operacionais
que vimos
até agora
Infraestrutura e Sistemas Computacionais
Aula 02 – Prof. Sérgio Johann Filho
Infraestrutura e Sistemas Computacionais
Aula 02 – Prof. Sérgio Johann Filho
• Checkpoint (primeira questão)
Em um sistema operacional é implementada a abstração de processos.
Pode-se afirmar que processos funcionam de acordo com as seguintes
regras:
I. Um processo pai cria um processo filho, que pode criar outros processos
II. Processos são isolados, portanto não comunicam-se entre si
III. Após a criação de um processo, pai e filho executam de forma
concorrente
Quais afirmações estão corretas?
a) Apenas I
b) Apenas II
c) II e III
d) I e II
e) I e III
• Checkpoint (primeira questão)
Em um sistema operacional é implementada a abstração de processos.
Pode-se afirmar que processos funcionam de acordo com as seguintes
regras:
I. Um processo pai cria um processo filho, que pode criar outros processos
II. Processos são isolados, portanto não comunicam-se entre si
III. Após a criação de um processo, pai e filho executam de forma
concorrente
Quais afirmações estão corretas?
a) Apenas I
b) Apenas II
c) II e III
d) I e II
e) I e III
• Checkpoint (segunda questão)
Considerando o conceito de threads (fios), a seguinte afirmação está correta:
a) Qualquer programa pode ser implementado eficientemente com threads
b) Permite que uma aplicação execute um trecho de código por vez
c) Compartilha apenas os registradores com outras threads
d) Explora o desempenho utilizando multiprocessamento simétrico
e) Threads podem ser criadas rapidamente, porém não possuem uma troca
de contexto rápida
• Checkpoint (segunda questão)
Considerando o conceito de threads (fios), a seguinte afirmação está correta:
a) Qualquer programa pode ser implementado eficientemente com threads
b) Permite que uma aplicação execute um trecho de código por vez
c) Compartilha apenas os registradores com outras threads
d) Explora o desempenho utilizando multiprocessamento simétrico
e) Threads podem ser criadas rapidamente, porém não possuem uma troca
de contexto rápida

Você também pode gostar