Реализация файловой системы Linux

Изначально в операционной системе Linux использовалась файловая система опе­рационной системы MINIX. Однако в системе MINIX длина имен файлов ограни­чивалась 14 символами (для совместимости с UNIX Version 7), а максимальный размер файла был равен 64 Мбайт. Поэтому у разработчиков операционной систе­мы Linux практически сразу появился интерес к усовершенствованию файловой системы. Первым шагом вперед стала файловая система Ext, в которой длина имен файлов была увеличена до 255 символов, а размер файлов – до 2 Гбайт. Однако эта система была медленнее файловой системы MINIX, поэтому была разработана файловая система Ext2 с длинными именами файлов, длинными файлами и высокой производительностью. Эта файловая система и стала основной файловой системой Linux. Однако опера­ционная система Linux также поддерживает еще более десятка файловых систем, используя для этого файловую систему NFS (описанную в следующем разделе). При компоновке операционной системы Linux предлагается сделать выбор файло­вой системы, которая будет встроена в ядро. Другие файловые системы при необхо­димости могут динамически подгружаться во время исполнения в виде модулей.

Файловая система Ext2 очень похожа на файловую систему Berkeley Fast с небольшими изменениями. Вместо того, чтобы использовать группы цилин­дров, что практически ничего не значит при современных дисках с виртуальной геометрией, она делит диск на группы блоков, независимо от того, где располага­ются границы между цилиндрами. Каждая группа блоков начинается с суперблока, в котором хранится информация о том, сколько блоков и i-узлов находятся в дан­ной группе, о размере группы блоков и т. д. Затем следует описатель группы, содер­жащий информацию о расположении битовых массивов, количестве свободных блоков и i-узлов в группе, а также количестве каталогов в группе. Эта информация важна, так как файловая система Ext2 пытается распространить каталоги равномер­но по всему диску. В двух битовых массивах ведется учет свободных блоков и свободных i-узлов. Размер каждого битового массива равен одному блоку. При размере блоков в 1 Кбайт такая схема ограничивает размер группы блоков 8192 блоками и 8192 i-узлами. На практике ограничение числа i-узлов никогда не встречается, так как блоки заканчиваются раньше. Затем располагаются сами i-узлы. Размер каждого i-узла – 128 байт, что в два раза больше размера стандартных i-узлов в UNIX. Дополнительные байты в i-узле используются следующим образом. Вместо 10 пря­мых и 3 косвенных дисковых адресов файловая система Linux позволяет 12 пря­мых и 3 косвенных дисковых адреса. Кроме того, длина адресов увеличена с 3 до 4 байт, и это позволяет поддерживать дисковые разделы размером более 224 бло­ков (16 Гбайт), что уже стало проблемой для UNIX.

Работа файловой системы похожа на функционирование быстрой файловой системы Berkeley. Однако в отличие от BSD, в системе Linux используются дис­ковые блоки только одного размера – 1 Кбайт. Быстрая файловая система Berkeley использует 8-килобайтные блоки, которые затем разбиваются при необходимости на килобайтные фрагменты. Файловая система Ext2 делает примерно то же самое, но более простым способом. Как и система Berkeley, когда файл увеличивается в размерах, файловая система Ext2 пытается поместить новый блок файла в ту же группу блоков, что и остальные блоки, желательно сразу после предыдущих бло­ков. Кроме того, при создании нового файла в каталоге файловая система Ext2 ста­рается выделить ему блоки в той же группе блоков, в которой располагается ката­лог. Новые каталоги, наоборот, равномерно распределяются по всему диску.

Другой файловой системой Linux является файловая система /рrос (process – процесс). Идея этой файловой системы изначально была реализована в 8-й редак­ции операционной системы UNIX, созданной лабораторией Bell Labs, а позднее скопированной в 4.4BSD и System V. Однако в операционной системе Linux дан­ная идея получила дальнейшее развитие. Основная концепция этой файловой системы заключается в том, что для каждого процесса системы создается подката­лог в каталоге /рrос. В этом каталоге располагаются файлы, которые хранят информацию о процессе – его командную строку, строки окружения и маски сигналов. В действительности этих файлов на диске нет. Когда они считываются, система получает информацию от фактического процесса и возвращает ее в стандартном формате. Многие расширения, реализованные в операционной системе Linux, относятся к файлам и каталогам, расположенным в каталоге /рrос. Они содержат информацию о центральном процессоре, дисковых разделах, векторах прерывания, счетчиках ядра, файловых системах, подгружаемых модулях и о многом другом. Непривилегирован­ные программы пользователя могут читать большую часть этой информации, что позволяет им узнать о поведении системы безопасным способом. Некоторые из этих файлов могут записываться в каталог /рrос, чтобы изменить параметры системы.



Наши рекомендации