You are on page 1of 24

ST562 – Estruturas de Arquivos

ST562 – Estruturas de Arquivos

Prof. Dr. Celmar Guimarães da Silva

Faculdade de Tecnologia
Universidade Estadual de Campinas

celmar@ft.unicamp.br

1
ST562 – Estruturas de Arquivos

Aula 01

● Assuntos:
– Avisos gerais
– Introdução à disciplina

2
ST562 – Estruturas de Arquivos

Revisão básica

● Bit: binary digit, ou dígito binário. Em suma, 0 ou 1.


● Byte: conjunto de 8 bits. Consegue representar um
valor de 0 a 255.
● Arquivo: conjunto de bytes armazenados em
memórias como discos ou fitas.
– Programas
– Textos
– Planilhas
– Arquivos de dados etc.

3
ST562 – Estruturas de Arquivos

Memórias

● Dados são armazenados em memórias


– Memória primária
● RAM – Random Access Memory (memória de acesso
aleatório)
– Memórias secundárias
● Fitas
● Discos (disquetes, HD)
● Pen Drives - Memórias Flash

4
ST562 – Estruturas de Arquivos

Lentidão

● Discos são lentos!


– Exemplo de velocidade de obtenção de uma determinada
quantidade de dados (Zoellick & Folk, 1992)
● da RAM:
– 120 nanossegundos = 120 * 10 - 9 s = 0,00000012 s
● de um disco:
– 30 milissegundos = 30 * 10 - 3 s = 0,030 s

Diferença da ordem de 106 (um milhão) !!!!

5
ST562 – Estruturas de Arquivos

Lentidão

● Discos são lentos!


– Comparação de velocidade
● Memória SDRAM DDR3-1600 (clock de 200 MHz)
– Taxas de transferência de até 12800 MB/s [1]
● Discos Seagate® Cheetah®:
– Taxas de transferência sustentada de até 125 MB/s [2]

Fontes: [1] http://en.wikipedia.org/wiki/DDR3_SDRAM (02/03/2009),


6 [2] http://www.seagate.com/www/en-us/products/servers/cheetah (02/03/2009)
ST562 – Estruturas de Arquivos

Lentidão

● Fitas também são lentas, e (para piorar) ainda possuem


acesso apenas sequencial

7
ST562 – Estruturas de Arquivos

RAM x Discos

● RAM
– Acesso praticamente imediato aos dados
armazenados
– Capacidade: Pequena (ex. 4 GB)
– Não mantém os dados se computador for desligado
(volátil)
● Discos
– Acesso lento aos dados armazenados
– Capacidade: Grande (ex. 2 TB... ou mais!)
– Mantém os dados mesmo se computador for
desligado (não-volátil)

8
ST562 – Estruturas de Arquivos

Discos

“Lentidão” relativa de acesso

Capacidade e não-volatilidade

Como aproveitar as qualidades e driblar as dificuldades


dos discos?

9
ST562 – Estruturas de Arquivos

Objetivos para obter dados do


disco
● Fazer o menor número possível de acessos ao disco
para obter os dados que precisamos.
– Idealmente, apenas 1.
● Fazer com que as informações estejam organizadas no
disco de forma que se possa obter agrupamentos de
informações com apenas 1 acesso ao disco.

10
ST562 – Estruturas de Arquivos

Objetivos gerais da disciplina

● Apresentar como as características dos dispositivos de


memória secundária afetam o acesso a dados nelas
armazenados.
● Apresentar como arquivos podem ser projetados e
armazenados para maximizar a velocidade de acesso
a dados
– Considerando inclusive que esses arquivos podem
mudar de conteúdo e de tamanho ao longo do tempo.

11
ST562 – Estruturas de Arquivos

Algumas preocupações

● Arquivo cabe na RAM?


– Se sim, copio para a RAM e acesso seus dados de
forma mais imediata.
– Não cabe? Copio partes desse arquivo na RAM e
trabalho com poucas dessas partes por vez.
● Como achar em que parte de um arquivo está uma
determinada informação?
– Analiso cada parte do arquivo? E se ele for muito
grande?
– Índices (como os de livros) ?
– Buscas (como p. ex. busca binária) ?

12
ST562 – Estruturas de Arquivos

Algumas preocupações

Essas são algumas das preocupações que veremos ao


longo desta disciplina...

13
ST562 – Estruturas de Arquivos

História de estruturas de
arquivos
● Primeiros trabalhos:
– Arquivos estavam gravados em fita
– Acesso sequencial: custo crescia com o tamanho do
arquivo
– Uso de índices
● 1960...:
– Índices cresciam muito e se tornavam difíceis de
gerenciar, devido a alterações frequentes
– Uso de árvores para tentar resolver esse problema
– 1963: Desenvolvimento de árvore AVL para uso na
RAM; AVL não parecia adequada para uso com arquivos

14
ST562 – Estruturas de Arquivos

História de estruturas de
arquivos
● 1970...:
– 1973: Desenvolvimento de árvore B para organização
de índices em arquivo – Rápido acesso a registros
individuais.
– Problema: acesso sequencial ficou prejudicado
– Desenvolvimento de árvore B+: acesso sequencial e a
registros individuais
– Acessos a registro de arquivo em 3 ou 4 acessos a disco
● 1980...:
– Hashing e Hashing estendido: acessos a registro de
arquivo em 1 acesso a disco

15
ST562 – Estruturas de Arquivos

Operações fundamentais de
processamento de arquivos
● Abrir arquivo
● Fechar arquivo
● Leitura de sequência de bytes
● Escrita de sequência de bytes
● Seeking (mover apontador de leitura e escrita)

16
ST562 – Estruturas de Arquivos

Criação de arquivo

#include <stdio.h>

int main() {
const int TAMANHO_BUFFER = 1024;
const int TOTAL = 100*1024*1024;
char buffer[TAMANHO_BUFFER+1];
FILE *fp;
fp = fopen("test","w");
int x,t;
for (t=0; t<TAMANHO_BUFFER; t++) {
buffer[t]=65 + (t & 15);
}
for (x=0; x<TOTAL/TAMANHO_BUFFER; x++) {
fwrite(&buffer, TAMANHO_BUFFER, 1, fp);
}
fclose(fp);
}

17
ST562 – Estruturas de Arquivos

Leitura de arquivo
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {


int tamanho_buffer=atoi(argv[2]);
const int QTDE_DE_LEITURAS = 1000000;
const int TAMANHO_ARQUIVO = 100*1024*1024;
char buffer[tamanho_buffer+1];
FILE *fp;
fp = fopen(argv[1],"r");
int x;
srand(time(NULL));
for (x=0; x<QTDE_DE_LEITURAS; x++) {
int new_pos = (int) (TAMANHO_ARQUIVO/tamanho_buffer *
(rand() / (RAND_MAX + 1.0))) * tamanho_buffer ;
// posicao multipla de tamanho_buffer
fseek(fp, new_pos, SEEK_SET);
fread(&buffer, tamanho_buffer, 1, fp);
}
fclose(fp);
}
18
ST562 – Estruturas de Arquivos

Criação e leitura de arquivo

● Faz diferença fazer a leitura com blocos maiores ou


menores?
● Isso afeta o tempo de leitura (e, por extensão, a
eficiência) ?

19
ST562 – Estruturas de Arquivos

Criação e leitura de arquivo


tamanho do bloco medições (s) média
(bytes) 1 2 3
512 0,333 0,330 0,326 0,330
640 0,356 0,356 0,356 0,356 Experiência 1 com
768 0,359 0,358 0,358 0,358
896 0,374 0,379 0,397 0,383 medições de velocidade
1024 0,329 0,348 0,330 0,336
1152 0,393 0,392 0,393 0,393 de leitura de 100.000
1280 0,394 0,393 0,395 0,394
1408 0,411 0,410 0,418 0,413 blocos de posições
1536 0,395 0,396 0,413 0,401
1664
1792
0,469
0,472
0,462
0,465
0,476
0,472
0,469
0,470
aleatórias* de arquivo de
1920
2048
0,460
0,338
0,451
0,350
0,445
0,363
0,452
0,350
100 MB.
2176 0,493 0,463 0,487 0,481
2304 0,463 0,462 0,463 0,463
2432
2560
0,481
0,470
0,480
0,466
0,479
0,472
0,480
0,469
* Posições aleatórias
2688
2816
0,509
0,499
0,526
0,500
0,499
0,500
0,511
0,500
sorteadas como múltiplos
2944
3072
0,517
0,475
0,515
0,473
0,524
0,501
0,519
0,483
do tamanho do bloco.
3200 0,534 0,536 0,537 0,536
3328 0,537 0,536 0,534 0,536
3456 0,551 0,555 0,552 0,553
3584 0,539 0,541 0,537 0,539
3712 0,574 0,570 0,572 0,572
3840 0,570 0,577 0,572 0,573
3968 0,589 0,588 0,600 0,592
4096 0,315 0,316 0,320 0,317

20
ST562 – Estruturas de Arquivos
Tam. de bloco X Velocidade

Criação e leitura de arquivo


0,700
(100000 leituras de blocos em posições aleatórias em arquivo de 100 MB)

0,600

0,500
Velocidade de leitura (s)

0,400

0,300

0,200

0,100

0,000
0 512 1024 1536 2048 2560 3072 3584 4096 4608
Tam. de bloco (bytes)

Experiência 1 com medições de velocidade de leitura de 100.000


blocos de posições aleatórias de arquivo de 100 MB.
21
ST562 – Estruturas de Arquivos

Criação e leitura de arquivo


tamanho do bloco medições (s) média
(bytes) 1 2 3 (s)
1 0,328 0,353 0,334 0,338 Experiência 2 com
2 0,336 0,321 0,333 0,330
4 0,328 0,326 0,319 0,324 medições de velocidade
8 0,333 0,328 0,323 0,328
16 0,331 0,327 0,319 0,326 de leitura de 100.000
32 0,325 0,316 0,317 0,319
64 0,324 0,318 0,319 0,320 blocos de posições
128 0,330 0,322 0,347 0,333
256 0,333 0,321 0,320 0,325 aleatórias* de arquivo de
512 0,352 0,326 0,333 0,337
1024 0,363 0,332 0,334 0,343 100 MB.
2048 0,352 0,357 0,362 0,357
4096 0,344 0,316 0,323 0,328
8192 0,491 0,494 0,488 0,491
16384 0,841 0,848 0,821 0,837 * Posições aleatórias
32768 1,457 1,455 1,488 1,467
65536 2,705 2,686 2,727 2,706 sorteadas como múltiplos
do tamanho do bloco.

22
ST562 – Estruturas de Arquivos
Tam. de bloco X Velocidade

Criação e leitura de arquivo


3,000
(100000 leituras de blocos em posições aleatórias em arquivo de 100 MB)

2,500

2,000
Velocidade de leitura (s)

1,500

1,000

0,500

0,000
1 10 100 1000 10000 100000
Tam. de bloco (bytes)

Experiência 2 com medições de velocidade de leitura de 100.000


blocos de posições aleatórias de arquivo de 100 MB.
23
ST562 – Estruturas de Arquivos

Exercícios

● Reproduza as experiências 1 e 2 em seu computador.


– Monte tabelas e gráficos com os dados das experiências.
– Indique os padrões observados nos dados
● Com base no experimento, responda:
– Imagine um arquivo formado por vários registros
consecutivos, de tamanho igual. O tamanho desses
registros pode influenciar a velocidade de leitura do
arquivo:
● Na leitura de registros sorteados do arquivo?

● Na leitura de registros em ordem (do primeiro ao

último)?

24

You might also like