You are on page 1of 22

GERNCIA DE PROCESSOS

Definio o ambiente onde se executa um programa. O processo quem define o ambiente, os recursos, e os Buffers disponveis a este. Nenhum programa executado diretamente na memria e sim dentro de um processo. Se no fosse isto, o programa poderia fazer uso indiscriminado de qualquer rea de memria inclusive reas protegidas ou ento efetuando operaes de I/O indiscriminadamente em qualquer rea aleatria do disco, provocando o maior balaio de gato no computador e comprometendo a integridade e a consistncia dos dados. Da conclui-se que atravs do processo que o sistema operacional controla a execuo, as permisses e as restries que o programa ter quando estiver sendo executado, bem como os recursos que estaro e quando estaro disponveis a ele.

Estados de um processo:
Execuo (Running): Quando um processo est sendo processado pela CPU. Tais processos se revezam na execuo. Pronto (Ready): Quando um processo aguarda que o sistema operacional aloque a CPU para sua execuo. Espera (Wait): Quando um processo est aguardando algum evento externo para prosseguir com o processamento.

Quando um processo passa a maior parte do tempo no estado de execuo, a este chamamos de CPU BOUND. Este tipo de processo muito comum em aplicaes matemticas, cientficas e grficas por efetuarem muitos clculos. Quando o processo passa a maior parte do tempo em estado de espera e realizando muitas operaes de I/O, a este chamamos de I/O BOUND. o processo mais comum em aplicaes comerciais.

Conceitos Ligados a Processos System Calls um mecanismo que protege o ncleo do sistema operacional intermediando as chamadas dos aplicativos ao ncleo processando as solicitaes e as respostas a estas solicitaes. Suas funes bsicas so: - Gerencia de processos. - Gerncia de memria. - Gerncia de Entrada e Sada.

Mtodos de acesso um mecanismo que monitora as instrues executadas pelos programas de forma que estes no executem instrues que possam comprometer a integridade tanto do sistema como dos dados. As instrues que podem comprometer o sistema so autorizadas apenas ao Sistema operacional e este ir intermediar as chamadas a estas instrues pelos aplicativos.

Hierarquia entre Processos Um processo pode criar outros processos e que podem, por sua vez, criarem tambm outros processos de maneira hierrquica. Quando um processo (Processo pai) cria um outro processo, a este chamamos de subprocesso ou processo filho, e este subprocesso poder criar subprocessos que podem criar outros subprocessos etc. gerando uma arvore hierrquica de processos. Este tipo de recurso evita que o usurio tenha que esperar que um processo termine para que sua requisio seja processada melhorando o desempenho do sistema. Se a hierarquia de processos possui este benefcio, ela consome recursos dele, pois para cada processo ser necessria alocao dos referidos recursos de memria, buffers, etc., principalmente nos SO's atuais que so multitarefa e muitas vezes so obrigados a rodarem em mquinas domsticas e de recursos de hardware limitados, de forma que depois de certo numero de subprocessos a situao se torna crtica gerando erros no sistema como podemos ver abaixo:

Quando voc manda executar um programa dentro de outro, na verdade voc est criando um subprocesso que subordinado ao processo principal e assim por diante. Imagine a situao em que o Command.com executado dentro do processo principal e os programas, que sero executados no prompt do DOS, em subprocessos. Neste caso imagine um programa que carregado e neste programa tem uma opo "Ir para o DOS". Quando voc executar esta opo, ser criado mais um subprocesso dentro deste subprocesso que est sendo executado o referido programa. Se, dentro deste ambiente do DOS, voc executar algum outro programa voc nada mais estar fazendo do que criando mais um subprocesso. No confunda hierarquia de processos com multiprocessamento. O ambiente de multiprocessamento aquele ambiente onde vrios processos podem ser executados ao mesmo tempo, o chamado "Multitarefa".

Thread's Para resolver o problema da hierarquia de processos, foi criado o conceito de "Thread" onde um processo pode efetuar varias operaes concorrentemente ou simultaneamente atravs das chamadas "Linhas de execuo". Neste caso, o processo dividido no numero de Threads sem que haja necessidade de ser criado um outro. Desde que a IBM comeou a promover o seu sistema operacional OS2 2.0 em 1991, ouvimos falar de "threads" e software "Multi-thread". Mas o que este recurso? Threads compartilham o processador da mesma maneira que um processo. Por exemplo, enquanto uma Thread espera por uma operao de I/O, outra Thread pode ser executada. Cada Thread tem seu prprio conjunto de registradores, mas todas elas compartilham o mesmo espao de endereamento, pois se lembre que o processo um s. As Threads passam pelos mesmos estados de espera que o processo, ou seja, Running, ready, wait.

Um programa "Multi-thread" pode estar sendo executado em vrios locais ao mesmo tempo. E qual a vantagem disso? Vamos supor que um programa deseje imprimir um relatrio. Enquanto o programa estiver enviando os dados para a impressora, a execuo dele estar bloqueada. O usurio no poder emitir novos comandos, inserir um novo registro, por exemplo, enquanto a impresso no terminar. Um programa "Multi-thread" pode iniciar uma "Thread" para imprimir enquanto os resto do programa continua funcionando. Mas qual a diferena de "Multi-thread" para Multi Tarefa? A diferena que o Multi Tarefa requer que seja iniciado um outro processo caso se deseje a execuo simultnea. Isto aumenta bastante a complexidade dos aplicativos e traz uma grande perda de performance. Para efetuar troca de informaes entre duas Threads de um mesmo programa, basta utilizar uma varivel comum. Entre programas devem ser utilizados recursos mais sofisticados como arquivos comuns, filas, etc.

As vrias threads podem ser codificadas em um mesmo fonte. Mltiplos processos exigem a quebra do projeto em vrios executveis. Iniciar uma Thread uma tarefa barata para o sistema operacional, bem mais simples do que carregar um outro processo. Alm disto, a troca de execuo entre threads de um mesmo programa feita com um mnimo de desperdcio.

Exemplo de uma thread, duas sees de copia de arquivos no Explorer so iniciadas simultaneamente. Isto somente possvel porque cada seo corresponde a uma thread.

Um interessante exemplo de como usar threads so as DLL's, procedimento este conhecido como API. Diversos fornecedores oferecem API's proprietrias que permitem que outros aplicativos sejam ampliados de uma maneira mais eficiente. Utilizando este mtodo, a lgica implementada por meio de um conjunto de funes de aplicativos que so empacotadas como bibliotecas compartilhadas na forma de DLL (Dynamic Linked Library) no ambiente Windows ou um SO (Shared Object) no ambiente UNIX/LINUX e que permitem, s funes do aplicativo, o acesso direto s estruturas de dados do sistema Operacional.

Por exemplo, no ambiente Windows, um aplicativo qualquer chama uma DLL atravs de um pedido de um recurso para o qual foi definida uma associao DLL/funo. O sistema operacional aloca este pedido recebido em uma thread, que ficar em uma fila de espera. Quando chegar sua vez, ser criada para ela, uma estrutura de dados sobre o pedido e este ento comear a ser executado. Quando estiver completo, a thread ser retornada ao pool de threads gerenciadas, at que sejam necessrias novamente. Normalmente esta tcnica tem um desempenho de at 5 vezes superior ao de um processo comum. A razo disto muito simples. A chamada a um programa substituda pelo carregamento de um objeto compartilhado (DLL) que normalmente feito somente uma vez. Depois disto, este objeto permanece dentro do espao de endereo do sistema operacional, e as sobrecargas se restringem s chamadas de funo.

estrutura de dados sobre o pedido, fornecida pelo sistema operacional para se comunicar com o objeto compartilhado, recebe o nome de ECB (EXTENSION CONTROL BLOCK) e consiste em um conjunto de variveis, tanto de ambiente como oriundas do pedido e funes de chamada para suporte gerao da resposta. Cada pedido tem seu prprio ECB alocado e estes no se comunicam entre si em hiptese alguma. Em outras palavras, um ECB a forma que o sistema operacional tem de compartilhar entre as threads, o conjunto de variveis ambientes e tambm de disponibilizar dados que somente interessaro ao pedido sem que outro pedido tenha acesso a estes.

Outra grande diferena entre as threads e os processos que cada processo tem seu prprio espao de endereamento, enquanto N threads compartilham um espao de endereamento de um nico processo, otimizando o sistema e consumindo menos recursos dele. Mas assim aparece tambm a grande desvantagem deste recurso: por causa desta caracterstica (serem executadas no mesmo espao de endereamento), elas compartilham este espao sem nenhuma proteo ou restrio o que permite que uma Thread possa alterar dados de uma outra ou vice versa. Assim, para que uma aplicao possa funcionar eficientemente com threads, deve existir mecanismos de sincronizao robustos e consistentes que possam ter controle total sobre a fila de threads que acessaro as funes e os recursos globais. Um bug ou um erro lgico de programao pode criar um conflito entre duas ou mais Threads que acabaria destruindo todas as outras e consequentemente derrubar o processo.

Comunicao Entre Processos comum processos trabalharem concorrendo e compartilhando recursos do sistema, como arquivos, registros, dispositivos e reas de memria. Na verdade o importante como estes processos iro usar e o que iro fazer com estes recursos. Um recurso mal usado ou usado indevidamente pode comprometer o sistema ou o prprio processo gerando falhas como podemos ver abaixo:

Um dos exemplos de dois processos concorrentes que trocam informaes atravs de operao de gravao e leitura em um Buffer. Um processo s poder gravar dados no Buffer caso ele no esteja cheio, da mesma forma, um processo s poder ler dados armazenados no Buffer se existir algum dado a ser lido. Para gerenciar este compartilhamento de forma que dois ou mais processos tenham acesso a um mesmo recurso compartilhado, existe um mecanismo que controla este acesso, chamado de MECANISMO DE SINCRONIZAO. Este mecanismo tem o propsito de garantir a confiabilidade e a integridade da gravao dos dados, evitando que os dados armazenados fiquem sem consistncia. Como exemplo dois processos efetuando operaes de gravao, de dados diferentes, em disco exatamente no mesmo setor ou no mesmo arquivo. Esta situao se torna mais crtica ainda em sistemas operacionais MULTIPROGRAMVEIS.

Excluso Mtua - este conceito se aplica tambm aos subprocessos e as threads. Na abordagem dos problemas de comunicao entre processos, so usados algoritmos nos programas que incorporam o mecanismo de sincronizao e gerenciam este acesso. Um bom exemplo disto quando desenvolvemos programas para trabalharem em rede onde voc precisar fazer o bloqueio de um arquivo para us-lo impedindo assim que outra estao de trabalho manipule aquele mesmo arquivo no momento em que voc estiver usando-o. Para que sejam evitados problemas desta natureza, onde dois processos manipulem o mesmo arquivo ou a mesma varivel de memria simultaneamente, enquanto um processo estiver acessando determinado recurso, todos os outros que queiram acessar esse mesmo recurso devero esperar. Isso se chama EXCLUSO MUTUA.

A excluso mtua dever agir apenas sobre os processos que esto concorrendo em um determinado recurso. Quando desenvolvemos um programa, que faa tratamento de excluso mutua, este dever ter uma seo chamada REGIO CRTICA. Nesta regio existe uma serie de procedimentos e protocolos que o programa dever fazer para que o sistema operacional libere o recurso para o mesmo. A regio critica deve ser sempre usada quando seu programa for fazer uso de recursos que so passiveis de compartilhamento com algum outro suposto programa na memria. nela tambm que os processos encontram-se em um momento mais critico, pois qualquer erro ocorrido ali dentro pode fazer com que dois ou mais processos colidam gerando falhas e derrubando o sistema. A figura abaixo mostra uma falha ocasionada quando um processo apresentou problemas e acabou interferindo no funcionamento de outro:

Problemas de Sincronizao A tentativa de implementar a excluso mtua nos programas traz alguns problemas com sincronizao. As mais freqentes so: Velocidade de execuo dos processos Um dos problemas causados pela excluso mutua quando um processo mais rpido obrigado a esperar que um lento use o recurso e o libere. Um gargalo gerado pela consistncia dos processos onde o mais rpido ficar limitado velocidade do mais lento. Conseqncia disto, o sistema todo fica lento comprometendo o seu desempenho.

Starvation: Quem determina as prioridades dos processos o sistema operacional. Neste caso existem duas formas do sistema operacional determinar qual ser a vez de quem. Ou por escolha aleatria ou por prioridades. Quando a escolha aleatria, existir a probabilidade de um processo nunca ser escolhido, quando for uma escolha por prioridades, um processo de menor prioridade nunca receber o acesso ao recurso, e ento este processo nunca executar sua rotina. Sincronizao condicional: Quando um recurso no est pronto para ser utilizado, o processo que vai acessar o recurso ficar em estado de espera at que o mesmo esteja pronto. Existe o risco deste recurso nunca ficar pronto por j estar com problemas. Ento todo o sistema fica esperando o Recurso resolver sua vida. Um exemplo disto o caso do uso de Buffers para leitura e gravao de dados feita pelos processos. Uma possvel falha na memria que impea o acesso aos buffers e todo o sistema est parado...

You might also like