logo
АВМиС - бывшее АПЭВМ / apvem / всякаявсячина

59.Механизмы работы с файлами больших размеров

Спроецировать на адресное пространство размером 4 Гб файл длиной 18 ЕВ нельзя. Придется проецировать не весь файл, а его представление, содержащее лишь небольшую часть данных. Вы начнете с того, что спрое­цируете представление самого начала файла. Закончив обработку данных в этом представ­лении, отключите его и спроецируете представление следующей части файла — и так, пока не будет обработан весь файл. Конечно, это делает работу с массивными файлами, проеци­руемыми в память, не слишком удобной, но утешимся тем, что длина большинства файлов намного меньше 4 Гб.

Система позволяет проецировать сразу несколько представлений одних и тех же файловых данных. Например, можно спроецировать в представление первые 10 Кб файла, а затем — первые 4 Кб того же файла в другое представление. Пока Вы проецируете один и тот же объект, система гарантирует когерентность (согласованность) отображаемых данных. Ска­жем, если программа изменяет содержимое файла в одном представлении, это приводит к обновлению данных и в другом. Так происходит потому, что система, несмотря на многократ­ную проекцию страницы на виртуальное адресное пространство процесса, хранит данные на единственной странице оперативной памяти. Поэтому, если представления одного и того же файла данных создаются сразу несколькими процессами, данные по-прежнему сохраняют когерентность — ведь они сопоставлены только с одним экземпляром каждой страницы в оперативной памяти. Все это равносильно тому, как если бы страницы оперативной памяти были спроецированы на адресные пространства нескольких процессов одновременно

Файлы с доступом “только для чтения” не вызывают проблем с когерентностью — значит, это лучшие кандидаты на отображение в память. Ни в коем случае не используйте механизм проецирования для доступа к записываемым файлам, размещенным на сетевых дисках, так как система не сможет гарантировать когерентность представлений данных. Если один компьютер обновит содержимое файла, то другой, у которого исходные данные содер­жатся в памяти, не узнает об изменении информации.