Sistemas Operacionais
Operações sobre Processos
Sistemas Operacionais
• Os processos na maioria dos SOs podem ser executados de forma concorrente e ser
criados e removidos dinamicamente.
• Papel do SO é gerar mecanismos para criação e término destes processos.
Sistemas Operacionais
Sistemas Operacionais
• Um processo pode gerar diversos novos processos por meio de uma chamada de sistema (system call ou syscall) ”criar
processo” durante sua execução.
• O processo que criou os novos processos é chamado de processo pai, e os novos
processos são considerados filhos desse processo.
Sistemas Operacionais
• Cada novo processos (filho) pode criar outros processos formando uma árvore de processos. • A maioria dos SOs identifica o processo com
um pid que é o identificador do processo. • Exemplo de uma árvore de processos no
Solaris.
Sistemas Operacionais
Criação de processos
Sistemas Operacionais
• pageout e fsflush gerenciam memória e sistemas de arquivos.
• init raiz dos processos de usuário. – inetd serviços de rede
– dtlogin tela de login do usuário – csh representa o usuário logado
Sistemas Operacionais
• Listando processos no Linux:
– ps –el: mostra todos os processos com detalhes dos mesmos
– pstree: monta uma árvore de processos
Sistemas Operacionais
• Um processo precisa de recursos (Tempo de CPU, memória, arquivos, dispositivos de E/S) para realizar sua tarefa.
• Quando um subprocesso é criado ele pode ser capaz de obter recursos diretamente do SO
ou então pode ficar restrito a um subconjunto dos recursos do processo pai.
Sistemas Operacionais
• O pai por sua vez pode repartir ou compartilhar seus recursos.
• Esse tipo de restrição serve para que um
processo não sobrecarregue o sistema criando processos sem controle.
• Além de recursos físicos o pai pode passar
para o filho dados de inicialização (entrada).
Sistemas Operacionais
• Após a criação de um novo processo (filho) o pai tem duas opções de execução:
– O pai continua a ser executado simultaneamente com seus filhos
– O pai espera até que algum ou todos os seus filhos tenham terminado
Sistemas Operacionais
• Também existem duas possibilidades em termos do espaço de endereços do novo processo:
– O processo filho é uma duplicata do processo pai (mesmo programa e dados)
– O processo filho tem um novo programa carregado nele
Sistemas Operacionais
Sistemas Operacionais
• Um processo termina quando acaba de
executar sua instrução final e pede ao SO para removê-lo usando a chamada de sistema exit() • Ele pode ainda retornar um status ao seu
processo pai (se for o caso).
• O SO se encarrega de desalocar os recursos
como memória, arquivos abertos, dispositivos E/S, etc.
Sistemas Operacionais
• O término de um processo pode acontecer
também em outras circunstâncias, ou seja, um processo pode causar o término de outro.
• Normalmente só o processo pai pode solicitar o termino de um processo filho. Caso
contrário os usuários poderia terminar tarefas uns dos outros de forma arbitrária.
Sistemas Operacionais
• Quando um processo filho é criado o SO informa o pai o pid do filho.
• Isto é feito para que o pai tenha controle
sobre os seus filhos, monitorando-os dentro do sistema.
Sistemas Operacionais
• Um processo pai pode terminar a execução de um processo filho por várias razões:
– O filho ultrapassou o uso de recursos alocados a ele.
– A tarefa atribuída ao filho não é mais necessária – O pai está saindo, e o sistema não permite que um
filho fique sem pai.
Sistemas Operacionais
• Em alguns SOs quando o pai é terminado seus filhos podem ser passados ao processo
superior ao pai (como o init por exemplo), assim eles continuarão sua execução.
• Em outros se o pai terminar todos os filhos precisam terminar, esse fato é conhecido como término em cascata (cascading
termination). Exemplo Explorer.
Sistemas Operacionais
Sistemas Operacionais
• Os processos executando dentro do SO podem ter duas posturas, eles podem ser
independentes ou cooperativos.
• Um processo é independente se não puder afetar ou ser afetado pelos outros processos em execução no sistema.
• Um processo é cooperativo na situação inversa.
Sistemas Operacionais
• Processos que compartilham dados são naturalmente cooperativos.
• Existem vários motivos para que os processos seja cooperativos:
– Compartilhamento de informações – Agilidade na Computação
– Modularidade – Conveniência
Sistemas Operacionais
• Compartilhamento de informações
Como é comum que vários usuários precisar de um mesmo recurso (um arquivo compartilhado por exemplo) há a necessidade de prover um ambiente que permita o acesso concorrente a essa informação.
Sistemas Operacionais
• Agilidade na computação
Se queremos que uma tarefa seja executada mais rapidamente precisamos utilizar a
estratégia “dividir e conquistar”, ou seja, nos computadores modernos com várias CPUs é preciso dividir a tarefa em subtarefas que
podem ser executadas em paralelo.
Sistemas Operacionais
• Modularidade
Para ganhar ainda mais eficiência podemos
construir o sistema de forma modular (threads) sendo que essas threads executem uma tarefa (menor unidade de processamento) mais
rapidamente.
Sistemas Operacionais
• Conveniência
Permitir que o usuário execute várias tarefas relacionadas simultaneamente. Por exemplo digitar um texto, salvá-lo no disco e imprimir.
Sistemas Operacionais
• Os processos cooperativos precisam de
mecanismos de comunicação entre processos
(interprocess communication – IPC) que lhes
permita a troca de dados e informações.
• Existem dois modelos de comunicação entre processos:
– Memória compartilhada – Troca de mensagens
Sistemas Operacionais
Sistemas Operacionais
• Os dois modelos são comuns nos SOs e em alguns casos a implementação dos dois
também é feita.
• A troca de mensagens é útil para quantidades menores de dados, pois nenhum conflito
precisa ser evitado e é mais fácil de implementar.
Sistemas Operacionais
• A memória compartilhada é mais rápida, pois a troca de mensagens usa chamadas de
sistema (intervenção do kernel), já a memória compartilhada o kernel precisa apenas
estabelecer as regiões da mem. compartilhada e após isso os processos controlam o acesso a mem.
Sistemas Operacionais
• Sistemas de memória compartilhada
A comunicação nesse sistema é feita por meio da escrita e leitura de dados de uma área de memória.
Sistemas Operacionais
• Lembrando que o SO é responsável por
garantir que os processos tenham uma área independente de memória, os processo que desejam se comunicar com esse mecanismo precisam “concordar” em remover essa
restrição, sendo que são eles próprios são responsáveis por garantir que não estarão escrevendo simultaneamente num mesmo
Sistemas Operacionais
• Problema do produtor/consumidor, um
processo produtor produz informações que são consumidas pelo consumidor. Exemplo Servidor Web e o navegador.
• Um produtor pode produzir um item
enquanto o consumidor está consumindo
outro ao mesmo tempo, para isso funcionar é necessário sincronismo.
Sistemas Operacionais
• Dois tipos de buffers (área onde ficam os itens produzidos/consumidos) podem ser adotados:
– Buffer ilimitado (unbounded buffer): não há limitem o consumidor pode ter de esperar a
produção de novos itens, mas o produtor sempre pode produzir itens.
– Buffer limitado (bounded buffer): tamanho do buffer fixo, nesse caso o consumidor precisa
esperar o buffer ficar cheio e o produtor precisa
Sistemas Operacionais
• Sistemas de troca de mensagens
A comunicação é feita por meio de troca de
mensagens entre os processos sob controle do SO. Esse mecanismo permite que processos que não compartilham o mesmo espaço de
endereços (aplicação distribuída) se
comuniquem e sincronizem suas ações.
Sistemas Operacionais
• Exemplo: programa de bate-papo.
• Comunicação baseada em duas operações send e receive.
• Mensagens com tamanho fixo (fácil para o SO, complicado para o programador) ou tamanho variável (fácil para o programador, complicado para o SO)
Sistemas Operacionais
• A troca de mensagens tem algumas
problemáticas que precisam ser entendidas: – Comunicação direta ou indireta
– Comunicação síncrona ou assíncrona – Buffer automático ou explícito
Sistemas Operacionais
• Comunicação direta ou indireta
Para a comunicação ser possível os processos precisam de um modo de se referir uns aos outros, eles podem usar nomes (pid).
send(processo, mensagem) receive(processo, mensagem)
Sistemas Operacionais
• Na comunicação direta, cada processo que deseja se comunicar precisa nomear o
destinatário (para enviar) ou o emissor (para receber)
• Exemplo:
– send(P, mensagem) – envia uma mensagem ao processo P
– receive(Q, mensagem) – recebe uma mensagem
Sistemas Operacionais
• Processos precisam saber apenas a identidade uns dos outros para se comunicarem
• Um enlace é estabelecido entre apenas dois processos por vez.
• Ele é feito de forma automática entre processos que desejam se comunicar
Sistemas Operacionais
• Na comunicação indireta, as mensagens são enviadas e recebidas por meio de uma “caixa
de correio”
• Exemplo:
– send(A, mensagem) – envia uma mensagem à caixa de correio A
– receive(A, mensagem) – recebe uma mensagem da caixa de correio A
Sistemas Operacionais
• Um enlace é estabelecido entre um par de processos somente se algum deles tiver um caixa de correio compartilhada.
• Um enlace pode ser associado a mais de dois processos.
Sistemas Operacionais
• Sincronismo
A troca de mensagens (send e receive) pode
acontecer de forma síncrona (com bloqueio) ou
assíncrona (sem bloqueio)
Sistemas Operacionais
• Envio com bloqueio: o processo que envia é bloqueado até que a mensagem seja recebida pelo destinatário ou pela caixa de correio.
• Envio sem bloqueio: o processo envia a mensagem e continua sua operação.
• Recebimento com bloqueio: o receptor é bloqueado até que a última mensagem seja recebida ou esteja disponível.
• Recebimento sem bloqueio: o receptor recebe
Sistemas Operacionais
• Quando o método send e receive forem com bloqueio temos um encontro.
• Dispositivos de E/S frequentemente se utilizam de bloqueio
Sistemas Operacionais
• Buffers
Seja na comunicação direta ou indireta as
mensagens tem de ser armazenadas em algum local temporário, são as filas. Essas filas podem ser implementadas de três maneiras:
– Capacidade zero
– Capacidade limitada
Sistemas Operacionais
• Capacidade zero
A fila tem tamanho máximo de zero, isto é, não pode haver mais que uma mensagem
aguardando nela. Caso isso aconteça o emissor tem de ser bloqueado até o destinatário receber a mensagem.
Sistemas Operacionais
• Capacidade limitada
A fila possui um tamanho finito n. Se ela estiver cheia quando um processo tentar enviar uma mensagem o emissor será bloqueado até que ela tenha espaço para a mensagem, caso
contrário a mensagem é posta na fila e o emissor continua sua operação.
Sistemas Operacionais
• Capacidade ilimitada
A fila possui tamanho infinito, assim qualquer quantidade de mensagens pode residir nela e o emissor nunca é bloqueado.