Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лабораторная работа. Исследование механизмов работы с памятью

Поиск

 

Цель работы: приобрести практические навыки использования

 

Общие сведения

ОС Windows может реализовать следующие механизмы работы с памятью:

1) виртуальную память для работы с большими массивами объектов или структур;

2) проецируемые файлы для операций с большими потоками данных (обычно из файлов) и для совместного использования данных несколькими процессами на одном компьютере;

3) кучи – для работы с множеством малых объектов.

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

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

1) для загрузки и выполнения exe - и dll -файлов;

2) для получения доступа к файлу данных, размещенных на диске;

3) для разделения данных между несколькими процессами, выполняемыми на одной машине.

В процессе загрузки и выполнения ехе –файла используется функция CreateProcess и выполняются следующие действия:

а) отыскивается ехе -файл, указанный в вызове функции, если файл не найден, новый процесс не создается, а функция возвращает значение false;

б) если файл найден, создается новый объект ядра «процесс»;

в) создается адресное пространство процесса;

г) резервируется такой регион адресного пространства, чтобы в него поместился данный ехе -файл. Желательное расположение этого региона указывается внутри самого ехе -файла. По умолчанию базовый адрес ехе -файла 0х00400000;

д) система отмечает, что физическая память, связанная с зарезервированным регионом – ехе -файл на диске, а не страничный файл.

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

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

Для С++-программ существуют два основных способа хранения информации в основной памяти:

1) использование переменных. Область памяти, предоставляемая переменным, закрепляется за ними во время компиляции и не может быть изменена при выполнении программы;

2) использование системы динамического распределения памяти. В этом случае память для данных выделяется по мере необходимости из раздела свободной памяти, которая расположена между нашей программой (и ее постоянной областью хранения) и стеком. Этот раздел называется кучей.

Система динамического распределения памяти – это средство получения программой некоторой области памяти во время ее выполнения.

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

 

высокая область адресов Стек
  Куча
  Глобальные данные
нижняя область адресов Код программы

 

Рисунок 8.1 – Размещение разделов в областях памяти

 

Язык С++ содержит операторы, которые служат для выделения и освобождения памяти.

Оператор new, позволяющий динамически выделить область памяти, имеет вид:

переменная-указатель = new тип переменной;

Оператор delete, который освобождает ранее выделенную динамическую память, имеет вид:

delete переменная-указатель;

Пример 8.1 – Использование операторов new и delete в программах.

#include<iostream.h>

void main()

{int *p;

p=new int; //выделение памяти

*p=55; //в выделенную область помещается значение 55

cout<<*p<<endl; //значение выводится на экран

delete p;} //освобождение памяти

 

Пример 8.2 – Пример инициализации выделенной памяти.

#include<iostream.h>

void main()

{int *p;

p=new int(345); //инициализация памяти

cout<<*p<<endl;

delete p;}

 

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

переменная-указатель = new тип [размер];

Для освобождения памяти, выделенной под динамически созданный массив используется операция:

delete переменная-указатель;

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

Пример 8.3 – Пример использования динамической памяти при работе с одномерным массивом.

#include<iostream.h>

void main()

{int *p; int i;

p=new int [10]; //выделение памяти для массива

из 10 элементов

for(i=0;i<10;i++)

p[i]=10+i; //заполнение массива

for(i=0;i<10;i++)

cout<<p[i]<<" "; //вывод массива на экран

cout<<endl;

delete p; } //освобождение памяти

 

Существует несколько способов создания динамического массива. Наиболее универсальный способ – когда обе размерности массива задаются на этапе выполнения программы.

Пример 8.4 – Пример использования динамической памяти при работе с двумерным массивом.

#include<iostream.h>

void main()

{int nrow, ncol, i,j;

cout<<"enter count rows and columns"<<endl;

cin>>nrow>>ncol;

int**a=new int *[nrow];

for(i=0;i<nrow;i++)

a[i]=new int[ncol];

for(i=0;i<nrow;i++)

for(j=0;j<ncol;j++)

cin>>a[i][j];

for(i=0;i<nrow;i++)

{for(j=0;j<ncol;j++)

cout<<a[i][j]<<" ";

cout<<endl;}

cout<<endl;}

 

Задания к лабораторной работе

8.2.1 Создать две самостоятельные программы (на языке С++) для расчета значений функций y=sinx и y=cosx в интервале от 0 до 3,14. Создать третью программу, которая бы вызывала одну из программ.

Рекомендация к выполнению. Если необходимо выполнить программу и загрузить из нее другие программы, то используются функции exec… из библиотеки с заголовочным файлом < process.h >.

8.2.2 Создать одномерный динамический массив, ввести элементы массива и отсортировать его.

 

8.2.3 Вычислить суммы элементов каждого столбца матрицы А(5,7) и результат записать в одномерный массив. Для этого создать двумерный динамический массив, задать элементы массива с помощью генератора случайных чисел, создать одномерный динамический массив.

 

8.2.4 Сведения о ресурсах памяти и ее текущем состоянии можно получить с помощью функции

GlobalMemorystatus (var meminfo: TmemoryStatus),

где meminfo – переменная структурного типа. Поля структуры и их назначение приведены в таблице 8.1. На форму следует поместить компонент memo и вывести показатели с указанием имени ресурса. О пределить указанные объемы в каждый момент времени. Построить график изменения памяти.

 

Таблица 8.1 – Поля структуры

Поле Назначение
dwLength Размер структуры. Это поле должно быть заполнено до вызова функции GlobalMemorystatus
dwMemoryLoad Процент занятой в данный момент памяти (от 0 до 100)
dwTotalPhys Объем физической памяти в байтах
dwAvialPhys Свободный в настоящее время объем физической памяти в байтах
dwTotalPageFile Объем файла подкачки в байтах
dwAvialPageFile Свободный в настоящее время объем файла подкачки
dwTotalVirtual Объем текущего адресного пространства в байтах
dwAvialVirtual Свободный объем текущего адресного пространства в байтах

 

Требования к отчету

Отчет по работе выполняется на бумажном носителе и должен содержать:

- задание к работе;

- описание действий, выполненных для получения результата;

- листинги программ с комментариями;

- снимки экрана с результатами работы;

- выводы по каждому заданию.

8.4 Контрольные вопросы

8.4.1 Какие механизмы работы с памятью реализует ОС Windows?

8.4.2 С какой целью используется виртуальная память?

8.4.3 В чем особенность использования проецируемых файлов?

8.4.4 Какая функция используется в процессе загрузки и выполнения ехе –файла?

8.4.5 Какие действия выполняются в результате использования функции CreateProcess?

8.4.6 Что представляет собой куча?

8.4.7 Какие способы хранения информации в основной памяти существуют в С++?

8.4.8 Какие операторы С++ служат для выделения и освобождения памяти? Приведите примеры использования.

8.4.9 Как выделяется память под динамический массив? Приведите примеры.

8.4.10 Какую информацию можно получить с помощью функции GlobalMemorystatus?

 

 


Список литературы

 

1 Бэкон Д. Операционные системы. – СПб., 2004.

2 Гордеев В.А. Операционные системы. – СПб., 2007.

3 Дейтель М.Х. Операционные системы. Основы и принципы. – М., 2006.

4 Илюшечкин В.М. Операционные системы. - М., 2009.

5 Иртегов Д.В. Введение в операционные системы. - СПб., 2008.

6 Карпов В.Е. Основы операционных систем. - М., 2005.

7 Колесниченко Д. Секреты реестра Windows ХР/Vista. - СПб., 2008.

8 Коньков К.А. Устройство и функционирование ОС Windows. - М., 2008.

9 Назаров С.В. Операционные среды, системы и оболочки. Основы структурной и функциональной организации. – М., 2007.

10 Олифер В.Г. Сетевые операционные системы. - СПб., 2008.

11 Таненбаум Э. Современные операционные системы. – СПб., 2005.

12 Цилькер Б.Я. Организация ЭВМ и систем. - СПб., 2007.

13 Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. – СПб., 2002.

14 Финогенов К.Г. Самоучитель по системным функциям MS-DOS. - М., 2001.

 



Поделиться:


Последнее изменение этой страницы: 2017-01-25; просмотров: 437; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.118.151 (0.008 с.)