Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АОПИ. Старое / АОПИ. Глава 3. Конспекты (06_06_19).rtf
Скачиваний:
62
Добавлен:
10.09.2019
Размер:
201.15 Кб
Скачать

Алгоритмические основы программной инженерии

Конспекты

Глава 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 занимается трансляцией адресов, а операционная система формированием таблиц страниц и работой с ними, распределением участков памяти, установкой тех или иных флагов для страниц, а также обработкой ошибок, которые происходят при отсутствии страниц в отображении.