Содержание
- 2. Работа приложений с виртуальной памятью Резервирование и выделение памяти производится блоками. Начальный адрес блока должен быть
- 3. Функции API для работы виртуальной памятью VirtualAlloc VirtualAllocEx VirtualFree VirtualFreeEx VirtualLock VirtualUnlock VirtualProtect VirtualProtectEx
- 4. Функции API для работы виртуальной памятью Для резервирования региона памяти в адресном пространстве процесса или выделения
- 5. Функции API для работы с ВП: VirtualAlloc LPVOID VirtualAlloc ( // адрес, по которому надо зарезервировать
- 6. Функции API для работы с ВП: VirtualAllocEx LPVOID VirtualAllocEx ( // дескриптор процесса HANDLE hProcess, //
- 7. Функции API для работы с ВП: VirtualAlloc Параметр flAllocationType может принимать следующие значения: MEM_RESERVE - резервирует
- 8. Функции API для работы с ВП: VirtualAlloc Параметр flProtect - тип защиты доступа выделяемого региона: PAGE_READONLY
- 9. Функции API для работы ВП: VirtualFree BOOL VirtualFree ( // адрес региона, который надо освободить LPVOID
- 10. Функции API для работы ВП: VirtualFree dwSize – размер, если мы будем использовать тип освобождения, как
- 11. Функции API для работы ВП: VirtualFreeEx BOOL VirtualFreeEx ( // дескриптор процесса HANDLE hProcess, // адрес
- 12. Функции API для работы ВП: VirtualProtect и VirtualProtectEx Для изменения атрибутов защиты регионов используются функции VirtualProtect
- 13. Функции API для работы ВП: VirtualProtect и VirtualProtectEx BOOL VirtualProtect ( // адрес региона для установки
- 14. Функции API для работы ВП: VirtualLock и VirtualUnlock Функция VirtualLock() позволят предотвратить запись памяти на диск.
- 15. Функции API для работы ВП: VirtualQuery и VirtualQueryEx Функции VirtualQuery и VirtualQueryEx позволяют определить статус указанного
- 16. Функции API для работы виртуальной памятью Процессу не разрешается блокировать более 30 страниц. Для настройки рабочего
- 17. Функции API для работы с ВП: SetProcessWorkingSetSize BOOL SetProcessWorkingSetSize ( // дескриптор процесса HANDLE hProcess, //
- 18. Функции API для работы с ВП: SetProcessWorkingSetSize Если и dwMinimumWorkingSetSize и dwMaximumWorkingSetSize имеют значение – (минус)
- 19. Функции API для работы с ВП: SetProcessWorkingSetSize Дескриптор процесса должен иметь права доступа PROCESS_SET_QUOTA. Если значения
- 20. Получение справочной информации по ВП процесса GetProcessWorkingSetSize – получение текущих значений минимального и максимального размера рабочего
- 21. Архитектура памяти в Win32 API Организация «динамической» виртуальной памяти
- 22. «Кучи» (heaps) Кучи (heaps) – это динамически распределяемые области данных. При порождении процесса ему предоставляется куча
- 23. Функции создания и использования «куч» HANDLE GetProcessHeap (VOID ) – для получения дескриптора кучи по умолчанию;
- 24. Создание дополнительных «куч» для повышения эффективности управления памятью; для уменьшения рабочего множества процесса ; для повышения
- 25. Повышение эффективности управления памятью В системах со страничной организацией отсутствует проблема фрагментации физической памяти. Однако существует
- 26. Уменьшение рабочего множества процесса В соответствии с принципом локальности, работа с разными структурами, чаще всего, происходит
- 27. Создание и уничтожение «кучи» HANDLE HeapCreate ( DWORD dwFlags, DWORD dwInitialSize, DWORD dwMaximumSize ); BOOL HeapDestroy
- 28. Создание «кучи» - dwFlags HEAP_GENERATE_EXCEPTIONS – указывает системе на то, что в случае возникновения ошибки необходимо
- 29. Дополнительные возможности по управлению «кучами» UINT HeapCompact (HANDLE hHeap, DWORD fdwFlags); BOOL HeapLock (HANDLE hHeap); BOOL
- 30. Архитектура памяти в Win32 API Файлы, проецируемые в память
- 31. Проецируемые файлы “Как и виртуальная память, проецируемые файлы позволяют резервировать регион адресного пространства и передавать ему
- 32. Проецируемые файлы Файлы, проецируемые (отображаемые) в память, - это один из самых замечательных сервисов, которые Win32
- 33. Применение проецируемых файлов Для запуска исполняемых файлов (EXE) и динамически связываемых библиотек (DLL). Для работы с
- 34. Запуск процесса Создать виртуальное адресное пространство процесса (размером 4Gb). Резервировать в ВАП регион размером, достаточным для
- 35. Запуск EXE-файлов и DLL-библиотек
- 36. Одновременное использование одной области данных двумя процессами
- 37. Файлы данных, проецируемые в память Проецирование файла данных в память: Создается объект ядра “файл”. Для создания
- 38. Обеспечение когерентности Если один процесс меняет разделяемую область данных, то она меняется и для другого процесса.
- 39. Создание объекта «проецируемый файл» HANDLE CreateFileMapping ( // дескриптор файла HANDLE hFile, // атрибуты защиты объекта
- 40. Открытие объекта «проецируемый файл» HANDLE OpenFileMapping ( // режим доступа DWORD dwDesiredAccess, // флажок наследования BOOL
- 41. Функция проецирования области LPVOID MapViewOfFile ( // дескриптор объекта проецируемый файл HANDLE hFileMappingObject, // режим доступа
- 42. Функция проецирования области по определенному адресу LPVOID MapViewOfFileEx ( // дескриптор отображаемого объекта HANDLE hFileMappingObject, //
- 43. Параметр dwDesiredAccess Параметр dwDesiredAccess определяет требуемый режим доступа для страниц ВП, используемых для отображения: FILE_MAP_WRITE –
- 44. Функция отмены проецирования области BOOL UnmapViewOfFile ( // начальный адрес LPCVOID lpBaseAddress );
- 45. Создание и использование проецируемых файлов Общий механизм таков: один процесс создает объект “проецируемый файл” с помощью
- 46. Взаимодействие процессов через общую область данных Для обеспечения когерентности процессы должны работать с одним объектом “проецируемый
- 47. Использование файла подкачки Общая область данных может быть создана не только путем проецирования файла, но и
- 48. Пример работы с проецированным файлом HANDLE hFile, hFileMapping; PVOID pMassive; hFile = CreateFile( “File Name”, ...
- 49. Архитектура памяти в Win32 API Доступ к ВП другого процесса
- 50. Доступ к ВП другого процесса Мы говорили о том, что менеджер ВП изолирует ВАП процессов для
- 51. Функции ReadProcessMemory и WriteProcessMemory ReadProcessMemory – читает данные из области памяти в заданном процессе. WriteProcessMemory –
- 52. Функции ReadProcessMemory и WriteProcessMemory BOOL WriteProcessMemory ( HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T*
- 53. Функции ReadProcessMemory и WriteProcessMemory BOOL ReadProcessMemory( HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T* lpNumberOfBytesRead
- 54. Архитектура памяти в Win32 API Локальная память потока (TLS)
- 55. Локальная память потока (TLS) Для решения ситуаций, когда есть данные, которые должны быть связаны индивидуально с
- 56. Назначение TLS Например, пусть процесс владеет некоторым массивом. Каждый элемент массива вместе с его содержимым соответствует
- 57. Виды TLS динамическая TLS: размер ячейки локальных данных – 4 байт количество локальных данных – ограничено
- 58. Динамическая TLS Каждому потоку выделяется определенное количество ячеек размером 4 байта. Количество ячеек зависит от версии
- 59. Функции для работы с динамической TLS: TlsAlloc Итак, чтобы получить 4-х байтную ячейку, мы вызываем функцию
- 60. Функции для работы с динамической TLS: TlsSetValue и TlsGetValue BOOL TlsSetValue( // TLS index to set
- 61. Функции для работы с динамической TLS: TlsSetValue и TlsGetValue Функция TlsSetValue устанавливает значение в ячейке с
- 62. Статическая TLS Статическая локальная память позволяет хранить данные любого фиксированного размера. Статическая локальная память потока опирается
- 63. Статическая TLS Так, компилятор Microsoft VC++ позволяет использовать следующий синтаксис для создания переменной специфичной для потока:
- 64. Объявление переменной в статической TLS Переменная, указываемая за __declspec(thread), должна быть либо глобальной, либо статической внутри
- 66. Скачать презентацию