Você está na página 1de 6

Captulo 2 Processos e Threads

Processo entidade dinmica que consiste num programa em execuo, os seus valores correntes, informao de estado e recursos utilizados pelo sistema operativo na gesto da execuo do processo. Um processo constitui uma actividade. Ele possui programa, entrada, sada e um estado. Um nico processador pode ser compartilhado entre os vrios processos, com algum algoritmo de escalonamento usado para determinar quando parar o trabalho sobre um processo e servir um outro. 2.1.2 Criao de processos
H quatro eventos principais que fazem com que processos sejam criados: 1. Inicio do sistema 2. Execuo de uma chamada ao sistema de criao de processo por um processo em execuo 3. Uma requisio do usurio para criar um novo processo 4. Inicio de um Job em lote. Tecnicamente, em todos estes casos, um novo processo e criado por um processo existente executando uma chamada ao sistema de criao de processo.

2.1.2 Fim de processos


Depois de criado, um processo comea a executar e faz o seu trabalho. Mais cedo ou mais tarde o processo terminara, normalmente por uma das seguintes razoes: Sada normal (voluntria) maioria das vezes os processos terminam porque fizeram o seu Na trabalho. Outra sada normal e por exemplo quando o utilizador sai do programa como deve ser. (A cruz da janela por exemplo) Sada por erro (voluntria) Quando o processo descobre um erro fatal. O processo emite uma chamada de sada ao sistema. Erro fatal (involuntrio) Quando o erro e causado pelo processo, muitas vezes um erro de programa. Exemplos: quando encontra uma diviso por zero, instruo ilegal, etc. Cancelamento por um outro processo (involuntrio) Quando um processo executa uma chamada ao sistema dizendo para cancelar algum outro processo. Em linux: kill

2.1.2 Estado dos processos


1. Em execuo (realmente utilizando o CPU nesse instante): 2. Pronto (executvel; temporariamente parado para dar lugar a outro processo) 3. Bloqueado (incapaz de executar enquanto um evento externo no ocorrer) As transies possveis entre os vrios estados so: Execuo Bloqueado: quando um processo descobre que no pode prosseguir passa para o estado de bloqueado: Ex: cat teste | grep tree o processo do grep tem de esperar pela sada do processo cat. Se o

processo grep tem tempo de CPU e o processo cat ainda no terminou ento o grep passa para o estado de bloqueado. Execuo Pronto e Pronto Execuo: transies causadas pelo escalonador de processos, grerenciamento de tempo de CPU, Execuo Pronto ocorre quando o escalonador de processos decide que o processo em execuo j teve o seu tempo de CPU, e Pronto Execuo ocorre quando j todos os processos estiveram em execuo volta novamente para o mesmo. Bloqueado Pronto: ocorre quando o processo que estava no estado bloqueado tem disponvel aquilo que estava espera. Se o CPU estiver livre esse processo passa logo para o estado de Execuo, seno fica a aguardar at chegar a sua vez.

2.1.2 Threads
E o fluxo de controle de um processo. Permitem que mltiplas execues ocorram no mesmo ambiente do processo com um grande grau de independncia uma da outra. Itens compartilhados por todos os threads de um processo: Espao de endereamento Variveis globais Ficheiros abertos Processos filhos Alarmes pendentes Sinais e tratadores de sinais Informao de contabilidade Itens por thread: Contador de programa Registradores Pilha Estado Cada thread tem a sua prpria pilha. Isso e fcil e perceber porque normalmente cada thread chama poeiets ir t ou se chamam os mesmos o que se vai passar, e diferente para cada thread, rcd n d e n s m o fe e ento e necessrio que cada thread tenha a sua pilha. A pilha tem uma estrutura aonde so guardadas as vaiveis locais de um procedimento e o endereo de retorno para usa-lo quando o procedimento terminar

2.2.2 O uso de threads


A principal razo para existirem threads que em muitas aplicaes ocorrem mltiplas actividades ao mesmo tempo. Algumas dessas actividades podem bloquear de tempos em tempos. O modelo de programao torna-se mais simples se decompormos uma aplicao em varias threads sequenciais que executam quase em paralelo. O paralelismo das threads o mesmo que existe para os processos mas neste caso as threads de um mesmo processo utilizam todas o mesmo espao de endereamento. Uma segunda razo para o uso de threads tem a ver com o facto de serem mais fceis de criar e de destruir do que os processos, pois no tem quaisquer recursos associados a eles. Em muitos sistemas criar threads e muito mais rpido que criar processos. Esta propriedade e til quando o numero de threads necessrios se altera dinmica e rapidamente. O desempenho tambm e uma razo para o uso e threads pois quando existe uma grande quantidade de computao e de E\S, os threads permitem que essas actividades se sobreponham e desse modo aceleram a aplicao.

2.2.3 Implementao de threads de usurio


Sucintamente: O usurio cria um processo e depois o prprio processo que gerncia as suas threads. O processo tem uma tabela de threads, gerida por um sistema supervisor, para manter o controle sobre elas, tabela essa que em tudo parecida a tabela de processos do ncleo. Vantagens: quando uma thread decide parar de executar, a informao da thread e guardada na tabela e threads e o escalonador de threads pode ser chamado pela paragem daquela thread e seleccionar outra thread para executar. A vantagem disto que mais eficiente, o escalonador de threads e o guardar a informao da thread na tabela assim do que fazer uma chamada ao ncleo. Outra vantagem e cada processo pode ter o seu algoritmo de escalonamento personalizado.

2.2.4 Implementao de threads de ncleo


Contrariamente a implementao de threads de usurio, a implementao de threads de ncleo funciona com o ncleo a gerir as duas tabelas, quer a de processos bem como a das threads. Esta tabela das threads acompanha todas as threads do sistema, enquanto que na implementao de threads de usurio cada tabela de threads apenas gerncia as threads correspondentes a um processo.

2.2.7 Threads pop-up


Thread criada por uma thread existente para tratar o trabalho.

2.3.1 Condies de disputa


Dois processos querem ter acesso simultaneamente memria partilhada.

2.3.2 Regies criticas


As regies criticas so a resposta para evitar o problema das condies de disputa. Dando-lhe outro nome: excluso-mutua um modo de assegurar que outros processos sejam impedidos de usar uma varivel ou arquivo que j esteja a ser utilizado por um outro processo. Regio critica e aquela parte do programa em que existe acesso memoria partilhada. Para chegar a uma boa soluo de evitar as condies de disputa precisamos satisfazer quatro solues. 1. Nunca dois processos podem estar simultaneamente nas suas regies criticas 2. Nada pode ser afirmado sbe vl i d o sbe nm r d C U s or a e c ae u oro e e P od o 3. Nenhum processo executando fora da sua regio critica pode bloquear outros processos 4. Nenhum processo deve esperar eternamente para entrar na sua regio critica

2.3.3 Excluso Mtua Com Espera Ociosa


Varias solues para o problema das regies critica. Mas todas elas com o problema da espera ociosa. Quer isto dizer que quando um processo entra na sua regio critica nenhum outro pode entrar nessa mesma regio invadindo-a e causando danos. A espera ociosa faz com que os processos que querem entrar na regio estejam constantemente a perguntar se podem (averiguar uma varivel por exemplo) e isto no e muito bom pois assim consome o tempo de CPU desnecessrio

2.3.4 Dormir e acordar (problema produtor-consumidor)

Esta soluo para o problema das regies criticas em vez dos processos que querem aceder a regio critica ficarem em espera ociosa ficam bloqueados, fazendo com que estes no desperdicem tempo e CPU. Isto e feio com o par de chamadas ao sistema wakeup e sleep. O problema produtor-consumidor: dois processos partilham um buffer comum e de tamanho fixo. O produtor pe informao dentro do buffer e o consumidor retira. O problema existe quando o produtor que colocar um item no buffer mas este j esta cheio. A soluo e por o produtor a dormir e desperta-lo quando o consumidor consumir um ou mais itens. Ou ento ao contrrio, se o consumidor quiser consumir e o buffer estiver vazio, vai dormir ate o produtor produzir um ou mis itens. Resumidamente o problema disto tudo e quando ocorre a situao em que o buffer esta vazio e o consumidor acabou de ler a varivel count (que diz o numero de itens do buffer) para verificar se o seu valor e zero e nesse instante o escalonador de processos decide parar de executar o consumidor e comea a executar o produtor. O produtor insere um item no buffer e incrementa count, depois verifica que e 1 e ento envia o sinal para despertar o consumidor. Infelizmente o consumidor no esta a dormir e o sinal perde-se. Na prxima vez que o consumidor executar, testa o valor de count anteriormente lido e verifica que e zero e dormira. O produtor mais cedo ou mais tarde preenchera todo o buffer e tambm dormira. E ento ambos dormiram para sempre. Uma soluo para isto seria utilizar um bit de espera pelos sinais de acordar e dormir. Quando um sinal acordar enviado a um processo que ainda esta acordado ento esse bit e activado. Quando o processo tentar dormir, se o bit estiver activado ento o bit e desactivado e o processo continuara acordado.

2.3.5 Semforos
Uma varivel inteira utilizada para guardar o nmero de sinais de acordar salvos para uso futuro. Um semforo pode conter o valor 0 indicando que nenhum sinal de acordar foi salvo algum ou valor positivo se um ou mais sinais de acordar estivessem pendentes. As operaes para trabalhar com os semforos so o down e o up. A operao verifica se um semforo maior que zero. Se for ento decrementa um valor ao semforo (gasta um sinal de acordar armazenado). Se o valor for zero o processo ser posto para dormir. Verificar o valor do semforo, alteralo e possivelmente i dormir so tarefas executadas todas como uma s. Uma vez iniciada uma operao ao semforo mais nenhum outro processo pode ter acesso ao semforo, para evitar as condies de disputa. A operao up incrementa o valor de um dado semforo.

2.3.6 Mutexes
O mutex serve para gerenciar a excluso mtua de algum recurso ou parte de cdigo partilhada. tipo um semforo, mas apenas utiliza, ou o valor 0 para dizer que esta livre e outro qualquer para dizer que esta ocupado. Quando uma thread precisa de ter acesso a uma regio critica chama mutex_lock. Se o mutex estiver livre a chamada continua e o processo (ou thread) que chamou mutex_lock ficara livre para entrar na regio critica. Por outro lado se o mutex estiver ocupado, significa que um outro processo esta a utilizar aquela regio critica e ento o processo que chamou mutex_lock fica bloqueado ate que o outro processo acabe de utilizar a regio critica e chame mutex_unlock. Se existirem mltiplas threads bloqueados espera de entrar na regio critica um deles ser escolhido aleatoriamente. A diferena entre os mutexes e a espera ociosa que quando um processo chama mutex_lock e verifica que no pode entrar na regio critica, fica bloqueado e chama thread_yield para que liberte o CPU para outra thread

2.3.7 Monitores
Ah pois !

2.3.8 Troca de mensagens


Do ingls message passing. um mtodo e comunicao entre processos e utiliza duas primitivas, a send e a receive. A send envia uma mensagem para um dado destino e a receive recebe uma

mensagem de uma dada origem. Se nenhuma mensagem estiver disponvel o receptor poder ficar bloqueado at que alguma mensagem chegue. Ou ento retornar imediatamente um cdigo e erro.

2.3.9 Barreiras
Mecanismo dirigido a grupos de processos. Algumas aplicaes so divididas em fases e tem como regra que nenhum processo pode avanar para a prxima fase ate que todos os processos estejam pontos a faze-lo.

2.5 Scheduler
Quando um computador multiprogramado, ele muitas vezes tem variados processos que competem pela CPU o mesmo tempo. Esta situao ocorre sempre que dois processos esto no estado de pronto. Se apenas um CPU se encontra disponvel, devera ser feita uma escolha de qual processo executara primeiro. A parte do sistema operacional que faz essa escolha chamada de escalonador e o algoritmo que ele usa o algoritmo de escalonamento.

2.5.1 Introduo ao Scheduler


Objectivos do escalonador: Todos os sistemas: Justia a cada processo uma poro justa d CPU dar Aplicao da poltica verificar se a politica estabelecida cumprida Equilbrio manter ocupadas todas as partes do sistema Sistemas em lote Vazo maximizar o nmero de jobs por hora Tempo de retorno minimizar o tempo entre a submisso e o trmino Utilizao de CPU manter a CPU ocupada o tempo todo Sistemas interactivos Tempo de resposta responder rapidamente as requisies Proporcionalidade satisfazer as expectativas dos utilizadores Sistemas de tempo real Cumprimentos dos prazos evitar a perda de dados Previsibilidade evitar a degradao da qualidade em sistemas multimdia

2.5.2 Scheduler em sistemas bash


Primeiro a chegar primeiro a ser servido FCFS A CPU atribuda aos processos na ordem que eles a requisitam Job mais curto primeiro o nome diz tudo. O escalonador escolhe o Job com o tempo de execuo mais curto primeiro. Prximo de menor tempo restante o escalonador escolhe o processo com o menor tempo restante de execuo Escalonamentos em trs nveis A medida que chegam ao sistema, os jobs so inicialmente colocados numa fila de entrada armazenada no disco. O escalonador de admisso decide qual o Job que ser admitido no sistema. Os outros so mantidos na fila e entrada ate que sejam seleccionados. Assim que um Job admitido no sistema, um processo criado para ele que passa ento a competir pela CPU. Por vezes o nmero de processos to grande que pode no existir espao suficiente na memria. Nesse caso alguns processos devem ser levados para o disco. O segundo nvel de escalonamento, o escalonador de memoria que decide quais os processos que ficam na memoria e os que vo para o disco. Resumindo: escalonador de admisso, escalonador de CPU e escalonador de memoria

2.5.3 Scheduler em sistemas interactivos

Escalonamento por alternncia circular (round robin) a cada processo e atribudo o seu intervalo de tempo, o seu quantum, no qual ele permitido executar. Se ao final do quatum o processo ainda estiver a executar, o escalonado dar o CPU ao processo seguinte e o processo que estava a executar vai para o fim da lista circular Escalonamento por prioridades escalonamento circular pressupe que todos os processos so o igualmente importantes. A cada processo atribuda uma prioridade e os processos so ento escalonados conforme essas prioridades. Para evitar que os processos com prioridade mais alta sejam executados indefinidamente o CPU, o escalonado pode reduzir a prioridade do processo a cada tick de relgio. Filas mltiplas so definidas classes por prioridades. Os processos na classe mais alta so executados por um quatum, os processos na classe a seguir so executados por dois quantum e assim sucessivamente. Prximo processo mais curto (shortest process next) Escalonamento garantido Escalonamento por loteria Escalonamento por fraccao just (fair-share)

2.5.4 Scheduler em sistemas de tempo real


Um sistema de tempo real aquele no qual o tempo tem uma fucao essencial. E td m ia u coisa liga para o 118. uo a l ma sg

2.5.5 Politica versus mecanismo


Opi vi aj a .

2.5.6 Scheduler de threads


Quando um de vrios processos tem mltiplas threads, ocorrem dois nveis de paralelismo, processos e threads.