Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Архитектура памяти Windows



Архитектура памяти Windows

Цель работы: получение практических навыков по использованию Win 32 API для исследования памяти Windows

Типы памяти

На рис. 2  представлена взаимосвязь виртуального адресного пространства процесса с физической и внешней памятью.

Рис. 2

Физическая память

Физическая память - это реальные микросхемы RAM, установленные в компьютере. Каждый байт физической памяти имеет физический адрес, который представляет собой число от нуля до числа на единицу меньшего, чем количество байтов физической памяти. Например, ПК с установленными 64 Мб RAM, имеет физические адреса &Н00000000-&Н04000000 в шестнадцатеричной системе счисления, что в десятичной системе будет 0-67 108 863.

Физическая память (в отличие от файла подкачки и виртуальной памяти) является исполняемой, то есть памятью, из которой можно читать и в которую центральный процессор может посредством системы команд записывать данные.

Виртуальная память

Виртуальная память (virtual memory) - это просто набор чисел, о которых говорят как о виртуальных адресах. Программист может использовать виртуальные адреса, но Windows не способна по этим адресам непосредственно обращаться к данным, поскольку такой адрес не является адресом реального физического запоминающего устройства, как в случае физических адресов и адресов файла подкачки. Для того чтобы код с виртуальными адресами можно было выполнить, такие адреса должны быть отображены на физические адреса, по которым действительно могут храниться коды и данные. Эту операцию выполняет диспетчер виртуальной памяти (Virtual Memory Manager - VMM). Операционная система Windows обозначает некоторые области виртуальной памяти как области, к которым можно обратиться из программ пользовательского режима. Все остальные области указываются как зарезервированные. Какие области памяти доступны, а какие зарезервированы, зависит от версии операционной системы (Windows 9x или Windows NT).

Страничные блоки памяти

Как известно, наименьший адресуемый блок памяти - байт. Однако самым маленьким блоком памяти, которым оперирует Windows VMM, является страница памяти, называемая также страничным блоком памяти. На компьютерах с процессорами Intel объем страничного блока равен 4 Кб.

Память файла подкачки

Страничный файл, который называется также файлом подкачки,  в Windows находится на жестком диске. Он используется для хранения данных и программ точно так же, как и физическая память, но его объем обычно превышает объем физической памяти. Windows использует файл подкачки (или файлы, их может быть несколько) для хранения информации, которая не помещается в RAM, производя, если нужно, обмен страниц между файлом подкачки и RAM.

Таким образом, диапазон виртуальных адресов скорее согласуется с адресами в файле подкачки, чем с адресами физической памяти. Когда такое согласование достигается, говорят, что виртуальные адреса спроецированы на файл подкачки, или являются проецируемыми на файл подкачки.

Набор виртуальных адресов может проецироваться на физическую память, файл подкачки или любой файл.

Использование адресного пространства в Windows 9 x

На рис. 5 показана общая схема использования адресного пространства процесса в Windows 9x.

Область А

Как следует из рис. 5, Windows 9х резервирует область А, объем которой всего лишь 4 Кб, для того же, что и Windows NT первые 64 Кб памяти, - с целью предупреждения о нулевых указателях. Эта область защищена, и попытка обращения к ней из программы пользовательского режима приводит к ошибке нарушения доступа.

Область В

Данная область памяти используется для поддержания совместимости с приложениями DOS и 16-разрядными приложениями Windows. Несмотря на потенциальную доступность, она не должна использоваться для программирования.

Область С

Область С - это адресное пространство, используемое прикладными программами и их DLL. Здесь размещаются также и модули Windows. Например, если приложению требуется управляющий элемент OCX, его модуль будет находиться в этой области.

Область D

Windows 9х отображает системные DLL Win32 (KERNEL32.DLL, USER32.DLL и т.д.) в это адресное пространство. Данные файлы используются совместно, то есть несколько процессов могут обращаться к единственной копии такого файла в физической памяти.

Область D доступна для программ пользовательского режима (однако размещать их здесь не рекомендуется).

Область Е

Данная область также содержит совместно используемые файлы Windows, такие как исполнительная система Windows и ядро, драйверы виртуальных устройств, файловая система, программы управления памятью.

Она также доступна для программ пользовательского режима.

 

Рис. 5

Защита памяти

Параметр flProtect функции virtualAlloc используется для задания типа защиты от доступа, соответствующего вновь выделенной (committed) виртуальной памяти (это не относится к резервируемой памяти). Существуют следующие методы защиты:

· PAGE_READONLY присваивает доступ «только для чтения» выделенной виртуальной памяти;

· PAGE_READWRITE назначает доступ «чтение-запись» выделенной виртуальной памяти;

· PAGE_WRITECOPY устанавливает доступ «запись копированием» (сору-оnwrite) выделенной виртуальной памяти.

· PAGE_EXECUTE разрешает доступ «выполнение» выделенной виртуальной памяти. Тем не менее, любая попытка чтения - записи этой памяти приведет к нарушению доступа;

· PAGE_EXECUTE_READ назначает доступ «выполнение» и «чтение»;

· PAGE_EXECUTE_READWRITE разрешает доступ «выполнение», «чтение» и «запись»;

· PAGE_EXECUTE_WRITECOPY присваивает доступ «выполнение», «чтение» и «запись копированием»;

· PAGE_NOACCESS запрещает все виды доступа к выделенной виртуальной памяти.

Любые из этих значений, за исключением PAGE_NOACCESS, могут комбинироваться при помощи логического оператора OR со следующими двумя флагами:

· PAGE_GUARD определяет помеченные страницы как защищенные (guard page). При любой попытке обращения к защищенной странице система возбуждает исключительную ситуацию STATUS_GUARD_PAGE и снимает с данной страницы статус защищенной. Таким образом, защищенные страницы предупреждают только о первом обращении к ним;

· PAGE_NOCACHES запрещает кэширование выделенной памяти.

Следует объяснить, что такое доступ «запись копированием». Допустим, некоторая страница физической памяти совместно используется двумя процессами. Если она помечена как «только для чтения», то два процесса без проблем могу совместно пользоваться этой страницей. Однако возможны ситуации, когда каждому процессу требуется разрешить запись в эту память, но без воздействия на другой процесс. После установки защиты «запись копированием» при попытке записи в совместно используемую страницу система создаст ее копию специально для процесса, которому нужно осуществить запись. Таким образом, данная страница перестает быть совместно используемой, а представление ее данных в других процессах остается неизменным.

Необходимо отметить, что атрибуты защиты страницы могут быть изменены с помощью API-функции Virtual Protect.

Пример использования функции GlobalMemoryStatus

API-функция GlobalMemoryStatus, записывающаяся таким образом:

в Delphi:

procedure GlobalMemoryStatus(var lpBuffer: TMemoryStatus); stdcall;

procedure GlobalMemoryStatus; external kernel32 name 'GlobalMemoryStatus';

 

выводит множество данных, имеющих отношение к памяти, в составе следующей структуры:

 

struct_MEMORYSTATUS  {

DWORD dwLength;    // Размер структуры MEMORYSTATUS.

DWORD dwMernoryLoad;  // Процент используемой памяти.

DWORD dwTotalPhys;  // Количество байтов физической памяти.

DWORD dwАvailPhys;  // Количество свободных байтов физической памяти.

DWORD dwTotalPageFile;  // Размер в байтах файла подкачки.

DWORD dwAvailPageFile; // Количество свободных байтов файла подкачки.

DWORD dwTotalVirtual;  // Количество байтов адресного пространства,

                       // доступного пользователю.

DWORD dwAvailvirtual; // Количество свободных байтов памяти,

                       // доступных пользователю.

End Type

В Delphi:

_MEMORYSTATUS = record

dwLength: DWORD;

dwMemoryLoad: DWORD;

dwTotalPhys: DWORD;

dwAvailPhys: DWORD;

dwTotalPageFile: DWORD;

dwAvailPageFile: DWORD;

dwTotalVirtual: DWORD;

dwAvailVirtual: DWORD;

 end;

Рабочие наборы

Каждая страница виртуального адресного пространства процесса объемом 4 Гб существует в одном из трех состояний - свободном (free), зарезервированном (reserved) или переданном (committed). Теперь можно также сказать, что каждая переданная страница (committed page) является или действительной, или недействительной. Совокупность действительных страниц, то есть спроецированных на физическую память, называют рабочим наборам (working set) процесса. Рабочий набор постоянно меняется по мере того, как страницы подкачиваются в память или выполняется обратное действие.

Системный рабочий набор (system working set) характеризует виртуальные страницы системной памяти, которые в данный момент отображены на физическую память.

Размер рабочего набора процесса ограничен теми установками, которые определяет Windows в зависимости от объема физической памяти. Эти значения приведены в следующей таблице.

 

Модель памяти   Объем памяти   Минимальный размер рабочего набора процесса   Максимальный размер рабочего набора процесса  
Small Medium Large   <=19Мб 20-32 Мб >= 33 Мб   20 страниц (80 Кб) 30 страниц(120Кб)  50 страниц (200 Кб)   45 страниц (180 Кб) 145 страниц (580 Кб) 345страниц(1380Кб)  

 

Эти пределы могут быть изменены с помощью API-функции

SetProcessWorkingSetSize:

BOOL SetProcessWorkingSetSize(

HANDLE hProcess,  // Открытый дескриптор интересующего процесса.
    DWORD dwMinimumWorkingSetSize,

                      // Задает мин. размер рабочего набора в байтах.

DWORD dwMaximumWorkingSetSize

                      // Задает максимальный размер рабочего набора в байтах.

);

 

Присвоение каждому из двух параметров размера значения -1 приведет к тому, что функция сожмет размер рабочего набора до 0 и тем самым временно удалит данный процесс из физической памяти.

Действительный размер рабочего набора процесса может изменяться во времени, так как Windows увеличивает рабочий набор, если замечает, что у процесса большое количество страничных промахов.

Пределы размера системного рабочего набора приведены в следующей таблице.

 

Модель памяти  

Объем памяти

 

Минимальный размер рабочего набора процесса

 

Максимальный размер рабочего набора процесса  
 Small Medium Large   <=19Мб 20-32 Мб >= 32 Мб  

388страниц(1,5 Мб)

688 страниц (2,7 Мб)

1188 страниц (4,6 Мб)

 

500 страниц (2,0 Мб)

1150 страниц (4,5 Мб)

2050 страниц (8 Мб)

 

           

Функции работы с кучей

Для работы с кучами используются следующие функции:

· GetProcessHeap возвращает дескриптор кучи процесса по умолчанию;

· GetProcessHeaps возвращает список дескрипторов всех куч, используемых в данный момент процессом;

· HeapAlloc выделяет блок памяти из заданной кучи;

· HeapCompact дефрагментирует кучу, объединяя свободные блоки. Может также освобождать неиспользуемые страницы памяти кучи;

· HeapCreate создает новую кучу в адресном пространстве процесса;

· HeapDestroy удаляет заданную кучу;

· HeapFree освобождает предварительно выделенные блоки памяти кучи;

· HeapLock блокирует кучу, при использовании данной функции только один поток имеет к ней доступ. Другие потоки, запрашивающие доступ, переводятся в состояние ожидания до тех пор, пока поток, владеющий кучей, не разблокирует ее. Это одна из форм синхронизации потоков, то есть тот прием, которым система реализует упорядоченность доступа;

· HeapReAlloc перераспределяет блоки памяти кучи. Используется для изменения размера блока;

· Heapsize возвращает размер выделенного блока памяти кучи;

· HeapUnlock разблокирует кучу, которая до этого была заблокирована функцией HeapLock ;

· HeapValidate проверяет пригодность кучи (или отдельного ее блока), если имеются ли какие-либо повреждения;

· HeapWalk позволяет программисту просматривать содержимое кучи. Обычно используется при отладке.

СОДЕРЖАНИЕ ОТЧЕТА

1. Наименование лабораторной работы, ее цель.

 

2. Разработанное программное обеспечение для приложения, которое:

 

§ выдает информацию, получаемую при использовании API GlobalMemoryStatus. При выводе информации использовать диаграммы.

 

§ Составляет карту виртуальной памяти для любого процесса.

 

 

3. Примеры разработанных приложений (результаты и тексты программ).

 

Архитектура памяти Windows


Поделиться:



Последнее изменение этой страницы: 2019-03-20; Просмотров: 126; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.075 с.)
Главная | Случайная страница | Обратная связь