Автор работы: Пользователь скрыл имя, 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
Процесс
загрузки будет продолжаться до тех
пор, пока для вновь пришедшего процесса
будет хватать свободного места в ячейках,
в противном случае на экране появится
сообщение о постановки процесса в очередь:
'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)
Загрузка процессов, сдвиг и
сжатие происходит до того
момента пока для этого
Заключение
Оперативная память компьютера играет особую роль. Это обусловлено тем, что программа может выполняться только в том случае, если она находится в памяти. Операционная система способна осуществлять много функций для рационального управления памятью.
Выделим несколько основных