• Производство бытовок строительных

    производство бытовок строительных

    www.stsek.ru

  • Ремонт квартир смета на оплату труда

    Ремонт квартир цены найти каталог. Ремонт квартир смета на оплату труда.

    virtuozstroy.ru





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


Функция cache_reap

Алгоритм утилизации страничных кадров должен также утилизировать страницы, принадлежащие slab-аллокатору При этом он полагается на функцию cache reap , запускаемую периодически (приблизительно раз в две секунды) из стандартной рабочей очереди events Адрес функции cache reapO хранится В ПОЛе func переменной reap_work типа work struct, имеющейся у каждого процессора.
Функция cache reap о выполняет следующие действия:
1. Пытается получить семафор cache_chain_sem, который защищает список дескрипторов slab-кэшей. Если семафор уже занят, функция вызывает функцию schedule_delayed_work, ЧТОбы запланировать СВОЙ Следующий вызов, и завершает работу.
2. В противном случае функция сканирует дескрипторы kmem_cache_t, собранные в списке cache chain. Для каждого найденного дескриптора функция выполняет следующие действия:
• если флаг slab no reap в дескрипторе кэша установлен, значит, утилизация страничных кадров была отключена, и функция переходит к следующему кэшу в списке;
• опустошает локальный slab-кэш Эта операция может привести к освобождению новых участков памяти;
• у каждого кэша есть "время уборки”, хранящееся в поле next reap структуры kmem_list3 внутри Дескриптора КЭШа. Если значение jiffies все еще меньше, чем next reap, функция переходит к следующему кэшу в списке;
• устанавливает следующее время уборки”, записывая в поле next reap значение, на четыре секунды большее, чем текущее время;
• в многопроцессорных системах функция опустошает совместно используемый slab-кэш. Эта операция может привести к освобождению новых участков памяти;
• если в кэш недавно был добавлен новый участок памяти, т. е. если флаг free touched Структуры kmem_list3 внутри дескриптора КЭШа установлен, этот кэш пропускается, и функция переходит к следующему кэшу в списке;
• пользуясь эвристической формулой, вычисляет количество участков памяти, подлежащих освобождению. Это значение зависит от верхнего предела свободных объектов в кэше и от количества объектов, упакованных в один участок памяти;
• многократно вызывает функцию siab destroy о для элементов списка свободных участков памяти кэша, пока список не станет пустым или пока не достигнуто целевое количество свободных участков памяти;
• вызывает функцию cond reschedO для проверки флага TIF_NEED_ RES СНЕ D текущего процесса И ДЛЯ выполнения функции schedule о, если флаг установлен.
3. Освобождает семафор cache_chain_sem.
4. Вызывает функцию scheduie_deiayed_work, чтобы запланировать свой
следующий вызов, и завершает работу.

Предыдущая страница | 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 без проблем

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга для вас. А так как к книге прилагается компакт- диск с готовой к работе операционной системой Knoppix Live CD, то лишь достаточно вставить его в привод и перегрузить компьютер,...

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

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

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

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно неуклюже: получив системный вызов fork о, ядро в буквальном смысле дублировало все адресное пространство родителя и присваивало копию процессу-потомку. Такая операция...

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

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer head. Этот дескриптор содержит всю информацию, необходимую ядру для работы с блоком, так что перед обработкой блока ядро обязательно проверяет голову...