Чтение дискретного набора страниц с диска за один раз - PullRequest
0 голосов
/ 24 июля 2011

Проблема заключается в следующем: -

У меня есть определенный файл на диске, который имеет огромный размер (скажем, терабайт), теперь я хочу прочитать, скажем, N страниц (дискретных и не смежных с огромнымраспространяться) из этого файла на диск с минимальным количеством операций чтения с диска (или, скажем, я хочу минимизировать время, затрачиваемое на чтение этих N страниц с диска, за счет минимизации вращения и поиска задержек на диске).Идеально было бы, если бы я начал читать со страницы и завершил все чтения до того, как закончится вращение на диске.Разница в позициях страниц огромна, поэтому я не могу просто выполнить команду чтения, начиная с первой и до последней страницы, охватывающей все N страниц.Это заняло бы огромное количество памяти для хранения.(Дополнительно - я собирался кое-что из материала и столкнулся с механизмом « list prefetching » в базе данных. Я прочитал его и обнаружил, что такая реализация может решить мою проблему.)

Может кто-нибудь помочь мне решить эту проблему на языке Си?Заранее спасибо!

1 Ответ

1 голос
/ 24 июля 2011

Вам понадобится что-то вроде алгоритм замены страницы ... с предварительной выборкой ... Вы не сказали нам, как вы будете работать со страницами, как долго вы будете нужны они в памяти и т. д. Но я полагаю, вам придется решать ситуацию, когда память заполнена, и вам нужно освободить некоторые страницы из памяти. Посмотрите на упомянутые алгоритмы ( LRU , MRU и т. Д.). Это то, что ОС использует для подкачки.

Вы также можете использовать файлы отображения памяти в ОС - в них уже реализованы алгоритмы замены страниц, но теперь нет необходимости в предварительной загрузке. (хорошо зависит от ОС, я полагаю, Linux будет гораздо более продвинутым, чем Windows в этой теме). Таким образом, вы можете сэкономить много работы, но она не может быть оптимально оптимизирована для вашего случая.

Относительно оптимизации доступа к диску ... попробуйте прочитать некоторую теорию о том, как ОС это делают ... Посмотрите на алгоритмы планирования диска, например SCAN или C-SCAN , например. по этой ссылке .

...