Você está na página 1de 31

Captulo 5

Organizando Arquivos para Desempenho

Outline (do captulo)


1. 2. 3.

Compresso de dados Recuperando espao em disco Achando as coisas mais rapidamente:


uma introduo a ordenao interna e busca binria.

4.

Ordenao de chaves (tag sort):


ordenao de arquivos grandes.
2

Recuperando Espao em Disco: Motivao


Suponha que num arquivo de registros de tamanho varivel, um registro foi modificado de modo que o novo registro maior do que o original.
O que voc faz com os dados extra?
1. 2.

Colocar no final do arquivo e criar um ponteiro a partir do espao do registro original para a extenso do registro, ou Poderia reescrever todo o registro no final do arquivo, deixando um buraco na posio do registro original. Na 1a, o trabalho de processar o registro esquisito e mais lento do que era originalmente. Na 2a, o arquivo desperdia espao.
3

Cada soluo tem suas desvantagens:

Recuperando Espao em Disco


Nesta seo, veremos as maneiras como a organizao do arquivo se deteriora a medida que ele vai sendo modificado. Tais modificaes podem ser ocasionadas por:
adio de novos registros. atualizao de registros. eliminao de registros.

Recuperando Espao em Disco


Adicionar registro (ao final do arquivo)
Esta operao no deteriora a organizao do arquivo.

As questes de manuteno se tornam mais complicadas quando:


Atualizamos registro de comprimento varivel
O novo registro menor (atualizar no mesmo lugar gera perda de espao) O novo registro maior ( necessrio eliminar o registro velho e incluir o novo)

Eliminamos um registro de comprimento fixo ou varivel


a eliminao LGICA. deve-se poder reusar esse espao.
5

Recuperando Espao em Disco

Uma vez que a atualizao de um registro pode ser vista como uma eliminao seguida de uma adio, vamos focar na questo da eliminao de um registro. Depois que um registro eliminado, desejamos poder reutilizar aquele espao!!!

Recuperando Espao em Disco: Eliminao e Compactao


Estratgia de eliminao (fixo ou varivel)
Qualquer que seja a estratgia, necessrio que o registro eliminado possa ser identificvel.
Exemplos
Colocar um * ou um $ num campo do registro, ou Colocar um campo fixo no registro para indicar o status do registro.

Estratgia de recuperao (fixo ou varivel)


Deixar o registro eliminado por um tempo:
os programas devem ignorar os registros eliminados.

E depois, recuperar todos os espaos de uma s vez:


copiar os registros vlidos para uma nova rea de armazenamento em disco e devolver a rea antiga, ou compactar no mesmo lugar, lendo e regravando apenas os registros vlidos. Ex: arquivo de contabilidade compactado ao final do ano fiscal
7

Recuperando Espao Dinamicamente: Eliminando e Reutilizando (Reg. Tam. Fixo)


Eliminao Marcar o registro eliminado com um *, por exemplo. Reutilizando o espao ao inserir um novo reg.: Varrer o arquivo seqencialmente antes de adicionar um novo registro, procurando registro por registro, at que um registro eliminado seja encontrado. Se o programa atingir o final do arquivo e nenhum registro eliminado for encontrado, ento o novo registro deve ser adicionado no final do arquivo Processo muito lento!!

Recuperando Espao Dinamicamente: Eliminando e Reutilizando (Reg. Tam. Fixo)


Para reutilizar o espao de um registro eliminado, ns precisamos: uma maneira de saber, imediatamente, se existem espaos vazios no arquivo, e uma maneira de pular diretamente para estes espaos, caso existam.

Recuperando Espao Dinamicamente: Eliminando e Reutilizando (Reg. Tam. Fixo)


SOLUO:
Utilizar uma lista encadeada contendo todos os registros eliminados. Lista Encadeada: estrutura de dados na qual cada elemento ou n contm uma referncia ao seu sucessor na lista. A maneira mais simples de manusear esta lista, como uma pilha. Uma pilha uma lista na qual todas as inseres e remoes dos ns acontece num dos finais da lista. Vamos referir a esta pilha, contendo os registros que se tornaram espaos disponveis, como PED (pilha de espaos disponveis).

10

Recuperando Espao Dinamicamente: Eliminando e Reutilizando (Reg. Tam. Fixo)


PED em arquivo com registro cabealho
O cabealho o primeiro registro do arquivo, contendo:
o topo da PED
Contm o NRR do ltimo registro eliminado.

Se topo(PED) < 0, ento a pilha est vazia (-1 representa um ponteiro nulo).

Quando um registro eliminado, ele marcado como eliminado e inserido na PED (ou seja, ter um ponteiro para o registro eliminado antes dele). O espao do registro est na mesma posio que antes, mas logicamente foi inserido na PED.
Implementa, no arquivo, uma lista encadeada dos registros eliminados.

11

Recuperando Espao Dinamicamente: Eliminando e Reutilizando (Reg. Tam. Fixo)


Exemplo
Topo da PED -> 5 0 1 2 3 *-1 4 Paula . . . 5 *3 6 Rui . . . Joo . . . Pedro . . . Luiz . . . Topo da PED -> 1 0 1 Joo . . . *5

2 Luiz . . .

3 *-1

4 Paula . . .

5 *3

6 Rui . . .

Topo da PED -> -1 0 1

Joo . . . 1o novo reg Luiz . . .

3o novo reg Paula . . . 2o novo reg Rui 12. . .

Recuperando Espao em Disco: Eliminando e Reutilizando (Reg. Tam. Var.) Para dar suporte a reutilizao de registros atravs de uma lista de espao disponvel (LED), ns precisamos de: Uma maneira interligar os registros eliminados na LED (ou seja, um lugar para colocar os apontadores). Um algoritmo para incluir na LED novos registros eliminados. Um algoritmo para achar e remover da LED os espaos disponveis quando se vai reutiliz-los.
13

Recuperando Espao em Disco: Eliminando e Reutilizando (Reg. Tam. Var.)


LED e espaos livres
A cabea/topo da LED fica no registro cabealho. Estrutura dos registros normais (com reuso):
<tamanho registro> | <c1> | <c2> | | <cn> | ..... onde: ..... indica a fragmentao interna do registro (espao perdido no registro, menor que o original liberado).

Registro eliminado:
<tamanho registro> * <ponteiro> ........ onde: * indica que o registro est livre (foi eliminado logicamente).
<ponteiro> binrio e aponta para o primeiro byte do prximo registro livre. ........ o espao restante do registro livre.
14

No podemos usar o NRR como ponteiro!!!

Recuperando Espao em Disco: Eliminando e Reutilizando (Reg. Tam. Var.)


Exemplo
Topo da LED: -1
40 Ames|John|123 Maple|Stillwater|OK|74075|64 Morrison|Sebastian |9035 South Hillcrest|Forest Village|OK|74820|45 Brown|Martha|62 5 Kimbark|Des Moines|IA|50311|

Aps a eliminao do 2o registro. Topo da LED: 43


40 Ames|John|123 Maple|Stillwater|OK|74075|64 *| -1............. ..............................................45 Brown|Martha|62 5 Kimbark|Des Moines|IA|50311|
15

Recuperando Espao em Disco: Eliminando e Reutilizando (Reg. Tam. Var.)


Incluir e Remover Registros da LED:
Na incluso, trata-se a LED como uma PED:
adiciona-se o registro livre na cabea/topo da LED. busca-se o primeiro espao na LED, tal que
|reg-novo| <= |espao| Pode-se pesquisar a LED inteira, sem achar o espao adequado.

Na remoo, trata-se a LED como uma lista:

Se tal espao existe, ento ele removido da LED e reusado. Seno o reg-novo colocado no fim do arquivo.

Essa estratgia pode levar a uma alta fragmentao interna dos registros. Fragmentao interna a perda de espao
ao nvel de cada registro (ocorre por que o espao do registro no totalmente utilizado). 16

Recuperando Espao em Disco: Eliminando e Reutilizando (Reg. Tam. Var.)

Exemplo
Remoo de um registro da LED para armazenar um novo registro que requer 55 bytes de espao.
Tamanho 47 Tamanho 38 Tamanho 72 Tamanho 68 -1 Tamanho 68 -1 Tamanho 72
17

Tamanho 47

Tamanho 38

Registro removido da LED

Recuperando Espao em Disco: Fragmentao Interna


Em registros de tamanho fixo:
Ex: registros de tamanho fixo de 64 bytes
Fragmentao Interna

Ames|John|123 Maple|Stillwater|OK|74075|........................ Morrison|Sebastian|9035 South Hillcrest|Forest Village|OK|74820| Brown|Martha|625 Kimbark|Des Moines|IA|50311|...................

Alternativas:
permitir que os campos possam variar
provoca perdas no final do registro. provoca perdas ao nvel de campo.

dimensionar cada campo pelo maior tamanho da informao

ambas provocam fragmentao interna.


18

Recuperando Espao em Disco: Fragmentao Interna


Em registros de tamanho varivel:
Ex: registros de tamanho varivel com indicador de tamanho
40 Ames|John|123 Maple|Stillwater|OK|74075|64 Morrison|Sebastian |9035 South Hillcrest|Forest Village|OK|74820|45 Brown|Martha|62 5 Kimbark|Des Moines|IA|50311|

A fragmentao interna eliminada na criao dos registros:


usa-se s o espao requerido.

Nos casos de eliminao de registro e reuso de espaos disponveis por registros menores do que os originais:
volta o problema da fragmentao interna.

19

Recuperando Espao em Disco: Fragmentao Interna


Ilustrao: Fragmentao em registros de tamanho varivel

Topo da LED: 43
40 Ames|John|123 Maple|Stillwater|OK|74075|64 *| -1............. ..............................................45 Brown|Martha|62 5 Kimbark|Des Moines|IA|50311|
Aps a ocupao do espao do 2o registro por um novo registro menor que o anterior.

Topo da LED: -1

40 Ames|John|123 Maple|Stillwater|OK|74075|64 Ham|Al|28 Elm|Ada| OK|70332|.....................................45 Brown|Martha|62 5 Kimbark|Des Moines|IA|50311|

Fragmentao Interna20

Recuperando Espao em Disco: Fragmentao Interna


Soluo: LED com reuso e com liberao de espao Pega-se da LED um espao disponvel:
ocupa-se a parte final do espao com o novo registro. altera-se, na LED, o tamanho do espao inicial. Essa entrada mantida na LED para uso futuro. Exceto pelo tamanho desse espao, a LED no alterada.
Topo da LED: 43
40 Ames|John|123 Maple|Stillwater|OK|74075|35 *| -1............. .................26 Ham|Al|28 Elm|Ada|OK|70332|45 Brown|Martha|6 25 Kimbark|Des Moines|IA|50311|
21

Recuperando Espao em Disco: Fragmentao Interna


A parte que fica na LED pode ser muito pequena:
se tal espao no puder ser usado por nenhum outro registro, caracteriza a fragmentao externa.
Topo da LED: 43
40 Ames|John|123 Maple|Stillwater|OK|74075|35 *| -1............. .................26 Ham|Al|28 Elm|Ada|OK|70332|45 Brown|Martha|6 25 Kimbark|Des Moines|IA|50311|
Aps a ocupao de mais um registro de 25 bytes na rea disponvel na LED.

Topo da LED: 43
40 Ames|John|123 Maple|Stillwater|OK|74075|8 *| -1...25 Lee|Ed|R t 2|Ada|OK|74820|26 Ham|Al|28 Elm|Ada|OK|70332|45 Brown|Martha|6 22 25 Kimbark|Des Moines|IA|50311|

Recuperando Espao em Disco: Fragmentao Externa


Meios de combater a Fragmentao Externa
1.

Gerar um novo arquivo (quando a fragmentao ficar intolervel)


eliminando os espaos dos registros eliminados. devolvendo a rea do arquivo antigo ao sistema. Combin-los para fazer deles um nico registro maior.

2. 3.

Concatenar espaos adjacentes na LED

Tentar minimizar a fragmentao antes que ela ocorra, adotando uma das seguintes estratgias de reuso:
primeiro ajuste. melhor ajuste. pior ajuste.
23

Recuperando Espao em Disco: Estratgias de Reuso: Primeiro Ajuste


A LED no est ordenada: os espaos gerados pela eliminao de registros so includos na cabea/topo da lista. Quando se quer introduzir um registro novo: a LED percorrida at que |reg| |espaoi| ou que o fim da lista seja atingido. se um espaoi foi encontrado, grave o registro nele e libere o espao restante. seno, inclua o registro no fim do arquivo.
24

Recuperando Espao em Disco: Estratgias de Reuso: Primeiro Ajuste


Vantagens: a incluso dos registros eliminados rpida. realizada pela cabea da LED. Desvantagens A cada incluso de um novo registro no arquivo a LED precisa ser percorrida. as vezes sem sucesso! No importa o tamanho do espao disponvel, desde que ele comporte o tamanho do novo registro. pode-se ter uma sobra pequena demais ou muito grande!
25

Recuperando Espao em Disco: Estratgias de Reuso: Melhor Ajuste


A LED aqui est ordenada em ordem crescente de tamanho dos espaos.
Os espaos gerados so includos na posio correta da LED.
esse esforo pode ser significativo!

Na incluso de um novo registro registro:


percorre-se a LED at que |registro| |espaoi| grava-se o registro em espaoi

gerando fragmentao

essa sobra pode ser pequena demais e no ser reusvel por nenhum outro registro. Obs: Aqui o espao encontrado na LED o menor espao possvel disponvel para o novo registro.

26

Recuperando Espao em Disco: Estratgias de Reuso: Melhor Ajuste


Vantagens
Como esse o menor espao existente na LED que suporta o registro novo, o desperdcio o menor possvel.
mesmo que ele gere fragmentao externa.

Desvantagem
Os primeiros elementos da LED, de to pequenos, podem no ser aproveitveis:
aumentando o tamanho/tempo da busca at se encontrar o espao adequado. requerendo um tempo significativo.
27

A incluso dos espaos na LED pode ser lenta:

Recuperando Espao em Disco: Estratgias de Reuso: Pior Ajuste


A LED aqui est ordenada em ordem decrescente de tamanho dos espaos: os espaos gerados so includos na posio correta da LED. o que gera um esforo significativo! Na incluso de um novo registro no arquivo: usa-se o registro no topo da LED (vista como pilha) grava-se o registro nesse espao: essa sobra a maior possvel. aumentando as chances de sua reutilizao!
28

Recuperando Espao em Disco: Estratgias de Reuso: Pior Ajuste


Vantagens A busca pelo espao na LED rpida: pega-se o primeiro elemento da LED. Se o primeiro elemento da LED no for grande o bastante para o novo registro, nenhum dos outros elementos sero. Diminui a chance de fragmentao externa. os espaos gerados pela reutilizao so os maiores possveis. Desvantagens A incluso do espao na LED ordenada pelo tamanho custosa.
29

Recuperando Espao em Disco: Estratgias de Reuso: Concluso


A estratgia de reuso somente se aplica a:
arquivos volteis. arquivos de registro com comprimento varivel.

Se o espao perdido por fragmentao interna (ou seja, esto sobrando muitos espaos dentro dos registros):
a escolha recai sobre uma das estratgias:
primeiro ajuste. melhor ajuste.

Se a perda por fragmentao externa (ou seja, esto sobrando muitos espaos que no utilizveis)
ento considere a estratgia do pior ajuste.
30

Prxima Aula
Recuperao rpida de arquivos
Ordenao por Chaves - Keysorting

Você também pode gostar