Книга: Разработка ядра Linux
Выделение дескриптора памяти
Выделение дескриптора памяти
Указатель на дескриптор памяти, выделенный для какой-либо задачи, хранится в поле mm
дескриптора процесса этой задачи. Следовательно, выражение current->mm
позволяет получить дескриптор памяти текущего процесса. Функция copy_mm()
используется для копирования дескриптора родительского процесса в дескриптор порожденного процесса во время выполнения вызова fork()
. Структура mm_struct
выделяется из слябового кэша mm_cachep
с помощью макроса allocate_mm()
. Это реализовано в файле kernel/fork.c
. Обычно каждый процесс получает уникальный экземпляр структуры mm_struct
и соответственно уникальное адресное пространство.
Процесс может использовать одно и то же адресное пространство совместно со своими порожденными процессами, путем указания флага CLONE_VM
при выполнении вызова clone()
. Такие процессы называются потоками. Вспомните из материала главы 3, "Управление процессами", что в операционной системе Linux в этом и состоит единственное существенное отличие между обычными процессами и потоками. Ядро Linux больше никаким другим образом их не различает. Потоки с точки зрения ядра — это обычные процессы, которые просто совместно используют некоторые общие ресурсы.
В случае, когда указан флаг CLONE_VM
, макрос allocate_mm()
не вызывается, а в поле mm дескриптора порожденного процесса записывается значение указателя на дескриптор памяти родительского процесса. Это реализовано с. помощью следующего оператора ветвления в функции сору_mm()
.
if (clone_flags & CLONE_VM) {
/*
* current — это родительский процесс
* tsk — это процесс, порожденный в вызове fork()
*/
atomic_inc(¤t->mm->mm_users);
tsk->mm = current->mm;
}
- 3.2. Выделение памяти
- Выделение дескриптора процесса
- Дескриптор памяти
- 3.2.1.2. Начальное выделение памяти: malloc()
- Неисправности оперативной памяти
- Как работает модуль оперативной памяти
- Описание типов модулей оперативной памяти
- Извлечение и установка модулей памяти
- Характеристики модулей памяти
- ПО для диагностики оперативной памяти
- Поиск и устранение неисправностей модулей памяти
- 2.3.6. Задание объектов физической памяти