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
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...