Você está na página 1de 51

Cristiano Pires Martins

Parte 1
Processo
• Uma abstração de um programa em execução;
• Pseudoparalelismo é a ilusão de que é possível
executar dois ou mais programas ao mesmo tempo em
uma máquina monoprocessada;
• Multiprogramação: divisão da memória para que
ocorra uma troca rápida de processos na CPU;
• Multiprocessadores é quando se tem mais de um
processador (núcleo) para realizar um processamento
paralelo verdadeiro;
• Para ambos, a necessidade é de executar mais de um
programa (processo) por vez.
Processos
O Modelo de Processo

• Nesse modelo os softwares, inclusive o SO, são


organizados em processos sequenciais;
• Um processo é um programa em execução
acompanhado dos valores:
• Contador de programa;
• Registradores;
• Variáveis.
• Modelo de processo é baseado em 2 conceitos
independentes: agrupamento de recursos e execução.

3
Processos
O Modelo de Processo

• (a) Multiprogramação de quatro programas


• (b) Modelo conceitual de 4 processos sequenciais,
independentes
• (c) Somente um programa está ativo a cada momento
• A taxa na qual o processo realiza sua computação não será
uniforme e provavelmente nem reproduzível mesmo que seja
4
na mesma ordem outra vez.
Analogia: Programa e Processo
• Exemplo: Cientista da computação com dotes
culinários e o filho picado de abelha;
• Processo: constitui uma atividade;
• Possui programa, entrada, saída e um estado.
• Um único processador pode ser compartilhado
por vários processos;
• O escalonador (algoritmo) determina quando
trocar um processo pelo outro.
Processos Necessários
• Em sistemas simples (apenas uma aplicação -
microondas): todos os processos são necessários
quando o sistema é ligado;
• Em sistemas de propósito geral: é necessário criar e
terminar processos durante a operação.
Criação de Processos
Principais eventos que levam à criação de
processos
1. Início do sistema;
2. Execução de chamada ao sistema de
criação de processos por um processo
em execução;
3. Solicitação do usuário para criar um
novo processo;
4. Início de um job (trabalho/processo)
em lote.
7
Criação de Processos
• Alguns processos criados ficam em primeiro plano
(interagindo com o usuário) e outros em segundo
(apresentam função específica);
• Para ver a lista de processos:
• No UNIX e LINUX digite ps na linha de comando;
• No Windows digite CTRL+ALT+DEL;
• Nos dois sistemas é possível ter várias janelas abertas ao
mesmo tempo e cada uma executando um processo;
• Em um sistema em lote (comp. de grande porte), quando
o SO tiver todos os recursos, ele criará um novo processo e
executará o próximo job da fila.
Criação de Processo
• Todo o processo é criado por um processo
existente executando uma chamada ao
sistema de criação de processo;
• Tanto no Windows como no Unix (linux e
Mac OS), depois de um processo filho
criado, o pai e o filho têm seus próprios e
distintos espaços de endereçamento;
• É possível o compartilhamento de recursos
entre o pai e o filho.
Término de Processos
Condições que levam ao término de processos
1. Saída normal (voluntária)
Ex.: Quando termina o que tinha que fazer
2. Saída por erro (voluntária)
Ex.: Tenta compilar um programa e o arquivo não
existe
3. Erro fatal (involuntário) causado pelo processo,
erro de programa
Ex.: Referência à memória inexistente ou divisão
por zero
4. Cancelamento por um outro processo
(involuntário)

10
Estados de Processos

• Possíveis estados de processos


• em execução
• bloqueado
• pronto
• Mostradas as transições entre os estados

12
Estados de Processos (2)

• Camada mais inferior de um SO estruturado por


processos
• trata interrupções, escalonamento
• Acima daquela camada estão os processos
sequenciais

13
Implementação de Processos
Tabela de Processos ou Blocos de Controle de Processos

Campos da entrada de uma tabela de processos


14
Threads
• Thread é um fluxo de controle;
• São fluxos de controle
independentes que podem ser
executados quase em paralelo;
• Mantém o mesmo espaço de
endereçamento;

16
Threads
O Modelo de Thread (1)

(a) Três processos cada um com um thread


(b) Um processo com três threads

17
O Modelo de Thread

• Items compartilhados por todos os threads em um


processo
• Itens privativos de cada thread

18
Pilha de execução
#include <stdio.h>
int a();
int b();
int c();
int d();

int main(){
a();
b();
c();
d();
}
int a(){
printf("a\n");
return 0;
}
int b(){
printf("b\n");
d();
return 0;
}
int c(){
printf("c\n");
b();
return 0;
}
int d(){
printf("d\n");
a(); https://www.onlinegdb.com/online_c_compiler
return 0;
}
17
O Modelo de Thread (3)

Cada thread tem sua própria pilha

19
Uso de Thread (1)

Um processador de texto com três threads


20
Uso de Thread (2)

Um servidor web com múltiplos threads


21
Comunicação Interprocessos
• Frequentemente processos precisam se comunicar com
outros processos;
• Há 3 tópicos que devem ser abordados:
• Como um processo passa informações para o outro;
• Como garantir que 2 ou mais processos não invadam
uns aos outros quando envolvidos em atividades
críticas;
• Sequência adequada quando existirem dependências.
• Os mesmos problemas e soluções se aplicam aos
threads.
Condição de Disputa
• Situações nas quais 2 ou mais
processos estão lendo ou escrevendo
algum dado compartilhado e cujo
resultado final depende das
informações de quem e quando
executa precisamente.
Comunicação Interprocesso
Condições de Disputa

Dois processos querem ter acesso simultaneamente à memória


compartilhada
24
Exclusão Mútua
• O que fazer para evitar condições de disputa?
• A resposta pra evitar esse problema é impedir que
mais de um processo leia e escreva ao mesmo
tempo na memória compartilhada;
• Precisa-se de exclusão mútua: modo de assegurar
que outros processos sejam impedidos de usar
uma variável ou um arquivo compartilhado que já
estiver em uso por um outro processo.
Região Crítica
•Exemplo: Parte do
programa em que há
acesso à memória
compartilhada;
Regiões Críticas

Quatro condições necessárias para prover exclusão


mútua:
1. Nunca dois processos simultaneamente em
uma região crítica
2. Nenhuma afirmação sobre velocidades ou
números de CPUs
3. Nenhum processo executando fora de sua
região crítica pode bloquear outros processos
4. Nenhum processo deve esperar eternamente
para entrar em sua região crítica

27
Regiões Críticas (2)

Exclusão mútua usando regiões críticas

28
Exclusão Mútua com Espera
Ociosa
• Desabilitando Interrupções;
• Variáveis de Impedimento;
• Alternância Obrigatória;
• Solução de Peterson;
• A instrução TSL;
Desabilitando Interrupções
• É a solução mais simples: cada processo desabilita
todas as interrupções logo depois de entrar na
região crítica e reabilita-se imediatamente antes
de sair dela;
• Não é interessante porque não é prudente dar aos
processos dos usuários o poder de desligar
interrupções;
• É uma técnica bastante útil dentro do próprio SO,
mas inadequada como um mecanismo geral de
exclusão mútua para processos de usuário.
Variáveis de Impedimento
• Solução de Software;
• Há uma única variável compartilhada entre os
dois processos (lock), contendo o valor 0;
• Se lock for 0, o processo altera essa variável para 1
e entra na região;
• Se lock já estiver com o valor 1, o processo
simplesmente aguardará até que ela se torne 0;
• Só que essa técnica apresenta uma falha como
diretório de spool.
Alternância Obrigatória
• Contém uma variável inteira, inicialmente com 0,
serve para controlar a vez de quem entra na região
crítica e verifica ou atualiza a memória
compartilhada;
• Testar continuamente um variável até que um
valor apareça é chamado de espera ociosa. Isso
deveria ser evitado (gasta tempo de CPU);
• A variável de impedimento que usa espera ociosa
é chamada de spin lock.
Alternância Obrigatória

Solução proposta para o problema da região crítica


(a) Processo 0. (b) Processo 1.

33
Alternância Obrigatória
• Alternar a vez não é uma boa idéia quando um dos
processos for muito mais lento que o outro;
• Essa situação viola a condição 3: o processo 0 está
sendo bloqueado por um processo que não está na sua
região crítica.
Solução de Peterson

Solução de Peterson para implementar exclusão mútua


35
Instrução TSL
Requer um pequeno auxílio do hardware;
TSL (Test and Set Lock): teste e atualize variável de
impedimento;
As operações de leitura e armazenamento de uma
palavra são seguramente indivisíveis;
A CPU impede o acesso ao barramento de memória.
Instrução TSL

Entrando e saindo de uma região crítica usando a


instrução TSL
37
Dormir e Acordar

Problema do produtor-consumidor com uma condição de disputa fatal


38
Semáforos

O problema do produtor-consumidor usando semáforos


39
Mutexes

Implementação de mutex_lock e mutex_unlock

Instrução TSL

40
Monitores (1)

Exemplo de um monitor
41
Troca de Mensagens

O problema do produtor-consumidor com N mensagens


42
Barreiras

Uso de uma barreira


a) processos se aproximando de uma barreira
b) todos os processos, exceto um, bloqueados
pela barreira
c) último processo chega, todos passam

43
Escalonamento
Introdução ao Escalonamento (1)

Surtos de uso da CPU alternam-se com


períodos de espera por E/S
a) um processo orientado à CPU
b) um processo orientado à E/S
44
Introdução ao Escalonamento (2)

Objetivos do algoritmo de escalonamento


45
Escalonamento em
Sistemas em Lote (1)

Um exemplo de escalonamento job mais curto primeiro

46
Escalonamento em
Sistemas em Lote (2)

Escalonamento em três níveis


47
Escalonamento em
Sistemas Interativos (1)

Escalonamento por alternância circular (round-


robin)
a) lista de processos executáveis
b) lista de processos executáveis depois que B usou todo
o seu quantum
48
Escalonamento em
Sistemas Interativos (2)

Um algoritmo de escalonamento com quatro classes


de prioridade
49
Próximo Processo Mais Curto

49
Escalonamento Garantido

50
51

Você também pode gostar