89209

УПРАВЛЕНИЕ ПАМЯТЬЮ В WINDOWS

Лабораторная работа

Информатика, кибернетика и программирование

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

Русский

2015-05-10

56.92 KB

7 чел.

9

БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Факультет информационных технологий и робототехники

Кафедра «Программное обеспечение вычислительной техники и автоматизированных систем»

О Т Ч Е Т

по лабораторной работе №3

Дисциплина

«Операционные системы и системное программирование»

Тема

«УПРАВЛЕНИЕ ПАМЯТЬЮ В WINDOWS»

Выполнил: студент гр. 107312 Старовойтов П.С.

Проверил: Разорёнов Н.А.

МИНСК 2015

1. Цель работы

Изучить основы распределения и управления памятью в Windows.

2. Изучаемые вопросы

1. Виртуальное адресное пространство:

a. Виртуальное адресное пространство и физическая память.

b. Состояние страниц.

c. Атрибуты защиты.

d. Границы выделения памяти.

e. Регионы в адресном пространстве.

2. Работа с виртуальной памятью:

a. Выделение памяти.

b. Освобождение памяти.

c. Изменение атрибутов защиты.

d. Блокировка физической памяти RAM.

e. Стек потока.

3. Кучи.

4. Стандартные библиотечные функции языка С.

3. Постановка задачи

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

1. Статически распределяемой.

2. Стековой памяти.

3. Динамически распределяемой памяти.

4. Регионов виртуальной памяти.

4. Ход выполнения работы

Виртуальное адресное пространство:

4.1. Виртуальное адресное пространство и физическая память.

Всем процессам в операционной системе Windows предоставляется важнейший ресурс – виртуальная память (virtual memory). Все данные, с которыми процессы непосредственно работают, хранятся именно в виртуальной памяти. Виртуальное адресное пространство каждого процесса значительно больше всей физической памяти, доступной для всех процессов. Общий объем памяти, доступной для всех исполняемых процессов, является суммой физической памяти и свободного места на диске, доступного для файла подкачки (paging file) – файла на диске, используемого для увеличения объема физической памяти. Реальная физическая память и виртуальное адресное пространство для каждого процесса организованны в страницы (pages) – модули памяти, чей размер зависит от процессора.

 4.2. Состояние страниц.

Страницы виртуального адресного пространства процессов могут находиться в одном из трех состояний:

  1.  свободное (free) – свободная страница в данный момент не доступна, но ей можно передать физическую память или зарезервировать;
  2.  зарезервированное (reserved) – зарезервированная страница – это блок виртуального адресного пространства процесса, который был зарезервирован для более позднего использования.
  3.  фиксированное (committed) – фиксированная страница – это такая страница, для которой выделена физическая память (в ОЗУ или на диске). Она может быть защищена от доступа других процессов, может быть доступна только для чтения или для чтения и записи.

 switch(mbs.State)

  {

   case MEM_COMMIT:

    y+=sprintf(buff+y,"  COMMIT ");break;

   case MEM_FREE:

    y+=sprintf(buff+y," FREE   ");break;

   case MEM_RESERVE:

    y+=sprintf(buff+y,"  RESERVE");break;

   default:

    y+=sprintf(buff+y,"  UNKNOWN");break;

  }

4.3. Атрибуты защиты.

Все процессоры, поддерживаемые Windows, предоставляют ту или иную форму аппаратной защиты памяти (например доступ для чтения и записи, только для чтения и т. д.); конкретные механизмы такой защиты зависят от архитектуры процессора. Скажем, страницы кода в адресном пространстве процесса помечаются атрибутом «только для чтения», что защищает их от изменения пользовательскими потоками. Отдельным страницам физической памяти, выделяемым функцией VirtualAlloc, можно определить атрибуты защиты.

MEMORY_BASIC_INFORMATION mbs;

VirtualQuery(p,&mbs,sizeof(mbs));

switch(mbs.Protect)

{

case PAGE_EXECUTE:

SendDlgItemMessage(hDlg, IDC_RADIO1, BM_SETCHECK,BST_CHECKED, NULL);

break;

}

 

 4.4. Границы выделения памяти.

Граница выделения памяти обуславливаются гранулярностью обращения к памяти через страницы. Так как страница имеет кратность 4Кб, то граница выделения любого региона кратна этому значению. Возможные значения определяются граничными значениями доступных участков.

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

UNREFERENCED_PARAMETER(lParam);

SYSTEM_INFO sys_inf;

MEMORYSTATUS mem_stat;

if (LOWORD(wParam) == IDC_BUTTON1) //globalmemory

{

GlobalMemoryStatus(&mem_stat);

TCHAR szData[512]={0};

_stprintf(szData, TEXT("%d\n%d\n%I64d\n%I64d\n%I64d\n%I64d\n%I64d"),

 mem_stat.dwMemoryLoad,

 mem_stat.dwTotalPhys,

 (__int64) mem_stat.dwAvailPhys,

 (__int64) mem_stat.dwTotalPageFile,

 (__int64) mem_stat.dwAvailPageFile,

 (__int64) mem_stat.dwTotalVirtual,

 (__int64) mem_stat.dwAvailVirtual);

TCHAR szText[512]=TEXT("Memory load: \n TotalPhys: \n AvailPhys: \n TotalPageFile: \n AvailPageFile: \n TotalVirtual: \n AvailVirtual");

 SetDlgItemText(hDlg, IDC_STATIC2, szData);

 SetDlgItemText(hDlg, IDC_STATIC1, szText);

}

}

 4.5. Регионы в адресном пространстве.

Для резервирования региона памяти в адресном пространстве процесса или выделения ее используется функция VirtualAlloc, а для освобождения – функция VirtualFree. Операция выделения региона называется резервированием. При резервировании система обязательно выравнивает начало региона с учетом так называемой гранулярности выделения памяти.

LPVOID VirtualAlloc (

     LPVOID lpAddress, // адрес, по которому надо зарезервировать или выделить память

     DWORD dwSize, // размер выделяемого региона

     DWORD flAllocationType, // тип распределения памяти

     DWORD flProtect // тип защиты доступа

);

p =VirtualAlloc(NULL,4096*number,MEM_COMMIT,PAGE_READWRITE);

BOOL VirtualFree (

                  LPVOID lpAddress, // адрес региона, который надо освободить

                  DWORD dwSize, // размер освобождаемого региона

                  DWORD dwFreeType // тип освобождения

);

if(VirtualFree(p,0,MEM_DECOMMIT))

MessageBoxA(hDlg,"Virtual Free was successful","Success",MB_OK);

Работа с виртуальной памятью:

4.6. Выделение памяти.

Функции для работы с виртуальной памятью манипулируют страницами памяти.

Функция VirtualAlloc выполняет одну из операций:

  1.  резервирует определенное количество страниц;
  2.  передает физическую память зарезервированным страницам;
  3.  резервирует и передает физическую память страницам.

if (LOWORD(wParam) == IDC_BUTTON11)

{   p0=(char*)VirtualAlloc(NULL,16*sys_inf.dwPageSize,MEM_RESERVE,PAGE_READWRITE);

       .   .    .    .      .

VirtualQuery(p,&mbs,sizeof(mbs));  }

 4.7. Освобождение памяти

Функция VirtualFree выполняет одну из операций:

  1.  возврат физической памяти;
  2.  освобождение региона.

BOOL VirtualFree (

LPVOID lpAddress, // адрес региона, который надо освободить

DWORD dwSize, // размер освобождаемого региона

DWORD dwFreeType // тип освобождения

);

 if (LOWORD(wParam) == IDC_BUTTON3)  //virtualfree

   {

 if(VirtualFree(p,0,MEM_DECOMMIT))

    MessageBoxA(hDlg,"Virtual Free was successful","Success",MB_OK);

 else

    MessageBoxA(hDlg,"Can't free memory","Error",MB_OK);

  }

4.8. Изменение атрибутов защиты.

VirtualProtect позволяет изменять атрибуты защиты в адресном пространстве текущего процесса.

BOOL VirtualProtect (

LPVOID lpAddress, // адрес региона для установки флага

DWORD dwSize, // размер региона

DWORD flNewProtect, //новый атрибут защиты

PDWORD lpflOldProtect // адрес для сохранения старых флагов

);

if( !VirtualProtect(p1,5*4096,PAGE_NOACCESS,NULL);

4.9. Блокировка физической памяти RAM.

Функция VirtualLock заблокирует в оперативной памяти блок.

BOOL VirtualLock (

LPVOID lpAddress, // адрес начала памяти

SIZE_T dwSize // количество байтов

);

  if (LOWORD(wParam) == IDC_BUTTON5)//virtuallock

 {

     if(VirtualLock(p,4000))

    MessageBoxA(NULL,"Successfull VirtualLock!","Success",MB_OK);

 }

Если фиксация больше не нужна, то ее можно убрать функцией VirtualUnlock().

BOOL VirtualUnlock (

LPVOID lpAddress, // адрес начала памяти

SIZE_T dwSize // количество байтов

);

if (LOWORD(wParam) == IDC_BUTTON6)//virtualunlock

 {

     if(VirtualUnlock(p,4000))

     MessageBoxA(NULL,"Successfull VirtualUnLock!","Success",MB_OK);

            }

4.10. Стек потока.

Каждый новый поток получает свое собственное пространство стека, состоящее, и из виртуальной памяти в файле подкачки, и зарезервированной памяти. Система помещает одностраничные блоки из зарезервированной памяти стека, как требуется, до тех пор, пока стек не сможет больше расти. По умолчанию система резервирует 1Мбайт адресного пространства и передает ему 2 страницы физической памяти. Регион стека и вся физическая память, переданная ему, имеют атрибут защиты PAGE_READWRITE.

4.11. Кучи.

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

Функция HeapCreate создает объект собственной кучи.

HANDLE HeapCreate(  

 DWORD flOptions,  // атрибуты

 SIZE_T dwInitialSize, // начальный размер

 SIZE_T dwMaximumSize // конечный размер

);

Атрибутов всего два:

  1.  HEAP_GENERATE_EXCEPTIONS - Говорит о том, что в случае ошибки нужно генерировать структурную исключительную ситуацию вместо возврата NULL.
  2.  HEAP_NO_SERIALIZE - указатель на то, что куча не должна синхронизировать доступ.

hHeap_fam=HeapCreate(HEAP_NO_SERIALIZE,sys_inf.dwPageSize,5*sys_inf.dwPageSize);

Функция удаления кучи HeapDestroy:

BOOL HeapDestroy

(  

 HANDLE hHeap // указатель на кучу

);

   if(HeapDestroy(hHeap))

    MessageBoxA(NULL,"Heap is destroyed!","Success",MB_OK);

Создав кучу, есть возможность выделить в ней память.

LPVOID HeapAlloc

(  

 HANDLE hHeap, // указатель на кучу где можно выделить память

 DWORD dwFlags, // флаги

 SIZE_T dwBytes // обьем выделяемой памяти

);

Флаги могут быть следующие:

  1.  HEAP_GENERATE_ EXCEPTIONS - при ошибке будет исключение вместо NULL
  2.  HEAP_NO_SERIALIZE - доступ доложен быть не синхронизированный
  3.  HEAP_ZERO_MEMORY - установить содержимое выделяемой памяти в 0

p_heap=(char*)HeapAlloc(hHeap_fam,HEAP_NO_SERIALIZE,sys_inf.dwPageSize);

Для освобождения памяти используется функция HeapFree:

BOOL HeapFree

(  

 HANDLE hHeap, // указатель на кучу

 DWORD dwFlags, // флаги  

 LPVOID lpMem // указатель на память

);

if(HeapFree(hHeap,0,p))

MessageBoxA(NULL,"Heap is free!","Success",MB_OK);

 4.12. Стандартные библиотечные функции языка С.

Win32 приложения могут благополучно использовать возможности управления памятью библиотеки программ этапа исполнения языка Си (malloc, free и т.д.) и Си++ (new, delete и т.д.). Cистема вольна управлять памятью, перемещая страницы физической памяти без задействования виртуальных адресов. В связи с этим различие между ближними (near) и дальними (far) указателями больше не важно. Можно использовать стандартные библиотечные средства работы с памятью. При этом Win32 функции управления памятью предоставляют больше функциональных возможностей.

  1.  Результаты работы программного обеспечения

Рис 1.Результат работы программы

Выводы:

  1.  Функция HeapCreate создает объект собственной кучи.
  2.  Всем процессам в операционной системе Windows предоставляется важнейший ресурс – виртуальная память.
  3.  Для резервирования региона памяти в адресном пространстве процесса используется функция VirtualAlloc.
  4.  Функция VirtualProtect позволяет изменять атрибуты защиты в адресном пространстве текущего процесса.

 

А также другие работы, которые могут Вас заинтересовать

36074. Виробничий потенціал: структура, вимірювання величини, оцінювання ефективності використання 89 KB
  План Характеристика виробничого потенціалу. Оцінювання виробничого потенціалу на підставі аналізу рівня ефективності використання структури робочих місць. Оцінювання ефективності використання основних елементів потенціалу підприємства основних фондів виробничого персоналу технологічного та інформаційного потенціалу. Але поряд з цим існує ще ряд практичних завдань при вирішенні цієї проблеми: вибір найбільш ефективного показника для оцінювання виробничого потенціалу підприємства; обгрунтування збалансованості виробничого...
36075. Управління потенціалом підприємства на основі маркетингової діяльності (діагностика) 205 KB
  Розробка стратегії маркетингу починається з визначення ринку або його окремого сегменту на якому здійснюється діяльність підприємства. Мета аналізу СЗГ оцінювання перспектив розвитку з погляду масштабів зростання стабільності місткості ринку перспектив технологій норми прибутку. Стан зовнішнього оточення СЗГ слід оцінювати з використанням змінних параметрів : перспектив зростання перспектив рентабельності очікуваного рівня нестабільності успішної конкурентності на ринку. Очікуваний рівень нестабільності характеризується...
36076. Управління формуванням і розвитком потенціалу підприємства 64 KB
  Оцінка організаційного потенціалу підприємства. Методів управління при формуванні потенціалу підприємства. Це досягається формуванням організаційного потенціалу шляхом: проектуванням і створенням цілеспрямованої виробничої і соціотехнічної системи; організації підприємства з встановленням цілей діяльності і корпоративних норм; організацією управління діяльністю підприємства; забезпеченням інформацією; реорганізацією реструктуризацією підприємства відповідно до зміни цілей стану внутрішнього середовища потреб споживачів продукції;...
36077. Управління трудовими ресурсами підприємства 56.5 KB
  Ринок праці функціонування ринку праці. Регулювання ринку праці. Роль підприємства в регулюванні ринку праці управління трудовими ресурсами підприємства с. Завдання першої підсистеми управління трудовими ресурсами полягає в управлінні формуванням робочої сили відтворення підготовка відшкодування управління процесом розподілу трудових ресурсів управління створення робочих місць управління перерозподілом робочої сили; управління використанням робочої сили управління...
36078. Оцінка організаційного потенціалу підприємства 67 KB
  Оцінка організаційного потенціалу підприємства. План Оцінка організаційного потенціалу підприємства в системі параметрів організаційного проектування. Методи управління при формуванні потенціалу підприємства.
36081. Формування і тенденції розвитку потенціалу підприємства 251 KB
  Методичні засади формування потенціалу підприємства.Формування ПП тісно повязане з властивостями всієї економічної системи: складність потенціал підприємства це сукупність елементів які знаходяться в взаємодії і утворюють єдине ціле що знаходиться у динамічному стані тобто вона не є механічною сумою елементів; структурність ПП побудова з певною ієрархічністю яка відображає зміст і співвідношення складових та визначає її цінність; адаптивність ПП може імпульсивно реагувати на зміни внутрішнього і зовнішнього середовища; ...
36082. Оцінювання маркетингового потенціалу підприємства на основі діагностики внутрішнього і зовнішнього середовища 219.5 KB
  Оцінювання ефективності товарних стратегій підприємства. Оцінювання інвестиційних можливостей у процесі планування прибутку підприємства. Оцінювання перспектив зростання підприємства на основі портфельного аналізу.