Showing posts with label SYSTEM PROGRAMMING. Show all posts
Showing posts with label SYSTEM PROGRAMMING. Show all posts

Tuesday, June 5, 2012

Bankers algorithm (SYSPRO)


//  Program: Bankers algorithm

#include<stdio.h>
#include<conio.h>
#include<math.h>

int m,n;
int avl[20];
int max[20][20];
int need[20][20];
int allocat[20][20];
int finish[20];
int work[20];
int ssindex;
int safe_seq[20];
void find_need();
void get_data(int mat[20][20]);
void safety_algorithm(int p);
int chk_safe();
void resource_request();

void main()
{
      int flag=0;
      int r,p,i;
      clrscr();
      printf("\nHow many process u want:");
      scanf("%d",&n);
      printf("\n How many resources u want:");
      scanf("%d",&m);
      printf("\n Enter allocation matrix");
      get_data(allocat);
      printf("\nEnter max matrix");
      get_data(max);
      printf("\nenter available resources:");
      for(r=0;r<m;r++)
      scanf("%d",&avl[r]);
      find_need();
      for(r=0;r<m;r++)
      {
            work[r]=avl[r];
            finish[r]=0;
      }
      for(p=0;p<n;p++)
      {
            flag=0;
            for(r=0;r<m;r++)
            if(need[p][r]>work[r])
            {
                  flag=1;
                  break;
            }
            if(flag==0)
            {
                  safety_algorithm(p);
                  finish[p]=1;
                  safe_seq[ssindex]=p;
                  ssindex++;
            }
      }
      getch();
      printf("safe sequence is:");
      printf("<");
      for(i=0;i<ssindex;i++)
            printf("p%d ",safe_seq[i]);
            printf(">\n\n");
      if(chk_safe())
            printf("\nEntered sequence is safe:");
      else
            printf("\nEntered sequence is not safe:");
            getch();
            //printf("Enter process id for request:");
            //scanf("%d",&p);
            printf("\nEnter request for %d resources",m);
            //for(r=0;r<m;r++)
            //for(p=0;p<n;p++)
            for(r=0;r<m;r++)
                  scanf("%d",&max[p][r]);
                  resource_request();
}//main

void find_need()
{
      int p,r;
      for(p=0;p<n;p++)
      for(r=0;r<m;r++)
      need[r][p]=max[p][r]-allocat[p][r];
      //need=max_requirement-currnt_allocation
}

void get_data(int mat[20][20])
{
      int r,p;
      for(p=0;p<n;p++)
      for(r=0;r<m;r++)
      scanf("%d",&mat[p][r]);
}

void safety_algorithm(int p)
{
      int r=0;
      for(r=0;r<m;r++)
      work[r]=work[r]+allocat[p][r];
}

int chk_safe()
{
      int i;
      for(i=0;i<n;i++)
      if(finish[i]==0)
            return(0);
            return(1);
}

void resource_request()
{
      int r,p;
      for(r=0;r<m;r++)
      if(max[p][r]>need[r][p])
      {
            printf("\n Process has exceeded it's max limit");
            getch();
            exit(0);
      }//if
      for(r=0;r<m;r++)
      if(max[p][r]>avl[r])
      {
            printf("\n Resourses are not available pricess should wait");
            getch();
            exit(0);
      }//if
      for(r=0;r<m;r++)
      {
            avl[r]-=max[p][r];
            allocat[r][p]+=max[p][r];
            need[r][p]-=max[p][r];
      }//for
      if(chk_safe())
      {
            printf("\n Request can be imidiately granted");
            //printf_safe();
            getch();
      }
      else
      {
            printf("\n Request can not be granted");
            getch();
      }
}

/* OUTPUT:

How many process u want:5                                                      

How many resources u want:4

Enter allocation matrix:
0 6 3 2
0 0 1 2
1 0 0 0
1 3 5 4
0 0 1 4

Enter max matrix:
0 6 5 2
0 0 1 2
1 7 5 0
2 3 5 6
0 6 5 6

Enter available resources:3 14 12 12
safe sequence is:<p0 p1 p2 p3 p4 >

Entered sequence is safe:
Enter request for 4 resources 1 2 0 1
Process has exceeded it's max limit
*/ 



Friday, June 1, 2012

CPU-Scheduling FCFS(First Come First Serve) - SYSPRO


#include<stdio.h>
#define MAX 3

struct job
{
int at, bt, wt, tat, index;
};

void main()
{
struct job p[MAX], temp;
int i, j, clk, idl, ttat, twt;
clrscr();

for(i=0;i<MAX;i++)
{
printf("\nEnter AT : ");
scanf("%d",&p[i].at);
printf("\nEnter BT : ");
scanf("%d",&p[i].bt);
p[i].index=i+1;
}

printf("\nPro    AT BT");
for(i=0;i<MAX;i++)
{
printf("\nP%d  %d %d",p[i].index,p[i].at,p[i].bt);
}

for(i=0;i<MAX;i++)
{
for(j=i+1;j<MAX;j++)
{
if(p[i].at>p[j].at)
{
temp=p[j];
p[j]=p[i];
p[i]=temp;
}
}
}
printf("\nAfter sort\n");

printf("\nPro    AT BT");
for(i=0;i<MAX;i++)
{
printf("\n%d %d %d",p[i].index,p[i].at,p[i].bt);
}


clk=0;
idl=0;

printf("\nGantt Chart : ");

printf(" %d ",clk);

for(i=0;i<MAX;i++)
{
if(clk<p[i].at)
{
idl+=p[i].at-clk;
clk=p[i].at;
printf("|/////| %d ",clk);
}
p[i].wt=clk-p[i].at;
clk=clk+p[i].bt;
p[i].tat=clk-p[i].at;
printf("| P%d | %d ",p[i].index,clk);
}

printf("\n\n\nAfter Exc\n");
printf("\nPro    AT   BT  WT   TAT");
for(i=0;i<MAX;i++)
{
printf("\n%d %d %d %d %d",p[i].index,p[i].at,p[i].bt,p[i].wt,p[i].tat);
}


getch();
}

Saturday, May 19, 2012

Assembler (System Programming)


// Program  : Assembler


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 50
struct symtab
{
char name[20];
int addr,len,value,used,dcl;
}SYM[MAX];

char symtab[][5]={"STOP","ADD","SUB","MUL","MOVER","MOVEM","COMP","BC","DIV","READ","PRINT"};
char directive[][10]={"START","END","ORIGIN","EQU"};
char regtab[][10]={"","AREG","BREG","CREG","DREG"};
char condtab[][5]={"LT","LE","EQ","GT","GE","ANY"};

int symbcnt,pc,tokcnt;
char srcfile[MAX],tok1[MAX],tok2[MAX],tok3[MAX],tok4[MAX],buffer[80];
FILE *fp;

int searchop(char *str)
{
int l;
for(l=0;l<11;l++)
{
if(strcmp(symtab[l],str)==0)
return l;
}
return -l;
}

int searchdir(char *str)
{
int l;
for(l=0;l<4;l++)
{
if(strcmp(directive[l],str)==0)
return l;
}
return -1;

}

int searchsymb(char *str)
{
int l;
for(l=0;l<=symbcnt;l++)
{
if(strcmp(SYM[l].name,str)==0)
return l;
}
return -l;
}

void DispSymtab()
{
int l;
for(l=0;l<symbcnt;l++)
{
if(SYM[l].used==0 && SYM[l].dcl==1)
printf("\n Symbol %s declared but not used",SYM[l].name);
if(SYM[l].used==1 &&SYM[l].dcl==0)
printf("\n Symbol %s used but not declared",SYM[l].name);

}
}

//int main(int argc,char *argv[])
//{
void main()
{
clrscr();
/*if(argc!=2)
{
printf("Wrong input\n");
exit(1);
}
strcpy(srcfile,argv[1]);
*/
pass1();
DispSymtab();
getch();
// return 0;
}



 pass1()
{
int i,j,k;
printf("Enter File Name");
scanf("%s",srcfile);
//puts(srcfile);
fp=fopen(srcfile,"r");
if(fp==NULL)
{
printf("File does not exist");
exit(0);
}
while(fgets(buffer,80,fp))
{
tokcnt=sscanf(buffer,"%s%s%s%s",tok1,tok2,tok3,tok4);
       // printf("%d",tokcnt);
switch(tokcnt)
{
case 2:
i=searchop(tok1);
if(i==9||i==10)
{
j=searchsymb(tok2);
if(j==-1)
{
strcpy(SYM[symbcnt].name,tok2);
SYM[symbcnt++].used=1;
}
else
SYM[j].used=1;
break;
}
i=searchdir(tok1);
if(i==0||i==2)
{
pc=atoi(tok2)-1;
}
else
{
i=searchop(tok2);
if(i==0)
{
j=searchsymb(tok1);
if(j==-1)
{
strcpy(SYM[symbcnt].name,tok1);
SYM[symbcnt].addr=pc;
SYM[symbcnt].value=0;
SYM[symbcnt].dcl=1;
SYM[symbcnt++].len=0;
}
else
{
if(SYM[j].dcl==1)
printf("\n Error at line %d:redeclaration of symbol:%s",pc,tok1);
else
{
SYM[j].addr=pc;
SYM[j].value=0;
SYM[j].dcl=1;
SYM[j].len=0;
}//else

} //else

}//if

}//else
break;
case 3:
     i=searchop(tok1);
     if(i>=1&&i<=8)
     {
j=searchsymb(tok3);
if(j==-1)
{
strcpy(SYM[symbcnt].name,tok3);
SYM[symbcnt++].used=1;

}//if
else
SYM[j].used=1;


     } //if
     else if(strcmp(tok2,"DC")==0)
     {
j=searchsymb(tok1);
if(j==-1)
{
strcpy(SYM[symbcnt].name,tok1);
SYM[symbcnt].addr=pc;
SYM[symbcnt].value=atoi(tok3);
SYM[symbcnt].dcl=1;
SYM[symbcnt++].len=1;
}
else
{
if(SYM[j].dcl==1)
{
printf("\nError at line %d :redeclaration of symb %s",pc,tok1);
}
else
{
SYM[j].addr=pc;
SYM[j].value=atoi(tok3);
SYM[j].dcl=1;
SYM[j].len=1;
}//else
}//else

     } //else if
     else if(strcmp(tok2,"DS")==0)
     {
j=searchsymb(tok1);
if(j==-1)
{
strcpy(SYM[symbcnt].name,tok1);
SYM[symbcnt].addr=pc;
SYM[symbcnt].value=atoi(tok3);
SYM[symbcnt].dcl=1;
SYM[symbcnt++].len=atoi(tok3);
}
else
{
if(SYM[j].dcl==1)
{
printf("\nError at line %d :redeclaration of symb %s",pc,tok1);
}
else
{
SYM[j].addr=pc;
SYM[j].value=0;
SYM[j].dcl=1;
SYM[j].len=atoi(tok3);
}//else
}//else
pc+=atoi(tok3)-1;
     }//else if
     else
     {
j=searchsymb(tok1);
if(j==-1)
{
strcpy(SYM[symbcnt].name,tok1);
SYM[symbcnt].addr=pc;
SYM[symbcnt].value=0;
SYM[symbcnt].dcl=1;
SYM[symbcnt++].len=0;
} //if
else
{       if(SYM[j].dcl==1)
printf("\n Error at line %d:redeclaration of symbol:%s",pc,tok1);
else
{
SYM[j].addr=pc;
SYM[j].value=0;
SYM[j].dcl=1;
SYM[j].len=0;
}//else
}//else
i=searchop(tok2);
if(i==9 || i==10)
{
j=searchsymb(tok3);
if(j==-1)
{
strcpy(SYM[symbcnt].name,tok3);
SYM[symbcnt++].used=1;
}
else
SYM[j].used=1;
}//if

     }//if
     break;
case 4:
j=searchsymb(tok1);
if(j==-1)
{
strcpy(SYM[symbcnt].name,tok1) ;
SYM[symbcnt].addr=pc;
SYM[symbcnt].value=0;
SYM[symbcnt].dcl=1;
SYM[symbcnt].len=0;
}//if
else
{
      if(SYM[j].dcl==1)
      printf("\n Error at line %d:redeclaration of symbol:%s",pc,tok1);
      else
      {
SYM[j].addr=pc;
SYM[j].value=0;
SYM[j].dcl=1;
SYM[j].len=0;
}//else
}//else
i=searchop(tok2);
if(i>=1 && i<=8)
{
j=searchsymb(tok4);
if(j==-1)
{
strcpy(SYM[symbcnt].name,tok4);
SYM[symbcnt++].used=1;
}
else
SYM[j].used=1;
}
break;

}//switch


}//while
 return 0;
}//pass1

/* OUTPUT   


START 100,2
READ A
MOVER A,AREG
BDD AREG,A
A MOVEM AREG,'=2'
STOP
x DS 1
y DS 1
END

START 100
READ A
B MOVER BREG,A
ADD BREG,A
A MOVEM AREG,Z
STOP
A DS 1
B DS 1
END

Enter File Namec:\neel\ass2.txt

Error at line 99 :redeclaration of symb A
Error at line 99 :redeclaration of symb B

Enter File Name c:\neel\ass3.txt

Error at line 99 :redeclaration of symb y

*/


??

??

??

??




1


??

??

??

??




2