Множественные потоки данных

В NTFS каждая единица информации, связанная с файлом, включая его имя, вла­дельца, отметки времени, содержимое и т. д., представляется как атрибут файла (атрибут объекта). Каждый атрибут состоит из одного потока (stream), т. е. про­стой последовательности байтов. Эта обобщенная схема позволяет легко добав­лять к файлу новые атрибуты (и соответственно новые потоки). Поскольку дан­ные файла — это «просто еще один атрибут» и можно добавлять новые атрибу­ты, файлы NTFS (и каталоги) могут содержать несколько потоков данных.

У файла NTFS есть один поток данных по умолчанию, не имеющий имени. Приложение может создавать дополнительные именованные потоки и обращать­ся к ним по именам. Во избежание изменений функций ввода-вывода интер­фейса прикладных программ (application programming interface, API) Win32, ко­торым имя файла передается как строковый аргумент, разработчики NTFS при­бегли к синтаксическому трюку, чтобы предоставить приложениям доступ к не­скольким потокам данных в файле. Так как двоеточие (:) — это зарезервирован­ный символ, оно может служить разделителем между именем файла и именем потока данных, как показано ниже:

myfile.dat:stream2

Для каждого потока отдельно поддерживаются: выделенный размер (объем за­резервированного для него дискового пространства), фактический размер (сколь­ко байт из зарезервированного пространства использовано вызывающей про­граммой) и длина действительных данных (какая часть потока была инициа­лизирована). Кроме того, каждый поток имеет отдельный файловый замок, ис­пользуемый для блокировки фрагментов потока и обеспечения параллельного доступа. Чтобы сократить объем обработки, поддерживается совместное исполь­зование на уровне файлов, а не потоков.

Один из примеров применения нескольких потоков данных в NTFS - это хранение данных, созданных в системах Apple Macintosh. Эти системы использу­ют два потока на файл: один для хранения данных, а другой для хранения ресур­сов, таких как тип файла и значок, используемый для представления файла. Так как NTFS допускает множественные потоки данных, то один пользователь Macintosh может скопировать целую папку Macintosh (аналог каталога) на сер­вер Windows NT, а другой скопировать ее с сервера без потери информации о ресурсах. Другие приложения также могут пользоваться несколькими потоками данных. Например, утилита резервного копирования может использовать до­полнительный поток данных для хранения особых отметок времени. Утилита архивирования может реализовать иерархическое хранилище, в котором фай­лы с датой более ранней, чем некоторая заданная, или не используемые в течение некоторого периода времени, перемещались бы на ленту. Такая утилита мог­ла бы скопировать файл на ленту, установить размер потока данных по умолчанию равным 0 и добавить новый поток данных, содержащий имя и ме­стоположение ленты, на которой хранится файл.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: