• Nenhum resultado encontrado

Transactional File System

2.6 Sistemas de ficheiros com suporte transaccional

2.6.8 Transactional File System

Com o objecto de construir um sistema de ficheiros com uma semântica transaccio- nal foi desenvolvido o Transactional File System(TFS) [Mar08], um sistema que disponi- biliza para o domínio da aplicação uma interface transaccional para acesso ao sistema de ficheiros. Este sistema está implementado sobre a forma de uma biblioteca que é li- gada com a aplicação, implementando uma camada intermédia entre a aplicação e um sistema de ficheiros. Este oferece ao programador um conjunto de funções de acesso a ficheiros muito similares, baseadas (mas diferentes) das disponibilizadas pelas normas POSIX 1003.1 [POS92], tentando assim ser de fácil utilização.

Como a implementação é disponibilizada como uma biblioteca, isto implica que cada aplicação que a utilize possui um motor transaccional independente e que, por- tanto, duas aplicações que acedam a ficheiros comuns não obtêm entre sim uma se- mântica transaccional. No entanto, duas aplicações independentes não vão conseguir aceder de forma concorrente, a uma mesmo ficheiro através do TFS, visto que a bibli-

2.6. Sistemas de ficheiros com suporte transaccional

Figura 2.10: Diagrama da ligação entre o TFS e o sistema de ficheiros real

oteca realiza a abertura de um ficheiro com locks de escrita e, assim, somente uma das aplicações vai conseguir progredir nas suas operações sobre o ficheiro.

De forma a possibilitar o isolamento, o TFS mantém em memória uma cópia dos blocos do ficheiro que foram alterados, dando-lhes a designação de blocos virtuais cuja dimensão pode ou não ser igual a dimensão dos blocos do sistema de ficheiros. Estes blocos virtuais constituem a unidade transaccional base do sistema, ou seja, estes blocos podem ser acedidos de forma concorrente e as validações transaccionais acon- tecem sobre estes blocos. Quando a transacção termina os blocos são escritos para o ficheiro e a memória libertada.

Arquitectura

O sistema está estruturado em dois módulos principais, como representado na Fi- gura 2.11 (extraida de [Mar08]), o TFS Core e o Cache Manager, em que cada um é responsável por uma determinada lógica da biblioteca e pela implementação de um conjunto de serviços.

Figura 2.11: Diagrama da arquitectura do TFS

TFS Core Este módulo fornece todas as funções necessárias para que o programa-

dor possa agregar os acessos a ficheiros dentro de blocos transaccionais. Este módulo mantém dois tipos principais de informação:

• Informação das transacções em curso, o que inclui o identificador da transacção, o write set de blocos e informação sobre os ficheiros acedidos pela transacção.

• Meta-informação relacionada com os ficheiros abertos, que normalmente é gerida pelo sistema operativo, tais como o tamanho do ficheiro.

Cache Manager Este componente constitui a parte de mais baixo nível da biblioteca,

sendo responsável pela gestão dos blocos virtuais relativos a ficheiros, disponibili- zando métodos para ler e escrever o conteúdo de um ficheiro para memória.

Cada ficheiro é identificado com um identificador construído pelo id do device e pelo número do inode, o que o torna único em todo o sistema operativo. Assim, a cada ficheiro aberto está associada, para além do ID, uma lista de blocos virtuais que constituem o núcleo da funcionalidade de caching.

Nesta perspectiva, o bloco virtual define a granularidade do sistema, pois cada um é acedido transaccionalmente e, assim, cada bloco virtual pode ser acedido de forma independente sem perturbar a acções realizadas nos demais blocos.

A dimensão do bloco virtual constitui um trade-off no TFS pois, por um lado, caso este valor seja muito pequeno, vão ser necessárias mais computações na validação do contexto transaccional e usado mais espaço/memória para manutenção da meta- informação, no caso contrario, vai-se limitar a concorrência no acesso ao dados.

Este gestor implementa um sistema de journaling em disco, que permite garantir a propriedade de atomicidade sobre os meta-dados. Para garantir que os acessos aos blo- cos virtuais são realizados de forma transaccional, este sistema recorre internamente à utilização de um framework de memória transaccional por software, o CTL [Cun07]. De forma a simplificar a implementação, existe um byte que representa todo o bloco virtual e assim cada acesso de leitura ou escrita a um endereço dentro de um bloco vai implicar um leitura transaccional registada perante o CTL como uma operação de lei- tura e escrita sobre esse byte de representação. Assim, quando duas tarefas escrevem no mesmo bloco virtual de um mesmo ficheiro, vão registar perante o CTL duas opera- ções de escrita sobre uma mesma posição de memória, o byte que representa este bloco, e quando se proceder à tentativa de realizar commit, as duas transacções vão validar os seus read set e write set e se existir um conflito é relançada um das transacções.

Características O TFS possibilita a uma aplicação a realização de operações concor-

rentes de leitura e escrita, sobre blocos de um mesmo ficheiro, onde essa operações são realizadas de forma transaccional.

O TFS é um protótipo e não oferece todas as funcionalidades desejáveis [Mar08]. Exemplos são a truncatura de ficheiros, que não está implementada, bem como a limi- taçãoquanto ao número de blocos virtuais possíveis pois se este valor for muito elevado vão ser geradas muitas entradas no write set do CTL que não consegue ainda acomodar

2.6. Sistemas de ficheiros com suporte transaccional

tal esforço. O CTL ainda ainda não suporta read/write set de tamanho variável. Esta é uma limitação para a implementação de transacções de longa duração.

Este protótipo não é de fácil utilização, pois requer que todas as chamadas da apli- cação sobre ficheiros tenham de ser reescritas de forma a utilizarem a biblioteca. Como consequência não existem testes sobre aplicações reais que possam demonstrar a real aplicabilidade do sistema.

Documentos relacionados