ine5408 estruturas de dados - ufsc · – arquivo invertido. arquivos seqüenciais • um registro...
TRANSCRIPT
![Page 1: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/1.jpg)
INE5408Estruturas de Dados
Gerência de Arquivos
![Page 2: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/2.jpg)
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
![Page 3: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/3.jpg)
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.
![Page 4: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/4.jpg)
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.
![Page 5: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/5.jpg)
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
![Page 6: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/6.jpg)
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.
![Page 7: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/7.jpg)
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
![Page 8: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/8.jpg)
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).
![Page 9: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/9.jpg)
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.
![Page 10: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/10.jpg)
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.
![Page 11: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/11.jpg)
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.
![Page 12: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/12.jpg)
Modelo simplificadoArquivoocupandodois setores
Setor
Superfície deum Disco Trilha
![Page 13: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/13.jpg)
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.
![Page 14: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/14.jpg)
Modelo mais realistaSetor
Superfície deum Disco
Trilha
![Page 15: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/15.jpg)
Exemplo: disco real
![Page 16: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/16.jpg)
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
![Page 17: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/17.jpg)
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
![Page 18: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/18.jpg)
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.
![Page 19: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/19.jpg)
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.
![Page 20: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/20.jpg)
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.
![Page 21: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/21.jpg)
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.
![Page 22: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/22.jpg)
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.
![Page 23: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/23.jpg)
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
![Page 24: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/24.jpg)
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.
![Page 25: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/25.jpg)
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
![Page 26: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/26.jpg)
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.
![Page 27: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/27.jpg)
Exemplo: inclusão em Arquivo Seqüencial com Chave
Início00010002000500120014001600180028004500500056
0015
![Page 28: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/28.jpg)
Exemplo: inclusão em Arquivo Seqüencial com Chave
Início00010002000500120014001600180028004500500056
Início00010002000500120014
![Page 29: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/29.jpg)
Exemplo: inclusão em Arquivo Seqüencial com Chave
0015
Início00010002000500120014001600180028004500500056
Início00010002000500120014
![Page 30: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/30.jpg)
Exemplo: inclusão em Arquivo Seqüencial com Chave
0015
Início00010002000500120014001600180028004500500056
Início00010002000500120014
001600180028004500500056
![Page 31: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/31.jpg)
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.
![Page 32: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/32.jpg)
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.
![Page 33: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/33.jpg)
Arquivos Indexados SeqüenciaisIdéia geral
Início00010002000500120014001600180028004500500056
001200120018001800560056
Área de Espaço Disponível ou Overflow Area
Índice de Acesso
![Page 34: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/34.jpg)
Arquivos Indexados SeqüenciaisInserção do 15
Início00010002000500120014001600180028004500500056
001200120018001800560056
Área de Espaço Disponível ou Overflow Area
Índice de Acesso
0015
![Page 35: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/35.jpg)
Arquivos Indexados Seqüenciais Início00010002000500120014001600180028004500500056
001200120018001800560056
Elemento é inserido na área de Espaço Disponível
Índice de Acesso
0015 0015
![Page 36: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/36.jpg)
Museu revisitado: ISAM original
![Page 37: INE5408 Estruturas de Dados - UFSC · – Arquivo Invertido. Arquivos seqüenciais • Um registro está atrás do outro: – leitura é realizada seqüencialmente; – escrita só](https://reader034.vdocuments.com.br/reader034/viewer/2022051808/600db4fba93caf51fc10ccaf/html5/thumbnails/37.jpg)
Museu revisitado: ISAM original