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

 

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

73076. Философская антропология (ФА), история развития 33.5 KB
  Фил антропология ФА В широком смысле философское учение о природе сущности человека который служит центральным предметом рассмотрения; в узком смысле течение западноевропейской преимущественно немец философии 1й пол. Философская антропология есть учение о человеке с точки зрения самого бытия человека.
73077. Психоаналитические теории культуры: З.Фрейд, К.Юнг, Ж.Лакан 34 KB
  Юнг швейцарский психолог психиатр. Ученик Фрейда Юнг пришел к выводу о том что типичные образы являющиеся в снах пациентов являются явлением не извне. Юнг выделяет в структуре психики человека не только индивид. Таким образом Юнг приходит к выводу что коллективное бессознательное имеет культурное...
73078. Морфология культуры в XX веке: О.Шпенглер, А.Тойнби, П.Сорокин 40 KB
  Морфология культуры в XX веке: О. В основе каждой культуры лежит общественный идеал или степень культуры кот. Вслед за Данилевским Шпенглер считает что развитие культуры выстраивается по образцу живого организма походит стадии детства юности зрелости старости смерти.
73079. Типология культур Н.Данилевского 32.5 KB
  В основу концепции исторической типологии им положен принцип многообразия локальных цивилизаций циклического развития культуры. Данилевский первым обосновал такой подход к истории мировой культуры. Данилевский отстаивал идею самобытности русской культуры национального характера русского народа и духовных ценностей.
73080. Позитивистские и эволюционные концепции культуры: Г.Спенсер, Э.Тайлор 33.5 KB
  В 19 веке появилась специальная наука об человеческих общностях социология ставшая основой для формирования культурной антропологии социологии культуры и более частных культурологических дисциплин – культурной этнологии и этнографии социологии искусства и т.
73081. Теории развития культуры в эпоху Просвещения. Д.Вико и И.Гердер 36.5 KB
  Просветителей интересовала возможность духовного совершенствования человека, взаимопонимания народов. Эти идеи оказали значительное влияние на развитие общественной мысли. Вместе с тем в 19-20 вв. идеология Просвещения нередко подвергалась критике за идеализацию человеческой природы...
73082. РЕЧЕВЫЕ АКТЫ В СТАНДАРТНОЙ ТЕОРИИ 90 KB
  Речевой акт в понимании Дж. Остина Первой своей задачей при создании теории речевых актов Дж. Остин считал выяснение характера отношений между констативными и перформативными высказываниями и условий удачности перформативов.
73083. Социальная философия и теоретическая социология 272 KB
  В противоположность кайресу следует обозначить состояние которе метафорически можно назвать исторической дремотой сном истории. Сон истории -– это период когда как кажется ничего не происходит. Это и есть ритм истории. Факторы исторического процесса и их соотношение...
73084. Вывод (доказательство) в логике 31.5 KB
  Вывод доказательство в логике: вывод и вывод из данных формул в аксиоматическом исчислении высказываний прямое и косвенное доказательство в системах естественного вывода. Доказательство логическая форма мысли обосновывающая истинность того или иного положения посредством других положений...