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


Системные вызовы syncO, fsyncO и fdatasyncQ

В этом разделе мы кратко опишем три системных вызова, доступных пользовательским приложениям и позволяющих принудительно записать грязные” буферы на диск:
- sync — позволяет процессу записать на диск все грязные” буферы;
- fsynco — позволяет процессу записать на диск все блоки конкретного открытого файла;
- fdatasync — почти идентичен вызову fsynco, но не записывает блок индексного дескриптора этого файла.

Системный вызов sync

Служебная процедура sys synco системного вызова synco вызывает серию дополнительных функций:
wakeup_bdflush (0) ; sync_inodes(0) ; sync_supers; sync_filesystems(0) ; sync_filesystems(1); sync_inodes(1);
Как показано в предыдущем разделе, функция wakeup bdfiusho запускает поток ядра pdflush, который сбрасывает на диск все грязные страницы из кэша страниц.

Функция sync inodes сканирует список суперблоков в поисках грязных” индексных дескрипторов, которые следует сбросить на диск. Она принимает параметр wait, который определяет, должна ли она подождать, пока запись на диск будет выполнена, или нет. Функция сканирует суперблоки всех смонтированных в этот момент файловых систем. Для каждого суперблока, содержащего грязные” индексные дескрипторы, эта функция сначала вызывает функцию sync sb inodes для сброса на диск соответствующих грязных страниц, а затем функцию sync_biockdev — для явного сброса грязных страниц буферов, владельцем которых является блочное устройство, содержащее этот суперблок. Это делается потому, что метод суперблока write inode во многих дисковых файловых системах просто помечает буфер блока, соответствующий индексному дескриптору на диске, как грязный”. Функция sync_biockdev гарантирует, что изменения, внесенные функцией sync sb inodes , будут действительно записаны на диск.

Функция sync supers о записывает на диск "грязные" суперблоки, если необходимо, используя операции суперблока write super. Наконец, функция
sync filesystems ВЫПОЛНЯеТ МеТОД СуперблОКа sync fs для всех файловых систем, поддерживающих запись. Этот метод является вспомогательным инструментом, предлагаемым файловой системе на случай, если ей понадобятся какие-то специальные операции при каждой синхронизации. Он используется только в журналируемых файловых системах, например, в Ext3 Обратите внимание, ЧТО функции sync_inodes И sync filesystems ВЫЗЫ- ваются дважды, один раз с параметром wait, равным нулю, а второй — с этим параметром, равным единице. Это сделано не случайно: вначале они быстро сбрасывают на диск незаблокированные индексные дескрипторы, а затем ждут разблокирования каждого незаблокированного индексного дескриптора и записывают их на диск по одному.

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