The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Краткая справка

Краткая справка

Предыдущая  Содержание  Следующая V*D*V

Функциями и символами, связанными с выделением памяти, являются:

 

#include <linux/slab.h>

void *kmalloc(size_t size, int flags);

void kfree(void *obj);

Наиболее часто используемый интерфейс для выделения памяти.

 

#include <linux/mm.h>

GFP_USER

GFP_KERNEL

GFP_NOFS

GFP_NOIO

GFP_ATOMIC

Флаги, которые контролируют, как выполняется распределение памяти, начиная с наименее для всего ограничительного. GFP_USER и GFP_KERNEL, по порядку, позволяют текущему процессу быть помещённым в сон для удовлетворения запроса. GFP_NOFS и GFP_NOIO запрещают операции с файловой системой и все операции ввода/вывода соответственно, а выделение памяти с GFP_ATOMIC совсем не может спать.

__GFP_DMA

__GFP_HIGHMEM

__GFP_COLD

__GFP_NOWARN

__GFP_HIGH

__GFP_REPEAT

__GFP_NOFAIL

__GFP_NORETRY

Эти флаги изменяют поведение ядра при выделении памяти.

 

#include <linux/malloc.h>

kmem_cache_t *kmem_cache_create(char *name, size_t size, size_t offset,

                            unsigned long flags, constructor( ), destructor( ));

int kmem_cache_destroy(kmem_cache_t *cache);

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

SLAB_NO_REAP

SLAB_HWCACHE_ALIGN

SLAB_CACHE_DMA

Флаги, которые могут быть указаны при создании кэша.

SLAB_CTOR_ATOMIC

SLAB_CTOR_CONSTRUCTOR

Флаги, которые распределитель может передать в функции конструктора и деструктора.

void *kmem_cache_alloc(kmem_cache_t *cache, int flags);

void kmem_cache_free(kmem_cache_t *cache, const void *obj);

Выделяет и освобождает память для одного объекта из кэша.

 

/proc/slabinfo

Виртуальный файл, содержащий статистические данные об использовании кускового кэша.

 

#include <linux/mempool.h>

mempool_t *mempool_create(int min_nr, mempool_alloc_t *alloc_fn, mempool_free_t *free_fn, void *data);

void mempool_destroy(mempool_t *pool);

Функции для создания пулов памяти, которые пытаются избежать неудач при выделении памяти, сохраняя "чрезвычайный список" выделенных объектов.

void *mempool_alloc(mempool_t *pool, int gfp_mask);

void mempool_free(void *element, mempool_t *pool);

Функции для выделения объектов из (и их возвращения в) пулов памяти.

unsigned long get_zeroed_page(int flags);

unsigned long __get_free_page(int flags);

unsigned long __get_free_pages(int flags, unsigned long order);

Странично-ориентированные функции выделения памяти. get_zeroed_page возвращает единственную, обнулённую страницу. Все другие варианты вызова не инициализируют содержимое возвращаемой страниц(ы).

int get_order(unsigned long size);

Возвращает порядок (order) выделения, связанный с размером в текущей платформы в соответствии с PAGE_SIZE. Аргумент должен быть степенью двойки и возвращаемое значение по крайней мере 0.

void free_page(unsigned long addr);

void free_pages(unsigned long addr, unsigned long order);

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

struct page *alloc_pages_node(int nid, unsigned int flags, unsigned int order);

struct page *alloc_pages(unsigned int flags, unsigned int order);

struct page *alloc_page(unsigned int flags);

Все варианты самого низкоуровнего распределителя страниц в ядре Linux.

void __free_page(struct page *page);

void __free_pages(struct page *page, unsigned int order);

void free_hot_page(struct page *page);

void free_cold_page(struct page *page);

Различные способы освобождения страниц, выделенных одной из форм alloc_page.

 

#include <linux/vmalloc.h>

void * vmalloc(unsigned long size);

void vfree(void * addr);

 

#include <asm/io.h>

void * ioremap(unsigned long offset, unsigned long size);

void iounmap(void *addr);

Функции, которые выделяют или освобождают непрерывное виртуальное адресное пространство. ioremap адресует физическую память с помощью виртуальных адресов, а vmalloc выделяет свободные страницы. Области, связанные с ioremap, освобождаются iounmap, а страницы, полученные vmalloc, освобождаются vfree.

 

#include <linux/percpu.h>

DEFINE_PER_CPU(type, name);

DECLARE_PER_CPU(type, name);

Макросы, которые определяют и декларируют по-процессорные переменные.

per_cpu(variable, int cpu_id)

get_cpu_var(variable)

put_cpu_var(variable)

Макросы, которые обеспечивают доступ к статически объявленным по-процессорным переменным.

void *alloc_percpu(type);

void *__alloc_percpu(size_t size, size_t align);

void free_percpu(void *variable);

Функции, которые выполняют выделение и освобождение во время работы с по-процессорными переменными.

int get_cpu( );

void put_cpu( );

per_cpu_ptr(void *variable, int cpu_id)

get_cpu получает ссылку (на переменную) для текущего процессора (следовательно, предотвращает вытеснение и переход к другому процессору) и возвращает идентификатор процессора; put_cpu возвращает эту ссылку (то есть переменную в процессор). Чтобы получить доступ к динамически выделенной по-процессорной переменной, используйте per_cpu_ptr с идентификатором процессора, версия (переменной) которого должна быть доступна. Манипуляции текущей версией по-процессорной переменной должны, вероятно, быть окружены вызовами get_cpu и put_cpu.

 

#include <linux/bootmem.h>

void *alloc_bootmem(unsigned long size);

void *alloc_bootmem_low(unsigned long size);

void *alloc_bootmem_pages(unsigned long size);

void *alloc_bootmem_low_pages(unsigned long size);

void free_bootmem(unsigned long addr, unsigned long size);

Функции (которые могут быть использованы только драйверами непосредственно встроенными в ядро), которые осуществляют выделение и освобождение памяти во время начальной загрузки системы.

 

Предыдущая  Содержание  Следующая