Разработка ядра Linux
Шрифт:
Указание одного из этих флагов изменяет зону, из которой ядро пытается выделить память. Флаг
Если не указан ни один из флагов, то ядро пытается выделять память из зон
Флаг
Флаги типов указывают модификаторы операций и зон, которые необходимы для выполнения запросов определенных типов. В связи с этим, в коде ядра стараются использовать правильный флаг типа и не использовать больших наборов модификаторов. Это одновременно и проще и при этом меньше шансов ошибиться. В табл. 11.5 приведен список возможных флагов типов, а в табл. 11.6 показано, какие модификаторы соответствуют какому флагу.
Таблица 11.5. Флаги типов
| Флаг | Описание |
|---|---|
GFP_ATOMIC | Запрос на выделение памяти высокоприоритетный и в состояние ожидания переходить нельзя. Этот флаг предназначен для использования в обработчика: прерываний, нижних половин и в других ситуациях, когда нельзя переходить в состояние ожидания |
GFP_NOIO | Запрос на выделение памяти может блокироваться, но при его выполнении нельзя выполнять операции дискового ввода-вывода. Этот флаг предназначен для использования в коде блочного ввода-вывода, когда нельзя инициировать новые операции ввода-вывода |
GFP_NOFS | Запрос на выделение памяти может блокироваться и выполнять дисковые операции ввода-вывода, но запрещено выполнять операции, связанные с файловыми системами. Этот флаг предназначен для использования в коде файловых систем, когда нельзя начинать выполнение новых файловых операций |
GFP_KERNEL | Обычный запрос на выделение памяти, который может блокироваться. Этот флаг предназначен для использования в коде, который выполняется в контексте процесса, когда безопасно переходить в состояние ожидания |
GFP_USER | Обычный запрос на выделение памяти, который может блокироваться. Этот флаг используется для выделения памяти процессам пространства пользователя |
GFP_HIGHUSER | Запрос на выделение памяти из зоны ZONE_HIGHMEM , который может блокироваться. Этот флаг используется для выделения памяти процессам пространства пользователя |
GFP_DMA | Запрос на выделение памяти из зоны ZONE_DMA . Драйверам устройств, которым нужна память для выполнения операций по ПДП, необходимо использовать этот флаг обычно в комбинации с одним из описанных выше флагов |
Таблица 11.6. Список модификаторов, соответствующих каждому флагу типа
| Флаг | Модификаторы |
|---|---|
GFP_ATOMIC | __GFP_HIGH |
GFP_NOIO | __GFP_WAIT |
GFP_NOFS | (__GFP_WAIT | __GFP_IO) |
GFP_KERNEL | (__GFP_WAIT | __GFP_IO | __GFP_FS) |
GFP_USER | (__GFP_WAIT | __GFP_IO | __GFP_FS) |
GFP_HIGHUSER | (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HIGHMEM) |
GFP_DMA | __GFP_DMA |
Рассмотрим наиболее часто используемые флаги и для чего они могут быть нужны. Подавляющее большинство операций выделения памяти в ядре используют
Можно сказать, что свойства флага
По своим свойствам между рассмотренными флагами находятся флаги
Флаг
В подавляющем большинстве случаев при разработке кода вам будет необходимо использовать флаги
Таблица 11.7. Какой флаг и когда необходимо использовать
| Ситуация | Решение |
|---|---|
| Контекст процесса, можно переходить в состояние ожидания | Используется флаг GFP_KERNEL |
| Контекст процесса, нельзя переходить в состояние ожидания | Используется флаг GFP_ATOMIC или память выделяется с использованием флага GFP_KERNEL но в более ранний или поздний момент, когда можно переходить в состояние ожидания |
| Обработчик прерывания | Используется флаг GFP_ATOMIC |
| Обработка нижней половины | Используется флаг GFP_ATOMIC |
| Необходима память для выполнения операций ПДП, можно переходить в состояние ожидания | Используются флаги (GFP_DMA | GFP_KERNEL) |
| Необходима память для выполнения операций ПДП, нельзя переходить в состояние ожидания | Используются флаги (GFP_DMA | GFP_ATOMIC) или выделение выполняется в более поздний или более ранний момент времени |
Последний Паладин. Том 13
13. Путь Паладина
Фантастика:
городское фэнтези
попаданцы
аниме
рейтинг книги
На границе империй. Том 7. Часть 5
11. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
рейтинг книги
На цепи
1. На цепи
Старинная литература:
прочая старинная литература
рейтинг книги
Последний Паладин. Том 2
2. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Перешагнуть пропасть
1. Перешагнуть пропасть
Фантастика:
боевая фантастика
космическая фантастика
рейтинг книги
Полигон
S.T.A.L.K.E.R.
Фантастика:
боевая фантастика
рейтинг книги