User:Gayu2227
FCFS
#include<stdio.h> #include<stdlib.h> int main() { int RQ[100],i,n,TotalHeadMoment=0,initial; printf("Enter the number of Requests\n"); scanf("%d",&n); printf("Enter the Requests sequence\n"); for(i=0;i<n;i++) scanf("%d",&RQ[i]); printf("Enter initial head position\n"); scanf("%d",&initial); // logic for FCFS disk scheduling for(i=0;i<n;i++) { TotalHeadMoment=TotalHeadMoment+abs(RQ[i]-initial); initial=RQ[i]; } printf("Total head moment is %d",TotalHeadMoment); return 0; }
SSTF
#include<stdio.h> #include<stdlib.h> int main() { int RQ[100],i,n,TotalHeadMoment=0,initial,count=0; printf("Enter the number of Requests\n"); scanf("%d",&n); printf("Enter the Requests sequence\n"); for(i=0;i<n;i++) scanf("%d",&RQ[i]); printf("Enter initial head position\n"); scanf("%d",&initial);
while(count!=n) { int min=1000,d,index; for(i=0;i<n;i++) { d=abs(RQ[i]-initial); if(min>d) { min=d; index=i; } } TotalHeadMoment=TotalHeadMoment+min; initial=RQ[index]; // 1000 is for max // you can use any number RQ[index]=1000; count++; } printf("Total head movement is %d",TotalHeadMoment); return 0; }
SCAN
#include <stdio.h> #include <stdlib.h> main() { int nBlocks,headDirection,th,temp, currentPosition,nRequest,i,j; int *diskRequestString; printf("\tEnter Number of Request : "); scanf("%d",&nRequest); printf("\tEnter Number of Blocks : "); scanf("%d",&nBlocks); printf("\tHead Direction : "); scanf("%d",&headDirection); printf("\tCurrent Position : ");
scanf("%d",¤tPosition); diskRequestString = (int*) malloc(sizeof(int)*nRequest); for(i=0; i<nRequest; i++) { printf("\ttrack no : "); scanf("%d",&diskRequestString[i]); } // {98,183,37,122,14,124,65,67 }; for(i=0; i<nRequest; i++) { for(j=i+1; j<nRequest; j++) { if( diskRequestString[i] > diskRequestString[j]) { temp = diskRequestString[i]; diskRequestString[i] = diskRequestString[j]; diskRequestString[j] = temp; } } } if( headDirection == 1 ) { th = (nBlocks-currentPosition) + (nBlocks-diskRequestString[0]); for(i=0; i<nRequest; i++) { if( diskRequestString[i] >= currentPosition) break; } temp = i; printf("%d",currentPosition); for(; i<nRequest; i++) printf("->%d",diskRequestString[i]); printf("->%d",nBlocks-1); for(i=temp-1; i>=0; i--) printf("->%d",diskRequestString[i]); } else { th = currentPosition + diskRequestString[nRequest-1];
for(i=0; i<nRequest; i++) { if( diskRequestString[i] > currentPosition) break; } temp = i; printf("%d",currentPosition); for(i--; i>=0; i--) printf("->%d",diskRequestString[i]); printf("->0"); for(i=temp; i<nRequest; i++) printf("->%d",diskRequestString[i]); } printf("\ntotal head movements observed : %d\n",th); }
C-SCAN
#include<stdio.h> #include<stdlib.h> int main() { int RQ[100],i,j,n,TotalHeadMoment=0,initial,size,move; printf("Enter the number of Requests\n"); scanf("%d",&n); printf("Enter the Requests sequence\n"); for(i=0;i<n;i++) scanf("%d",&RQ[i]); printf("Enter initial head position\n"); scanf("%d",&initial); printf("Enter total disk size\n"); scanf("%d",&size);
printf("Enter the head movement direction for high 1 and for low 0\n"); scanf("%d",&move); // logic for C-Scan disk scheduling /*logic for sort the request array */ for(i=0;i<n;i++) { for( j=0;j<n-i-1;j++) { if(RQ[j]>RQ[j+1]) { int temp; temp=RQ[j]; RQ[j]=RQ[j+1]; RQ[j+1]=temp; } } } int index; for(i=0;i<n;i++) { if(initial<RQ[i]) { index=i; break; } } // if movement is towards high value if(move==1) { for(i=index;i<n;i++) { TotalHeadMoment=TotalHeadMoment+abs(RQ[i]-initial); initial=RQ[i]; } // last movement for max size TotalHeadMoment=TotalHeadMoment+abs(size-RQ[i-1]-1); /*movement max to min disk */ TotalHeadMoment=TotalHeadMoment+abs(size-1-0); initial=0; for( i=0;i<index;i++) { TotalHeadMoment=TotalHeadMoment+abs(RQ[i]-initial); initial=RQ[i];
} } // if movement is towards low value else { for(i=index-1;i>=0;i--) { TotalHeadMoment=TotalHeadMoment+abs(RQ[i]-initial); initial=RQ[i]; } // last movement for min size TotalHeadMoment=TotalHeadMoment+abs(RQ[i+1]-0); /*movement min to max disk */ TotalHeadMoment=TotalHeadMoment+abs(size-1-0); initial =size-1; for(i=n-1;i>=index;i--) { TotalHeadMoment=TotalHeadMoment+abs(RQ[i]-initial); initial=RQ[i]; } } printf("Total head movement is %d",TotalHeadMoment); return 0; }
BANKER ALGORITHM
/*------------------------------------------------------------ Set B : Q.1) Consider the following snapshot of a system: Allocation Max Available A B C A B C A B C P0 0 1 0 7 5 3 3 3 2 P1 2 0 0 3 2 2 P2 3 0 2 9 0 2 P3 2 1 1 2 2 2 P4 0 0 2 4 3 3
1) Display the contents of Need array.
2) Check whether the system is in safe state or not. If yes, give the safe sequence.
3)If a request from process P1 arrives for (1,0,2) can it be immediately granted?
#include<stdio.h>
int n,m;//n for no of process and m is for no of resources int alloc[10][10],max[10][10],need[10][10]; int available[10],total[10],work[10],finish[10],seq[10],req[10]; int pno; void accept() { int i,j; printf("Enter no of process:"); scanf("%d",&n); printf("Enter the no of resource type:"); scanf("%d",&m); printf("Enter total instances of each resource type\n"); for(j=0;j<m;j++) { printf("%c:",65+j); scanf("%d",&total[j]); } printf("Enter the allocation\n"); for(i=0;i<n;i++) { printf("p%d:\n",i); for(j=0;j<m;j++) { printf("%c:",65+j); scanf("%d",&alloc[i][j]); } } printf("Enter max need:\n"); for(i=0;i<n;i++) { printf("p%d:\n",i); for(j=0;j<m;j++) { printf("%c:",65+j); scanf("%d",&max[i][j]); } } } void calc_avail() { int i,j,s; for(j=0;j<m;j++) { s=0; for(i=0;i<n;i++)
s += alloc[i][j]; available[j]=total[j]-s; } } void calc_need() { int i,j; for(i=0;i<n;i++) for(j=0;j<m;j++) need[i][j]=max[i][j]-alloc[i][j]; } void print() { int i,j; printf("\n\tAllocation\t\tMax\t\tNeed\n\t"); for(i=0;i<m;i++) { for(j=0;j<m;j++) printf("%3c",65+j); printf("\t"); } for(i=0;i<n;i++) { printf("\np%d\t",i); for(j=0;j<m;j++) printf("%3d",alloc[i][j]); printf("\t"); for(j=0;j<m;j++) printf("%3d",max[i][j]); printf("\t"); for(j=0;j<m;j++) printf("%3d",need[i][j]); printf("\t"); } printf("\nAvailable\n"); for(j=0;j<m;j++){ printf("%3c",65+j); printf("\t"); } printf("\n"); for(j=0;j<m;j++) { printf("%3d",available[j]); printf("\t"); } } int find() {
int i,j; for(i=0;i<n;i++) { if(!finish[i]) { for(j=0;j<m;j++) if(need[i][j]>work[j]) break; if(j==m) return i; } } return -1; } void bankers() { int i,j,k=0; for(i=0;i<n;i++) finish[i]=0; for(j=0;j<m;j++) work[j]=available[j]; while((i=find())!=-1) { printf("\nNeed%d(",i); for(j=0;j<m;j++) printf("%d,",need[i][j]); printf("\b)<=work("); for(j=0;j<m;j++) printf("%d,",work[j]); printf("\b)"); finish[i]=1; for(j=0;j<m;j++) work[j] +=alloc[i][j]; printf("\nwork("); for(j=0;j<m;j++) printf("%d,",work[j]); printf("\b)\nFinish("); for(j=0;j<n;j++) printf("%d,",finish[j]); printf("\b)"); seq[k++]=i; } if(k==n) { printf("\n System is in safe state:\nsafe sequence:"); for(j=0;j<n;j++) printf("p%d-",seq[j]); } else
{ printf("\n System is in unsafe state"); } } main() { int i,j; system("clear"); accept(); calc_avail(); calc_need(); print(); bankers(); printf("\n Enter process no:"); scanf("%d",&pno); printf("Enter request of process p%d\n",pno); for(j=0;j<m;j++) { printf("%c:",65+j); scanf("%d",&req[j]); } for(j=0;j<m;j++) if(req[j]>need[pno][j]) break; if(j==m) { for(j=0;j<m;j++) if(req[j]>available[j]) break; if(j==m) { for(j=0;j<m;j++) { available[j]-=req[j]; alloc[pno][j]+=req[j]; need[pno][j]-=req[j]; } print(); bankers(); } else { printf("\n Process p%d has to wait",pno); } } else { printf("\n Request of process p%d cannot be generated",pno); } }
#include<stdio.h>
#include<stdlib.h>
int main() { int RQ[100],i,n,TotalHeadMoment=0,initial; printf("Enter the number of Requests\n"); scanf("%d",&n); printf("Enter the Requests sequence\n"); for(i=0;i<n;i++) scanf("%d",&RQ[i]); printf("Enter initial head position\n"); scanf("%d",&initial); // logic for FCFS disk scheduling for(i=0;i<n;i++) { TotalHeadMoment=TotalHeadMoment+abs(RQ[i]-initial); initial=RQ[i]; } printf("Total head moment is %d",TotalHeadMoment); return 0; } SSTF #include<stdio.h> #include<stdlib.h> int main() { int RQ[100],i,n,TotalHeadMoment=0,initial,count=0; printf("Enter the number of Requests\n"); scanf("%d",&n); printf("Enter the Requests sequence\n"); for(i=0;i<n;i++) scanf("%d",&RQ[i]); printf("Enter initial head position\n"); scanf("%d",&initial);