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


Пул зарезервированных страничных кадров

Запросы на выделение памяти можно удовлетворять двумя разными способами. Если в наличии имеется достаточно свободной памяти, запрос может быть удовлетворен немедленно. В противном случае должна быть выполнена утилизация памяти, и управляющий тракт ядра, сделавший запрос, блокируется до появления свободной памяти.

Однако некоторые управляющие тракты ядра не могут быть блокированы, когда они запрашивают память. Например, такая ситуация имеет место при обработке прерывания или при выполнении кода в критической области. В этих случаях поток ядра должен выдавать атомарные запросы на выделение памяти (с использованием флага gfp atomic). Атомарный запрос никогда не блокируется: если свободных страниц недостаточно, выделение памяти завершается неудачей.

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

Объем зарезервированной памяти (в килобайтах) хранится в переменной min free kbytes. Ее начальное значение устанавливается при инициализации ядра и зависит от объема физической памяти, непосредственно отображенной в четвертый гигабайт линейных адресов ядра, т. е. значение зависит от количества страничных кадров в зонах памяти zone dma и zone normal:
размер зарезервированного пула = yj\6xn (килобайт), где п — напрямую отображенная память.
Впрочем, начальное значение переменной min free kbytes не может быть меньше 128 и больше 65 5364.
Зоны памяти zone dma и zone normal жертвуют” под зарезервированную память количество страничных кадров, пропорциональное их размерам. Например, если зона zone normal в восемь раз больше зоны zone dma, то семь восьмых зарезервированных страничных кадров берется из zone normal, а одна восьмая — ИЗ ZONE_DMA.

Поле pages min дескриптора zone содержит количество зарезервированных страничных кадров внутри зоны. Как мы увидим в главе 17, это поле играет свою роль в алгоритме утилизации страничных кадров (совместно с полями pages iow и pages high). Значение в поле pages iow всегда равно 5/4 от значения в поле pages min, а значение pages high всегда равно 3/2 от значения в поле pages_min.

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




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без про...

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга...

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

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

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

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

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

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...