Виртуальные файловые системы - PullRequest
5 голосов
/ 28 марта 2011

Большинство игр поставляются со своими ресурсами (моделями, текстурами и т. Д.), Упакованными в специальные файлы (например, файлы .pk3 в Quake 3, например).Очевидно, эти файлы как-то «монтируются» и используются так, как если бы они были отдельными файловыми системами.

Я хотел бы знать, как это достигается.Единственная стратегия, к которой я пришел, - это поместить информацию о размере смещения в заголовок файла, затем отобразить файл в памяти и получить доступ к ресурсам, как если бы они были независимыми частями памяти, защищенными от записи.

Я хотел бы знать, жизнеспособна ли моя стратегия и есть ли лучшие альтернативы.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 28 марта 2011

Ваш подход звучит разумно.В основном у вас будет файл ISAM с (необязательными) метаданными.Вы можете разбить файл на разделы («каталоги») на основе критериев (тип содержимого, частота использования, местность использования и т. Д.) И иметь отдельный индекс / оглавление для каждого раздела.Если вы разрешите раздел как тип контента, то вы можете вкладывать их и обрабатывать их согласованным образом.

Если ваши требования довольно просты, вы можете просто использовать файл zip / tar в качестве контейнера.Рассмотрение кода для них, вероятно, было бы хорошим началом, независимо от того.

3 голосов
/ 28 марта 2011

Я не могу сказать о точном формате Quake3, но есть несколько подходов, чтобы сделать то, что вам нужно:

  1. архивные файлы (ZIP, Tar и т. Д.)
  2. Комплексное хранение различного вида. В Windows есть структурированное хранилище Microsoft
  3. встроенная однофайловая база данных
  4. виртуальная файловая система, которая реализует фактическую файловую систему, но хранится не на разделе диска, а где-то еще (в ресурсах, в памяти и т. Д.).

Каждый из этих подходов имеет свои сильные и слабые стороны .

Наш продукт SolFS является примером виртуальной файловой системы, упомянутой выше. Он был разработан для задач, похожих на ваши.

Архивы и некоторые реализации составных файлов обычно имеют линейную последовательную структуру - файлы записываются один за другим с некоторым каталогом в начале или в конце файла.

Некоторые составные реализации файлов, базы данных и виртуальная файловая система имеют структуру на основе страниц («страница» похожа на сектор или кластер в FAT или NTFS), где файлы могут быть разбросаны по хранилищу.

3 голосов
/ 28 марта 2011

Ваша стратегия вполне разумна;фактически это точный аналог того, что драйвер файловой системы делает с необработанным блочным устройством.Какие у вас проблемы с этой реализацией?

...