Processos e threads em windows e linux

Categories: Trabalhos

0

ENGENHARIA DA COMPUTAÇÃO PROF. GERALDO VALERIANO RIBEIRO 8 p PROCESSOS E THREADS EM WINDOWS E UNIX Eduardo Machado da silva processo, porém é fundamental termos a noção da diferenciação entre processo e programa. O próprio conceito de processo é abstrato e causa divergências, pois não existe uma definição precisa aceita por todos. Sendo assim, definiremos aqui processo como uma instância de um programa em execução e programa como conjunto de instruções necessárias à execução das operações desejadas.

Desse modo, o programa é passivo dentro do sistema, ou seja, ele nao muda seu estado, diferentemente o processo que é um elemento ativo e altera seus estados ? medida que executa um programa. Um processo reúne uma série de atributos (espaço de endereçamento, permissões de acesso, quotas e etc. ) e áreas (de código, dados e pilha de execução). Para cada processo temos também ao menos um fluxo de execução, também chamado de thread.

Nos sistemas operacionais modernos existe a idéia de multithreading, ou seja, vários fluxos de execução associados internamente a um único processo, compartilhando entre elas os recursos do processo. Devido a essa característica a gerência das hreads é muito mais simples tornando o próprio processamento mais leve, pois o chaveamento entre as threads de um mesmo processo é muito mais rápido do que o chaveamento entre processos diferentes. 3. Estados de Processos Cada processo passa por diferentes momentos.

A partir destes momentos podemos estabelecer diferentes possíveis estados para um processo, que mudam de acordo com as chamadas do sistema. Os estados em que um processo pode se encontrar variam de ac a sistema, mas de forma 2 8 Quando um processo é criado ele está pronto para ser executado pelo processador, no entanto, existe uma fila de processos, hamada “fila de aptos” (ready queue), esperando para serem executados, pois o processador executa apenas um processo por vez. Como cada processo utiliza o processador por apenas alguns milisegundos, têm-se a impressão de que o processador executa vários processos ao mesmo tempo.

A mudança de qualquer estado de qualquer processo é iniciada por um evento. Esse evento aciona o sistema operacional que então altera os estados de um ou mais processos. Quando um processo que está no estado executando sofre uma mudança de estado o processador fica livre e o sistema operacional seleciona um processo da lista de aptos para assumir o rocessador. O processo selecionado passa do estado apto para o estado executando. A parte do sistema operacional que faz essa seleção é chamada de escalonador. Durante o estado executando, um processo pode fazer chamadas de sistema.

Até a chamada de sistema ser atendida, o processo não pode continuar sua execução. A chamada de sistema é um evento disparado pelo próprio processo. Neste momento o processo sofre outra mudança de estado, passando do estado executando para o estado bloqueado. Ele só volta ao estado pronto após a conclusão da chamada. Alguns processos que estão no estado bloqueado podem estar esperando or interrupções de hardware. Geralmente elas informam o término de uma operação de EIS, isso significa que um processo bloqueado será liberado. 4. Gerenciamento de Processos 30F processos disputam o processador.

A cada momento em que o processador for desocupado, um dos processos que estão na lista de prontos irá utilizar o processador. A atividade de tomar a decisão de qual será o próximo processo que utilizará o processador é chamada escalonamento. É necessário dividir o tempo do processador entre os processos do sistema. Isso é feito de duas maneiras diferentes: escalonamento a curto prazo e scalonamento a longo prazo. No escalonamento a curto prazo é decidido qual o processo que deverá ser executado a seguir, assim que o processador ficar livre.

Este escalonador é executado com muita freqüência, portanto, deve ser rápido. Em alguns sistemas, os processos nem sempre são criados no momento da solicitação. Em ambientes tipo batch, a criação de um processo pode ser adiada caso a máquina esteja sobrecarregada. Cabe ao escalonador a longo prazo decidir quando um processo solicitado deve ser criado. É possível acontecer um esgotamento dos recursos de memória disponíveis, ou seja, a memoria necessária para os rocessos em execução torna-se maior do que a memória disponwel.

Para solucionar este problema, criou-se uma técnica chamada swapping. São duas as operações de swap: swap-in e swap-out. Na operação de swap-out, a execução de um processo é suspensa, e o seu código é copiado para o disco r[gido. A operação swap-in faz o contrário, ou seja, copia o processo de volta do disco para a memória e sua execução é retornada do ponto em que havia sido suspensa. O escalonador que faz as decisões de swap é chamado de escalonador de médio prazo. Uma complicação enfrentada pelos escalonadores é a de que ada processo tem um comportamento único e imprevisível.

Quando o escalonador AGE 4 OF escalonadores é a de que cada processo tem um comportamento unico e imprevislVel. Quando o escalonador coloca um processo para rodar, ele nunca sabe ao certo quanto tempo o processo vai levar até ser bloqueado. Para assegurar que nenhum processo rode por um tempo muito grande, os sistemas operacionais modernos se utilizam de um relógio interno, que periodicamente gera um sinal de interrupção (interrupção de tempo). A cada interrupção destas o escalonador decide se o processo corrente deve continuar executando ou ceder o lugar um outro processo.

A esta estratégia de permitir a suspensão temporária de processos que poderiam continuar executando é dado o nome de escalonamento preemptivo, que contrasta com a antiga estratégia de rodar até o fim do processo, presentes nos primeiros sistemas operacionais, conhecida como escalonamento não-preemptivo. Para a tomada de decisão, todos os escalonadores possuem um determinado algoritmo que devem seguir. Aqui apresentaremos alguns destes algoritmos: • Ordem de Chegada (First-in first-out): É o a goritmo mais simples. A fila do processador é uma fila simples e os processos ão executados na mesma ordem em que chegaram na fila. ?? Processo mais curto primeiro (Shortest Job First): Este algoritmo de escalonamento selecionará para a execução o processo que, entre os elementos da fila, venha a ocupar o processador pelo menor periodo de tempo antes de ser novamente bloqueado ou terminado. • Prioridade: No tipo de escalonamento baseado em prioridade, para cada processo é associado um número inteiro que representa seu nível de prioridade. Quando for necessária a seleção de um processo, será selecionado o processo que tiver o maior nível de prioridade. erá selecionado o processo que tiver o maior nivel de prioridade. ?? Algoritmo Circular (Round Robin): Neste algoritmo, os processos prontos para rodar tem seus blocos de controle armazenados em uma lista circular, sendo selecionado para execução o primeiro processo da lista. A partir daí o processo é executado até que seja bloqueado ou termine o seu tempo de execução, e a partir daí o ciclo continua no próximo processo. • Múltiplas Listas: Em um mesmo sistema existem vários tipos de processo. Neste tipo de algoritmo, existe uma lista para cada tipo de processo. Cada lista segue seu próprio algoritmo, de acordo com característica dos processos.

Estes são apenas alguns dos tipos de escalonamento existentes. Cada escalonador possui suas próprias características definidas. 5. Windows O Windows possui duas classes de sistemas operacionais distintas: aquelas versões destinadas a servidores e as versões dedicadas aos usuários finais. As versões dedicadas aos usuários finais não são exatamente multiprogramadas como o UNIX, ou seja, não podem suportar diversos processos independentes ao mesmo tempo, embora não sejam monoprogramadas na acepção da palavra. Portanto, iremos nos focar na versão

Windows NT, pois esta é dedicada a servidores, facilitando a comparação com o UNIX. 6 OF Multithreads são utilizados para a implementação de servidores, onde os threads ocupam o mesmo espaço de endereçamento virtual e todos os recursos do processo, processando concorrentemente as solicitações de múltiplos clientes. O escalonador deste sistema escalona apenas threads para execução, logo cada processo deve ter pelo menos uma thread antes de ser executado. Assim como os processos, no Windows NT as threads são implementadas como objetos, criadas e destruídas pelo gerenciador de objetos. 5. 1 . Estados de processos No Windows, durante a existência de um processo, ele passa por uma série de mudanças, caracterizando vários estados específicos do sistema: • Estado de Pronto: Um processo está neste estado quando está aguardando uma vaga no processador para ser executado. Quando os processos são criados eles estão neste estado, e passam novamente a este estado quando perdem o processador por time-out ou quando precisam ser bloqueados para esperar uma operação de EIS, por exemplo. ?? Estado de Standby: Quando um processo se encontra neste estado ele já foi selecionado para a execução, mas ainda recisa esperar uma troca de contexto para ganhar o espaço do processador. • Estado de Execução: É quando o processo já está em fase de execução no processador. • Estado de Espera: Neste estado o processo depende de algum evento para continuar a ser executado e voltar para o estado de pronto, como por exemplo, EIS. • Estado de Transição: É necessário algum recurso do sistema em um estado para que este processo, q 8 • Estado de Terminado: Éo estado final de um processo ou thread.

Quando terminada sua execução, o objeto pode ser excluído ou não. 2 5. 2. Gerenciamento de processos Como sabemos, a unidade de execução do Windows é a thread. Cada processo do Windows pode ser formado por um conjunto de threads, mas ele sempre tem pelo menos uma thread, chamada de thread primária, que é criada quando o processo é carregado para a execução. No Windows, assim como no UNIX, o escalonador utiliza-se de múltiplas filas, os processos interativos (1/0 bound) possuem prioridades sobre os CPU bound e o escalonamento é baseado no sistema de prioridades. Até então os dois sistemas se equivalem.

No entanto, seus sistemas de prioridades são completamente diferentes. No Windows, cada thread possui uma prioridade que aria de O a 31, sendo a prioridade 31 como a mais alta. A prioridade O é atribuída a uma thread especial, chamada zero thread, que é responsável por zerar as páginas livres no sistema. Esta é a única thread capaz de receber tal prioridade. As outras prioridades definem duas classes de threads: as threads em tempo real (de forma semelhante aos processos de tempo real discutidos em breve no UNIX), que recebem as prioridades de 16 a 31, e as threads normais, que recebem as prioridades de 1 a 15.

Existe uma outra classe de threads chamada idle, que possui a mais baixa prioridade, e só são executadas quando não xistem outras threads aptas. O escalonador por sua vez sem re escolhe a thread com a maior prioridade. As th o real sempre são 8 8 bloqueadas. As outras threads, normais, recebem fatias de tempo, que não passam de algumas dezenas de milisegundos. Cada thread recebe uma prioridade base ao ser criada, e para as threads em tempo real a prioridade jamais se altera. Processos com prioridade entre O e 15 têm sua prioridade ajustada dinamicamente em tempo de execução.

Processos que retornam de operações de EIS recebem um aumento na prioridade que varia de acordo com o periférico utilizado. Após operações de incronização as threads também podem receber aumento de 6. UNIx O UNIX utiliza processos como abstrações de programas em execução. Éo objeto pelo qual a utilização de memória, recursos de EIS e tempo de processador podem ser monitorados. No UNIX os processos são criados através da chamada de sistema conhecida como Fork, cuja execução cria um processo idêntico àquele que o chamou.

Após o Fork, o processo pai continua rodando em paralelo com o filho. Tanto os processos pais quanto filhos podem executar outras chamadas Fork formando uma árvore de processos. Embora exista um relacionamento ntre os processos, cada sub-processo (processos filhos) possui seu próprio espaço de endereçamento, ou seja, as variáveis do processo pai não são visíveis por seus filhos. Cada processo do sistema possui uma série de identificações. São elas: • PID (Process Identification): número único que identifica um processo. ?? PPID (Parent Process Identification): número de identificação do processo pai. do grupo do dono do processo. O processo O (zero) é o único processo que nao possui pai, sendo criado pelo próprio sistema na sua inicialização. O processo 1 é criado pelo processo O e é chamado init. Este último é o ancestral de todos os outros processos do sistema. Cada processo recebe uma prioridade ajustada dinamicamente pelo kernel escalonados de acordo com a sua prioridade. 1 6. 1 .

Estados de processos • Estado Executável: É quando o processo está pronto para ser executado pelo processador. Neste estado ele já tem todos os recursos de que necessita e aguarda para processar seus dados. • Estado Dormente: Quando neste estado, os processos ficam essencialmente bloqueados, pois estão esperando que ocorra um evento específico, como uma solicitação para ler parte de um arquivo. A menos que recebam um sinal, não obterão qualquer tempo do processador. ?? Estado Zumbi: Se um programa cria um processo e demora para consultar seu resultado após seu término, o processo permanece como “zumbi”. Geralmente, é um bug do programa pai do processo. Se existirem muitos processos, pode ser necessário terminar o programa pai para desocupar a tabela de processos do kernel [VILELA/TOMAZ]. • Estado Parado: Processos parados recebem uma ordem administrativa proibindo sua execução. Este estado ocorre quando um processo recebe um sinal STOP ou STPT e são reiniciados com um sinal hante ao Estado

Redes sem fios (wireless)

0

Redes sem Fios (Wireless) Uma rede sem fio (Wireless) é um sistema que interliga vários equipamentos fixos ou moveis utilizando

Read More

Vazamento de petroleo

0

O petróleo O petróleo é um importante recurso natural. Em suas formas refinadas é usado para produção de energia e

Read More