O que é um page fault quando ele ocorre é quem controla a sua ocorrência como uma elevada taxa de page fault pode comprometer o sistema operacional?

10 – Gerência de Memória

10.7 EXERCÍCIOS

132) Quais as funções básicas da gerência de memória?

133) Considere um sistema computacional com 40 KB de memória principal e que
utilize um Sistema Operacional de 10 KB que implemente alocação contígua de
memória. Qual a taxa de subutilização da memória principal para um programa
que ocupe 20 KB de memória?

134) Suponha que um sistema computacional de 64 KB de memória principal e que
utilize um Sistema Operacional de 14 KB que implemente alocação contígua de
memória. Considere também um programa de 90 KB, formado por um módulo
principal de 20 KB e três módulos independentes, cada um com 10 KB, 20 KB e
30 KB. Como o programa poderia ser executado utilizando-se apenas a técnica de
overlay?

135) Considerando o exercício anterior, se o módulo de 30 KB tivesse seu tamanho
aumentado para 40 KB, seria possível executar o programa? Caso não possa, co-
mo o problema poderia ser contornado?

136) Qual a diferença entre fragmentação interna e externa da memória principal?

137) Suponha um sistema computacional com 128 KB de memória principal e que
utilize um Sistema Operacional de 64 KB que implemente alocação particionada
estática relocável. Considere também que o sistema foi inicializado com três parti-
ções: P1 (8 KB), P2 (24 KB) e P3 (32 KB). Calcule a fragmentação interna da
memória principal após a carga de três programas: PA, PB e PC.
a) P1 <- PA (6 KB); P2 <- PB (20 KB); P3 <- PC (28 KB)
b) P1 <- PA (4 KB); P2 <- PB (16 KB); P3 <- PC (26 KB)
c) P1 <- PA (8 KB); P2 <- PB (24 KB); P3 <- PC (32 KB)

138) Considerando o exercício anterior, seria possível executar quatro programas
concorrentemente utilizando apenas a técnica de alocação particionada estática
relocável? Se for possível, como? Considerando ainda o mesmo exercício, seria
possível executar um programa de 32 KB? Se for possível, como?

139) Qual a limitação da alocação particionada estática absoluta em relação à alo-
cação estática relocável?

140) Considere que os processos da tabela a seguir estão aguardando para serem
executados e que cada um permanecerá na memória durante o tempo especifica-
do. O Sistema Operacional ocupa uma área de 20 KB no início da memória e ge-
rencia a memória utilizando um algoritmo de particionamento dinâmico modifica-
do. A memória total disponível no sistema é de 64 KB e é alocada em blocos múl-
tiplos de 4 KB. Os processos são alocados de acordo com sua identificação (em
ordem crescente) e irão aguardar até obter a memória de que necessitam. Calcule
a perda de memória por fragmentação interna e externa sempre que um processo
é colocado ou retirado da memória. O Sistema Operacional compacta a memória
apenas quando existem duas ou mais partições livres adjacentes.

PROCESSOS MEMÓRIA TEMPO
1 30 KB 5
2 6 KB 10
3 36 KB 5

Sistemas Operacionais – Lucilia Ribeiro 100

10 – Gerência de Memória

141) Considerando os algoritmos para escolha da partição dinamicamente, concei-
tue as estratégias especificando prós e contras de cada uma.

142) Considere um sistema que possua as seguintes áreas livres na memória prin-
cipal, ordenadas crescentemente: 10 KB, 4 KB, 20 KB, 18 KB, 7 KB, 9 KB, 12 KB e
15 KB. Para cada programa abaixo, qual seria a partição alocada utilizando-se os
algoritmos “Primeira Alocação”, “Próxima Alocação”, “Melhor Alocação” e “Pior A-
locação”?

a) 12 KB b) 10 KB c) 9 KB

143) Um sistema utiliza alocação particionada dinâmica como mecanismo de gerên-
cia de memória. O Sistema Operacional aloca uma área de memória total de 50
KB e possui, inicialmente, os programas da tabela a seguir:

5 KB Programa A

3 KB Programa B

10 KB Livre

6 KB Programa C

26 KB Livre

Realize as operações abaixo seqüencialmente, mostrando o estado da memória
após cada uma delas. Resolva a questão utilizando as estratégias “Melhor Aloca-
ção”, “Pior Alocação”, “Primeira Alocação” e “Próxima Alocação”.

a) alocar uma área para o programa D que possui 6 KB;
b) liberar a área do programa A;
c) alocar uma área para o programa E que possui 4 KB.

144) O que é swapping e para que é utilizada essa técnica?

145) Por que é importante o uso de um loader com relocação dinâmica para que a
técnica de swapping possa ser implementada?

146) Apresente o mapa de bits e o esquema de listas ligadas para o dois layouts de
memória apresentados abaixo:

Sistemas Operacionais – Lucilia Ribeiro 101

10 – Gerência de Memória

147) Considere um sistema com swapping no qual os seguintes buracos estão na
memória, na ordem apresentada: 17K, 4K, 20K, 18K, 7K, 9K, 11K e 15K. Consi-
dere, ainda, que foram sucessivamente carregados para a memória os processos
A, B e C de tamanhos 18K, 9K e 14K, respectivamente. Assim sendo, aplique os
algoritmos da Primeira Alocação e o da Próxima Alocação.

148) Um minicomputador usa o sistema buddy para gerenciar sua memória. Inici-
almente, ele tem um bloco de 512K no endereço 0. Demonstre graficamente a si-
tuação da memória após cada passo e responda ao final de todos os passos: a)
Quantos blocos livres restaram, b) quais os seus tamanhos e c) quais seus ende-
reços.
a) Alocação do Processo A de 12 KB
b) Alocação do Processo B de 74 KB
c) Alocação do Processo C de 30 KB
d) Finalização do Processo B
e) Alocação do Processo D de 200 KB
f) Finalização do Processo A
g) Alocação do Processo E de 7 KB

-x-

Sistemas Operacionais – Lucilia Ribeiro 102

11 – Memória Virtual

11 Memória Virtual

“Nunca deixe o inimigo perceber que você está sangrando.” (James Bond)

11.1 INTRODUÇÃO

As implementações vistas anteriormente no gerenciamento de memória se mostra-
ram muitas vezes ineficientes. Além disso, o tamanho de um programa e de suas estru-
turas de dados estava limitado ao tamanho da memória disponível. A utilização da técni-
ca de overlay para contornar este problema é de difícil implementação na prática e nem
sempre uma solução garantida.

Memória Virtual é uma técnica sofisticada e poderosa de gerência de memória, on-
de as memórias principal e secundária são combinadas, dando ao usuário a ilusão de
existir uma memória muito maior que a capacidade real da memória principal. O conceito
de memória virtual fundamenta-se em não vincular o endereçamento feito pelo programa
dos endereços físicos da memória principal. Desta forma, programas e suas estruturas de
dados deixam de estar limitados ao tamanho da memória física disponível, pois podem
possuir endereços associados à memória secundária.

Outra vantagem da técnica de memória virtual é permitir um número maior de pro-
cessos compartilhando a memória principal, já que apenas partes de cada processo esta-
rão residentes. Isto leva a uma utilização mais eficiente também do processador. Além
disso, essa técnica possibilita minimizar o problema da fragmentação da memória princi-
pal.

11.2 ESPAÇO DE ENDEREÇAMENTO VIRTUAL

O conceito de memória virtual se aproxima muito da
idéia de um vetor existente nas linguagens de alto nível.
Quando um programa faz referência a um elemento do
vetor, não há preocupação em saber a posição de memó-
ria daquele dado. O compilador se encarrega de gerar
instruções que implementem esse mecanismo, tornando-
o totalmente transparente ao programador.

A memória virtual utiliza abstração semelhante, só
que em relação aos endereços dos programas e dados.
Um programa no ambiente de memória virtual não faz
referência a endereços físicos de memória (endereços
reais), mas apenas a endereços virtuais. No momento
da execução de uma instrução, o endereço virtual refe-
renciado é traduzido para um endereço físico, pois o pro-

cessador manipula apenas posições da memória
principal. O mecanismo de tradução do endereço
virtual para o endereço físico é chamado de ma-
peamento.

Como o espaço de endereçamento virtual não

tem nenhuma relação direta com os endereços no

espaço real, um programa pode fazer referência a

endereços virtuais que estejam fora dos limites da

memória principal, ou seja, os programas e suas

estruturas de dados não estão mais limitados ao

tamanho da memória física disponível. Para que

isso seja possível, o Sistema Operacional utiliza a

memória secundária como extensão da memória

principal. Quando um programa é executado, so-

mente uma parte do seu código fica residente na memória principal, permanecendo o

Sistemas Operacionais – Lucilia Ribeiro 103

11 – Memória Virtual

restante na memória secundária até o momento de ser referenciado. Esta condição per-
mite aumentar o compartilhamento da memória principal entre muitos processos.

No desenvolvimento de aplicações, a existência dos endereços virtuais é ignorada pe-
lo programador. Os compiladores e linkers se encarregam de gerar o código executável
em função do espaço de endereçamento virtual, e o Sistema Operacional cuida dos deta-
lhes durante sua execução.

11.3 MAPEAMENTO

O processador apenas executa instruções e referencia dados residentes no espaço de
endereçamento real; portanto, deve existir um mecanismo que transforme os endereços
virtuais em reais. Esse mecanismo é chamado mapeamento.

Nos sistemas atuais, o mapeamento é realizado por hardware juntamente com o Sis-
tema Operacional. O dispositivo de hardware responsável por esta tradução é conhecido
como Unidade de Gerenciamento de Memória (Memory Management Unit – MMU),
sendo acionado sempre que se faz referência um endereço virtual. Depois de traduzido, o
endereço real pode ser utilizado pelo processador para acesso à memória principal.

Cada processo tem o seu espaço de en-
dereçamento virtual como se possuísse sua
própria memória. O mecanismo de tradução
se encarrega, então, de manter tabelas de
mapeamento exclusivas para cada proces-
so, relacionando os endereços virtuais do
processo às suas posições na memória real.

Caso o mapeamento fosse realizado para
cada célula na memória principal, o espaço
ocupado pelas tabelas seria tão grande
quanto o espaço de endereçamento virtual
de cada processo, o que inviabilizaria a im-
plementação do mecanismo de memória
virtual. Em função disso, as tabelas mapei-
am blocos de dados, cujo tamanho determi-
na o número de entradas existentes nas ta-
belas de mapeamento. Quanto maior o blo-
co, menos entradas nas tabelas de mapea-
mento e, conseqüentemente, tabelas de
mapeamento que ocupam um menor espaço
na memória.

Espaço de Tamanho Número Número de entradas
do Bloco de Blocos
Endereçamento na tabela de
512 bytes 223
Virtual 4 KB 220 mapeamento
232 endereços 4 KB 252 223
232 endereços 64 KB 248 220
264 endereços 252
264 endereços 248

Como veremos a seguir, existem Sistemas Operacionais que trabalham apenas com
blocos de tamanho fixo (paginação), enquanto outros utilizam blocos de tamanho variá-
vel (segmentação). Existe ainda um terceiro tipo de sistema que implementa ambas as
técnicas (segmentação paginada).

11.4 PAGINAÇÃO

É a técnica de gerência de memória onde o espaço de endereçamento virtual e o real

são divididos em blocos do mesmo tamanho chamados páginas. A definição do tama-

nho da página é um fator importante no projeto de sistemas que implementam memó-

ria virtual por paginação. O tamanho da página está associado à arquitetura do hardware

e varia de acordo com o processador, mas normalmente está entre 512 e 16MB. Páginas

Sistemas Operacionais – Lucilia Ribeiro 104

11 – Memória Virtual

no espaço virtual são denominadas páginas virtuais, enquanto as páginas no espaço
real são chamadas de páginas reais, molduras ou frames.

Todo o mapeamento de endereço virtual
em real é realizado através de tabelas de
páginas. Cada processo possui sua própria
tabela e cada página virtual do processo pos-
sui uma entrada na tabela de páginas
(ETP), com informações de mapeamento que
permitem ao sistema localizar a página real
correspondente.

Nessa técnica, o endereço virtual é forma-
do pelo número da página virtual (NPV) e
por um deslocamento. O NPV identifica uni-
camente a página virtual que contém o ende-
reço, funcionando como um índice na tabela
de paginas. O deslocamento indica a posição
do endereço virtual em relação ao início da
página na qual se encontra. O endereço físico
é obtido, então, combinando-se o endereço do
frame, localizado na tabela de páginas, com o
deslocamento, contido no endereço virtual.

Além da informação sobre a localização da
página virtual, a ETP possui outras informa-
ções, como o bit de validade (valid bit) que
indica se uma página está ou não na memória
principal.

Sempre que o processo referencia um en-
dereço virtual, a unidade de gerência de me-
mória verifica, através do bit de validade, se a
página que contém o endereço referenciado

está ou não na memória principal. Caso
a página não esteja na memória, dize-
mos que ocorre uma falta de página
(page fault). Neste caso, o sistema
transfere a página da memória secundá-
ria para a memória principal, realizando
uma operação de E/S conhecida como
page in ou paginação. O número de
faltas de página gerado por um processo
depende de como o programa foi desen-
volvido, além da política de gerência de
memória implementada pelo Sistema
Operacional. O número de falta de pági-
nas geradas por cada processo em um
determinado intervalo de tempo é defi-
nido como taxa de paginação.

Sistemas Operacionais – Lucilia Ribeiro 105

11 – Memória Virtual

Sistemas Operacionais – Lucilia Ribeiro 106

11 – Memória Virtual

11.4.1 PAGINAÇÃO MULTINÍVEL
Em sistemas que implementam apenas um nível de paginação, o tamanho das tabe-

las de páginas pode ser um problema. Em uma arquitetura de 32 bits para endereçamen-
to e páginas com 4KB por processo, onde cada entrada na tabela de páginas ocupe 4
bytes, a tabela de páginas poderia ter mais de um milhão de entradas e ocuparia 4 MB
de espaço. Imaginando vários processos residentes na memória principal, manter tabelas
desse tamanho para cada processo certamente seria de difícil gerenciamento.

Uma boa solução para contornar o problema é a utilização de tabelas de páginas
multinível. Com a finalidade de propiciar um melhor entendimento do mencionado con-
ceito, considere-se um sistema computacional com palavra de 32 bits, 4 GB de espaço de
endereçamento virtual e páginas de tamanho 4K. Nesta configuração, a palavra que che-
ga à MMU é dividida em três partes, como indica a Figura:

Então, baseando-se nos dados do sistema computacional e no layout da palavra de
endereçamento mostrado, tem-se o esquema de tabela de páginas multinível apresenta-
do abaixo:

Sistemas Operacionais – Lucilia Ribeiro 107

11 – Memória Virtual

Dessa forma, cada entrada do primeiro nível gerencia 4 MB de espaço e cada entrada
do segundo mapeia 4KB, totalizando 4GB.

A Figura abaixo apresenta um exemplo de funcionamento da MMU para o caso de ta-
belas de páginas multinível.

Como exemplos práticos de hardware paginação pode-se citar: PDP-11 (paginação de
um nível), VAX (paginação em dois níveis), SPARC (paginação em três níveis) e 68030
(paginação em quatro níveis).

11.4.2 POLÍTICAS DE BUSCA DE PÁGINAS

Determina quando uma página deve ser carregada para a memória. Basicamente, e-
xistem duas estratégias para este propósito: paginação sob demanda e pré-paginação ou
paginação antecipada.

Sistemas Operacionais – Lucilia Ribeiro 108

11 – Memória Virtual

Na paginação sob demanda, as páginas dos processos são transferidas da memória
secundária para a principal apenas quando são referenciadas. Este mecanismo é conve-
niente, na medida em que leva para a memória principal apenas as páginas realmente
necessárias à execução do programa. Desse modo, é possível que partes não executadas
do programa, como rotinas de tratamento de erros, nunca sejam carregadas para a me-
mória.

Na pré-paginação, o sistema carrega para a memória principal, além da página re-
ferenciada, outras páginas que podem ou não ser necessárias ao processo ao longo do
processamento. Se imaginarmos que o programa está armazenado seqüencialmente no
disco, existe uma grande economia de tempo em levar um conjunto de páginas da me-
mória secundária, ao contrário de carregar uma de cada vez. Por outro lado, caso o pro-
cesso não precise das páginas carregadas antecipadamente, o sistema terá perdido tem-
po e ocupado memória principal desnecessariamente.

11.4.3 POLÍTICAS DE ALOCAÇÃO DE PÁGINAS

Determina quantas molduras (frames) cada processo pode manter na memória prin-
cipal. Existem, basicamente, duas alternativas: alocação fixa e alocação variável.

Na política de alocação fixa, cada processo tem um número máximo de molduras
que pode ser utilizado durante a execução do programa. Caso o número de páginas reais
seja insuficiente, uma página do processo deve ser descartada para que uma nova seja
carregada. O limite de páginas deve ser definido no momento da criação do processo,
com base no tipo da aplicação que será executada. Essa informação faz parte do contex-
to de software do processo.

Apesar de sua simplicidade, a política de alocação fixa de página apresenta dois pro-
blemas. Se o número máximo de páginas alocadas for muito pequeno, o processo tende-
rá a ter um elevado número de falta de página, o que pode impactar no desempenho de
todo o sistema. Por outro lado, caso o número de páginas seja muito grande, cada pro-
cesso irá ocupar na memória principal um espaço maior do que o necessário, reduzindo o
número de processos residentes e o grau de multiprogramação.

Na política de alocação variável, o número máximo de páginas pode variar duran-
te sua execução em função de sua taxa de paginação e da ocupação da memória princi-
pal. Este mecanismo, apesar de ser mais flexível, exige que o Sistema Operacional moni-
tore constantemente o comportamento dos processos, gerando maior overhead.

11.4.4 POLÍTICAS DE SUBSTITUIÇÃO DE PÁGINAS

Em algumas situações, quando um processo atinge o seu limite de alocação de mol-
duras e necessita alocar novas páginas na memória principal, o Sistema Operacional de-
ve selecionar, dentre as diversas páginas alocadas, qual deverá ser liberada. Este meca-
nismo é chamado de política de substituição de páginas. Uma página real, quando
liberada por um processo, está livre para ser utilizada por qualquer outro. A partir dessa
situação, qualquer estratégia de substituição de páginas deve considerar se uma página
foi ou não modificada antes de liberá-la. Se a página tiver sido modificada, o sistema
deverá gravá-la na memória secundária antes do descarte, preservando seu conteúdo
para uso em futuras referências. Este mecanismo é conhecido como page out.

O Sistema Operacional consegue identificar as páginas modificadas através de um bit
que existe em cada entrada da tabela de páginas, chamado bit de modificação. Sempre
que uma página sofre uma alteração, o valor do bit de modificação é alterado, indicando
que a página foi modificada.

A política de substituição de páginas pode ser classificada conforme seu escopo, ou
seja, dentre os processos residentes na memória principal quais são candidatos a ter
páginas realocadas. Em função deste escopo, pode ser definida como local ou global.

Na política de substituição local, apenas as páginas do processo que gerou a falta
de página são candidatas a realocação. Os frames dos demais processos não são avalia-
dos para substituição.

Já na política de substituição global, todas as páginas alocadas na memória prin-

cipal são candidatas a substituição, independente do processo que gerou a falta de pági-

Sistemas Operacionais – Lucilia Ribeiro 109

11 – Memória Virtual

na. Na verdade, nem todas as páginas podem ser candidatas a substituição. Algumas
páginas, como as do núcleo do sistema, são marcadas como bloqueadas e não podem
ser realocadas.

11.4.5 WORKING SET

Apesar de suas diversas vantagens, o mecanismo de memória virtual introduz um sé-
rio problema: caso os processos tenham na memória principal um número insuficiente de
páginas para a execução do programa, é provável que diversos frames referenciados ao
longo do seu processamento não estejam na memória. Esta situação provoca a ocorrên-
cia de um número elevado de falta de página e, conseqüentemente, inúmeras operações
de E/S. Neste caso, ocorre um problema conhecido como trashing, provocando sérias
conseqüências ao desempenho do sistema.

O conceito de working set surgiu com o objetivo de reduzir o problema do trashing e
está relacionado ao princípio da localidade. Existem dois tipos de localidade que são
observados durante a execução da maioria dos programas. A localidade espacial é a
tendência de que após uma referência a uma posição de memória sejam realizadas novas
referências a endereços próximos. A localidade temporal é a tendência de que após a
referência a uma posição de memória esta mesma posição seja novamente referenciada
em um curto intervalo de tempo.

O princípio da localidade significa, na prática, que o pro-
cessador tenderá a concentrar suas referências a um con-
junto de páginas do processo durante um determinado perí-
odo de tempo. Imaginando um loop, cujo código ocupe três
páginas, a tendência de essas três páginas serem referenci-
adas diversas vezes é muito alta.

A partir da observação do princípio da localidade, Peter
Denning (1968), formulou o modelo de working set. Wor-
king set é definido como sendo o conjunto das páginas refe-
renciadas por um processo durante determinado intervalo
de tempo. A figura ilustra que no instante t2, o working set
do processo W(t2, ∆t), são as páginas referenciadas no in-
tervalo ∆t (t2 – t1), isto é, as páginas P2, P3 e P8. o intervalo de tempo ∆t é denominado
janela do working set. Podemos observar, então, que o working set de um processo é
função do tempo e do tamanho da janela do working set.

Dentro da janela do working set, o número de páginas distintas referenciadas é co-
nhecido como tamanho do working set. Na figura são apresentadas as referências às
páginas de um processo nas janelas ∆ta (t2 – t1) e ∆tb (t3 – t2). O working set do processo
no instante t2, com a janela ∆ta, corresponde às páginas P2, P3, P4 e P5, e o tamanho do
working set é igual a quatro páginas. No instante t3, com a janela ∆tb, o working set cor-
responde às páginas P5 e P6, e o tamanho é igual a duas páginas.

O modelo de working set proposto por Denning possibilita prever quais páginas são
necessárias à execução de um programa de forma eficiente. Caso a janela do working set
seja apropriadamente selecionada, em função da localidade do programa, o Sistema O-

Sistemas Operacionais – Lucilia Ribeiro 110

11 – Memória Virtual

peracional deverá manter as páginas do working set de cada processo residente na me-
mória principal. Considerando que a localidade de um programa varia ao longo da sua
execução, o tamanho do working set do processo também varia, ou seja, o seu limite de
páginas reais deve acompanhar esta variação. O working set refletirá a localidade do
programa, reduzindo a taxa de paginação dos processos e evitando, conseqüentemente,
o trashing. Na prática, o modelo de working set serve como base para inúmeros algorit-
mos de substituição de páginas, como os apresentados a seguir.

11.4.6 ALGORITMOS DE SUBSTITUIÇÃO DE PÁGINAS

A melhor estratégia de substituição de páginas seria aquela que escolhesse uma mol-
dura que não fosse mais utilizada no futuro ou levasse mais tempo para ser novamente
referenciada. Porém, quanto mais sofisticado o algoritmo, maior overhead para o Siste-
ma Operacional implementá-lo. O algoritmo deve tentar manter o working set dos pro-
cessos na memória principal e, ao mesmo tempo, não comprometer o desempenho do
sistema.

a) ÓTIMO: O melhor algoritmo de troca de páginas é fácil de descrever, mas impos-
sível de implementar. O algoritmo opera da seguinte maneira: no momento que ocorre
uma falta de página, um certo conjunto de páginas está na memória. Uma dessas pági-
nas será referenciada em muitas das próximas instruções. Outras páginas não serão re-
ferenciadas antes de 10, 100 ou talvez 1000 instruções. Cada página pode ser rotulada
com o número de instruções que serão executadas antes que a página seja inicialmente
referenciada.

O algoritmo ótimo simplesmente diz que a página com o maior rótulo deve ser remo-
vida, adiando-se o máximo possível a próxima falta de página. (A exemplo das pessoas,
os computadores também tendem a adiar o quanto possível a ocorrência de eventos de-
sagradáveis).

O único problema com este algoritmo é que ele não é realizável. No momento da falta
de página, o sistema operacional não tem como saber quando cada uma das páginas
será referenciada de novo. No máximo podemos executar um programa em um simula-
dor e, mantendo uma lista de todas as páginas referenciadas, implementar o algoritmo
na segunda execução (usando informações coletadas na primeira execução).

b) FIFO: Para ilustrar seu funcionamento, considere um supermercado que tem pra-
teleiras suficientes para armazenar exatamente k produtos diferentes. Certo dia, alguma
indústria introduz um novo tipo de alimento que faz um tremendo sucesso comercial.
Nosso supermercado deve, então, arranjar um jeitinho para vendê-lo, eliminando de su-
as prateleiras algum outro produto.

Uma possibilidade é descobrir qual dos produtos este supermercado vem estocando
há mais tempo (isto é, algo que ele vem vendendo há 120 anos) e livrar-se dele. De fato,
tal decisão é tomada com facilidade, visto que o supermercado mantém uma lista de to-
dos produtos vendidos atualmente, na ordem em que eles entraram pela primeira vez no
estoque. O mais novo está no fim da fila, e o mais velho no início, devendo ser elimina-
do.

Em algoritmos de substituição de páginas, a mesma idéia pode ser aplicada. O siste-
ma operacional mantém uma fila de todas as páginas que estão na memória, com a pá-
gina no topo da fila sendo a mais antiga e a do fim da fila a que chegou há menos tem-
po. Na ocorrência de uma falta de página, a página do início deve ser removida, sendo a
nova página adicionada ao fim desta fila. Quando aplicado ao problema do supermerca-
do, o algoritmo FIFO tanto pode remover um dos itens mais vendidos, como sal ou man-
teiga, quanto um dos menos vendidos, como sacos de lixo. Quando aplicada aos compu-
tadores, o mesmo problema ocorre. Por isso, o algoritmo FIFO, em sua forma pura, nun-
ca é usado. A Figura traz uma simulação simplificada deste algoritmo;

Sistemas Operacionais – Lucilia Ribeiro 111

11 – Memória Virtual

c) Segunda Chance:

Este algoritmo é uma variação do FIFO, a única diferença é que existe um bit “R” as-
sociado a cada página. Se “R” for 0 a página é considerada velha e não referenciada, de
modo que ela deve ser removida da memória. Ao passo que, se “R” for 1, “R” deve ser
zerado e a página colocada no fim da fila (torna-se jovem novamente).Contudo, se todas
as páginas tiverem sido recentemente referenciadas, este algoritmo irá se comportar
exatamente como o FIFO;

d) Relógio:

O algoritmo da segunda chance está sempre movendo páginas do início para o final
da lista. Então, com a finalidade de solucionar este problema, desenvolveu-se o algorit-
mo do relógio, que possui uma lista ligada circular e um ponteiro que aponta para a pá-
gina mais velha. Quando uma falta de página acontece, a página que está sendo aponta-
da é testada e, caso o seu bit “R” seja zero, ela deve abandonar a memória, porém se
“R” for 1, “R” deve ser zerado e o ponteiro avança para o próximo nó da lista. Este pro-
cesso deve se repetir até que seja encontrado um nó com “R” igual a zero;

e) NUR (Not Recently Used):

Para permitir que o sistema operacional colete estatísticas sobre quais páginas estão
sendo usadas e quais não estão, muitos computadores com memória virtual têm 2 bits
associados a cada página. Um bit, R ou bit de referência, é ativado pelo hardware sem-
pre que a página a ele associada for referenciada. O outro bit, M ou bit de modificação, é
ativado pelo hardware quando uma página é escrita. É importante que estes bits sejam
atualizados em qualquer referência de memória, assim, é essencial que eles sejam ativa-
dos pelo hardware. Uma vez que um bit for ativado, ele permanece ativado até que o
sistema operacional o desative (por software).

Os bits R e M podem ser usados para construir um algoritmo de paginação simples
como se segue. Quando um processo é iniciado, ambos os bits de página para todas es-
tas páginas são declarados 0 pelo sistema operacional. Periodicamente (i.e. a cada inter-
rupção de tempo), o bit R é zerado, para distinguir páginas que não foram referenciadas
recentemente daquelas que tenham sido.

Quando uma falta de página ocorre, o sistema operacional examina todas as páginas
e as classifica em 4 categorias baseado nos valores correntes de seus bits R e M:

• Classe 0: não referenciada, não modificada

• Classe 1: não referenciada, modificada

• Classe 2: referenciada, não modificada

• Classe 3: referenciada, modificada

Ainda que as páginas na classe 1 pareçam, à primeira vista, impossíveis de existir,
elas ocorrem quando as páginas da classe 3 têm seu bit R zerado pela interrupção de
tempo.

O algoritmo NRU remove uma página aleatória da classe de numeração mais baixa
não vazia. Implícito neste algoritmo é que é melhor remover uma página modificada que
não foi referenciada pelo menos no último clock, que uma página não modificada, mas
muito usada.

Sistemas Operacionais – Lucilia Ribeiro 112

11 – Memória Virtual

As características principais do NRU é que ele é fácil de entender, eficiente de se im-
plementar, e gera um desempenho que, embora não ótimo, é geralmente tido como ade-
quado.

f) LRU (Least Recently Used):

Uma boa aproximação para o algoritmo ótimo é baseada em uma observação comum
que as páginas muito usadas nas últimas instruções, provavelmente o serão nas próxi-
mas instruções. Da mesma forma, páginas que não têm sido usadas por um longo tempo
provavelmente continuarão sem uso. Esta observação sugere um algoritmo realizável. Na
ocorrência de uma falta de página, este algoritmo irá remover as páginas menos referen-
ciadas nas últimas instruções, pois ele parte do princípio que as páginas que foram refe-
renciadas nas últimas instruções continuarão sendo acessadas.

Embora o algoritmo LRU seja teoricamente realizável, seu custo é alto. Para imple-
mentação completa do LRU, é necessário manter uma lista ligada de todas as páginas em
memória, com a página mais recentemente usada no início e a menos recentemente u-
sada no final. A dificuldade é que a lista deve ser atualizada em toda referência de me-
mória. Encontrar a página na lista, removê-la de sua posição corrente, e movê-la para o
início representa um esforço não desprezível.

Manipular uma lista ligada a toda instrução é proibitivo, até mesmo em hardware. En-
tretanto, há outras maneiras de implementar LRU com um hardware especial. Vamos
considerar o caminho mais simples primeiro. Este método requer equipar o hardware
com um contador de 64 bits, C, que é automaticamente incrementado após cada instru-
ção. Além disso, cada entrada na tabela de páginas deve também ter um campo grande
o bastante para conter o contador. Após cada referência de memória, o corrente valor de
C é armazenado na entrada da tabela de páginas para a página referenciada. Quando
ocorre uma falta de página, o sistema operacional examina todos os contadores na tabe-
la de páginas para achar o menor deles. A página correspondente é a menos recente-
mente usada.

Agora vejamos um segundo algoritmo LRU, também em hardware. Para uma máqui-
na com N page frames, o LRU deve manter uma matriz de N x N bits, inicialmente todos
zero.

Sempre que uma moldura k for referenciada, o hardware coloca todos os bits da linha
k em 1, e depois zera todos os bits da coluna k. Em cada instante, a linha com o menor
valor binário armazenado será correspondente à página usada há mais tempo; aquela
com o próximo valor será a próxima usada há mais tempo, e assim por diante.

Um exemplo do funcionamento deste algoritmo aparece ilustrada na figura para qua-
tro molduras de página e a seguinte ordem de referências às páginas: 5 0 1 2 3 2 1 0 3 2
3 . Neste exemplo a página usada há mais tempo é a 1

Considerando-se o funcionamento dos algoritmos de substituição de páginas, é possí-
vel pensar, de início, que quanto maior for o número de page frames, menor será a ocor-
rência de faltas de páginas durante o período de execução de um processo. Entretanto,
estudos demonstraram que este pensamento nem sempre é verdadeiro e este fato ficou
conhecido como anomalia de Belady.

Um exemplo de ocorrência da mencionada anomalia encontra-se detalhado na Figura

3.16, onde é utilizado o algoritmo de substituição de páginas FIFO que, inicialmente, é

simulado com 3 page frames e apresenta 9 faltas de páginas. Em seguida, é realizada a

Sistemas Operacionais – Lucilia Ribeiro 113

11 – Memória Virtual

simulação do FIFO com 4 molduras de páginas e é observado que o número de falta de
páginas se eleva para 10.

Dessa forma, é possível verificar a presença da anomalia de Belady, pois a memória
física foi aumentada e o número de falta de páginas também.

Após a verificação da anomalia de Belady, muitos estudos foram desenvolvidos e foi
observado que alguns algoritmos não apresentavam tal anomalia e estes foram chama-
dos de algoritmos de pilha.

Obs.: 1) O LRU é um algoritmo de pilha e não apresenta a anomalia de Belady; 2) O
FIFO, como foi visto anteriormente, apresenta a anomalia de Belady.

11.5 SEGMENTAÇÃO

É a técnica de gerência de memória
onde o espaço de endereçamento virtual
é dividido em blocos de tamanhos dife-
rentes chamados segmentos. Cada
segmento tem um número e um tama-
nho, conforme pode ser observado na
Figura. Nesta técnica um programa é
dividido logicamente em sub-rotinas e
estruturas de dados, que são alocados
em segmentos na memória principal.

Enquanto na técnica de paginação o
programa é dividido em páginas de ta-
manho fixo, sem qualquer ligação com
sua estrutura, na segmentação existe uma relação entre a lógica do programa e sua alo-
cação na memória principal. Normalmente, a definição dos segmentos é realizada pelo
compilador, a partir do código fonte do programa, e cada segmento pode representar um
procedimento, uma função, vetor ou pilha.

Na segmentação, os endereços especificam o número do segmento e o deslocamento
dentro do mesmo.

Sistemas Operacionais – Lucilia Ribeiro 114

11 – Memória Virtual

Assim, para mapear um endereço virtual composto pelo par <segmento, deslocamen-
to> o hardware de segmentação considera a existência de uma tabela de segmentos.
Cada entrada da tabela de segmentos possui a base e o limite de cada segmento. A base
contém o endereço físico de início do segmento e o limite especifica o seu tamanho.

A figura apresentada a seguir ilustra o funcionamento do mapeamento de um endere-
ço virtual em um sistema que utiliza a segmentação.

Os segmentos podem se tornar muito grandes e, às vezes, pode ser impossível man-
ter todos na memória ao mesmo tempo. Para resolver este problema implementa-se a
paginação em cada um dos segmentos, dando origem, então, à segmentação paginada.

A seguir, um quadro comparando as técnicas de paginação e segmentação em função
de suas principais características:

11.6 SEGMENTAÇÃO PAGINADA

É a técnica de gerência de memória onde o espaço de endereçamento é dividido em
segmentos e, por sua vez, cada segmento é dividido em páginas. Esse esquema de ge-
rência de memória tem o objetivo de oferecer as vantagens de ambas as técnicas.

Na visão do programador, sua aplicação continua sendo mapeada em segmentos de
tamanhos diferentes, em função das sub-rotinas e estruturas de dados definidas no pro-
grama. Por outro lado, o sistema trata cada segmento como um conjunto de páginas do
mesmo tamanho, mapeadas por uma tabela de páginas associada ao segmento. Desta
forma, um segmento não precisa estar contíguo na memória principal, eliminando o pro-
blema da fragmentação externa encontrado na segmentação pura.

Sistemas Operacionais – Lucilia Ribeiro 115

11 – Memória Virtual

11.7 EXERCÍCIOS

149) Quais os benefícios oferecidos pela técnica de memória virtual? Como este
conceito permite que um programa e seus dados ultrapassem os limites da me-
mória principal?

150) Explique como um endereço virtual de um processo é traduzido para um ende-
reço real na memória principal?

151) Por que o mapeamento deve ser feito em blocos e não sobre células individu-
ais?

152) Qual a principal diferença entre os sistemas que implementam paginação e os
que implementam segmentação?

153) Diferencie página virtual de página real.

154) Para que serve o bit de validade nas tabelas de página?

155) Apresente o funcionamento binário da MMU de uma máquina hipotética para
encontrar a instrução correspondente de: MOVE REG, 700

156) O que é page fault , quando ocorre e quem controla a sua ocorrência? Como
uma elevada taxa de falta de página pode comprometer o Sistema Operacional?

157) Descreva como ocorre a fragmentação interna em sistemas que implementam
a paginação.

158) Compare as políticas de busca de páginas apresentadas.

159) Quais as vantagens e desvantagens da política de alocação de páginas variável
comparada à alocação fixa?

160) Um sistema com gerência de memória virtual por paginação possui tamanho
de página com 512 posições, espaço de endereçamento virtual com 512 páginas

Sistemas Operacionais – Lucilia Ribeiro 116

11 – Memória Virtual

endereçadas de 0 a 511 e memória real com 10 páginas numeradas de 0 a 9. o
conteúdo atual da memória real contém apenas informações de um único proces-
so e é descrito resumidamente na tabela abaixo:

Endereço Fixo Conteúdo
1536 Página Virtual 34
2048 Página Virtual 9
3072 Tabela de Páginas
3584 Página Virtual 65
4608 Página Virtual 10

a) Considere que a entrada da tabela de páginas contém, além do endereço do
frame, o número da página virtual. Mostre o conteúdo da tabela de páginas desse
processo.

b) Mostre o conteúdo da tabela de páginas após a página virtual 49 ser carre-
gada na memória a partir do endereço real 0 e a página virtual 34 ser substituída
pela página virtual 12.

c) Como é o formato do endereço virtual deste sistema?
d) Qual endereço físico está associado ao endereço virtual 4613?

161) Encontre o endereço físico correspondente aos seguintes endereços virtuais:

a) 67.219.712 b) 113.819.552 c) 545.591.437 d) 416.219.160

0 Æ 4–8k
. Æ 0–4k
3 Æ 16 – 20 k
4
. Æ 32 – 36 k
.
240
.
.
1023

0 . Æ 8 – 12 k
1 . Æ 60 – 64 k
2 67 Æ 40 – 44 k
. . Æ 12 – 16 k
. .
16 81 Æ 24 – 28 k
. .
27 94 Æ 36 – 40 k
. . Æ 52 – 54 k
99 1023 Æ 48 – 52 k
.
130 0
1023 .
.
27
.
.
139
.
.
1023

. Æ 44 – 48 k
240
Æ 20 – 24 k
.
139 Æ 54 – 60 k
Æ 28 – 32 k
.
.
1011
.
1023

Sistemas Operacionais – Lucilia Ribeiro 117

11 – Memória Virtual

162) Um Sistema Operacional implementa gerência de memória virtual por pagina-
ção, com frames de 2KB. A partir da tabela abaixo, que representa o mapeamento
de páginas de um processo em um determinado instante de tempo, responda:

Página Residente Frame a) Qual o endereço físico de uma variável que ocu-
0 Sim 20 pa o último byte da página 3?
1 Sim 40 b) Qual o endereço físico de uma variável que ocu-
2 Sim pa o primeiro byte da página 2?
3 Sim 100 c) Qual o endereço físico de uma variável que tem
4 Não 10 deslocamento 10 na página 3?
5 Não 50 d) Quais páginas do processo estão na memória?
6 Sim 70

1000

163) Um Sistema Operacional implementa gerência de memória virtual por pagina-
ção. Considere endereços virtuais com 16 bits, referenciados por um mesmo pro-
cesso durante sua execução e sua tabela de páginas abaixo com no máximo 256
entradas. Estão representadas apenas as páginas presentes na memória real. In-
dique para cada endereço virtual a seguir a página virtual em que o endereço se
encontra, o respectivo deslocamento e se a página se encontra na memória prin-
cipal nesse momento.

a) (307)10 Página Endereço Físico
b) (2049)10 0 8K
c) (2304)10 1 4K
2 24 K
3 0K
4 16 K
5 12 K
9 20 K
11 28 K

164) Uma memória virtual possui páginas de 1024 endereços, existem 8 páginas
virtuais e 4096 bytes de memória real. A tabela de páginas de um processo está
descrita abaixo. O asterisco indica que a página não está na memória principal:

Página Virtual Página Real a) Faça a lista/faixa de todos os endereços virtuais
0 3 que irão causar falta de página.
1 1 b) Indique o endereço real correspondente aos
2 * seguintes endereços virtuais 0, 1023, 1024, 6500 e
3 * 3728.
4 2
5 *
6 0
7 *

165) Porque existe a necessidade de uma política de substituição de páginas? Com-
pare as políticas de substituição local e global.

166) Para que serve o bit de modificação nas tabelas de páginas?

167) Como o princípio da localidade viabiliza a implementação da gerência de me-
mória virtual por paginação?

168) Por que programas não estruturados estão sujeitos a uma alta taxa de pagina-
ção?

169) Cite os principais algoritmos de substituição de páginas estudados. 118
Sistemas Operacionais – Lucilia Ribeiro

11 – Memória Virtual

170) Explique o funcionamento do algoritmo de substituição de páginas NUR.

171) Explique o funcionamento do algoritmo de substituição de páginas da segunda
chance.

172) Informe a principal desvantagem de se utilizar o algoritmo de substituição de
páginas da segunda chance.

173) Informe a principal vantagem que o algoritmo do relógio possui sobre o da se-
gunda chance.

174) Considere uma máquina com três molduras de página (page frames), as quais
estão inicialmente vazias. Assim sendo, informe quantas faltas de páginas serão
geradas com a utilização do algoritmo de substituição de páginas FIFO se a se-
qüência de referência às páginas for: 0, 1, 2, 3, 0, 1, 4, 1, 2, 3, 1 e 4.

175) Considere uma máquina com quatro molduras de página (page frames), as
quais estão inicialmente vazias. Assim sendo, informe quantas faltas de páginas
serão geradas com a utilização do algoritmo de substituição de páginas LRU se a
seqüência de referência às páginas for: 0, 1, 2, 3, 0, 1, 4, 1, 2, 3, 1, 4 e 5.

176) Considere uma máquina com quatro molduras de página (page frames), as

quais estão inicialmente vazias, e uma seqüência de referência às páginas igual a:

0, 1, 2, 3, 0, 1, 4, 1, 2, 3, 1, 4, 5, 4 e 1. Assim sendo, informe, justificando sua

resposta, quantas faltas de páginas serão geradas com a utilização de cada um

dos algoritmos de substituição de páginas abaixo relacionados:

a) FIFO b) LRU c) Segunda Chance

177) Qual é a principal desvantagem de se utilizar no projeto de um sistema pagi-
nado um tamanho de página considerado muito grande? E muito pequeno?

178) O que é a anomalia de Belady?

179) Considere um sistema com memória virtual por paginação com endereço vir-
tual com 24 bits e página com 2048 endereços. Na tabela de páginas a seguir, de
um processo em determinado instante, o bit de validade 1 indica página na me-
mória principal e o bit de modificação 1 indica que a página sofreu alteração.

Página BV BM End. do Frame a) Quantos bits possui o campo desloca-
mento do endereço virtual?
0 11 30.720 b) Qual o número máximo de entradas que
a tabela de páginas pode ter?
1 10 0 c) Qual o endereço físico que ocupa o últi-
mo endereço da página 2?
2 11 10.240 d) Qual o endereço físico traduzido do en-
dereço virtual (00080A)16?
3 01 * e) Caso ocorra uma falta de página e uma
das páginas do processo deva ser descar-
4 00 * tada, quais páginas poderiam sofrer page
out?
5 10 6.144

180) Considere um sistema de memória virtual que implemente paginação, onde o
limite de frames por processo é igual a três. Descreva para os itens abaixo, onde
é apresentada uma seqüência de referências a páginas pelo processo, o número
total de faltas de páginas para as estratégias de realocação de páginas FIFO e
LRU. Indique qual a mais eficaz para cada item:
a) 1 / 2 / 3 / 1 / 4 / 2 / 5 / 3 / 4 / 3
b) 1 / 2 / 3 / 1 / 4 / 1 / 3 / 2 / 3 / 3

Sistemas Operacionais – Lucilia Ribeiro 119

11 – Memória Virtual

181) Em um sistema de memória virtual que implementa paginação, as páginas
têm 4 K endereços, a memória principal possui 32 KB e o limite de páginas na
memória principal é de 8 páginas. Um programa faz referência a endereços virtu-
ais situados nas páginas 0, 2, 1, 9, 11, 4, 5, 2, 3, 1 nesta ordem. Após essa se-
qüência de acessos, a tabela de páginas completa desse programa tem a configu-
ração abaixo. As entradas em branco correspondem a páginas ausentes.

Página End. Físico a) Qual o tamanho (em bits) e o formato do endereço virtual?
0 8K
1 4K b) O processo faz novas referências a endereços virtuais situ-
2 ados nas páginas 5, 15, 12, 8 e 0 nesta ordem. Complete o
3 24 K quadro a seguir, que ilustra o processamento dessa seqüência
4 0K de acessos utilizando a estratégia de remoção FIFO. Mostre o
5 estado final da tabela de páginas.
6 16 K
7 12 K Página Página Falta de Página
8 Referenciada Removida (Sim / Não)
9 * 5
* 15
10 * 12
11 20 K 8
12 * 0
13 28 K
14 *
15 *
*
*

182) Em um computador, o endereço virtual é de 16 bits e as páginas têm tamanho
de 2K. O limite de páginas reais de um processo qualquer é de quatro páginas. I-
nicialmente, nenhuma página está na memória principal. Um programa faz refe-
rência a endereços virtuais situados nas páginas 0, 7, 2, 7, 5, 8, 9, 2 e 4, nesta
ordem.
a) Quantos bits do endereço virtual destinam-se ao número da página? E ao
deslocamento?
b) Ilustre o comportamento da política de substituição LRU mostrando, a cada
referência, quais páginas estão em memória, as faltas de páginas e as páginas
escolhidas para descarte.

183) Um sistema trabalha com gerência de memória virtual por paginação. Para to-
dos os processos do sistema, o limite de páginas na memória principal é igual a
10. Considere um processo que esteja executando um programa e em um deter-
minado instante de tempo (T) a sua tabela de páginas possui o conteúdo a seguir.
O bit de validade igual a 1 indica página na memória principal e o bit de modifica-
ção igual a 1 indica que a página sofreu alteração.

Número BV BM Endereço do Responda às perguntas abaixo, conside-
rando que os seguintes eventos ocorre-
da Página Frame (Hexa) rão nos instantes de tempo indicados:
(T + 1): O processo referencia um ende-
0 10 3303A5 reço na página 9 com page fault.
(T + 2): O processo referencia um ende-
1 10 AA3200 reço na página 1.
(T + 3): O processo referencia um ende-
2 10 111111 reço na página 10 com page fault.
(T + 4): O processo referencia um ende-
3 11 BFDCCA reço na página 3 com page fault.
(T + 5): O processo referencia um ende-
4 10 765BFC reço na página 6 com page fault.

5 10 654546 120

6 11 B6B7B0

7 11 999950

8 10 888BB8

9 00 N/A

10 0 0 N/A

Sistemas Operacionais – Lucilia Ribeiro

11 – Memória Virtual

a) Em quais instantes de tempo ocorrem um page out?
b) Em que instantes de tempo o limite de páginas do processo na memória
principal é atingido?
c) Caso a política de realocação de páginas utilizada seja o FIFO, no instante
(T + 1), qual a página que está há mais tempo na memória principal?
d) Como o sistema identifica que no instante de tempo (T + 2) não há ocor-
rência de falta de página?

184) Um sistema possui quatro frames. A tabela abaixo apresenta para cada página
o momento da carga, o momento do último acesso, o bit de referência e o bit de
modificação. Responda:

Frame Carga Referência BR BM a) Qual pagina será substituída utili-
0 126 279 0 0 zando o algoritmo NRU?
1 230 260 1 0 b) Qual pagina será substituída utili-
2 120 272 1 1 zando o algoritmo FIFO?
3 160 280 1 1 c) Qual pagina será substituída utili-
zando o algoritmo LRU?

185) Considere um processo com limite de páginas reais igual a quatro e um siste-
ma que implemente a política de substituição de páginas FIFO. Quantos page
faults ocorrerão considerando que as páginas virtuais são referenciadas na se-
guinte ordem: 0172327103. Repita o problema utilizando a política LRU e Segun-
da Chance

186) O que é trashing?

-x-

Sistemas Operacionais – Lucilia Ribeiro 121

12 – Sistema de Arquivos

12 Sistema de Arquivos

“Se o conhecimento pode criar problemas, não é através
da ignorância que podemos solucioná-los.” (Isaac Asimov)

12.1 INTRODUÇÃO

O sistema de arquivos é a parte do Sistema Operacional mais visível para os usuá-
rios. Por isso o sistema de arquivos deve apresentar uma interface coerente e simples.
Ao mesmo tempo, arquivos são normalmente implementados a partir de discos magnéti-
cos e como um acesso a disco demora cerca de 10000 vezes mais tempo do que um a-
cesso à memória principal. São necessárias estruturas de dados e algoritmos que otimi-
zem os acessos a disco gerados pela manipulação de arquivos.

É importante observar que sistemas de arquivos implementam um recurso em soft-
ware que não existe no hardware. O hardware oferece simplesmente espaço em disco,
na forma de setores que podem ser acessados individualmente, em uma ordem aleatória.
O conceito de arquivo, muito mais útil que o simples espaço em disco, é uma abstração
criada pelo Sistema Operacional. Neste caso, temos o Sistema Operacional criando um
recurso lógico a partir dos recursos físicos existentes no sistema computacional.

12.2 ARQUIVOS

São recipientes que contém dados. Cada arquivo é identificado por um nome e por
uma série de outros atributos que são mantidos pelo sistema operacional: tipo do conte-
údo, tamanho, último acesso, última alteração.

O Sistema Operacional suporta diversas operações sobre arquivos, como criação,
destruição, leitura, alteração, etc. Em geral, essas operações correspondem a chamadas
de sistema que os programas de usuários podem usar para manipular arquivos.

Existe, na prática, uma enorme quantidade de diferentes tipos de arquivos, cada tipo
com sua estrutura interna particular. Não é viável para o sistema operacional conhecer
todos os tipos de arquivos existentes. Em geral, os sistemas operacionais ignoram a es-
trutura interna dos arquivos.

Para o sistema operacional, cada arquivo corresponde a uma seqüência de bytes, cu-
jo significado é conhecido pelo usuário que criou o arquivo. A única exceção são os arqui-
vos que contêm programas executáveis. Nesse caso, a estrutura interna é definida pelo
próprio sistema operacional, responsável pela carga do programa para a memória quan-
do esse deve ser executado.

Como o conceito de tipo de arquivo é útil para os usuários, muitos sistemas operacio-
nais suportam nomes de arquivos onde o tipo é indicado. A forma usual é acrescentar
uma extensão no nome que identifique o tipo do arquivo em questão.

12.2.1 MÉTODO DE ACESSO

O acesso a arquivos pode se dar de duas maneiras:

Seqüencial: o conteúdo do arquivo pode ser lido seqüencialmente, pedaço a pedaço.
O acesso seqüencial é muito usado. Por exemplo, compiladores fazem uma leitura se-
qüencial dos programas fontes. A impressão de um arquivo é feita também a partir de
sua leitura seqüencial. Copiar o conteúdo de um arquivo corresponde a fazer uma leitura
seqüencial do arquivo origem e uma escrita seqüencial do arquivo destino.

Relativo: muitas aplicações não podem ser implementadas como acesso seqüencial,
pelo menos não com um desempenho aceitável. Nesse método de acesso, o programa
inclui na chamada de sistema qual a posição do arquivo a ser lida.

Sistemas Operacionais – Lucilia Ribeiro 122

12 – Sistema de Arquivos

12.2.2 IMPLEMENTAÇÃO DE ARQUIVOS

A forma básica de implementar arquivos é criar, para cada arquivo no sistema, um
descritor de arquivo. O descritor de arquivo é um registro no qual são mantidas as infor-
mações a respeito do arquivo: nome, extensão, tamanho, datas, usuários, etc.

O descritor de arquivo deve ficar em disco e de preferência na mesma partição do ar-
quivo. Só que, se a cada acesso ao descritor, o SO precisasse ler do disco, o sistema de
arquivos teria um péssimo desempenho.

Para tornar mais rápido o acesso aos arquivos, o sistema de arquivos mantém na
memória uma tabela contendo todos os descritores dos arquivos em uso, chamado Tabe-
la dos Descritores de Arquivos Abertos (TDAA). Quando um arquivo entra em uso, o seu
descritor é copiado do disco para a memória.

Quando o processo que está sendo executado faz uma chamada para abrir um arqui-
vo (open), o sistema de arquivos realiza as seguintes tarefas:

Localiza no disco o descritor de arquivo cujo nome foi fornecido. Caso o arquivo não
exista, é retornado um código de erro, que é passado para o processo que chamou o o-
pen. No caso de sucesso, retorna o par <partição, endereço do descritor>.

Verifica se o arquivo solicitado já se encontra aberto. Isso é feito através de uma
pesquisa na TDAA. Tal pesquisa é feita tendo como chave não o nome do arquivo, mas
sim o número da partição e o endereço do descritor.

Caso o arquivo não esteja aberto, aloca uma entrada livre na TDAA e copia o descri-
tor do arquivo que está no disco para a entrada alocada na TDAA.

Uma vez que o descritor do arquivo foi copiado para a memória, verifica se o proces-
so em questão tem o direito de abrir o arquivo conforme solicitado. Se não tiver, a en-
trada na TDAA é liberada e o open retorna um código de erro.

A partir desse momento, o arquivo está aberto e pode ser acessado. Quando um pro-
cesso realiza a chamada de sistema close, o número de processos utilizando o arquivo
em questão é decrementado na sua respectiva entrada da TDAA. Quando esse número
chega a zero, significa que nenhum processo está usando o arquivo. Nesse caso, o des-
critor do arquivo é atualizado em disco e a entrada da TDAA liberada.

As entradas da TDAA armazenam informações que não variam conforme o processo
que está acessando o arquivo. Por exemplo, o tamanho do arquivo é o mesmo, não im-
porta qual processo execute o read ou write. Entretanto, existem informações diretamen-
te associadas com o processo que acessa o arquivo. Como por exemplo a posição corren-
te no arquivo. Em um dado instante, cada processo deseja acessar uma parte diferente
do arquivo. Da mesma forma, alguns processos podem abrir o arquivo para apenas leitu-
ra, enquanto outros abrem para leitura e escrita.

Essas informações não podem ser mantidas na TDAA pois, como vários processos po-
dem acessar o mesmo arquivo, elas possuirão um valor diferente para cada processo. A
solução é criar, para cada processo, uma Tabela de Arquivos Abertos por Processo (TA-
AP). Cada processo possui a sua TAAP. Cada entrada ocupada na TAAP corresponde a um
arquivo aberto pelo processo correspondente. No mínimo, a TAAP contém em cada en-
trada: posição corrente no arquivo, tipo de acesso e apontador para a entrada corres-
pondente na TDAA.

No exemplo, o processo 0 acessa o arquivo B através de referências a entrada 1 da
sua TAAP. Muitos sistemas operacionais chamam esse número de handle do arquivo.

Sistemas Operacionais – Lucilia Ribeiro 123

12 – Sistema de Arquivos

TAAP do Processo TDAA

0

Pos.Cor.12 Arquivo
A
0 Leitura 0

0

Pos.Cor.55

1 Leitura/Escrita 1
2

2 Arquivo
B

3

TAAP do Processo 4

1

Pos.Cor.10

0 Leitura

2

12.3 MÉTODOS DE ALOCAÇÃO

Para o SO, cada arquivo corresponde a uma seqüência de blocos lógicos, numerados
a partir do zero. É preciso mapear os números de blocos lógicos desse arquivo em nú-
meros de blocos físicos. A maneira como o mapeamento é realizado depende de como é
mantida a informação “onde o arquivo está no disco”.

12.3.1 ALOCAÇÃO CONTÍGUA

Bloco Físico DISCO
0
1 Descritor
2 Início: 3
3 Bloco 0 Tamanho: 6
4 Bloco 1
5 Bloco 2
6 Bloco 3
7 Bloco 4
8 Bloco 5
9
10
11
12
13

Dos métodos que objetivam associar blocos de disco a arquivos existentes, a aloca-
ção contígua é o mais simples. Neste método, os arquivos são armazenados no disco
como um bloco contíguo de dados. Assim, para armazenar um arquivo de 70K em um
disco com blocos de 1K seriam necessários 70 blocos consecutivos.

Vantagens:

Sistemas Operacionais – Lucilia Ribeiro 124

12 – Sistema de Arquivos

• Simplicidade de implementação, pois para se acessar todo o arquivo basta que seja
conhecido o endereço de seu primeiro bloco;

• Performance excelente, pois a leitura do arquivo em disco pode acontecer em uma
única operação.

Desvantagens:

• O tamanho máximo do arquivo tem que ser conhecido no momento em que ele for
criado;

• Ocasiona fragmentação no disco.

12.3.2 ALOCAÇÃO COM LISTA LIGADA

Neste método, cada bloco físico contém o endereço do próximo bloco físico alocado a
esse mesmo arquivo.

Vantagens:

• Evita-se a perda de espaço em disco ocasionado pela fragmentação;

• Para se acessar todo o arquivo, basta que seja conhecido o endereço de seu primei-
ro bloco.

Desvantagens:

• Acesso randômico lento e difícil de ser implementado

DISCO

Bloco Físico 0

1 Bloco 3 7

2

3 Bloco 0 8 Descritor

4 Início: 3

5 Bloco 2 1 Tamanho: 6

6

7 Bloco 4 11

8 Bloco 1 5

9

10

11 Bloco 5 -1

12

13

12.3.3 ALOCAÇÃO COM LISTA LIGADA USANDO UM ÍNDICE

Com a finalidade de se eliminar os problemas encontrados no caso anterior, nesse
método, cada arquivo possui uma tabela de índices. Cada entrada da tabela de índices
contém o endereço de um dos blocos físicos que forma o arquivo.

Vantagens:

• Facilidade para se implementar um acesso randômico rápido, pois as entradas a se-
rem seguidas encontram-se na memória

• Para se acessar todo o arquivo basta que a entrada de diretório contenha o endere-
ço de seu primeiro bloco.

Desvantagens: 125
Sistemas Operacionais – Lucilia Ribeiro

12 – Sistema de Arquivos

• Toda a tabela deve estar na memória durante todo o tempo.

DISCO DESCRITOR

Bloco Físico 0 Tamanho: 5

1 Bloco 3 Índices: 0 3

2 18

3 Bloco 0 25

4 31

5 Bloco 2 47

65

7 Bloco 4 6

8 Bloco 1 7

98

12.4 GERÊNCIA DE ESPAÇO EM DISCO

Existem alguns métodos que objetivam associar blocos de disco a arquivos exis-
tentes, no entanto, algumas considerações necessitam ser feitas com relação ao tama-
nho do bloco (unidade de alocação):

Unidade de alocação muito grande: causará desperdício de espaço dentro da unidade
de alocação quando o arquivo for menor que a mesma;

Unidade de alocação muito pequena: um arquivo de tamanho razoável será composto
de várias unidades de alocação (blocos) e a sua leitura do disco será lenta, pois a leitura
de cada um dos blocos leva um certo tempo, devido ao tempo de seek e à latência rota-
cional do disco.

Obs.: Normalmente, temos blocos de tamanhos que variam de 512 bytes até 2KB.

12.5 CONTROLE DE BLOCOS LIVRES

Existem quatro maneiras mais usuais de se realizar o controle dos blocos não uti-
lizados do disco:

12.5.1 MAPA DE BITS

Cada bloco é representado por 1 bit. Se o bloco estiver livre, o bit será 1; se ele
estiver alocado, o bit será 0.

12.5.2 LISTA ENCADEADA

Outra abordagem é encadear os blocos de discos livres, mantendo um ponteiro ao
primeiro bloco livre. Tal bloco contém um ponteiro ao próximo bloco livre, e assim por
diante.

12.5.3 AGRUPAMENTO

Uma modificação da abordagem de lista livre é armazenar os endereços de n blo-
cos livres no primeiro bloco livre. Os primeiros n-1 desses blocos estão realmente livres.
O bloco final contém os endereços de outros n blocos livres, e assim por diante.

12.5.4 CONTADORES

Outra abordagem é aproveitar o fato de que, em geral, vários blocos contíguos
podem ser alocados ou liberados simultaneamente, sobretudo quando o espaço é alocado
com o algoritmo de alocação contígua. Portanto, em vez de manter uma lista de n ende-
reços de disco livres, podemos manter o endereço do primeiro bloco livre e o número n
de blocos contíguos livres que seguem esse primeiro bloco.

Sistemas Operacionais – Lucilia Ribeiro 126

12 – Sistema de Arquivos

12.6 CONSISTÊNCIA DO SISTEMA DE ARQUIVOS

É importante que após uma pane no computador, o seu sistema de arquivos possa
permanecer consistente. Para tal, alguns sistemas operacionais rodam um programa uti-
litário que faz a verificação do sistema de arquivos sempre que alguma pane ocorre. O
UNIX utiliza o fsck e o Windows usa o scandisk.

O referido programa utilitário realiza, por exemplo, a verificação de consistência
em blocos.

12.6.1 CONSISTÊNCIA EM BLOCOS

Neste tipo de verificação, o programa utilitário constrói uma tabela possuindo dois
contadores: um indica quantas vezes um determinado bloco está presente em um arqui-
vo e o outro informa quantas vezes um determinado bloco aparece como estando livre.

Situações indesejadas possíveis:

• Um bloco não possui ocorrência em nenhum arquivo e ele também não apare-
ce na lista de blocos livres (bloco perdido).

Solução: colocar o bloco perdido na lista de blocos livres.

• Um bloco aparece duas vezes na lista de blocos livres.

Solução: reconstruir a lista de blocos livres.

• Um bloco está presente em mais de um arquivo.

Solução: alocar um novo bloco e copiar nele o conteúdo do bloco problemático. Em
seguida, fazer um dos arquivos apontar para este novo bloco.

• Um bloco está presente em um arquivo e também na lista de blocos livres.

Solução: remover o bloco da lista de blocos livres.

12.7 PERFORMANCE DO SISTEMA DE ARQUIVOS

Sabemos que acessar arquivos localizados em discos é uma tarefa que consome
um tempo relevante de um sistema computacional. Sendo assim, o projeto de um siste-
ma de arquivos que possua uma boa performance deve procurar reduzir ao máximo pos-
sível o acesso a discos.

Dentre as técnicas mais utilizadas para diminuir o acesso ao disco, podemos des-
tacar:

12.7.1 CACHE

A cache corresponde a um agrupamento de blocos que pertencem logicamente ao
disco porém, se encontram armazenados em uma memória de alta velocidade, objeti-
vando, assim, elevar a performance do sistema de arquivos.

Os algoritmos de substituição de páginas estudados (ótimo, NUR, FIFO, segunda
chance, relógio e LRU) podem ser utilizados para gerenciar a cache.

Problema: Em caso de pane, os blocos que se encontram na cache podem não ser
salvos no disco.

Solução: UNIX: implementa a chamada SYNC, que faz com que todos os blocos que
sofreram modificações sejam imediatamente copiados para o disco.

Obs.: Quando o sistema é inicializado, um programa em background realiza uma
chamada SYNC a cada 30 segundos.

MS-DOS: implementa a estratégia write-through, na qual a alteração em um bloco
implica em sua cópia imediata para o disco.

12.7.2 LEITURA ANTECIPADA DE BLOCOS

A segunda técnica para melhorar o desempenho do sistema de arquivos é tentar

transferir os blocos para a cache antes que eles sejam necessários para aumentar a taxa

de acertos.

Sistemas Operacionais – Lucilia Ribeiro 127

12 – Sistema de Arquivos

Problema: Tal estratégia só funciona para arquivos que estejam sendo lidos seqüen-
cialmente. Para um arquivo com acesso aleatório, a leitura antecipada piora a situação,
fazendo leituras em blocos não usados e removendo blocos potencialmente úteis da ca-
che.

Solução: Para verificar se vale a pena fazer a leitura antecipada, o sistema de arqui-
vos pode monitorar os padrões de acesso de cada arquivo aberto. Por exemplo, um bit
associado a cada arquivo indica se o arquivo está em “modo de acesso seqüencial” ou
em um “modo de acesso aleatório”.

12.7.3 REDUÇÃO DO MOVIMENTO DO BRAÇO DO DISCO

Esta técnica objetiva gravar os blocos que serão mais acessados o mais perto
possível uns dos outros, e será detalhada no próximo capítulo.

12.8 EXERCÍCIOS

187) Considerando que a unidade de alocação física é de 2k, o tamanho da memó-
ria secundária é de 64k e a primeira unidade de alocação está ocupada com a ta-
bela de arquivos, faça o mapa de bits final depois de todos os passos a seguir. Em
seguida, faça a tabela de contadores, de agrupamento e a lista ligada mostrando
os espaços livres:
a) Escrever o arquivo A de 11k
b) Escrever o arquivo B de 6k
c) Remover o arquivo A
d) Alocar o arquivo C seqüencial, de 15k.
e) Escrever o arquivo D com 31K, não seqüencial.
f) Remover o arquivo B

188) Qual a diferença entre fragmentação externa e fragmentação interna? De-
monstre graficamente.

189) Relacione a Tabela de Descritores de Arquivos Abertos (TDAA) e a Tabela de
Arquivos Abertos por Processo (TAAP), ilustrando e citando exemplos. Simule si-
tuações de processos sendo executados e abrindo ou criando arquivos.

190) Cite as vantagens e desvantagens dos métodos de alocação: contígua, enca-
deada e indexada. Demonstre através de figuras.

191) Existem alguns métodos que objetivam associar blocos de disco a arquivos e-
xistentes. No entanto, algumas considerações necessitam ser feitas com relação
ao tamanho do bloco. Porque não se deve ter unidades de alocação nem tão
grandes nem tão pequenas?

192) Considere que o sistema operacional XYZ utiliza contadores para o controle de
seus blocos livres. A lista está reproduzida abaixo. Monte o mapa de bits, agru-
pamento e a lista encadeada partindo dos contadores observados:

26 4

10 7

02 3

193) Partindo agora de um mapa de bits utilizado para controle de blocos livres,
monte uma tabela de agrupamento, considerando n = 5: 11101101 – 10101000 –
11001100 – 11100000 – 11111011 – 00100100 – 00000000

-x-

Sistemas Operacionais – Lucilia Ribeiro 128

13 – Gerência de Dispositivos

13 Gerência de Dispositivos

“A teoria sempre acaba, mais cedo ou mais tarde, assassinada pela experiência.”
(Albert Einstein)

13.1 INTRODUÇÃO

A Gerência de Dispositivos de entrada/saída é uma das principais e mais complexas
funções de um Sistema Operacional. Sua implementação é estruturada através de cama-
das. As camadas de mais baixo nível escondem características dos dispositivos das ca-
madas superiores, oferecendo uma interface simples e confiável ao usuário e suas aplica-
ções.

As camadas são divididas em dois grupos, onde o primeiro grupo visualiza os diversos
tipos de dispositivos do sistema de um modo único (Fig. a), enquanto o segundo é espe-
cífico para cada dispositivo (Fig. b). A maior parte das camadas trabalha de forma inde-
pendente do dispositivo.

13.2 ACESSO AO SUBSISTEMA DE ENTRADA E SAÍDA

O Sistema Operacional deve tornar as operações de E/S o mais simples possível para
o usuário e suas aplicações. Para isso, o sistema possui um conjunto de rotinas, denomi-
nado rotinas de entrada/saída, que faz parte do subsistema de E/S e permite ao usuário
realizar operações de E/S sem se preocupar com detalhes do dispositivo que está sendo
acessado. Nesse caso, quando um usuário cria um arquivo em disco, não lhe interessa
como é a formatação do disco, nem em que trilha ou setor o arquivo será gravado.

As operações de E/S devem ser realizadas através de chamadas de sistemas que
chamam as rotinas de E/S do núcleo do Sistema Operacional. Dessa forma, é possível

Sistemas Operacionais – Lucilia Ribeiro 129

13 – Gerência de Dispositivos

escrever um programa que manipule arquivos, este-
jam eles em disquetes, discos rígidos ou CD-Rom,
sem ter que alterar o código para cada tipo de dispo-
sitivo.

A maneira mais simples de ter acesso a um dispo-
sitivo é através de comandos de leitura/gravação e
chamadas a bibliotecas de rotinas oferecidas por lin-
guagens de alto nível, como C. A comunicação entre
os comandos de E/S oferecidos pelas linguagens de
programação de alto nível e as chamadas de sistema
de E/S é feita simplesmente através de passagem de
parâmetros.

Um dos objetivos principais das chamadas de sis-
tema de E/S é simplificar a interface entre as aplica-
ções e os dispositivos. Com isso, elimina-se a neces-
sidade de duplicação de rotinas idênticas nos diversos
aplicativos, além de esconder do programador carac-
terísticas específicas associadas à programação de
cada dispositivo.

As operações de E/S podem ser classificadas con-
forme o seu sincronismo. Uma operação é dita síncro-
na quando o processo que realizou a operação fica
aguardando no estado de espera pelo seu término.
Assíncrona é quando o processo que realizou a opera-
ção não aguarda pelo seu término e continua pronto para ser executado. Neste caso, o
sistema deve oferecer algum mecanismo de sinalização que avise ao processo que a ope-
ração foi terminada.

13.3 SUBSISTEMA DE ENTRADA E SAÍDA

O subsistema de E/S é responsável por realizar as funções comuns a todos os tipos
de dispositivos. É a parte do Sistema Operacional que oferece uma interface uniforme
com as camadas superiores.

Independência de Dispositivos: Cada dispositivo trabalha com unidades de informa-
ção de tamanhos diferentes, como caracteres ou blocos. O subsistema de E/S é respon-
sável por criar uma unidade lógica de transferência do dispositivo e repassá-la para os
níveis superiores, sem o conhecimento do conteúdo da informação.

Tratamento de Erros: Normalmente, o tratamento de erros nas operações de E/S é
realizado pelas camadas mais próximas ao hardware. Existem, porém, certos erros que
podem ser tratados e reportados de maneira uniforme pelo sistema de arquivos, inde-
pendentemente do dispositivo. Erros como a gravação em dispositivos de entrada, leitura
em dispositivos de saída e operações em dispositivos inexistentes podem ser tratados
nesse nível.

Compartilhamento: Todos os dispositivos de E/S são controlados, com o objetivo de
obter o maior compartilhamento possível entre os diversos usuários de forma segura e
confiável. Alguns dispositivos podem ser compartilhados simultaneamente, outros, como
a impressora, devem ter acesso exclusivo, e o sistema deve controlar seu compartilha-
mento de forma organizada. É responsável também por implementar todo um mecanis-
mo de proteção de acesso aos dispositivos. No momento que o usuário realiza uma ope-
ração de E/S, é verificado se o seu processo possui permissão para realizar a operação.

Bufferização: Essa técnica permite reduzir o número de operações de E/S, utilizando
uma área de memória intermediária chamada de buffer. Por exemplo, quando um dado é
lido do disco, o sistema traz para a área de buffer não só o dado solicitado, mas um blo-
co de dados. Caso haja uma solicitação de leitura de um novo dado que pertença ao blo-
co anteriormente lido, não existe a necessidade de uma nova operação de E/S, melho-
rando desta forma a eficiência do sistema.

Sistemas Operacionais – Lucilia Ribeiro 130

13 – Gerência de Dispositivos

Interface Padronizada: O subsistema de E/S deve oferecer uma interface padronizada
que permita a inclusão de novos drivers sem a necessidade de alteração da camada de
subsistema de E/S.

13.4 DEVICE DRIVERS

Tem como função implementar a comunicação do subsistema de E/S com os disposi-
tivos, através de controladores. Os drivers tratam de aspectos particulares dos dispositi-
vos. Recebem comandos gerais sobre acessos aos dispositivos e traduzem para coman-
dos específicos, que poderão ser executados pelos controladores. Além disso, o driver
pode realizar outras funções, como a inicialização do dispositivo e seu gerenciamento.

Por exemplo, na leitura síncrona de um dado em dis-
co, o driver recebe a solicitação de um determinado blo-
co e informa ao controlador o disco, cilindro, trilha e
setor que o bloco se localiza, iniciando, dessa forma, a
operação. Enquanto se realiza a leitura, o processo que
solicitou a operação é colocado no estado de espera até
que o controlador avise a UCP do término da operação
através de uma interrupção que, por sua vez, ativa no-
vamente o driver. Após verificar a inexistência de erros,
o driver transfere as informações para a camada superi-
or. Com os dados disponíveis, o processo pode ser reti-
rado do estado de espera e retornar ao estado de pronto
para continuar seu processamento.

Os drivers fazem parte do núcleo do Sistema Operacional, sendo escritos geralmente
em assembly. Devido ao alto grau de dependência entre os drivers e o restante do nú-
cleo do SO, os fabricantes desenvolvem, para um mesmo dispositivo, diferentes drivers,
um para cada Sistema Operacional. Sempre que um novo dispositivo é instalado, o driver
deve ser adicionado ao núcleo do sistema. Nos sistemas mais antigos, a inclusão de um
novo driver significava a recompilação do kernel, uma operação complexa e que exigia a
reinicialização do sistema. Atualmente, alguns sistemas permitem a fácil instalação de
novos drivers sem a necessidade de reinicialização.

13.5 CONTROLADORES

Sistemas Operacionais – Lucilia Ribeiro São componentes de hardware
responsáveis por manipular direta-
mente os dispositivos de E/S. Possu-
em memória e registradores próprios
utilizados na execução de instruções
enviadas pelo driver. Em operações
de leitura, o controlador deve arma-
zenar em seu buffer interno uma se-
qüência de bits proveniente do dispo-
sitivo até formar um bloco. Após veri-
ficar a ocorrência de erros, o bloco
pode ser transferido para um buffer
de E/S na memória principal. A trans-

131

13 – Gerência de Dispositivos

ferência do bloco pode ser realizado pela UCP ou por um controlador de DMA (Acesso
Direto à Memória). O uso da técnica de DMA evita que o processador fique ocupado com
a transferência do bloco para a memória.

De forma simplificada, uma operação de leitura em disco utilizando DMA teria os se-
guintes passos: 1) A UCP, através do driver, inicializa os registradores do controlador de
DMA e, a partir desse ponto, fica livre para realizar outras atividades. 2) O controlador de
DMA solicita ao controlador de disco a transferência do bloco do disco para o seu buffer
interno. 3) Terminada a transferência, o controlador de disco verifica a existência de er-
ros. 4) Caso não haja erros, o controlador de DMA transfere o bloco para o buffer de E/S
na memória principal. 5) Ao término da transferência, o controlador de DMA gera uma
interrupção avisando ao processador que o dado já se encontra na memória principal.

13.6 DISPOSITIVOS DE ENTRADA E SAÍDA

São utilizados para permitir a comunicação entre o sistema computacional e o mundo
externo.

A transferência de dados pode ocorrer através de blocos de informação ou caracteres,
por meio dos controladores dos dispositivos. Em função da forma com que os dados são
armazenados, os dispositivos de E/S podem ser classificados em duas categorias: estru-
turados e não-estruturados. Os dispositivos estruturados (block devices) caracteri-
zam-se por armazenar informações em blocos de tamanho fixo, possuindo cada qual um
endereço que pode ser lido ou gravado de forma independente dos demais. Discos mag-
néticos e ópticos são exemplos.

Os dispositivos estruturados classificam-se em dispositivos de acesso direto e se-
qüencial, em função da forma com que os blocos são acessados. Acesso direto é quan-
do um bloco pode ser recuperado diretamente através de um endereço, como por exem-
plo o disco magnético. Acesso seqüencial é quando, para se acessar um bloco, o dispo-
sitivo deve percorrer sequencialmente os demais blocos até encontrá-lo. A fita magnética
é um bom exemplo.

Os dispositivos não-estruturados (character devices) são aqueles que enviam ou re-
cebem uma seqüência de caracteres sem estar estruturada no formato de um bloco. A
seqüência de caracteres não é endereçável, não permitindo operações de acesso direto
ao dado. Terminais, impressoras e interfaces de rede são exemplos de tais dispositivos.

13.7 DISCOS RÍGIDOS

Fisicamente, um dis-
co rígido pode ser visto
como composto por dois
grandes blocos. O pri-
meiro bloco é um con-
junto de discos metáli-
cos (aço ou alumínio)
superpostos e dispostos
em alturas diferentes
com auxílio de um eixo
central. As duas superfí-
cies de cada um desses
discos são recobertas
por uma película magné-
tica na qual os dados
são gravados. No mo-
mento de acesso ao dis-
co, essa estrutura é
mantida em uma rota-
ção constante (36000
rpm, por exemplo). O
segundo bloco é uma
estrutura mecânica que suporta um conjunto de cabeçotes, um para cada superfície de

Sistemas Operacionais – Lucilia Ribeiro 132

13 – Gerência de Dispositivos

disco. Essa estrutura é capaz de realizar movimentos de vai-e-vem de maneira que os
cabeçotes possam ser deslocados desde a borda do disco até o centro. Graças ao movi-
mento de rotação dos discos e ao movimento retilíneo dos cabeçotes, toda a superfície
de cada disco pode ser alcançada por seu respectivo cabeçote.

Do ponto de vista da organização lógica, cada superfície de um disco é dividida em
circunferências concêntricas denominadas trilhas. Cada trilha, por sua vez, é subdivida
radialmente em unidades chamadas setores. Em geral todos os setores tem o mesmo
tamanho, o qual varia entre 512 a 4096 bytes. O setor constitui a unidade mínima de
leitura e gravação em um disco. O conjunto de trilhas de todas as superfícies do disco
que ficam exatamente à mesma distância do eixo central forma o cilindro. A definição de
trilhas e de setores em um disco chama-se formatação física e é um procedimento reali-
zado no fabricante.

Outros termos bastante comuns associados a discos rígidos são formatação lógica e
partições. Ambos os conceitos estão mais relacionados com o sistema de arquivos do que
com o disco propriamente dito. A formatação lógica consiste em gravar informações no
disco de forma que arquivos possam ser escritos, lidos e localizados pelo sistema opera-
cional.

13.7.1 TEMPO DE ACESSO

Para realizar um acesso a um disco rígido, é necessário posicionar o cabeçote de
leitura e escrita sob um determinado setor e trilha onde o dado será lido ou escrito. Con-
siderando-se a organização de um disco, esse procedimento de posicionamento implica
um certo tempo: o tempo de acesso. O tempo de acesso é definido por três fatores:

Tacesso = tseek + tlatência + ttransferência

Tempo de Seek: tempo de locomoção do braço do disco até o cilindro desejado;

Latência Rotacional: tempo para que o setor desejado passe sob a cabeça de leitura;

Tempo de Transferência: tempo de transferência propriamente dito.

13.7.2 ENTRELAÇAMENTO (interleaving)

É muito comum o acesso a vários setores contíguos em uma trilha do disco. Su-
ponha que se deseja ler os setores 4 e 5 de uma determinada trilha. O sistema operacio-
nal envia à controladora de disco o comando para ler o setor 4. Após o seek apropriado,
o cabeçote passa sobre o setor 4, a transferência ocorre. Quando o cabeçote sai do setor
4, os dados são transferidos do buffer do controlador de disco para a memória, provo-
cando uma interrupção no processador para informar o término da leitura do setor 4.
Nesse momento, o processador (via sistema operacional) envia um novo comando de
leitura para o setor 5. um novo seek não será necessário, pois o cabeçote de leitura já se
encontra sobre o cilindro desejado. Entretanto, devido à rotação do disco, o cabeçote
provavelmente não se encontra mais no início do setor 5. Será necessário esperar que o
disco dê uma volta completa (tempo de latência) para então efetuar a leitura do setor 5.

Sistemas Operacionais – Lucilia Ribeiro 133

13 – Gerência de Dispositivos

A forma usual para evitar esse problema é realizar um entrelaçamento dos setores
(interleaving). Essa técnica numera os setores não mais de forma contígua mas sim com
um espaço entre eles. Um disco com fator de entrelaçamento ou interleaving 2, significa
que entre o setor k e o setor k+1, existem dois outros setores.

Voltando ao exemplo no qual os setores 4 e 5 são lidos, mas agora considerando
um entrelaçamento de 2, observamos que, após o cabeçote sair do setor 4, ele passa por
outros dois setores antes de chegar no início do setor 5. desta forma, a transferência dos
dados relativos ao setor 4 pode ser concluída, e o processador tem a chance de mandar o
comando de leitura do setor 5 antes que o cabeçote passe sobre o início do mesmo.

O melhor fator de entrelaçamento para uma determinada unidade de disco de-
pende da velocidade do processador, do barramento, do controlador e da velocidade de
rotação do disco.

13.7.3 ESCALONAMENTO DO BRAÇO DO DISCO

Como já vimos, uma das principais funções do sistema operacional é gerenciar os
recursos do sistema de forma eficaz. O problema no caso do disco rígido está em como
ordenar e atender os pedidos de entrada e saída de forma a maximizar o atendimento e
minimizar o tempo em que os processos permanecerão bloqueados.

O tempo necessário a uma operação de entrada e saída com discos é fortemente
influenciado pelo tempo de acesso ao disco. O objetivo então é minimizar os movimentos
da cabeça de leitura e maximizar o número de bytes transferidos (throughtput) de forma
a atender o maior número possível de requisições no menor intervalo de tempo possível.
Para resolver esse problema, existe um conjunto de algoritmos para realizar a movimen-
tação do cabeçote de leitura do disco, alguns tentando otimizar a movimentação entre as
trilhas e outros tentando aproveitar o percurso das cabeças de leitura:

a) 7.3.1. Primeiro a Entrar, Primeiro a Ser Servido (FCFS)
Neste algoritmo, o driver só aceita uma requisição de cada vez. O atendimento às re-
quisições é feito considerando-se a ordem de chegada das mesmas.
Requisição : 11, 1, 36, 16, 34, 9 e 12
Deslocamento do Braço: 10, 35, 20, 18, 25 e 3
Total Percorrido: 111

b) 7.3.2. Menor Seek Primeiro (SSF)

Neste algoritmo, a próxima requisição a ser atendida será aquela que exigir o menor
deslocamento do braço do disco.

Requisição: 11, 1, 36, 16, 34, 9 e 12

Seqüência de acesso: 11, 12, 9, 16, 1, 34 e 36

Sistemas Operacionais – Lucilia Ribeiro 134

13 – Gerência de Dispositivos

Deslocamento do Braço: 1, 3, 7, 15, 33 e 2

Total Percorrido: 61

Obs.: O SSF reduz quase metade do movimento do braço do disco, quando

comparado com o FCFS, porém apresenta tendência em acessar o meio do disco, poden-

do levar um pedido de acesso à postergação indefinida.

c) 7.3.3. Algoritmo do Elevador (Scan)

Como o próprio nome do algoritmo sugere, este faz com que todas as requisições em
um determinado sentido sejam atendidas. Depois, as demais requisições em sentido o-
posto serão atendidas.

Requisição: 11, 1, 36, 16, 34, 9 e 12

Seqüência de acesso: 11, 12, 16, 34, 36, 9 e 1

Deslocamento do Braço: 1, 4, 18, 2, 27 e 8

Total Percorrido: 60

d) 7.3.4. Algoritmo C-Scan

O algoritmo Scan, imediatamente após inverter a varredura, inicia o atendimento pri-
vilegiando os pedidos correspondentes aos cilindros recém servidos, por conseqüência os
pedidos dos cilindros do outro extremo da varredura, feitos anteriormente, devem espe-
rar. O algoritmo C-Scan é uma variação do Scan com o objetivo de eliminar esse privilé-
gio.

Nesse caso, quando a varredura atinge o último cilindro, o cabeçote é posicionado no
primeiro cilindro onde reinicia a varredura. Em outros termos, os pedidos são atendidos
em um só sentido da varredura.

Requisição: 11, 1, 36, 16, 34, 9 e 12

Seqüência de acesso: 11, 12, 16, 34, 36, 1 e 9

Sistemas Operacionais – Lucilia Ribeiro 135

13 – Gerência de Dispositivos

Deslocamento do Braço: 1, 4, 18, 2, 35 e 8
Total Percorrido: 68
13.8 EXERCÍCIOS

194) Explique o modelo de camadas aplicado na gerência de dispositivos

195) Qual a principal finalidade das rotinas de E/S?

196) Quais as diferentes formas de um programa chamar rotinas de E/S?

197) Quais as principais funções do subsistema de E/S?

198) Qual a principal função de um driver?

199) Por que o sistema de E/S deve criar uma interface padronizada com os device
drivers?

200) Explique o funcionamento da técnica de DMA e sua principal vantagem.

201) Diferencie os dispositivos de E/S estruturados dos não-estruturados.

202) Desenhe um disco com 21 setores e um fator 3 de entrelaçamento. Mostre
agora porque há uma minimização no tempo de acesso utilizando esse artifício.

203) As requisições do disco chegam ao driver do disco na seguinte ordem dos ci-
lindros: 10, 22, 20, 2, 40, 6 e 38. Um posicionamento leva 6ms por cilindro movi-
do. Quanto tempo é necessário para os algoritmos FCFS, SSF, Scan e C-Scan,
considerando que o braço está inicialmente no cilindro 20?

204) Monte um quadro mostrando a seqüência do braço, o deslocamento a cada
instante e o deslocamento total percorrido pelo braço utilizando os algoritmos
FCFS, SSF, Scan e C-Scan. Considere as seguintes requisições e que o braço es-
tava em repouso:

Chegada Requisições
0 1, 6, 20
2 13
3 5, 19
4 7, 9, 15
5 18, 32

-x-

Sistemas Operacionais – Lucilia Ribeiro 136

14 – Multimídia

14 Multimídia

“A precisão numérica é a própria alma da ciência.”
(D’arcy Wentworth Thompson)

14.1 INTRODUÇÃO

Filmes, fotos e música digitais estão se tornando, cada vez mais, meios comuns de
apresentar informação e entretenimento usando um computador. Arquivos de áudio e
vídeo podem ser armazenados em um disco e reproduzidos sob demanda. Contudo, suas
características são muito diferentes dos tradicionais arquivos de texto para os quais fo-
ram projetados os atuais sistemas de arquivos. Como conseqüência, são necessários no-
vos tipos de sistema de arquivos. Mais ainda: o armazenamento e a reprodução de áudio
e vídeo impõem novas exigências ao escalonador e também a outras partes do sistema
operacional.

A grande busca do mundo multimídia atualmente, é o vídeo sob demanda, que impli-
ca a capacidade de um consumidor em casa, selecionar um filme usando o controle re-
tomo to televisor (ou o mouse) e ter esse filme imediatamente exibido na tela de sua
televisão (ou monitor de seu computador). Para viabilizar o vídeo sob demanda é neces-
sária uma infra-estrutura especial. Na Figura vemos duas dessas infra-estruturas. Cada
uma tem três componentes essenciais: um ou mais servidores de vídeo, uma rede de
distribuição e uma caixa digital (set-top box) em cada casa para decodificar o sinal.

O servidor de vídeo é um computador potente que armazena muitos filmes em seu
sistema de arquivos e os reproduz sob demanda. Algumas vezes, computadores de gran-
de porte são usados como servidores de vídeo, pois conectar, digamos, mil discos de
grande capacidade a um computador de grande porte é bem menos complicado que co-
nectar mil discos a qualquer tipo de computador pessoal.

A rede de distribuição entre o usuário e o servidor de vídeo deve ser capaz de trans-
mitir dados em altas taxas e em tempo real.

Figura: Vídeo sob demanda usando (a) ADSL e (b) TV a cabo

A última peça do sistema é a caixa digital, ou set-top box, ou seja, aonde chega o
ADSL ou a TV a cabo. Esse dispositivo é, na verdade, um computador normal, com certos

Sistemas Operacionais – Lucilia Ribeiro 137

14 – Multimídia

chips especiais para decodificação e descompressão de vídeo. No mínimo, esse tipo de
aparelho contém CPU, RAM, ROM e a interface para ADSL ou TV a cabo.

Há duas características fundamentais que devem ser muito bem entendidas para tra-
tar a multimídia adequadamente:

• Usa taxas de dados extremamente altas.

• Requer reprodução em tempo real.

As altas taxas de dados resultam da natureza da informação visual e acústica. Os o-
lhos e os ouvidos podem processar quantidades prodigiosas de informações por segundo
e devem ser alimentados nessa taxa para produzir uma experiência sensorial aceitável.
As taxas de dados de algumas fontes digitais multimídia e de certos dispositivos comuns
de hardware são apresentados na tabela abaixo. O que se deve observar é a alta taxa de
dados que a multimídia requer, a necessidade de compressão e a quantidade necessária
de memória.

Origem Mbps GB/h Dispositivo Mbps

Telefone (PCM) 0,064 0,03 Fast Ethernet 100

Música em MP3 0,14 0,06 Disco EIDE 133

Áudio de CD 1,4 0,62 Rede ATM OC-3 156

Filme MPEG-2 (640 x 480) 4 1,76 Disco SCSI UltraWide 320

Câmera digital (720 x 480) 25 11 FireWire 400

TV (640 X 480) 221 97 Gigabit Ethernet 1000

HDTV (1280 X 720) 648 288 Disco SCSI Ultra-160 1280

A segunda exigência que a multimídia impõe sobre um sistema é a necessidade da
entrega de dados em tempo real. A porção de vídeo de um filme digital consistem em
alguns quadros por segundo. O sistema NTSC, usado na América do Norte, do Sul (exce-
to o Brasil) e no Japão), executa em 30 quadros/s; já os sistemas PAL e Secam, usados
em grande parte dos demais países (no Brasil usa-se PAL/M), executam 25 quadros/s.
Os quadros devem ser entregues em intervalos precisos de 33,3 ms ou 40 ms respecti-
vamente, do contrário a imagem parecerá fragmentada.

NTSC é a sigla para National Television Standards Comittee (Comissão Nacional para
Padrões Televisivos). PAL significa Phase Alternating Line (Linha de Fase Alternativa).
Tecnicamente é o melhor dos sistemas.

Nos seres humanos os ouvidos são mais sensíveis que os olhos; portanto, uma varia-
ção de até mesmo alguns milissegundos na exibição será notada. A variabilidade nas
taxas de entrega é chamada jitter e deve ser estritamente limitada para se obter um
bom desempenho. Observe que jitter não é o mesmo que atraso. Se a rede de distribui-
ção atrasar uniformemente todos os bits por exatamente 5000 s, o filme começará um
pouco mais tarde, mas será visto perfeitamente. Por outro lado, se os quadros forem
aleatoriamente atrasados entre 100 e 200 ms, o filme se parecerá com filmes antigos.

As propriedades de tempo real necessárias para reproduzir multimídia de maneira a-
ceitável são muitas vezes representadas por parâmetros de qualidade de serviço. En-
tre esses parâmetros estão largura da banda média disponível, pico de largura de banda,
atraso mínimo e máximo e a probabilidade de perda de bit.

14.2 ARQUIVOS MULTIMÍDIA

Na maioria dos sistemas, um arquivo de texto comum é formado por uma seqüência
de bytes sem qualquer estrutura que o Sistema Operacional possa reconhecer ou com ela
se importar. Com a multimídia, a situação é mais complicada. Para começar, vídeo e áu-
dio são completamente diferentes. Eles são capturados por dispositivos específicos (chip
de CCD versus microfone), possuem estruturas internas diferentes (o vídeo tem 25-30
quadros/s; o áudio tem 44100 amostras/s) e são reproduzidos por dispositivos diferentes
(monitor versus alto-falante).

Sistemas Operacionais – Lucilia Ribeiro 138

14 – Multimídia

Além disso, a maioria dos filmes almeja uma audiência mundial que, na sua maioria,
não fala inglês. Isso pode ser resolvido de duas maneiras. Para alguns países é produzida
uma trilha sonora adicional com vozes dubladas no idioma local. Em outros países, é u-
sada a trilha sonora original com legendas no idioma local.

14.2.1 CODIFICAÇÃO DE ÁUDIO

Uma onda sonora (áudio) é uma onda acústica (de pressão) unidimensional. Quando
uma onda acústica adentra o ouvido, o tímpano vibra fazendo com que os pequenos os-
sos do ouvido interno vibrem também, enviando pulsos ao cérebro. Esses pulsos são per-
cebidos como sons pelo ouvinte. De uma maneira semelhante, quando uma onda acústi-
ca atinge um microfone, este gera um sinal elétrico representando a amplitude do som
como uma função do tempo.

As ondas de áudio podem ser convertidas para a forma digital por um CAD (Conver-
sor Analógico-Digital). Um CAD toma uma voltagem elétrica como entrada e gera um
número binário como saída.

O intervalo de alcance de freqüência do ouvido humano vai de 20 a 20 mil Hz. O áu-
dio dos CDs é digital com uma taxa de amostragem de 44100 amostras/s, suficiente para
capturar freqüências de até 22050 Hz. As amostras são, cada uma, de 16 bits e lineares
de acordo com o intervalo de amplitudes.

14.2.2 CODIFICAÇÃO DE VÍDEO

O olho humano funciona do seguinte modo: ao atingir a retina, uma imagem é retida
por alguns milissegundos antes de desaparecer. Se uma seqüência de imagens atinge a
retina em 50 ou mais imagens/s, o olho não percebe que estão sendo exibidas imagens
discretas. Todos os sistemas de imagens em movimento baseados em filme ou em vídeo
exploram esse princípio para produzir imagens em movimento.

Para entender sistemas de Vídeo é melhor começar com a simples e antiga televisão
em preto-e-branco. Para representar a imagem bidimensional na tela da televisão como
uma função unidimensional da voltagem em relação ao tempo, a câmera percorre um
feixe de elétrons rapidamente de um lado para outro da imagem e lentamente de cima
para baixo, registrando a intensidade luminosa conforme seu percurso. No final da varre-
dura, chamada de quadro, o feixe volta à origem da tela (retrace). Essa intensidade co-
mo uma função do tempo é transmitida e os receptores repetem o processo de varredura
para reconstruir a imagem.

Embora 25 quadros/s sejam suficientes para capturar movimentos suaves, nessa taxa
de quadros muitas pessoas, especialmente as mais idosas, perceberão que a imagem
tremula (porque a imagem anterior desaparece da retina antes que uma nova apareces-
se). Em vez de aumentar a taxa de quadros, que requereria usar mais da escassa largura
de banda, foi adotada uma abordagem diferente. Em vez de mostrar as linhas de varre-
dura de cima para baixo, primeiro são exibidas todas as linhas de varredura ímpares e
depois são exibidas as linhas pares. Cada um desses meio-quadros é chamado de cam-
po. Experimentos mostraram que as pessoas percebem tremulação em 25 quadros/s,
mas não a percebem em 50 campos/s. Essa técnica é chamada de entrelaçamento.

Vídeo em cores usa o mesmo padrão de varredura do monocromático, só que, em
vez de mostrar a imagem com um feixe em movimento, são empregados três feixes mo-
vendo-se em uníssono. Um feixe é usado para cada uma das três cores primárias: ver-
melho, verde e azul (RGB – Red, Green e Blue).

Para permitir que transmissões em cores sejam vistas em receptores em preto-e-
branco, todos os três sistemas combinam linearmente os sinais RGB em um sinal de lu-
minância (brilho) e dois sinais de crominância (cor). O interessante é que o olho é
muito mais sensível ao sinal de luminância do que aos sinais de crominância e, portanto,
esses últimos não precisam ser transmitidos de modo tão preciso.

Até aqui vimos o vídeo analógico. Agora nos voltaremos para o vídeo digital. A repre-
sentação mais simples de vídeo digital é uma seqüência de quadros, cada um constituído
de uma grade retangular de elementos de imagem ou pixels. Para vídeo em cores, são
usados 8 bits por pixel para cada uma das cores RGB, resultando em 16 milhões de co-

Sistemas Operacionais – Lucilia Ribeiro 139

14 – Multimídia

res, que é o suficiente. O olho humano não consegue nem mesmo distinguir essa quanti-
dade de cores, o que dirá mais que isso.

Para produzir movimentos suaves, o vídeo digital, assim como o vídeo analógico, de-
ve mostrar pelo menos 25 quadros/s. Contudo, como os bons monitores dos computado-
res atuais percorrem a tela atualizando as imagens armazenadas na RAM de vídeo 75
vezes por segundo ou mais, o entrelaçamento não é necessário. Conseqüentemente, to-
dos os monitores de computadores usam varredura progressiva. Apenas redesenhar (isto
é, renovar) o mesmo quadro três vezes em uma linha é suficiente para eliminar a tremu-
lação.

Em outras palavras, a suavidade do movimento é determinada pelo número de ima-
gens diferentes por segundo, enquanto a tremulação é estipulada pelo número de vezes
que a tela é desenhada por segundo. Esses dois parâmetros são diferentes. Uma imagem
parada desenhada a 20 quadros/s não mostrará movimentos espasmódicos, mas tremu-
lará, pois o quadro desaparecerá da retina antes que o próximo apareça. Um filme com
20 quadros diferentes por segundo, cada qual desenhado quatro vezes seguidas a 80 Hz,
não tremerá, mas o movimento parecerá espasmódico.

A importância desses dois parâmetros torna-se clara quando consideramos a largura
de banda necessária para transmitir vídeo digital por uma rede. Os monitores atuais de
computadores têm, todos, a taxa de aspecto 4:3 e, assim, podem usar aqueles tubos de
imagem baratos e produzidos em massa para o mercado de televisores. Configurações
comuns são 640 x 480 (VGA), 800 x 600 (SVGA) e 1024 x 768 (XGA). Uma tela XGA
com 24 bits por pixel e 25 quadros/s precisa ser alimentado a 472 Mbps. Dobrar essa
taxa para evitar tremulações não é uma medida interessante. Uma solução melhor é
transmitir 25 quadros/s e fazer com que o computador armazene cada um deles e então
os desenhe duas vezes. A transmissão de televisão não usa essa estratégia porque os
televisores não têm memória e, além disso, sinais analógicos não podem ser armazena-
dos em RAM sem que antes sejam convertidos para a forma digital, o que requer um
hardware a mais. Como conseqüência, o entrelaçamento é necessário para difusão de
televisão, mas não é necessário para o vídeo digital.

14.3 COMPRESSÃO DE VÍDEO

Agora, deve estar óbvio que manipular material multimídia sem compressão está fora
de questão – esse material é muito extenso. A única esperança é que uma compressão
maciça seja possível.

Todos os sistemas de compressão precisam de dois algoritmos: um para comprimir os
dados na origem e outro para descomprimi-los no destino. Na literatura, esses algoritmos
são conhecidos como algoritmos de codificação e decodificação, respectivamente.

Esses algoritmos têm certas assimetrias que precisam ser compreendidas. Primeira-
mente, para muitas aplicações, um documento multimídia – por exemplo, um filme –
será codificado somente uma vez (quando for armazenado no servidor multimídia), mas
será decodificado milhares de vezes (quando for assistido pelos clientes). Essa assimetria
revela que é aceitável que o algoritmo de codificação seja lento e que exija hardware
sofisticado desde que o algoritmo de decodificação seja rápido e não requeira hardware
sofisticado. Por outro lado, para multimídias em tempo real, como videoconferência, é
inaceitável uma codificação lenta. A codificação deve ocorrer durante a própria videocon-
ferência, em tempo real.

Uma segunda assimetria é que o processo codifica/decodifica não é reversível. Ou se-
ja, no processo de compressão, transmissão e então descompressão de um arquivo, o
usuário espera voltar ao arquivo original, precisamente até o último bit. Para multimídia
essa exigência não existe. É perfeitamente aceitável que o sinal de vídeo, depois da codi-
ficação e da conseqüente decodificação, resulte em um sinal um pouco diferente do ori-
ginal.

14.3.1 O PADRÃO JPEG

O padrão JPEG (Joint Photographic Experts Goup – grupo conjunto de especialistas
em fotografia) para compressão de imagens paradas de tons contínuos (por exemplo,

Sistemas Operacionais – Lucilia Ribeiro 140

14 – Multimídia

fotografias) é importante para multimídia porque, de modo geral, o padrão multimídia
para imagens em movimento, MPEG, é apenas a codificação JPEG de cada quadro em
separado, mais alguns aspectos adicionais para compressão entre os quadros e de com-
pensação de movimento.

O passo 1 da codificação de uma imagem em JPEG é a preparação do bloco. Para
ser mais específico, suponha que uma entrada JPEG seja uma imagem RGB de 640 x 480
com 24 bits por pixel, conforme ilustra a Figura (a). Como o uso de luminância e de cro-
minância oferece uma melhor compressão, são calculados a luminância e dois sinais de
crominância a partir dos valores RGB. Para o NTSC, esses sinais são chamados Y, I e Q,
respectivamente. Para o PAL, são chamados respectivamente de Y, U e V e as fórmulas
são diferentes. A seguir usaremos os nomes correspondentes ao NTSC, mas o algoritmo
de compressão é o mesmo.

São construídas matrizes separadas para Y, I e Q, cada uma com elementos entre 0 e
255. Em seguida, é calculada a média de todos os blocos quadrados de 4 pixels nas ma-
trizes I e Q, reduzindo-as a matrizes 320 x 240. Essa redução apresenta perdas, mas
isso dificilmente é captado pela visão, pois o olho responde mais à luminância que à cro-
minância. Mesmo assim, a compressão de dados é por um fator de dois. Então, de cada
elemento de todas as três matrizes é subtraído 128 para que o 0 fique na metade do
intervalo. Por fim, cada matriz é dividida em blocos de 8 x 8. A matriz Y tem 4800 blo-
cos; as outras duas têm 1200 blocos cada, conforme mostra a Figura (b).

Figura: (a) Entrada de dados RGB. (b) Depois da preparação do bloco.

O passo 2 do JPEG é aplicar uma transformação DCT (Discrete Cosine Transforma-
tion – Transformação Discreta de Co-seno) para cada um dos 7200 blocos separadamen-
te. A saída de cada OCT é uma matriz 8x8 de coeficientes DCT.

Uma vez terminada a DCT, o JPEG passará ao passo 3, que é chamado de quantiza-
ção, no qual os coeficientes DCT menos importantes são eliminados. Essa transformação
(com perda) é realizada dividindo-se cada um dos coeficientes da matriz DCT 8x8 por um
peso tomado a partir de uma tabela. Se todos os pesos forem 1, a transformação não
fará nada. Contudo, se os pesos crescerem abruptamente a partir da origem, as freqüên-
cias espaciais mais altas serão rapidamente reduzidas.

Um exemplo desse passo é mostrado na Figura abaixo, em que vemos a matriz DCT
inicial, a tabela de quantização e o resultado obtido dividindo-se cada elemento DCT pelo
elemento correspondente da tabela de quantização. Os valores na tabela de quantização
não fazem parte do padrão JPEG. Cada aplicação deve fornecer sua tabela de quantiza-
ção particular, possibilitando a essa aplicação controlar seu próprio compromisso entre
perda e compressão.

O passo 4 reduz o valor (0,0) de cada bloco (o primeiro no canto superior esquer-
do) substituindo-o pelo tanto que ele difere do elemento correspondente no bloco anteri-
or. Como são valores médios de seus respectivos blocos, esses elementos devem mudar
lentamente; portanto, assumir os valores diferenciais deve reduzir a maioria deles a pe-
quenos valores. Nenhum diferencial é calculado a partir dos demais valores. Os valores
(0,0) são conhecidos como componentes DC; os outros, como componentes AC.

Sistemas Operacionais – Lucilia Ribeiro 141

14 – Multimídia

Figura: Computação dos coeficientes DCT quantizados.

O passo 5 lineariza os 64 elementos e aplica a codificação run-length a essa lista de
elementos. Percorrer o bloco da esquerda para a direita e de cima para baixo não agru-
pará os zeros; assim, é aplicado um padrão de varredura em ziguezague, como mostra a
Figura abaixo. Nesse exemplo, o padrão ziguezague resulta em 38 zeros consecutivos no
final da matriz. Essa cadeia pode ser reduzida a apenas um contador indicando que há 38
zeros.

Figura: A ordem na qual os valores quantizados são transmitidos

Agora temos uma lista de números que representa a imagem (no espaço de trans-
formação). O passo 6 codifica, usando o código de Huffman, para armazenamento ou
transmissão.

O JPEG pode parecer complicado; isso ocorre porque o JPEG é complicado. Ainda as-
sim, como produz uma compressão de 20:1, ou até melhor, o JPEG é amplamente usado.
Decodificar uma imagem JPEG requer a execução do algoritmo de compressão de trás
para a frente. O JPEG apresenta uma certa simetria: leva quase o mesmo tempo decodi-
ficar e codificar uma imagem.

14.3.2 O PADRÃO MPEG

Finalmente, chegamos ao cerne do que nos interessa: os padrões MPEG (Motion Pic-
ture Experts Group – grupo de especialistas em imagens em movimento). Trata-se dos
principais algoritmos usados para comprimir vídeos e são padrões internacionais desde
1993 e é adequado para canais de transmissão NTSC ou PAL.

Para cenas em que a câmara e o fundo sejam estacionários e um ou dois atores mo-
vam-se lentamente, quase todos os pixels serão idênticos de um quadro para o outro.
Nesse caso, apenas subtrair cada frame do anterior e executar o JPEG na diferença fun-
cionaria bem. Contudo, para cenas em que a câmera faz panorâmicas ou aproximações,
essa técnica não se mostra muito adequada. É necessário algum modo de compensar
esse movimento, e é exatamente isso que o MPEG faz - na verdade, essa é a diferença
entre o MPEG e o JPEG.

Sistemas Operacionais – Lucilia Ribeiro 142

14 – Multimídia

A saída do MPEG consiste em três tipos diferentes de quadros que devem ser proces-
sados pelo programa de visualização:

I (lntracodificados): Imagens paradas autocontidas codificadas por JPEG.

P (Preditivos): Diferença bloco por bloco com o último quadro.

B (Bidirecionais): Diferenças entre o último e o próximo quadro.

Os quadros I são apenas imagens paradas codificadas pelo JPEG, usando também o
sinal de luminância com resolução completa e a crominância com a metade da resolução
ao longo de cada eixo.

Os quadros P, por outro lado, codificam diferenças entre os quadros. São baseados na
idéia de macroblocos, que cobrem 16x16 pixels no espaço de luminância e 8x8 pixels no
espaço de crominância. Um macrobloco é codificado buscando-se, nos quadros anterio-
res, um macrobloco idêntico ou com alguma pequena diferença.

Um exemplo da utilidade dos quadros P é ilustrado na Figura. Nela vemos três qua-
dros consecutivos que têm o mesmo fundo, mas são diferentes quanto à posição de uma
pessoa. Os macroblocos que contêm a cena de fundo serão idênticos, mas os macroblo-
cos contendo a pessoa terão suas posições deslocadas por uma quantidade desconhecida
e deverão ser acompanhados.

Figura: Três quadros consecutivos de vídeo

Os quadros B são similares aos quadros P, só que eles permitem que o macrobloco de
referência esteja em um dos seguintes quadros: anterior ou sucessor, I ou P. Essa liber-
dade adicional permite a compensação melhorada do movimento e é útil também quando
objetos passam pela frente ou por trás de outros objetos. Por exemplo, em um jogo de
beisebol, quando o terceiro jogador da base arremessa a bola para a primeira base, pode
haver alguns quadros nos quais a bola obscurece a cabeça do jogador que está na se-
gunda base, ao fundo. No próximo quadro, a cabeça pode estar parcialmente visível, à
esquerda da bola, com a aproximação seguinte da cabeça derivando-se do quadro poste-
rior, quando a bola, então, já passou pela cabeça. Os quadros B permitem que um qua-
dro seja baseado no quadro futuro.

Para fazer uma codificação do quadro B, o codificador precisa guardar, ao mesmo
tempo, três quadros codificados na memória: o passado, o atual e o futuro. Para simplifi-
car a decodificação, os quadros devem estar presentes, no fluxo MPEG, em ordem de
dependência, e não em ordem de exibição. Portanto, mesmo com uma temporização per-
feita, quando um vídeo é visto pela rede, faz-se necessário um armazenamento temporá-
rio na máquina do usuário para reordenar os quadros e resultar em uma exibição apro-
priada. Por causa dessa diferença entre a ordem de dependência e a ordem de exibição,
tentar exibir um filme de trás para a frente não funcionará, a não ser que se disponha de
um considerável armazenamento temporário e que se lance mão de algoritmos comple-
xos.

14.4 ESCALONAMENTO DE PROCESSOS MULTIMÍDIA

Os sistemas operacionais que suportam multimídia diferem dos tradicionais por três
aspectos principais: pelo escalonamento de processos, pelo sistema de arquivos e pelo
escalonamento do disco. Iniciaremos, com o escalonamento de processos e prosseguire-
mos com os outros tópicos nas seções subseqüentes.

14.4.1 ESCALONAMENTO DE PROCESSOS HOMOGÊNEOS

O tipo mais simples de servidor de vídeo é aquele capaz de suportar a exibição de um

número fixo de filmes, todos com a mesma taxa de quadros, a mesma resolução de ví-

Sistemas Operacionais – Lucilia Ribeiro 143

14 – Multimídia

deo, a mesma taxa de dados e outros parâmetros. Sob essas circunstâncias, um algorit-
mo de escalonamento simples mas efetivo é como o seguinte. Para cada filme, há um
único processo (ou thread) cujo trabalho é ler o filme do disco, um quadro por vez, e
então transmitir esse quadro para o usuário. Como todos os processos são igualmente
importantes, têm a mesma quantidade de trabalho por quadro e bloqueiam quando ter-
minam de processar o quadro atual, o escalonamento por alternância circular (round-
robin) realiza esse trabalho sem problemas. O único incremento necessário aos algorit-
mos comuns de escalonamento é o mecanismo de temporização para assegurar que cada
processo execute na freqüência correta.

Um modo de conseguir a temporização apropriada é ter um relógio-mestre que pulse,
por exemplo, 30 vezes por segundo (para NTSC). A cada pulso, todos os processos são
executados seqüencialmente, na mesma ordem. Quando um processo termina seu traba-
lho, ele emite uma chamada ao sistema suspend que libera a CPU até que o relógio-
mestre pulse novamente. Quando isso acontece, todos os processos são reexecutados na
mesma ordem. Enquanto o número de processos for pequeno o bastante para que todo o
trabalho possa ser feito em um intervalo de tempo, o escalonamento circular será sufici-
ente.

14.4.2 ESCALONAMENTO GERAL DE TEMPO REAL

Infelizmente trata-se de um modelo raramente aplicável à realidade. O número de
usuários se altera conforme os espectadores vêm e vão, os tamanhos dos quadros vari-
am exageradamente por causa da natureza da compressão de vídeo (quadros I são mui-
to maiores que os quadros P ou B) e filmes diferentes podem ter resoluções diferentes.
Como conseqüência, processos diferentes podem ser obrigados a executar em freqüên-
cias diferentes, com quantidades diferentes de trabalho e com prazos diferentes para
terminar o trabalho.

Essas considerações levam a um modelo diferente: múltiplos processos competindo
pela CPU, cada qual com seu próprio trabalho e seu próprio prazo. Nos próximos modelos
vamos supor que o sistema saiba a freqüência na qual cada processo deve executar,
quanto trabalho deve fazer e qual é seu prazo (deadline). O escalonamento de múltiplos
processos em competição – alguns dos quais obrigados a cumprir prazos - é chamado de
escalonamento de tempo real.

Um exemplo do tipo de ambiente com o qual um escalonador multimídia de tempo
real trabalha: considere os três processos, A, B e C, mostrados na Figura. O processo A
executa a cada 30 ms (aproximadamente a taxa do NTSC). Cada quadro requer 10 ms
de tempo de CPU. Na ausência de competição, o processo executaria nos surtos A1, A2,
A3 etc., cada um iniciando 30 ms depois do anterior. Cada surto da CPU trata um quadro
e tem um prazo: ele deve terminar antes que um próximo inicie.

Figura: Três processos periódicos, cada um exibindo um filme.
As taxas de quadro e os requisitos de processamento por quadro são diferentes para cada filme.

Também ilustrados na Figura estão dois outros processos, B e C. O processo B execu-

ta 25 vezes/s (por exemplo, PAL) e o processo C executa 20 vezes/s (por exemplo, um

fluxo NTSC ou PAL mais lento, destinado a um usuário com uma conexão de baixa largu-

ra de banda para o servidor de vídeo). O tempo de computação por quadro é mostrado

como 15 ms e 5 ms para B e C, respectivamente, apenas para tornar o problema de es-

calonamento mais geral do que tê-los todos iguais.

Sistemas Operacionais – Lucilia Ribeiro 144

14 – Multimídia

O problema do escalonamento agora é como escalonar A, B e C assegurando que eles
cumpram seus respectivos prazos. Até agora presumimos que há um processo por fluxo.
Na realidade, pode haver dois (ou mais) processos por fluxo - por exemplo, um para o
áudio e outro para o vídeo. Eles podem executar em taxas diferentes e podem consumir
quantidades diferentes de tempo de cpu por surto. Adicionar processos de áudio ao con-
junto não alteraria o modelo geral, contudo, estamos presumindo que há m processos,
cada um executando em uma freqüência específica, com uma quantidade fixa de trabalho
necessária para cada surto de CPU.

Algoritmos de tempo real podem ser estáticos ou dinâmicos. Os algoritmos estáticos
atribuem antecipadamente uma prioridade fixa a cada processo e então fazem o escalo-
namento preemptivo priorizado utilizando essas prioridades. Os algoritmos dinâmicos não
apresentam prioridades fixas.

14.4.3 ESCALONAMENTO POR TAXA MONOTÔNICA

O algoritmo clássico de escalonamento estático de tempo real para processos pre-
emptivos e periódicos é o escalonamento por taxas monotônicas (Rate Monotonic
Scheduling - RMS). Pode ser usado para processos que satisfaçam as seguintes condi-
ções:

1. Cada processo periódico deve terminar dentro de seu período.

2. Nenhum processo é dependente de qualquer outro processo.

3. Cada processo precisa da mesma quantidade de tempo de CPU a cada surto.

4. Quaisquer processos não periódicos não podem ter prazos.

5. A preempção de processo ocorre instantaneamente e sem sobrecargas.

O RMS funciona atribuindo a cada processo uma prioridade fixa igual à freqüência de
ocorrência de seu evento de disparo. Por exemplo, um processo que deva executar a
cada 30 ms (33 vezes/s) recebe prioridade 33; outro que tenha de executar a cada 40
ms (25 vezes/s), recebe prioridade 25; e um processo que execute a cada 50 ms (20
vezes/s) recebe prioridade 20. Portanto, as prioridades são lineares em relação à fre-
qüência (número de vezes/segundo que o processo executa). Por isso, o escalonamento
é chamado monotônico. Em tempo de execução, o escalonador sempre executa o proces-
so que estiver pronto e com a prioridade mais alta, fazendo a preempção do processo em
execução se for necessário.

Figura: Um exemplo dos escalonamentos de tempo real RMS e EDF.

A Figura acima mostra como o escalonamento por taxas monotônicas funciona para o
exemplo da Figura anterior. Os processos A, B e C têm prioridades estáticas 33, 25 e 20,
respectivamente, o que significa que, se A precisa executar, ele executa, fazendo a pre-
empção de qualquer outro processo que esteja usando a CPU. O processo B pode fazer a
preempção de C, mas não de A. O processo C deve esperar até que a CPU fique ociosa
para que possa executar.

Na Figura, inicialmente todos os três processos estão prontos para executar. O de
prioridade mais alta, A, é escolhido e autorizado a executar até que termine em 15 ms,
conforme ilustrado pela linha RMS. Depois de terminar, B e C executam naquela ordem.

Sistemas Operacionais – Lucilia Ribeiro 145

14 – Multimídia

Juntos esses processos levam 30 ms para executar e, assim, quando C terminar será a
vez de A executar novamente. Essa rotação prossegue até que o sistema fique ocioso em
t = 70.

Em t = 80, B fica pronto e executa. Contudo, em t = 90, um processo de prioridade
mais alta, A, fica pronto e então faz a preempção de B e executa até que termine, em t =
100. Nesse ponto, o sistema pode escolher entre terminar B ou iniciar C e assim ele es-
colhe o processo de prioridade mais alta, ou seja, B.

14.4.4 ESCALONAMENTO PRAZO MAIS CURTO PRIMEIRO

Outro algoritmo popular de escalonamento de tempo real é o do prazo mais curto
primeiro (Earliest Deadline First - EDF). O EDF é um algoritmo dinâmico que não requer
que os processos sejam periódicos, como no algoritmo do RMS. Também não exige o
mesmo tempo de execução por surto de CPU, como o RMS. Se precisar de tempo de
CPU, o processo anunciará sua presença e seu prazo. O escalonador tem uma lista de
processos executáveis, ordenados por vencimentos de prazo. O algoritmo executa o pri-
meiro processo da lista, aquele cujo prazo é o mais curto (mais próximo de vencer). Se
um novo processo tornar-se pronto, o sistema verificará se seu prazo vence antes do
prazo do processo em execução. Em caso afirmativo, o novo processo faz a preempção
do que estiver executando.

Um exemplo de EDF é visto também na Figura anterior. Inicialmente, todos os três
processos estão prontos. Eles são executados na ordem de vencimento de seus prazos. A
deve terminar em t = 30, B deve terminar em t = 40 e C deve terminar em t = 50; por-
tanto, o prazo de A vence antes e assim executa antes. Até t = 90, as escolhas são as
mesmas do RMS. Em t = 90, A torna-se pronto novamente e o vencimento de seu prazo
é t = 120 - o mesmo vencimento de B. O escalonador poderia legitimamente escolher um
ou outro para executar, mas, na prática, a preempção de B apresenta algum custo asso-
ciado. É melhor, portanto, deixar B executando.

Para dissipar a idéia de que o RMS e o EDF sempre chegam aos mesmos resultados,
estudemos um outro exemplo, mostrado na Figura abaixo. Nele, os períodos de A, B e C
são os mesmos de antes, mas agora A precisa de 15 ms de tempo de cpu por surto, e
não de apenas 10 ms.

Figura: Outro exemplo de escalonamento em tempo real RMS e EDF.

Para o RMS, as prioridades dos três processos ainda são 33, 25 e 20, já que somente
o período é o que interessa, e não o tempo de execução. Nesse caso, B1 não termina
antes de t = 30, instante em que A está pronto para executar novamente. No momento
em que A termina, em t = 45, B está pronto de novo e, portanto, com prioridade mais
alta que C, B executa e o prazo de C vence. O RMS falha.

Agora vejamos como o EDF lida com esse problema. Em t = 30, há uma disputa entre
A2 e C1. Como o prazo de C1 vence em 50 e o prazo de A2 vence em 60, C é escalona-
do. Isso é diferente do que ocorre no RMS, em que A ganha porque tem a prioridade
mais alta.

Em t = 90, A fica pronto pela quarta vez. O vencimento do prazo de A é igual ao do
processo em execução (120), portanto o escalonador deve escolher entre fazer ou não a

Sistemas Operacionais – Lucilia Ribeiro 146

14 – Multimídia

preempção. Assim como antes, se não for necessário, é melhor não fazer a preempção;
desse modo, B3 é autorizado a terminar.

14.5 PARADIGMAS DE SISTEMAS DE ARQUIVOS MULTIMÍDIA

Agora que cobrimos o escalonamento de processos em sistemas multimídia, prosse-
guiremos estudando os sistemas de arquivos multimídia (esses sistemas de arquivos u-
sam um paradigma diferente dos sistemas de arquivos tradicionais). Para ter acesso a
um arquivo, um processo emite, antes de tudo, uma chamada ao sistema open. Se não
houver problemas, será dada uma espécie de identificador a quem chamou. Nesse ponto,
o processo pode emitir uma chamada ao sistema read, fornecendo como parâmetros o
identificador, o endereço do buffer e o número de bytes. O sistema operacional retorna
então os dados requisitados no buffer. Podem ser feitas outras chamadas read, até que o
processo termine. É então o momento de chamar close para fechar o arquivo e devolver
seus recursos.

Esse modelo não funciona bem para multimídia por causa da necessidade de um
comportamento de tempo real. Funciona ainda pior para mostrar arquivos multimídia que
saem de um servidor remoto de vídeo. Um problema é que o usuário deve fazer as cha-
madas read precisamente espaçadas no tempo. Um segundo problema é que o servidor
de vídeo deve ser capaz de fornecer os blocos de dados sem atraso - algo difícil de se
conseguir quando as requisições vierem de modo não planejado e não houver recursos
reservados antecipadamente.

Para resolver esses problemas, os servidores de arquivos multimídia usam um para-
digma completamente diferente: eles agem como se fossem aparelhos de videocassete
(Video Cassete Recorders - VCR). Para ler um arquivo multimídia, um processo-usuário
emite uma chamada ao sistema start, especificando o arquivo a ser lido e vários outros
parâmetros - por exemplo, quais trilhas de áudio e de legenda devem ser usadas. O ser-
vidor de vídeo começa, então, a enviar os quadros na taxa de quadros requisitada. Fica
para o usuário tratá-los na taxa que os quadros vierem. Se o usuário ficar cansado do
filme, a chamada ao sistema stop terminará o fluxo. Servidores de arquivos com esse
modelo de fluxo são chamados de servidores push (pois eles empurram os dados para
o usuário) e são diferentes dos tradicionais servidores pull, nos quais o usuário deve
puxar os dados, um bloco de cada vez, chamando repetidamente o read para obter um
bloco após o outro. A diferença entre esses dois modelos é ilustrada na Figura:

Figura: (a) Um servidor pull. (b) Um servidor push.

14.5.1 FUNÇÕES DE CONTROLE VCR

A maioria dos servidores de vídeo implementa também funções-padrão de controle
VCR, inclusive pausa, avanço rápido e rebobinamento. A pausa é bastante clara. O usuá-
rio envia uma mensagem para o servidor de vídeo pedindo que pare. Nesse caso, o que o
servidor deve fazer é lembrar qual é o próximo quadro. Quando o usuário pedir para que
o servidor prossiga, ele apenas continuará de onde parou.

Sistemas Operacionais – Lucilia Ribeiro 147

14 – Multimídia

Contudo, há uma complicação. Para obter um desempenho aceitável, o servidor pode
reservar recursos como largura de banda de disco e buffers de memória para cada fluxo
de saída. Continuar retendo esses recursos enquanto um filme está em pausa desperdiça
recursos, especialmente se o usuário demorar. Claro que os recursos podem ser facil-
mente liberados quando estiverem em pausa, mas, se o usuário tentar continuar, haverá
o perigo de não poder mais readquiri-los.

O rebobinamento é bem fácil. Tudo o que o servidor precisa fazer é lembrar que o
próximo quadro a ser enviado é o 0. O que poderia ser mais simples? Contudo, o avanço
e o retrocesso rápidos (isto é, reproduzir enquanto rebobina) são mais complicados. Se
não fosse pela compressão, uma maneira de avançar em dez vezes a velocidade normal
seria apenas exibir um quadro a cada dez. Para avançar em 20 vezes seria preciso mos-
trar um quadro a cada 20. Na verdade, sem compressão, avançar ou retroceder em
qualquer velocidade é fácil. Para reproduzir em k vezes a velocidade normal, é só mos-
trar um quadro a cada k quadros. Para fazer o retrocesso rápido k vezes a velocidade
normal é só fazer a mesma coisa na outra direção. Esse sistema funciona igualmente
bem, tanto para os servidores pull quanto para os servidores push.

A compressão complica o movimento rápido para frente ou para trás. Com uma fita
de vídeo digital, para a qual cada quadro é comprimido independentemente de todos os
outros, é possível usar essa estratégia, desde que o quadro necessário possa ser encon-
trado rapidamente. Como a compressão de um quadro depende de seu conteúdo, cada
quadro tem um tamanho diferente; portanto, saltar k quadros no arquivo não pode ser
feito por um cálculo numérico. Além disso, a compressão de áudio é independente da
compressão de vídeo; assim, para cada quadro de vídeo exibido no modo de alta veloci-
dade deve ser encontrado também o quadro correto de áudio (a menos que o som seja
desligado quando estiver reproduzindo em um modo mais rápido que o normal). Portan-
to, o avanço rápido de um arquivo de vídeo digital requer um índice que permita que os
quadros sejam localizados rapidamente. Isso até na teoria é bastante complicado.

14.5.2 VÍDEO QUASE SOB DEMANDA

Ter k usuários assistindo ao mesmo filme impõe, essencialmente, a mesma carga so-
bre o servidor que tê-los assistindo a k filmes diferentes. Contudo, com uma pequena
mudança no modelo são possíveis grandes ganhos de desempenho. O problema do vídeo
sob demanda é que os usuários podem começar o fluxo de um novo filme em um mo-
mento arbitrário; portanto, se houver cem usuários, todos começando a ver algum novo
filme por volta das 20h, há a possibilidade de que nunca dois usuários iniciem exatamen-
te no mesmo instante - assim, eles não podem compartilhar um fluxo. A alteração que
possibilita a otimização consiste em informar a todos os usuários que os filmes começam
somente na hora cheia e depois de cada cinco minutos, por exemplo. Portanto, se um
usuário quiser ver um filme às 20h02, ele terá de esperar até as 20h05.

A vantagem é que, para um filme de duas horas, são necessários somente 24 fluxos,
não importando o número de consumidores. Conforme ilustra a Figura a seguir, o primei-
ro fluxo começa às 20h. Às 20h05, quando o primeiro fluxo estiver no quadro 9000, o
fluxo 2 se iniciará. Às 20h20, quando o primeiro fluxo estiver no quadro 18000 e o fluxo
2 no quadro 9000, o fluxo 3 começará e assim irá até o fluxo 24, que se inicia às 21h55.
Às 22h, o fluxo 1 termina e começa com o quadro 0. Esse esquema é chamado de vídeo
quase sob demanda (near video on demand) porque o vídeo não começa no momento
da requisição, mas um pouco depois dela.

De certo modo, o vídeo sob demanda é como usar um táxi: você chama e ele vem. O
vídeo quase sob demanda é como usar um ônibus: há uma escala fixa de horários e é
preciso esperar pelo próximo horário. Mas o trânsito em massa só faz sentido se houver
a massa. No centro das cidades, um ônibus que passe a cada cinco minutos pode contar
com pelo menos alguns passageiros. Um ônibus viajando pelas estradas do interior pode
estar quase sempre vazio. Da mesma maneira, o lançamento do último filme do David
Linch pode atrair clientes suficientes para garantir o início de um novo fluxo a cada cinco
minutos; em contrapartida, em relação a “E o Vento Levou” talvez seja melhor simples-
mente oferecê-lo sob demanda.

Sistemas Operacionais – Lucilia Ribeiro 148

14 – Multimídia

Figura: O vídeo quase sob demanda tem um novo fluxo iniciando em intervalos regulares;
no exemplo dado, a cada cinco minutos (9000 quadros)

No vídeo quase sob demanda, os usuários não têm controles VCR. Nenhum usuário
pode dar uma pausa no filme para uma excursão à cozinha. O melhor que pode ser feito
é, quando retornar da cozinha, entrar em um fluxo que tenha começado depois, por isso
alguns minutos do vídeo estarão repetidos.

14.6 ALOCAÇÃO DE ARQUIVOS EM DISCOS

Os arquivos multimídia são bastante grandes e com freqüência são escritos somente
uma vez, mas lidos muitas vezes e em geral sofrem acessos seqüenciais. Suas reprodu-
ções devem cumprir critérios estritos de qualidade de serviço. Juntas, essas exigências
sugerem esquemas de sistemas de arquivos diferentes dos usados pelos sistemas opera-
cionais tradicionais. Discutiremos alguns desses assuntos a seguir, partindo do contexto
de um único disco e então para múltiplos discos.

14.6.1 ALOCAÇÃO DE UM ARQUIVO EM UM ÚNICO DISCO

A exigência mais importante é que os dados, na forma de fluxos, possam fluir para a
rede ou para um dispositivo de saída, na velocidade necessária e sem jitter. Por isso, ter
várias buscas em disco (seeks) durante um quadro é altamente indesejável. Um modo de
eliminar buscas intra-arquivos em servidores de vídeo é usar arquivos contíguos. Nor-
malmente, arquivos contíguos não funcionam bem, mas em servidores de vídeo, que são
carregados antecipadamente com filmes que não mudarão mais, isso pode funcionar.

No entanto, uma complicação é a presença de vídeo, áudio e texto. Mesmo que esses
elementos estejam armazenados separadamente em arquivos contíguos, será necessária
uma busca para ir do arquivo de vídeo para um arquivo de áudio e de lá para um arquivo
de texto se este último for necessário. Isso sugere um segundo arranjo possível, com o
vídeo, o áudio e o texto intercalados conforme mostra a Figura, mas todo o arquivo ainda
é contíguo. Na figura, o vídeo para o quadro 1 é seguido diretamente pelas diversas tri-
lhas de áudio do quadro 1 e então pelas várias trilhas de texto do quadro 1. Dependendo
de quantas trilhas de áudio e texto houver, poderá ser mais simples apenas ler todas as
partes de cada quadro em uma única operação de leitura de disco e transmitir somente
as partes que o usuário precisa.

Essa organização requer uma E/S adicional de disco para leitura de áudio e texto que
não sejam desejados e um espaço extra de buffer em memória para armazená-los. Con-
tudo, ela elimina todas as buscas (em um sistema monousuário) e não requer custo ex-
tra para saber onde no disco está localizado determinado quadro, pois todo o filme é um
arquivo contíguo. O acesso aleatório é impossível com esse esquema, mas, como ele não
é necessário, sua perda não é grave. Da mesma maneira, o 'avanço rápido' e o 'retroces-
so rápido' tomam-se impossíveis sem o acréscimo de estruturas de dados e complexida-
de.

Sistemas Operacionais – Lucilia Ribeiro 149

O que é um page fault quando ocorre é quem controla a sua ocorrência como uma elevada taxa de page fault pode comprometer o sistema operacional?

Como uma elevada taxa de page fault pode comprometer o sistema operacional? R: O page fault ocorre todas as vezes que um processo faz referência a um endereço virtual pertencente a uma página virtual que não se encontra mapeada em uma página real, ou seja, não está, no momento, na memória principal.

Quem controla o page fault?

A ocorrência de um page fault é verificada através do bit de validade presente na ETP da tabela de páginas referente à página virtual e controlada pelo sistema operacional.

O que é um erro de page fault?

Uma falta de página ou falha de página (page fault em inglês), no contexto da tecnologia da memória dos computadores, é uma interrupção (ou exceção) disparada pelo hardware quando um programa acessa uma página mapeada no espaço de memória virtual, mas que não foi carregada na memória física do computador.

Quanto ao page fault Assinale a alternativa correta?

Questão 9/10 Quanto ao page-fault, assinale a alternativa correta. A Só ocorre em sistemas monoprogramáveis. B Ocorre sempre que o processo referencia um endereço de memória virtual e a página que contém o endereço referenciado não está na memória principal. Você acertou!