Le système TFFS

In document en fr (Page 128-131)

capteurs sans fil

3.2 La gestion de la mémoire Flash

3.2.3 Comparaison avec les autres systèmes

3.2.3.4 Le système TFFS

Les traitements sur la mémoire Flash du système TFFS (Transactional Flash File System) s’applique aux blocs plutôt qu’aux pages [Gal 2005]. Ces blocs correspondent au plus petit groupe de pages effaçables en une seule fois. Ces blocs sont appelés « unité d’effacement » (« erase unit »). Le système a été au départ développé pour utiliser la mémoire de type « NOR » embarquée dans la plupart des microcontrôleurs. L’objectif visé est la

La principale particularité du système TFFS est la possibilité d’effectuer des opérations de lecture et d’écriture, soit directement, soit en passant par des transactions. Ces dernières sont utilisées d’une part pour gérer les accès concurrentiels aux données et d’autre part comme mécanisme de recouvrement après panne. La principale cause de panne mise en évidence est un manque ou une fluctuation brutale de l’énergie disponible.

Pour gérer les fichiers et les transactions, une interface de type API a été développée avec un large panel de fonctions parmi lesquelles :

• FD CreateFile(type, name, long_name, properties, parent_dir, tid) ;

• FD Open(parent, name, tid) ;

• int ReadBinary(file, buffer, length, offset, tid) ;

• int WriteBinary(file, buffer, length, offset, tid) ;

• int ReadRecord(file, buffer, length, offset, tid) ;

• int AddRecord(file, buff, length, tid) ;

• int CloseFile(file, tid) ;

• int DeleteFile(file) ;

• TID BeginTransaction() ;

• int CommitTransaction(tid) ;

• int AbortTransaction(tid).

Les fonctionnalités non supportées délibérément sont la troncation, le changement des attributs d’un fichier tel que son nom, le parcours des répertoires en utilisant des chemins relatifs. Trois types de fichiers sont présents sous le système TFFS :

• les fichiers « enregistrement » (« record ») ;

• les fichiers binaires ;

• les répertoires.

La gestion de ces différentes entités passe par une organisation particulière au niveau de la mémoire Flash et l’utilisation de structure de données à base d’arbres. L’unité d’effacement, considérée dans le système TFFS comme élément de base pour l’utilisation de la mémoire Flash, est divisée en quatre parties : l’en-tête, le tableau de descripteurs des secteurs, les secteurs et un espace libre situé entre les descripteurs et les secteurs (voir Figure 3.19). Un secteur correspond à un bloc mémoire de taille variable alloué au sein de l’unité d’effacement pour stocker des données. Le descripteur contient l’« offset » c’est-à-dire l’adresse de début du secteur qu’il référence ainsi qu’un bit « valide » et un autre « obsolète » qui permettent de spécifier l’état du secteur. Plus précisément, le bit « valide » indique si le champ offset a été correctement rempli et le bit « obsolète » que le secteur actuellement référencé est obsolète ou non.

Le système TFFS a été conçu pour pouvoir déplacer les données à la manière d’un mécanisme classique de défragmentation. Plusieurs unités d’effacement dont la plupart des données sont obsolètes peuvent être réquisitionnées comme espace de mémoire libre. Avant de pouvoir réutiliser ces unités, les données encore valides doivent être déplacées et regroupées dans une même et nouvelle unité. Au-delà du simple transfert d’octets d’un emplacement à un autre, se pose le problème du référencement des secteurs déplacés. En effet, que ce soit les fichiers d’enregistrements, binaires ou répertoires, ceux-ci sont construits à l’aide d’arbres qui pointent sur différents secteurs. Un secteur stocke soit des enregistrements soit des ajouts de données selon qu’il est associé à un fichier respectivement d’enregistrements ou binaire.

CemOA : archive ouverte d'Irstea / Cemagref

Les feuilles de l’arbre d’un répertoire contiennent, quant à elle, les métadonnées associées aux fichiers :

• l’identifiant du fichier au niveau du répertoire ;

• le type du fichier ;

• le nom au format long du fichier ;

• les droits d’accès au fichier.

Pour pallier ce problème, le système TFFS utilise des pointeurs logiques à la place de pointeurs physiques. Chaque pointeur logique comprend deux champs : un numéro logique d’unité d’effacement et un autre de secteur. Le premier numéro est utilisé comme index dans la table des unités d’effacement et le second comme index au niveau du tableau des descripteurs de secteurs.

Une table est utilisée pour stocker la correspondance entre unité d’effacement logique et physique. Elle masque donc les changements effectués durant les déplacements de secteurs.

Cette table est stockée en mémoire de type soit SRAM soit Flash. Durant un déplacement, l’offset d’un secteur peut changer mais pas sa place dans le tableau des descripteurs. TFFS copie les secteurs non obsolètes dans des unités complètement vides en les collant le plus possible les uns aux autres de manière à libérer le plus d’espace libre. Ainsi, au sein de chaque unité d’effacement, les secteurs peuvent être répartis suivant qu’ils sont de nouveaux secteurs ou des secteurs recopiés. Deux indices au niveau des descripteurs ont été définis pour différencier les éléments de chaque catégorie. Les indices « lr » et « ln » concernent respectivement le descripteur du secteur recopié en dernier et le descripteur vers le nouveau secteur le plus récemment inséré.

Au niveau de l’organisation des fichiers, le système TFFS utilise une nouvelle structure de données appelée « arbres efficaces à plusieurs versions de recherche » (« efficient versioned search trees »). Cette structure a été élaborée à partir de celles des arbres persistants de recherche (« persistent search trees »). Un arbre est utilisé pour représenter les associations entre les différents fichiers comme on peut le retrouver dans le système UNIX. Au gré des opérations effectuées sur les fichiers, l’arbre subit des modifications (voir Figure 3.20).

Figure 3.20 – Gestion d’un fichier d’enregistrements sous le système TFFS [Gal 2005]

Une version de l’arbre correspond à un état où un ensemble complet de modifications sur celui-ci a été validé. A partir de ce moment, la version courante de l’arbre devient accessible uniquement en lecture et une autre version est créée pour recueillir les nouvelles

CemOA : archive ouverte d'Irstea / Cemagref

modifications. La plupart du temps, seules la version courante et celle immédiatement précédente de l’arbre sont utilisées. La version courante correspond à un état où une transaction est en cours. De plus, pour réduire l’espace mémoire consommée, la version précédente peut être élaguée pour ne conserver que les toutes dernières modifications validées. On parle à ce moment-là d’arbres élagués à plusieurs versions (« pruned versioned trees »).

Chaque transaction dispose d’un identifiant TID (« Transaction IDentifier ») qui est fourni au moment de sa création. Cet identifiant correspond à un marqueur temporel. Plus cet identifiant est petit, plus la transaction associée est ancienne. Ce mode d’identifiant autorise le fonctionnement suivant : une transaction « t » peut utiliser les résultats des transactions validées allant de « 0 » à « t-1 » mais ne peut faire de même avec ceux issus des transactions supérieures ou égales à « t + 1 » validées ou non.

Chaque transaction crée une nouvelle version d’un arbre en le modifiant. Cette version reste active tant que la transaction n’a pas été validée (« committed ») ou considérée comme avortée (« aborted »). En attendant l’aboutissement de l’une ou l’autre situation, des pointeurs dits de rechange (« spare pointers ») sont utilisés pour stocker les modifications ayant eu lieu au niveau de l’organisation de l’arbre. Si la transaction échoue, ces pointeurs ne seront pas pris en compte. Des règles sont définies au niveau des interactions entre les transactions pour éviter l’accès en lecture ou en écriture à des données inconsistantes ou incohérentes. Pour faire respecter ces règles, trois identifiants de transaction sont liés et stockés dans une version d’arbre :

• l’identifiant de transaction de la dernière modification validée ;

• l’identifiant de la dernière transaction qui a effectué un accès en lecture ;

• l’identifiant de la transaction qui modifie actuellement l’arbre.

Un mode de fonctionnement sans transaction est également disponible. Les opérations sur les fichiers sont exécutées sans vérifier si elles ont abouti ou avorté. L’avantage de ce procédé est de nécessiter moins de traitements complexes et d’être plus direct.

Un mode de fonctionnement de type log est également présent au sein du système TFFS et peut contenir des informations sur les transactions, les opérations atomiques et les opérations de maintenance atomiques. Chaque entrée du log comporte les quatre attributs suivant :

• un bit « valide/obsolète » ;

• un identifiant construit différemment suivant le type d’entrée ;

• un identifiant de transaction ;

• un pointeur logique.

La présence des deux derniers attributs dépend du type d’entrées manipulé. La principale fonction du log est de répertorier les modifications effectuées par une transaction portant essentiellement sur la racine des différents arbres manipulés.

In document en fr (Page 128-131)