Книга: Разработка ядра Linux
Демоны bdflush и kupdated
Демоны bdflush
и kupdated
В ядрах серий до 2.6 работа потоков pdflush
выполнялась двумя другими потоками ядра bdflush
и kupdated
.
Поток пространства ядра bdflush
выполнял фоновую обратную запись измененных страниц, когда количество доступной памяти становилось достаточно малым. Также был определен ряд пороговых значений, аналогично тому как это делается для демона pdflush
. Демон bdflush
возвращался к выполнению с помощью функции wakeup_bdflush()
, когда количество свободной памяти становилось меньше этих пороговых значений.
Между демонами bdflush
и pdflush
существует два главных отличия. Первое состоит в том, что демон bdflush
был всего один, а количество потоков pdflush
может меняться динамически. Об этом более подробно будет рассказано в следующем разделе. Второе отличие состоит в том, что демон bdflush
работал с буферами, он записывал на диск измененные буферы. Демон pdflush
работает со страницами, он записывает на диск целые измененные страницы памяти. Конечно, страницы памяти могут соответствовать буферам, но единицей ввода-вывода является целая страница памяти, а не один буфер. Это дает преимущество, поскольку работать со страницами памяти проще, чем с буферами, так как страница памяти — более общий и более часто используемый объект.
Так как демон bdflush
выполнял обратную запись, только когда количество свободной памяти очень сильно уменьшалось или количество буферов было очень большим, то был введен поток ядра kupdated
, который периодически выполнял обратную запись измененных страниц памяти. Он использовался для целей, аналогичных функции wb_kupdate()
демона pdflush
.
Потоки bdflush
и kupdated
и их функциональность сейчас заменены потоками pdflush
.