Buscar

DSD 17 GERENCIAMENTO DE PROCESSOS (2)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 79 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 79 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 79 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Continue navegando


Prévia do material em texto

Desenvolvimento de Software Distribuídos
Gerenciamento de Processos 
2014
Professor Melo
Apresentação
	Técnico em Desenvolvimento de Sistemas - Ibratec, Recife-PE
	Bacharel em Sistemas de Informação – FIR, Recife-PE
	Especialista em Docência no Ensino Superior – Faculdade Maurício de Nassau, Recife-PE
	Mestre em Ciência da Computação – UFPE/CIN, Recife-PE
	Currículo Lattes http://lattes.cnpq.br/0759508594425296)
	Homepage https://sites.google.com/site/hildebertomelo/
Disciplinas Lecionadas
	Desenvolvimento de Aplicações Desktop
	Programação Orientada a Objetos
	Estrutura de Dados
	Tecnologia da Informação & Sociedade
	Sistemas Operacionais
	Sistemas Distribuídos
	Introdução a Informática
	Lógica de Programação
	Informática Aplicada a Saúde
	Banco de Dados
	Projeto de Banco de Dados
	Análise de Projetos Orientado a Objetos
	Programação Cliente Servidor
	Linguagens de Programação: C, C#, Pascal, PHP, ASP, Delphi, Java, JavaScript
	Programação WEB
Processo
	É basicamente um programa em execução;
	Possui associado um espaço de endereçamento de memória;
	O seu espaço de endereçamento contém o programa executável, os dados do programa e a sua pilha de execução;
	Cada processo também está associado a um conjunto de registradores:
	Contador de programa, ponteiro de pilha, dentre outros. 
Conceito de Processos
	O conceito de processo foi criado devido à multiprogramação
	Um único processador pode ser compartilhado entre vários processos, com o uso de um algoritmo de escalonamento
Relembrando...
	Em um S.O time-sharing, periodicamente o sistema operacional decide parar de executar um processo e começa a execução de outro, em seguida retorna ao primeiro... 
	Todas as informações sobre um processo devem ser explicitamente salvas em algum lugar durante a suspensão do mesmo. Para isso, o S.O possui uma tabela denominada tabela de processos. 
	
Tabela de Processos 
	Contém todas as informações sobre os processos;
	É uma lista encadeada de estruturas, uma para cada processo atualmente existentes;
	Se um processo pode criar um ou mais processos, esses últimos são referenciados como processos-filho, que por sua vez, podem criar outros processos-filho. Assim chega-se a estrutura de árvore de processos. 
Árvore de Processos
A
B
C
D
E
F
Estados de um Processo
	Executando – realmente utilizando a CPU
	Pronto – executável temporariamente parado para permitir que outro processo execute
	Bloqueado – incapaz de executar até que algum evento externo aconteça
Estados de um Processo
O processo bloqueia para entrada
O agendador seleciona outro processo
O agendador seleciona esse processo
A entrada torna-se disponível
EXECUTANDO
PRONTO
BLOQUEADO
1
4
2
3
Modelo de Processos
	Neste modelo, todo software executável no computador, incluindo o sistemas operacional é organizado em um número de processos seqüenciais;
	Processo:
	É um programa em execução incluindo os valores atuais do contador de programa, registradores e variáveis; 
	Conceitualmente, cada processo tem sua própria CPU virtual. 
Estados de um Processo 
New
Running
Ready
Halted
Waiting
Estados de um Processo
	New - Um programa é excolhido para ser executado e o S.O vai iniciá-lo movendo-o para o estado Ready. 
	Ready - O processo está pronto e a espera de acesso ao processador.
	Running - O processo está sendo executado pelo processador.
	Waitting - O processo está suspenso a espera por recursos, por exemplo, I/O.
	Halted - O processo terminou e será destruído pelo sistema operacional.
Transições de Estado 
	RunningWaitting: Ocorre quando um processo descobre que não pode continuar;
	Running  Ready: Ocorre quando o agendador (scheduler) decide que o processo em execução atuou por tempo suficiente e permite que outro processo em execução tenha algum tempo da CPU;
	Ready  Running: Ocorre quando todos os outros processos tiveram sua fatia justa e é hora do primeiro deles receber a CPU para executar novamente. 
 
Transições de Estado
	Waitting Ready: Ocorre quando acontece o evento externo pelo qual o processo está esperando acontecer. Se nenhum outro processo está executando nesse instante, a transição será ativada imediatamente e o processo começará a executar.
Implementação de Processos 
	
Tabela de processos:
Utilizada e mantida pelo S.O para implementar o modelo de processos;
Contém uma entrada para cada processo;
Contém informações sobre o estado do processo, o seu contador de programa, o ponteiro da pilha, alocação de memória, status dos arquivos abertos, informações de contabilidade;
Contém todas as informações necessárias para que o processo possa ser reiniciado mais tarde após ter passada do estado de execução (running) para o estado pronto (ready). 
Interrupções
	Como acontece a multiprogramação em uma máquina com 1 CPU e vários dispositivos de I/O?
	Associado a cada classe de dispositivos de entrada e saída (I/O) existe uma área próxima a parte inferior da memória chamada de vetor de interrupção.
	Vetor de interrupção contém o endereço do procedimento de serviço da interrupção.
Processamento de Interrupções
O hardware empilha o contador de programa, etc.
O hardware carrega um novo contador de programa a partir do vetor de interrupção;
O procedimento em linguagem assembly salva os registradores;
O procedimento em linguagem assembly define uma nova pilha;
O serviço de interrupção em C executa;
O agendador (scheduler) marca a tarefa em espera como pronta;
O agendador decide qual processo será executado em seguida;
O procedimento em C retorna para o código assembly;
O procedimento de linguagem assembly inicia processo atual de novo.
Exemplo de Interrupção
	Supor que um processo de usuário esteja executando quando ocorre uma interrupção de disco:
	O contador de programa, a palavra de status do programa, e os outros registradores são enviados à pilha pelo hardware de interrupção;
	A CPU salta para o endereço especificado no vetor de interrupção de disco;
Exemplo de Interrupção 
	Continuação...
	O procedimento de serviço de interrupção inicia salvando todos os registradores na entrada da tabela de processos para o processo atual; 
	As informações depositadas pela interrupção são removidas da pilha;
	O próximo passo consta da formação de uma mensagem a ser enviada ao processo de disco dizendo que houve uma interrupção.
Threads
Threads
	Em um processo tradicional, há uma única linha de controle e um único contador de programa em cada processo;
	Porém, nos sistemas operacionais modernos, é fornecido suporte para múltiplas linhas de controle dentro de um processo;
	Tais linhas de controle são chamadas de threads ou processos leves.
Threads
computador
contador de programa
Thread
Processo
Caso 1
computador
Caso 2
Threads 
 3 processos tradicionais
 
Cada processo tem seu próprio espaço de endereço e uma única linha de controle
 Um único processo com 3 linhas de controle
 Os três processos compartilham o mesmo espaço de endereço
Caso 1
Caso 2
Ambos os casos possuem 3 threads
Exemplo para Comparação 
	Considere um servidor de arquivos:
	Este servidor recebe solicitações de leitura e gravação de arquivos enviando de volta os dados requisitados ou aceita os dados atualizados;
	Para uma melhoria de desempenho, o servidor mantém uma cache de arquivos recentemente utilizados em memória. 
Exemplo Usando Caso 2 
	Para o caso 2, quando uma requisição entra, ela é passada a uma thread para processamento:
	Se esta thread bloqueia no meio do caminho para esperar uma transferência de disco, outros threads são ainda capazes de executar;
	Dessa forma o servidor poderá continuar processando novas requisições, mesmo quando está havendo entrada e saída (I/O) de disco.
Exemplo Usando Caso 1 
	Para o caso 1, quando uma requisição entra, ela é passada a uma thread para processamento:
	É essencial que todas as threads do servidor de arquivos acessem o mesmo cache e como as três threads não compartilham o mesmo espaço de endereçosentão não podem compartilhar o mesmo cache de memória.
Threads
Definição
	Um thread é um fluxo de execução dentro de um processo
	Um processo pode possuir um ou vários threads
Definição
	Os threads compartilham o mesmo espaço de endereçamento do processo que os contém
Aproveita os recursos 
alocados
 para o processo
Definição
	Cada thread possui: 
	Contador de programas
	Conjunto de registradores
	Espaço de pilha
	Estado
Processo X Thread
	A criação de um processo é cara
	Alocação de espaço de endereçamento
	A criação de threads é rápida e barata, quando já existe o processo
	O tempo de criação de um thread é mil vezes menor que o tempo de criação de um processo
Processo X Thread
	A troca de contexto entre processos é demorada em relação à troca de contexto entre threads
	A troca de contexto ente threads envolve apenas alteração no conjunto de registradores
Processo X Thread
	Os threads possuem características semelhantes aos processos:
	Possui estados: pronto, bloqueado e rodando
	Os threads compartilham a CPU e apenas um thread pode estar sendo executado
Processo X Thread
	Características diferentes:
	A execução de threads, pertencentes ao mesmo processo, são dependentes
	Um thread pode ler e escrever sobre pilhas de outros processos
Processo X Thread
	A comunicação entre threads de um processo é simples pois os threads compartilham o mesmo espaço
	É necessário, então, algum mecanismo de sincronização entre os processos
	semáforos
Multithreading X 
Single Threading
	Single Threading: SO não conhece o conceito de threads
	Multithreading: SO suporta vários threads dentro de um único processo 
Multithreading X 
Single Threading
	MS-DOS: suporta um único processo é um único thread
	UNIX: suporta vários processos e somente um thread por processo
	Solaris: suporta multithreading
Níveis de Threads
	Threads a nível de usuário: bibliotecas threads
	Threads a nível de kernel: chamadas de sistema
	O SO Solaris implementa os dois níveis
Threads a Nível de Usuário
	O kernel não tem conhecimento dos threads que são implementados a nível de usuário
	O gerenciamento de threads é feito pela aplicação através de uma biblioteca thread
Threads a Nível de Usuário
	O kernel faz o gerenciamento do processo que contém os threads
	Quando um thread faz uma chamada de sistema, todo o processo é bloqueado
	O thread continua no estado de execução
Threads a Nível de Usuário
	Vantagem:
	Pode-se utilizar threads em qualquer SO
	Desvantagem:
	Quando um thread é bloqueado, todos os threads pertencentes ao mesmo processo também são bloqueados
	Os threads de um processo não podem ser executados simultaneamente em ambientes com mais de um processador
Threads a Nível de Kernel
	Todo o gerenciamento de threads é feito pelo kernel
	O kernel mantém informação sobre o processo e seus threads
	O escalonamento na CPU é feito a nível de threads
Threads a Nível de Kernel
	Vantagens:
	Vários threads de um mesmo processo podem ser executados ao mesmo tempo em ambientes com mais de um processador
	Se um thread é bloqueado, os outros threads do processo podem rodar
Threads 
	Threads como os processos, podem estar nos estados de execução (running), pronto (ready), bloqueado (waitting) e ainda no estado novo (new) ou finalizado (halted);
	Cada uma delas apresenta um contador de programa, registradores e o seu próprio estado:
	O contador de programa é necessário porque os threads podem ser suspensos e retomados;
	Os registradores são necessários porque quando os threads são suspensos, seus registradores devem ser salvos.
Comunicação Entre Processos
Comunicação entre Processos
	Um processo freqüentemente precisa se comunicar com outro processo;
	Exemplo:
	Em um comando que utiliza pipe no shell , a saída do primeiro processo deve ser passada para o segundo processo e assim por diante ao longo da linha. 	
	Dessa forma, há a necessidade de comunicação entre processos de maneira bastante estruturada.
Comunicação entre Processos
	IPC (InterProcess Communication)
	Os processos podem se comunicar através de vários métodos:
	Memória compartilhadaPrincipal ou arquivo compartilhado;
	Troca de mensagens
Situação Exemplo
	Spooler de impressão:
	Processo quer imprimir um arquivo, então ele insere o nome de arquivo em um diretório de spooler especial;
	Outro processo, o servidor de impressão, verifica periodicamente se há qualquer arquivo a ser impresso;
	Caso hajam arquivos a serem impressos, eles serão e os seus nomes serão removidos do diretório. 
Expandindo o Exemplo
	Imaginemos que o diretório de spooler tenha um número muito grande de entradas....
	Cada entrada é capaz de armazenar o nome de um arquivo.
	Imaginemos ainda que existem duas variáveis compartilhadas...
	in->aponta para a próxima entrada livre no diretório;
	out->aponta para o próximo arquivo a ser impresso;
Expandindo o Exemplo
	Imaginemos ainda que as entradas 0,1,2 e 3 do diretório de spooler estejam vazias e as entradas 4 a 6 estão cheias. 
	Caso dois processos A e B decidam ao mesmo tempo colocar arquivos na fila de impressão e a lei de “Murphy” seja aplicada....
Expandindo o Exemplo
	O processo A lê in e armazena o valor 7 em uma variável local chamada next_free_slot;
	Acontece uma interrupção de relógio e a CPU decide que o processo A já executou por tempo suficiente e faz o chaveamento de contexto para B; 
	O processo B também lê in e recebe o valor 7, então ele armazena o nome do seu arquivo na posição 7 atualizando o in para que seja 8.
Expandindo o Exemplo
	O processador volta a processar o processo A que estava suspenso....
	A vai continuar do local onde parou;
	Vai examinar o next_free_slot e encontra um 7;
	Então escreve o seu nome de arquivo na entrada 7 apagando o nome que o processo B acabou de colocar lá;
	Neste momento, ele calcula o next_free_slot +1 , ou seja, 8, e o in será definido como 8;
	O diretório do spooler está internamente consistente.
Condições de Corrida
	Situações como a relatada no exemplo anterior:
	Dois ou mais processos estão lendo e gravando dados compartilhados... 
	Resultado final depende de quem executou e quando o fez..
	 
CONDIÇÕES DE CORRIDA
Condições de Corrida
	Depurar programas contendo condições de corrida é muito trabalhoso.
	Pergunta:
	Resposta:
	 
Como evitar?
Proibir que mais de um processo leia 
e grave os dados compartilhados ao 
mesmo tempo.
Esse problema também é comum em situações envolvendo memória compartilhada, arquivos compartilhados e tudo mais compartilhado.
Exclusão Mútua 
	Certificação de que se um processo está utilizando um arquivo ou variável compartilhados, os outros processos ficam impedidos de fazerem o mesmo.
 
A escolha das operações primitivas apropriadas para obter a exclusão mútua é uma questão de projeto importante em qualquer sistema operacional
Região Crítica
	Definição:
	Parte do programa em que a memória compartilhada é acessada.
	Resolução do Problema:
	Nenhum dos processos que executam simultaneamente podem estar na sua região crítica ao mesmo tempo.
	Evita mas não é suficiente.
Solução Completa 
	Para se ter uma boa solução de exclusão mútua:
1. Nenhum dos dois processos podem estar simultaneamente dentro da sua região crítica
2. Nenhuma suposição pode ser feita sobre as velocidades ou sobre o número de CPUs
3. Nenhum processo que executa fora de sua região crítica pode bloquear outro processo 
4. Nenhum processo deve ter de esperar eternamente para entrar em sua região crítica
Resumo dos Conceitos
	Corrida de Processos: situação onde dois ou mais processos concorrem a um único recurso
	Região Crítica: Segmento de código de um processo, no qual valores armazenados em variáveis globais podem ser alterados por outros processos
Propostas para Obter a Exclusão Mútua
	Desativação das interrupções:
	Solução simples;
	Cada processo desativa as interrupções imediatamente depois de ele entrar em sua região crítica e reativa-as imediatamente após sair dela;
	CPU não alternaentre processos;
	O processo pode examinar e atualizar a memória compartilhada sem medo da intervenção de qualquer outro processo.
LEMBRETE: A CPU só alterna de um processo para outros como resultado de interrupções (relógio ou outras)
Propostas para Obter a Exclusão Mútua
	Desativação das interrupções (continuação):
	Abordagem pouco “atraente”;
	Não é aconselhável dar o poder de desativar instruções a processos de usuário;
	“Caminho sem volta”  nunca mais as reative;
	Técnica útil para processos do Kernel.
Desativar interrupções afeta só a CPU que executou a instrução de desativamento.
Propostas para Obter a Exclusão Mútua
	Variáveis de Bloqueio:
	Definição de uma variável única compartilhadavariável de bloqueio;
	Variável de bloqueio inicialmente é 0;
	Se um processo entra na sua região crítica seta a variável de bloqueio para 1;
	Não é viável;
0 – Significa que nenhum processo está na sua região crítica
1 – Significa que algum processo está na sua região crítica
Propostas para Obter a Exclusão Mútua
	Alternância estrita
	Solução somente para dois processos:Processo 0 e Processo 1
	Utilização de uma variável compartilhada: turn 
	Pode assumir 0, dando a vez ao processo 0
	Pode assumir 1, dando a vez ao processo 1 
Alternância Estrita 
	Desvantagem: Não funciona quando um processo é mais lento que o outro
Um processo pode ficar bloqueado
por um processo que não está 
em sua região crítica
Deadlock
Um conjunto de processos está em uma situação de deadlock, se cada processo do conjunto estiver esperando por um evento que somente outro processo, também bloqueado, pode executar.
Modelo Cliente/Servidor 
	Tendência nos sistemas operacionais modernos de levar adiante a idéia de mover código para camadas mais altas e remover tanto quanto possível do S.O, deixando um mínimo de kernel;
	A abordagem normal é implementar a maior parte das funções do S.O em processos de usuários. 
Modo usuário
Modo kernel
O cliente obtém o serviço enviando mensagens para processos servidores
	Processo
cliente	Processo
cliente
	Processo
servidor
	Servidor
terminal	.............	Servidor de arquivos	Servidor de memória
	Kernel 
Modelo Cliente/Servidor
	A divisão do S.O em partes, cada uma gerenciando apenas uma faceta do sistema como serviço de arquivo, de processo, de terminal ou serviços de memória torna todas as partes pequenas e gerenciáveis;
	Como todos os servidores executam como processos em modo usuário e não em modo kernel, eles não têm acesso direto ao hardware;
	Dessa forma se ocorrer um bug no servidor de arquivos, o serviço de arquivos pode cair, mas isso normalmente não derrubará a máquina inteira. 
 
Modelo Cliente/Servidor
	Vantagens deste modelo:
	Adaptabilidade para o uso em sistemas distribuídos;
	Se um cliente comunica-se com um servidor enviando-lhe mensagens, o cliente não precisa saber se a mensagem é manipulada localmente na própria máquina ou se for enviada através de uma rede para um servidor em máquina remota. 
Perguntas
*
Referências
	Visual C# Developer Center http://msdn.microsoft.com/pt-br/vcsharp/aa336809.aspx
	Microsoft Visual C# 2005 passo a passo, Jonh Sharp, editora Bookman
	C# Como programar, Deitel.