Showing posts with label SYSTEM PROGRAMMING. Show all posts
Showing posts with label SYSTEM PROGRAMMING. Show all posts
Saturday, April 20, 2013
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
Subscribe to:
Posts (Atom)