Форум программистов, компьютерный форум CyberForum.ru

С Паскаля на С++. Реализация модели распределения памяти. - C++

Восстановить пароль Регистрация
 
_LenOk_
0 / 0 / 0
Регистрация: 06.03.2012
Сообщений: 6
28.03.2012, 22:37     С Паскаля на С++. Реализация модели распределения памяти. #1
Задание. Программа реализация модели распределения памяти перемещаемыми разделами.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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 минуты
P.S. еще я не знаю как сделать, чтобы поступаемые на выполнение задачи содержались в файлах, которые пользователь мог бы загружать в моделируемую память и выгружать из нее.

Добавлено через 1 час 3 минуты
плиззз...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2012, 22:37     С Паскаля на С++. Реализация модели распределения памяти.
Посмотрите здесь:

C++ Выделить в памяти 1024 ячейки по 8 байт и вывести их адреса(МИНИ менеджер памяти))
C++ Реализация стека на массиве и динамическом распределении памяти
C++ Распределение памяти. Динамическое выделение памяти
резервирование памяти/освобождение памяти для трехмерного массива C++
C++ Модель распределения памяти разделами переменного размера с общей очередью, стратегия "наименее подходящий"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.03.2012, 22:44     С Паскаля на С++. Реализация модели распределения памяти. #2
Pascal
1
goto L1
гоуту это страшное зло в высокоуровневых языках.
отбивает всякое желание смотреть код
легче в ассемблере разбираться
_LenOk_
0 / 0 / 0
Регистрация: 06.03.2012
Сообщений: 6
29.03.2012, 09:08  [ТС]     С Паскаля на С++. Реализация модели распределения памяти. #3
понимаю, но нужно срочно... сама с++ не знаю почти
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
29.03.2012, 10:03     С Паскаля на С++. Реализация модели распределения памяти. #4
Цитата Сообщение от _LenOk_ Посмотреть сообщение
понимаю, но нужно срочно... сама с++ не знаю почти
срочно это во фриланс
было бы замечательно если бы еще автор написал задачу и алгоритм
_LenOk_
0 / 0 / 0
Регистрация: 06.03.2012
Сообщений: 6
30.03.2012, 01:58  [ТС]     С Паскаля на С++. Реализация модели распределения памяти. #5
Задание. Разработать программу, моделирующую алгоритм управления памятью. Распределение памяти перемещаемыми разделами. При моделировании считать, что поступаемые на выполнение задачи содержаться в файлах, которые пользователь может загружать в моделируемую "память" и выгружать из нее. Программа должна иметь возможность просмотра состояния моделируемой "памяти"
Yandex
Объявления
30.03.2012, 01:58     С Паскаля на С++. Реализация модели распределения памяти.
Ответ Создать тему
Опции темы

Текущее время: 05:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru