- •Глава 3. Управление памятью и передача данных.
- •§0. Вступление
- •§1. Адресное пространство Регионы в адресном пространстве
- •Передача региону физической памяти
- •Функция резервирования и фиксации страниц виртуальной памяти
- •Функция возврата (освобождение) физической памяти
- •Функция получения информации о текущей системе
- •Функция получения информации о текущем использовании системой физической и виртуальной памяти
- •§2. Непрерывное распределение виртуальной памяти
- •Распределение по разделам
- •Распределение по страницам
- •Распределение по сегментам
- •Выделение памяти под новый раздел
- •1. Выделение первой подходящей области.
- •2. Выделение самой подходящей области.
- •§3. Дискретное распределение виртуальной памяти.
- •Распределение по сегментам
- •Распределение по страницам
- •Странично-сегментное распределение
- •§4. Прием задач с помощью прерываний
- •§5. Проблемы межзадачного взаимодействия
- •2. Необходимо упорядочить доступ нескольких задач к общему ресурсу.
- •4. Необходима синхронизация задачи по времени.
- •1. «Гонки».
- •2. «Тупики» (взаимные блокировки).
- •3. «Инверсия приоритетов».
Алгоритмические основы программной инженерии
Конспекты
Глава 3. Управление памятью и передача данных.
Рекомендуемая и используемая литература
Рихтер Дж. Windows для профессионалов: создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows / Пер. с англ. — 4-е изд. — Спб.: Питер; М.: Издательство «Русская редакция»; 2008. — 720 стр.: ил.
Примечания
Для работоспособности функций требуется подключить заголовочный файл windows.h (С/C++: #include <windows.h>).
§0. Вступление
Каждому процессу выделяется собственное виртуальное адресное пространство.
Для 32-разрядных процессов его размер составляет 4 Гб. Соответственно 32-битный указатель может быть любым числом от 0x00000000 до 0xFFFFFFFF. Всего, таким образом, указатель может принимать 4 294 967 296 значений, что как раз и перекрывает четырехгигабайтовый диапазон.
Для 64-разрядных процессов размер адресного пространства равен 16 экзабайтам, поскольку 64-битный указатель может быть любым числом от 0x00000000 00000000 до 0xFFFFFFFF FFFFFFFF и принимать 18 446 744 073 709 551 616 значений, охватывая диапазон в 16 экзабайтов.
Поскольку каждому процессу отводится закрытое адресное пространство, то, когда в процессе выполняется какой-нибудь поток, он получает доступ только к той памяти, которая принадлежит его процессу. Память, отведенная другим процессам, скрыта от этого потока и недоступна ему.
Пример. Так как адресное пространство процесса закрыто, то процесс A в своем адресном пространстве может хранить какую-то структуру данных по адресу 0x12345678, и одновременно у процесса B по тому же адресу — но уже в его адресном пространстве — может находиться совершенно иная структура данных. Обращаясь к памяти по адресу 0x12345678, потоки, выполняемые в процессе A, получают доступ к структуре данных процесса A. Но, когда по тому же адресу обращаются потоки, выполняемые в процессе B, они получают доступ к структуре данных процесса B. Иначе говоря, потоки процесса A не могут обратиться к структуре данных в адресном пространстве процесса B, и наоборот.
Адресное пространство Ваших программ — виртуальное, а не физическое.
Адресное пространство — всего лишь диапазон адресов памяти. И, прежде чем Вы сможете обратиться к каким-либо данным, не вызвав нарушения доступа, придется спроецировать нужную часть адресного пространства на конкретный участок физической памяти.
Блок управления памятью (англ. memory management unit, MMU) занимается трансляцией адресов виртуальной памяти в адреса физической памяти (то есть управляет виртуальной памятью), также занимается защитой памяти и др.
MMU обычно преобразует номера виртуальных страниц в номера физических страниц используя буфер ассоциативной трансляции (англ. Translation Lookaside Buffer, TLB).
Однако управление виртуальными адресными пространствами, соотнесение физической и виртуальной памяти, а также перемещение фрагментов памяти между основным и вторичным хранилищами выполняет операционная система.
То есть MMU занимается трансляцией адресов, а операционная система формированием таблиц страниц и работой с ними, распределением участков памяти, установкой тех или иных флагов для страниц, а также обработкой ошибок, которые происходят при отсутствии страниц в отображении.