Uma comparação de algoritmos e estruturas de dados para

Transcrição

Uma comparação de algoritmos e estruturas de dados para
Anais do IV Simpósio de Informática da Região Centro do RS - SIRC/RS 2005 - Santa Maria, novembro de 2005.
Uma comparação de algoritmos e estruturas de dados para
armazenamento de dados em sistemas
operacionais Palm OS*
Rogério Celestino dos Santos 1 , Rodrigo Otavio Rodrigues Antunes 1*
¹Instituto de Informática – Pontifícia Universidade Católica de Minas Gerais
Rua Walter Ianini, 255. São Gabriel. Belo Horizonte -MG –Brasil
[email protected], [email protected]
Abstract. When we consider a system of data base in the Palm OS platform in
we come across them with a primitive form of storage of data, since its
structure is based on chained lists. Its efficiency is satisfactory up to
determined volume of data, after this limit its efficiency is engaged. This work
has intention to demonstrate a new form of more efficient storage of data for
the Palm OS system. Two structures of data will be compared in order to
verify which of them are capable to optimize the use of the data base, thus
increasing, the capacity of storage of data, limited by the system.
Resumo: Quando consideramos um sistema de banco de dados na plataforma
Palm OS, nos deparamos com uma forma bastante primitiva de
armazenamento de dados, já que sua estrutura é baseada em listas
encadeadas. Sua eficiência é satisfatória até um determinado volume de
dados, após o qual sua eficiência fica comprometida. Este trabalho tem o
intuito de apresentar uma nova forma de armazenamento de dados, mais
eficiente, para o sistema Palm OS. Para isso, duas estruturas de dados serão
comparadas, a fim de identificar qual delas é capaz de otimizar o uso do
banco de dados, aumentando, assim, a capacidade de armazenamento de
dados, que é limitada pelo sistema.
1. Introdução
O Palm OS é um sistema operacional utilizado em computadores de mão, mais
conhecidos como palmtops [Foster 2000]. Esta plataforma oferece uma API
(Application Programming Interface) simples de armazenamento de dados
para aplicações existentes. Este sistema de armazenamento é muito inferior
aos sistemas gerenciadores de bancos de dados conhecidos, como Oracle,
MySql, SqlServer e outros [Rhodes and Mckeehan 1998]. Essa inferioridade
se dá pela simplicidade da API de armazenamento do Palm OS, que oferece
uma forma trivial de manipulação dos dados a serem armazenados. Essa
manipulação é baseada em listas encadeadas. Os dados são simplesmente
*
Trabalho realizado com apoio da I2 software LTDA e da Pontifícia Universidade Católica de Minas
Gerais.
1
Aluno do curso de Sistemas da Informação da PUC-MG.
1*
Professor da Pontifícia Universidade Católica de Minas Gerais e orientador do trabalho.
Anais do IV Simpósio de Informática da Região Centro do RS - SIRC/RS 2005 - Santa Maria, novembro de 2005.
gravados em memória RAM e manipulados pelas APIs do sistema operacional
[Foster 2000], [PalmSource 2003] e [Rhodes and Mckeehan 1998].
O armazenamento de dados no Palm OS consiste basicamente em um vetor de
apontadores, cada apontador contendo um handle (explicar o que é) para um
registro físico. A estrutura de vetor de apontadores é implementada na forma
de uma lista encadeada de apontadores, ou seja, o vetor é subdividido em
vários vetores menores, que são encadeados através de apontadores, como
mostrado na Figura 1.
Figura 1. Estrutura de armazenamento de dados no Palm OS.
O vetor de apontadores do banco de dados do Palm OS tem um limite de 64K registros
e cada registro tem um limite de memória de 64K [Foster 2000]. Para aplicações nativas
do Palm OS, essa estrutura é suficiente para armazenar muita informação (Ex: agenda,
lista telefônica, memos etc). Aplicações mais sofisticadas podem ter a necessidade de
armazenamento de uma quantidade maior de registros. Isso exige que a aplicação crie
um novo banco de dados no sistema operacional, aumentando a sua complexidade (Ex:
aplicações comerciais para cadastro de produtos, cadastro de clientes etc).
2. Descrição
O trabalho apresenta a implementação de uma nova API para o Palm OS, a qual utiliza
estruturas de dados para armazenar mais de um registro lógico dentro de um registro
físico da API de armazenamento de dados do Palm OS. Os registros lógicos serão
gravados usando vetores dentro de uma área da memória física armazenada através da
API do Palm OS, que não terá nenhuma de suas funções descartadas.
O trabalho engloba ainda uma comparação de algoritmos e estruturas de dados na
manipulação destes registros lógicos, a fim de determinar a mais eficiente, usando como
base a API do Palm OS.
A Figura 2 mostra a nova estrutura de armazenamento de dados proposta.
Anais do IV Simpósio de Informática da Região Centro do RS - SIRC/RS 2005 - Santa Maria, novembro de 2005.
Figura 2. Nova estrutura de armazenamento
Neste trabalho, as duas estruturas utilizadas para armazenar os registros lógicos foram o
vetor ordenado e a árvore binária [Cormen and et al 2002], sendo a árvore binária
manipulada através de vetores e não de ponteiros.
3. Implementação
Existem diversas linguagens para desenvolver aplicativos para Palm OS. Neste trabalho,
foi utilizada a linguagem C/C++, escolhida para manter a compatibilidade com a API e
com diversas versões do sistema Palm OS, já que ambos foram desenvolvidos nessa
linguagem.
Na implementação, houve a preocupação em criar uma estrutura para melhor
organização dos dados e facilitar o manuseio dessa nova API. Para isso, foram
desenvolvidas novas classes. Nenhuma função da antiga API foi descartada, pois ela é
utilizada como base para as novas APIs. Na nova API, existem três níveis de classes,
cada nível interagindo com o nível mais baixo. Em todos os níveis, existem quatro
funções básicas para manipulação de dados: inserir, procurar, alterar e excluir. Estas
funções serão detalhadas mais a seguir. A criação destes níveis organiza melhor as
estruturas, facilita a manipulação de dados e disponibiliza um nível fixo, sendo que este
e a estrutura são transparentes ao usuário.
O primeiro nível é a classe fixa, que classe é igual para as duas estruturas de dados, seja
o vetor ou a árvore binária. Dessa forma, fica transparente para o usuário qual estrutura
está sendo utilizada para o armazenamento de dados. A classe fixa é o nível mais alto
onde o usuário cria as instâncias de objetos para manipulação dos dados em seu
aplicativo. O segundo e o terceiro nível são modificados de acordo com cada estrutura
de dados.
O segundo nível manipula todos os registros físicos do banco de dados. Este nível
trabalha como se fosse a API atual do Palm OS, fazendo a busca de um registro físico
através de seus índices e retornando o resultado ao terceiro nível, onde os registros
lógicos são manipulados de acordo com a estrutura de dados utilizada. Na inserção de
Anais do IV Simpósio de Informática da Região Centro do RS - SIRC/RS 2005 - Santa Maria, novembro de 2005.
um primeiro elemento, o segundo nível indica para o terceiro nível que deve ser criado
um registro físico e alocado a ele um vetor de 50 posições, do tipo do elemento a ser
inserido. Só serão criados os próximos registros físicos quando o vetor do tipo do
elemento estiver cheio, e nos próximos serão alocados vetores com 100 posições. Os
valores escolhidos para a quantidade de posições foram os apresentados anteriormente
para que, futuramente, não sejam ultrapassados os 64k do registro físico. O segundo
nível também tem o trabalho de indicar ao terceiro nível em qual registro físico se
encontra o registro lógico a ser inserido, excluído, alterado e procurado.
3.1 Vetor ordenado
Na utilização do vetor ordenado, é alocada a quantidade de memória utilizada pelo vetor
na área física, de acordo com o tamanho do vetor e com o tipo de dado que será
armazenado.
Considerando que o segundo nível já tenha encontrado o registro físico a ser
manipulado, o terceiro nível utiliza o método “ordenação por inserção” para inserir o
elemento no vetor já ordenado. Este método foi escolhido por ser eficiente ao inserir
dados em vetores já ordenados e pequenos. Para a busca utiliza-se o método "busca
binária", que apresenta grande eficiência em busca de elementos em estruturas
ordenadas. Para alteração de um elemento, faz-se uma busca binária no vetor pelo
elemento a ser alterado, e a posição encontrada é atualizada com o novo valor. Na
exclusão de um elemento, faz-se uma busca binária pelo elemento. Após encontrado,
todos os elementos posteriores são movidos para a posição anterior.
3.2 Árvore binária
A árvore binária, como já foi dito, não e manipulada por ponteiros mas por vetores. Ela
é manipulada desta maneira para que a nova API seja compatível com outras versões de
sistemas operacionais da Palm OS. Os dados são armazenados pela API nos registros
físicos e o gerenciador de memória do Palm OS reorganiza-os na memória, causando a
perda de referência de uma área de memória do ponteiro.
Na utilização da árvore binária, é alocada na área física uma quantidade maior que a
utilizada pelo vetor e o tamanho do vetor. É alocado também um vetor nodo, que
contém um índice inteiro indicando o filho da esquerda e o da direita de um elemento,
um boleano indicando se aquela posição do vetor contém um elemento e o próprio
elemento. Considerando que o segundo nível já tenha encontrado o registro físico a ser
manipulado, o terceiro nível então utiliza a teoria de árvores binárias nos vetores para
armazenar, atualizar, pesquisar e apagar os dados. Utilizam-se os índices inteiros para
indicar em qual posição do vetor estão o filho da direita e o da esquerda. Um valor
negativo, por convenção o –1, indica que este filho não existe, correspondendo ao valor
null normalmente utilizado.
4. Testes
Os testes foram realizados em um Tungsten E, que possui sistema operacional Palm
OS® 5.2.1 , processador OMAP 311 ARM de 126MHz e 32MB de memória. Na
legenda dos gráficos, é indicada a quantidade de registros inseridos para realização dos
testes.
Anais do IV Simpósio de Informática da Região Centro do RS - SIRC/RS 2005 - Santa Maria, novembro de 2005.
O gráfico 1 apresenta a comparação do tempo gasto para a inserção de registros, em
cada estrutura.
Tempo(s)
Tempo gasto na inserção
450
400
350
300
250
200
150
100
50
0
387
10000
258
257
65535
192
172
172
100000
112
22
150000
27
17
NA NA
DB Palm OS
Vetor
Árvore Binária
Estruturas
Gráfico 1. Tempo de inserção.
Já o gráfico 2 compara a área de memória utilizada por cada estrutura.
Memória Utilizada
10000
8831
7952
Kbytes
8000
6000
4737
3478
4000
5888
5302
3863
10000
65535
100000
150000
2000
723
NA NA
531
590
0
DB Palm OS
Vetor
Árvore Binária
Estruturas
Gráfico 2 Memória Utilizada
Como é mostrado nos gráficos, as novas estruturas obtiveram um desempenho melhor
do que a atual do Palm OS, sendo o vetor tendo um resultado melhor que as demais,
pois, além de um melhor desempenho, ele economiza memória, por utilizare menos
apontadores para os registros físicos. No DB Palm OS, como foi dito, o limite máximo
de registros é de 65535 (64k), por isso as faixas de 100000 e 150000 registros estão
indicadas com NA (Não Avaliada).
5. Trabalho futuros
Neste trabalho foram utilizadas duas estruturas de dados básicas (vetor ordenado e
árvores binárias). Sugere-se o desenvolvimento de outros trabalhos, que comparem
esses resultados com outras estruturas de dados, procurando uma maior eficiência.
Anais do IV Simpósio de Informática da Região Centro do RS - SIRC/RS 2005 - Santa Maria, novembro de 2005.
6. Conclusão
A estrutura atual do Palm OS, por ter mais áreas físicas de memória alocadas para os
registros, gasta mais tempo para procurá-los e compará-los. Ao reduzir estes endereços,
as duas novas estruturas obtiveram um desempenho melhor. A árvore binária, por
utilizar alguns bytes a mais (índices que indicam um nó filho), e por sempre procurar
uma posição livre no vetor para inserir um nó filho, torna-se mais lenta e ocupa mais
memória do que o vetor ordenado. Isto faz com que o vetor se apresente como uma
alternativa mais adequada para a situação analisada.
7. Referências
Foster, Lonnon R. (2000) “Palm OS Programming Bible”. Second Edition. Wiley: IDG
Book Worldwide, Inc., 2000.
Cormen, Thomas H et al. (2002) “Algoritmos: Teoria e Prática”. Rio de Janeiro: Editora
Campus.
PalmSource, Inc. (2003) “Palm OS Programmer’s API Reference”, Documento no.
3003-007,
Setembro,
2003.
Disponível
em
http://www.palmos.com/dev/support/docs/, Acessado em 05 de setembro de 2005.
Rhodes, Neil; MCKEEHAN, Julie. (1998) “Palm Programming: The Developer's
Guide”, 1ª. edição: O'Rielly and Associates, Inc.
Drozdek, Adam. (2002) “Estruturas de dados e algoritmos em C++” . São Paulo:
Editora Pioneira Thomson Learning.

Documentos relacionados

O Médico e o computador de mão

O Médico e o computador de mão PDA é a abreviatura de Personal Digital Assistant, em português “assistente pessoal digital”, uma espécie de computador de mão. Uma das marcas mais conhecidas no mundo, fabricante desse tipo de equ...

Leia mais