66531

УПРАВЛЕНИЕ ПАМЯТЬЮ В ОС UNIX И WINDOWS

Лабораторная работа

Информатика, кибернетика и программирование

Цель работы — изучение аспектов организации работы с внутренней и внешней памятью в операционных системах семейств Unix и Windows. Использованные теоретические сведения Материалы из методического пособия...

Русский

2014-08-22

148.11 KB

1 чел.

Министерство образования и науки Российской Федерации

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

Кафедра «Информационная безопасность компьютерных систем»

ОТЧЕТ

по лабораторной работе №4

«УПРАВЛЕНИЕ ПАМЯТЬЮ В ОС UNIX И WINDOWS»

по курсу «Операционные системы»

Выполнил

студент гр. 2088/4    А.А.Чернышев

                           <подпись>

Руководитель     А.С. Коноплев

                           <подпись>

Санкт-Петербург

2011

1. Формулировка задания

Цель работы — изучение аспектов организации работы с внутренней и внешней памятью в операционных системах семейств Unix и Windows.

2. Использованные теоретические сведения

Материалы из методического пособия 08.pdf, материалы интернет ресурсов msdn.com, и rus-linux.net.

3. Результаты работы

3.1. Выполнение индивидуального задания

1) Напишите программу, которая будет сравнивать среднее время доступа к жесткому диску с включенным кэшированием записи и без него. Сравните и обоснуйте полученные результаты. Операционная система - Windows.

//========Измерение среднего времени записи на HDD========//

//========================WINDOWS=========================//

#include <windows.h>

#include <stdio.h>

#include <conio.h>

#include <time.h>

int main()

{

   int i=0;

   int n=0;

   int res;

   double start, end;

   HANDLE f;

   f=NULL;

   unsigned long offs=0;

   char* buf = new char[2*1024*1024];

   start = clock();

   for(n=0; n<1000; n++)

   {

f=CreateFile("D:\\qwe.bak",GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,       FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN, NULL);

      if(f==0) printf("Error!");

      res=WriteFile(f,buf,2*1024*1024,&offs,0);

      CloseHandle(f);

      DeleteFile("D:\\qwe.bak");

   }

   end = clock();

   printf("HDD av. write access time is %.3f s \n",(double)(end-start)/CLOCKS_PER_SEC);

   _getch();

}

Для разработки этой программы были изучены аспекты работы с дескриптором HANDLE.

В процессе разработки возникли трудности с флагами FILE_FLAG_NO_BUFFERING и FILE_FLAG_WRITE_THROUGH, поэтому было решено отключать кэширование через Диспетчер устройств -> Дисковые устройства -> <Наш жесткий диск> -> Свойства -> политика -> “Разрешить кэширование”. Для того чтобы отключить кэширование таким способом требуется перезагрузка. В итоге получили такие результаты:  для записи 2 Mb

С Кэшированием потребовалось:

Без кэширования потребовалось:

По полученным результатам, мы вполне можем судить о том, что за счет включенного кэширование заметно уменьшается время доступа к жесткому диску, и как следствие вырастает производительность компьютера.

2) Напишите программу, которая будет измерять среднее время доступа к внутренней и внешней памяти (чтение данных из оперативной памяти и с внешней памяти, в качестве которой выступает дискета 3.5). Сравните и обоснуйте полученные результаты. Операционная система - Unix. Ввиду отсутствия Floppy-дисковода, было решено замерять время чтения данных с жесткого диска.

В итоге были созданы 2 программы:

//========Измерение среднего времени чтения из HDD========//

//==========================UNIX==========================//

#include <fcntl.h>

#include <unistd.h>

#include <stdio.h>

#include <time.h>

#define BUF_SIZE 1024*8*128

int  main()

{

   double start, end;

   char *buf1= new char[1024*1024*128];

   int fp;    

   int n=0;

 

   /* fd=open("/home/artysleep/qwe.txt",O_RDWR|O_TRUNC|O_CREAT,0777);

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

       {

          write(fd,"01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567", 128);

       }

       close(fd);*/ //Создание файла;

   start=clock();

   for (n=0; n<100; n++)

   {

       fp=open("/home/artysleep/qwe.txt",O_RDWR,0777);

       read(fp,buf1,BUF_SIZE*128);

       close(fp);

   }

   end=clock();

   printf("HDD av. write access time is %.3f s \n",(float)(end-start)/100/CLOCKS_PER_SEC);

   return 0;

}

//========Измерение среднего времени чтения из RAM========//

//==========================UNIX==========================//

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <time.h>

#define BUF_SIZE 1024*1024*128

int main ()

{

   double start, end;

   char *buf1;

   char *buf2;

   int i;

   if((buf1 = (char*)malloc(BUF_SIZE))==NULL)

   {

       printf("Buf1 memmory error\n");

       exit(1);

   }

   if((buf2 = (char*)malloc(BUF_SIZE))==NULL)

   {

       printf("Buf2 memmory error\n");

       exit(1);

   }

   start=clock();

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

   {

       memcpy(buf1, buf2, BUF_SIZE);

   }

   end=clock();

   printf("RAM av. write access time is %.3f s \n",(double)(end-start)/100/(double)CLOCKS_PER_SEC);

   return 0;

}

Были прочитаны 128Mb на жестком диске и в оперативной памяти.

В результате выполнения данных программ, получили такие результаты:

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

3.2. Ответы на контрольные вопросы

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

Распределение памяти разделами переменной величины.

Какие задачи решает виртуальная память?

Виртуальная память решает следующие задачи:

  1.  размещает данные в запоминающих устройствах разного типа, например, часть программы в оперативной памяти, а часть на диске;
  2.  перемещает по мере необходимости данные между запоминающими устройствами разного типа, например, подгружает нужную часть программы с диска в оперативную память;
  3.  преобразует виртуальные адреса в физические.

Перечислите возможные  причины выгрузки процесса частично или полностью на диск (свопинг ).

Ядро выгружает процесс, если испытывает потребность в свободной памяти,

которая может возникнуть в следующих случаях:

  1.  Произведено обращение к системной функции fork, которая должна выделить место в памяти для процесса-потомка.
  2.  Произведено обращение к системной функции brk, увеличивающей размер процесса.
  3.  Размер процесса увеличился в результате естественного увеличения стека процесса.
  4.  Ядру нужно освободить в памяти место для подкачки ранее выгруженных процессов.

4. Выводы

Механизмы, использующиеся для работы с памятью в ОС UNIX и Windows, повышают эффективность работы процессов, а также предоставляют некоторую свободу для программиста в реализации наиболее эффективной, по его мнению, работы с памятью его программы.


 

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

10680. Пісня про Богдана Хмельницького Чи не той то Хміль 14.13 KB
  Чи не той то Хміль Пісня про Богдана Хмельницького Історичні пісні Чи не той то хміль Що коло тичин вється Ой той то Хмельницький Що з ляхами бється. Чи не той то хміль Що по пиві грає.. Ой той то Хмельницький Що ляхів рубає. Чи не той то хміль Що у пиві кисне Ой той...
10681. Енеїда - Котляревський Іван 16.48 KB
  Енеїда Котляревський Іван Після загибелі Трої Еней разом з товаришами відпливає у море. Еней був парубок моторний І хлопець хоть куди козак Удавсь на всеє зле проворний Завзятіший од всіх бурлак. Но греки як спаливши Трою Зробили з неї скирту гною Він взявши торбу т...
10682. Катерина - Шевченко Тарас 16.06 KB
  Катерина Шевченко Тарас Кохайтеся чорнобриві Та не з москалями Бо москалі чужі люди Роблять лихо з вами. Москаль любить жартуючи Жартуючи кине, Піде в свою Московщину А дівчина гине... Катерина закохується в москаля й виходить до нього ввечері в садочок не слухаюч...
10683. Гайдамаки - Шевченко Тарас - Поема 18.6 KB
  Гайдамаки Шевченко Тарас Поема Все йде все минає і краю немає. Куди ж воно ділось Відкіля взялось І дурень і мудрий нічого не знає. Живе... умирає... Одно зацвіло А друге завяло навіки завяло... Поет звертається до гайдамаків що колись гуляли Україною шукаючи волі ...
10684. Кавказ - Шевченко Тарас - КАВКАЗ (Поема) 15.16 KB
  Кавказ Шевченко Тарас КАВКАЗ Поема Кавказькі гори засіяні горем кровію политі тривалий час там іде війна. Споконвіку там орел символ російського самодержавства карає Прометея символ нескореного народу та не в змозі остаточно здолати непокірного титана: Не в
10685. Іван Підкова - Шевченко Тарас - ІВАН ПІДКОВА (Поема) 13.53 KB
  Іван Підкова Шевченко Тарас ІВАН ПІДКОВА Поема 1 Поет оспівує козацькі часи в Україні. Запорожці вміли воювати добувати славу і волю. Від тієї слави лишилися тільки високі могили що про волю нишком в полі з вітрами говорять. Та згадка про ті славні часи може заспо
10686. Наталка Полтавка - Котляревський Іван 15.15 KB
  Наталка Полтавка Котляревський Іван Українська опера на дві дії Дійові особи: Наталка українська дівчина. Горпина Терпилиха її мати. Петро коханий Наталки. Микола далекий родич Терпилихи. Тетерваковський возний жених Наталчин. Макогоненко сільський вибо
10687. Маруся - Квітка-Основяненко 16.75 KB
  Маруся Квітка-Основяненко Наум Дрот та його дружина були людьми богобоязними та праведними. В усьому вони дотримуються Божого і морального людського закону. За це Бог допомагає їм. За молитви й невпинну працю дає їм Бог донечку. Дитина теж росте слухняна покірна на ву
10688. Чорна рада - Пантелеймон Куліш - Хроніка 1663 року 20.2 KB
  Чорна рада Пантелеймон Куліш Хроніка 1663 року І Навесні двоє верхових наближалися до Києва Білгородським шляхом. Де їхали полковник Шрам із сином. Полковник був сином поволоцького попа вивчився на попа але потім пішов до козаків. Після поразки повстання полковник дес...