Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Conceito de Processos
■ Um Sistema Operacional executa uma variedade de programas: ● Sistemas de Lote (Batch) – jobs ● Sistemas de Tempo Compartilhado – programas do usuário ou tasks (tarefas) ■ Muitos livros usam os temos jobs e processos quase para a mesma coisa. A difereça é muito sutil ■ Processo: um programa em execução; execução de processo deve progredir de forma sequencial ■ Um processo inclui: ● Contador de Programas (PC) ● Pilha ● Seção de dados ● Seção de código1.3 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Estados de um Processo
■Um processo muda de estado a medida que vai progredindo
em sua execução:
●novo: Processo foi criado
●executando: suas instruções estão sendo executadas
●esperando: o processo está esperando algum evento
ocorrer (geralmente de E/S)
●pronto: o processo está esperando por uma chance de
usar de ser executado pelo processador
●terminado: processo finalizou sua execução
1.5 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Process Control Block (PCB)
Informações associadas a cada processo:
■
Estado do processo
■
Contador de Programa (PC)
■
Registradores de CPU
■
Informações de Escalonamento de CPU
■
Informações para Gerência de Memória
■
Informações de conta de usuário
■
Informações do status de E/S
1.7 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Troca de CPU de Processo para
Processo
1.9 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Filas de Escalonamento de Processos
■Fila de Jobs – conjunto de todos os processos no
sistema
■Fila de Prontos – conjunto de todos processos
residindo na memória principal, prontos e esperando
para executar
■Filas de Dispositivos – conjunto de processos
esperando por um dispositivo de Entrada e Saída
■Processos migram constantemente de uma fila para
outra
1.11 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Escalonadores
■Escalonador de longo prazo (ou escalonador de jobs) –
seleciona que processos devem ser levados para a
Fila
de Prontos
■Escalonador de curto prazo (ou escalonador de CPU) –
seleciona que processo deve ser o próximo a ser
executado pela CPU
1.13 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Escalonadores (Cont)
■Escalonador de Curto Prazo é invocado muito
frequentemente (milisegundos)
⇒
deve ser rápido
■Escalonador de Longo Prazo é invocado com pouca
frequência (segundos ou minutos)
⇒
pode ser lento
■O escalonador de Longo Prazo controla o
grau de
multiprogramação
■Processos podem ser descritos tanto como:
●Processo orientado a E/S – gasta mais tempo fazendo
E/S do que computação, com muitos usos curtos de
CPU
●Processo orientado a CPU – gasta mais tempo
fazendo computação; poucos mas longos usos de CPU
1.15 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Troca de Contexto
■Quando uma CPU troca para outro processo. O sistema deve
salvar o estado do processo anterior e carregar o estado salvo do
processo atual => troca de contexto
■O Contexto de um processo é representado no PCB
■Troca de Contexto é puro
overhead; o sistema não faz nada de útil
durante a troca.
■Desempenho vai depender do suporte do hardware a troca de
contexto
Criação de Processos
■Processo
pai cria processos filhos, que por sua vez, cria novos
filhos formando uma
árvore de processos
■Geralmente um processo é identificado e gerenciado via um
identificador de processo (PID)
■Opções para compartilhamento de recursos:
●Pai e filho compartilham todos os recursos
●Filhos compartilham subconjunto de recursos do processo pai
●Pais e filhos não compartilham recursos
■Opções de execução:
●Pai e filhos executam concorrentemente
●Pai espera até filhos terminarem
1.17 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Criação de Processos (Cont)
■Espaço de Endereçamento
●Filho usa espaço de endereçamento do pai, ou
●Filho possui seu próprio espaço
■Exemplos no UNIX:
●fork: system call que cria novo processo
●exec: system call usada depois de um fork para substituir o
espaço de memória do processo por um novo programa.
●wait: system call que faz processo pai esperar a finalização do
processo filho para continuar executando.
1.19 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Separação de Processos no Unix (C)
int main() { pid_t pid;/* fork another process */ pid = fork();
if (pid < 0) { /* error occurred */ fprintf(stderr, "Fork Failed"); exit(-1);
}
else if (pid == 0) { /* child process */ execlp("/bin/ls", "ls", NULL); }
else { /* parent process */
/* parent will wait for the child to complete */
wait (NULL);
printf ("Child Complete"); exit(0);
} }
1.21 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Finalização de Processos
■ Processo executa sua última instrução e pede para SO deletálo (system call exit) ● Dados de saída são enviados do filho para o pai (através de wait) ● Recursos do processo são desalocados pelo SO ■ Pai pode terminar a execução dos processos filho (system call abort) ● Filho excedeu o uso de recursos alocados ● Tarefa assimilada ao filho não é mais necessária ● Pai terminou sua execução Alguns SOs não permitem que filhos continuem executando se seu pai terminar – Nesse caso, deve haver uma finalização em cascataComunicação Interprocessos
■ Processos num sistema podem ser independentes ou cooperativos ■ Processos cooperativos podem afetar ou ser afetado por outros processos, incluindo o compartilhamento de dados ■ Razões para a existência de processos cooperativos: ● Compartilhamento de dados ● Aceleração na execução ● Modularidade ● Conveniência ■ Cooperação entre processo necessita de Comunicação Interprocessos (IPC) ■ Dois modelos de IPC:1.23 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Modelos de Comunicação
a) Por troca de mensagens b) Por memória compartilhada
Problema do ProdutorConsumidor
■ Paradigma para cooperação entre processos: ● Produtor produz informação ● Consumidor consome (usa e apaga) a informação produzida ■ Implementação: ● Dados produzidos pelo consumidor são armazenados em memória (buffer) ● Consumidor lê o dado do buffer e o remove (consumo) ■ Dois modelos de implementação de buffer: ● Buffer ilimitado: não impõe limite no tamanho do buffer ● Buffer limitado: assume que há um tamanho máximo fixo para o buffer1.25 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Buffer Limitado – Memória Compartilhada
■ Memória compartilhada#define BUFFER_SIZE 10
typedef struct {
. . .
} item;
item buffer[BUFFER_SIZE];
int in = 0;
int out = 0;
■ Solução é correta, mas apenas BUFFER_SIZE elementos podem ser usadosBuffer Limitado – Produtor
while (true) {
/* produz um item aqui! */
while (((in = (in + 1) % BUFFER_SIZE count) == out)
; /* não há buffer livre – não faz nada!! */
buffer[in] = item;
in = (in + 1) % BUFFER_SIZE;
}
1.27 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Buffer Limitado – Consumidor
while (true) {
while (in == out)
; // nada para consumir – não faz nada!!
// remove um item do buffer item = buffer[out];
out = (out + 1) % BUFFER SIZE; return item;
Comunicação Interprocesso – Troca de Mensagens
■ Mecanismo para comunicação entre processos e sincronização de ações ■ Sistema de mensagens – processos se comunicam entre si sem compartilhamento de variáveis ■ IPC oferece duas operações (system calls): ● send(message) – message size fixed or variable ● receive(message) ■ If P and Q wish to communicate, they need to: ● establish a communication link between them ● exchange messages via send/receive ■ Implementation of communication link ● physical (e.g., shared memory, hardware bus) ● logical (e.g., logical properties)1.29 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Questões de Implementação
■ Como os enlaces são estabelecidos? ■ Pode um enlace ser associado a mais de dois processos? ■ Quantos enlaces podem ser estabelecidos entre cada par de processos? ■ Qual a capacidade de um enlace? ■ O tamanho da mensagem que um enlace pode acomodar deve ser fixo ou variável? ■ O enlace é uni ou bidirecional?Comunicação Direta
■ Um processo deve nomear o outro explicitamente: ● send (P, message) – envia uma mensagem para o processo P ● receive(Q, message) – recebe uma mensagem do processo Q ■ Propriedades do enlace de comunicaçäo: ● Enlaces são estabelecidos automaticamente ● Um enlace é associado exatamente a um par de processos comunicantes ● Entre cada par há exatamente um enlace ● O enlace pode ser unidirecional, mas é geralmente bidirecional.1.31 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Comunicação Indireta
■ Mensagens são dirigidas e recebidas de caixas de mensagens (mailbox) ● Cada caixa de mensagem possui um ID único ● Processo só podem se comunicar se compartilharem uma caixa de mensagem ■ Propriedades do enlace de comunicaçäo: ● Enlace estabelecido apenas se os processos compartilharem uma caixa de mensagem ● Um enlace pode ser associado a vários processos ● Cada par de processo pode compartilhar vários enlaces ● Enlace pode ser uni ou bidirecionalComunicação Indireta
■ Operações ● Criar uma caixa de mensagem ● Enviar e receber mensagens através de caixa de mensagem ● Destruir uma caixa de mensagem ■ Primitivas são definidas como: ● send(A, message) – envia uma mensagem para a caixa de mensagem A ● receive(A, message) – recebe uma mensagem da caixa de mensagem A1.33 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Comunicação Indireta
■ Compartilhamento de Caixa Postal● P1, P2, e P3 compartilham caixa postal A ● P1, envia; P2 e P3 recebem
● Quem pegará a mensagem? ■ Soluções: ● Permitir um enlace ser associado com no máximo 2 processos ● Permitir apenas um processo por vez para executar a operação de recebimento (receive) ● Permitir que o sistema escolha aleatoriamente o receptor. O emissor é notificado que foi o receptor.
Sincronização
■ Passagem de mensagem pode ser Bloqueante ou NãoBloqueante ■ Bloqueante é considerada síncrona ● A operação send bloqueante bloqueia o emissor até que a mensagem seja recebida ● A operação receive bloqueante bloqueia o receptor até que a mensagem esteja disponível. ■ NãoBloqueante é considerada assíncrona ● A operação send nãobloqueante faz o emissor enviar a mensagem e continuar ● A operação receive nãobloqueante faz o receptor receber a mensagem de qualquer modo, mesmo que ela venha nula (null).1.35 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Buferização
■ Fila de mensagens é atachada ao enlace. ■ Implementada de uma das três formas abaixo: 1. Capacidade Zero – 0 mensagens Emissor deve esperar pelo receptor (rendezvous) 2. Capacidade Limitada – comprimento finito de n mensagens Emissor deve esperar se o enlace estiver cheio 3. Capacidade Ilimitada – comprimento infinito Emissor nunca precisa esperarExamples of IPC Systems POSIX
■ POSIX Shared Memory ● Process first creates shared memory segment segment id = shmget(IPC PRIVATE, size, S IRUSR | S IWUSR); ● Process wanting access to that shared memory must attach to it shared memory = (char *) shmat(id, NULL, 0); ● Now the process could write to the shared memory sprintf(shared memory, "Writing to shared memory"); ● When done a process can detach the shared memory from its address space shmdt(shared memory);1.37 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Exemplos de Comunicação entre Processos no
Windows XP
■ Troca de mensagens centralizada através do recurso de Local Procedure Call (LPC) ● Funciona apenas entre processos no mesmo sistema ● Usa portas (como caixas postais) para estalecer e manter os canais de comunicação ● Comunicação funciona da seguinte forma (semelhante ao TCP/IP): O cliente abre uma porta para conexão O cliente envia uma requisiçäo de conexão O servidor cria duas portas privadas de comunicaçäo e returna o manipulador (objeto) de um deles para o cliente. Cliente e servidor usam o correspondente manipulador para enviar mensagens e ouvir as respostas.1.39 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Comunicação em Sistemas ClienteServidor
■ Sockets ■ Remote Procedure Calls (RPC) ■ Remote Method Invocation (RMI) JavaSockets
■ Um socket é definido como uma ponto de extremidade de comunicaçäo ■ Formado pela conatenaçäo de um endereço IP e uma porta ■ O socket 161.25.19.8:1625 referese a porta 1625 no host 161.25.19.8 ■ Comunicações ocorrem entre um par de sockets1.41 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Remote Procedure Calls (RPC)
■ Remote Procedure Call (RPC): chamada abstrata de procedimentos em sistemas em rede ■ Stubs – proxy no lado do cliente que implementa procedimentos do servidor ■ O Stub do cliente localiza o servidor, empacota os parâmetros necessários e envia a chamada do procedimento para o servidor através de uma mensagem ■ O Stub no lado do servidor recebe essa mensagem, desempacota os parâmetros e executa o procedimento no servidor1.43 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009
Remote Method Invocation (RMI)
■ Remote Method Invocation (RMI) é mecanismo Java semelhante ao RPC ■ RMI permite um programa Java em uma máquina evocar um método de um
objeto remoto (localizado em outra máquina)
1.45 Adaptado do material deSilberschatz, Galvin and Gagne ©2009 Alisson Brito @ UFPB’2009