IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Модель распределения памятью, помогите с алгоритмом
сообщение
Сообщение #1


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


Всем привет.
Помогите пожалуйста с алгоритмом решения задачи.
Тема:реализация модели управления памятью с помощью битовых массивов.
Суть:память делится на блоки определенной величины.Подается процесс (навенрно я буду вводить с клавиатуры его размер,чтоб потом узнать сколько блоков он занимает).Если необходимое количество блоков есть-я занимаю их этим процессом и рассматриваю следующий процесс.

Каждому блоку в битовой карте соответствует бит,равные еденице,если процесс выполняется,и равный нулю,если процесс закончился и освободил эту область памяти.

у меня несколько вопросов.

1. как узнать что процесс закончился?
Я думала,может вводить его длительность с клавиатуры?Но я не умею работать с реальным,так сказать,временем.Может мне выразить время в каких-либо еденицах,например t и поставить счетчик,чтоб когда достигло такого-то значения-обнулился бит?
Но ведь счетчик надо ставить на какое-то условие.....
и вообще,не уверена,что этот метод разумен.

2. как сделать такчтоб пока один процесс выполняется-взяться за другой?

Спасибо за хотя бы какие-нибудь предложения. Извините,если я что не так сделала.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


То, о чем ты пишешь, называется менеджером памяти.
Обычно он реализуется либо средствами ОС, либо самой выполняющейся программы (когда есть основания полагать, что ОС будет распределять память неоптимально.
1. Об этом должен сообщить сам процесс.
2. Память выдается (и возвращается) по запросу: отдал кусок памяти, вернул управление процессу, ждешь следующего запроса.

Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


возможно,но мне нужно написать программу,и я не понимаю,как процесс мне сообщит что он закончен и какого запроса мне ждать,если я вроде бы сама ввожу все эти запросы....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


А я не понимаю, что именно должна делать твоя программа.
Во-первых, менеджер памяти предполагается как часть программы, использующей память, или как часть ОС?
Собственно, и в первом и во втором случае процесс должен сообщить менеждеру памяти о том, что ему требуется какое-то количество памяти. Иначе он, естественно, никакой памяти не получит. Точно таким же способом он должен сообщить менеджеру, что память ему больше не нужна.
Случай, когда проесс по каким-то причинам вернул не всю запрошенную память (что свидетельствует о том, что процесс написан неправильно), будет обрабатываться по-разному в случае со встроеммым либо внешним менеджером памяти. При встроенном он заканчивает работу вместе с программой и аккуратное возвращение всей запрошенной памяти ОСи перекладывается уже на ее собственый менеджер памяти.
Если же мы рассматриваем менедлер памяти ОС, то его работа начинается раньше, чем будет запущен процесс - ведь для него сначала надо выделить память, и только потом в эту память можно будет загрузить коды запускаемого процесса. В процессе работы процесса менеджер памяти ведет учет памяти, запрошенной КАЖДЫМ процессом, а о его завершении ОС, естественно, сообщает менеджеру, после чего менеджер освобождает ВСЮ память, отведенную процессу - как запрошенную им в процессе работы, так и выделенную для загрузки кодов.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


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

 program kyrs;
type mas=array [1..100] of integer;
masbool=array [1..100] of boolean;
massiv=array [1..100] of real;
var
i,j,l,m,s,n,time,o:integer;
block:integer;
p:massiv;
works:masbool;
b,fl:boolean;
r,t,x,k,nomer:mas;
begin
writeln('vvedite koli4estvo processov');
readln(n);
writeln('vvedite kolichestvo bitov pamyati');
readln(m);
writeln ('vvedite razmeri processov');
for i:=1 to n do
readln(r[i]);
writeln ('vvedite dlitelnosti');
for i:=1 to n do readln(t[i]);
writeln('vvedite razmer bloka');
readln(o);
begin
j:=1;fl:=false; b:=true;time:=0;
for i:=1 to n do
works[i]:=false;
for i:=1 to n do k[i]:=round(r[i]/o);

while (b) do
for i:=1 to n do
begin
if (works[i]=true) then begin
t[i]:=t[i]-1;writeln ('process',i,'rabotaet');
while ((j<=n) and (not fl)) do

begin
s:=j+1;
if (p[j]=0) then

begin
if (k[i]=1) then

begin
fl:=true;
works[i]:=true;
nomer[i]:=1;
end;

block:=1;
while ((s<=n) and (p[j]=0) and (not fl)) do

begin
block:=block+1;
if (block=k[i]) then

begin
fl:=true;
works[i]:=true;
nomer[i]:=s;
end;

j:=j+1;

end;

end;

if not (fl) then i:=j;
end;

if not (fl) then writeln('no') else

begin
nomer[i]:=s;
for l:=i to (k[i]-1) do

begin
p[l]:=1;
writeln(l,' ');
end;

readln;
end;
b:=false;
if t[i]<=0 then

begin
works[i]:=false;
writeln('process',i,'zaverwilsya');
j:=nomer[i];
for j:=nomer[i]-k[i] to nomer[i] do p[j]:=0;
end;

end;


end;
end;
end.









 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.11.2020 3:19
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name