Функции работы с памятью
Функции работы с памятью
Из всего вышеизложенного нужно выделить основные моменты:
- системное адресное пространство (верхние 2 Гб) и пользовательское адресное пространство (нижние 2 Гб):
- Системное адресное пространство всегда одинаково, вне зависимости от текущего контекста памяти.
- Пользовательское адресное пространство разное для каждого контекста памяти.
- 2. Код пользовательского режима и режима ядра пользуется для доступа к памяти разными селекторами:
- Для одного контекста памяти селекторы адресуют одну и ту же физическую память, но с разными режимами доступа.
- Селекторы не имеют ничего общего с контекстом памяти.
- По селекторам для ядра можно получить доступ (по крайней мере, для чтения) ко всему адресному пространству в данном контексте памяти, а по селекторам для ядра - только для пользовательской области памяти.
- 3. Код в пользовательском адресном пространстве всегда вытесняемый, если не предприняты меры по созданию новой записи в каталоге страниц, указывающих на невытесняемую память.
- 4. Код, работающий на уровне IRQL большем или равном DISPATCH_LEVEL, может использовать только невыгружаемую память (соответственно, сам код должен находиться в невыгружаемой памяти).
- 5. В ОС существуют функции для выполнения любой работы с памятью:
- Выделение/освобождение памяти в выгружаемой/невыгружаемой, кешируемой/некешируемой памяти.
- Преобразование адресов памяти (виртуальный в физический, физический в виртуальный).
- Проверка доступности памяти. Рассмотрим эти функции более подробно.
Содержание раздела