Ambientes Operacionais Aula 04 15 – 09 - 06 Ambientes Operacionais Gerenciamento de Processos. Hierarquia dos Processos. Ambientes Operacionais Gerenciamento de Processos. Os sistemas operacionais que suportam o conceito de processo devem fornecer algum meio de criar todos os processos necessários. Em sistemas muito simples, ou naqueles projetados para rodar somente uma única aplicação, é possível ter todos os processos necessários criados quando o sistema é inicializado. Na grande maioria dos sistemas, é preciso haver um mecanismo que permita criar e destruir processos, quando necessário, durante a operação. Ambientes Operacionais Gerenciamento de Processos. No UNIX, processos são criados pela chamada de sistema FORK, cuja execução cria um processo idêntico àquele que a chamou. Após o FORK, o processo-pai continua rodando em paralelo com o filho. Ambientes Operacionais Gerenciamento de Processos. No MS-DOS existe uma chamada de sistema para carregar um arquivo binário específico da memória, e executá-lo como um processo-filho. Em contraste com o UNIX, esta chamada do MS-DOS suspende a execução do processo-pai até que o filho venha a terminar sua execução, fazendo com que pai e filho não possam ser executados em paralelo. Ambientes Operacionais Gerenciamento de Processos. Estados do Processo Apesar de cada processo ser uma entidade independente, com seu próprio fluxo de controle e com seu próprio estado interno, eles muitas vezes têm necessidade de interagir com outros processos. Por exemplo, determinado processo pode gerar uma saída que um outro processo venha a usar como entrada. Ambientes Operacionais Gerenciamento de Processos. Estados do Processo. Dependendo da velocidade relativa entre os dois processos, que é função tanto da complexidade de cada um deles quanto do tempo que o processador vier a alocar a cada um, pode ocorrer que um processo esteja pronto para rodar, mas que não haja ainda nenhuma entrada disponível para permitir sua execução. Ambientes Operacionais Gerenciamento de Processos. Estados do Processo. Neste caso, ele precisa ser bloqueado até que uma entrada esteja disponível. Tal bloqueio pode ocorrer por força da decisão do sistema operacional de entregar o processador a um outro processo, durante certo intervalo de tempo. Ambientes Operacionais 1 RODANDO 3 BLOQUEADO PRONTO 4 1.Rodando, ou seja, usando o processador neste instante. 2.Pronto. Está em condições de rodar, mas bloqueado temporariamente para dar vez a um outro processo. 3.Bloqueado. Impedido de rodar até que ocorra um determinado evento externo ao processo. 4.Entrada de dados concluída. 2 Ambientes Operacionais Gerenciamento de Processos Implementação de Processos Para implementar o modelo de processo, o sistema operacional deve manter uma tabela, chamada tabela de processos, com uma entrada por processo. Esta entrada contém informações sobre o estado do processo, sobre a memória alocada, os valores de seu contador de programa e de seu apontador de pilha, o estado de seus arquivos abertos, sua contabilidade no uso de recursos, sua prioridade, e tudo o mais que for necessário. Ambientes Operacionais Gerenciamento de Processos Implementação de Processos O próximo passo é a identificação do processo que requisitou trabalho do disco e que conseqüentemente gerou a interrupção. Via de regra, este processo foi posto para dormir após solicitar o serviço, de forma que agora ele deve ser acordado. Ambientes Operacionais Gerenciamento de Processos Implementação de Processos O estado deste processo é trocado de bloqueado para pronto, e o escalonador é chamado. Sabemos, com certeza, que neste instante existem pelo menos dois processos prontos: o processo que solicitou serviço ao disco e o processo que foi interrompido pelo disco. É tarefa do escalonador escolher o mais adequado para rodar. Ambientes Operacionais Gerenciamento de Processos. Comunicação entre Processos. Ambientes Operacionais Gerenciamento de Processos Comunicação entre Processos Os processos precisam freqüentemente se comunciar com outros processos. Existe, portanto, a necessidade de haver comunicação entre tais processos, preferencialmente de uma forma estruturada, que não seja baseada em interrupções. Ambientes Operacionais Gerenciamento de Processos. Comunicação entre Processos. Condição de Corrida. Ambientes Operacionais Gerenciamento de Processos Condição de Corrida. Em alguns sistemas operacionais, processos que estão trabalhando em conjunto muitas vezes utilizam uma memória comum, onde cada processo pode ler ou escrever. Ambientes Operacionais Gerenciamento de Processos. Condição de Corrida. Para se ter idéia de como a comunicação entre processos funciona na prática, vamos considerar um exemplo bem simples e bastante comum, um spool de impressão. Quando um processo deseja imprimir um arquivo, ele entra com o nome do arquivo em um diretório especial de spool. Outro processo, o impressor, verifica periodicamente este diretório, para ver se há arquivos a serem impressos. Havendo, eles são impressos e seus nomes são retirados do diretório Ambientes Operacionais Condição de Corrida. Ambientes Operacionais Gerenciamento de Processos. Como evitar a ocorrência de condições de corrida? A questão-chave para evitar problemas em casos envolvendo qualquer tipo de compartilhamento, de recursos (memória, arquivo, e tudo o mais) é encontrar alguma forma de proibir que mais de um processo acesse o dado compartilhado ao mesmo tempo (pseudoparalelismo ou paralelismo real). Ambientes Operacionais Gerenciamento de Processos. Em outras palavras, precisamos encontrar um meio de implementar a exclusão mútua - uma forma de se ter certeza de que se um processo estiver usando uma variável ou um arquivo compartilhados, os demais serão impedidos de fazer a mesma coisa. Esta condição é denominada região crítica ou seção crítica. Se pudermos arranjar as coisas de forma que não seja nunca permitido que dois ou mais processos estejam processando suas seções críticas correspondentes ao mesmo tempo, poderemos evitar a ocorrência das condições de corrida. Ambientes Operacionais Gerenciamento de Processos. Exclusão Mútua com Espera Ocupada. Temos que examinar várias propostas para obtenção da exclusão mútua, de forma que quando um processo estiver acessando a memória compartilhada dentro de sua região crítica, nenhum outro processo poderá entrar em sua seção crítica correspondente. Ambientes Operacionais Gerenciamento de Processos. Exclusão Mútua com Espera Ocupada. 1 - Inibição das interrupções; 2 - Primitivas SLEEP / WAKEUP; 3 – Monitores; 4 – Troca de mensagens. Ambientes Operacionais Gerenciamento de Processos. Inibição das interrupções. A solução mais simples para tal problema é obtida fazendo com que cada processo iniba as interrupções logo após seu ingresso em uma região crítica, habilitando-as outra vez imediatamente antes de deixá-la. Com as interrupções inibidas, o processo não poderá ser interrompido por exceder o tempo de processamento concedido a ele. Ambientes Operacionais Gerenciamento de Processos. Inibição das interrupções. Como o processador só pode ser chaveado entre processos através de interrupções de tempo, com as interrupções inibidas não haverá chaveamento. Então, uma vez inibidas as interrupções, o processo pode examinar e atualizar a memória compartilhada, sem se preocupar com a eventual intervenção de outro processo em seu processamento. DESVANTAGEM. Sistemas em loop eternos. Ambientes Operacionais Gerenciamento de Processos. Bloqueio e Desbloqueio de Processos: Primitivas SLEEP/WAKEUP A primitiva SLEEP é uma chamada de sistema que bloqueia o processo que a chamou, isso é, suspende a execução de tal processo, até que outro processo o acorde. A primitiva WAKEUP tem um parâmetro, o processo a ser acordado. Alternativamente, tanto SLEEP quanto WAKEUP podem ter um outro parâmetro, um endereço de memória usado para casar uma primitiva SLEEP com sua correspondente WAKEUP. Ambientes Operacionais Gerenciamento de Processos. Monitores. É tarefa de o compilador implementar a exclusão mútua de execução sobre o monitor, sendo o caminho mais usual utilizar os semáforos binários. Pelo fato de o compilador, e não do programador, estar envolvido com a exclusão mútua, é muito pouco provável que algo venha a dar errado. Basta saber que, colocando todas as regiões críticas dentro do monitor, não haverá a possibilidade de mais de um processo executar sua região crítica ao mesmo tempo. Ambientes Operacionais Gerenciamento de Processos. Troca de mensagens. Os sistemas baseados em troca de mensagens têm muitos problemas que não ocorrem nos sistemas com semáforos ou com monitores, especialmente se os processos que se comunicam estiverem em máquinas diferentes, conectadas por uma rede. Por exemplo, as mensagens podem perder-se na rede. Para prevenir a perda de mensagens, o transmissor e o receptor devem ser programados de forma que, tão logo tenha recebido uma mensagem, o receptor envie de volta ao transmissor uma mensagem especial de reconhecimento (acknowIedgement). Ambientes Operacionais Gerenciamento de Processos. Troca de mensagens. Os sistemas baseados em troca de mensagens devem tratar também da questão da identificação dos processos, de forma a que os processos especificados no SEND e no RECEIVE não sejam confundidos. Se o número de máquinas na rede for muito grande, e não houver um esquema central de alocação de nomes de máquinas, pode ocorrer que duas organizações venham a dar o mesmo nome às suas máquinas. Outro problema dos sistemas com troca de mensagens é a questão envolvendo a autenticação das mensagens: como um processo sabe que está se comunicando com um servidor de arquivos real e não com um impostor? Ambientes Operacionais Gerenciamento de Processos. Escalonamentos de Processos. Ambientes Operacionais Gerenciamento de Processos. Escalonamentos de Processos. Nos exemplos anteriores, tivemos oportunidade de observar diversas situações nas quais dois ou mais processos estavam logicamente em situação de rodar. Quando mais de um processo está nesta situação, ou seja, pronto para rodar, o sistema operacional deve decidir qual deles vai rodar primeiro. A parte do sistema operacional a quem cabe tomar esta decisão denominada de escalonador, e o algoritmo utilizado em sua programação e chamado de algoritmo de escalonamento. Ambientes Operacionais Gerenciamento de Processos. Escalonamentos de Processos. Em primeiro lugar, cabe ao escalonador decidir qual processo executar baseado numa política. 1. Justiça: garantir que todos os processos do sistema terão chances iguais de uso do processador. 2. Eficiência: manter o processador ocupado 100% do tempo. 3. Tempo de resposta: minimizar o tempo de resposta para os usuários interativos. 4. Turnaround: minimizar o tempo que os usuários batch devem esperar pela saída. 5. Throughput: maximizar o número de jobs processados na unidade de tempo, usualmente uma hora. Ambientes Operacionais Gerenciamento de Processos. Escalonamentos de Processos. Uma complicação que os escalonadores devem enfrentar é o fato do comportamento de cada um dos processos ser único e imprevisível. Alguns gastam grande quantidade de tempo fazendo entrada/saída, enquanto outros ocupam o processador por horas a fio, se tiverem oportunidade. Ambientes Operacionais Gerenciamento de Processos. Escalonamentos de Processos. Quando o escalonador coloca um processo para rodar, ele nunca tem certeza a respeito do tempo que tal processo vai levar executando até ser bloqueado, ou por entrada/saída, ou em um semáforo, ou por qualquer outra razão. Para assegurar-se de que nenhum processo rode por um tempo muito grande, todos os computadores modernos possuem um relógio interno, que periodicamente gera um sinal de interrupção, denominado interrupção de tempo. Ambientes Operacionais Gerenciamento de Processos. Escalonamento Round Robin. Um dos mais antigos, simples, justo, e portanto muito usado, é o chamado round robin. A cada processo atribui-se um intervalo de tempo durante o qual ele poderá usar o processador. A este intervalo de tempo dá-se o nome de quantum. Se o processo ainda precisar rodar depois de esgotado seu quantum, ele perde o processador, dando lugar a um outro processo. Ambientes Operacionais Gerenciamento de Processos. Escalonamento com Prioridade. A cada processo é associada uma prioridade, e o processo pronto com maior prioridade será aquele que vai rodar primeiro. Para evitar que processos com alta prioridade monopolizem o processador, o escalonador decrementa a prioridade do processo que está rodando, a cada interrupção de tempo. Ambientes Operacionais. Escalonamento preemptivo e não-preemptivo. Escalonamento Preemptivo: é o processamento que ocorre sem a interrupção do escalonador,ou seja, pode executar infinitamente. Escalonamento não-preemptivo: é interrompido a cada 30 cliclos de clock e o escalonador consulta a tabela de processos se existe outro processo em melhor condição para ser executado.