Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Блокировка касается только описателя, а не самого диапазона памяти, с которым он ассоциирован.





Глава 4 • Управление памятью


4.2.1.2 free_pages

Поле f ree_pages хранит количество оставшихся в зоне свободных страниц. Это un­signed long-число увеличивается каждый раз, когда из зоны выделяется станица, и умень­шается после того, как страница освобождается. Общее количество свободной оператив­ной памяти, возвращаемое nr_f ree_pages (), рассчитывается с помощью сложения значений для всех трех зон.

4.2.1.3 pages_min, pagesjow и pagesjiigh

Поля pages_min/ pages_low и pages_high хранят значения водяных знаков. Когда количество доступных станиц достигает каждого из этих водяных знаков, ядро отвечает на нехватку памяти соответствующим каждому из этих значений образом.

Rujock

Поле ru_lock хранит циклическую блокировку для списка свободных страниц.

Acrtivejlst и inactivejist

acrtive_list и inactive_list используются при перераспределении функцио­нальности страниц. Первый - это список активных страниц, а второй - список страниц, годных для повторного использования.

4.2.1.6 all_unreaclaimable

Поле all_unreaclaimable устанавливается в 1, если все страницы в зоне закрепле­ны. Использовать повторно их можно только с помощью демона страниц kswapd.

4.2.1.7 pages_scanned, temp_priority и prev_priority

Поля page s__s с armed, temp_priority и prev_priority связаны с функциональ­ностью перераспределения памяти, выходящей за рамки рассмотрения данной книги.

4.2.1.8 free_area

Дружественная система, использующая битовую карту f гее_агеа.

4.2.1.9 waiMable, wait_table_size и wait_table_bits

Поля wait_table, wait_table_size и wait_table_bits связаны с запросами к зонам страниц из очереди ожидания процессов.

Вспомогательные функции для работы с зонами памяти

Когда к объекту применяется действие, обычно необходимо получить информацию об этом объекте. Проще всего такую информацию можно получить с помощью вспомога­тельных функций. Далее представлено несколько вспомогательных функций для манипу­ляции с зонами памяти.


Зоны памяти



Выравнивание кеша и заполнение зон памяти

Выравнивание кеша выполняется для увеличения производительности при доступе к полю описателя. Выравнивание кеша увеличивает производительность за счет минимизации количе­ства инструкций, необходимых для копирования части данных. Возьмем случай 32-битового значения, не выровненного по слову. Процессору придется выполнить две инструкции «за­грузка слова» для получения данных из регистров вместо одного. ZONE_PUDDING показыва­ет, как выполняется выравнивание в зоне памяти:

include/linux/mmzone.h #if defined(CONFIG_SMP) struct zone_padding { int x;

} ___ cacheline__maxaligned_in_smp;

#define ZONE_PADDING(name) struct zone_padding name;

#else

#define ZONE_PADDING(name)

#endif

Если вы хотите узнать больше о выравнивании в Linux, см. файл include/linux/ cache. h.

4.2.2.1 for__each_zone()

Макрос f or_each_zone () итерационно перебирает все зоны:

include/linux/mmzone.h

2 68 #define for_each_zone(zone) \

2 69 for (zone = pgdat_list-> node_zones; zone; zone = next_zone(zone) )

4.2.2.2 is_highmem() и is_normal()

Функции is__highmem() и is_normal() проверяют структуры зон в верхней или

в нормальной зоне соответственно:

include/linux/mmzone.h

315 static inline int is_highmem(struct zone *zone)

316 {

317 return (zone - zone-> zone_pgdat-> node_zones == ZONE_HIGHMEM);

318 }
319

32 0 static inline int is_normal(struct zone *zone)

321 (



Глава 4 • Управление памятью


return (zone - zone-> zone_pgdat-> node_zones == ZONE_NORMAL); 323 }

Фреймы страниц

Фреймы страниц - это единицы памяти, хранящие страницы. Когда процессу требуется память, ядро вызывает фрейм страницы. Таким же образом, когда фрейм страницы боль­ше не используется, ядро освобождает его и делает доступным для другого процесса. Для выполнения этих операций служат следующие функции.

4.3.1 Функции для затребования страниц фреймов

Для запроса страниц фреймов можно использовать несколько функций. Мы можем раз­
делить эти функции на две группы, в зависимости от типа возвращаемого ими значения.
Одна группа возвращает указатель на структуру страницы (типа void*), что соответст­
вует требуемому для выделения фрейму страницы. Сюда входят alloc__pages ()
и alloc_page (). Вторая группа функций возвращает 32-битовое значение виртуально­
го адреса (типа long) первой выделенной страницы. Сюда входят _____ get_

f ree_page() и____ get_dma_pages(). Многие из них являются обычными обертками низ­
коуровневых интерфейсов. Рис. 4.2 и 4.3 демонстрируют графики вызовов этих функций.

 

 

 

 

 

alloc_pages()          
      alloc j)ages_nocIe()   _alloc_pages()
  >
alloc_page()          

Рис. 4.2. Граф вызова alloc_*0

Следующие макросы и функции ссылаются на число обработанных страниц (затре­бованных или освобожденных) в степени 2. Страницы выделяются и освобождаются по­следовательностями длины, равной степени двойки. Мы можем запросить 1, 2, 4, 16 и т. д. групп страниц1.

4.3.1.1 alloc_pages() и alloc_page()

а11ос_раде () запрашивает одну страницу и поэтому не имеет параметра порядка (or­der). Эта функция выставляет этот параметр в 0 при вызове alloc_pages_node(); alloc_pages (), наоборот, позволяет затребовать несколько страниц (2 в степени order):

1 Группы запрашиваемых и освобождаемых страниц всегда являются последовательными.


4.3 Фреймы страниц



include/linux/gfp.h

75 #define alloc_pages(gfp_mask/ order) \

76 alloc_pages__node(numa_node_id(), gfp_mask# order)

77 #define alloc_page(gfp_mask) \

78 alloc_pages_node(numa_node_id(), gfp_mask/ 0)

Как вы можете видеть на рис. 4.2, далее оба макроса вызывают alloc_ pages_node (), передавая соответствующие параметры; alloc_pages_node()- это функция-обертка, используемая для проверки порядка требуемых фреймов страниц:

include/linux/gfp.h

67 static inline struct page * alloc_pages_node (int nid,

unsigned int gfp_mask/ unsigned int order)

68 {

69 if (unlikely(order > = MAX__ORDER) )

70 return NULL;
71

72 return _ alloc_pages(gfp_mask/ order,

NODE_DATA(nid)-> node_zonelists + (gfp_mask & GFP_ZONEMASK) );

73 }

Вы можете увидеть, что, если порядок требуемых страниц больше доступного мак­симума (MSX___ORDER), запрос на выделение страницы не проходит. В alloc _j? age() это значение всегда устанавливается в 0 и поэтому всегда проходит. MSX_ORDER опреде­лено в linux/mmzone. h и равно 11. Поэтому мы можем затребовать до 2048 страниц.

Функция___ alloc_pages () выполняет основную работу по запросу страницы.

Эта функция определена в mm/page_alloc. с и требует знания зон памяти, о которых говорилось в предыдущем разделе.

4.3.1.2 _getjree_page() и _get_dma_pages()

Макрос__ get_f гее_раде () предполагает затребование только одной страницы. Как

и в а11ос_раде (), в него передается 0 в качестве количества требуемых страниц для

__ get_f гее_раде (), выполняющей основные действия. Рис. 4.3 иллюстрирует

иерархию вызова этих функций.

_get_free_page()

_get_free_pages()

_get_dma_page()

Рис. 4.3. Иерархия вызова get_*_page()



Глава 4 • Управление памятью


include/linux/gfp. h

83 #define _____ get_free_page(gfp_mask) \

84 __ get_free_pages ( (gfp_itiask), 0)

Макрос__ ge t_dma_pages () указывает, что требуемые страницы будут выделены

из ZONE_DMA с помощью добавления флага к маске флагов страницы. ZONE_DMA указы­вают на порцию памяти, зарезервированную для доступа DMA:

include/linux/gfp. h

86 #define _ get_dma__pages (gfp_mask/ order) \

87 ___ get_free_pages((gfp_mask) | GFP_DMA/(order))


Поделиться:



Популярное:

  1. II. Способ, которым можно получить примирение (7:11-15,28-32).
  2. Анализ заданного диапазона частот 138 - 156,8375 МГц
  3. Бег, которым обычно пользуется Марсель Марсо.
  4. Блокировка файлом robots.txt
  5. ДЕТАЛЬНО РАССМАТРИВАЙТЕ НЕЛЕКАРСТВЕННЫЕ ВМЕШАТЕЛЬСТВА, КОТОРЫМ ПОДВЕРГАЕТСЯ БОЛЬНОЙ
  6. Допустимые уровни электромагнитного излучения радиочастотного диапазона в жилых помещениях (включая балконы и лоджии)
  7. Доходы населения - материальные средства, которыми располагает население для осуществления своих потребностей.
  8. Заголовки классов указывают в общем виде только области, к которым товары и услуги в принципе могут относиться, и не содержат названия конкретных товаров или услуг.
  9. И возненавидел Исав Иакова за благословение, которым благословил его отец его; и сказал Исав в сердце своем: приближаются дни плача по отце моем, и я убью Иакова, брата моего. (Быт. 27:41).
  10. К которым вы так привязаны ?
  11. Каким образом практика вспоминания самого себя может трансформировать человеческий ум?


Последнее изменение этой страницы: 2016-03-25; Просмотров: 801; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.019 с.)
Главная | Случайная страница | Обратная связь