MINIX Внутренняя фрагментация 2 - PullRequest
0 голосов
/ 12 декабря 2011

Я нахожусь в процессе написания некоторого программного обеспечения на C, которое рекурсивно перечисляет все файлы в данном каталоге, и теперь мне нужно разобраться с внутренней фрагментацией.

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

Я изучил stat(), fcntl() и все виды способов.,Как получить последний адрес блока по номеру инода?

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

Я знаю, что есть команды get_inode и get_block, но понятия не имею, кроме этого!

Ответы [ 2 ]

1 голос
/ 12 декабря 2011

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

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

1 голос
/ 12 декабря 2011

Я не думаю, что вы можете получить по адресам дискового блока обычные системные вызовы, такие как stat(). Вам, вероятно, придется найти необработанный inode на диске (что означает доступ к необработанному диску и требует повышенных привилегий) и обработку данных оттуда.

Как правило, для файла вы найдете прямые блоки, косвенные блоки, блоки двойной косвенности и блок тройной косвенности. Однако соответствующий тип файловой системы примерно такой же мертвый, как и додо (я не думаю, что видел этот тип файловой системы в этом тысячелетии), так что это вряд ли поможет сейчас.

Возможно, существует нестандартный системный вызов для получения информации, но я сомневаюсь в этом.

...