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


Запись грязных страниц на диск

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

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

Грязная страница, в принципе, может оставаться в основной памяти до самого последнего момента, т. е. до выключения системы. Однако такая край
ность при определении стратегии откладывания записи имеет два основных недостатка:
- если произойдет сбой питания, содержимое оперативной памяти будет невозможно восстановить, и многие обновления файлов, сделанные с момента загрузки системы, будут потеряны;
- размер кэша страниц и, следовательно, объем оперативной памяти, необходимой для его хранения, может оказаться очень большим, по меньшей мере, таким же, как и размер блочных устройств, к которым происходили обращения.
Поэтому грязные страницы принудительно сбрасываются (записываются) на диск в следующих случаях:
- кэш страниц переполняется, и необходимы новые страницы, либо количество грязных страниц становится слишком большим;
- страница пребывает в грязном” состоянии слишком много времени;
- процесс требует сброса на диск всех висящих” обновлений или какого-то конкретного файла. Для этого он делает системный вызов sync о, fsynco
или fdatasync о Страницы буферов еще больше усложняют ситуацию. Головы буферов, ассоциированные с каждой страницей буферов, позволяют ядру отслеживать состояние каждого буфера в отдельности. Флаг PG dirty страницы буферов должен быть установлен, если хотя бы у одной из ассоциированных голов буферов установлен флаг BH Dirty. Когда ядро выбирает грязную страницу буферов для сброса на диск, оно просматривает ассоциированные головы буферов и записывает на диск только содержимое грязных” блоков. Как только ядро запишет на диск все грязные” блоки страницы буферов, оно сбрасывает флаг PG dirty этой страницы.

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