lab file

42
S.N o. TOPIC SIGNATUR E 1 Write program for process creation and termination for Unix operating system. (Fork, wait(), exit(), etc.) 2 Implement producer-consumer problem using bounded and unbounded buffer. 3 WAP for illustrating interprocess communication. 4 Implement all the CPU scheduling algorithm. (FCFS, SJFS, priority scheduling, Round-Robin, Multilevel queue scheduling etc.) 5 WAP for illustrating all the algorithms of critical- section problem. 6 WAP for bounded buffer problem, reader-writers problem, Dining philosopher's problem using semaphores. 7 Implement Banker's algorithm. 8 WAP to illustrate page replacement algorithm.( FIFO, optimal, LRU, ERU approximation) 9 WAP for file operations (open(), close(), read(), append())

Upload: voracious49

Post on 03-Jan-2016

48 views

Category:

Documents


0 download

DESCRIPTION

Lab File for OS

TRANSCRIPT

Page 1: LAB FILE

S.No.

TOPIC SIGNATURE

1 Write program for process creation and termination for Unix operating system. (Fork, wait(), exit(), etc.)

2 Implement producer-consumer problem using bounded and unbounded buffer.

3 WAP for illustrating interprocess communication.

4 Implement all the CPU scheduling algorithm. (FCFS, SJFS, priority scheduling, Round-Robin, Multilevel queue scheduling etc.)

5 WAP for illustrating all the algorithms of critical-section problem.

6 WAP for bounded buffer problem, reader-writers problem, Dining philosopher's problem using semaphores.

7 Implement Banker's algorithm.8 WAP to illustrate page replacement

algorithm.( FIFO, optimal, LRU, ERU approximation)

9 WAP for file operations (open(), close(), read(), append())

10 Implement all the disk -scheduling algorithms.( FCFS, SSTF, SCAN,C-SCAN, LOOK, C-LOOK)

INDEX

Page 2: LAB FILE

1. Write a routine for process creation and termination for unix operating systems.

#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>

int main(void){ pid_t pid; int rv;

switch(pid = fork()) { case -1: perror("fork"); /* something went wrong */ exit(1); /* parent exits */

case 0: printf(" CHILD: This is the child process!\n"); printf(" CHILD: My PID is %d\n", getpid()); printf(" CHILD: My parent's PID is %d\n", getppid()); printf(" CHILD: Enter my exit status (make it small): "); scanf(" %d", &rv); printf(" CHILD: Goodbye!\n"); exit(rv);

default: printf("PARENT: This is the parent process!\n"); printf("PARENT: My PID is %d\n", getpid()); printf("PARENT: My child's PID is %d\n", pid); printf("PARENT: I'm now waiting for my child to exit()...\n"); wait(&rv); printf("PARENT: My child's exit status is: %d\n", WEXITSTATUS(rv)); printf("PARENT: Goodbye!\n"); }

return 0;}

Page 3: LAB FILE

Output:

Page 4: LAB FILE

3. Implement a program to illustrate shared memory inter process communication

#include <iostream>#include <cstdio>#include <sys/shm.h>#include <sys/stat.h>using namespace std;

const int size = 2048;

int main(void){

// identifier for shared memeoryint segment_id;segment_id = shmget(IPC_PRIVATE, size, S_IRUSR | S_IWUSR); /* S_IRUSR - read

permission, owner | S_IWUSR -write permission, owner */

// a pointer to shared memeorychar *shared_mem;shared_mem = (char *)shmat(segment_id, NULL, 0);

// write to shared memorysprintf(shared_mem, "Hi, There!");

// print out the string from shared memeoryprintf("%s\n", shared_mem);

// detach shared memeoryshmdt(shared_mem);

// remove the shared memory segmentshmctl(segment_id, IPC_RMID, NULL);

return 0;}

Output:

Page 5: LAB FILE

2. Implement producer consumer problem

#include <stdio.h>#include <pthread.h>#include <semaphore.h>#include <unistd.h>

int buffer[5],f,r;sem_t mutex, full, empty;

void *produce(void *arg){ int i; for(i=0;i<6;i++) { sem_wait(&empty); sem_wait(&mutex); printf("produced item is %d\n",i); buffer[(++r)%5]=i; usleep(1); sem_post(&mutex); sem_post(&full); printf("full %u\n",full); }}

void *consume(void *arg){ int item,i; for(i=0;i<6;i++) { sem_wait(&full); printf("full %u\n",full); sem_wait(&mutex); item = buffer[(++f)%5]; printf("consumed item is %d\n",item); usleep(1); sem_post(&mutex); sem_post(&empty); }}

int main(){ pthread_t tid1,tid2; sem_init(&mutex,0,1); sem_init(&full,0,1); sem_init(&empty,0,5);

Page 6: LAB FILE

pthread_create(&tid1,NULL,produce,NULL); pthread_create(&tid2,NULL,consume,NULL); pthread_join(tid1,NULL); pthread_join(tid2,NULL); return 0;}

Output:

Page 7: LAB FILE

4. Implement process scheduling algorithms

#include <stdio.h>#include <iostream>

int i,j,n;float totwt,totserv;

class pr {public: char name[5]; float tservice; int priority; float twait; float trnd;};pr temp;pr pr1[20];

void prioritysort(){ for(i=0;i<n;i++) for(j=0;j<n-i-1;j++) { if(pr1[j].priority>pr1[j+1].priority) { temp=pr1[j]; pr1[j]=pr1[j+1]; pr1[j+1]=temp; } }}

void sjfsort(){for(i=0;i<n;i++) for(j=0;j<n-i-1;j++) { if(pr1[j].tservice>pr1[j+1].tservice) { temp=pr1[j]; pr1[j]=pr1[j+1]; pr1[j+1]=temp; } }}

void calculation(){pr1[0].twait=0;totwt=0;totserv=pr1[0].trnd=pr1[0].tservice;

Page 8: LAB FILE

for(i=1;i<n;i++) { //printf("\nwait= %f",totwt); pr1[i].twait = pr1[i-1].twait + pr1[i-1].tservice; totwt +=pr1[i].twait; pr1[i].trnd = pr1[i].twait+pr1[i].tservice; totserv += pr1[i].trnd;

}}void printing(){ printf("Name \tPriority \tServiceTime \t WaitTime \t TurnAroundTime\n"); for(i=0;i<n;i++){ printf("%s \t %d \t\t %f \t %f \t %f\n",pr1[i].name,pr1[i].priority,pr1[i].tservice,pr1[i].twait,pr1[i].trnd); } printf("\nAverage wait:%f \tAverage turnaround:%f \n",totwt/n,totserv/n);}

int main(){ // initialization code printf("\nEnter the number of processes:"); scanf("%d",&n); for(i=0;i<n;i++) { printf("\nEnter the details of process %d:\n1.Name: ",i+1); scanf("%s",pr1[i].name); printf("2.Service time: "); scanf("%f",&pr1[i].tservice); printf("3.Priority: "); scanf("%d",&pr1[i].priority); } int ch,exit=0; while(exit==0) { printf("\n---MENU---\n1.FIRST COME FIRST SERVED (FCFS)\n2.PRIORITY SCHEDULING\n3.SHORTEST JOB NEXT (sjf)\n5.Exit\nEnter your choice:"); scanf("%d",&ch); switch(ch) { case 1:printf("FCFS SCHEDULING>>>\n"); break; case 2:printf("PRIORITY SCHEDULING>>>\n"); prioritysort(); break; case 3:printf("sjf SCHEDULING>>>\n"); sjfsort();

Page 9: LAB FILE

break; case 5: printf("\nExiting...\n"); default: exit=1; break; } if(exit==0) { calculation(); printing(); }

}

}

ROUND ROBIN SCHEDULING

#include<stdio.h>#define true 1#define false 0int n,tq,totwt=0,tottrnd=0;struct pr{int srvst,wt;int wt;int trndt;int flag;

int temp;}prc[10];

void printpr(){printf("\nProcess_id\tServicetime\tWaitingtime\tTurnarndtime\n");int i;for(i=0;i<n;i++){printf("\n%d \t\t%d \t\t%d \t\t%d\t\n",i,prc[i].srvst,prc[i].wt,prc[i].trndt);}printf("Average waiting time=%f\nAverage turnaroundtime=%f\n\n",(float)totwt/n,(float)tottrnd/n);}

void rschedule(){int trnd=0,i=0,t1;while(completed()==false){if(prc[i].flag==false){if(prc[i].temp==0||prc[i].temp<=tq){

Page 10: LAB FILE

prc[i].flag=true;trnd+=prc[i].temp;tottrnd+=prc[i].trndt=trnd;prc[i].temp=0;}else{trnd+=tq;prc[i].temp-=tq;}}i=(i+1)%n;}}

int completed(){int sum=0,i;for(i=0;i<n;i++){if(prc[i].flag==true)sum++;}if(sum==n)return true;return false;}

main(){int i;printf("\n\t\t<<<ROUND ROBIN SCHEDULING>>>\nEnter the timequantum: ");scanf("%d",&tq);printf("Enter the number of processes:");scanf("%d",&n);for(i=0;i<n;i++){//printf("\nEnter the details for process %d:\nService time:",i);printf("\n Enter process %d Service time:",i);scanf("%d",&prc[i].srvst);prc[i].flag=false;prc[i].temp=prc[i].srvst;}prc[0].wt=0;int wtprmtr=0;for(i=0;i<n-1;i++){if(prc[i].srvst<tq)wtprmtr+=prc[i].srvst;elsewtprmtr+=tq;prc[i+1].wt=wtprmtr;totwt+=prc[i+1].wt;

Page 11: LAB FILE

}rschedule();printpr();}

MULTILEVEL QUEUE SCHEDULING#include<stdio.h>float avg_wt,avg_tt;int i = 0,ttl_wt=0,ttl_tt=0,qt;

struct process{ int prn; char type; int bt; int wt; int tt; struct process *nxt;}*stfor,*stbck,*np,*endfor,*endbck,*temp;

void ins_node(struct process *np){ if(np->type == 'f') { if(stfor == NULL) stfor = endfor = np; else { endfor->nxt = np; endfor = np; } } else { if(stbck == NULL) stbck = endbck = np; else { endbck->nxt = np; endbck = np; } }}

void del_node(struct process *np,int choice){ if(np->type == 'f') { if(stfor == endfor) stfor = NULL; else

Page 12: LAB FILE

stfor = stfor->nxt; if(choice == 1) delete np; } else { if(stbck == endbck) stbck = NULL; else stbck = stbck->nxt; delete np; }}

void ins_dat(){ char ch; int j=0; stfor = endfor = stbck = endbck = NULL; do { np = new process; np->prn = ++j; printf("\n Enter the Burst time of Process #%d : ",np->prn); scanf("%d",&np->bt); printf("\n Enter the type of Process #%d (f-foreground or b-background): ",np->prn); np->type = getche(); if(np->type == 'f') np->nxt = stfor; else np->nxt = NULL; np->wt = np->tt = 0; ins_node(np); printf("\n\n Continue ?? : "); ch = getche(); }while(ch == 'y' || stfor == NULL);}

Page 13: LAB FILE

Output:

Page 14: LAB FILE

Shortest job first

Priority scheduling

Page 15: LAB FILE

5. Write a program to implement critical section problems

#include <stdio.h>

#include <stdlib.h>

#include <pthread.h>

#define COUNT 2

static int Entering[ COUNT ], Number[ COUNT ];

int max ( int* arr ) {

int i, max = arr[ 0 ];

for ( i = 1 ; i < COUNT ; i++ )

if ( Number[ i ] > max )

return Number[ i ];

return Number[ 0 ];

}

static void* T1 ( void* args ) {

pthread_detach( pthread_self() );

int i = 0, j;

while ( 1 ) {

Entering[ i ] = 1;

Number[ i ] = 1 + max( Number );

Entering[ i ] = 0;

for ( j = 0 ; j < COUNT ; j++ ) {

while ( Entering[ j ] ) {}

while ( Number[ j ] != 0 && ( Number[ j ] < Number[ i ] || ( Number[ j ] == Number[ i ] && j < i ) ) ) {}

Page 16: LAB FILE

}

printf( "Thread ID: %d START!\n", i );

for ( j = 0 ; j < 0xFFFFFF ; j++ ) {}

printf( "Thread ID: %d END!\n", i );

Number[ i ] = 0;

}

return NULL;

}

static void* T2 ( void* args ) {

pthread_detach( pthread_self() );

int i = 1, j;

while ( 1 ) {

Entering[ i ] = 1;

Number[ i ] = 1 + max( Number );

Entering[ i ] = 0;

for ( j = 0 ; j < COUNT ; j++ ) {

while ( Entering[ j ] ) {}

while ( Number[ j ] != 0 && ( Number[ j ] < Number[ i ] || ( Number[ j ] == Number[ i ] && j < i ) ) ) {}

}

printf( "Thread ID: %d START!\n", i );

for ( j = 0 ; j < 0xFFFFFF ; j++ ) {}

printf( "Thread ID: %d END!\n", i );

Page 17: LAB FILE

Number[ i ] = 0;

}

return NULL;

}

int main () {

int i = 0;

pthread_t t1;

for ( i = 0 ; i < COUNT ; i++ )

Number[ i ] = Entering[ i ] = 0;

if ( pthread_create( &t1, NULL, T1, NULL ) )

exit( -1 );

if ( pthread_create( &t1, NULL, T2, NULL ) )

exit( -1 );

// while ( 1 ) {}

return EXIT_SUCCESS;

}

#include<stdio.h>

int main()

{

int i,j,k,turn=0;

for(i=0;i<5;i++)

{

if(turn==i)

printf("In Critical Section of %d\n",i);

turn=i+1;

}

Page 18: LAB FILE

return 0;

}

#include<stdio.h>

int main()

{

int i,j,k,turn=0,flag[5];

for(i=0;i<5;i++)

{

flag[i]=1;

if(turn==i&&flag[i]==1)

printf("In Critical Section of %d\n",i);

turn=i+1;

flag[i]=0;

}

return 0;

}

#include<stdio.h>

int main()

{

int i,j,k,flag[5];

for(i=0;i<5;i++)

{

flag[i]=1;

if(flag[i]==1)

printf("In Critical Section of %d\n",i);

flag[i]=0;

}

return 0;

}

Page 19: LAB FILE

6. Write a program for readers-writers and Dining philosophers problem

#include <stdio.h>#include <pthread.h>#include <semaphore.h>#include <unistd.h>

sem_t mutex,writeblock;int data = 0,rcount = 0;

unsigned int usecs = 1000000;

void *reader(void *arg){ int f; f = ((int)arg); sem_wait(&mutex); rcount = rcount + 1; if(rcount==1) sem_wait(&writeblock); sem_post(&mutex); printf("Data read by the reader%d is %d\n",f,data); usleep(usecs); sem_wait(&mutex); rcount = rcount - 1; if(rcount==0) sem_post(&writeblock); sem_post(&mutex);}

void *writer(void *arg){ int f; f = ((int) arg); sem_wait(&writeblock); data++; printf("Data writen by the writer%d is %d\n",f,data); usleep(usecs); sem_post(&writeblock);}

int main(){ printf("\n"); int i,b; pthread_t rtid[5],wtid[5]; sem_init(&mutex,0,1); sem_init(&writeblock,0,1); for(i=0;i<=2;i++) {

Page 20: LAB FILE

pthread_create(&wtid[i], NULL, writer, (void *)i); pthread_create(&rtid[i], NULL, reader, (void *)i); } for(i=0;i<=2;i++) { pthread_join(wtid[i], NULL); pthread_join(rtid[i], NULL); }

printf("\n"); return 0;}

DINING PHILOSOPHERS PROBLEM#include<stdio.h>#include<semaphore.h>#include<fcntl.h>#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>#include<pthread.h>struct{ int data[5]; sem_t *mutex[5]; }sh;char *name[]={"p1","p2","p3","p4","p5"};void *work(void *);main(){ pthread_t tid[5]; int i; for(i=0;i<5;i++) { sh.mutex[i]=sem_open(name[i],O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP,1); } pthread_setconcurrency(6); setbuf(stdout,NULL); for(i=0;i<5;i++) pthread_create(&tid[i],NULL,work,&i); for(i=0;i<5;i++) pthread_join(tid[i],NULL); for(i=0;i<5;i++) sem_unlink(name[i]);}void *work(void *arg){ int p,i=1; p=*((int *)arg); while(i++<2) {

Page 21: LAB FILE

sem_wait(sh.mutex[p]); sem_wait(sh.mutex[(p+1)%5]); sh.data[p]=1;

printf("p%d[%d %d%d]\n",p+1,sh.data[0],sh.data[1],sh.data[2],sh.data[3],sh.data[4]); sleep(1);//eating sh.data[p]=0; sem_post(sh.mutex[p]); sem_post(sh.mutex[(p+1)%5]); sleep(2); }}

Output:

Page 22: LAB FILE

7. Write a program to implement banker’s algorithm

#include <stdio.h>#include <cstdlib>#define true 1#define false 0

int m,n,i,j,count=0,process;int max[10][10],alloc[10][10],need[10][10],c[10],avail[10],finish[10];

void readtable(int t[10][10]){ for(i=0;i<m;i++) for(j=0;j<n;j++) scanf("%d",&t[i][j]); }

void printtable(int t[10][10]){ for(i=0;i<m;i++) { for(j=0;j<n;j++) printf("\t%d",t[i][j]); printf("\n"); }}

void readvector(int v[10]){ for(j=0;j<n;j++) scanf("%d",&v[j]); }

void printvector(int v[10]){ for(j=0;j<n;j++) printf("\t%d",v[j]); }

void init(){ printf("enter the number of process\n"); scanf("%d",&m); printf("enter the number of resources\n"); scanf("%d",&n); printf("enter the claim table\n"); readtable(max); printf("enter the allocation table\n"); readtable(alloc);

Page 23: LAB FILE

printf("enter the max units of each resource\n"); readvector(c); for(i=0;i<n;i++) finish[i]=false;}

void findavail(){ int sum; for(j=0;j<n;j++) { sum=0; for(i=0;i<m;i++) { sum=sum+alloc[i][j]; } avail[j]=c[j]-sum; }}

void findneed(){ for(i=0;i<m;i++) { for(j=0;j<n;j++) { need[i][j]=max[i][j]-alloc[i][j]; } }}

void selectprocess(){ int flag; for(i=0;i<m;i++) { for(j=0;j<n;j++) { if(need[i][j]<=avail[j]) flag=1; else { flag=0; break; } } if((flag==1)&&(finish[i]==false)) { process=i; count++;

Page 24: LAB FILE

break; } } printf("current status is\n"); printtable(alloc); if(flag==0) { printf("system is in unsafe state\n"); exit(1); } printf("system is in safe state");}

void executeprocess(int p){ printf("excuting process is %d",p); printtable(alloc);}

void releaseresource(){ for(j=0;j<n;j++) avail[j]=avail[j]+alloc[process][j]; for(j=0;j<n;j++) { alloc[process][j]=0; need[process][j]=0; }}

int main(){ init(); findavail(); findneed(); do { selectprocess(); finish[process]=true; executeprocess(process); releaseresource(); }while(count<m); printf("\n all proces executed correctly");

return 0;}

Page 25: LAB FILE

Output:

Page 26: LAB FILE

8. Write a program to implement page replacement algorithms

#include<stdio.h>

int main(){int i,j,n,a[50],frame[10],no,k,avail,count=0; printf("\n ENTER THE NUMBER OF PAGES:\n");scanf("%d",&n); printf("\n ENTER THE PAGE NUMBER :\n"); for(i=1;i<=n;i++) scanf("%d",&a[i]); printf("\n ENTER THE NUMBER OF FRAMES :"); scanf("%d",&no);for(i=0;i<no;i++) frame[i]= -1; j=0; printf("\tref string\t page frames\n");for(i=1;i<=n;i++){ printf("%d\t\t",a[i]); avail=0; for(k=0;k<no;k++)

if(frame[k]==a[i]) avail=1; if (avail==0) { frame[j]=a[i]; j=(j+1)%no; count++; for(k=0;k<no;k++) printf("%d\t",frame[k]);

}printf("\n");}printf("Page Fault Is %d",count); return 0;}

Page 27: LAB FILE

LRU Page Replacement#include<stdio.h>main(){int q[20],p[50],c=0,c1,d,f,i,j,k=0,n,r,t,b[20],c2[20];printf("Enter no of pages:");scanf("%d",&n);printf("Enter the reference string:");for(i=0;i<n;i++) scanf("%d",&p[i]);printf("Enter no of frames:");scanf("%d",&f);q[k]=p[k];printf("\n\t%d\n",q[k]);c++;k++;for(i=1;i<n;i++) {c1=0;for(j=0;j<f;j++) { if(p[i]!=q[j]) c1++; } if(c1==f) { c++; if(k<f) { q[k]=p[i]; k++; for(j=0;j<k;j++) printf("\t%d",q[j]); printf("\n"); } else { for(r=0;r<f;r++) { c2[r]=0; for(j=i-1;j<n;j--) { if(q[r]!=p[j]) c2[r]++;

Page 28: LAB FILE

else break; } } for(r=0;r<f;r++)b[r]=c2[r];for(r=0;r<f;r++) { for(j=r;j<f;j++) { if(b[r]<b[j]) {t=b[r]; b[r]=b[j]; b[j]=t; } } } for(r=0;r<f;r++) { if(c2[r]==b[0]) q[r]=p[i]; printf("\t%d",q[r]); } printf("\n"); } }}printf("\nThe no of page faults is %d",c);}

OPTIMAL PAGE REPLACEMENT ALGORITHM#include<stdio.h>

#define max 25

int main(){ int frame[10],length[10],index,highest; int i,j,k,nf,np=0,page[max],temp; int flag=0,pf=0,found=0; printf("Enter no. of Frames:"); scanf("%d",&nf);

Page 29: LAB FILE

for(i=0;i<nf;i++) frame[i]=-1; printf("Enter pages (press -999 to exit):\n"); for(i=0;i<max;i++) { scanf("%d",&temp); if(temp==-999) break; page[i]=temp; np++; } for(i=0;i<np;i++) { flag=0; for(j=0;j<nf;j++) { if(frame[j]==page[i]) { printf("\n\t"); flag=1;break; } } if(flag==0) { for(j=0;j<nf;j++) { for(temp=i+1;temp<np;temp++) { length[j]=0; if (frame[j]==page[temp]) {length[j]=temp-i;break;} } } found=0; for(j=0;j<nf;j++) { if(length[j]==0) { index=j; found=1; break; } } if(found==0) { highest=length[0];

Page 30: LAB FILE

index=0; for(j=1;j<nf;j++) { if(highest<length[j]) { highest=length[j]; index=j; } } } frame[index]=page[i]; printf("\nFault: "); pf++; } for(k=0;k<nf;k++) printf("%d\t",frame[k]); } printf("\nNumber of page faults is: %d ",pf);return 0; }

Page 31: LAB FILE

9.Write a program to implement file operations

#include <stdio.h>#include <stdio.h>int main( ){ FILE *fp,*fp2; char stuff[25]; int i,c; fp = fopen("new.txt","a+"); strcpy(stuff,"This is an example line."); for (i = 1; i <= 10; i++) fprintf(fp,"%s Line number %d\n", stuff, i); fclose(fp); /* close the file before ending program */ fp2 = fopen("new.txt","r"); c = getc(fp2) ; while (c!= EOF) { putchar(c);

c = getc(fp); } fclose(fp2);return 0;}

Page 32: LAB FILE

10. Write a program to implement disk scheduling algorithms

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

void fcfs(int noq, int qu[10], int st){ int i,s=0; for(i=0;i<noq;i++) { s=s+abs(st-qu[i]); st=qu[i]; } printf("\n Total seek time :%d",s);}

void sstf(int noq, int qu[10], int st, int visit[10]){ int min,s=0,p,i; while(1){ min=999; for(i=0;i<noq;i++) if (visit[i] == 0) { if(min > abs(st - qu[i])) { min = abs(st-qu[i]); p = i; } } if(min == 999) break; visit[p]=1; s=s + min; st = qu[p]; } printf("\n Total seek time is: %d",s); }

void scan(int noq, int qu[10], int st, int ch){ int i,j,s=0; for(i=0;i<noq;i++) { if(st < qu[i]) { for(j=i-1; j>= 0;j--) {

Page 33: LAB FILE

s=s+abs(st - qu[j]); st = qu[j]; } if(ch == 3) { s = s + abs(st - 0); st = 0; } for(j = 1;j < noq;j++) { s= s + abs(st - qu[j]); st = qu[j]; } break; }}printf("\n Total seek time : %d",s);}

int main(){ int n,qu[20],st,i,j,t,noq,ch,visit[20]; printf("\n Enter the maximum number of cylinders : "); scanf("%d",&n); printf("enter number of queue elements"); scanf("%d",&noq); printf("\n Enter the work queue"); for(i=0;i<noq;i++) { scanf("%d",&qu[i]); visit[i] = 0; } printf("\n Enter the disk head starting posision: \n"); scanf("%d",&st); while(1) { printf("\n\n\t\t MENU \n"); printf("\n\n\t\t 1. FCFS \n"); printf("\n\n\t\t 2. SSTF \n"); printf("\n\n\t\t 3. SCAN \n"); printf("\n\n\t\t 4. EXIT \n"); printf("\nEnter your choice: "); scanf("%d",&ch); if(ch > 2) { for(i=0;i<noq;i++) for(j=i+1;j<noq;j++) if(qu[i]>qu[j]) { t=qu[i]; qu[i] = qu[j];

Page 34: LAB FILE

qu[j] = t; } } switch(ch) { case 1: printf("\n FCFS \n"); printf("\n*****\n"); fcfs(noq,qu,st); break;

case 2: printf("\n SSTF \n"); printf("\n*****\n"); sstf(noq,qu,st,visit); break; case 3: printf("\n SCAN \n"); printf("\n*****\n"); scan(noq,qu,st,ch); break; case 4: exit(0); } }}

LOOK

#include<stdio.h>#include<conio.h>#include<math.h>#define max 20#define cymax 199

int i,j,req,ttl_tracks=0,cp,np,cposn,nposn;int cyposn[max],temp;

void input(){ do { clreol(); printf("\n Enter the current header position : "); scanf("%d",&cposn); }while(cposn>cymax || cposn <=0); printf("\n Enter the %d I/O Requests : ",req); cyposn[0] = cposn; for(i=1;i<=req;i++) scanf("%d",&cyposn[i]);}

void LOOK(){ int ind = 0;

Page 35: LAB FILE

for(i=0;i<=req;i++) { for(j=0;j<req-i;j++) { if(cyposn[j] > cyposn[j+1]) { temp = cyposn[j]; cyposn[j] = cyposn[j+1]; cyposn[j+1] = temp; } } } cp=0; do { if(cyposn[cp] == cposn) break; cp++; }while(cp!=req); int tmp = cp; printf("\nS.No. Current Position Next Position Displacement \n"); printf("---------------------------------------------------------- \n\n"); i=0; cposn = cyposn[cp]; do { if(ind == 0) { if(cp == 0) { cp = tmp; nposn = cyposn[++cp]; ind = 1; } else nposn = cyposn[--cp]; } else nposn = cyposn[++cp];

printf(" %d\t\t%d\t\t%d\t\t%d\n",++i,cposn,nposn,abs(cposn-nposn)); ttl_tracks += (abs(cposn-nposn)); cposn = nposn; }while(nposn!=cyposn[req]); printf("---------------------------------------------------------- \n\n"); printf(" Total Tracks Displaced : %d",ttl_tracks);}

int main(){ do {

Page 36: LAB FILE

clrscr(); printf("\n Enter the number of requests : "); scanf("%d",&req); }while(req>max || req <=0); input(); LOOK(); return 0;}

CSCAN

#include<stdio.h>#include<conio.h>#include<math.h>#define max 20#define cymax 199

int i,j,req,ttl_tracks=0,cp,np,cposn,nposn;int cyposn[max],temp;

void input(){ do { clreol(); printf("\n Enter the current header position : "); scanf("%d",&cposn); }while(cposn>cymax || cposn <=0); printf("\n Enter the %d I/O Requests : ",req); cyposn[0] = cposn; for(i=1;i<=req;i++) scanf("%d",&cyposn[i]);}

void CSCAN(){ for(i=0;i<=req;i++) { for(j=0;j<req-i;j++) { if(cyposn[j] > cyposn[j+1]) { temp = cyposn[j]; cyposn[j] = cyposn[j+1]; cyposn[j+1] = temp; } } } cp=0; do {

Page 37: LAB FILE

if(cyposn[cp] == cposn) break; cp++; }while(cp!=req); printf("\nS.No. Current Position Next Position Displacement \n"); printf("---------------------------------------------------------- \n\n"); i=0,j=cp; cposn = cyposn[cp]; do { if(cposn == cyposn[req]) { nposn = 199; cp = -1; } else nposn = cyposn[++cp]; printf(" %d\t\t%d\t\t%d\t\t%d\n",++i,cposn,nposn,abs(cposn-nposn)); ttl_tracks += (abs(cposn-nposn)); cposn = nposn == 199 ? 0 : nposn; }while(nposn != cyposn[j-1]); printf("---------------------------------------------------------- \n\n"); printf(" Total Tracks Displaced : %d",ttl_tracks);}

int main(){ do { clrscr(); printf("\n Enter the number of requests : "); scanf("%d",&req); }while(req>max || req <=0); input();CSCAN();return 0;}

Page 38: LAB FILE