Prof. Adolfo Guimarães
adolfoguimaraes@gmail.com
http://sites.google.com/site/adolfoguimaraes
Universidade Federal de Sergipe
Departamento de Sistema de Informação - Itabaiana 29/10/13
Sistemas Operacionais
Processos (Introdução)
Processos
O que é um processo?
De forma geral a gente viu que um processo é uma programa.
Processos
O que é um processo?
De forma geral a gente viu que um processo é uma programa.
Um processo é mais do que simplesmente um
código de programa (Seção de Texto) Contador do programa
Pilha de processo Seção de Dados
Estado de um processo
Cada processo pode está em um dos seguintes
estados:
Novo: o processo está sendo criado
Em execução: as instruções estão sendo executadas Em espera: o processo está esperando a ocorrência
de algum evento
Pronto: o processo está esperando ser atribuído a
algum processador
Bloco de Controle
Cada processo é representado por:
Bloco de Controle de Processo (PCB – Process Control Block)
Bloco de Controle
O PCB armazena as seguintes informações
relacionadas a um processo: Estado do processo
Contador do programa Registradores de CPU
Informações de escalonamento de CPU Informações de gerência de memória Informações de contabilização
Estado de um processo
Cada processo pode está em um dos seguintes
estados:
Novo: o processo está sendo criado
Em execução: as instruções estão sendo executadas Em espera: o processo está esperando a ocorrência
de algum evento
Pronto: o processo está esperando ser atribuído a
algum processador
Threads
Até então trabalhamos com a ideia de que um
processo só executava uma ação por vez.
Sendo assim, seria impossível digitar e fazer a correção ortográfica ao mesmo tempo em um processado de textos, por exemplo.
Nos sistemas operacionais modernos isso não é
verdade.
Um único processo pode ter vários fluxos de
Escalonamento de processos
A CPU deve escalonar recursos para cada um dos
processo em execução
Em um ambiente de multiprogramação, existem
processos sendo executados a todo momento para maximizar a utilização da CPU.
Escalonamento de processos
A medida que o processo entra no sistema ele é
colocado em uma fila de jobs
A fila de jobs armazena todos os processos do
sistema
O sistema operacional possui outras filas
Fila de processos prontos (ready queue) Fila de dispositivos (device queue)
Cada dispositivo possui sua própria fila
Os processos são alternados entre essas diversas
Operações sobre processos
Os processos normalmente são:
Executados de forma concorrentes
Criados e Removidos Dinamicamente
Os sistemas operacionais precisam fornecer um
Operações sobre processos
Um processo pode criar diversos processos. O processo que criou os novos processos é
chamado de processo pai.
O processo criado é denominado filho.
Cada processo filho pode criar novos processos.
Operações sobre processos
Como os recursos são compartilhados?
Pai e filho podem compartilhar todos os recursos O filho compartilha de parte dos recursos do
processo pai
Operações sobre processo
Como os processos são executados?
Pais e filhos são executados concorrentemente Pais esperam os filhos terminarem de executar
Como dividem o espaço de endereços reservado ao
processo pai?
O processo filho é uma duplicata do processo pai O processo filho tem um novo programa carregado
Operações sobre processo
Término do processo
Quando um processo executa sua última instrução ele solicita ao sistema operacional que o exclua
através de uma chamada de sistema exit();
Um processo pode solicitar a finalização de um determinado processo.
Isso é feito através da syscall abort
Operações sobre processo
Um pai pode terminar a execução de um de seus
filhos por vários motivos:
O filho excedeu os recursos que foram alocados. A tarefa atribuída ao filho não é mais exigida
O pai está saindo, e o sistema operacional não permite que um filho continue se seu pai terminar
Processos cooperativos
Um processo pode ser influenciado por outros
processos ou afetar outros processos.
Esse tipo de processo é denominado de:
Processos cooperativos
O contrário deste tipo de processo é denominado:
Processos cooperativos
Por que é interessante construir um ambiente que
permita que processos sejam cooperativos? Compartilhamento de informações
Velocidade de computação Modularidade
Conveniência
Para que isso seja possível é preciso que os
processos se comuniquem entre si e sincronizem suas ações.
Processos cooperativos
Exemplo:
O problema do PRODUTOR-CONSUMIDOR
Um processo produtor produz informações que são
Comunicação entre processos
No exemplo do produtor-consumidor, os processos
se comunicam em um ambiente de memória compartilhada.
Eles se utilizam de um buffer implementado pelo
programador
Outra forma de se obter o mesmo efeito é fornecer o
meio para os processos cooperativos se
comunicarem entre si através de um recurso de comunicação entre processos (IPC).
Comunicação entre processos
O IPC fornece um meio de comunicação sem
precisar o compartilhamento de endereços de memória.
Útil para processos que residem em diferentes máquinas
Ex: um programa de bate-papo
O IPC é implementado por meio de troca de
Comunicação entre processos
Sistema de troca de mensagens
A função de um sistema de troca de mensagens é permitir que os processos se comuniquem entre si sem recorrer a dados compartilhados
Se dois processos A e B querem se comunicar, eles devem criar um canal de comunicação entre eles.
Comunicação entre processos
Sistema de troca de mensagens
Existem vários métodos para implementar um canal de comunicação logicamente e as
operações send/receive:
Comunicação direta ou indireta
Comunicação simétrica ou assimétrica Buffering automático ou explícito
Enviar por cópia ou referência
Comunicação entre processos
Comunicação Direta
Os processos devem ser identificados explicitamente
send(A, message) receive(B, message)
Outra forma é identificando apenas para quem você manda a mensagem:
send(A, message) receive(id, message)
Comunicação entre processos
Comunicação Indireta
Nesse caso as mensagens são enviadas e
recebidas através de caixas de correios ou portas. Uma caixa de correio pode ser vista de forma
abstrata como um objeto onde as mensagens podem ser colocadas e retiradas.
Cada caixa possui uma identificação
Dois processos só podem se comunicar se tiverem uma caixa de correio em comum.
Comunicação entre processos
Comunicação Indireta
send(C, message) receive(C, message)
Suponha que …
Processos P1 P2 e P3 compartilham a mesma
caixa de correio C. P1 envia uma mensagem para C, enquanto P2 e P3 executam a operação de
Comunicação entre processos
Comunicação indireta
Suponha que os processos P1 P2 e P3
compartilham a mesma caixa de correio C. P1 envia uma mensagem para C, enquanto P2 e P3 executam a operação de receive em C. Quem
recebe a mensagem de P1? Depende :)
Permitir que um canal seja associado com no máximo dois processos
Permitir que um canal execute o receive por vez Permitir que o sistema seleciona arbitrariamente
Comunicação entre processos
Sincronização … A troca de mensagem pode ser de dois tipos
Bloqueante (síncrono) Não-bloqueante (assíncrono) Envio bloqueanteo Envio não-bloqueante Recepção bloqueante Recepção não-bloqueante
Comunicação entre processos
Buffering ... Independente do tipo de comunicação (direta ou indireta), as mensagens ficam retidas em uma fila temporária que podem ser de 3 tipos:
Capacidade zero
Capacidade limitada
35