помогите пожалуйста с задачей на реализацию памяти.

Тема в разделе "Delphi - Система", создана пользователем ellsa, 16 дек 2007.

  1. ellsa

    ellsa Гость

    Здравствуйте,мне нужна помощь по задаче.
    помогите,пожалуйста.

    Задача написана на паскале.

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

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


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


    Код (Text):
     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.
     
Загрузка...
Похожие Темы - помогите пожалуйста задачей
  1. likan
    Ответов:
    1
    Просмотров:
    1.068
  2. Comoc
    Ответов:
    0
    Просмотров:
    928
  3. Lizzz
    Ответов:
    0
    Просмотров:
    994
  4. limbra
    Ответов:
    3
    Просмотров:
    43
  5. uxbmw3w
    Ответов:
    0
    Просмотров:
    60

Поделиться этой страницей