program tpse;

uses crt ;

type processus=record

         n1:0..20;

         n2:0..20;

         tab:array[1..20,1..16]of integer;

         end;

   processeur=array[1..16] of integer;

   var w,r:processus;

   p:processeur;



procedure init_processeur(var p:processeur);

var i:integer;

begin

for i:=1 to 16 do p[i]:=0;

end;



procedure remplire_ready(var r:processus;nb1:integer);

var m,n,i:integer;

begin

i:=r.n2+1;

for m:=i to i+nb1-1 do

begin

if(r.n2<15)then

 begin

 r.n1:=r.n1+1;

 r.n2:=r.n2+1;
for n:=1 to 16 do r.tab[m,n]:=1;

 r.tab[m,10]:=r.n1;

 end;

end;

end;

procedure afficher_processus(w:processus);

var m,n:integer;

begin

for m:=1 to w.n2 do begin

            for n:=1 to 16 do write(w.tab[m,n]:4);

            writeln;

            end;

end;



procedure affiche_processeur (p:processeur);

var i:integer;

begin

for i:=1 to 16 do write(p[i]:4);

writeln;

end;

procedure transition_ready_to_run(var r:processus;var p:processeur);

var i,j:integer;

begin

for i:=1 to 16 do p[i]:= r.tab[1,i];

for i:=2 to r.n2 do for j:=1 to 16 do r.tab[i-1,j]:=r.tab[i,j];

r.n2:=r.n2-1;

end;
procedure transition_ran_ready (var p:processeur;var r:processus);

var i:integer;

begin

if (r.n2<20)then begin

           r.n2:=r.n2+1;

           for i:=1 to 16 do

           r.tab [r.n2,i]:=p[i];

           r.tab[r.n2,6]:=1;

           end;

p[1]:=0;

end;

procedure transition_wate_to_ready(var r,w :processus);

var i:integer;

begin

if (r.n2<15) then begin

            r.n2:=r.n2+1;

            for i:=1 to 16 do

            r.tab [r.n2,i]:=w.tab[w.n2,i];

            end;

w.n2:=w.n2-1;

end;



procedure transition_run_to_wait(var w:processus;var p:processeur);

var i:integer;

begin

if (w.n2<15) then begin

            w.n2:=w.n2+1;
for i:=1 to 16 do

           w.tab [w.n2,i]:=p[i];

           end;

p[1]:=0;

end;

 procedure teste(var r,w:processus;var p:processeur);

 begin

 if (p[1]=0)then transition_ready_to_run(r,p)

 else if (p[5]=0) then transition_run_to_wait(w,p)

    else if(p[6]=0)then

    transition_ran_ready (p,r);

 if (w.tab[w.n2,5]=1)then transition_wate_to_ready(r,w);

 if(p[1]=0)then transition_ready_to_run(r,p);

 end;



procedure help;

begin



writeln ('1:remplir la matrice ready');



writeln('2:entre le bit que vous voulez metre a 0 dans le processeur');



writeln('3:entre le bit que vous voulez metre a 1 dans le processeur');



writeln('4:metre a 1 le 5éme bit de dernier ligne dans W');



writeln('5:afficher le processeur');
writeln('6:afficher les processus ready');



writeln('7:afficher les processus wait');



writeln('8:help');

end;




var choix:char;

  k:integer;



begin

textcolor(20);

clrscr;

init_processeur(p);

r.n2:=0;

r.n1:=0;

w.n2:=0;

w.n1:=0;

writeln ('1:remplir la matrice ready');

writeln('2:entre le bit que vous voulez metre a 0 dans le processeur');

writeln('3:entre le bit que vous voulez metre a 1 dans le processeur');

writeln('4:metre a 1 le 5éme bit de dernier ligne dans W');

writeln('5:afficher le processeur');

writeln('6:afficher les processus ready');

writeln('7:afficher les processus wait');
writeln('8:help');

repeat

write('entre votre choix: ');

readln(choix);

case choix of

'1':begin

  write('entre le nombre de processus: ');

         readln(k);

         remplire_ready(r,k);

         end;

'2':begin

  readln(k);

         if(k<17)and(k<>10)then p[k]:=0;

         end;

'3':begin

  readln(k);

         if(k<17)and(k<>10)then p[k]:=1;

         end;

'4':w.tab[w.n2,5]:=1;

'5':affiche_processeur(p);

'6':afficher_processus(r);

'7':afficher_processus(w);

'8':help;

end;

teste(r,w,p);

until(choix='q');

end.
Program tpse

Program tpse

  • 1.
    program tpse; uses crt; type processus=record n1:0..20; n2:0..20; tab:array[1..20,1..16]of integer; end; processeur=array[1..16] of integer; var w,r:processus; p:processeur; procedure init_processeur(var p:processeur); var i:integer; begin for i:=1 to 16 do p[i]:=0; end; procedure remplire_ready(var r:processus;nb1:integer); var m,n,i:integer; begin i:=r.n2+1; for m:=i to i+nb1-1 do begin if(r.n2<15)then begin r.n1:=r.n1+1; r.n2:=r.n2+1;
  • 2.
    for n:=1 to16 do r.tab[m,n]:=1; r.tab[m,10]:=r.n1; end; end; end; procedure afficher_processus(w:processus); var m,n:integer; begin for m:=1 to w.n2 do begin for n:=1 to 16 do write(w.tab[m,n]:4); writeln; end; end; procedure affiche_processeur (p:processeur); var i:integer; begin for i:=1 to 16 do write(p[i]:4); writeln; end; procedure transition_ready_to_run(var r:processus;var p:processeur); var i,j:integer; begin for i:=1 to 16 do p[i]:= r.tab[1,i]; for i:=2 to r.n2 do for j:=1 to 16 do r.tab[i-1,j]:=r.tab[i,j]; r.n2:=r.n2-1; end;
  • 3.
    procedure transition_ran_ready (varp:processeur;var r:processus); var i:integer; begin if (r.n2<20)then begin r.n2:=r.n2+1; for i:=1 to 16 do r.tab [r.n2,i]:=p[i]; r.tab[r.n2,6]:=1; end; p[1]:=0; end; procedure transition_wate_to_ready(var r,w :processus); var i:integer; begin if (r.n2<15) then begin r.n2:=r.n2+1; for i:=1 to 16 do r.tab [r.n2,i]:=w.tab[w.n2,i]; end; w.n2:=w.n2-1; end; procedure transition_run_to_wait(var w:processus;var p:processeur); var i:integer; begin if (w.n2<15) then begin w.n2:=w.n2+1;
  • 4.
    for i:=1 to16 do w.tab [w.n2,i]:=p[i]; end; p[1]:=0; end; procedure teste(var r,w:processus;var p:processeur); begin if (p[1]=0)then transition_ready_to_run(r,p) else if (p[5]=0) then transition_run_to_wait(w,p) else if(p[6]=0)then transition_ran_ready (p,r); if (w.tab[w.n2,5]=1)then transition_wate_to_ready(r,w); if(p[1]=0)then transition_ready_to_run(r,p); end; procedure help; begin writeln ('1:remplir la matrice ready'); writeln('2:entre le bit que vous voulez metre a 0 dans le processeur'); writeln('3:entre le bit que vous voulez metre a 1 dans le processeur'); writeln('4:metre a 1 le 5éme bit de dernier ligne dans W'); writeln('5:afficher le processeur');
  • 5.
    writeln('6:afficher les processusready'); writeln('7:afficher les processus wait'); writeln('8:help'); end; var choix:char; k:integer; begin textcolor(20); clrscr; init_processeur(p); r.n2:=0; r.n1:=0; w.n2:=0; w.n1:=0; writeln ('1:remplir la matrice ready'); writeln('2:entre le bit que vous voulez metre a 0 dans le processeur'); writeln('3:entre le bit que vous voulez metre a 1 dans le processeur'); writeln('4:metre a 1 le 5éme bit de dernier ligne dans W'); writeln('5:afficher le processeur'); writeln('6:afficher les processus ready'); writeln('7:afficher les processus wait');
  • 6.
    writeln('8:help'); repeat write('entre votre choix:'); readln(choix); case choix of '1':begin write('entre le nombre de processus: '); readln(k); remplire_ready(r,k); end; '2':begin readln(k); if(k<17)and(k<>10)then p[k]:=0; end; '3':begin readln(k); if(k<17)and(k<>10)then p[k]:=1; end; '4':w.tab[w.n2,5]:=1; '5':affiche_processeur(p); '6':afficher_processus(r); '7':afficher_processus(w); '8':help; end; teste(r,w,p); until(choix='q'); end.