Основные понятия в реализации файловой системы - PullRequest
3 голосов
/ 02 мая 2010

У меня нет ясности относительно реализации файловой системы. В частности (Операционные системы - Танненбаум (Выпуск 3), стр. 275) говорится: «Первое слово каждого блока используется как указатель на следующий. Остальной блок - данные».

Может ли кто-нибудь объяснить мне иерархию деления здесь? Мол, каждый раздел на диске содержит блоки, блоки содержат слова? и так далее ...

Ответы [ 3 ]

4 голосов
/ 02 мая 2010

Передо мной нет книги, но я подозреваю, что цитируемое предложение на самом деле не говорит о файлах, каталогах или других структурах файловой системы. (Обратите внимание, что раздел, как правило, не является концепцией файловой системы). Я думаю, что ваше цитируемое предложение на самом деле просто указывает на то, как структуры данных, хранящиеся в дисковых блоках, связаны друг с другом. Это означает только то, что сказано. Каждый блок (обычно 4 КБ, но, может быть, всего 512 В) выглядит примерно так:

+------------------+------------- . . . . --------------+
| next blk pointer | another 4k - 4 or 8 bytes of stuff |
+------------------+------------- . . . . --------------+

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

Что касается структур файловой системы:

  • A disk - это массив секторов , почти всегда размером 512B. Внутри диски изготовлены из пластин , представляющих собой вращающиеся дискообразные элементы, покрытые ржавчиной, и каждый диск разделен на множество концентрических дорожек . Однако эти детали полностью скрыты от операционной системы аппаратным интерфейсом диска ATA или SCSI.
  • Операционная система делит массив секторов на разделов . Разделы - это смежные диапазоны секторов, и разделы не перекрываются. (На самом деле это разрешено в некоторых операционных системах, но думать об этом просто запутанно.)
  • Итак, раздел также является массивом секторов .

Пока что файловой системы на самом деле нет. Большинство файловых систем построены внутри раздела. Файловая система обычно имеет следующие понятия. (Я использую имена из традиции Unix, но другие операционные системы будут иметь аналогичные идеи.)

  • В некотором фиксированном месте раздела находится суперблок . Суперблок является корнем всех структур данных файловой системы и содержит достаточно информации, чтобы указывать на все другие объекты. (На самом деле, как правило, существует несколько суперблоков, разбросанных по разделу как простая форма отказоустойчивости.)

  • Фундаментальная концепция файловой системы - это inode , называемый «глаз-узел». Иноды представляют различные типы объектов, составляющих файловую систему, наиболее важными из которых являются простые файлы и каталоги. Инод может быть отдельным блоком, но некоторые файловые системы упаковывают несколько инодов в один блок. Иноды могут указывать на набор блоков данных , которые составляют фактическое содержимое файла или каталога. Как блоки данных для файла организованы и проиндексированы на диске - одна из ключевых задач файловой системы. Для каталога блоки данных содержат информацию о файлах и подкаталогах, содержащихся в каталоге, а для простого файла блоки данных содержат содержимое файла.

  • Блоки данных - это основная масса блоков в разделе. Некоторые из них выделены для различных inode (например, для каталогов и файлов), а другие являются бесплатными. Другой ключевой задачей файловой системы является выделение свободных блоков данных при записи данных в файлы и освобождение блоков данных из файлов при их усечении или удалении.

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

3 голосов
/ 02 мая 2010

Я не знаю контекст этого предложения, но, похоже, он описывает связанный список блоков. Вообще говоря, «блок» - это небольшое количество байтов (обычно степень два). Это может быть 4096 байт, это может быть 512 байт, это зависит. Жесткие диски предназначены для извлечения данных блока за раз; если вы хотите получить 1234567-й байт, вам нужно будет получить весь блок, в котором он находится. «Слово» намного меньше и относится к одному числу. Это может быть всего 2 байта (16 бит) или 8 байтов (64 бит); опять же, это зависит от файловой системы.

Конечно, блоки и слова - это еще не все, что есть в файловых системах. Файловые системы обычно реализуют B-дерево для ускорения поиска (не нужно искать всю файловую систему, чтобы найти файл, просто пройтись по дереву). В B-дереве файловой системы каждый узел хранится в блоке. Многие файловые системы используют вариант B-дерева под названием B + -дерево, которое соединяет листья вместе со ссылками для ускорения обхода. Описанная здесь структура может описывать листья дерева B + или описывать цепочку блоков, используемых для хранения одного большого файла.

Таким образом, диск похож на гигантский массив байтов, который можно разбить на слова, которые обычно составляют 2-8 байтов, и блоки, которые обычно составляют 512-4096 байтов. Существуют и другие способы его разрушения, такие как головки, цилиндры, сектора и т. Д. Помимо этих примитивов реализованы структуры индекса более высокого уровня. Понимая ограничения, которым должен удовлетворять разработчик файловой системы (эффективно эмулировать дерево файлов путем одновременного хранения / извлечения блоков), проект файловой системы должен быть достаточно интуитивным.

1 голос
/ 02 мая 2010

дорожек >> блоков >> секторов >> слов >> байтов >> Клев >> Биты

Дорожки представляют собой концентрические кольца изнутри наружу дискового диска.

Каждый трек делится на фрагменты, называемые секторами .

A block - это группа секторов (1, 2, 4, 8, 16 и т. Д.). Чем больше диск, тем больше секторов будет удерживать блок.

A word - это количество битов, которые ЦП может обработать за один раз (16-битный, 32-битный, 64-битный и т. Д.), И в вашем примере он сохраняет адрес (или, возможно, смещение ) следующего блока.

Байты содержат полубайтов и битов . 1 байт = 2 клева; 1 клев = 4 бита.

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