Você está na página 1de 22

Captulo 1: Introduo

O que um sistema operacional?


um programa que atua como um intermedirio entre o usurio de um computador
e o hardware do computador.
Quais so os objetivos de um SO?
Executar programas do usurio, facilitar a soluo de problemas do usurio e tornar
conveniente o uso do sistema de computao.
Estrutura do sistema de computao:
- Hardware: oferece recursos de computao bsicos
- Sistema operacional: coordena e controla o uso do hardware entre diversas
aplicaes e usurios
- Programas de aplicao: definem a forma como os recursos do sistema so
usados para solucionar os problemas de computao dos usurios
- Usurios: Pessoas, mquinas, outros computadores, etc.
O SO um alocador de recursos, pois gerencia todos os recursos e decide entre
solicitaes em conflito para uso eficaz e justo do recurso.
O SO tambm um programa de controle, pois controla a execuo dos programas
para impedir o uso indevido do computador.
O kernel o nico programa que roda o tempo todo no computador. Tudo o mais
um programa do sistema ou um programa de aplicao.
Programa de bootstrap:
- Carregado na inicializao
- Normalmente armazenado em ROM ou EPROM (firmware)
- Inicializa todos os aspectos do sistema
- Carrega o kernel do sistema operacional e inicia a execuo
Organizao do sistema de computao: Uma ou mais CPUs e controladores de
dispositivos esto conectados por um barramento comum que oferece acesso a
uma memria compartilhada.
- Os dispositivos de E/S e CPU podem executar simultaneamente
- Cada controlador de dispositivo tem um buffer local
- A CPU move dados entre a memria principal e os buffers locais
- A e/S se d do dispositivo para o buffer local do controlador

O controlador do dispositivo informa CPU que terminou sua operao


causando uma interrupo.

A interrupo transfere o controle para a rotina de atendimento da interrupo,


atravs do vetor de interrupo, que contm os endereos de todas as rotinas de
servio.
A interrupo precisa salvar o endereo da instruo interrompida.
Trap - Interrupo gerada pelo software, causada por um erro ou por uma
solicitao do usurio.
Um SO baseado em interrupo.
O SO preserva o estado da CPU, armazenando os registradores e o PC.
Tipos de interrupo: polling e sistema de interrupo vetorizado.
Estruturas de E/S:
- Aps o incio da E/S, o controle s retorna ao usurio no trmino na E/S
(sncrona)
- Aps o incio da E/S, o controle retorna ao usurio sem esperar pelo trmino
da E/S (assncrona)
Estrutura de acesso direto memria:
Controlador de dispositivo transfere bloco de dados armazenados no buffer
diretamente para a memria principal, sem a interveno da CPU.
A memria principal o nico meio de armazenamento que a CPU pode acessar
diretamente.
Caching: Cpia de informaes para um sistema de armazenamento mais rpido,
temporariamente.
Estrutura do sistema operacional:
- Multiprogramao (necessria para eficincia): Um nico usurio no pode
manter a CPU e os dispositivos de E/S ocupados o tempo inteiro, por isso, a
multiprogramao organiza jobs, de modo que a CPU sempre tem um a
executar.
- Tempo compartilhado (multitarefa): Extenso lgica em que a CPU alterna
os jobs com tanta frequncia que os usurios podem interagir com cada job
enquanto ele est executando.

Operao em modo dual (usurio e kernel) permite que o SO proteja a si mesmo e a


outro componente dos sistema.
Processo: Programa em execuo.
- Unidade de trabalho no sistema
- Programa: entidade passiva
- Processo: entidade ativa
O SO responsvel por:
- Criar e executar processos do usurio e do sistema
- Suspender e retomar processos
- Fornecer mecanismo de sincronismo e comunicao de processos, e
tratamento de impasse
Atividades de gerenciamento de memria:
- Acompanhar quais partes da memria esto sendo usadas e por quem
- Decidir quais processos e dados mover para dentro e fora da memria
- Alocar e desalocar espao de memria conforme a necessidade
Uma finalidade do SO ocultar do usurio as peculiaridades dos dispositivos de
hardware.
Proteo - Qualquer mecanismo para controlar o acesso de processos ou usurios
aos recursos definidos pelo SO.
Segurana - Defesa do sistema contra ataques internos.

Captulo 2: Estruturas do sistema operacional


Um conjunto de servios dos SO oferece vrias funes teis ao usurio:
- Interface com o usurio (UI) - CLI, GUI, batch.
- Execuo do programa - O SO deve ser capaz de carregar um programa na
memria, execut-lo e terminar a execuo normal ou anormalmente.
- Operaes de E/S - Um programa em execuo pode exigir E/S, podendo
envolver tanto um arquivo quanto um dispositivo especfico de E/S.
- Manipulao do sistema de arquivos - Os programas precisam ler e gravar
arquivos e diretrios, cri-los e exclu-los, pesquis-los, etc.
- Comunicaes - Processos podem trocar informaes em um mesmo
computador ou entre os computadores de uma rede, via memria
compartilhada ou passagem de mensagens.
- Deteco de erro - O SO precisa estar continuamente ciente dos erros
possveis e tomar a ao apropriada para cada tipo de erro.
- Alocao de recursos - Quando vrios usurios ou vrias tarefas esto sendo
executados simultaneamente, os recursos devem ser alocados de maneira
eficiente a cada um deles.
- Contabilidade - Registrar quais usurios usam quantos e que tipos de
recursos.
- Proteo e segurana - Controlar o acesso a informaes armazenadas em
um sistema multiusurio ou em rede, e garantir que processos concorrentes
no interfiram uns com os outros.
Interface de comando do sistemas operacional (CLI) - Permite entrada direta de
comando, buscando um comando do usurio e o executando.
Interface com o usurio do sistema operacional (GUI) - Mouse, teclado, monitor,
cones, etc.
Chamadas do sistema - Interface de programao para os servios fornecidos pelo
SO, escritas em uma linguagem de alto nvel, e acessadas pelos programas por
meio de uma Application Program Interface (API) de alto nvel.
Implementao da chamada do sistema
- Normalmente, um nmero associado a cada chamada do sistema.
- A interface de chamada do sistema mantm uma tabela indexada de acordo
com esses nmeros.
- A interface invoca a chamada do sistema no kernel do SO e retorna o status
da chamada dos sistema e quaisquer valores de retorno.

Quem faz a chamada no precisa saber dos detalhes de implementao da


chamada, s precisa obedecer a API e entender o que o SO far com a
chamada.
A maioria dos detalhes da interface do SO, so ocultados do programador
pela API.

Passagem de parmetro na chamada do sistema


Trs mtodos gerais:
- Passar os parmetros nos registradores.
- Os parmetros so armazenados em um bloco na memria e o endereo do
bloco passado como um parmetro em um registrador.
- Os parmetros so colocados na pilha pelo programa e retirados pelo SO.
Tipos de chamadas do sistema:
- Controle de processo
- Gerenciamento de arquivo
- Gerenciamento de dispositivo
- Manuteno de informaes
- Comunicaes
Programas do sistema: Oferecem um ambiente conveniente para desenvolvimento
e execuo do programa, podem ser divididos em:
- Manipulao de arquivo
- Informao de status
- Modificao de arquivo
- Suporte linguagem de programao
- Carga e execuo do programa
- Comunicaes
- Programas de aplicao
Projeto e implementao do SO:
- No solucionvel, mas algumas tcnicas provaram ser bem sucedidas.
- Estrutura interna de diferentes SO pode variar bastante.
- Definio de objetivos e especificaes.
- Afetado pela escolha do hardware e do tipo de sistema.
- Objetivos do usurio: O SO deve ser conveniente de usar, fcil de aprender,
confivel, seguro e rpido.
- Objetivo do sistema: O SO deve ser fcil de projetar, implementar e manter,
alm de ser flexvel, confivel, livre de erro e eficiente.
- Poltica: O que ser feito?
- Mecanismo: Como fazer isso?

Tcnica em camada:
- O SO dividido em uma srie de camadas. A camada mais baixa o
hardware, a mais alta a interface com o usurio.
- Modularidade: as camadas so selecionadas de modo que cada uma use
funes e servios apenas de camadas de nvel inferior.
Microkernel:
- Move o mximo do kernel para o espao do usurio.
- A comunicao ocorre entre os mdulos do usurio usando a passagem de
mensagens.
- Benefcios: mais fcil de estender um microkernel, mais fcil de portar o SO
para novas arquiteturas, mais confivel e mais seguro.
- Prejuzos: Overhead de desempenho da comunicao entre o espao de
usurio e o espao do kernel.
Mdulos:
- A maioria dos SO modernos implementa mdulos do kernel.
- Em geral, so semelhantes ideia de camadas, mas possuem mais
flexibilidade.
Mquinas virtuais:
- Trata o hardware e o kernel do SO como se fossem tudo hardware.
- Oferece uma interface idntica ao hardware bsico.
- O SO cria a iluso de mltiplos processos, cada um executando em seu
prprio processador com sua prpria memria.
- Os recursos do computador fsico so compartilhados para criar as mquinas
virtuais.
Gerao do SO:
- Os sistemas operacionais so projetados para executar em uma determinada
classe de mquinas, mas o SO ainda precisa ser configurado para cada
computador especfico.
- O programa SYSGEN obtm informaes relacionadas ao hardware.
- Botting: inicia um computador carregando o kernel.
- Programa de bootstrap - cdigo armazenado na ROM, capaz de localizar o
kernel, carreg-lo na memria e iniciar sua execuo.

Captulo 3: Processos
Sistemas batch - Executam jobs
Sistemas compartilhados no tempo - Executam programas ou tarefas do usurio
O que um processo?
Processo um programa em execuo. A execuo do processo progride de modo
sequencial. Um processo inclui um contador de programa, uma pilha, e uma seo
de dados.
Quais so os estados de um processo?
Novo: quando o processo est sendo criado.
Executando: quando instrues esto sendo executadas.
Esperando: quando o processo est esperando que ocorra algum evento, como
uma operao de E/S.
Pronto: quando o processo est esperando para ser atribudo a um processador.
Terminado: quando o processo termina sua execuo.
O que o PCB?
O Process Control Block se refere s informaes associadas a cada processo.
Entre elas esto o estado do processo, o PC, os registradores da CPU, e
informaes sobre o escalonamento da CPU, o gerenciamento da memria, a
contabilidade e o status de E/S.
Cite a trs filas de escalonamento de processo e explique cada uma delas.
Fila de job - Conjunto de todos os processos no sistema.
Fila de pronto - Conjunto de todos os processo que esto na memria principal,
pronto e esperando para serem executados.
Filas de dispositivo - Conjunto dos processos que esto esperando por um
dispositivo de E/S.
Os processo podem migrar de uma fila para outra.
Cite e explique os dois tipos de escalonadores de processos.
Escalonador de longo prazo (ou escalonador de job) - Seleciona quais
processos da devem ser trazidos para a fila de pronto. Esse escalonador
executado com pouca frequncia, portanto, pode ser lento. Ele tambm o
responsvel por controlar o grau de multiprogramao.
Escalonador a curto prazo (ou escalonador de CPU) - Seleciona qual processo
da fila de pronto deve ser executado em seguida e aloca a CPU para o processo.
Esse escalonador executado com muita frequncia, portanto, deve ser rpido.

Cite e explique resumidamente os dois tipos de processos existentes.


Processos voltados para E/S - Gasta mais tempo realizando E/S do que clculos e
possui vrios bursts de CPU muito curtos.
Processos voltados para CPU - Gasta mais tempo realizando clculos do que E/S
e possui poucos bursts de CPU muito longos.
Explique como se d uma troca de contexto e explique por que ela
considerada um overhead.
Uma troca de contexto se d da seguinte forma: quando a CPU passa para outro
processo, o sistema salva o estado do processo antigo que estava sendo executado
e carrega o estado salvo do processo novo. Enquanto faz a troca, o sistema no
realiza trabalho til, o que considerado um overhead. O tempo de troca depende
do suporte do hardware.
Cite as trs possibilidades de compartilhamento de recursos, as duas de
execuo entre processos pais e filhos, e as duas em termos do espao de
endereos.
Pai e filhos compartilham todos os recursos, filhos compartilham subconjunto dos
recursos do pai, pai e filho no compartilham recursos.
Pai e filhos executam simultaneamente, pai espera at que filhos terminem.
Filho uma duplicata do pai, filho tem um novo programa carregado nele.
Explique como funcionam as chamadas de sistema fork() e exec().
fork() cria um novo processo idntico ao processo que fez a chamada.
exec() substitui o espao de memria de um processo por um novo programa.
O que acontece quando um processo executa sua ltima instruo e pede ao
SO para remov-lo usando a chamada de sistema exit()?
O processo pode retornar um valor de status ao seu processo pai, atravs da
chamada wait(). Depois, todos os recursos do processo so desalocados pelo SO.
O que faz a chamada de sistema abort()?
Permite que um processo cause o trmino de outro processo, por isso, geralmente
invocada pelo pai do processo a ser terminado. Seja porque o filho excedeu os
recursos alocados, a tarefa atribuda ao filho no mais exigida, ou o pai est
saindo e, portanto, o filho no pode continuar executando.
Cite e explique os dois tipos de comunicao entre processos.
Memria compartilhada - Exige que os processos em comunicao compartilhem
algumas variveis, por meio das quais devero trocar informaes, nesse tipo de
comunicao, a responsabilidade por fornecer a comunicao recai sobre os
programadores da aplicao, o SO s precisa oferecer a memria compartilhada.

Troca de mensagens - Os processos se comunicam entre si, sem utilizar variveis


compartilhadas, utilizando para isso duas operaes: send e receive.
Se dois processo quiserem se comunicar, eles precisam estabelecer um link de
comunicao entre eles, e trocar mensagens por meio de send/receive.
A implementao do link de comunicao pode ser fsica ou lgica. A comunicao
pode ser direta ou indireta.
Na comunicao direta, processos devem nomear um ao outro explicitamente, os
links so estabelecidos automaticamente, um link est associado a exatamente um
par de processos, entre cada par existe exatamente um link e o link normalmente
bidirecional.
J na comunicao indireta, as mensagens so direcionadas e recebidas de caixas
de correio, cada caixa tem um id exclusivo, um link s estabelecido se os
processos compartilharem uma caixa, um link pode estar associado a muitos
processos, cada par de processo pode compartilhar vrios link, e o link pode ser uni
ou bidirecional. Entre as operaes na comunicao indireta, esto a criao e a
destruio de uma caixa de correio, e o envio e recebimento de mensagens por
meio da caixa de correio. Como vrios processos podem compartilhar a mesma
caixa de correio, deve-se haver uma maneira de escolher quem deve receber a
mensagem.
A passagem de mensagens pode ser com bloqueio (sncrono, onde o envio com
bloqueio deixa o emissor bloqueado at que a mensagem seja recebida, e a
recepo com bloqueio deixa o receptor bloqueado at que uma mensagem esteja
disponvel), e sem bloqueio (assncrono, onde o envio sem bloqueio permite que o
emissor envie a mensagem e continue, e a recepo sem bloqueio permite que o
receptor receba uma mensagem vlida ou nula).
A fila de mensagens conectada ao link pode ser implementada de trs maneiras:
capacidade zero, onde o emissor deve esperar pelo receptor; capacidade limitada,
onde o emissor deve esperar se o link estiver cheio; e capacidade ilimitada,o onde o
receptor nunca espera.
Cite e explique os trs tipos de comunicao cliente-servidor.
Soquete - Definido como uma extremidade para comunicao, logo, a comunicao
consiste entre um par de soquetes.
Chamada de procedimento remoto - Passa chamadas de procedimento entre
processos nos sistemas em rede, por meio de stubs no cliente e no servidor.
Invocao de mtodo remoto (Java) - Mecanismo de Java semelhante s RPCs,
que permite que um programa Java em uma mquina chame um mtodo em um
objeto remoto.

Captulo 4: Threads
Thread - Unidade bsica de utilizao de CPU.
Existem processos de uma s thread e processos de vrias threads. Nos processos
multithreaded, cada thread possui uma pilha e um conjunto de registradores, e
compartilham o cdigo, os dados e os arquivos do processo do qual fazem parte.
Os benefcios da programao multithreaded podem ser divididos em 4 categorias:
- Responsividade: Permite que um programa continue funcionando mesmo
que parte dele esteja bloqueada ou realizando uma operao longa.
- Compartilhamento de recursos: Permite que uma aplicao tenha vrias
thread de atividades diferentes dentro do mesmo espao de endereos.
- Economia: mais econmico criar e trocar o contexto de threads do que de
processos.
- Utilizao de arquiteturas multiprocessadas: As threads podem ser
executadas em paralelo nos diferentes processadores, aumentando a
concorrncia.
Existem dois tipos de threads: thread de usurio e threads de kernel.
Existem trs tipos de mapeamento entre thread de usurio e threads de kernel:
- Muitos-para-um: Muitas threads de usurios so mapeadas para uma nica
thread de kernel.
- Um-para-um: Cada thread de usurio mapeada para uma thread de kernel.
- Muitos-para-muitos: Muitas threads de usurios so mapeadas para muitas
threads de kernel.
- Modelo de dois nveis: Semelhante ao modelo muitos-para-muitos, com a
diferena que permite que uma thread de usurio seja mapeada para uma
thread de kernel.
Estados de threads em Java:
- Novo: quando um objeto para a thread criado
- Executvel: quando a chamada do mtodo start() aloca memria para a
nova thread na JVM e chama o mtodo run() para o objeto de thread. O Java
no distingue entre uma thread que est sendo executa e uma thread
elegvel para execuo.
- Bloqueado: quando uma thread realiza uma instruo de bloqueio
- Morto: quando o mtodo run() termina.
Existem duas verses de fork(): uma que duplica todas as threads e outra que
duplica apenas a thread que invocou a chamada de sistema fork().

Se uma thread invocar a chamada de sistema exec(), o programa especificado no


parmetro de exec() substitui o processo inteiro, logo, se exec() for chamada
imediatamente aps a criao, ento a duplicao de todas as threads
desnecessria.
Existem duas tcnicas gerais de cancelamento de threads:
- Cancelamento assncrono: Termina a thread imediatamente
- Cancelamento adiado: Permite que thread verifique periodicamente se ela
deve ser cancelada.
Tratamento de sinal: sinais so usados para notificar um processo de que ocorreu
um evento em particular. Um manipulador de sinal usado para processar sinais.
Todos os sinais seguem um mesmo padro: sinal gerado por evento em particular,
sinal entregue a um processo, sinal tratado. Existem 4 opes para a entrega de
sinais em processos multithreaded:
- Entregar o sinal a thread a qual o sinal se aplica
- Entregar o sinal a cada thread no processo
- Entregar o sinal a certas thread no processo
- Atribuir uma rea especfica para receber todos os sinais para o processo
Os sinais podem ser sncronos (quando so entregues ao mesmo processo que
realizou a operao que gerou o sinal), e assncronos (quando um sinal gerado
por um evento externo a um processo em execuo que recebeu o sinal).
Pool de threads: criao de uma srie de threads em um pool, onde ficam
esperando por trabalho. Entre as vantagens de um pool de thread esto o fato de
que atender uma requisio com uma thread j existente muito mais rpido do que
criar uma nova thread, e a limitao do nmero de threads que podem existir em um
dado momento, o que muito til para sistemas que no podem admitir uma grande
quantidade de threads concorrentemente.
Dados especficos da thread: Como o prprio nome j diz, permite que a thread
tenha sua prpria cpia de certos dados.
Os modelos muitos-para-muitos e de dois nveis exigem que exista algum tipo de
comunicao para manter o nmero apropriado de threads de kernel alocado uma
aplicao. Para isso, as ativaes do escalonador oferecem upcalls, que so
mecanismo de comunicao entre o kernel e a biblioteca de threads no nvel do
usurio, assim, essa comunicao permite que uma aplicao mantenha o nmero
correto de threads do kernel.

Captulo 5: Escalonamento de CPU


Utilizao mxima de CPU - Multiprogramao
A execuo de um processo consiste em um ciclo de execuo de CPU e espera de
E/S.
Escalonador de CPU - Seleciona dentre os processos na memria que esto
prontos para executar, e aloca a CPU a um deles.
Decises de escalonamento de CPU podem ocorrer quando um processo:
1. Passa do estado executando para esperando - No preemptivo
2. Passa do estado executando para pronto - Preemptivo
3. Passa de esperando para pronto - Preemptivo
4. Termina - No preemptivo
Despachante - D o controle da CPU ao processo selecionado pelo escalonador de
curto prazo, o que envolve: troca de contexto, troca para o modo usurio e salto
para o local apropriado no programa do usurio para reiniciar esse programa.
Latncia de despacho: Tempo para que o despachante interrompa um processo e
inicie a execuo de outro.
Critrios de escalonamento:
- Utilizao de CPU: Manter a CPU ocupada o mximo de tempo possvel.
- Throughput - Nmero de processos que completam sua execuo por
unidade de tempo.
- Tempo de turnaround - Quantidade de tempo para executar um processo
em particular.
- Tempo de espera - Tempo em que um processo esteve esperando na fila de
prontos.
- Tempo de resposta - Tempo desde quando uma solicitao foi submetida
at a primeira resposta ser produzida, no a sada.
importante maximizar a utilizao de CPU e o throughput, e minimizar o
turnaround, o tempo de espera e o tempo de resposta.
Algoritmos de escalonamento
First-Come First-Served (FCFS) - O processo que requisita a CPU em primeiro
lugar recebe a CPU primeiro. Implementao gerenciada por meio de uma fila FIFO.

Tempo de espera mdio normalmente muito longo. Efeito comboio (processos


curtos atrs de um processo longo).
Shortest Job First (SJF) - associado a cada processo a extenso de seu prximo
burst de CPU. Essas extenses sero usadas para escalonar o processo com o
prximo burst de CPU mais curto. Pode ser no-preemptivo (uma vez que a CPU
dada a um processo, ela no pode ser apropriada at que o processo termine seu
burst de CPU) e preemptivo (se um novo processo chega na fila de prontos com um
tempo de burst de CPU menor que o tempo restante do processo que est em
execuo, o processo em execuo preemptado e o novo processo apropriado
pela CPU, esse esquema tambm conhecido como Shortest Remaining Time First
(SRTF)). SJF o algoritmo ideal, pois gera o menor tempo de espera mdio para
determinado conjunto de processos.
O prximo burst de CPU previsto como uma mdia exponencial dos perodos
medidos dos bursts de CPU anteriores, atravs da frmula:
Tn+1 = a*tn + (1-a)Tn, onde
0 <= a <= 1, e normalmente usamos a =
tn = tempo do ensimo burst de CPU
Tn+1 = valor previsto para o prximo burst de CPU
Tn = histrico passado
T0 pode ser definido como uma constante ou uma mdia geral do sistema
Escalonamento por prioridade - Um nmero de prioridade associado a cada
processo. A CPU alocada ao processo com maior prioridade. Pode ser preemptivo
ou no preemptivo. Problema: Processo com baixa prioridade podem nunca ser
executados (estagnao). Soluo: medida que o tempo passa, aumenta a
prioridade do processo (envelhecimento).
Round Robin (RR) - Cada processo recebe uma pequena unidade de tempo,
chamada quantum de tempo. Se o processo no tiver terminado dentro dessa
quantidade de tempo, ele volta pra fila de prontos e outro processo executado.
Cada processo no pode esperar mais que (n-1)*q unidades de tempo at seu
prximo quantum de tempo. Se o quantum for grande, a poltica RR ser igual a
FCFS. Se o quantum for muito pequeno, haver muitas trocas de contexto,
diminuindo o desempenho. Normalmente, possui turnaround mdio maior que SJF,
devido s trocas de contexto, mas tem uma resposta melhor.
Fila multinvel - Nesse tipo de algoritmo, a fila de prontos normalmente
particionada em duas filas separadas: uma de primeiro plano (interativa) e outra de
segundo plano (batch), mas tambm pode estar dividida em vrias filas diferentes.
Cada fila tem seu prprio algoritmo e sua prioridade. O escalonamento ser feito

entre as filas. O escalonamento pode ter prioridade fixa, ou seja, serve tudo na fila
de primeiro plano, e depois tudo na fila de segundo plano. Ou cada fila recebe uma
certa quantidade de tempo de CPU, para evitar estagnao.
Fila de feedback multinvel - Muito semelhante ao algoritmo de fila multinvel
convencional, com a diferena que os processo podem mover entre as diversas
filas. O envelhecimento pode ser implementado dessa forma. O escalonador de fila
de feedback multinvel tem vrios parmetros, entre eles:
- Nmero de filas
- Algoritmos de escalonamento para cada fila
- Mtodo usado para determinar quando fazer o upgrade de um processo ou
rebaix-lo
- Mtodo usado para determinar em qual fila um processo entrar
Escalonamento de mltiplos processadores - Quando mltiplas CPUs esto
disponveis, o escalonamento se torna relativamente mais complexo.
Compartilhamento de carga - Todos os processadores compartilham uma fila de
prontos comum, todos os processos entram nessa nica fila e so escalonado para
qualquer processador disponvel.
Multiprocessamento assimtrico - Todas as decises de escalonamento,
processamento de E/S e outras atividades do sistema tratadas por um nico
processador, somente esse processador acessa as estruturas de dados do sistema,
aliviando o compartilhamento de dados.
Multiprocessamento simtrico - Cada processador auto-escalonado, ou seja,
cada processador examina a fila de prontos e seleciona um processo para executar,
cada processador ter que ser programado com mais cuidado.
Escalonamento de tempo real
Sistemas de tempo real rgido - Exigidos para completar uma tarefa crtica dentro
de um perodo de tempo garantido.
Sistemas de tempo real flexvel - Exige que processo crticos recebam prioridade
em relao aos menos favorecidos.
Escalonamento de thread
Escalonamento local - Como a biblioteca de threads decide qual thread colocar em
um LWP.
Escalonamento global - Como o kernel decide qual thread executar em seguida.
Avaliao de algoritmo
Modelagem determinstica - Seleciona uma carga de trabalho predeterminada em
particular e define o desempenho de cada algoritmo para essa carga de trabalho.

Enfileiramento - Utiliza a distribuio dos burst de CPU e E/S, e a distribuio do


tempo de chegada dos processos para avaliar os diferentes algoritmos. n = lambda *
W, onde n = tamanho mdio da fila, W = tempo mdio de espera na fila, lambda =
taxa mdia de chegada de novos processos na fila
Simulaes - Podemos simular um modelo do sistema de computador e gerar
dados aleatrios, para avaliar os algoritmos.
Implementao - A nica maneira precisa para avaliar um algoritmo de
escalonamento codific-lo, coloc-lo no sistema operacional e ver como ele
funciona na prtica.

Captulo 6: Sincronismo de processo


Acesso concorrente aos dados compartilhados pode resultar em inconsistncia de
dados.
Manuteno da consistncia dos dados requer mecanismo para garantir a execuo
ordenada dos processos em cooperao.
Uma soluo para o problema da seo crtica precisa satisfazer os trs requisitos a
seguir:
- Excluso mtua: Se o processo P estiver executando em sua seo crtica,
ento nenhum outro processo poder estar executando em suas respectivas
sees crticas.
- Progresso: Se nenhum processo estiver executando em sua seo crtica e
houver alguns processos que queiram entrar em sua seo crtica, ento a
seleo dos processos que entraro na seo crtica em seguida no poder
ser adiada indefinidamente.
- Espera limitada: Depois que um processo tiver feito uma solicitao para
entrar em sua seo crtica, deve haver um limite sobre o nmero de vezes
que outros processos podem entrar em suas sees crticas, antes que a
solicitao seja concedida.
Condio de corrida - Quando h o acesso simultneo aos dados compartilhados
e o resultado final depende da ordem de execuo.
Seo crtica - Seo do cdigo onde os dados compartilhados so acessados.
Seo de entrada - Cdigo que solicita permisso para entrar em sua seo crtica.
Seo de sada - Cdigo executado aps a sada da seo crtica.
Soluo de Peterson: Soluo para dois processos que compartilham duas
variveis: turn (que indica de quem a vez de entrar na seo crtica) e um array
flag (que usado para indicar se um processo est pronto para entrar na seo
crtica).
Muitos sistemas oferecem suporte do hardware para o cdigo da seo crtica.
Sistema uniprocessados podem desativar interrupes, o que ineficaz em
sistemas multiprocessados. Por isso, mquinas modernas oferecem instrues de
hardware especiais indivisveis.
Semforo - Ferramenta de sincronismo que no exige espera ocupada. Representa
uma varivel inteira e possui duas operaes padro de modificao: adquire() e
release().

Semforo de contagem - Valor inteiro pode variar por um domnio irrestrito.


Semforo binrio - Valor inteiro s pode variar entre 0 e 1. Tambm conhecido
como locks mutex.
Implementao de semforo sem espera ocupada - Existe uma fila de espera
associada a cada semforo. Cada entrada em uma fila de espera um valor int e um
ponteiro para o prximo registro da lista. Possui duas operaes: block (que coloca
o processo que a chama na fila de espera apropriada) e wakeup (que remove um
dos processos na fila de espera e o coloca na fila de prontos).
Deadlock - Dois ou mais processos esto esperando indefinidamente por um
evento que s pode ser causado por um dos processos esperando.
Starvation - Um processo pode nunca ser removido da fila de semforo em que ele
est suspenso.
Problema do buffer limitado:
- N buffers, cada um podendo manter um item
- Mutex de semforo inicializado com o 1
- Semforo cheio inicializado com 0
- Semforo vazio inicializado com N
Problema dos leitores-escritores:
- Um conjunto de dados compartilhado entre diversos processos
concorrentes (leitores e escritores)
- Leitores: S lem o conjunto de dados
- Escritores: Podem ler e escrever
- Permitir que vrios leitores leiam ao mesmo tempo e apenas um escritor
acesse os dados compartilhados.
- Dados compartilhados: conjunto de dados, mutex (inicializado com 1), db
(semforo inicializado com 1), readerCount (inteiro inicializado com 0).
Problema do jantar dos filsofos:
- Conjuntos de dados
- Array de semforos inicializados com 1
Monitores: Uma abstrao de alto nvel que oferece um mecanismo conveniente e
eficaz para o sincronismo de processo. Somente um processo pode estar ativo
dentro do monitor em determinado momento.
Variveis de condio:
- Possuem duas operaes: wait() e signal()

x.wait() - um processo que invoca a operao suspenso


x.signal() - retoma um dos processos que invocou x.wait()

Sincronismo em Java:
- Java oferece sincronismo em nvel de linguagem
- Cada objeto possui um lock associado
- O lock adquirido pela invocao de um mtodo sincronizado e liberado na
sada do mtodo
- As threads esperando para adquirir o lock do objeto so colocadas no
conjunto de entrada para o lock do objeto.
- Quando uma thread invoca wait(): a thread libera o lock do objeto, o estado
da thread definido como blocked e a thread colocada no conjunto de
espera para o objeto.
- Quando uma thread invoca notify(): Uma thread qualquer T do conjunto de
espera selecionada, movida do conjunto de espera para o de entrada, e o
seu estado definido como runnable.
- A chamada notify() seleciona uma thread qualquer do conjunto de espera.
- A chamada notifyAll() seleciona todas as threads no conjunto de espera e as
move para o conjunto de entrada - mais conservadora.
- Ao invs de sincronizar um mtodo inteiro, podemos declarar blocos de
cdigo como sincronizados.
Transaes indivisveis
Modelo do sistema:
- Garante que as operaes aconteam como uma nica unidade lgica de
trabalho, em sua inteireza, ou no aconteam.
- Transao - Coleo de instrues ou operaes que realiza uma nica
funo lgica.
Recuperao baseada em log:
- Registro de informaes em armazenamento estvel sobre todas as
modificaes feitas por uma transao.
- Undo e Redo.
- Pontos de verificao: servem para encurtar o log e o tempo de
recuperao.
Transaes concorrentes:
- Serializao: A execuo concorrente de transaes precisa ser equivalente
ao caso em que essas transaes so executadas em srie, em alguma
ordem qualquer.

Podemos permitir que as transaes sobreponham sua execuo enquanto


mantm a serializao.
Dizemos que duas operaes so conflitante se acessarem o mesmo item de
dados e pelo menos uma dessas operaes for uma operao write().
Se o roteiro R puder ser transformado em um roteiro serial R1 por uma srie
de trocas de operaes no conflitantes, dizemos que o roteiro R
serializvel por conflito.

Protocolo de lock:
- Garante a serializao pela associao de um a lock a cada item de dados e
a exigncia de que cada transao siga um protocolo de lock.
- Modo compartilhado: Se T tem lock de modo compartilhado no item Q,
ento T pode ler Q mas no pode escrever em Q.
- Modo exclusivo: Se T tem lock de modo exclusivo no item Q, ento T pode
ler e escrever em Q.
Protocolo de lock em duas fases:
- Garante a serializao, ao exigir que cada transao emita requisies de
lock e unlock em duas fases.
- Fase de crescimento: Uma transao s pode obter locks
- Fase de encolhimento: Uma transao s pode liberar locks.
- No impede deadlock.
Protocolos baseados em estampa de tempo:
- Seleciona uma ordenao entre transaes com antecedncia
- Associa uma estampa de tempo fixa e exclusiva cada transao
- Garante a serializao e a ausncia de deadlocks.

Captulo 7: Deadlocks
Deadlock: Um conjunto de processos est em um estado de deadlock quando cada
processo no conjunto est esperando por um evento que s pode ser causado por
outro processo no conjunto.
Quando temos um conjunto de processo bloqueados, cada um mantendo um
recurso e esperando para adquirir um recurso mantido por outro processo no
conjunto, dizemos que esse conjunto est em um estado de deadlock.
Tipos de recurso: ciclos de CPU, espao de memria, dispositivos de E/S.
Cada tipo de recurso possui instncias.
Cada processo utiliza um recurso da seguinte forma: requisio do recurso - uso do
recurso - liberao do recurso.
Um deadlock pode surgir se quatro condies forem atendidas simultaneamente em
um sistema:
1) Excluso mtua: apenas um processo de cada vez pode usar um recurso
2) Manter e esperar: um processo mantendo pelo menos um recurso est
esperando para adquirir outros recursos mantidos por outros processos
3) No preempo: um recurso s pode ser liberado voluntariamente pelo
processo que o mantm, depois que esse processo tiver terminado sua tarefa
4) Espera circular: existe um conjunto {P1, P2, , Pn} de processos
esperando, tal que P1 est esperando por um recurso que mantido por P2,
P2 est esperando por P3, , Pn-1 est esperando por Pn e Pn est
esperando por P1.
Grafo de alocao de recursos:
Grafo consistindo em um conjunto de vrtices V e um conjunto de arestas E. Onde
V particionado em dois tipos: P = {P1, P2, , Pn} que consiste no conjunto de
todos os processos ativos no sistema; e R = {R1, R2, , Rm} que consiste no
conjunto de todos os tipos de recursos no sistema.
Uma aresta de requisio uma aresta direcionado Pi -> Rj;
Uma aresta de atribuio uma aresta direcionada Rj -> Pi.
Processo so representados por um crculo e recursos por um quadrado.
Se o grafo no contm ciclos, ento no h deadlock.

Se o grafo contm um ciclo e cada recurso possui apenas uma instncia, ento h
deadlock.
Se o grafo contm um ciclo, mas os recursos possuem vrias instncias, ento h a
possibilidade de haver deadlock.
Mtodos para tratamento de deadlocks:
- Garantir que o sistema nunca entrar em um estado de deadlock
- Permitir que o sistema entre em um estado de deadlock e depois se recupere
- Ignorar o problema e fingir que os deadlocks nunca ocorrem no sistema
Preveno de deadlock: Garante que pelo menos uma das condies necessrias
para ocorrer deadlock no seja satisfeita.
- Excluso mtua: precisa ser mantida para recursos no compartilhveis.
- Manter e esperar: garantir que sempre que um processo requisitar um
recurso, ele no mantm quaisquer outros recursos. O que pode ser feito
exigindo que o processo solicite e tenha todos os seus recursos alocados
antes de iniciar sua execuo, ou exigindo que o processo solicite recursos
somente quando o processo no tiver recursos. A utilizao de recursos pode
ser baixa, e h a possibilidade de starvation.
- No preempo: se um processo estiver mantendo alguns recursos e
requisitar outro recurso que no possa ser alocado imediatamente a ele,
ento todos os recursos retidos so preemptados e acrescentados lista de
recursos que o processo est esperando. O processo s poder ser
reiniciado quando reaver seus antigos recursos, assim como os novos que
solicitou.
- Espera circular: Impe uma ordenao total de todos os tipos de recursos e
exige que cada processo requisite recursos em ordem crescente de
enumerao.
Evitando deadlock: Exige que o SO receba com antecedncia informaes
adicionais com relao a quais recursos um processo requisitar e usar durante
seu tempo de vida.
Estado seguro: Quando um processo solicita um recurso disponvel, o sistema
deve decidir se a alocao imediata deixa o sistema em um estado seguro. O
sistema est em um estado seguro se houver uma sequncia <P1, P2, , Pn> de
todos os processos nos sistemas tal que, para cada Pi, os recursos que Pi ainda
pode solicitar possam ser satisfeitos pelos recursos atualmente disponveis mais os
recursos mantidos por todo Pj, com j < i.
Se o sistema est em um estado seguro, ento no h deadlock.
Se um sistema est em um estado inseguro, ento pode haver deadlock.

Algoritmo para evitar deadlock


Algoritmo do grafo de alocao de recursos: s serve se cada recurso tiver
apenas uma instncia.
Aresta de pretenso Pi -> Rj: indica que o processo Pi pode solicitar o recurso Rj.
Representada por uma linha tracejada.
Suponha que o processo Pi solicite o recurso Rj. A requisio s pode ser
concedida se a converso da aresta de requisio para uma aresta de atribuio
no resultar na formao de um ciclo.