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


Символьная ссылка

Как было сказано выше, если путь в символьной ссылке содержит до 60 символов, он хранится в поле i biock индексного дескриптора, которое
является массивом из 15 целых чисел по 4 байта. Следовательно, в этом случае отдельный блок данных не требуется. Если путь состоит из более чем 60 символов, нужен один блок данных.

Файл устройства, канал и сокет

Для файлов этих типов блоки данных не требуются. Вся необходимая информация хранится в индексном дескрипторе.

Структуры Ext2 в памяти

Для эффективности большая часть информации, хранящейся в структурах раздела Ext2 на диске, копируется в оперативную память во время монтирования файловой системы. Это позволяет ядру избежать впоследствии многих операций чтения с диска. Чтобы получить представление о том, как часто изменяются структуры данных, рассмотрим некоторые фундаментальные операции:
- когда создается новый файл, значения в поле s free inodes count суперблока Ext2 и в поле bg free inodes count соответствующего дескриптора группы должны быть уменьшены;
- если ядро добавляет данные в конец существующего файла так, что количество блоков данных, выделенных файлу, увеличивается, то значения в поле s_free_blocks_count суперблока Ext2 И В поле bg_free_blocks_count соответствующего дескриптора группы должны быть изменены;
- даже простая перезапись порции существующего файла требует обновления поля s wtime суперблока Ext2.
Поскольку все дисковые структуры в Ext2 хранятся в блоках раздела Ext2, ядро пользуется кэшем страниц для поддержания их в актуальном состоянии для каждого типа данных, имеющего отношение к файловым системам и файлам Ext2, указаны структуры, представляющие эти данные на диске, структуры, которые ядро хранит в памяти, и информация о том, насколько интенсивно применяется кэширование. Данные, обновляемые очень часто, кэшируются всегда, т. е. эти данные постоянно присутствуют в памяти и включены в кэш страниц, пока соответствующий раздел Ext2 не будет размонтирован. Ядро добивается этого тем, что все время поддерживает счетчик обращений к странице больше 0.

Данные, которые "никогда не кэшируются”, не записываются в кэш, потому что не представляют осмысленной информации. И наоборот, всегда кэшируемые” данные постоянно присутствуют в оперативной памяти, так что нет необходимости читать их с диска (впрочем, периодически их следует записывать на диск). Между этими крайностями лежит динамический режим кэширования. В этом режиме данные хранятся в памяти столько же времени, сколько используется ассоциированный объект (индексный дескриптор, блок данных или битовая карта). Когда файл закрывается, или блок данных удаляется, алгоритм утилизации страничных кадров может удалить соответствующие данные из кэша.

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

Предыдущая страница | 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...