Você está na página 1de 48

Capítulo 3: Processos

Operating System Concepts – 9th Edition Silberschatz, Galvin and Gagne ©2013
Sobre a apresentação (About the slides)

Os slides e figuras dessa apresentação foram criados por Silberschatz, Galvin


e Gagne em 2009. Esta apresentação foi modificada por Cristiano Costa
(cac@unisinos.br). Basicamente, os slides originais foram traduzidos para o
Português do Brasil. Esta apresentação foi atualizada para a Nona Edição do
livro lançada em 2013 por Ronaldo Ferreira (raf@facom.ufms.br).
É possível acessar os slides originais em http://www.os-book.com
A versão de 2009 pode ser obtida em http://www.inf.unisinos.br/~cac

The slides and figures in this presentation are copyright Silberschatz, Galvin
and Gagne, 2009. This presentation has been modified by Cristiano Costa
(cac@unisinos.br). Basically it was translated to Brazilian Portuguese. This
presentation has been updated to the 9th edition of the book released in 2013.
You can access the original slides at http://www.os-book.com
The 2009 version can be downloaded at http://www.inf.unisinos.br/~cac

Operating System Concepts – 9th Edition 3.2 Silberschatz, Galvin and Gagne ©2013
Capítulo 3: Processes

! Conceito de Processo
! Escalonamento de Processos
! Operações com Processos
! Processos Cooperativos
! Comunicação entre Processos
! Comunicação em sistemas Cliente-Servidor

Operating System Concepts – 9th Edition 3.3 Silberschatz, Galvin and Gagne ©2013
Conceito de Processo

! Um sistema operacional executa uma variedade de


programas:
" Sistema Batch – jobs
" Sistema Tempo Compartilhado (Time-shared) –
programas do usuário ou tarefas
! Livros usam os termos job e processo como sinônimos.
! Processo – um programa em execução; execução do
processo deve progredir de maneira seqüencial.
! Um processo inclui:
" Contador de programa
" Pilha
" Seções de dados

Operating System Concepts – 9th Edition 3.4 Silberschatz, Galvin and Gagne ©2013
Processo na Memória

Operating System Concepts – 9th Edition 3.5 Silberschatz, Galvin and Gagne ©2013
as shown in Figure 3.1, with a few differences:
to the main() function.
• The global data section is divided into different sections for (a) initialized
high
emory
Organização de Memória de um Programa C
argc, agrv
#include <stdio.h>
data and#include
(b) uninitialized
<stdlib.h>data.
• A separate section is provided for the argc and argv parameters passed
stack int x;function.
to the main()
int y = 15;
#include <stdio.h>
high intargc,
main(int argc, char #include
*argv[])<stdlib.h>
agrv
memory {
int *values;
stack int x;
int i; int y = 15;
heap
uninitialized int main(int argc, char *argv[])
values = (int *)malloc(sizeof(int)*5);
data {
initialized for(i = 0; i < 5; i++) int *values;
int i;
data heap values[i] = i;
low return 0;
text uninitialized
emory } values = (int *)malloc(sizeof(int)*5);
data
initialized for(i = 0; i < 5; i++)
data values[i] = i;
he GNU size command can low be used to determine the sizereturn
(in bytes)
0;
of
text
e of these sections. Assuming the name of the executable}file of the above
memory
ogram is memory, the following is the output generated by entering the
mand •O comando
size memorysize
: lista
The GNUosize
tamanho can be used• toO
dessas
command campo
determine the data indica
size (in bytes) of dados
some of these sections. Assuming the name of the executable file of the above
seções
C program is memory , the following
inicializados e bss indica dados
is the output generated by entering the
text data bss dec hex filename
1158 284 8command 1450 5aa :
size memory memory
não inicializados. bss significa
block started by symbol.
text data bss dec hex filename
data• field refers to uninitialized
O comando ulimit 1158 –sdata, and bss8 refers1450
lista284
o tamanho da to initialized
pilha5aa data.
(padrão em Linux = 8MB)
memory
is a historical term referring to block started by symbol.) The dec and
values are the sum ofThe thedata
three
fieldsections
refers to represented in decimal
uninitialized data, and to initialized data.
and bss refers
decimal, respectively. (bss is a historical term referring to block started by symbol.) The dec and
hex values are the sum of the three sections represented in decimal and
hexadecimal,
Operating System Concepts – 9th Edition respectively. 3.6 Silberschatz, Galvin and Gagne ©2013
Estados de Processo

! Durante a execução de um processo, ele altera seu estado


" Novo (new): O processo está sendo criado.
" Executando (running): instruções estão sendo executadas.
" Esperando (waiting): O processo está esperando algum
evento acontecer.
" Pronto (ready): O processo está esperando ser associado a
um procesador.
" Terminado (terminated): O processo terminou sua execução.

Operating System Concepts – 9th Edition 3.7 Silberschatz, Galvin and Gagne ©2013
Diagrama de Estados de Processos

Operating System Concepts – 9th Edition 3.8 Silberschatz, Galvin and Gagne ©2013
Process Control Block (PCB)

! O PCB ou Bloco de Controle de Processos armazena


informações associada com cada processo.
" Identificador do Processo
" Estado do Processo
" Contador de Programas
" Registradores da CPU
" Informações de escalonamento da CPU
" Informação de Gerenciamento de memória
" Informação para Contabilização de recursos
" Informações do status de E/S

Operating System Concepts – 9th Edition 3.9 Silberschatz, Galvin and Gagne ©2013
Process Control Block (PCB)

Operating System Concepts – 9th Edition 3.10 Silberschatz, Galvin and Gagne ©2013
Troca de CPU entre Processos

Operating System Concepts – 9th Edition 3.11 Silberschatz, Galvin and Gagne ©2013
Filas de Escalonamento de Processos

! Fila de Processos prontos (Ready queue) – conjunto de


todos os processos residentes na memória principal, prontos
e esperando para executar.
! Filas de dispositivo – conjunto dos processos esperando
por um dispositivo de E/S.
! Migração de processos entre as várias filas.

Operating System Concepts – 9th Edition 3.12 Silberschatz, Galvin and Gagne ©2013
Fila de Processos Prontos e Várias Filas de E/S

Operating System Concepts – 9th Edition 3.13 Silberschatz, Galvin and Gagne ©2013
Representação de Escalonamento de Processos

Operating System Concepts – 9th Edition 3.14 Silberschatz, Galvin and Gagne ©2013
Escalonador

! Escalonador de Curto Prazo (ou escalonador da CPU) – seleciona


qual processo deve ser executado a seguir e aloca CPU para ele.
! Escalonador de curto prazo é invocado muito freqüentemente
(milisegundos) Þ (deve ser rápido).
! Processos podem ser descritos como:
" Processos com E/S predominante (I/O-bound process) –
gastam mais tempo realizando E/S do que computando, muitos
ciclos curtos de CPU.
" Processos com uso de CPU predominante (CPU-bound
process) – gastam mais tempo realizando computações; poucos
ciclos longos de CPU.

Operating System Concepts – 9th Edition 3.17 Silberschatz, Galvin and Gagne ©2013
Troca de Contexto

! Quando a CPU alterna para outro processo, o sistema deve salvar


o estado do processo deixando o processador e carregar o estado
anteriormente salvo do processo novo via troca de contexto.
! Contexto de um processo é representado no PCB
! Tempo de troca de contexto é sobrecarga no sistema; o sistema
não realiza trabalho útil durante a troca de contexto.
! Tempo de Troca de Contexto é dependente de suporte em
hardware.

Operating System Concepts – 9th Edition 3.18 Silberschatz, Galvin and Gagne ©2013
Criação de Processos
! Processo pai cria processo filho, o qual, por sua vez, pode criar outros
processos, formando uma árvore de processos.
! Geralmente, processos são identificados e gerenciados via um
Identificador de Processos (Process IDentifier - PID)
! Compartilhamento de Recursos
" Pai e filho compartilham todos os recursos.
" Filho compartilha um subconjunto dos recursos do pai.
" Pai e filho não compartilham recursos.
! Execução
" Pai e filho executam concorrentemente.
" Pai espera até filho terminar.

Operating System Concepts – 9th Edition 3.19 Silberschatz, Galvin and Gagne ©2013
Criação de Processos (Cont.)
! Espaço de endereçamento
" Filho duplica espaço do pai.
" Filho tem um programa carregado no seu espaço.
! Exemplos no UNIX
" Chamada de sistemas fork cria um novo processo.
" Chamada de sistemas exec é usada após o fork para sobrescrever o
espaço de memória do processo com um novo programa.

Operating System Concepts – 9th Edition 3.20 Silberschatz, Galvin and Gagne ©2013
Criação de Processos (Cont.)

Operating System Concepts – 9th Edition 3.21 Silberschatz, Galvin and Gagne ©2013
Programa em C Criando Processos Separados
int main()
{
pid_t pid;
/* cria outro processo */
pid = fork();
if (pid < 0) { /* ocorrência de erro*/
fprintf(stderr, “Criação Falhou");
exit(-1);
}
else if (pid == 0) { /* processo filho*/
execlp("/bin/ls", "ls", NULL);
}
else { /* processo pai */
/* pai irá esperar o filho completar execução */
wait (NULL);
printf (“Filho Completou Execução");
exit(0);
}
}

Operating System Concepts – 9th Edition 3.22 Silberschatz, Galvin and Gagne ©2013
Programa Java Criando Processos Separados
import java.io.*;
public class OSProcess {
public static void main(String[] args) throws IOException {
if (args.length != 1) {
System.err.println(“Usage: java OSProcess <command>”);
System.exit(0);
}
// args[0] is the command
ProcessBuilder pb = new ProcessBuilder(args[0]);
Process proc = pb.start();
// obtain the input stream
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
// read what is returned by the command
String line;
while ( (line = br.readLine()) != null)
System.out.println(line);

br.close();
}
}

Operating System Concepts – 9th Edition 3.23 Silberschatz, Galvin and Gagne ©2013
Uma Árvore de Processos em Linux

Operating System Concepts – 9th Edition 3.24 Silberschatz, Galvin and Gagne ©2013
Encerramento de Processos
! Processo executa última declaração e pede ao sistema operacional para
terminar (exit).
" Dados de saída passam do filho para o pai (via wait).
" Recursos do processo são desalocados pelo sistema operacional.
! Pai pode terminar a execução do processo filho (abort).
" Filho se excedeu alocando recursos.
" Tarefa delegada ao filho não é mais necessária.
" Pai está terminando.
4Alguns sistemas operacionais não permitem que um filho continue sua
execução se seu pai terminou.
4Todos os filhos terminam - Terminação em cascata.
! Se o pai não está esperando (não chamou wait()), o processo vira zumbi
(zombie).
! Se o pai terminou sem chamar wait(), o processo vira órfão (orphan).

Operating System Concepts – 9th Edition 3.25 Silberschatz, Galvin and Gagne ©2013
Arquitetura Multiprocessos - Chrome
! Muitos navegadores rodam como um único processo (alguns ainda rodam
assim).
" Se um site causar um problema, o navegador inteiro congela ou morre.
! O navegador Google Chrome é multiprocessado com três tipos diferentes
de processos:
" Browser: gerencia a interface do usuário, acessos a disco e rede.
" Renderer: renderiza páginas web, lida com HTML e Javascript. Um
novo renderer é criado para cada website visitado.
4Roda em sandbox com restrições de acesso ao disco e rede,
minimizando assim os efeitos de ataques de segurança.
" Plugin: um processo para cada tipo de plug-in.

Operating System Concepts – 9th Edition 3.26 Silberschatz, Galvin and Gagne ©2013
Comunicação entre Processos (IPC)
! Processos em um sistema podem ser Independentes ou Cooperantes
! Processos Independentes não podem afetar ou ser afetados pela
execução de outro processo.
! Processos Cooperantes podem afetar ou ser afetados pela execução de
outro processo
! Razões para cooperação entre processos:
" Compartilhamento de Informações
" Aumento na velocidade da computação
" Modularidade
" Conveniência
! Processos cooperantes precisam de Comunicação entre Processos (IPC
– interprocess communication)
! Dois modelos de IPC: memória compartilhada e troca de mensagens

Operating System Concepts – 9th Edition 3.27 Silberschatz, Galvin and Gagne ©2013
Modelos de Comunicação
(a) Troca de mensagens. (b) memória compartilhada

process A process A

process B shared memory

process B

message queue
m0 m1 m2 m3 ... mn
kernel
kernel

(a) (b)

Operating System Concepts – 9th Edition 3.28 Silberschatz, Galvin and Gagne ©2013
Comunicação entre Processos –
Memória Compartilhada
! Uma área de memória compartilhada entre processos que desejam
se comunicar
! A comunicação fica sob o controle dos processos de usuário e não
do sistema operacional.
! O maior problema para o SO é oferecer mecanismos que permitam
que os processos de usuário sincronizem suas ações quando eles
acessam a memória compartilhada.
! Sincronização de processos é um tópico que será discutido em
detalhes no Capítulo 5.

Operating System Concepts – 9th Edition 3.29 Silberschatz, Galvin and Gagne ©2013
Problema do Produtor-Consumidor

! Paradigma para processos cooperantes, processo produtor


produz informação que é consumida por um processo
consumidor.
" Buffer de tamanho ilimitado (unbounded-buffer) não
coloca limite prático no tamanho do buffer.
" Buffer de tamanho fixo (bounded-buffer) assume que
existe um tamanho fixo do buffer.

Operating System Concepts – 9th Edition 3.30 Silberschatz, Galvin and Gagne ©2013
Solução Buffer Tamanho Fixo - Memória Compartilhada

! Dados Compartilhados
#define BUFFER_SIZE 10
typedef struct {
...
} item;

item buffer[BUFFER_SIZE];
int in = 0;
int out = 0;

Operating System Concepts – 9th Edition 3.31 Silberschatz, Galvin and Gagne ©2013
Buffer Tamanho Fixo – Produtor

while (true) {
/* Produz um item */

while (((in + 1) % BUFFER_SIZE) == out)


; /* não faz nada – sem buffers livres*/
/* Insere um item no buffer */
buffer[in] = item;
in = (in + 1) % BUFFER_SIZE;
}

Operating System Concepts – 9th Edition 3.32 Silberschatz, Galvin and Gagne ©2013
Buffer Tamanho Fixo – Consumidor

while (true) {
while (in == out)
; /* não faz nada -- nada para consumir */
/* Remove um item do buffer */
item = buffer[out];
out = (out + 1) % BUFFER_SIZE;
/* Consome um item */
}

Solução está correta, mas somente pode usar BUFFER_SIZE-1 elementos

Operating System Concepts – 9th Edition 3.33 Silberschatz, Galvin and Gagne ©2013
E se quisermos preencher o buffer todo?
! Suponha que queiramos desenvolver uma solução para o problema do
produtor-consumidor que preencha todos os buffers
! Podemos fazer isso usando um contador inteiro que mantém o número
de buffers utilizados
! O contador é inicializado com 0.
! O contador é incrementado pelo produtor depois que ele produz um
novo item.
! O contador é decrementado depois que o consumidor consome um item.

Operating System Concepts – 9th Edition 3.34 Silberschatz, Galvin and Gagne ©2013
Produtor

while (true) {
/* produce an item in next produced */

while (counter == BUFFER_SIZE)


; /* do nothing */
buffer[in] = next_produced;
in = (in + 1) % BUFFER_SIZE;
counter++;
}

Operating System Concepts – 9th Edition 3.35 Silberschatz, Galvin and Gagne ©2013
Consumidor

while (true) {
while (counter == 0)
; /* do nothing */
next_consumed = buffer[out];
out = (out + 1) % BUFFER_SIZE;
counter--;
/* consume the item in next consumed */
}

Operating System Concepts – 9th Edition 3.36 Silberschatz, Galvin and Gagne ©2013
Condição de Corrida
! counter++ pode ser implementado como

register1 = counter
register1 = register1 + 1
counter = register1
! counter-- pode ser implementado como

register2 = counter
register2 = register2 - 1
counter = register2
! Considere a seguinte ordem de execução com “counter = 5” inicialmente:
S0: producer execute register1 = counter {register1 = 5}
S1: producer execute register1 = register1 + 1 {register1 = 6}
S2: consumer execute register2 = counter {register2 = 5}
S3: consumer execute register2 = register2 - 1 {register2 = 4}
S4: producer execute counter = register1 {counter = 6 }
S5: consumer execute counter = register2 {counter = 4}

Operating System Concepts – 9th Edition 3.37 Silberschatz, Galvin and Gagne ©2013
Condição de Corrida (Cont.)
! Pergunta – por que não há condição de corrida na primeira
solução (em que no máximo N – 1) podem ser preenchidos?
! Mais sobre sincronização de processos no Capítulo 5.

Operating System Concepts – 9th Edition 3.38 Silberschatz, Galvin and Gagne ©2013
Comunicação entre Processos –
Troca de mensagens
! Mecanismo para processos se comunicarem e sincronizarem suas ações.
! Sistema de mensagens – processos se comunicam uns com os outros sem
utilização de variáveis compartilhadas.
! Suporte a IPC (InterProcess Communication) provê duas operações uma
para envio outra para recebimento:
" send(mensagem) – tamanho da mensagem fixo ou variável
" receive(mensagem)
! Se P e Q querem se comunicar, eles necessitam:
" Estabelecer um link de comunicação entre eles
" Trocar mensagens via send/receive
! Implementação de links de comunicação
" Físico (ex. Memória compartilhada, barramento de hardware, rede)
" Lógico (ex. Propriedades lógicas: direto ou indireto, síncrono ou
assíncrono, buferização automática ou explícita)

Operating System Concepts – 9th Edition 3.39 Silberschatz, Galvin and Gagne ©2013
Comunicação Direta
! Processos devem nomear o outro explicitamente:
" send (P, mensagem) – envia uma mensagem ao processo P
" receive(Q, mensagem) – recebe uma mensagem do processo Q

! Propriedades dos links de comunicação


" Links são estabelecidos automaticamente.
" Um link é associado com exatamente um par de processos
comunicantes.
" Entre cada par de processos existe exatamente um link.
" O link pode ser unidirecional, mas é usualmente bidirecional.

Operating System Concepts – 9th Edition 3.41 Silberschatz, Galvin and Gagne ©2013
Comunicação Indireta

! Mensagens são dirigidas e recebidas de caixas postais –


mailboxes (também chamadas de portas).
" Cada mailbox possui uma única identificação.
" Processos podem se comunicar somente se eles
compartilham a mailbox.

! Propriedades do link de comunicação:


" O link é estabelecido somente se os processos
compartilham uma mailbox comum
" Um link pode estar associado com muitos processos.
" Cada par de processos pode compartilhar vários links de
comunicação.
" Link pode ser unidirecional ou bidirecional.

Operating System Concepts – 9th Edition 3.42 Silberschatz, Galvin and Gagne ©2013
Comunicação Indireta (Cont.)

! Operações
" Criar uma nova caixa postal
" Enviar e receber mensagens através da caixa postal
" Destruir uma caixa postal

! Primitivas são definidas como:


send(A, mensagem) – envia uma mensagem para a caixa postal A
receive(A, mensagem) – recebe uma mensagem da caixa postal A

Operating System Concepts – 9th Edition 3.43 Silberschatz, Galvin and Gagne ©2013
Comunicação Indireta (Cont.)
! Compartilhamento de Caixa Postal
" P1, P2, e P3 compartilham caixa postal A.
" P1, envia; P2 e P3 recebem.
" Quem recebe a mensagem?

! Soluções:
" Permitir que um link esteja associado com no máximo dois processos.
" Permitir somente a um processo de cada vez executar uma operação
de recebimento.
" Permitir ao sistema selecionar arbitrariamente por um receptor.
Remetente é notificado de quem foi o receptor.

Operating System Concepts – 9th Edition 3.44 Silberschatz, Galvin and Gagne ©2013
Sincronização
! Troca de Mensagens pode ser bloqueante ou não-bloqueante

! Bloqueante é considerado síncrono


" send Bloqueante inibe o remetente até que a mensagem seja
recebida
" receive Bloqueante inibe o receptor até uma mensagem estar
disponível

! Não-Bloqueante é considerado assíncrono


" send Não-bloqueante o remetente envia a mensagem e continua
executando
" receive Não-bloqueante o receptor obtém uma mensagem válida ou
null

Operating System Concepts – 9th Edition 3.45 Silberschatz, Galvin and Gagne ©2013
Sincronização
! O problema do produtor-consumidor se torna trivial

Produtor:
message next_produced;
while (true) {
/* produce an item in next produced */
send(next_produced);
}

Consumidor:
message next_consumed;
while (true) {
receive(next_consumed);
/* consume the item in next consumed */
}

Operating System Concepts – 9th Edition 3.46 Silberschatz, Galvin and Gagne ©2013
Bufferização
! Fila de mensagens associada ao link; implementada em uma dentre três
formas.
1. Capacidade Zero – 0 mensagens
Remetente deve esperar pelo receptor (rendezvous).
2. Capacidade Limitada – tamanho finito de n mensagens
Remetente deve aguardar se link está cheio.
3. Capacidade Ilimitada – tamanho infinito
Remetente nunca espera.

Operating System Concepts – 9th Edition 3.47 Silberschatz, Galvin and Gagne ©2013
Exemplos de Sistemas IPC - POSIX
! Memória Compartilhada no POSIX
" Processo cria primeiro um segmento de memória compartilhado
segment id = shmget(IPC PRIVATE, size, S IRUSR | S
IWUSR);
" Processo que deseja acesso a essa memória compartilhada
deve se anexar a ela
shared memory = (char *) shmat(id, NULL, 0);
" Agora o processo pode escrever na memória compartilhada
sprintf(shared memory, "Writing to shared
memory");
" Quando terminar, um processo pode desanexar a memória
compartilhada do seu espaço de armazenamento
shmdt(shared memory);

Operating System Concepts – 9th Edition 3.48 Silberschatz, Galvin and Gagne ©2013
Produtor – IPC POSIX

Operating System Concepts – 9th Edition 3.49 Silberschatz, Galvin and Gagne ©2013
Consumidor – IPC POSIX

Operating System Concepts – 9th Edition 3.50 Silberschatz, Galvin and Gagne ©2013
Fim do Capítulo 3

Você também pode gostar