Каков максимальный размер файла в каждом из этих случаев? - PullRequest
2 голосов
/ 08 декабря 2010
Assume disc blocks are 8K bytes and that disc addresses are 32 bits: •
from the information in the i-node? – What size can be directly addressed 
– What size of file requires a double indirect block?
– What is the largest possible file?

Источник: http://ti.uni -due.de / ti / en / образование / обучение / ss06 / dv2 / ex2_sol.pdf

Может ли кто-нибудь помочь мне решить подобные вопросы?

Ответы [ 3 ]

7 голосов
/ 10 декабря 2010

Несколько лет назад я был разработчиком файловых систем.

Используя материал, указанный в ссылке ...

Доступ к любому смещению файла в диапазоне 0 .. (80 кБ - 1) включительно можно получить с помощью прямых блоков, хранящихся в inode. Это связано с тем, что имеется десять блоков по 8 кБ.

Поскольку блок диска занимает 8 кБ (8192 байта), а адреса диска - 32 бита (4 байта), каждый блок диска может содержать до 2048 (8192/4) записей адресов диска. Это означает, что одиночный косвенный блок может ссылаться до 2048 * 8 КБ байтов данных файла (16 МБ). Расширяя это, мы обнаруживаем, что дважды косвенный блок может ссылаться до 2048 *2048* 8 КБ файловых данных (32 ГБ).

С помощью прямых блоков можно получить доступ к данным файла до 80 КБ. Это приводит к смещению файлов от 0 до (80 кБ - 1) включительно.

До 16 МБ файловых данных можно получить с помощью единственного косвенного блока, хранящегося в inode. Это приводит к смещению файлов от 80 кБ до (16 МБ + 80 кБ - 1) включительно.

До 32 ГБ файловых данных можно получить с помощью дважды косвенного блока, хранящегося в inode. Это приводит к смещению файлов (16 МБ + 80 КБ) через (32 ГБ + 16 МБ + 80 КБ - 1) включительно.

До 64 ТБ файловых данных можно получить с помощью трехкратного косвенного блока, хранящегося в inode. Это приводит к смещению файлов (32 ГБ + 16 МБ + 80 КБ) до (64 ТБ + 32 ГБ + 16 МБ + 80 КБ - 1) включительно.

Следовательно, теоретический максимальный размер файла составляет 64 ТБ + 32 ГБ + 16 МБ + 80 КБ.

Практический максимальный размер - это другое дело. Это может быть ограничено любым из них или комбинацией следующего:

  1. Размер диска.
  2. Размер раздела.
  3. Внутренние ограничения метаданных файловой системы. Некоторые файловые системы не предназначены для адресации, превышающей размер X, даже если X меньше теоретического максимального размера файла.
  4. Относится к пункту 3, но заслуживает отдельного числа битов, зарезервированных в inode для хранения размера файла. Если память служит, оригинальный Ext2 ограничил размер файла до 32 бит. Это создало ограничение (2 ГБ - 1) для размера файла.

Некоторые из практических ограничений можно «обойти», если файловая система поддерживает разреженные файлы (описанная в ссылке, вероятно, делает, так как использует косвенные блоки). Разреженные файлы допускают такие ситуации, как «подгонка» файла объемом 2 ТБ на диске объемом 1 ГБ без использования фактического места на диске 2 ТБ. Кстати, это одна из причин, по которой индекс может часто содержать информацию о количестве блоков, фактически используемых файлом.

Надеюсь, это поможет.

1 голос
/ 08 декабря 2010

Ответ фактически дается в файле, нужно будет прочитать исходный материал, на котором основаны эти слайды.

В основном:

Assume disc blocks are 8K bytes and that disc addresses are 32 bits:
1)What size can be directly addressed from the information in the i-node?
2)What size of file requires a double indirect block? 
3)What is the largest possible file?

На слайде перед ответом объясняется структура файла Unix, в нем очень четко указан адрес 10 блоков.

Итак, очевидно, 8K * 10 = 80 Кбайт.

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

Я знаю, что 2 ^ 8 - это 256, а 2 ^ 3 - это 8, поэтому 256 * 8 = 2048 КБ, что составляет 2 МБ * 8 = 16384 * 1024 = 16777216 = 16 МБ

Double Indirect - это адрес косвенного (в два раза), поэтому просто 2048 * 2048, что составляет 4 ГБ * 8 * 1024 = 34359738368 = 32 ГБ

Тройной косвенный адрес - это адрес косвенного в двойном косвенном адресе, поэтому

32 ГБ * 2048 (2 МБ) = 70368744177664 = 64 ТБ

Да, я посмотрел на ответ и пришел к некоторым выводам, без исходного материала я ничего больше не могу, лекция не опубликована.

1 голос
/ 08 декабря 2010

Я не знаком с системами Unix, но на странице 18/19 документа, который вы дали в своем вопросе, ответ, кажется, дан.В чем ваша проблема?

Предположим, что блоки дисков имеют размер 8 Кбайт, а адреса дисков - 32 бита: - Какой размер можно напрямую адресовать из информации в i-узле?- Какой размер файла требует двойной косвенной блокировки?- Какой самый большой файл?Ответ: a) Дисковые блоки = 8 Кбайт. I-узел => 10 адресов дисковых блоков. 8 К * 10 = 80 К. Доступ к файлам напрямую

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...