Buscar

Aula 2 - Sistemas Operacionais - Processos e Threads - Parte I

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Sistemas Operacionais
Processos e Threads
Parte I
 Prof. Esp. Alan Rafael Ferreira dos Santos 
Universidade Federal do Piauí – UFPI
Campus Senador Helvídio Nunes de Barros – Picos –PI 
Bacharelado em Sistemas de Informação
1
1. Processos
Todos os computadores modernos conseguem executar mais de um processo ao mesmo tempo. 
Em qualquer sistema multiprogramado, a CPU chaveia programa para programa. Um programa é executado em cada segundo, dando a ilusão ao usuário de paralelismo (pseudoparalelismo). 
O paralelismo de hardware só é constatado nos sistemas multiprocessadores.
Desenvolvimento de um modelo de projeto conceitual sobre paralelismo (processo sequencial).
1.1 Modelo de Processos 
Um processo é apenas um programa organizado de maneira sequencial em execução, acompanhado dos valores atuais do contador de programa (PC), dos registradores e das variáveis.
A CPU troca a todo momento de um programa para outro, este mecanismo de troca é chamado de multiprogramação. 
É preciso distinguir processo de programa, apesar da sutil diferença. O processo constitui uma atividade, se um programa é executado mais de uma vez ele gera mais de um processo.
1.1 Modelo de Processos 
1.2 Criação de Processos 
O S.O. precisa de um mecanismo para criação de processos.
De maneira geral, existem quatro eventos principais que compõe um processo:
Início do Sistema;
Chamada de sistema de criação por um outro processo em execução;
Requisição de criação de processo pelo usuário;
Início da tarefa (batch job).
Criação de processo de primeiro plano (foreground) e segundo plano (background). 
1.3 Término de Processos 
Um processo não é para sempre, cedo ou tarde ele irá finalizar sua execução, geralmente em razão destas condições:
Saída normal (voluntário)
Saída por erro (voluntário)
Erro fatal (involuntário)
Cancelamento por outro processo (involuntário)
1.4 Hierarquia de Processos 
Um processo poderá fazer uma chamadas de sistema (system calls) para criar novos processos. Neste caso há a hierarquia pai e filho.
Os processo filhos também podem criar novos processo.
No UNIX existe bifurcação de processo para cada terminal, gerando uma árvore ao fim.
O WINDOWS não apresenta conceitos de hierarquia de processos, ou seja, todos são iguais, porém ele pode identificá-los por um identificador especial (handle), que pode ser usado para controlar os filho. 	
1.5 Estados de Processo 
Cada processo é uma entidade independente, porém o mesmo precisa interagir com outros processos. 
A execução de processos concorrentes precisam ser controlados por estados: 
Em execução (usando a CPU)
Pronto (executável, parado para dar lugar a outro processo)
Bloqueado (incapaz de executar, aguardando ocorrer um evento)
1.5 Estados de Processo 
1.5 Estados de Processo 
Na execução concorrente, seguindo os estados vistos anteriormente, a transição 1 de um processo é feitas pela S.O. quando ele descobre que o mesmo não pode prosseguir.
O escalonador (o nível mais baixo do S.O.) causa as transições 2, 3, o mesmo faz decisões de tempo para cada processo (veremos em aulas posteriores ).
A transição 4 ocorre quando acontece um evento externo que o evento está aguardando (como esperar a chegada de uma entrada).
1.6 Implementação de Processos 
O S.O. mantém uma tabela de processo (um arranjo estruturado) ou process control blocks ( bloco de controle de processo), esta estrutura sustenta informações sobre estados de processos.
Todas as informações sobre processos que devem ser salvas ficam armazenadas nesta tabela no ato de transição de estados. 
1.6 Implementação de Processos 
2. Threads
Thread é uma forma do processo dividir a si mesmo em duas ou mais tarefas. 
Thread é um fluxo de controle independente que pode ser executado quase que em paralelo (concorrentemente).
 Mantém o mesmo espaço de endereçamento.
2. Threads
A divisão da complexidade faz com que os threads sejam executados mais rápidos.
Mais fáceis de criar e destruir. Em muitos sistemas criar um thread é cem vezes mais rápido do que criar um processo.
Um processo pode ser composto por várias threads que partilham o mesmo espaço de endereçamento
Processos diferentes possuem recursos diferentes...
... Mas um conjunto de threads dentro do mesmo processo partilha os mesmos recursos
2. Threads
Modelo clássico 
por cada processo existe uma só thread 
neste caso processo e thread correspondem ao mesmo conceito
15
Processo 1
Processo 2
Processo 3
Thread 1
Thread 2
Thread 3
2. Threads
Modelo atual
por cada processo podem existir várias threads
Cada thread tem registos, program counter, stack e estado próprios
16
Processo 1
Processo 2
Processo 3
Threads
2. Threads
Utilização de threads – Exemplos:
Processador de texto – podem existir threads para:
Ler input do teclado
Atualizar uma linha 
Salvar o documento automaticamente
Reformatar o documento, etc.
Web Server – dois tipos de threads
“dispatcher” – sempre que chega um pedido de página, a thread “dispatcher” lança uma thread “worker”
“worker” – procura a página pedida na cache de páginas, caso não a encontre, terá que ir buscá-la ao disco
17
2. Threads
Threads de Usuário e Threads de Núcleo
 - Threads são dividas em Threads de Usuário e de Núcleo;
Thread de Usuário: o núcleo não sabe o que é thread. O Sistema Supervisor é quem escalona as threads, no nível do usuário;
Thread de Núcleo: o núcleo reconhece threads e pode escaloná-las; 
18
18
Um pacote de threads de usuário
19
2.1 Implementação de Threads de Usuário
19
2.1.1 Thread de Usuário
Threads ficam no espaço de usuário;
Núcleo apenas faz gerenciamento comum de processos monothreads;
Vantagem óbvia: threads de usuário podem ser implementadas em um SO que não suporta threads;
As threads executam no topo do Sistema Supervisor;
20
20
2.1.1 Thread de Usuário
Contém uma coleção de procedimentos:
Thread_create;
Thread_exit;
Thread_wait;
Thread_yield;
21
21
2.1.1 Thread de Usuário 
Sistema Supervisor
Há uma tabela de threads por processo;
Quando uma thread executa uma instrução que possa bloqueá-lo (read), ele chama um procedimento do sistema supervisor;
Caso o procedimento perceba que a chamada da thread vai bloqueá-la, o sistema supervisor coloca uma nova thread para executar (se não, bloquearia todo o processo);
22
22
2.1.1 Thread de Usuário
Vantagens de Threads de Usuário
Cada processo pode ter um algoritmo de escalonamento personalizado;
Já que o espaço da tabela de threads não é colocado no núcleo, escala melhor. Seria um problema caso houvesse muitas threads;
23
23
2.1.1 Thread de Usuário
Desvantagens de Threads de Usuário:
Se uma thread bloquear, bloqueia todas as outras;
Possível solução: usar comando Select (verifica se uma chamada read vai bloquear a thread);
A thread inicial precisa ceder a vez de execução para outras threads (thread_yield);
24
24
Um pacote de threads gerenciado pelo núcleo
25
2.2 Implementação de Threads de Núcleo 
25
Não há necessidade de sistema supervisor, já que o escalonador do SO já faz esse papel;
Há uma única tabela de threads;
Criação ou destruição de threads: chama-se o núcleo;
O núcleo toma a decisão de qual thread irá executar após o bloqueio de outra (escalonador);
O núcleo faz reciclagem de threads, visto que é “caro” criar uma thread de núcleo em comparação com threads de usuário;
Não há mais o problema de uma thread bloquear as outras;
26
2.2.1 Threads de Núcleo 
26
	Multiplexação de threads de usuário sobre threads de núcleo
27
2.3 Implementações Híbridas
27
Criação de um novo thread quando chega uma mensagem
(a) antes da mensagem chegar
(b) depois da mensagem chegar
28
2.4 Threads Pop-Up 
28
Unix: 
Thread de Usuário;
Linux: 
Thread de Núcleo. É possível usar apenas Thread de Usuário para manter compatibilidade com Unix;
Uso da chamada ao sistema Clone;
Windows: 
Thread de Núcleo;
29
2.5 Implementação de Threads
29
3. Comunicação entre Processos
Frequentemente processo precisam se comunicar com outros nos estágios do pipelinig, a saída de um processo pode ser a entrada de outro processo.
As comunicações devem ser feitas de maneira estruturada e sem interrupuções (IPC – Interprocess Communication).
O problema de condições de disputas poderão ser geradas. 
 O programa que estiver utilizando o acesso a memória ou arquivo compartilhado é chamado de região crítica.
A região crítica e uma solução para a condição de disputa, porém não é uma solução correta e eficiente usando dados compartilhados.
** veremos mais adiante.
3. Comunicação entre Processos
É necessário implementar uma técnica de bloqueio de variáveis ou arquivos compartilhados chamada de exclusão mútua para que nenhum processo acesse o espaço do outro.
Quatro condições necessárias para prover exclusão mútua:
Nunca dois processos simultaneamente em uma região crítica. 
Nenhuma afirmação sobre velocidades ou números de CPUs.
Nenhum processo executando fora de sua região crítica pode bloquear outros processos.
Nenhum processo deve esperar eternamente para entrar em sua região crítica.
3.1 Problemas e Soluções da Região Crítica 
Variável Trava 
Chaveamento Obrigatório 
Solução de Peterson
Dormir e Acordar 
Semáforos 
Mutexes 
Monitores 
Barreiras
Atividade Prática 
Desenvolva um código onde haja uma condição de disputa de varáveis ou recursos e seja necessário criar uma variável auxiliar de trava (Ex.: se lock = 1 então processo trava, lock = 0 processo executa).

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais