3/3
Apresentação do Curso
5/3
Processos
- conceito de processo sequencial
- estado: contador de programa, registradores, pilha, etc
- multiprogramação e troca de contexto
- estados e transições
Criação de novos processos
referência: Tanenbaum, 2.1, 2.1.1,
2.1.2
10/3
Processos (cont)
Criação de novos processos (cont.)
- fork (revisão)
- exec
- substituição dos segmentos de dados e de código atuais pelos
correspondentes a um novo programa
- exemplo: esqueleto do shell do Unix
- wait: espera por término de processos filhos
- custo associado a criação e troca de contexto
Threads
- motivação: concorrência dentro de uma aplicação sem o custo
associado a processos
- threads X processos: threads compartilham variáveis globais
e outras informaçãoes de sistema
- threads no sistema operacional X threads em bibliotecas
- problemas associados à existência de threads
- ex: como tratar threads em um fork()?
Inconsistências causadas por memória compartilhada
- entre threads que compartilham um conjunto de globais
- entre processos que fazem chamadas a primitivas do
sistema operacional, que por sua vez fazem acesso a estruturas
do sistema (por ex. tabela de processos)
- para evitar este problema, no UNIX um processo em
modo kernel (executando partes do SO) não pode
sofrer preempção
referência: Tanenbaum, 2.1.3
12/3
Comunicação entre Processos
- troca de mensagens X memória compartilhada
Troca de Mensagens
- modelo mais comum na prática
- compartilhamento de memória em geral só é possível com threads
- modelo pode ser usado entre processos tanto na mesma máquina como
em máquinas diferentes
Primitivas Típicas para Troca de Mensagens
-
send(destino,mensagem)
- envio pode ser síncrono (bloqueante) ou assíncrono (não bloqueante)
- envio assíncrono implica na necessidade de bufferização
- necessidade de identificar o destino!
- uso de pid's
- servidor de nomes
- mailboxes
-
receive(origem,&mensagem)
- recebimento assíncrono em geral não faz sentido
- muitas vezes as mensagens são sequências de bytes - cabe ao programador
controlar fronteiras entre as mensagens e, principalmente,
os tipos dos dados dentro de cada mensagem
Primitivas de comunicação no Unix
Pipes
- canal de comunicação aberto por um processo (com primitiva
pipe
) herado por filhos gerados com fork
- comunicação unidirecional
- dados lidos de um pipe deixam de estar disponíveis!
- SO garante atomicidade de operações sobre pipes
Sinais
- mecanismo de notificação de eventos
- semelhanças com interrupções - tratamento assíncrono
- mecanismo de comunicação limitado e de uso complexo
referência: Tanenbaum, 2.2.7, Stevens, 3.4, 2.4.
17/3
Comunicação entre Processos - Memória Compartilhada
Necessidade de Sincronização
- condições de corrida
- regiões críticas (RC)
- soluções de sincronização devem garantir que
- dois processos não executem sua RC simultaneamente
(propriedade de EXCLUSÃO MÚTUA);
- a correção da solução não dependa da velocidade
relativa dos processos ou do número de CPU's;
- um processo fora da RC não impeça um outro processo
de entrar em sua RC;
- um processo que deseje entrar na RC eventualmente
seja atendido.
Soluções Clássicas de Sincronização - sem bloqueio
- desabilitação de interrupções
- perigo de uso
- útil para partes do SO
- uso de uma variável lock
- acesso a lock é novamente região crítica
- alternância estrita
- não atende a terceira propriedade
- usa espera ocupada - desperdício de CPU
- Peterson
- para evitar a espera ocupada, é necessário que se disponha
de um mecanismo que bloqueie o processo!
Semáforos
- Um semáforo é uma variável s a qual estão associados
um valor inteiro e uma fila de processos.
As seguintes operações são disponíveis sobre um semáforo,
e são garantidamente atômicas (indivisíveis):
-
P(s)
Se s.valor
é maior que zero,
decrementa s.valor
. Caso contrário,
o processo corrente é bloqueado e colocado na
fila s.fila
.
-
V(s)
Se s.fila
não está vazia, um dos
processos na fila é colocado no estado pronto.
Caso contrário, s.valor
é incrementado.
referência: Tanenbaum, 2.2.1,
2.2.2, 2.2.3, 2.2.5.
19/3
Comunicação entre Processos - Memória Compartilhada (cont.)
Semáforos
- uso para exclusão mútua: semáforos binários
- a possibilidade de deadlock!
- os conceitos de deadlock e starvation
- uso de semáforos para cooperação entre processos
- exemplo do buffer limitado: semáforos para espaços livre
e itens a consumir;
- implementação de barreiras de sincronização
referência: Tanenbaum, 2.2.5.
24/3
Comunicação entre Processos - Memória Compartilhada (cont.)
Semáforos (cont) - Solução de Problemas Clássicos
Problema dos Filósofos
Cinco filósofos estão sentados em torno de uma mesa redonda.
Entre cada dois filósofos há um garfo.
Cada filósofo repetidamente passa um período pensando
e depois um período comendo.
Para comer, o filósofo precisa dos dois garfos a seu lado.
Como modelar a solução desse problema com semáforos?
- uso de um semáforo para cada garfo
- possibilidade de deadlock se cada filósofo
pega, por exemplo, primeiro o garfo a esquerda e
depois o da direita
- solução: um deles deve pegar os garfos na
ordem contrária
void filosofo(i) {
while(TRUE) {
pensa();
requisita_garfos(i);
come();
libera_garfos(i);
}
}
void requisita_garfos(int i) { void libera_garfos(int i) {
P(menor_garfo(i); V(maior_garfo(i);
P(maior_garfo(i); V(menor_garfo(i);
} }
Outra forma de entender a solução é ordenar os
recursos utilizados e exigir que cada processo
demande os recursos em ordem crescente!
Problema dos Leitores e Escritores
Suponha que existe uma base de dados à qual são feitos
acessos de leitura, por processos leitores,
e acessos de escrita, por processos escritores.
Para evitar inconsistências, quando um escritor está acessando
a base de dados nenhum outro processo deve acessá-la.
Vários leitores podem fazer acessos simultâneos sem problemas.
Como modelar a solução deste problema com semáforos?
solução no livro!
atenção: Essa solução pode resultar em
starvation de escritores.
Como ela pode ser alterada para refletir uma política
mais justa, que evite este problema?
Fazer os exercícios 35 e 36 do livro texto.
Monitores
Um monitor é uma construção de linguagem de programação
que encapsula dados e rotinas.
Cada uma destas rotinas é garantidamente
executada com exclusão mútua, ou seja,
em um instante qualquer, apenas um processo pode estar em execução
(ou pronto) em um ponto de código interno ao monitor.
Um monitor facilita a implementação de exclusão mútua.
Ainda é necessário algum outro mecanismo para sincronização
de processos, isto é, um mecanismo que permita que um processo
de bloqueie a espera de determinada condição.
Esse mecanismo é provido por variáveis de condição,
sobre as quais podem ser executadas as operações
wait(vc)
e signal(vc)
.
Essas operações são parecidas com P
e V
,
com a diferença de que não existe o conceito de contador, isto é,
caso ocorra um signal(v)
e não haja nenhum processo
na fila da variável de condição,
o signal
se perde.
referência: Tanenbaum, 2.2.6,
2.3.1, 2.3.2.
26/3
Comunicação entre Processos
Equivalência entre comunicação por troca de mensagens e por
memória compartilhada
- construção de troca de mensagens a partir de memória compartilhada
- construção de memória compartilhada a partir de troca de mensagens
Escalonamento de Processos
- objetivos possíveis
- preempção e não preempção
Algoritmos de Escalonamento
- Round-Robin
- atribuição de fatias de tempo aos processos prontos,
de forma circular
- determinação da fatia de tempo:
tempo de resposta X desperdício com troca de contexto
- Prioridades
- round-robin em cada nível de prioridade
- prioridades estáticas e dinâmicas
- prioridades dinâmicas: uso recente de CPU
- prioridades dinâmicas: processos I/O-bound e CPU-bound
referência: Tanenbaum, 2.4, 2.4.1, 2.4.2, 2.4.3
31/3
Escalonamento de Processos (cont.)
Sistemas de Tempo Real
- garantia de recursos
- deadlines de execução
- sistemas com controle de admissão podem
garantir que necessidades de processos serão honradas
- tempo de resposta pequeno: necessidade de mecanismos
de prioridades e de possibilidade de preempção de
processos menos prioritários a qualquer instante.
- limitações do Unix tradicional
Mecanismos incorporados em versões mais recentes do Unix
- pontos de preempção no kernel (SVR4)
- sistema com preempção em qualquer
momento de execução (Solaris)
- herança de prioridades (Solaris)
referência: Tanenbaum, 2.4.7,
UNIX Internals, 5.5, 5.6.
2/04
ATENÇÃO: Modificações na entrega do trabalho!
Escalonamento de Processos (cont.)
Escalonamento em 2 níveis
Muitas vezes, os sistemas operacionais utilizam um mecanismo
de swapping, que move processos entre disco e memória principal,
para criar a ilusão de que um número maior de processos pode
ser carregado na memória principal do que realmente é o caso.
Neste caso, o escalonamento normal ocorre apenas entre os
processos carregados na memória principal.
O processo responsável pelo swapping tipicamente entra em ação de
tempos em tempos, e age como um segundo escalonador, decidindo
que processos serão colocados e retirados na memória principal.
Deadlocks
Condições para ocorrência de deadlock
Grafo de Alocação de Recursos
Formas de Tratamento
Algoritmo da Avestruz
Prevenção Estrutural
A idéia é negar uma das quatro condições necessárias
para ocorrência do deadlock!
- negação da exclusão mútua
- negação do hold and wait
- alocação de recursos em bloco
- negação da espera circular
- ordenação de recursos e alocação em ordem crescente
- negação da não preempção
- apenas em contextos específicos: checkpoints e estados consistentes
Prevenção Dinâmica
- Com uma unidade de cada recurso, o sistema operacional
pode manter o grafo de alocação de recursos e, antes
de cada alocação, verificar se ela causaria um ciclo no grafo.
- Essa técnica não funciona com mais de uma unidade de
cada recurso...
- Regiões de execução inseguras e o algoritmo do banqueiro
referência: Tanenbaum, 3.3.
7/04
Transações Atômicas
propriedades:
- atomicidade
- serialização
- permanência
Atomicidade
- por cópias (de arquivos ou páginas)
- por log
Serialização
Nada se pode afirmar sobre a ordem em que duas transações
concorrentes serão executadas, mas o efeito das transações deve
ser coerente com a término completo de cada transação antes
do início da próxima.
Formas de garantir a serialização
- uso de locks
- garantia de execução eventual
- possibilidade de deadlocks
- controle otimista - uso de timestamps
- maior nível de concorrência
- possibilidade de starvation
referência: Silberschatz, 6.9.
14/04
Gerência de Memória
amarração de endereços
- em tempo de compilação
- em tempo de carga
- em tempo de execução (necessidade de hardware especial)
endereços físicos e endereços lógicos ou virtuais
Swapping
Controle de Espaço Livre
- blocos de tamanho variável: listas encadeadas
- blocos de tamanho fixo: bitmaps
Paginação
- páginas físicas (frames) e páginas lógicas (pages)
- mapeamento de endereços: tabela de páginas
referência: Tanenbaum, 4.1, 4.2, 4.3.1.
16/04
Gerência de Memória (cont.)
Paginação
- tabela de páginas como conjunto de registradores na MMU
- tabela de páginas na MP e registrador com endereço da tabela na MMU
- necessidade de atualizar as informações na MMU na troca de contexto
- cache da tabela de páginas :TLB
- influência de acessos à tabela de páginas no tempo de acesso à memória
- bits de proteção
- páginas compartilhadas
- paginação em vários níveis
- tabelas invertidas
Segmentação
- espaço lógico do programa é dividido em unidades
que têm sentido para o programa: segmentos
- uso em conjunto com paginação
Memória virtual
- permite que o programa de usuário utilize um
espaço de endereçamento virtual maior que a memória
física total.
- parecido com swapping mas...
- muito mais eficiente
- Com swapping, o espaço de endereçamento de cada
processo tem que ser menor que a MP; o que pode ser maior que a
MP é a soma dos espaços de endereçamento de todos os processos.
- Apenas algumas das páginas virtuais têm um correspondente físico
em cada instante; as demais páginas são marcadas
como inválidas na tabela de páginas.
- Quando um programa faz um acesso a uma página que não
está carregada na MP, a MMU gera um trap para
o sistema operacional, que entra em ação para
carregar a página requisitada.
referência: Tanenbaum, 4.3.2, 4.3.3, 4.3.4.
23/04
Gerência de Memória (cont.)
Memória Virtual (cont.)
- revisão do tratamento de um page fault
- necessidade de encontrar uma página física livre
Algoritmos de Substituição de Páginas
- o algoritmo usado deve minimizar a taxa de page faults...
- algoritmo ótimo: escolha da página que levará mais tempo para ser
referenciada
- impossível de implementar mas bom como referência para outros algoritmos
- algoritmo FIFO
- algoritmo LRU
- algoritmo NRU
- diferentes algoritmos exigem diferentes tipos de suporte de hardware
- algumas contabilidades podem ser feitas por software...
Conjunto de Trabalho de um Processo
- conjunto de páginas referenciadas em um período de tempo
- se o conjunto de trabalho de um processo não "cabe" na memória,
pode ocorrer thrashing.
- sistema fica dedicado a transferir páginas entre
disco e memória principal e não faz nada de útil...
referência: Tanenbaum, 4.4, 4.5.1.
28/04
Gerência de Memória (cont.)
Exemplo: memória virtual no Unix System V
30/04
Prova 1
5/05 e 7/05
12/05
Threads
14/05
Criptografia e Proteção
19/05
Sistemas de Arquivos
Introdução
- requisitos
- mapeamento entre serviços do SO e facilidades de LPs
Visão do Usuário (programador)
- arquivos
- estrutura de arquivos
- tipos de arquivos
- formas de acesso
- atributos
- diretórios
- hierarquias
- compartilhamento de arquivos
referência: Tanenbaum, 5.1, 5.2.1,
5.2.3.
21/05
Sistemas de Arquivos (cont.)
Implementação
referência: Tanenbaum, 5.3.1,
5.3.2, 5.3.3, 5.3.4 (só file system consistency).
26/05
Sistemas de Arquivos (cont.)
Desempenho
- lentidão de acesso em discos e necessidade de otimizações
- uso de caches de blocos
- políticas de gerência de cache e de atualização do disco
- blocos ler-somente podem ser substituídos conforme LRU
- blocos modificados: sistema tem que se preocupar com persistência
- prioridade de escrita de blocos com informações estruturais
Segurança
Introdução
- segurança e proteção
- intrusão: diferentes objetivos
- custo de manutenção de segurança
Autenticação de Usuários
- autenticação física
- senhas
- dificuldades de geração de boas senhas
- armazenamento de senhas
Princípios de Segurança
Esquemas de proteção de arquivos
- listas de acesso
- capabilities
referência: Tanenbaum,
5.3.5, 5.4.1, 5.4.4, 5.4.5, 5.5.
28/05
não houve aula
2/06
apresentação de trabalhos
4/06
Sistema de Arquivos do Minix: visão geral da implementação
Organização de um sistema de arquivos minix
- superbloco
- conteúdo no disco e na cópia de memória
- bitmaps
- i-node
- blocos de dados
O cache de blocos
- organização em listas encadeadas
Montagem de diretórios
- efeitos do comando
mount
- percurso de um caminho com pontos de montagem
Descritores de arquivos
- tabela de descritores
- tabela de posições
- compartilhamento de posição corrente
referência: Tanenbaum,
5.6.2, 5.6.3, 5.6.4, 5.6.5, 5.6.6, 5.6.7.
9/06
16/06
18/06
23/06
exercícios sobre deadlock
e segurança
25/06
apresentação de trabalhos
30/06
dúvidas (sala 408)
2/07
prova: capítulos 2 e 5
Last update: Tue Jun 30 10:30:27 EST 1998
by Noemi