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 позволяет изменять атрибуты защиты в адресном пространстве текущего процесса.

 

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

48157. ДЕРЖАВА ТА ЇЇ ЕКОНОМІЧНІ ФУНКЦІЇ 52.5 KB
  Необхідність цілеспрямованого втручання держави в економіку 2. Еволюція економічної діяльності держави 3. Економічні функції держави 4. Необхідність цілеспрямованого втручання держави в економіку Сучасна ринкова економіка неможлива без ефективного механізму її взаємодії з державою органами законодавчої і виконавчої влади.
48158. ФОРМИ СУСПІЛЬНОГО ПРОДУКТУ В ПРОЦЕСІ ВІДТВОРЕННЯ 147 KB
  Суспільне економічне відтворення основане на органічній єдності всіх частин що його утворюють: виробництва розподілу обміну споживання; домогосподарств підприємств галузей економічних регіонів і всього виробництва; продуктивних сил складових його частин і економічних відносин; суспільного виробництва і суспільного споживання. Економічне відтворення суспільства включає в себе такі найважливіші моменти: відтворення суспільного продукту та його конкретних форм; відтворення людського ресурсу як особистісного фактора виробництва та...
48159. РОЗПОДІЛ НАЦІОНАЛЬНОГО ДОХОДУ. СПОЖИВАННЯ І ЗАОЩАДЖЕННЯ 178.5 KB
  Розподіл національного доходу і обєктивні основи формування доходів населення 3. Перерозподіл національного доходу і споживання 4. Сутність місце та роль розподілу в процесі відтворення В економічній літературі розподільні відносини розглядаються в основному через призму розподілу національного доходу.
48160. ЕКОНОМІЧНЕ ЗРОСТАННЯ ТА ЙОГО ЧИННИКИ. ЕКОНОМІЧНІ ЦИКЛИ 79.5 KB
  Зміст і типи економічного зростання. Теорії і моделі економічного зростання 3. Зміст і типи економічного зростання.
48161. ЗАЙНЯТІСТЬ, ВІДТВОРЕННЯ РОБОЧОЇ СИЛИ ТА ЇХ ДЕРЖАВНЕ РЕГУЛЮВАННЯ 171 KB
  Неповна зайнятість і безробіття в механізмі відтворення робочої сили 4. З початку реформування української економіки сама сфера зайнятості зазнала зміни виникли нові сегменти: самозайнятість і часткова зайнятість або інакше приховане безробіття. Таку часткову зайнятість прийнято називати прихованим безробіттям. Якщо внаслідок перевищення пропонування праці над попитом виникає безробіття то вона впливає націни в бік їх зниження до тих пір поки не буде досягнуто рівноваги на ринку праці на рівні повної зайнятості за якої безробіття...
48162. ГОСПОДАРСЬКИЙ МЕХАНІЗМ У СИСТЕМІ РЕГУЛЮВАННЯ СУСПІЛЬНОГО ВИРОБНИЦТВА 53.5 KB
  Державне регулювання суспільного відтворення та його форми 3. Державне регулювання економіки Список використаних джерел: Основи економічної теорії: Підручник За ред. Державне регулювання суспільного відтворення та його форми Ринковий механізм саморегулювання дає можливість: ефективно розподіляти ресурси для виробництва необхідних суспільству товарів; успішно функціонувати за наявності навіть обмеженої інформації досить мати дані про ціну на продукт і про витрати на його виробництво; забезпечувати гнучкість і високий ступінь...
48163. ЗАКОНОМІРНОСТІ ТА ЕТАПИ РОЗВИТКУ КАПІТАЛІСТИЧНОЇ ЕКОНОМІЧНОЇ СИСТЕМИ 82.5 KB
  Економічна система капіталізму вільної конкуренції: сутність і етапи розвитку Капіталізм вільної конкуренції характеризується приватною капіталістичною власністю на речові ресурси використанням найманої праці та системи ринків чистої конкуренції. Проте не існує різних думок щодо таких інститутів капіталізму вільної конкуренції: приватна власність на засоби виробництва; система найманої праці; 3 свобода підприємництва і вибору; ринкова система та вільна конкуренція; важлива роль прибутку; обмежена роль держави. Система найманої...
48164. ЕКОНОМІЧНА СИСТЕМА СУЧАСНОГО КАПІТАЛІЗМУ 114.5 KB
  Сутність і ознаки змішаної економіки 2. Механізм функціонування сучасної капіталістичної змішаної економіки 3. Монополії та олігополії в умовах капіталістичної змішаної економіки 4. Сутність і ознаки змішаної економіки Розрізняють три основних варіанти змішаної економіки: 1 консервативний 2 ліберальний 3 соціалреформістський.
48165. СОЦІАЛІСТИЧНА ЕКОНОМІЧНА СИСТЕМА ТА ЇЇ ЕВОЛЮЦІЯ 57.5 KB
  Економічна система соціалізму: теорія і практика 2. Об'єктивні і суб'єктивні умови формування моделі державного соціалізму 3. Механізм функціонування державного соціалізму 4. Історичні перспективи соціалізму Список використаних джерел: Основи економічної теорії: Підручник За ред.