INE5408 Estruturas de Dados

Propaganda
INE5408
Estruturas de Dados
Gerência de Arquivos
Introdução
• Arquivo:
– conjunto de dados em um dispositivo de armazenamento
secundá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 muito
destes 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 banco
de 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, os
processa 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 estejamos
interessados em processar somente uma pequena
fraçã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çado
moderadamente).
Gerência de Arquivos: princípio básico
• Organizamos os dados de forma a minimizar
o número de acessos à memória secundária
para 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ício
de 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 posicionamento
de um cabeçote de r/w em qualquer ponto;
• uma unidade de alocação do disco (um bloco
ou um setor) possui um endereço físico no
disco;
• podemos endereçar estes da mesma forma
que fazemos com a RAM.
Modelo simplificado
Setor
Superfície de
um Disco
Arquivo
ocupando
dois setores
Trilha
Modelo mais realista
• O disco pode apresentar
fragmentação: os dados não estão
exatamente em espaços contíguos, mas
em unidades de alocação longe umas
das outras, encadeadas como uma lista;
• o encadeamento é tarefa do sistema
operacional e do hardware
(controladora) do disco.
Modelo mais realista
Setor
Superfície de
um Disco
Trilha
Exemplo: disco real
Disco: para trabalhar
Início
• 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 como
apagado ou substituí-lo por outro !
Fim
Tipos de arquivos
Há 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 que
1 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ço
relativo 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 sistema
operacional e do hardware do dispositivo e é
transparente ao programador/usuário.
• Feito o acesso pode-se realizar uma
operação de leitura ou escrita.
Definições
• Registro
Elemento básico de um arquivo de acesso
randô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 determinados
valores.
• Organização Física
A 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 eficientes
possí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 ou
também por rua ou número?
– Modos de recuperação e de atualização.
Tipos de consulta
empregado : registro {
nome : string
cargo : string
salário : inteiro
dataBase : data
endereço : string
}
• Consulta simples: cargo
= “motorista”
• Consulta em uma faixa: salário
• Consulta booleana: cargo
> 560
= “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 sua
definição de registros. Ex.: “empregado” por nome.
– Índice Secundário (ou Indexação por Chave Secundária) é
um índice que organiza o arquivo referenciando outro
campo 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
0015
Início
0001
0002
0005
0012
0014
0016
0018
0028
0045
0050
0056
Exemplo: inclusão em Arquivo Seqüencial com Chave
Início
0001
0002
0005
0012
0014
0016
0018
0028
0045
0050
0056
Início
0001
0002
0005
0012
0014
Exemplo: inclusão em Arquivo Seqüencial com Chave
Início
0001
0002
0005
0012
0014
0016
0018
0028
0045
0050
0056
Início
0001
0002
0005
0012
0014
0015
Exemplo: inclusão em Arquivo Seqüencial com Chave
Início
0001
0002
0005
0012
0014
Início
0001
0002
0005
0012
0014
0016
0015
0018
0016
0028
0018
0045
0028
0050
0045
0056
0050
0056
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üenciais
Idéia geral
Índice de Acesso
Início
0001
0002
0005
0012
0012
0014
0012
0016
0018
0018
0018
0028
0056
0045
0056
0050
0056
Área de Espaço Disponível ou Overflow Area
Arquivos Indexados Seqüenciais
Inserção do 15
Índice de Acesso
Início
0001
0002
0005
0012
0012
0014
0012
0016
0018
0018
0018
0028
0056
0045
0056
0050
0056
0015
Área de Espaço Disponível ou Overflow Area
Arquivos Indexados Seqüenciais
Início
0001
0002
Índice de Acesso
0005
0012
0012
0014
0012
0016
0018
0018
0018
0028
0056
0045
0056
0050
0056
0015
Elemento é inserido na área de Espaço Disponível
0015
Museu revisitado: ISAM original
Museu revisitado: ISAM original
Download