• Ремонт ман

    ремонт ман

    www.6603060.ru





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 без проблем

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга для вас. А так как к книге прилагается компакт- диск с готовой к работе операционной системой Knoppix Live CD, то лишь достаточно вставить его в привод и перегрузить компьютер,...

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

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

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

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно неуклюже: получив системный вызов fork о, ядро в буквальном смысле дублировало все адресное пространство родителя и присваивало копию процессу-потомку. Такая операция...

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

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer head. Этот дескриптор содержит всю информацию, необходимую ядру для работы с блоком, так что перед обработкой блока ядро обязательно проверяет голову...