INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro...

Post on 25-Sep-2020

3 views 0 download

Transcript of INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro...

INE5408Estruturas de Dados

Gerência de Arquivos

Introdução• Arquivo:

– conjunto de dados em um dispositivo de armazenamentosecundário (externo);

– tipicamente: disco, disquete, fita, CD-ROM, MO-Disc, Zip, Jaz, etc.

• Tipos de dispositivos:– Acesso Seqüencial

• Fita (carretel, streamer, DAT, Travan);• dados só podem ser lidos na mesma ordem em que foram

escritos;• escrita só é possível após o final da área utilizada.

– Acesso Aleatório• Disco, CD, MO, disquete, Zip, Jaz;• dados podem ser lidos e escritos* em qualquer ordem.

*à exceção do CD

Características: memória secundária x RAM

• RAM– Vantagens:

• rápido acesso;• fácil de alterar.

– Desvantagens:• volátil (dados desaparecem quando desligamos a máquina).

• Dispositivos de Armazenamento Secundário– Vantagens:

• espaço muito maior do que memória primária (RAM);• conservativos (dados não desaparecem quando desligamos a

máquina).– Desvantagens:

• acesso comparativamente muito lento;• alteração/inclusão de dados às vezes ainda mais lenta.

Dispositivos de Acesso Seqüencial• Exemplo típico: Fita• Extremamente lentos• Utilizados para:

– armazenar dados que vão ser acessados todos de uma só vez e

– não vão mais ser alterados.• Uso típico: Backup

• A gerência de arquivos não se ocupa muitodestes dispositivos.

Dispositivos de Acesso Randômico / Aleatório

• Exemplo típico: Disco• Relativamente rápidos• Utilizados para:

– dados que sofrem freqüentes pesquisas– dados muito alterados ou não definitivos

• Uso típico: área de trabalho ou bancode dados

• Base para as técnicas que serão vistas

Gerência de Dados: noção intuitiva• Usamos RAM para armazenar dados temporariamente

enquanto estamos processando-os;• usamos dispositivos de armazenamento secundário para

guardar dados não processados e dados depois de processados.

• Solução Intuitiva: um programa carrega todos os dados que necessita em uma estrutura de dados na memória, osprocessa completamente e depois os escreve de volta.

• Problemas:– dados podem não caber na memória;– ler e depois reescrever todos os dados de um conjunto

toma muito tempo. Pode ser que estejamosinteressados em processar somente uma pequenafração do conjunto.

Gerência de Arquivos• Definição: conjunto de métodos e técnicas para

(eficientemente):– classificar arquivos e conteúdo de arquivos;– fazer busca de dados em arquivos;– acrescentar dados a arquivos;– eliminar dados de arquivos;– alterar valores de dados existentes em arquivos;– copiar arquivos;– alocar, desalocar e manter espaço em dispositivos de

armazenamento secundário para manter arquivos.

• Maior restrição: Tempo

Gerência de Arquivos: objetivo principal• Solução para o problema da leitura/escrita de todos

os dados:– trabalhamos com os dados organizados em arquivos;– só trazemos para a memória dados que queremos alterar;– só escrevemos em disco novos dados que queremos incluir;– só retiramos do disco dados que queremos eliminar.

• Fator mais restritivo: o tempo de acesso aos dados– Organizamos os arquivos de forma a minimizar o tempo de

acesso aos dados;– eficiência na organização tem prioridade maior que

economia de espaço (pode ser desperdiçadomoderadamente).

Gerência de Arquivos: princípio básico• Organizamos os dados de forma a minimizar

o número de acessos à memória secundáriapara executar uma operação (procura, inserção, alteração, deleção).

• Para isso utilizamos:– organizações de dados mais rígidas do que na

memória (mesmo que isso signifique desperdíciode espaço);

– técnicas de indexação;– algoritmos de busca.

Disco• Exemplo típico para uma memória

secundária de acesso aleatório;• compreender a forma de

armazenamento é importante;• modelo de estruturação do disco serve

para todos os outros meios secundários.

Modelo simplificado• Dados são organizados em superfícies,

trilhas, setores e blocos;• um arquivo pode ser imaginado como sendo

constituído por uma seqüência de dados no disco;

• o acesso é feito através do posicionamentode um cabeçote de r/w em qualquer ponto;

• uma unidade de alocação do disco (um blocoou um setor) possui um endereço físico no disco;

• podemos endereçar estes da mesma forma que fazemos com a RAM.

Modelo simplificadoArquivoocupandodois setores

Setor

Superfície deum Disco Trilha

Modelo mais realista• O disco pode apresentar

fragmentação: os dados não estãoexatamente em espaços contíguos, masem unidades de alocação longe umasdas outras, encadeadas como uma lista;

• o encadeamento é tarefa do sistemaoperacional e do hardware(controladora) do disco.

Modelo mais realistaSetor

Superfície deum Disco

Trilha

Exemplo: disco real

Disco: para trabalhar• Tudo o que precisamos para trabalhar

com técnicas de gerência de arquivos éimaginar:– que um arquivo é uma seqüência de dados

sem “buracos” no meio;– que podemos acessar qualquer parte deses

dados através de seu endereço relativo (a partir do início);

– que só podemos incluir dados novos no fim;– dados do meio só podem ser alterados.

– Apagar um dado significa marcá- lo comoapagado ou substituí-lo por outro !

Início

Fim

Tipos de arquivosHá basicamente dois tipos de arquivos,

vistos sob o ponto de vista do armazenamento de informação:

• Arquivos de Formato Variável

• Arquivos de Registros

Arquivos de Formato Variável• São arquivos onde a única unidade de

endereçamento possível é o byte;

• os arquivos não são organizados em estruturas. Exemplo típico: arquivos texto– Mesmo sendo os arquivos texto organizados em linhas,

estas têm tamanho variável e não servem para endereçar o arquivo - você não sabe a que distância do começo do arquivo a “linha 13” está.

• São tratados como arquivos de acesso seqüencial.

Arquivos de Registros ou de Acesso Randômico

• São arquivos organizados em unidades (maiores que1 byte) de tamanho sempre igual, chamadas registros.– Registros têm a mesma filosofia que as structs em “C” ou

records em Pascal;– são conjuntos de dados com tamanho fixo, mesmo que uma

parte não seja aproveitada;– permitem que sejam usados como unidade de

endereçamento relativa. Ex.: “Registro 34278”.Ex.: podemos armazenar um nodo de uma árvore como um registro. O ponteiro “direita” apontará para o endereçorelativo de um registro representando outro nodo no arquivo.

– Técnicas de Gerência de Arquivos são voltadas aos Arquivos de Registros.

Acesso a registros• Quase todas as linguagens de programação

provêm uma facilidade para o acesso a arquivos de endereçamento randômico.– Ex.: seek(arquivo,posição) em Pascal.– Ex.: fseek(arquivo*,posição,SEEK_SET) em “C”.

• O acesso é feito simplesmente fornecendo-se o endereço relativo (número de registro):– o resto (encontrar a trilha e o setor, posicionar o

cabeçote, etc.) é incumbência do sistemaoperacional e do hardware do dispositivo e étransparente ao programador/usuário.

• Feito o acesso pode-se realizar umaoperação de leitura ou escrita.

Definições• Registro

Elemento básico de um arquivo de acessorandômico:– todos os registros de um arquivo têm o mesmo tamanho.

• Item de DadosÉ o campo de um registro.

• OcorrênciaÉ uma instância de um registro com determinadosvalores.

• Organização FísicaA forma de organização de um arquivo, sua estrutura(de dados e de índices):– contrapartida ao conceito de Estrutura de Dados.

Escolha da organização de arquivos• Principal objetivo:

– fornecer caminhos de acesso aos registros durante as operações de recuperação e atualização de dados.

• Critérios:– consultas sempre envolvem buscas. Os caminhos de acesso

aos registros devem tornar essas buscas o mais eficientespossível.

• Depende:– dos tipos de consultas permitidas;– do número de chaves (só uma ou chaves secundárias).

Ex.: vamos indexar uma lista telefônica só por nome outambém por rua ou número?

– Modos de recuperação e de atualização.

Tipos de consultaempregado : registro {

nome : stringcargo : stringsalário : inteirodataBase : dataendereço : string

}

• Consulta simples: cargo = “motorista”

• Consulta em uma faixa: salário > 560

• Consulta booleana: cargo = “motorista” E salário > 300 E dataBase = 15/12/2007

Indexação• Podemos usar um campo de uma estrutura de registro para

“identificar” esse registro. Chamamos a este campo de chave.

• Índice é uma estrutura de dados que mantém o conjunto de chaves de um arquivo e seus endereços e serve de referência para os registros.– Índice Primário (ou Indexação por Chave Primária) é um

índice único que organiza o arquivo através do campo considerado “mais importante” ou “identificador” da suadefinição de registros. Ex.: “empregado” por nome.

– Índice Secundário (ou Indexação por Chave Secundária) éum índice que organiza o arquivo referenciando outrocampo ou combinação de campos. Ex.: indexamos“empregado” por nome e por data-base. Data-base éum índice secundário.

Métodos de gerência/organização• Arquivos Seqüenciais

– Primária• Arquivos Indexados Seqüenciais

– Primária• Árvores

– AVL, B• Primária

– K-D• Primária, Secundária

• Listas (Primária e Secundária)– Multilista– Arquivo Invertido

Arquivos seqüenciais• Um registro está atrás do outro:

– leitura é realizada seqüencialmente;– escrita só no final.

• Indexação: Ordenação por Chave Primária– Indexação Primária: podemos ordenar o arquivo pelo campo

chave. Semelhante à lista ordenada em um vetor.– Vantagem: acesso seqüencial de um conjunto de dados é o

mais rápido.• Útil quando sempre tenho de processar quase todos os

elementos.– Desvantagens: inclusão e exclusão é extremamente custosa.

Duas soluções:• cópia;• inclusão/exclusão com o algoritmo da lista ordenada em

vetor.

Exemplo: inclusão em Arquivo Seqüencial com Chave

Início00010002000500120014001600180028004500500056

0015

Exemplo: inclusão em Arquivo Seqüencial com Chave

Início00010002000500120014001600180028004500500056

Início00010002000500120014

Exemplo: inclusão em Arquivo Seqüencial com Chave

0015

Início00010002000500120014001600180028004500500056

Início00010002000500120014

Exemplo: inclusão em Arquivo Seqüencial com Chave

0015

Início00010002000500120014001600180028004500500056

Início00010002000500120014

001600180028004500500056

Arquivos Indexados Seqüenciais• Arquivos Seqüenciais passíveis de serem

acessados através de tabelas de índices.• Exemplo mais típico: ISAM (IBM):

– Indexed Sequential Access Method;– mais utilizado método de gerência de arquivos

durante muito tempo;– suportado por linguagens de programação MUITO

velhas como COBOL ou PL/1;– existia como pacote de software disponível

inicialmente só para mainframes (Ex.: IBM 4341 e linha VMS);

– mais tarde passou a existir também para PCs sob DOS.

Arquivos Indexados Seqüenciais: características

• Arquivo ordenado por chave primária;• tabela de índices também ordenada por chave

primária é usada para acessar áreas do arquivo.– Originalmente essas tabelas ficava no começo do próprio

arquivo.• Tabela de índices pode ter vários níveis

(índice hierárquico ou “quase-árvore”);• inserções são realizadas na área de overflow ou

área de espaço livre. Também indexada na tabela;• deleções somente são marcadas;• atualização periódica através de cópia do arquivo.

Arquivos Indexados SeqüenciaisIdéia geral

Início00010002000500120014001600180028004500500056

001200120018001800560056

Área de Espaço Disponível ou Overflow Area

Índice de Acesso

Arquivos Indexados SeqüenciaisInserção do 15

Início00010002000500120014001600180028004500500056

001200120018001800560056

Área de Espaço Disponível ou Overflow Area

Índice de Acesso

0015

Arquivos Indexados Seqüenciais Início00010002000500120014001600180028004500500056

001200120018001800560056

Elemento é inserido na área de Espaço Disponível

Índice de Acesso

0015 0015

Museu revisitado: ISAM original

Museu revisitado: ISAM original