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

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

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

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


lehf
**

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

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


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

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

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

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

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

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


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

 





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