Linux Kernel (Ядро линукса) (часть 3)


Объект-суперблок Ext2

поле s fs info суперблоки виртуальной файловой системы указывает на структуру, содержащую данные, специфичные для файловой системы.
В случае Ext2 это поле указывает на структуру типа ext2_sb info, которая содержит следующую информацию:
- большинство полей суперблока на диске;
- указатель s sbh на голову буфера, содержащего суперблок;
- указатель s_es на буфер, содержащий суперблок;
- количество дескрипторов групп, которое может быть упаковано в один блок (поле s_desc_per_block);
- указатель s group desc на массив голов буферов, содержащих дескрипторы групп (обычно одного элемента достаточно);
- другие данные, относящиеся к состоянию монтирования, опциям монтирования и т. д.
связи между структурами ext2_sb_info и буферами и их головами, относящимися к суперблоку Ext2 и дескрипторам групп.
Когда ядро монтирует файловую систему Ext2, оно вызывает функцию ext2_fiii_super о для выделения места под структуры и заполнения их данными, прочитанными с диска Приведем упрощенное описание этой функции, делая упор на выделение памяти под буферы и дескрипторы.
Выделяет дескриптор ext2_sb_info и сохраняет его адрес в поле s fs info объекта-суперблока, переданного в качестве параметра.
Вызывает функцию bread , чтобы выделить буфер в странице буферов и соответствующую голову буфера, а также чтобы прочитать суперблок с диска в буфер. Как было сказано в разд. выделение не выполняется, если блок уже хранится в странице буферов в кэше страниц и еще не устарел. Затем функция сохраняет адрес головы буфера в поле s sbh суперблока Ext2.

Выделяет массив байтов (по одному на каждую группу) и сохраняет его адрес в поле s debts дескриптора ext2_sb_info Выделяет массив указателей на головы буферов, по одному на каждый дескриптор группы, и сохраняет адрес массива в поле s group desc дескриптора
ext2_sb_info.

Повторно вызывает функцию bread , чтобы выделить буферы и прочитать с диска блоки, содержащие дескрипторы групп Ext2, и сохраняет адреса голов буферов в массиве s group desc, выделенном на предыдущем шаге.

Выделяет индексный дескриптор и элемент каталога для корневого каталога и устанавливает некоторые поля объекта-суперблока так, чтобы было возможно прочитать корневой индексный дескриптор с диска.

Очевидно, что все структуры, выделенные функцией ext2_fiii_superо, остаются в памяти после того, как она возвратит управление; они будут освобождены только после размонтирования файловой системы Ext2. Когда ядро должно модифицировать поле суперблока Ext2, оно просто записывает нужное значение в нужное место соответствующего буфера и помечает буфер как грязный".

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без про...

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга...

Linux Kernel (Ядро линукса) (ч...

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть...

Linux Kernel (Ядро линукса) (ч...

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

Linux Kernel (Ядро линукса) (ч...

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...