Professional Documents
Culture Documents
Os Lab Da : Disk Scheduling
Os Lab Da : Disk Scheduling
Os Lab Da : Disk Scheduling
20BCE0824
OS LAB DA;
DISK SCHEDULING;
#include<stdio.h>
#include<stdbool.h>
int request[50];
long SIZE;
bool flag[50];
int dist(int,int);
struct max{
int data;
int dis;
int dat;
}kate[50],kat;
struct max check(int head,int n)
{
int i;
int j=0;
for(i=0;i<n;i++)
{
if(flag[i]==0){
kate[j].dis=dist(head,request[i]);
kate[j].data=request[i];
kate[j].dat=i;
j++;
}
}
n=j;
for (i = 0; i < n-1; i++)
{
for (j = 0; j < n-i-1; j++)
{
if (kate[j].dis > kate[j+1].dis)
{
int temp=kate[j].data;
kate[j].data=kate[j+1].data;
kate[j+1].data=temp;
temp=kate[j].dis;
kate[j].dis=kate[j+1].dis;
kate[j+1].dis=temp;
temp=kate[j].dat;
kate[j].dat=kate[j+1].dat;
kate[j+1].dat=temp;
}
}
}
return kate[0];
}
int dist(int a,int b)
{
if(a>b)
return a-b;
return b-a;
}
void stsk(int n)
{
int head,i;
int seekcount=0;
printf("ENTER THE CURRENT HEAD :\n");
scanf("%d",&head);
printf("SEEK SEQUENCE = ") ;
for(i=0;i<n;i++)
{
if(request[i]<SIZE-1)
{
printf("%d ",head);
kat=check(head,n);
seekcount=seekcount+kat.dis;
head=kat.data;
flag[kat.dat]=true;
}
}
printf("%d\nTOTAL DISTANCE : %d",head,seekcount);
}
int main()
{
int n,i;
printf("ENTER THE DISK SIZE :\n");
scanf("%d",&SIZE);
printf("ENTER THE NO OF REQUEST SEQUENCE :\n");
scanf("%d",&n);
printf("ENTER THE REQUEST SEQUENCE :\n");
for(i=0;i<n;i++){
scanf("%d",&request[i]);
flag[i]=0;
}
stsk(n);
}
OUTPUT;
Code1; ( producer consumer)
#include <pthread.h>
#include <semaphore.h>
#include <stdlib.h>
#include <stdio.h>
#define MaxItems 5 // Maximum items a producer can produce or a consumer can consume
sem_t empty;
sem_t full;
int in = 0;
int out = 0;
int buffer[BufferSize];
pthread_mutex_t mutex;
int item;
sem_wait(&empty);
pthread_mutex_lock(&mutex);
buffer[in] = item;
in = (in+1)%BufferSize;
pthread_mutex_unlock(&mutex);
sem_post(&full);
sem_wait(&full);
pthread_mutex_lock(&mutex);
out = (out+1)%BufferSize;
pthread_mutex_unlock(&mutex);
sem_post(&empty);
int main()
pthread_t pro[5],con[5];
pthread_mutex_init(&mutex, NULL);
sem_init(&empty,0,BufferSize);
sem_init(&full,0,0);
int a[5] = {1,2,3,4,5}; //Just used for numbering the producer and consumer
pthread_join(pro[i], NULL);
pthread_join(con[i], NULL);
pthread_mutex_destroy(&mutex);
sem_destroy(&empty);
sem_destroy(&full);
return 0;
#include <semaphore.h>
#include <stdio.h>
#define N 5
#define THINKING 2
#define HUNGRY 1
#define EATING 0
int state[N];
int phil[N] = { 0, 1, 2, 3, 4 };
sem_t mutex;
sem_t S[N];
if (state[phnum] == HUNGRY
state[phnum] = EATING;
sleep(2);
// during takefork
// during putfork
sem_post(&S[phnum]);
// take up chopsticks
sem_wait(&mutex);
state[phnum] = HUNGRY;
test(phnum);
sem_post(&mutex);
sleep(1);
sem_wait(&mutex);
state[phnum] = THINKING;
test(LEFT);
test(RIGHT);
sem_post(&mutex);
while (1) {
int* i = num;
sleep(1);
take_fork(*i);
sleep(0);
put_fork(*i);
int main()
int i;
pthread_t thread_id[N];
sem_init(&mutex, 0, 1);
sem_init(&S[i], 0, 0);
pthread_create(&thread_id[i], NULL,
philosopher, &phil[i]);
pthread_join(thread_id[i], NULL);
Code3;
#include<stdio.h>
int n,nf;
int in[100];
int p[50];
int hit=0;
int i,j,k;
int pgfaultcnt=0;
void getData()
scanf("%d",&n);
scanf("%d",&in[i]);
printf("\nEnter no of frames:");
scanf("%d",&nf);
void initialize()
pgfaultcnt=0;
p[i]=9999;
hit=0;
if(p[j]==data)
hit=1;
break;
return hit;
int hitind;
for(k=0; k<nf; k++)
if(p[k]==data)
hitind=k;
break;
return hitind;
void dispPages()
if(p[k]!=9999)
printf(" %d",p[k]);
void dispPgFaultCnt()
void fifo()
initialize();
for(i=0; i<n; i++)
printf("\nFor %d :",in[i]);
if(isHit(in[i])==0)
p[k]=p[k+1];
p[k]=in[i];
pgfaultcnt++;
dispPages();
else
dispPgFaultCnt();
void optimal()
initialize();
int near[50];
printf("\nFor %d :",in[i]);
if(isHit(in[i])==0)
int pg=p[j];
int found=0;
if(pg==in[k])
near[j]=k;
found=1;
break;
else
found=0;
if(!found)
near[j]=9999;
int max=-9999;
int repindex;
if(near[j]>max)
max=near[j];
repindex=j;
p[repindex]=in[i];
pgfaultcnt++;
dispPages();
else
dispPgFaultCnt();
void lru()
initialize();
int least[50];
printf("\nFor %d :",in[i]);
if(isHit(in[i])==0)
{
int pg=p[j];
int found=0;
if(pg==in[k])
least[j]=k;
found=1;
break;
else
found=0;
if(!found)
least[j]=-9999;
int min=9999;
int repindex;
if(least[j]<min)
min=least[j];
repindex=j;
p[repindex]=in[i];
pgfaultcnt++;
dispPages();
else
dispPgFaultCnt();
void lfu()
int usedcnt[100];
int least,repin,sofarcnt=0,bn;
initialize();
usedcnt[i]=0;
if(isHit(in[i]))
int hitind=getHitIndex(in[i]);
usedcnt[hitind]++;
else
pgfaultcnt++;
if(bn<nf)
p[bn]=in[i];
usedcnt[bn]=usedcnt[bn]+1;
bn++;
else
least=9999;
if(usedcnt[k]<least)
least=usedcnt[k];
repin=k;
p[repin]=in[i];
sofarcnt=0;
if(in[i]==in[k])
sofarcnt=sofarcnt+1;
usedcnt[repin]=sofarcnt;
dispPages();
dispPgFaultCnt();
}
void secondchance()
int usedbit[50];
int victimptr=0;
initialize();
usedbit[i]=0;
printf("\nFor %d:",in[i]);
if(isHit(in[i]))
int hitindex=getHitIndex(in[i]);
if(usedbit[hitindex]==0)
usedbit[hitindex]=1;
else
pgfaultcnt++;
if(usedbit[victimptr]==1)
do
usedbit[victimptr]=0;
victimptr++;
if(victimptr==nf)
victimptr=0;
}
while(usedbit[victimptr]!=0);
if(usedbit[victimptr]==0)
p[victimptr]=in[i];
usedbit[victimptr]=1;
victimptr++;
dispPages();
if(victimptr==nf)
victimptr=0;
dispPgFaultCnt();
int main()
int choice;
while(1)
scanf("%d",&choice);
switch(choice)
case 1:
getData();
break;
case 2:
fifo();
break;
case 3:
optimal();
break;
case 4:
lru();
break;
case 5:
lfu();
break;
case 6:
secondchance();
break;
default:
return 0;
break;