Министерство образования и науки Российской Федерации
Федеральное агенство по образованию
Государственное образовательное
учреждение
высшего профессионального образования
«Комсомольский-на-Амуре государственный технический университет»
Факультет Компьютерных технологий
Кафедра математического обеспечения и применения ЭВМ
По курсу «ОСО»
Выполнил: Рогозин ВА.
Проверил: Тихомиров В.А.
Вариант: 16
Комсомольск-на-Амуре
2007
Цель: Изучить теоретические вопросы управления памятью в Windows и освоить приёмы практической реализации этого управления с использованием системных функций.
Задание:1) Внимательно изучить ниже прилагаемый теоретический материал;
2) Набрать и проверить работоспособность программных модулей, представленных на листингах 1-3. Тексты программ вместе с результатами их тестирования вставить в отчет;
3) выполнить индивидуальное задание в соответствии с выданным преподавателем вариантом:
Зарезервировать память 30 Мбт.
Выделяя порциями необходимую память считать в нее последовательно от 1 до 20
дискет. Найти контрольную сумму считанных байтов. Записать эти дискеты на
винчестер в файлы в виде отдельных образов.
Выполнение
Пример 1. Программа получает в индивидуальное пользование относительно большой участок памяти, при этом используются три разных метода. По умолчанию программа работает с блоком памяти объемом 75 Мбайт. Это значение приемлемо для тестирования механизмов выделения/освобождения памяти. Если вы захотите работать с блоком памяти другого размера, его размер (количество мегабайт) можно указать в командной строке при запуске программы.
Листинг 1.
#include <iostream.h>
#include <windows.h>
#include <stdio.h>
extern "C" int printf_oem(const char *s, ... )
{
va_list ap;
va_start(ap,s);
char src[256];
vsprintf(src,s,ap );
va_end(ap);
char oems[256];
CharToOem(src,oems);
return printf(oems);
}
#define printf printf_oem
////////////////////////////////////////////////
//Процедура для превращения ANSI в OEM (ASCII)
char* ATO(char* text)
{char* buf;
buf=(char*)malloc(strlen(text)+1);
CharToOem( text, buf);
return (buf);
}
////////////////////////////////////////////////
char *p=NULL;
#define MEGABYTE 1048576
#define KBYTE 1024
#define MSIZE 75
void main(int argc, char *argv[])
{
char choice;
int asd=34;
int msize=0;
if (argc>1) msize=atoi(argv[1]);
if (!msize) msize=MSIZE;
do
{
int valid=1;
cout<<ATO("1 - Выделить ")<<msize<< ATO("MB памяти\n");
cout<<ATO("2 - Зарезервировать ") <<msize<<ATO("MB памяти\n");
cout<<ATO("3 - Зарезервировать ") <<msize<<ATO("MB памяти и выделить в ней 1MB\n");
cout<<ATO("4 - Выход\n");
cout<<ATO("Ваш выбор: ");
cin>>choice;
switch (choice)
{
case '1':
cout<<ATO("\nВыделение памяти\n");
p=(char *)VirtualAlloc(NULL, msize*MEGABYTE,MEM_COMMIT,PAGE_READWRITE);
break;
case '2':
cout<<ATO("\nРезервирование памяти\n");
p=(char *)VirtualAlloc(NULL, msize*MEGABYTE,MEM_RESERVE,PAGE_READWRITE);
break;
case '3':
cout<<ATO("\nРезервирование и частичное выделение памяти");
p=(char *)VirtualAlloc(NULL, msize*MEGABYTE,
MEM_RESERVE, PAGE_READWRITE);
cout<<ATO("\nВыделение\n");
VirtualAlloc(p, MEGABYTE, MEM_COMMIT, PAGE_READWRITE);
break;
case '4':
exit(0);
default:
cout<<ATO("\nЧего-чего?\n");
valid=0;
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.