6b60102c

Для начала разберемся, как устроены системы.


Ядро состоит из следующих компонентов:

  1. "Собственно ядро"
  2. Драйвера устройств
  3. Системные вызовы

В зависимости от организации внутренних взаимодействий, ядра подразделяются на "микроядра" (microkernel) и монолитные ядра.
Системы с "микроядром" строятся по модульному принципу, имеют обособленное ядро, и механизм взаимодействия между драйверами устройств и процессами. По такому принципу строятся системы реального времени. Примерно так сделан QNX или HURD.
Монолитное ядро имеет более жесткую внутреннюю структуру. Все установленные драйвера жестко связываются между собой, обычно прямыми вызовами. По таким принципам строятся обыкновенные операционные системы типа Linux, FreeBSD.
Естественно, не все так четко, идеального монолитного или "микроядра" нет, наверное, ни в одной системе, просто системы приближаются к тому или иному типу ядра.

Мне бы очень хотелось, чтобы то, что мы будем делать, больше походило на первый тип ядер.


  • Block bitmap (Битовая карта занятости блоков)
  • Inode bitmap (Битовая карта занятости inode)
  • Inode table (Таблица inode)
  • Available blocks (блоки, доступные для размещения файлов)
  • Блоки в файловой системе отсчитываются с начала раздела. В дескрипторе группы содержаться номер блока с битовой картой блоков группы, номер блока с битовой картой инодов, и номер блока с которого начинается таблица inode. Про inode мы поговорим чуть попозже, а сперва разберемся с битовыми картами.

    В суперблоке храниться количество блоков в группе (s_blocks_per_group). Битовая карта имеет соответствующий размер в битах (занимает она не более блока). и в зависимости от размера блока может содержать информацию об использовании 8, 32 или 132 мегабайт максимум. Дисковое пространство раздела разбивается на группы в соответствии с этими значениями. А групп, как я уже упоминал, может быть до 32... что позволяет создавать разделы, в зависимости от размера блока, 256, 1024 или 4096 мегабайт соответственно.

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

    Теперь давайте разберемся, что такое inode. В отличии от FAT информация о файле здесь храниться не в директории, а в специальной структуре, которая носит название inode (информационный узел). В записи директории содержится только адрес inode и имя файла. При этом на один inode могут ссылаться несколько записей директории. Это называется hard link.

    Формат inode таков:

    struct ext2_inode { u_int16 i_mode; u_int16 i_uid; u_int32 i_size; u_int32 i_atime; u_int32 i_ctime; u_int32 i_mtime; u_int32 i_dtime; u_int16 i_gid; u_int16 i_links_count; u_int32 i_blocks; u_int32 i_flags; u_int32 i_reserved1; u_int32 i_block[14]; u_int32 i_version; u_int32 i_file_acl; u_int32 i_dir_acl; u_int32 i_faddr; u_int8 i_frag; u_int8 i_fsize; u_int16 i_pad1; u_int32 i_reserved2[2]; };

    Как видно из приведенной выше структуры в inode содержится следующая информация:



  • Тип и права доступа файла (i_mode)
  • идентификатор хозяина файла (i_uid)
  • Размер (i_size)
  • Время доступа, создания, модификации и удаления файла ( после удаления inode не удаляется, а просто перестает занимать блоки файловой системы)
  • Идентификатор группы
  • Количество записей в директориях, указывающих на этот inode...
  • Количество занимаемых блоков fs
  • дополнительные флаги ext2fs
  • таблица занимаемых блоков
  • Ну и другая, не столь существенная в данных момент информация.


  • Остановимся поподробнее на таблице занимаемых блоков. Как видите там всего 14 записей. Но 14 блоков - это мало для одного файла. Дело в том, что не все записи содержат номера блоков. 13-я запись содержит косвенный блок, то есть блок, в котором содержится таблица блоков. А 14-я запись содержит номер блока в котором содержится таблица номеров блоков, в которых содержаться таблицы блоков занимаемых файлом... так что размер файла практически ничто не ограничивает.

    Первые 10 inode зарезервированы для специфического использования.

    Для корневой директории в этой файловой системе не отводится заранее отведенного места. Любая, в том числе и корневая директория в этой файловой системе является по сути своей обыкновенным файлом. Но для облегчения поиска корневой директории для нее зарезервирован inode номер 2.

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

    За счет нескольких групп блоков уменьшается перемещение головки носителя при обращении к файлам, что увеличивает скорость обращения и уменьшает износ носителя. Да и сама файловая система организована так, что для чтения файлов не требуется загрузка больших объемов служебной информации, Что тоже не может не сказаться на производительности.

    Примерно так же устроены файловые системы FFS, HPFS, NTFS. Но в их устройство я не буду вдаваться. И так уже выпуск очень большой получается. :)

    Но в недавнее время появился еще один тип файловых систем. Эти системы унаследовали некоторые черты от баз данных и получили общее название "Журналируемые файловые системы". Особенность их заключается в том что все действия, производимые в файловой системе фиксируются в журнале, который правда съедает некоторый объем диска, но это позволяет значительно повысит надежность систем. В случае сбоя проверяется состояние файловой системы и сверяется с записями в журнале. В случае обнаружения несоответствий довести операцию до конца не составляет проблем, и отпадает необходимость в ремонте файловой системы. К таким файловым системам относятся ext3fs, RaiserFS и еще некоторые.

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

    Отправлено 2001-08-24 для 4145 подписчиков.
    ведущий рассылки Dron
    Сайт проекта
    Архив Рассылки

    При поддержке Kalashnikoff.ru



    Содержание раздела