1 of 55

MC504 Sistemas Operacionais

Prof. Dr. Eng. Isaías Bittencourt Felzmann

isaias@ic.unicamp.br

Campinas, 2s/2026

Processos

1/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

2 of 55

Aviso Legal

The following set of slides are copyright Silberschatz, Galvin and Gagne, 2018. Modifications were made for their use in conjunction with MC504. The original material is available at os-book.com .

Os direitos autorais do conjunto de slides a seguir pertencem a Silberschatz, Galvin and Gagne, 2018. Foram feitas modificações para seu uso em MC504. O material original está disponível em os-book.com .

Este material foi elaborado com apoio de ferramentas de IA generativa como recurso auxiliar. O conteúdo foi revisado, validado e é de responsabilidade do docente.

2/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

3 of 55

Resumo

  • Conceito de Processo
  • Escalonamento de Processos
  • Operações sobre Processos
  • Comunicação entre processos
  • IPC em sistemas de memória compartilhada
  • IPC em Sistemas de Mensageria

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

3/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

4 of 55

Objetivos

  • Identificar os componentes separados de um processo e ilustrar como eles são representados e agendados em um sistema operacional.
  • Descrever como os processos são criados e terminados em um sistema operacional, incluindo o desenvolvimento de programas usando as chamadas de sistema apropriadas que realizam essas operações.
  • Descrever e contrastar comunicação entre processos usando memória compartilhada e mensageria.
  • Projetar programas que utilizem memória compartilhada POSIX para realizar comunicação entre processos.

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

4/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

5 of 55

Conceito de Processo

  • Um sistema operacional executa uma variedade de programas que rodam como processos.
  • Processo – um programa em execução; a execução do processo deve progredir de forma sequencial. Não há execução paralela de instruções de um único processo
  • Múltiplas partes
    • O código do programa, também chamado de seção de texto
    • Atividade atual incluindo contador de programa, registradores do processador
    • Pilha contendo dados temporários
      • Parâmetros de função, endereços de retorno, variáveis locais
    • Seção de dados contendo variáveis globais
    • Heap contendo memória alocada dinamicamente durante a execução

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

5/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

6 of 55

Conceito de Processo (cont.)

  • O programa é uma entidade passiva armazenada no disco (arquivo executável); o processo está ativo
    • O programa se torna um processo quando um arquivo executável é carregado na memória
  • A execução do programa iniciada por cliques do mouse na interface gráfica, entrada de linha de comando com seu nome, etc.
  • Um programa pode ser composto por vários processos
    • Considere múltiplos usuários executando o mesmo programa

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

6/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

7 of 55

Processo na Memória

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

7/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

8 of 55

Layout de Memória de um Programa C

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

8/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

9 of 55

Estado do Processo

  • À medida que um processo é executado, ele muda de estado
    • Novo: O processo está sendo criado
    • Em Execução: Instruções estão sendo executadas
    • Em Espera: O processo é esperar que algum evento ocorra
    • Pronto: O processo está aguardando para ser atribuído a um processador
    • Finalizado: O processo foi concluído

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

9/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

10 of 55

Diagrama do Estado do Processo

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

10/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

11 of 55

Bloco de Controle de Processo (PCB)

  • Estado do processo – em execução, espera, etc.
  • Contador de programa – localização da instrução a ser executada em seguida
  • Registradores de CPU – conteúdo de todos os registradores centrados no processo
  • Informações de agendamento da CPU - prioridades, ponteiros de fila de agendamento
  • Informação de gerenciamento de memória – memória alocada ao processo
  • Informações contábeis – CPU utilizada, tempo de relógio decorrido desde o início, limites de tempo
  • Informações de status de E/S – Dispositivos de E/S alocados para processamento, lista de arquivos abertos

Informações associadas a cada processo (também chamado de bloco de controle de tarefas)

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

11/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

12 of 55

Threads

  • Até agora, o processo tem um único fluxo (thread) de execução
  • Considere ter múltiplos contadores de programa por processo
    • Múltiplos trechos podem ser executados ao mesmo tempo
      • Múltiplos fluxos de controle -> threads
  • Deve então haver armazenamento para detalhes das threads, múltiplos contadores de programa na PCB
  • Mais detalhes no Capítulo 4

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

12/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

13 of 55

Representação de Processos no Linux

Representado pela estrutura C task_struct

pid_t pid; /* identificador de processo */ �long state; /* estado do processo */ �unsigned int time_slice /* informações de escalonamento */ �struct task_struct *parent;/* pai deste processo */ �struct list_head children; /* filhos deste processo */ �struct files_struct *files;/* lista de arquivos abertos */ �struct mm_struct *mm; /* espaço de endereçamento deste processo */

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

13/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

14 of 55

Escalonamento de Processos

  • O escalonador de processos seleciona entre os processos disponíveis para a próxima execução no núcleo da CPU
  • Objetivo -- Maximizar o uso da CPU, trocar rapidamente os processos para o núcleo da CPU
  • Mantém filas de escalonamento dos processos
    • Fila de prontos – conjunto de todos os processos que residem na memória principal, prontos e aguardando para serem executados
    • Filas de espera – conjunto de processos aguardando por um evento (ou seja, E/S)
    • Os processos migram entre as várias filas

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

14/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

15 of 55

Filas de Prontos e Espera

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

15/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

16 of 55

Representação do Escalonamento

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

16/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

17 of 55

Troca de CPU entre Processos

Uma troca de contexto ocorre quando a CPU alterna de um processo para outro.

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

17/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

18 of 55

Troca de Contexto

  • Quando a CPU muda para outro processo, o sistema deve salvar o estado do processo antigo e carregar o estado salvo do novo processo por meio de uma troca de contexto
  • Contexto de um processo representado na PCB
  • O tempo de troca de contexto é puro overhead; o sistema não realiza trabalho útil durante a troca
    • Quanto mais complexos o sistema operacional e a PCB, mais longa será a troca de contexto
  • Tempo dependente do suporte do hardware
    • Alguns hardwares fornecem múltiplos conjuntos de registradores por CPU – múltiplos contextos carregados ao mesmo tempo

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

18/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

19 of 55

Operações sobre Processos

  • O sistema deve fornecer mecanismos para:
    • Criação de processos
    • Finalização de processos

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

19/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

20 of 55

Criação de Processos

  • Processos pais criam processos filhos, que, por sua vez, criam outros processos, formando uma árvore de processos
  • Geralmente, o processo é identificado e gerenciado por meio de um identificador de processo (PID)
  • Opções de compartilhamento de recursos
    • Pai e filho compartilham todos os recursos
    • O filho compartilha um subconjunto dos recursos do pai
    • Pai e filho não compartilham recursos
  • Opções de execução
    • Pai e filho executam concorrentemente
    • O pai espera até que o filho termine

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

20/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

21 of 55

Criação de Processos (Continuação)

  • Espaço de endereçamento
    • Filho duplicado do pai
    • O filho tem um programa carregado nele
  • Exemplos UNIX
    • A chamada de sistema fork() cria um novo processo
    • exec() usada após um fork() para substituir o espaço de memória do processo por um novo programa
    • O processo pai chama wait() para aguardar o término do filho

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

21/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

22 of 55

Uma Árvore de Processos no Linux

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

22/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

23 of 55

Criação de Processo em C com fork()

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

23/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

24 of 55

Criando um Processo com a API do Windows

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

24/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

25 of 55

Término de Processo

  • O processo executa a última instrução e então pede ao sistema operacional que o elimine usando a chamada de sistema exit().
    • Retorna dados de status do filho para o pai (via wait())
    • Os recursos do processo são desalocados pelo sistema operacional
  • O pai pode encerrar a execução dos processos filhos usando a chamada de sistema abort(). Alguns motivos para isso:
    • O filho excedeu os recursos alocados
    • A tarefa atribuída ao filho não é mais necessária
    • O pai está terminando, e o sistema operacional não permite que um filho continue se seu pai terminar

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

25/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

26 of 55

Término de Processo

  • Alguns sistemas operacionais não permitem a existência de um filho se seu pai tiver sido terminado. Se um processo terminar, então todos os seus filhos também devem ser encerrados.
    • Terminação em cascata. Todos os filhos, netos, etc., são encerrados.
    • A terminação é iniciada pelo sistema operacional.
  • O processo pai pode aguardar o término de um processo filho usando a chamada de sistema wait(). A chamada retorna informações de status e o PID do processo encerrado

pid = wait(&status);

  • Se nenhum pai estiver esperando (não invocou wait()), o processo é um zumbi
  • Se o pai terminar sem invocar wait(), o processo é órfão

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

26/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

27 of 55

Comunicação entre processos

  • Processos dentro de um sistema podem ser independentes ou cooperativos
  • O processo de cooperação pode afetar ou ser afetado por outros processos, incluindo o compartilhamento de dados
  • Razões para os processos cooperativos:
    • Compartilhamento de informações
    • Aceleração de computação
    • Modularidade
    • Conveniência
  • Processos cooperativos precisam de comunicação entre processos (IPC)
  • Dois modelos de IPC
    • Memória compartilhada
    • Mensageria

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

27/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

28 of 55

Modelos de Comunicação

(a) Memória compartilhada. (b) Mensageria

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

28/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

29 of 55

Problema Produtor-Consumidor

  • Paradigma para processos cooperativos:
    • O processo produtor produz informações que são consumidas pelo processo consumidor
  • Duas variações:
    • unbounded-buffer: buffer não limitado, não impõe limite prático ao tamanho do buffer:
      • Produtor nunca espera
      • O consumidor espera se não houver margem para consumir
    • bounded-buffer: buffer limitado, assume que existe um tamanho fixo do buffer
      • O produtor deve esperar se todos os buffers estiverem cheios
      • O consumidor espera se não houver nada para consumir

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

29/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

30 of 55

IPC – Memória Compartilhada

  • Uma área de memória compartilhada entre os processos que desejam se comunicar
  • A comunicação está sob controle dos processos do usuário, não do sistema operacional.
  • O principal problema é fornecer mecanismos que permitam aos processos do usuário sincronizar suas ações ao acessarem a memória compartilhada.
  • A sincronização será discutida nos Capítulos 6 e 7.

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

30/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

31 of 55

Bounded-Buffer – Memória Compartilhada

  • Dados compartilhados

#define BUFFER_SIZE 10

typedef struct {

. . .

} item;

item buffer[BUFFER_SIZE];

int in = 0;

int out = 0;

  • A solução está correta, mas só pode usar BUFFER_SIZE-1 elementos

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

31/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

32 of 55

Produtor – Memória Compartilhada

item next_produced; �

while (true) {

/* produz um item em next_produced */

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

; /* não faz nada */

buffer[in] = next_produced;

in = (in + 1) % BUFFER_SIZE;

}

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

32/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

33 of 55

Processo Consumidor

item next_consumed; �

while (true) {� while (in == out)

; /* não faz nada */� next_consumed = buffer[out];

out = (out + 1) % BUFFER_SIZE;�

/* consome o item em next_consumed */

}

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

33/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

34 of 55

Como preencher todos os buffers?

  • Suponha que quiséssemos fornecer uma solução para o problema consumidor-produtor que preencha todos os buffers.
  • Podemos fazer isso tendo um contador inteiro que acompanhe o número de buffers completos.
  • Inicialmente, counter é definido para 0.
    • counter é incrementado pelo produtor após produzir um novo buffer.
    • contador é decrementado pelo consumidor após consumir um buffer.

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

34/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

35 of 55

Produtor

while (true) {� /* produz um item em next_produced */

while (counter == BUFFER_SIZE)

; /* não faz nada */

buffer[in] = next_produced;

in = (in + 1) % BUFFER_SIZE;

counter++;

}

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

35/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

36 of 55

Consumidor

while (true) {

while (counter == 0)

; /* não faz nada */

next_consumed = buffer[out];

out = (out + 1) % BUFFER_SIZE;

counter--;

/* consome o item em next_consumed */

}

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

36/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

37 of 55

Condições da Corrida

  • counter++ poderia ser implementado como�� register1 = counter� register1 = register1 + 1� counter = register1
  • counter-- poderia ser implementado como�� register2 = counter� register2 = register2 - 1� counter = register2

  • Considere esta execução intercalada com "counter = 5" inicialmente:

S0: produtor executa register1 = counter {register1 = 5}�S1: produtor executa register1 = register1 + 1 {register1 = 6} �S2: consumidor executa register2 = counter {register2 = 5} �S3: consumidor executa register2 = register2 – 1 {register2 = 4} �S4: produtor executa counter = register1 {counter = 6} �S5: consumidor executa counter = register2 {counter = 4}

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

37/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

38 of 55

Condição da Corrida (Continuação)

  • Pergunta – por que não havia condição de corrida na primeira solução (onde no máximo N – 1) buffers podem ser preenchidos?
  • Mais informações no Capítulo 6.

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

38/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

39 of 55

IPC – Mensageria

  • Processos se comunicam entre si sem recorrer a variáveis compartilhadas

  • O mecanismo de IPC oferece duas operações:
    • send(msg): enviar mensagem
    • receive(msg): receber mensagem
  • O tamanho da mensagem é fixo ou variável

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

39/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

40 of 55

Mensageria (continuação)

  • Se os processos P e Q desejam se comunicar, eles precisam:
    • Estabeleça um enlace de comunicação entre eles
    • Troque mensagens via envio/recepção
  • Questões de implementação:
    • Como os enlaces são estabelecidos?
    • Um enlace pode estar associado a mais de dois processos?
    • Quantos enlaces podem existir entre cada par de processos que se comunicam?
    • Qual é a capacidade de um enlace?
    • O tamanho da mensagem que o enlace pode acomodar é fixo ou variável?
    • Um enlace é unidirecional ou bidirecional?

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

40/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

41 of 55

Implementação do Enlace de Comunicação

  • Físico:
    • Memória compartilhada
    • Barramento de hardware
    • Rede
  • Lógico:
    • Direto ou indireto
    • Síncrono ou assíncrono
    • Buffering automático ou explícito

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

41/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

42 of 55

Comunicação Direta

  • Os processos devem nomear uns aos outros explicitamente:
    • enviar (P, mensagem) – enviar uma mensagem para o processo P
    • receber(Q, mensagem) – receber uma mensagem do processo Q
  • Propriedades do enlace de comunicação
    • Os enlaces são estabelecidos automaticamente
    • Um enlace está associado a exatamente um par de processos comunicativos
    • Entre cada par existe exatamente um enlace
    • O enlace pode ser unidirecional, mas geralmente é bidirecional

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

42/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

43 of 55

Comunicação Indireta

  • As mensagens são direcionadas e recebidas de caixas postais (também chamadas de portas)
    • Cada caixa postal tem um ID único
    • Processos só podem se comunicar se compartilharem uma caixa postal
  • Propriedades do enlace de comunicação
    • Enlace estabelecido somente se os processos compartilharem uma caixa postal em comum
    • Um enlace pode estar associado a muitos processos
    • Cada par de processos pode compartilhar vários enlaces de comunicação
    • O enlace pode ser unidirecional ou bidirecional

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

43/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

44 of 55

Comunicação indireta (continuação)

  • Operações
    • Criar uma nova caixa postal (porta)
    • Enviar e receber mensagens pela caixa postal
    • Excluir uma caixa postal
  • Primitivas são definidas como:
    • enviar(A, mensagem) – enviar uma mensagem para a caixa postal A
    • receber(A, mensagem) – receber uma mensagem da caixa postal A

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

44/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

45 of 55

Comunicação indireta (continuação)

  • Compartilhamento de caixa postal
    • P1, P2 e P3 compartilham a caixa de correio A
    • P1, envia; P2 e P3 recebem
    • Quem recebe a mensagem?
  • Soluções
    • Permitir que um enlace seja associado a no máximo dois processos
    • Permitir que apenas um processo por vez execute uma operação de recepção
    • Permitir que o sistema selecione arbitrariamente o receptor. O remetente é notificado quem foi o destinatário.

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

45/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

46 of 55

Sincronização

  • Bloqueante é considerado síncrono
    • Envio bloqueante -- o remetente é bloqueado até que a mensagem seja recebida
    • Recebimento bloqueante o receptor é bloqueado até que uma mensagem esteja disponível
  • Não bloqueante é considerado assíncrono
    • Envio não bloqueante — o remetente envia a mensagem e continua
    • Recebimento não bloqueante — o receptor recebe:
      • Uma mensagem válida, ou
      • Mensagem nula
  • Combinações diferentes possíveis
    • Se tanto o envio quanto o recebimento forem bloqueantes, temos um ponto de encontro

A mensageria pode ser bloqueante ou não bloqueante

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

46/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

47 of 55

Produtor-Consumidor: Mensageria

  • Produtor

message next_produced;� while (true) {� /* produz um item em next_produced */�

send(next_produced);

}

  • Consumidor

message next_consumed;� while (true) {� receive(next_consumed)�� /* consome o item em next_consumed */� }

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

47/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

48 of 55

Buffering

  • Fila de mensagens anexadas ao enlace.
  • Implementado de três maneiras

1. Capacidade zero – nenhuma mensagem é enfileirada em um enlace.�O remetente deve esperar pelo receptor (ponto de encontro)

2. Capacidade limitada – comprimento finito de n mensagens�O remetente deve esperar se o link estiver cheio

3. Capacidade ilimitada – comprimento infinito �O remetente nunca espera

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

48/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

49 of 55

Exemplos de Sistemas IPC - POSIX

  • Memória Compartilhada POSIX
    • O processo primeiro cria o segmento de memória compartilhada�shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);
    • Também usado para abrir um segmento existente
    • Define o tamanho do objeto

ftruncate(shm_fd, 4096);

    • Use mmap() para mapear um ponteiro de arquivo para o objeto de memória compartilhada
    • A leitura e a escrita na memória compartilhada são feitas usando o ponteiro retornado por mmap().��

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

49/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

50 of 55

Produtor IPC POSIX

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

50/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

51 of 55

IPC POSIX Consumidor

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

51/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

52 of 55

Pipes

  • Atua como um conduto permitindo que dois processos se comuniquem
  • Questões:
    • A comunicação é unidirecional ou bidirecional?
    • No caso da comunicação bidirecional, é half ou full-duplex?
    • É necessário existir uma relação (ou seja, pai e filho) entre os processos comunicantes?
    • Os pipes podem ser usados em uma rede?
  • Pipes comuns – não podem ser acessados de fora do processo que os criou. Normalmente, um processo pai cria um pipe e o usa para se comunicar com um processo filho que ele criou.
  • Pipes nomeados – podem ser acessados sem uma relação entre pai e filho.

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

52/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

53 of 55

Pipes Comuns

  • Pipes Comuns permitem comunicação no estilo padrão produtor-consumidor
  • O produtor escreve para uma das extremidades (write-end ou ponta de escrita do pipe)
  • O consumidor lê do outro lado (read-end ou ponta de leitura do pipe)
  • Portanto, pipes comuns são unidirecionais
  • Exigem relação de pais e filho entre os processos

  • O Windows chama esses pipes anônimos

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

53/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

54 of 55

Pipes Nomeados

  • Os pipes nomeados são mais poderosos que os pipes comuns
  • A comunicação é bidirecional
  • Não é necessária uma relação entre pai e filho entre os processos comunicantes
  • Vários processos podem usar o pipe nomeado para comunicação
  • Fornecido tanto em sistemas UNIX quanto Windows

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts– 10th Edition

54/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

55 of 55

Bibliografia

Capítulo 2.

Capítulo 3.

55/55

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais