11.04.2013 Views

Disciplina: Sistemas Operacionais - CAFW-UFSM Professor ...

Disciplina: Sistemas Operacionais - CAFW-UFSM Professor ...

Disciplina: Sistemas Operacionais - CAFW-UFSM Professor ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Disciplina</strong>: <strong>Sistemas</strong> <strong>Operacionais</strong> - <strong>CAFW</strong>-<strong>UFSM</strong><br />

<strong>Professor</strong>: Roberto Franciscatto


Introdução<br />

• Os primeiros sistemas operacionais<br />

permitiam a execução de apenas um<br />

programa de cada vez<br />

• Os sistemas de computação atuais<br />

permitem que múltiplos programas<br />

sejam carregados na memoria<br />

• Executados de modo<br />

concorrente<br />

Processo = programa em<br />

execução<br />

Um sistema é constituido<br />

portanto de uma coleção de<br />

processos<br />

Processos do sistema<br />

operacional<br />

Processos de usuário


Conceito de Processo<br />

• Mesmo em um sistema<br />

monotarefa (Windows) o usuário<br />

pode executar diversos programas<br />

ao mesmo tempo:<br />

• Um processador de texto<br />

• Um navegador de WEB<br />

• Um pacote de e-mail<br />

Ainda que usuário só possa<br />

executar um programa a cada<br />

momento<br />

O SO tem que suportar suas<br />

próprias atividades<br />

programadas, como o<br />

gerenciamento de memória


O Processo<br />

• Informalmente um processo é um<br />

programa em execução<br />

• Um programa por si só não é um<br />

processo<br />

• Um programa é uma<br />

entidade passiva como o<br />

conteudo armazenado no<br />

disco<br />

• Enquanto um processo é uma<br />

entidade ativa<br />

Exemplo de entidade ativa:<br />

Contador de programa<br />

especificando a próxima<br />

instrução a ser executada e,<br />

com um conjunto de recursos<br />

associados


Estado do Processo<br />

• Um processo muda de estado<br />

durante sua execução<br />

• O estado de um processo é<br />

definido em parte pela sua<br />

atividade em curso<br />

Cada processo pode estar em<br />

cada um dos seguintes estados:<br />

Novo: o processo está sendo<br />

criado<br />

Em execução: as instruções<br />

estão sendo executadas<br />

Em espera: o processo está<br />

esperando pela ocorrência de<br />

algum evento (como um<br />

termino de I/O)<br />

Pronto: o processo está<br />

esperando para ser designado<br />

a um processador<br />

Terminado: o processo<br />

terminou sua execução


Diagrama de estado de Processo<br />

novo admitido<br />

terminado<br />

pronto<br />

Término de I/O ou evento<br />

interrupção<br />

Despacho pelo scheduler<br />

Em<br />

espera<br />

saída<br />

Em<br />

execução<br />

Espera por I/O ou evento


Bloco de Controle de Processo<br />

• Cada processo é representado<br />

no sistema operacional por um<br />

bloco de controle de processo<br />

• Ele contém muitas<br />

informações associadas ao<br />

processo específico, incluindo<br />

as seguintes:<br />

• Estado do processo<br />

• Contador de programa<br />

• Registradores da CPU<br />

• Informação de<br />

gerenciamento da memória<br />

Informação de contabilização<br />

Informação de estado de I/O<br />

O PCB serve simplesmente<br />

como um repositório para<br />

qualquer informação que possa<br />

variar de um processo para<br />

outro.


Threads<br />

• Muitos SO modernos ampliaram o<br />

conceito de processo para permitir<br />

que um processo possa conter<br />

multiplas linhas de execução.<br />

• Assim estes sistemas<br />

permitem ao processo<br />

desenvolver mais de<br />

uma tarefa em um<br />

período de tempo<br />

Ex.: receber as palavras<br />

digitadas e verificar sua grafia<br />

Quando o programa estiver em<br />

execução, cada uma de suas<br />

linhas de ação corresponderá a<br />

um processo<br />

Assim, vários processos podem<br />

estar associados a um programa<br />

em execução


Filas de Scheduling<br />

• A medida que os processos entram<br />

no sistema, são incluidos numa fila de<br />

jobs<br />

• Esta fila consiste em todos<br />

os processos que estao no<br />

sistema<br />

• Os processos residentes na<br />

memória principal que<br />

estão prontos e em espera<br />

para entrar em execução<br />

são levados para uma lista<br />

chamada fila pronta<br />

O sistema operacional ainda tem<br />

outras filas<br />

Fila de dispositivos<br />

Lista de processos em<br />

espera por um<br />

determinado dispositivo<br />

de I/O<br />

Cada dispositivo tem sua<br />

própria fila


Diagrama de Enfileiramento<br />

I/O<br />

Fila pronta<br />

Fila de I/O<br />

Filho<br />

executa<br />

ocorre<br />

interrupção<br />

CPU<br />

Solicitação de<br />

I/O<br />

Fatia de tempo<br />

expirada<br />

Bifurca em um<br />

filho<br />

Espera por uma<br />

interrupção


Funcionamento do Enfileiramento<br />

• Um novo processo é inicialmente<br />

incluído na fila pronta<br />

• Ele aguarda nesta fila até que seja<br />

selecionado para execução (ou<br />

despachado)<br />

• Uma vez que o processo tenha sido<br />

designado para ocupar a CPU e<br />

esteja em execução, poderia ocorrer<br />

um entre diversos eventos:<br />

O processo poderia emitir uma<br />

solicitação de I/O e ser então<br />

colocado em uma fila de I/O<br />

O processo poderia criar um<br />

novo subprocesso e esperar pelo<br />

seu término<br />

O processo poderia ser obrigado<br />

a deixar a CPU como resultado<br />

de uma interrupção e ser<br />

colocado de volta na fila pronta


Comutação de Contexto<br />

• A comutação da CPU para um<br />

outro processo exige que o estado<br />

do processo antigo seja salvo<br />

• e que o estado salvo do novo<br />

processo seja carregado<br />

• Esta atividade é conhecida como<br />

comutação de contexto<br />

• O contexto de um processo é<br />

representado no PCB do processo;<br />

Ele inclui os valores dos<br />

registradores da CPU<br />

O estado dos processos<br />

E informação sobre o<br />

gerenciamento da memória


Operações sobre processos<br />

• Os processos no sistema podem<br />

executar concorrentemente e<br />

precisam ser criados e eliminados<br />

dinamicamente<br />

• Assim o SO deve fornecer um<br />

mecanismo para criação e<br />

eliminação de processos<br />

Criação de Processos<br />

Um processo pode dar<br />

origem a diversos novos<br />

processos durante o seu<br />

curso de execução<br />

Tudo isso, por intermédio de<br />

uma chamada de sistema<br />

create-process


Operações sobre processos<br />

• O processo criador é denominado<br />

processo pai<br />

• enquanto no novos processos são<br />

chamados os filhos do processo<br />

criador<br />

• cada um destes novos processos<br />

pode, criar outros processos,<br />

formando uma árvore de processos<br />

Em geral um processo irá<br />

requerer certos recursos<br />

Tempo de CPU<br />

Memória<br />

Arquivos<br />

Dispositivos de I/O<br />

Tudo isso para cumprir suas<br />

tarefas


Operações sobre processos<br />

• Quando um processo cria um novo<br />

subprocesso, existem duas<br />

possibilidades de execução:<br />

• O pai continua a<br />

executar<br />

concorrentemente com<br />

seus filhos<br />

• O pai aguarda até que<br />

alguns dos seus filhos ou<br />

todos eles tenham<br />

terminado<br />

Existem ainda duas<br />

possibilidade em relação ao<br />

espaço de endereçamento<br />

do novo processo:<br />

O processo filho é uma<br />

duplicata do processo pai<br />

o processo filho tem um<br />

programa carregado dentro<br />

dele


Terminação de processos<br />

• Um processo termina quando<br />

conclui a execução do seu último<br />

comando<br />

• e assim, solicita ao SO que o<br />

elimine utilizando a chamada de<br />

sistema exit<br />

• Neste ponto, o processo pode<br />

retornar dados (saída) para o seu<br />

processo pai<br />

Todos os recursos do<br />

processo<br />

Incluindo memória física<br />

e virtual<br />

Arquivos abertos e<br />

buffers de I/O<br />

são desalocados pelo SO


Terminação de processos<br />

• Um pai pode terminar a execução<br />

de um dos seus filhos por vários<br />

motivos, como:<br />

• o filho usou em excesso<br />

algum dos recursos a ele<br />

alocados<br />

• A tarefa atribuída ao<br />

filho não é mais exigida<br />

O pai está de saída e o SO<br />

não permite a um filho<br />

continuar quando o seu pai<br />

terminar.


Exercícios (1)<br />

1. De que forma posso verificar os<br />

processos correntes no<br />

ambiente windows?<br />

2. É possivel elimina-los?<br />

3. Pesquise como funcionam os<br />

processos no ambiente<br />

Windows


Exercícios (2)<br />

1. De que forma posso verificar os<br />

processos correntes no<br />

ambiente Linux?<br />

2. É possivel eliminá-los? Como ?<br />

3. Pesquise como funcionam os<br />

processos no ambiente Linux


Processos cooperativos<br />

• Os processos concorrentes em<br />

execução no sistema operacional<br />

podem ser:<br />

• Processos<br />

independentes<br />

• Processos cooperativos<br />

Um processo é independente<br />

se não puder afetar os outros<br />

processos em execução no<br />

sistema ou ser afetado por eles.<br />

Não compartilhar dado<br />

com outro processo<br />

Um processo é<br />

cooperativo se puder<br />

afetar outros processos em<br />

execução ou ser afetado<br />

por eles.


Processos cooperativos<br />

• Pode ser desejável propiciar um<br />

ambiente que permita a cooperação<br />

entre processos, por várias razões:<br />

• Compartilhamento de<br />

informação<br />

• Diversos usuários podem<br />

estar interessados na<br />

mesma informação<br />

• Processamento mais<br />

rápido<br />

• Subtarefas em exexução<br />

paralela com as outras<br />

• Velocidade aumentada caso<br />

o computador possua<br />

multiplos elementos de<br />

processamento<br />

• (CPU e canais de I/O)


Processos cooperativos<br />

• Modularidade<br />

• Dividir as funções do<br />

sistema em processos<br />

separados ou threads<br />

• Comodidade<br />

• Mesmo um usuário<br />

individual pode<br />

trabalhar com muitas<br />

tarefas em um dado<br />

momento<br />

• Por exemplo:<br />

• Um usuário pode estar<br />

editando, imprimindo e<br />

compilando em paralelo.


Processos cooperativos<br />

• A execução concorrente de<br />

processos cooperativos requer<br />

mecanimos que permitam aos<br />

processos<br />

• comunicarem-se uns<br />

com os outros e<br />

• sincronizarem suas<br />

ações<br />

• Para processos cooperativos<br />

usa-se o problema do<br />

produtor-consumidor<br />

• Um processo produtor gera<br />

informação que é<br />

consumida por um<br />

processo consumidor<br />

• Exemplo: um programa de<br />

impressão produz caracteres<br />

que são consumidos pelo<br />

driver da impressora


Processos cooperativos<br />

• Em síntese os processos<br />

cooperativos podem comunicar-se<br />

em um ambiente de memória<br />

compartilhada<br />

• O esquema exige que<br />

estes processos<br />

compartilhem<br />

• Uma cadeia de buffers<br />

comum<br />

• código para<br />

implementação do buffer<br />

seja escrito pelo<br />

programador da aplicação<br />

• O SO pode fornecer meios para<br />

que os processos cooperativos<br />

se comuniquem uns com os<br />

outros<br />

• por intermédio de uma<br />

facilidade de comunicação<br />

interprocessos IPC


Processos cooperativos<br />

• A IPC oferece um mecanismo que<br />

permite aos processos<br />

• Se comunicarem e<br />

sincronizarem suas<br />

ações sem<br />

compartilharem o<br />

mesmo espaço de<br />

endereçamento<br />

• A IPC é particularmente útil em<br />

um ambiente distribuido<br />

• Onde os processos em<br />

comunicação podem residir<br />

em computadores diferentes<br />

conectados a uma rede


Sistema de Transmissão de Mensagens<br />

• A função de um sistema de<br />

mensagens é<br />

• permitir que os<br />

processos se<br />

comuniquem uns com<br />

os outros sem a<br />

necessidade de recorrer<br />

a dados compartilhados


Nomeação<br />

• Processos que desejem estabelecer<br />

comunicação devem ter uma<br />

maneira de se referenciarem uns aos<br />

outros, podendo utilizar<br />

• Tanto a comunicação<br />

direta ou indireta<br />

• Comunicação Direta<br />

• Com a comunicação direta,<br />

cada processo que deseja se<br />

comunicar de ve nomear<br />

explicitamente<br />

• o receptor e o<br />

remetente da<br />

comunicação


Comunicação Direta<br />

• Neste esquema, os primitivos<br />

send e receive são definidos<br />

como:<br />

• Send (P, message) –<br />

envia uma message para<br />

o processo P<br />

• Receive (Q, message) –<br />

recebe uma message do<br />

processo Q<br />

• Um link de comunicação, nesta<br />

abordagem, tem as seguintes<br />

propriedades:<br />

• Um link é estabelecido<br />

automaticamente entre cada<br />

par de processos que<br />

desejem se comunicar<br />

• Os processos precisam<br />

conhecer apenas a<br />

identidade uns dos outros<br />

para estabelecer<br />

comunicação


Comunicação Direta<br />

• Um link é associado a<br />

exatamente dois processos<br />

• Existe exatamente um link<br />

entre cada par de processos<br />

• Tanto o processo remetente<br />

como o receptor precisam<br />

nomear um ao outro para se<br />

comunicarem


Comunicação Indireta<br />

• Com a comunicação<br />

indireta, as mensagens são<br />

enviadas para caixas postais<br />

ou portas e delas recebidas<br />

• Uma caixa postal pode<br />

ser vista abstratamente<br />

como um objeto no qual<br />

os processos podem<br />

colocar mensagens e do<br />

qual as mensagens<br />

podem ser retiradas<br />

• Cada caixa postal tem uma<br />

identificação única<br />

• Um processo pode se comunicar<br />

com algum outro processo por<br />

intermédio de um número de<br />

diferentes caixas postais<br />

• Dois processos podem<br />

estabelecer comunicação<br />

somente se compartilharem<br />

uma caixa postal


Comunicação Indireta<br />

• Os primitivos send e receive são<br />

definidos da seguinte forma:<br />

• Send (A, message) –<br />

envia uma message para<br />

a caixa postal A.<br />

• Receive (A, message) –<br />

recebe uma message da<br />

caixa postal A.<br />

• Nesta abordagem, um link de<br />

comunicação possui as seguintes<br />

propriedades:<br />

• Um link é estabelecido entre<br />

um par de processos<br />

somente se ambos os<br />

membros do par tem uma<br />

ciaxa postal compartilhada<br />

• Um link pode estar associado<br />

a mais do que dois processos


Comunicação Indireta<br />

• Exemplo: Suponha que os<br />

processos P1, P2 e P3 compartilhem<br />

todos a caixa postal A.<br />

• O processo P1, envia<br />

uma mensagem para A,<br />

enquanto P2 e P3<br />

executam, cada um<br />

deles um receive de A.<br />

• Qual dos processos irá<br />

receber a mensagem<br />

enviada por P1 ?<br />

• A resposta depende da opção<br />

que escolhermos:<br />

• Permitir que um link seja<br />

associado a dois processos no<br />

máximo<br />

• permitir que no máximo um<br />

processo de cada vez possa<br />

executar uma operação de<br />

receive<br />

• Permitir que o sistema<br />

selecione arbitrariamente<br />

qual processo irá receber a<br />

mensagem (ou um ou outro)


Comunicação Indireta<br />

• Uma caixa postal pode pertencer<br />

tanto a um processo quanto ao<br />

sistema operacional<br />

• Se a caixa postal<br />

pertence a um processo<br />

• proprietário e o usuário<br />

• Quando o processo que<br />

possui uma caixa postal<br />

termina, a mesma<br />

desaparece<br />

• Qualquer processo que enviar<br />

uma mensagem para esata caixa<br />

postal deve ser notificado de que<br />

ela não existe mais


Comunicação Indireta<br />

• Por outro lado, uma caixa postal<br />

que pertence ao SO é independente<br />

e não é associada a qualquer<br />

processo em particular<br />

• Neste caso, o SO<br />

oferece um mecanismo<br />

que permite a um<br />

processo fazer o<br />

seguinte:<br />

• Criar uma nova caixa postal<br />

• Enviar e receber mensagens por<br />

intermédio da caixa postal<br />

• Eliminar uma caixa postal


Sincronização<br />

• A sincronização entre processos<br />

realiza-se por chamadas aos<br />

primitivos send e receive<br />

• Existem diferentes decisões de<br />

projeto para implementar cada<br />

primitivo<br />

• a transmissão de<br />

mensagens pode ser<br />

tanto com bloqueio<br />

quanto sem bloqueio<br />

(síncrona e assíncrona)<br />

• Envio com bloqueio – o<br />

processo remetente é<br />

bloqueado até que a mensagem<br />

seja recebida pelo processo<br />

receptor ou pela caixa postal<br />

• Envio sem bloqueio – o<br />

processo remetente envia a<br />

mensagem e retoma a operação


Sincronização<br />

• Recepção com bloqueio – o<br />

receptor fica bloqueado até que a<br />

mensagem esteja disponível<br />

• Recepção sem bloqueio – o<br />

receptor recupera tanto uma<br />

mensagem válida quanto uma<br />

mensagem nula


Armazenamento em buffer<br />

•Tanto na comunicação direta como<br />

indireta, as mensagens trocadas por<br />

processos que se comunicam<br />

residem em uma fila temporária<br />

• Esta fila pode ser<br />

implementada de três<br />

maneiras<br />

Capacidade zero<br />

Um link não pode conter<br />

qualquer mensagem em<br />

espera<br />

Remetente bloqueado até<br />

que o receptor recebe a<br />

mensagem<br />

Capacidade limitada<br />

Tamanho da fila é finito<br />

Se o link estiver cheio, o<br />

remetente deve ser<br />

bloqueado até que haja<br />

espaço disponível na fila


Armazenamento em buffer<br />

• Capacidade ilimitada<br />

• A fila tem<br />

potencialmente um<br />

tamanho infinito<br />

• Assim, pode conter<br />

qualquer número de<br />

mensagens<br />

• O remetente nunca é<br />

bloqueado


Um exemplo: Windows 2000<br />

• Emprega modularidade para<br />

• Aumentar a<br />

fucnionalidade<br />

• Diminuir o tempo<br />

necessário para<br />

implementar novas<br />

características<br />

Fornece suporte para múltiplos<br />

ambientes operacionais ou<br />

subsistemas<br />

Com os quais os programas<br />

aplicativos se comunicam por<br />

intermédio de um<br />

mecanismo de transmissão<br />

de mensagens<br />

Os programas aplicativos<br />

podem ser considerados<br />

clientes do subsistema<br />

servidor do Windows 2000


Exercícios<br />

• Como é a estrutura de um kernel<br />

num sistema Linux ?<br />

• Quais são os benefícios e as<br />

desvantagens de cada uma das<br />

situações seguintes?<br />

• Comunicação direta e<br />

indireta<br />

• Comunicação simétrica e<br />

assimétrica<br />

• Armazenamento em<br />

buffer automático e<br />

explícito

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!