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

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

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

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


lehf
**

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

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


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

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

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

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

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

Спасибо за хотя бы какие-нибудь предложения. Извините,если я что не так сделала.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Ellsa
сообщение 16.12.2007 18:39
Сообщение #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

 



- Текстовая версия 30.07.2025 8:17
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"