Прежде чем мы обсудим особенности , касающиеся pdflush
, kjournald, and
kswapd`, давайте сначала получить немного о контексте того , что именно мы говорим в терминах ядра Linux.
Архитектура GNU / Linux
Архитектура GNU / Linux может рассматриваться как 2 пространства:
Между пользовательским пространством и пространством ядра находится библиотека GNU C ( glibc
). Это обеспечивает интерфейс системного вызова, который соединяет ядро с приложениями пользовательского пространства.
Пространство ядра может быть разделено на 3 уровня:
- Интерфейс системного вызова
- Архитектурно-независимый код ядра
- Архитектурно-зависимый код
Интерфейс системного вызова, как следует из его названия, обеспечивает интерфейс между glibc
ядром и. Архитектурный Независимый Kernel Код состоит из логических единиц , таких как VFS (Virtual File System) и VMM (Virtual Memory Management). Архитектурный зависимый код является компонентами, процессор и платформо-зависимый код для конкретной аппаратной архитектуры.
Схема архитектуры GNU / Linux
В оставшейся части этой статьи мы сосредоточим наше внимание на логических единицах VFS и VMM в пространстве ядра.
Подсистемы ядра GNU / Linux
Подсистема VFS
С концепцией высокого уровня того, как структурировано ядро GNU / Linux, мы можем углубиться в подсистему VFS. Этот компонент отвечает за предоставление доступа к различным блочным устройствам хранения, которые в конечном итоге отображаются на файловую систему (ext3 / ext4 / etc.) На физическом устройстве (HDD / etc.).
Схема ВФС
На этой диаграмме показано, как write()
пользовательский процесс проходит через VFS и, в конечном счете, переходит к драйверу устройства, где он записывается на физический носитель данных. Это первое место, где мы встречаемся pdflush
. Это демон, который отвечает за сброс грязных блоков буфера данных и метаданных на носитель данных в фоновом режиме. На диаграмме это не показано, но есть еще один демон, kjournald
который сидит рядом pdflush
, выполняя аналогичную задачу записи грязных блоков журнала на диск. ПРИМЕЧАНИЕ. Журнальные блоки - это то, как файловые системы, такие как ext4 и JFS, отслеживают изменения на диске в файле до того, как эти изменения произойдут.
Вышеуказанные детали обсуждаются далее в этой статье .
Обзор write()
шагов
Чтобы обеспечить простой обзор операций системы ввода-вывода, мы будем использовать пример, когда функция write()
вызывается приложением пространства пользователя.
- Процесс запрашивает запись файла через
write()
системный вызов.
- Ядро обновляет кеш страниц, сопоставленный с файлом.
- Поток ядра pdflush заботится о сбросе кеша страниц на диск.
- Уровень файловой системы объединяет каждый блочный буфер в
bio struct
( см. 1.4.3, « Уровень блока» на стр. 23 ) и отправляет запрос на запись на уровень блочных устройств.
- Уровень блочных устройств получает запросы от верхних уровней, выполняет операцию лифта ввода-вывода и помещает запросы в очередь запросов ввода-вывода.
- Драйвер устройства, такой как SCSI или другие специфические драйверы устройства, позаботится об операции записи.
- Прошивка дискового устройства выполняет аппаратные операции, такие как поиск головки, вращение и передача данных в сектор на диске.
Подсистема VMM
Продолжая наше более глубокое погружение, теперь мы можем заглянуть в подсистему VMM. Этот компонент отвечает за поддержание согласованности между основной памятью (ОЗУ), подкачкой и физическим носителем данных. Основным механизмом поддержания согласованности является bdflush
. Поскольку страницы памяти считаются грязными, их необходимо синхронизировать с данными, находящимися на носителе. bdflush
будет координироваться с pdflush
демонами для синхронизации этих данных с носителем данных.
Схема ВММ
Обмен
Когда системной памяти становится мало или истекает таймер подкачки ядра, kswapd
демон будет пытаться освободить страницы. Пока количество свободных страниц остается выше free_pages_high
, kswapd
ничего не поделаешь. Однако, если количество свободных страниц упадет ниже, то kswapd
начнется процесс восстановления страницы. После того, kswapd
как пометил страницы для перемещения, bdflush
позаботится о синхронизации любых ожидающих изменений на носителе через pdflush
демоны.
Рекомендации и дальнейшие чтения