Реализация модели распределения памяти перемещаемыми разделами с перемещением в сторону старших адресов со сжатием при каждом

Автор работы: Пользователь скрыл имя, 07 Апреля 2011 в 13:17, курсовая работа

Описание работы

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

Содержание работы

Введение…………………………………………………………….3
1. Распределение памяти перемещаемыми разделами
1.1 Типы адресов…............................................................................5
1.2 Алгоритмы распределения памяти …………………………..14
1.3 Распределение памяти динамическими разделами………….14
1.4 Распределение памяти перемещаемыми разделами…………16
2. Реализация модели распределения памяти перемещаемыми разделами
2.1 Алгоритм реализации модели распределения памяти
перемещаемыми разделами …........................................................18
2.2 Блок-схема программы …….....................................................19
2.3 Программа реализация модели распределения памяти перемещаемыми разделами ……....................................................24
2.4 Тестирование программы реализация модели распределения
памяти перемещаемыми разделами …………………………......27
Заключение…………………………………………………………....30
Список использованной литературы………………………….......32

Файлы: 1 файл

Курсовая готовая))).doc

— 818.00 Кб (Скачать файл)

    Процесс загрузки будет продолжаться до тех  пор, пока для вновь пришедшего процесса будет хватать свободного места в ячейках, в противном случае на экране появится сообщение о постановки процесса в очередь: 'Mesta dlea zagruzki ne dostatochno  process postavlen v ochered' . 

2.2 Блок-схема программы 

    На рис.10 представлена блок-схема  программы реализации модели распределения памяти перемещаемыми разделами с перемещением в сторону  старших адресов со сжатием при каждом завершении задачи . 
 
 
 
 
 
 

 
 
 
 
 

 
 
 
 

 Продолжение1  рис. 10 Блок-схема программы  
 
 
 
 
 
 
 
 
 
 
 
 
 

 

Продолжение2  рис. 10 Блок-схема программы  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

    2.3 Программа реализация  модели распределения  памяти перемещаемыми  разделами 

    Таблица данных для программы реализации модели распределения памяти перемещаемыми разделами

Имя и тип переменной Смысл Структура Диапазон значений
A:array of integer Одномерный  массив из 10-ти элементов   - От 0 до 256
y:string  Строковая  переменная, ответственная за введение(не введение) нового процесса. Простая переменная y/n
i:integer Текущий номер  элемента в массиве

 и  счетчик числа итераций

Простая переменная 0т 1 до 10
j:integer Память, занимаемая процессом( в Мб) Простая переменная От 0 до 512
k:integer Текущий номер  элемента,

 элемент   в массиве и

 счетчик  числа итераций.

 Простая  переменная От 0 до 10

От 0 до 256

От 0 до 10

g:integer Текущий номер элемента, элемент  в массиве и счетчик числа итераций Простая переменная От 0 до 10

От 0 до 256

От 0 до 10

sum:integer Сумма свободной  памяти Простая переменная От 0 до 2560
w:integer Счетчик числа  итераций Простая переменная От 1  до 2
x:integer Счетчик числа  полностью занятых ячеек. Простая переменная От 1  до 10
 

Program Model_raspredelenia_pameati;

uses crt;

const n=10;

type massiv=array[1..n] of integer;

Label L1,L2,L3;

Var A:massiv;   y:string;   i,j,k,g,sum,w,x :integer;

  begin

 clrscr; randomize; {включение генератора случайных чисел }

 writeln('pameat polnosteu svobodna'); {вывод на экран сообщения'pameat polnosteu svobodna'}

 for i:=1 to n do

 begin

 A[i]:=256; {присваивание каждому элементу массива А 256 Мб свободной памяти}

writeln(A[i]); {вывод на экран массива А}

end;   readln(y);

L1:   sum:=0; {присваивание сумме свободной памяти значение  о}

         for i:= 1 to n do

         sum:=sum+A[i];

         j:=round(random*512); {загрузка процесса со случайным размером от 0 до 512Мб  в память, j присваиваются значения памяти, занимаемой процессом  }

         if j>sum then goto L2; {если j>sum то выводится сообщение: 'Mesta dlea zagruzki ne dostatochno  process postavlen v ochered'}

    x:=1;

   for i:= 1 to n do

   begin

   if A[i]=0 then x:=x+1;   end;

  k:=round(random(n-1-x))+x; {k присваивается произвольный номер массива, куда записывается процесс при условии ,что процесс не может записаться в ячейку, следующую сразу после полностью заполненной}

         writeln('process obemom ', j , 'Mb'); {вывод сообщения- 'process obemom ', j , 'Mb' }

         if k=0 then k:=1;

        if (j>256) and (k=n) {если размер пришедшего в ячейку памяти процесса больше, чем ее максимальный объем (т.е 256Мб), то выполняются идущие ниже действия}

    then k:=n-1;

        A[k]:=A[k]-j; {присваиваем ячейке, куда пришел процесс значение оставшейся свободной памяти в ячейки после вычета из нее занимаемой процессом памяти}

        while A[k]<0 do {пока свободная память в занимаемой ячейки массива будет иметь отрицательное значение выполняются идущие ниже действия}

begin

   g:=A[k]; {g присваивается значение свободной памяти в ячейке , куда загрузился процесс}

   A[k]:=0; {ячейке, в которую пришел процесс присваивается значение равное о }

   k:=k+1;

 A[k]:=A[k]+g; {к памяти соседней ячейки с ячейкой, в которую загрузился процесс, прибавляется оставшееся  отрицательное значение памяти процесса}

end;

 writeln('zagruzka novogo processa'); {вывод текстового сообщения 'zagruzka novogo processa'}

for i:=1 to n do

begin

writeln(A[i]); {вывод массива А с загруженным процессом }

end;

for w:=1 to 2 do

begin

i:=1;

while i <> n do {пока текущий номер элемента массива не равен последнему выполняются идущие ниже действия }

begin

 if (A[i] <> 256) then  {если текущий элемент массива является тем , в который уже загрузился процесс (частично или полностью), то выполняются идущие ниже действия}

 begin

 g:=i;

 while g <> 1 do  {пока текущий номер элемента в массиве не будет равен первому выполняются идущие ниже действия}

  begin

 if A[g-1] <> 256 then do  {если  значение соседнего элемента, с элементом куда загружался процесс не равно 256 , то выполняются идущие ниже действия}

  begin

 if A[g-1] > 256 - A[g] then {если памяти соседней ячейки хватает, чтобы записать процесс, то выполняются идущие ниже действия}

  begin

 k:=A[g-1] {k - присваиваем значение свободной памяти соседней ячейки}

A[g-1]:=k - 256 + A[g]; {сдвигаем ячейки , куда загрузился процесс,сжимая при этом процессы , с оставшейся от вычитания свободной памятью}

 A[g]:=A[g+1];

end

else    begin

 k:=A[g]; {k - присваиваем значение свободной памяти ячейки, куда загрузился процесс}

A[g]:=k + A[g-1]; {сдвигаем ячейки , куда загрузился процесс,сжимая при этом процессы , с оставшейся от вычитания свободной памятью}

 A[g-1]:=0;

  end;

  end

  else

  begin

 A[g-1]:=A[g]; ]; {сдвигаем ячейки , куда загрузился процесс,сжимая при этом        процессы , с оставшейся от вычитания свободной памятью}

 A[g]:=A[g+1];

 A[g+1]:=A[g+2];

  end;

  g:=g-1;

  end;

  end;

  i:=i+1;

  end;

   end;

   Writeln('posle sdviga i sgatiea'); ); {вывод текстового сообщения 'posle sdviga i sgatiea'}

  for i:=1 to n do

   begin

  writeln(A[i]); {вывод массива А  после сдвига и сжатия его элементов}

   end;

   Writeln('zagruzit eshe proces y/n'); ); {вывод текстового с предложением загрузить новый процесс}

    readln(y); {ввод строки символов}

   if y='y' then {если вводимый символ является 'y', то выполняется метка1( т.е ввод нового процесса , сдвиг и сжатие), иначе осуществляется выход из программы}

  begin

  goto L1

  end

  else

  begin

  goto L3;

  end;

L2: writeln('process obemom ', j , 'Mb') ;

writeln('Mesta dlea zagruzki ne dostatochno  process postavlen v ochered');

L3: readln;

end. 

2.4 Тестирование программы реализация модели распределения памяти перемещаемыми разделами 

         В результате работы программы был получен следующий результат:

         На экране появляется первый массив, представляющий пустую память (Тест 1)

   pameat polnosteu svobodna

   256

   256

   256

   256

   256

   256

   256

   256

   256

   256

   Тест1    Пустая память

            В пустую память загружается первый процесс, объемом 297Мб, организуется сдвиг и сжатие (Тест2).

   

                              Тест2   Загрузка первого процесса, сдвиг и сжатие

     При нажатии клавиши  «у» происходит загрузка следующего процесса, при нажатии «n» происходит выход из программы (Тест3)

   

                                           Тест3   Загрузка второго  процесса 

     Загрузка процессов, сдвиг и  сжатие происходит до того  момента пока для этого достаточно  памяти, в противном случае выводится  сообщение о постановки процесса  в очередь и при нажатии любой клавиши происходит автоматический выход из программы (Тест4)

   

 

                                 Тест4    Загрузка последнего процесса. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Заключение

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

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

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

Информация о работе Реализация модели распределения памяти перемещаемыми разделами с перемещением в сторону старших адресов со сжатием при каждом