Сложно ответить - возможно, поэтому он так долго не получал никакого ответа.
Частично ответ будет зависеть от файловой системы - разные файловые системы будут давать разные ответы. Однако выполнение «ls
» требует чтения страниц, содержащих записи каталога, а также чтения страниц, содержащих inode, идентифицированные в каталоге. Сколько страниц - и, следовательно, сколько дисков читает - зависит от размера страницы и от размера каталога. Если вы думаете с точки зрения 6-8 байтов служебной информации на имя файла, вы не будете слишком далеко. Если имена имеют длину около 12 символов, у вас есть около 20 байт на файл, а если ваши страницы имеют размер 4096 байт (4 КБ), то у вас есть около 200 файлов на страницу каталога.
Если вы просто перечислили имена, а не другие атрибуты с помощью ls
, все готово. Если вы перечислите атрибуты (размер и т. Д.), То и иноды должны быть прочитаны. Я не уверен, насколько велик современный инод. Однажды пару десятилетий назад в примитивной файловой системе он занимал по 64 байта; возможно, с тех пор оно выросло. На странице будет несколько инодов, но вы не можете быть уверены, что нужные иноды являются смежными (смежными друг с другом на диске). В худшем случае вам может понадобиться прочитать другую страницу для каждого отдельного файла, но на практике это маловероятно. К счастью, ядро хорошо разбирается в кэшировании страниц диска, поэтому вряд ли придется перечитывать страницу. Мы не можем сделать правильное предположение о плотности соответствующих записей inode; это может быть, возможно, 4 inode на страницу, но любая оценка от 1 до 64 может быть правдоподобной. Следовательно, вам может потребоваться прочитать 50 страниц для каталога, содержащего 200 файлов.
Когда дело доходит до 'cat
' для файлов, система должна найти индекс для каждого файла, так же как и с 'ls
'; Затем он должен прочитать данные для файла. Если данные не хранятся в самом inode (я думаю, что это было возможно в некоторых файловых системах с крупноформатными inode и достаточно маленькими телами файлов), вам придется читать по одной странице на файл - если частичные страницы для маленьких файлов не сгруппированы вместе на одной странице (опять же, я помню, что слышал, что это может произойти в некоторых файловых системах).
Итак, для директории с 200 файлами:
- Обычный
ls
: 1 страница
ls -l
: 51 страница
cat *
: 251 страница
Я не уверен, что буду доверять цифрам очень далеко - но вы можете увидеть данные, которые необходимы для улучшения оценок.