Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Лабораторная работа. Исследование механизмов работы с памятью↑ ⇐ ПредыдущаяСтр 10 из 10 Содержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Цель работы: приобрести практические навыки использования
Общие сведения ОС 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 – Поля структуры
Требования к отчету Отчет по работе выполняется на бумажном носителе и должен содержать: - задание к работе; - описание действий, выполненных для получения результата; - листинги программ с комментариями; - снимки экрана с результатами работы; - выводы по каждому заданию. 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 с.) |