Управление памятью ядра в RSBAC

Rule Set Based Access Control (RSBAC) для Linux. Переводы документации, описаний и статьи по данной теме.

[ALT Linux Team]

Перевод: Александр Блохин  ]

Распределение Памяти

Основные Положения

Для различных задач необходимо распределить области памяти. Особенно в ядре Linux, где пространство стека довольно сильно заполнено, так что часто Вы просто не сможете объявить большую переменную и надеяться, что она сработает.

Обычный способ распределения памяти заключается в использовании kmalloc/kfree при довольно малых количествах (размещенных неразрывно как реальная память) и vmalloc/vfree (виртуальной памяти) при больших размерах. К сожалению, вы сами должны определить какой способ для вас предпочтительнее. kmalloc вызовет ошибку при попытке размещения более чем 128М - так или иначе, доступ к непрерывной памяти на нескольких страницах может быть затруднителен.

Распределение Памяти в RSBAC

Начиная с версии 1.1.2 RSBAC предоставляет собственные функции управления памятью. Также, при включенной поддержке REG, эти функции экспортируются для модулей.

В версиях ядра с 2.4.0 отдельные участки памяти используются как память kmalloc-стиля для предоставления лучшего контроля над использованием памяти через /proc/slabinfo.

  • Все функции определены здесь:

#include <rkmem.h>

  • rsbac_kmalloc функционирует как kmalloc со вторым параметром GFP_KERNEL.

void * rsbac_kmalloc (size_t size);
  

  • rsbac_kfree использован как kfree - проверьте пожалуйста, что вы не вызываете его с неправильными указателями

void rsbac_kfree (const void *objp);
  

  • rsbac_vkmalloc ассигнует через rsbac_kmalloc для малых размеров (до RSBAC_MAX_KMALLOC) и через vmalloc для больших размеров. Когда используется vmalloc, то в *vmalloc_used_p он помещает булевое значение TRUE или FALSE

void * rsbac_vkmalloc 
 (size_t size, boolean * vmalloc_used_p);
  

  • Для высвобождения такой памяти используется rsbac_vkfree. Для получения типа памяти требуется булевое значение vmalloc_used от rsbac_vkmalloc

void rsbac_vkfree (void *objp, boolean vmalloc_used);
  


[Источник ALT Linux Team]

[ опубликовано 22/10/2001 ]

ALT Linux Team - Управление памятью ядра в RSBAC   Версия для печати