2011-03-28 4 views
5

La plupart des jeux viennent avec leurs ressources (modèles, textures, etc.) emballés dans des fichiers spéciaux (comme les fichiers .pk3 dans Quake 3 par exemple). Apparemment, ces fichiers sont «montés» et sont utilisés comme s'ils étaient des systèmes de fichiers distincts.Systèmes de fichiers virtuels

Je voudrais savoir comment cela est réalisé. La seule stratégie que j'ai inventée jusqu'ici consiste à placer des informations de taille de décalage dans l'en-tête du fichier, puis à mapper la mémoire et à accéder aux ressources comme si elles étaient des blocs de mémoire protégés contre l'écriture indépendants. J'aimerais savoir si ma stratégie est viable et s'il existe de meilleures alternatives.

Merci!

+1

Je pense que vous cherchez quelque chose de similaire boxedapp. – MastAvalons

+1

@MastAvalons +1 merci! ça m'a aidé. – z0r1fan

Répondre

3

Votre stratégie est assez raisonnable; en fait, c'est un analogue exact de ce que fait un pilote de système de fichiers avec un périphérique bloc brut. Quels problèmes avez-vous avec cette implémentation?

+0

Je n'ai pas de problèmes visibles en ce moment, je veux juste m'assurer que je vais dans la bonne direction. –

3

Votre approche semble raisonnable. Fondamentalement, vous aurez un fichier ISAM avec des métadonnées (facultatives). Vous pouvez diviser le fichier en sections («répertoires») en fonction de critères (type de contenu, fréquence d'utilisation, lieu d'utilisation, etc.) et avoir un index/table des matières séparé pour chaque section. Si vous autorisez une section en tant que type de contenu, vous pouvez les imbriquer et les gérer de manière cohérente.

Si vos besoins sont assez basiques, vous pouvez simplement utiliser un fichier zip/tar comme conteneur. Regarder le code pour ceux-ci serait probablement un bon point de départ, peu importe.

3

Je ne peux pas dire sur le format exact de Quake3, mais il existe plusieurs façons de faire ce que vous avez besoin:

  1. fichiers archive (ZIP, goudron, etc.) le stockage
  2. composé de type différent. Sous Windows, Microsoft Structured Storage
  3. base de données de fichier unique intégrée
  4. système de fichiers virtuel, qui implémente un système de fichiers réel, mais stocké non sur la partition de disque, mais ailleurs (ressources, mémoire, etc.).

Chacune de ces approches a son propre strengths and weaknesses.

Notre produit SolFS est un exemple de système de fichiers virtuel mentionné ci-dessus. Il a été conçu pour des tâches similaires aux vôtres.

Les archives et certaines implémentations de fichiers composés ont généralement une structure séquentielle linéaire - les fichiers sont écrits un par un avec un répertoire au début ou à la fin du fichier. Certaines implémentations de fichiers composés, bases de données et système de fichiers virtuels ont une structure basée sur les pages ("page" est similaire au secteur ou au cluster dans FAT ou NTFS) où les fichiers peuvent être dispersés sur le stockage.

Questions connexes