- Глава 14 Адресное пространство процесса
- Читайте также
- Отображение файла на адресное пространство процесса
- Адресное пространство процесса
- ГЛАВА 2. ПЯТЬ УРОВНЕЙ ЗРЕЛОСТИ ПРОИЗВОДСТВЕННОГО ПРОЦЕССА
- Глава 15 Пространство и компоновка чертежа
- Пространство модели и пространство листа
- ГЛАВА 16. Пространство имен System.IO
- Глава 10. Размер области процесса сканирования
- Глава 11. Скорость процесса сканирования
- Глава 15 Пространство и компоновка чертежа
- Пространство модели и пространство листа
- Глава 15 Пространство и компоновка чертежа
- Пространство модели и пространство листа
- Глава 12 Пространство и компоновка чертежа
- Пространство модели и пространство листа
- Русские Блоги
- «Проектирование и реализация ядра Linux» Примечания к чтению (15) — Адресное пространство процесса (ядро 2.6.32.60)
- 1. Адресное пространство (mm_struct)
- 1.1 Введение в mm_struct
- 1.2 mm_struct операция
- 2. Область виртуальной памяти (VMA)
- 2.1 Введение в VMA
- 2.2 Работа VMA
Глава 14 Адресное пространство процесса
Адресное пространство процесса
В главе 11, «Управление памятью», было рассказано о том, как ядро управляет физической памятью. В дополнение к тому, что ядро должно управлять своей памятью, оно также должно, управлять и адресным пространством процессов — тем, как память видится для каждого процесса в системе. Операционная система Linux — это операционная система с виртуальной памятью (virtual memory operating system), т.е. для всех процессов выполняется виртуализация ресурсов памяти. Для каждого процесса создается иллюзия того, что он один использует всю физическую память в системе. Еще более важно, что адресное пространство процессов может быть даже значительно больше объема физической памяти. В этой главе рассказывается о том, как ядро управляет адресным пространством процесса.
Адресное пространство процесса состоит из диапазона адресов, которые выделены процессу, и, что более важно, в этом диапазоне выделяются адреса, которые процесс может так или иначе использовать. Каждому процессу выделяется «плоское» 32- или 64-битовое адресное пространство. Термин «плоское» обозначает, что адресное пространство состоит из одного диапазона адресов (например, 32-разрядное адресное пространство занимает диапазон адресов от 0 до 429496729). Некоторые операционные системы предоставляют сегментированное адресное пространство — адресное пространство состоит больше чем из одного диапазона адресов, т.е. состоит из сегментов. Современные операционные системы обычно предоставляют плоское адресное пространство. Размер адресного пространства зависит от аппаратной платформы. Обычно для каждого процесса существует свое адресное пространство. Адрес памяти в адресном пространстве одного процесса не имеет никакого отношения к такому же адресу памяти в адресном пространстве другого процесса. Тем не менее несколько процессов могут совместно использовать одно общее адресное пространство. Такие процессы называются потоками.
Значение адреса памяти — это заданное значение из диапазона адресов адресного пространства, как, например, 41021f000. Это значение идентифицирует определенный байт в 32-битовом адресном пространстве. Важной частью адресного пространства являются интервалы адресов памяти, к которым процесс имеет право доступа, как, например, 08048000–0804c000. Такие интервалы разрешенных адресов называются областями памяти (memory area). С помощью ядра процесс может динамически добавлять и удалять области памяти своего адресного пространства.
Процесс имеет право доступа только к действительным областям памяти. Более того, на область памяти могут быть установлены права только для чтения или запрет на выполнение. Если процесс обращается к адресу памяти, который не находится в действительной области памяти, или доступ к действительной области выполняется запрещенным образом, то ядро уничтожает процесс с ужасным сообщением «Segmentation Fault» (ошибка сегментации).
Области памяти могут содержать следующую нужную информацию.
• Отображение выполняемого кода из выполняемого файла в область памяти процесса, которая называется сегментом кода (text section).
• Отображение инициализированных переменных из выполняемого файла в область памяти процесса, которая называется сегментом данных (data section).
• Отображение страницы памяти, заполненной нулями, в область памяти процесса, которая содержит неинициализированные глобальные переменные и называется сегментом bss[79] (bss section). Нулевая страница памяти (zero page, страница памяти, заполненная нулями) — это страница памяти, которая полностью заполнена нулевыми значениями и используется, например, для указанной выше цели.
• Отображение страницы памяти, заполненной нулями, в память процесса, которая используется в качестве стека процесса пространства пользователя (не нужно путать со стеком процесса в пространстве ядра, который является отдельной структурой данных и управляется и используется ядром).
• Дополнительные сегменты кода, данных и BSS каждой совместно используемой библиотеки, таких как библиотека libc и динамический компоновщик, которые загружаются в адресное пространство процесса.
• Все файлы, содержимое которых отображено в память.
• Все области совместно используемой памяти.
• Все анонимные отображения в память, как, например, связанные с функцией malloc()[80].
Каждое действительное значение адреса памяти в адресном пространстве процесса принадлежит только и только одной области памяти (области памяти не перекрываются). Как будет показано, для каждого отдельного участка памяти в выполняющемся процессе существует своя область: стек, объектный код, глобальные переменные, отображенный в память файл и т.д.
Читайте также
Отображение файла на адресное пространство процесса
Отображение файла на адресное пространство процесса Следующим шагом является распределение виртуального адресного пространства и отображение на него файла с использованием объекта отображения. С точки зрения программиста этот процесс распределения памяти
Адресное пространство процесса
Адресное пространство процесса Адресное пространство ядра обычно совпадает с адресным пространством выполняющегося в данный момент процесса. В этом случае говорят, что ядро расположено в том же контексте, что и процесс. Каждый раз, когда процессу передаются
ГЛАВА 2. ПЯТЬ УРОВНЕЙ ЗРЕЛОСТИ ПРОИЗВОДСТВЕННОГО ПРОЦЕССА
ГЛАВА 2. ПЯТЬ УРОВНЕЙ ЗРЕЛОСТИ ПРОИЗВОДСТВЕННОГО ПРОЦЕССА Постоянное совершенствование производственного процесса основано на многих небольших эволюционных шагах, а не на революционных нововведениях [Imai 86]. CMM предоставляет концептуальную структуру, организующую эти
Глава 15 Пространство и компоновка чертежа
Глава 15 Пространство и компоновка чертежа Формирование в AutoCAD модели объекта, в том числе трехмерной, обычно не является самоцелью. Это делается для дальнейшего использования такой модели в системах прочностных расчетов и кинематического моделирования, при получении
Пространство модели и пространство листа
Пространство модели и пространство листа Пространство модели (Model Space) – это пространство AutoCAD, где формируются модели объектов как при двумерном, так и при трехмерном моделировании. О том, что в окне AutoCAD на текущий момент установлено пространство модели, говорят
ГЛАВА 16. Пространство имен System.IO
ГЛАВА 16. Пространство имен System.IO При создании полноценных приложений исключительно важна возможность сохранения информации между сеансами доступа пользователя. В этой главе рассматривается целый ряд вопросов, связанных с реализацией ввода-вывода в .NET. Первой нашей
Глава 10. Размер области процесса сканирования
Глава 10. Размер области процесса сканирования Этот параметр определяет максимальные размеры документа, который вы имеете возможность считать с помощью данного сканера. Некоторые младшие модели планшетных сканеров позволяют обрабатывать листы формата Legal (8,5 х 14 дюймов,
Глава 11. Скорость процесса сканирования
Глава 11. Скорость процесса сканирования Общее быстродействие сканера зависит от большого количества разнообразных факторов: характеристик механизма сканера, производительности компьютера, быстродействия используемых программ, текущего разрешения и глубины цвета.
Глава 15 Пространство и компоновка чертежа
Глава 15 Пространство и компоновка чертежа Формирование в AutoCAD модели объекта, в том числе трехмерной, обычно не является самоцелью. Это делается для дальнейшего использования такой модели в системах прочностных расчетов и кинематического моделирования, при получении
Пространство модели и пространство листа
Пространство модели и пространство листа Пространство модели (Model Space) – это пространство AutoCAD, где формируются модели объектов как при двумерном, так и при трехмерном моделировании. О том, что в окне AutoCAD на текущий момент установлено пространство модели, говорят
Глава 15 Пространство и компоновка чертежа
Глава 15 Пространство и компоновка чертежа Пространство модели и пространство листа Мастер компоновки листа Работа с листами Вставка листа с помощью Центра управления AutoCAD Видовые экраны Именованные виды Неперекрывающиеся видовые экраны Создание нескольких видовых
Пространство модели и пространство листа
Пространство модели и пространство листа Пространство модели (Model Space) – это пространство AutoCAD, где формируются модели объектов как при двумерном, так и при трехмерном моделировании. О том, что в окне AutoCAD на текущий момент установлено пространство модели, говорят
Глава 12 Пространство и компоновка чертежа
Глава 12 Пространство и компоновка чертежа Формирование в AutoCAD модели объекта, в том числе трехмерной, обычно не является самоцелью. Это делается для дальнейшего использования такой модели в системах прочностных расчетов и кинематического моделирования, при получении
Пространство модели и пространство листа
Пространство модели и пространство листа Пространство модели (Model Space) – это пространство AutoCAD, где формируются модели объектов как при двумерном, так и при трехмерном моделировании. О том, что в окне AutoCAD на текущий момент установлено пространство модели, говорят
Источник
Русские Блоги
«Проектирование и реализация ядра Linux» Примечания к чтению (15) — Адресное пространство процесса (ядро 2.6.32.60)
Адресное пространство процесса — это память, используемая каждым процессом.Управление адресным пространством процесса ядром — это также управление памятью программ пользовательского режима.
основное содержание :
- Адресное пространство (mm_struct)
- Область виртуальной памяти (VMA)
- Адресное пространство и таблица страниц
1. Адресное пространство (mm_struct)
Адресное пространство — это диапазон адресов памяти, к которым может получить доступ каждый процесс.
Этот диапазон адресов не настоящий, это диапазон виртуальных адресов, который иногда даже превышает размер реальной физической памяти.
Процессы в современных операционных системах работают в защищенном режиме. Адресное пространство фактически представляет собой непрерывное пространство виртуальной памяти, используемое операционной системой для процесса.
В конечном итоге адресное пространство будет отображено в физическую память через таблицу страниц, поскольку ядро работает с физической памятью.
Хотя диапазон адресного пространства велик, процесс не обязательно имеет разрешение на доступ ко всему адресному пространству (обычно он может получить доступ только к некоторым диапазонам адресов в адресном пространстве).
Те диапазоны адресов, к которым имеет доступ процесс, также называются областями памяти.
Если процесс обращается к содержимому за пределами эффективной области памяти, он сообщает сообщение «ошибка сегмента».
Область памяти в основном содержит следующую информацию:
- -Code раздел (текстовый раздел), вы можете выполнить отображение памяти кода файла
- -Data section (раздел данных), вы можете выполнить отображение памяти инициализированных глобальных переменных файла
- -Нулевая страница сегмента bss (информация о странице — это все значения 0), то есть карта памяти неинициализированных глобальных переменных
- Отображение памяти нулевой страницы стека пользовательского пространства процесса
- Отображение памяти сегмента кода, сегмента данных и сегмента bss разделяемых библиотек, таких как библиотека C или библиотека динамической компоновки, используемая процессом
- -Любой файл с отображением памяти
- -Любой сегмент разделяемой памяти
- -Любое анонимное отображение памяти, например, память, выделенная malloc ()
Заметка :bssЭто сокращение от блока, начинающегося с символа.
Понятия, связанные с памятью в Linux, были немного разобраны для справки:
английский
имея в виду
1.1 Введение в mm_struct
Адресное пространство в Linux представлено mm_struct.
Некоторые из ключевых атрибутов аннотируются ниже, и я мало что знаю о некоторых из них .
Дополнительное примечание 1: Среди вышеперечисленных атрибутов можно легко спутать mm_users и mm_count, вот специальное объяснение: (Следующий контент ищется в Интернете, и я сам это понимаю)
mm_users легче понять, то есть сколько раз на mm_struct ссылаются процессы (потоки) пользовательского пространства.
Если в процессе A создаются 3 новых потока, то mm_users = 4 в соответствующей mm_struct процесса A (вызовите поток A в это время)
Чтобы добавить, почти нет разницы между процессом и потоком в Linux, то есть, разделяет ли он адресное пространство процесса, разделяемое адресное пространство процесса — это поток, и наоборот — процесс.
Следовательно, если дочерний процесс и родительский процесс совместно используют адресное пространство процесса, то родительский и дочерний процессы можно рассматривать как потоки. Если родительский и дочерний процессы не разделяют адресное пространство процесса, есть два процесса
mm_count немного запутан, на самом деле он записывает фактическое количество ссылок mm_struct.
Проще говоря, когда mm_users = 0, эта mm_struct не может быть освобождена. Только когда mm_count = 0, mm_struct может быть освобожден
Как видно из приведенного выше объяснения, не только процесс (поток) пользовательского пространства может ссылаться на mm_struct.
Когда mm_users> 0, mm_count увеличится на 1, показывая, что процесс (поток) пользовательского пространства использует mm_struct. Независимо от того, сколько пользовательских процессов (потоков) используют mm_struct, mm_count увеличивается только на 1.
Другими словами, если только один процесс использует mm_struct, тогда mm_users = 1 и mm_count также 1.
Если есть 9 потоков, использующих mm_struct, тогда mm_users = 9 и mm_count по-прежнему 1.
Так когда же mm_count будет больше 1?
Когда поток ядра использует mm_struct, mm_count увеличивается на 1.
Есть и другие причины, по которым потоки ядра используют пользовательское пространство mm_struct, которые будут объяснены позже. Сначала знайте, что когда поток ядра использует mm_struct, это также приводит к увеличению mm_count на 1.
Mm_count необходим в следующих ситуациях:
- -Процесс A запускается и применяется для mm_struct, в это время mm_users = 1, mm_count = 1
- -2 новых потока создаются в процессе A, в это время mm_users = 3, mm_count = 1
- -Происходит планирование ядра, процесс A и связанные потоки приостанавливаются, поток ядра B использует mm_struct, запрошенный процессом A, в это время mm_users = 3, mm_count = 2
- -Другое ядро ЦП планирует процесс A и его потоки и завершает все операции процесса A и его потоков, то есть процесс A завершается. В это время mm_users = 0, mm_count = 1
- Здесь вы можете увидеть полезность mm_count. Если есть только mm_users, mm_users = 0 освободит mm_struct, что может вызвать сбой в потоке ядра B.
- -Kernel thread B завершается после завершения выполнения, в это время mm_users = 0, mm_count = 0, mm_struct можно безопасно освободить
Дополнение 2 : Почему поток ядра использует mm_struct в пользовательском пространстве?
Для Linux как пользовательские процессы, так и потоки ядра являются экземплярами task_struct,
Единственное отличие состоит в том, что поток ядра не имеет адресного пространства процесса (адресного пространства ядра, используемого потоком ядра), а дескриптор mm потока ядра имеет значение NULL, то есть поле tsk-> mm потока ядра пустое (NULL).
Когда планировщик ядра находится в контексте процесса, он определяет, является ли планируемый процесс пользовательским процессом или потоком ядра в соответствии с tsk-> mm.
Но хотя потоку ядра не требуется доступ к адресному пространству пользовательского процесса, ему по-прежнему нужна таблица страниц для доступа к собственному пространству ядра.
Для любого пользовательского процесса пространство ядра на 100% одинаково, поэтому ядро будет заимствовать таблицу страниц в mm_struct последнего вызванного пользовательского процесса для доступа к адресу ядра. Эта mm_struct записывается в active_mm.
Вкратце, для потока ядра tsk-> mm == NULL представляет идентификатор потока ядра, а tsk-> active_mm заимствует mm_struct предыдущего пользовательского процесса и использует таблицу страниц mm_struct для доступа к пространству ядра.
Для пользовательских процессов tsk-> mm == tsk-> active_mm.
Дополнение 3 : В дополнение к mm_users и mm_count существуют mmap и mm_rb, которые необходимо объяснить следующим образом:
Фактически, и mmap, и mm_rb хранят все области памяти (VMA) в адресном пространстве процесса: первая хранится в виде связного списка, а вторая — в виде красно-черного дерева.
Организация одних и тех же данных с двумя структурами данных способствует эффективной работе VMA.
1.2 mm_struct операция
1. Выделите адресное пространство процесса.
Справка kernel/fork.cМакро вallocate_mm
Фактически, когда адресное пространство процесса выделяется, оно выделяется из кэша slab. Вы можете проверить кеш mm_struct через / proc / slabinfo
2. Адресное пространство процесса отзыва.
Справкаkernel/exit.cФункция exit_mm () в
Эта функция вызовет функцию mmput () для уменьшения значения mm_users,
Когда mm_users = 0, вызовите функцию mmdropo (), чтобы уменьшить значение mm_count,
Если mm_count = 0, вызовите макрос free_mm и верните mm_struct в кэш slab.
3. Просмотрите память, занятую процессом:
2. Область виртуальной памяти (VMA)
Область памяти также называется областью виртуальной памяти (VMA) в Linux, которая на самом деле представляет собой непрерывный диапазон памяти в адресном пространстве процесса.
2.1 Введение в VMA
Определение VMA также В
Комментарии на английском к каждому полю этой структуры более подробны, поэтому я не буду переводить их один за другим.
Vm_flags в приведенном выше атрибуте определяет влияние этой виртуальной машины на VMA и страницы:
Для определения макроса vm_flags см.
Знак
Влияние на VMA и его страницы
2.2 Работа VMA
В определении структуры vm_area_struct есть атрибут vm_ops, который определяет, как ядро работает с VMA.
В дополнение к вышеуказанным операциям есть некоторые вспомогательные функции, которые позволяют ядру манипулировать областью памяти.
Эти вспомогательные функции могут использоваться в Найти в
Источник