A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Arquivos de Acesso Direto Inhaúma Neves Ferraz Departamento de Ciência da Computação Universidade Federal Fluminense

Apresentações semelhantes


Apresentação em tema: "1 Arquivos de Acesso Direto Inhaúma Neves Ferraz Departamento de Ciência da Computação Universidade Federal Fluminense"— Transcrição da apresentação:

1 1 Arquivos de Acesso Direto Inhaúma Neves Ferraz Departamento de Ciência da Computação Universidade Federal Fluminense

2 2 Sumário Endereçamento e Ponteiros Espalhamento de Registros (Hashing) Espalhamento Baseado em Tabelas Arquivos Extensíveis Espalhamento Virtual Espalhamento Extensível Exemplo de Técnicas de Espalhamento

3 3 Espalhamento e Ponteiros

4 4 Conceito Arquivos de Acesso Direto são aqueles nos quais para se ter acesso a um registro não é necessário fazer referência ou ter acesso a demais registros do arquivo Neste tipo de arquivo a recuperação dos registros é feita diretamente pelo seu respectivo endereço, que pode ser obtido através de transformações aritméticas

5 5 Endereçamento Endereço do registro de ordem I de um arquivo é a posição, em memória secundária, onde principia esse registro O deslocamento dessa posição(seu endereço), em relação ao início do arquivo, é : POSIÇÃO INICIAL = (I - 1) X COMPRIMENTO DO REGISTRO

6 6 Registros de Tamanho Variável (1) Registros de comprimento variável são de difícil tratamento, pois o cálculo da posição inicial depende do comprimento dos registros Procura-se tratar estes registros usando mais de um registro de tamanho fixo

7 7 Registros de Tamanho Variável (2)

8 8 Registros de Tamanho Variável (3)

9 9 Ponteiros Ponteiros são dados a partir dos quais o endereço do objeto apontado pode ser determinado Existem 5 processos de implementação de ponteiros, em ordem crescente de tempo de transformação do ponteiro em endereço: Endereço em memória secundária Número do registro Deslocamento Endereçamento indireto Endereçamento simbólico

10 10 Espalhamento de Registros (Hashing)

11 11 Hashing ou Espalhamento (1) "Hashing" consiste numa função que transforma uma chave em endereço do arquivo onde o registro associado a respectiva chave se encontra A utilização desta função não exige que o arquivo contenha algum tipo de ordenação Em geral, o espaço de endereços (conjunto de endereços possíveis no arquivo) é bem menor que o espaço de chaves (conjunto de chaves válidas)

12 12 Hashing ou Espalhamento (2) O mapeamento do espaço de chaves no espaço de endereços (função hash) pode ser realizado da forma: endereço do registro hash(chave) onde conjunto de endereços conjunto de endereços válidos

13 13 Hashing ou Espalhamento (3) A técnica de "hashing" proporciona uma recuperação de registros extremamente rápida se comparada com a recuperação seqüencial O tempo de recuperação em arquivos seqüenciais cresce com o tamanho do arquivo, o que não ocorre com o "hashing

14 14 Projeto de Arquivos de Acesso Direto No projeto de um arquivo de acesso direto os fatores que é necessário considerar são os seguintes: 1- Agrupar um determinado número de registros em uma unidade com endereço comum chamada "bucket" 2- Calcular o espaço de armazenamento necessário para o arquivo Esse dimensionamento do arquivo depende da densidade de empacotamento ou fator de carga que é a razão entre o número de registros nos arquivos e a capacidade total dos "buckets" 3- Escolher uma função "hash" que é a transformação a aplicar à chave para obter o endereço do "bucket" 4- Optar por uma técnica de resolução do problema de transbordamento Ocorre transbordamento ou "overflow" quando se endereça um registro a um "bucket" já cheio

15 15 Função Hash

16 16 Buckets O arquivo é dividido em seções menores denominadas "buckets", que podem conter um ou mais registros A função "Hash" atribui a cada registro um endereço de "bucket" ("home address"), onde este pode ser acomodado O tamanho de bucket é determinado pelo número de registros que este pode armazenar, ou ainda, pelo número de "slots" que ele contém Um "slot" é uma unidade de armazenamento que contém espaço para um registro Um arquivo com 1000 registros pode ser composto de "buckets" de tamanho 1, ou 500 "buckets" de tamanho 2, etc...

17 17 Colisão e Transbordamento Ocorre uma colisão quando durante uma inclusão de registros, dois deles têm o mesmo endereço calculado pela função hash Estes registros são chamados sinônimos As colisões não constituem problemas enquanto não se atingir a capacidade do "bucket" correspondente A partir daí, ocorre transbordamento, que consiste no fato de um registro não poder ser acomodado em "home bucket"

18 18 Home bucket e homme address Home bucket" é aquele que está associado ao "home address" do registro, calculado pela função "hash" aplicada à chave do registro Aumentando o tamanho dos "buckets" diminui a probabilidade de transbordamento mas aumenta o tempo de busca do registro no "bucket A busca no bucket em memória principal é muito rápida comparada com o tempo de busca do bucket em memória secundária

19 19 Modelo de Bucket

20 20 Densidade de Empacotamento À medida que um arquivo de acesso direto vai se enchendo cresce o número de acessos necessários a operações de inclusão ou recuperação Não é desejável a existência de arquivos com muitos espaços vazios Densidade de empacotamento é a razão: (número de registros no arquivo)/(número de slots no arquivo)

21 21 Expectativa de Transbordamento (1) Sempre que a densidade de empacotamento ultrapassa determinado patamar (usualmente 70%), as colisões tornam-se inaceitavelmente freqüentes, muito embora esse patamar varie sensivelmente com o tamanho dos "buckets" Considere-se N "home buckets", cada qual comportando C registros e havendo K registros armazenados no arquivo. A densidade de empacotamento é :

22 22 Expectativa de Transbordamento (2) Supondo distribuição uniforme de registros nos "buckets, a probabilidade de um dado "bucket" receber exatamente I dos K registros é produto de: A probabilidade do "bucket" receber I registros A probabilidade dos demais K-I registros não serem destinados ao "bucket" O número de maneiras que I registros possam ser destinados a um "bucket"( combinação de K elementos, I a I)

23 23 Expectativa de Transbordamento (3) A probabilidade de J registros transbordarem de um "bucket" com capacidade C é P(C+J) A expectativa do total de transbordamento que possa ocorrer em um "bucket" é

24 24 Expectativa de Transbordamento (4) A expectativa de transbordamento para o conjunto dos "home buckets" é ou, em função percentual dos registros armazenados:

25 25 Expectativa de Transbordamento (5)

26 26 Funções de Espalhamento Funções de Espalhamento ou funções Hash transformam uma chave em endereço de "bucket Exemplos Resto da Divisão Meio do Quadrado Dobramento Deslizamento Análise Digital Codificação Algébrica

27 27 Resto da Divisão A chave é digitalizada para um número inteiro Adicionando produtos dos caracteres por pesos de um vetor arbitrário O número inteiro obtido é dividido por um primo próximo do número de buckets do arquivo O resto da divisão é o hime address

28 28 Dobramento e Deslizamento Uso de OU-EXLUSIVO em strings de log2 ( número de buckets ) bits extraídos da chave

29 29 Outras funções Meio do Quadrado - chave é multiplicada por ela mesma e o endereço é obtido pelo truncamento das duas extremidades do número obtido pelo produto Análise Digital – determina-se a distribuição de valores da chave em cada posição ou dígito e as posições que possuem uma má distribuição são desconsideradas na transformação Codificação Algébrica – divisão de polinômios onde cada dígito da chave é considerado um coeficiente de um polinômio

30 30 Tratamento do Transbordamento No transbordamento é preciso gerenciar: 1- A busca do espaço para armazenamento do registro 2- A recuperação do registro quando necessário Estratégias endereçamento aberto – solução computacional onde calculam-se endereços de uma seqüência até obter de um deles o registro buscado ou a informação de ausência de espaços ou do registro no arquivo endereçamento fechado (ou encadeamento) – solução por estruturas de dados na qual as cadeias de registros de transbordamento são ancoradas nos "home buckets".

31 31 Endereçamento aberto uma lista de endereços de "buckets" A i = f(i, Chave), i= 1,2,3,... Sondagem linear A i = (i*passo + hash(chave)) mod N onde N = número de "buckets" i = 0,1,2,3,... passo, passo 1, passo 2 inteiro Sondagem quadrática A i = (i*passo 1 + i*i*passo 2 + hash(chave)) mod N

32 32 Delete byte A exclusão de registros no endereçamento aberto poderia prejudicar a busca pela criação de espaços vazios que fariam cessar buscas subseqüentes Cria-se uma variável de estado de slot que permite criar uma marca de exclusão no registro (o "delete byte") comportando as seguintes transições de estados de registros Vazio Ocupado Excluído A busca só se encerra ao encontrar um slot vazio

33 33 Estados de um delete byte

34 34 Esquemas de Transbordamento

35 35 Espalhamento Baseado em Tabelas

36 36 Conceito Indicado para casos em que o número de recuperações é bem maior que o de inclusões, pois a busca é efetuada em apenas um acesso a memória secundária Baseado em uma tabela com uma entrada para cada home address, cada entrada possuindo uma linha ou array de células Cada célula contém um endereço de "bucket", e o valor da maior assinatura digital de registro armazenado naquele bucket

37 37 Assinatura Digital Uma assinatura digital de uma chave de registro (ou pseudo chave) é uma seqüência pseudo- aleatória de bits (cujo número de zeros seja próximo do número de uns) cujo tamanho pode crescer e que funciona como uma abreviatura da chave Os registros de mesmo home address estão todos armazenados nos buckets indicados nas células de uma entrada da tabela e classificados por ordem de assinatura digital

38 38 Exemplo de Assinatura Digital A assinatura digital pode ser encontrada da forma b i = paridade ( X i ) onde X i+1 = ( X i * a + b) mod c e a,b e c são inteiros e X 0 = H(key) Ou: chave X 0 X 1 X 2 X 3 b o b 1 b 2 b 3

39 39 Funções utilizadas Para o Espalhamento Baseado em Tabelas é necessária uma função "hash" que gere uma seqüência de endereços de "buckets" e uma função paralela de geração de uma sequência de k bits, isto é, uma assinatura digital do registro a partir de uma dada chave

40 40 Exemplo (1) Suponha um arquivo com tamanho de "bucket" igual a 3, assinaturas digitais com 5 bits (k = 5) e a inclusão de um registro cuja chave primária é "Maria" num "bucket" lotado A assinatura da chave "Maria" corresponde a = 2 Como esta assinatura é menor que a maior do "bucket", realiza-se a inserção da chave de forma ordenada Como o "bucket" estava cheio, ocorre transbordamento

41 41 Exemplo (2) A maior chave do "bucket" será eliminada e utilizada como registro separador entre este "bucket" e o seu sucessor; e, logo após, re-inserida no arquivo em outro endereço, podendo ocorrer novo transbordamento Sobrou

42 42 Recuperação de Registros (1) A recuperação é bem mais eficiente que a inclusão. Neste caso, busca-se o menor inteiro i tal que assinatura i = tabela[bucket i ] Exemplo

43 43 Recuperação de Registros (2) Para assinatura igual a 100

44 44 Exclusão de Registros Na exclusão, efetua-se a busca do registro, o mesmo é excluído do arquivo e a tabela atualizada

45 45 Arquivos Extensíveis

46 46 Conceito Em muitas aplicações, o número de registros pode variar consideravelmente Arquivos de tamanho fixo, com capacidade para k registros, com número de registros a incluir muito próximo de k, possuem alta densidade de empacotamento e consequentemente, recuperações mais lentas Se este número for muito menor que k, caracteriza-se desperdício de espaço no arquivo

47 47 Técnicas de Tratamento Existem técnicas para o tratamento de arquivos com tamanho indefinido, ou seja, os arquivos extensíveis, tais como: "Hashing" (ou Espalhamento) Dinâmico "Hashing" (ou Espalhamento) Extensível

48 48 Espalhamento Dinâmico

49 49 Espalhamento Dinâmico (1) Neste tipo de "hashing", existem inicialmente N células na memória principal, cada qual apontando para um "bucket" no arquivo A função "hash" H utilizada, transforma a chave em um endereço de célula Cada célula tem atributos filho esquerdo, filho direito e pai Os filhos de uma célula são endereços de células ou de buckets Quando uma célula aponta para um bucket seu outro ponteiro está aterrado

50 50 Espalhamento Dinâmico (2) Na busca de um registro calcula-se o home address e a assinatura digital A célula correspondente ao home address é acessada Caso o filho direito de uma célula seja ponteiro aterrado seu filho esquerdo apontará para o bucket que deve conter o registro buscado Caso contrário as células em memória tenderão a formar uma floresta de árvores binárias cada qual associada a um home address A busca na floresta continua até encontrar uma célula com ponteiro direito aterrado (e com ponteiro esquerdo apontando para um bucket)

51 51 Espalhamento Dinâmico (3) Para a navegação de busca na floresta, em cada nível i da árvore (raiz ao nível 1), verifica-se o bit de ordem i da assinatura digital desviando para a célula filha mais velha no caso de bit 0 e para a filha mais nova em caso de bit 1

52 52 Espalhamento Dinâmico (4) Para a busca neste tipo de arquivo a função "hash" H determina em qual árvore binária se encontra o registro a recuperar, e a função B determina, a cada b i, qual o caminho a seguir nesta árvore (onde i = nível corrente na árvore binária), ou seja para b i = 0, escolhe-se a folha da esquerda e, para b i =1, a folha da direita

53 53 Inclusão de Registros Na inclusão de um novo registro, se o "bucket" encontrado pela busca estiver cheio, ocorre uma partição deste "bucket Um novo bucket (companheiro ou buddy) é alocado bem como uma nova célula em memória apontando o bucket recém alocado Aloca-se também outra célula em memória para apontar o bucket que transbordou A antiga célula associada ao "bucket" que transbordou passará a apontar para as duas células associadas aos buckets ( o que transbordou e o novo) e estas últimas apontam para os respectivos buckets Os c registos contidos no "bucket" e o registro a inserir são redistribuídos entre ambos os "buckets Buddy buckets são apontados por células irmãs

54 54 Redistribuição de Registros O critério para a redistribuição dos registros de um bucket, apontado por uma célula de nível i, é dado pela função B (assinatura digital) que determina se cada registro deva ser alocado no "bucket" da esquerda (b i = 0) ou da direita (b i = 1)

55 55 Exemplo de Floresta de Índices Na figura de baixo vemos a floresta da figura de cima após o transbordamento do bucket 2

56 56 Exclusão de Registros Na exclusão de registros deve-se verificar se há possibilidade de liberação de buckets Isto ocorre quando a soma das populações do bucket que sofreu a exclusão e do seu bucket companheiro (se houver) pode ser contida em um só bucket Neste caso juntam-se os registros em um só bucket, libera-se o seu companheiro e liberam- se as duas células que apontavam para esses buckets

57 57 Bucket companheiro Buckets" companheiros são aqueles apontados por nós externos (folhas da árvore de índices) com pai comum Para identificar o bucket companheiro basta verificar, pela árvore binária de índices, a natureza do outro ponteiro da célula que aponta o bucket Se o ponteiro estiver aterrado não existe companheiro Se apontar célula não existe companheiro Se apontar bucket este é o companheiro

58 58 Espalhamento Extensível

59 59 Conceito O Hashing Extensível é uma evolução do Hashing Dinâmico no qual a floresta de índices é substituída por um diretório, que é um vetor de endereços de buckets indexado pelo número binário indicador da posição do elemento do vetor Calcula-se exclusivamente a assinatura digital da chave do registro e seus primeiro d bits são o índice para busca no vetor do endereço de bucket O "diretório" é uma tabela constituída de 2*d índices

60 60 Parâmetros utilizados Cada bucket contém um atributo um inteiro T considerado "header", que indica o número de bits iniciais iguais de cada chave contida no "bucket O número d declarado no "diretório" é o maior dentre os T dos "buckets"

61 61 Exemplo de hashing extensível

62 62 Inclusão de Registros Dada a chave para a inclusão e sua assinatura, comparam-se os d primeiros bits da chave com cada índice no diretório até obter uma coincidência Obtido o índice se obtém o "bucket" correspondente ao endereço destino (semelhante ao home address) Havendo espaço disponível a inclusão é efetivada

63 63 Transbordamento (1) Se houver transbordamento, aloca-se um novo "bucket" e os registros contidos no bucket que transbordou e mais o registro a incluir são redistribuídos entre o bucket transbordante e o novo "bucket" alocado O contador T é incrementado de uma unidade e o critério de distribuição continua sendo a coincidência, em cada bucket dos T bits iniciais de cada chave contida no bucket (só que no caso T está maior do que antes do transbordamento).

64 64 Transbordamento (2) Quando um "bucket" com "header" de T bits transborda ocorre uma partição e os C+1 (C é a capacidade do "bucket", medida em "slots") registros são dispersados entre a folha do "bucket" existente e a recém-alocada, de acordo com o bit de ordem T+1 da assinatura de suas chaves Os "headers" dos "buckets" passam a ter T+1 bits Se d T +1 a partição é trivial sem necessidade de alterar a tabela de índices Se d < T+1 há necessidade de incrementar d, o que dobra a tabela Os "buckets" não partidos passam a receber o dobro do número de ponteiros

65 65 Atualização do Diretório Durante as alterações de inclusão as mudanças no "diretório" que podem ocorrer são: Se d T, a única modificação a ser efetuada consiste em atualizar os ponteiros dos índices do "diretório", ou seja, um dos índices apontará para o novo "bucket" Se d < T, e sendo, por hipótese d T, o valor de d característico do "diretório" deve ser incrementado de uma unidade e, com isso, o tamanho do "diretório" será dobrado, e os ponteiro dos novos índices atualizados

66 66 Exemplo de hashing extensível (1) Na figura abaixo, com todos os buckets lotados, suponha-se que houve transbordamento no "bucket" cujos índices são 10 e 11(terceira entrada da tabela) Há 4 entradas para quatro buckets todos eles com T = 2 Deseja-se incluir um registro no bucket com índice 00 Há transbordamento e como o valor de T já era igual a 2 deve passar para 3 T>d, logo d vai crescer e a tabela dobra de tamanho Passam a existir 8 entradas na tabela e 5 buckets

67 67 Exemplo de hashing extensível (2) Todos os buckets estavam lotados Foi incluído um registro com índices são 10 Foi incluído um registro com índice 00

68 68 Exclusão de Registros Na exclusão de registros deve-se examinar o "bucket"de onde saiu o registro e seu "bucket" companheiro Se, após a exclusão, o número de registros em ambos os "buckets" couber em apenas um, os buckets são concatenados e um deles é desalocado Após a conacatenação, o "header" do "bucket" remanescente é decrementado de 1 unidade Quando todos os "headers" T forem menores do que d, d deve ser decrementado reduzindo a tabela diretório à metade

69 69 Bucket companheiro São "buckets" companheiros aqueles que tem a mesma cabeça T e, além disso, as assinaturas digitais dos registros contidos em ambos tem T-1 bits iniciais iguais Para verificar qual o índice do bucket companheiro escolhem-se os T bits iniciais de qualquer dos registros do bucket e se faz um OU-Exlusivo com 1

70 70 Exemplo de Utilização de Técnicas de Acesso Direto

71 71 Enunciado (1) Criar um arquivo de acesso direto, com as seguintes características: Tamanho de "bucket" = 3; Fator de carga a = 80%; Função hash igual ao resto da divisão do inteiro proveniente da digitalização da chave pelo maior primo igual ou menor do que o número de "buckets".

72 72 Enunciado (2) Determinar o número médio de acessos a "buckets" na recuperação e comparar as técnicas de tratamento de transbordamento por: endereçamento aberto; encadeamento com listas confluentes na área primária; encadeamento com listas separadas em área independente com "buckets" de tamanho 2.

73 73 Enunciado (3) Os registros a processar são 12 A digitalização de suas chaves produz os inteiros que se seguem: {38, 27, 13, 17, 43, 7, 8, 22, 82, 40, 16, 25} Estudar o efeito da substituição de registros tal que em lugar de 40 existisse 42 e em lugar de 16 existisse 23

74 74 Solução Número de "slots" necessários : 12/0,8 = 15 Número de "buckets" : 15/3 = 5 Função "hash" : H(k)=mod(k,5) H i (chave)=mod((H i -1(chave) + 1),5)

75 75 Endereçamento Aberto Primeira Lista de Dados

76 76 Endereçamento Aberto Segunda Lista de Dados

77 77 Endereçamento Aberto Primeira e Segunda Listas de Dados

78 78 Encadeamento Primeira Lista de Dados

79 79 Encadeamento Segunda Lista de Dados

80 80 Encadeamento Primeira e Segunda Listas de Dados


Carregar ppt "1 Arquivos de Acesso Direto Inhaúma Neves Ferraz Departamento de Ciência da Computação Universidade Federal Fluminense"

Apresentações semelhantes


Anúncios Google