Advertisment

C++ program for LOOK Disk Scheduling Algorithm | C++ Programming

Look Disk Scheduling Algorithm

  • LOOK Algorithm is an improved version of the SCAN Algorithm.
  • Head starts from the first request at one end of the disk and moves towards the last request at the other end servicing all the requests in between.
  • After reaching the last request at the other end, the head reverses its direction.
  • It then returns to the first request at the starting end servicing all the requests in between.
  • The same process repeats.


C++ program for LOOK Disk Scheduling Algorithm


#include<iostream>

#include<stdlib.h>

using namespace std;

class look_disk

{

int ref[100];

int ttrk,cur,size,prev;

int sort();

public:

void getdata();

void total_move();

};

int look_disk::sort()

{

int temp;

for(int i=0;i<size-1;i++)

for(int y=0;y<size-1;y++)

if(ref[y]>ref[y+1])

{

temp=ref[y+1];

ref[y+1]=ref[y];

ref[y]=temp;

}

for(int i=0;i<size;i++)

if(ref[i]>cur)

return i;

return size;

}

void look_disk::getdata()

{

cout<<"Enter total number of tracks : ";

cin>>ttrk;

ttrk--;

cout<<"Enter the current position of head : ";

cin>>cur;

cout<<"Enter previous position of head : ";

cin>>prev;

cout<<"Enter the size of queue : ";

cin>>size;

cout<<"Enter the request for tracks : ";

for(int i=0;i<size;i++)

cin>>ref[i];

}

void look_disk::total_move()

{

int num=cur,move=0,ind,dir=cur-prev;

ind=sort();

if(dir>0)

{

for(int i=ind;i<size;i++)

{

move+=ref[i]-num;

num=ref[i];

}

if(ind!=0)

{

if(ind==size)

move+=num-ref[ind-1];

else

move+=ref[size-1]-ref[ind-1];

num=ref[ind-1];

for(int i=ind-2;i>=0;i--)

{

move+=num-ref[i];

num=ref[i];

}

}

}

else

{

for(int i=ind-1;i>=0;i--)

{

move+=num-ref[i];

num=ref[i];

}

if(ind==0)

move+=ref[ind]-num;

else if(ind!=size)

move+=ref[ind]-ref[0];

num=ref[ind];

for(int i=ind+1;i<size;i++)

{

move+=ref[i]-num;

num=ref[i];

}

}

cout<<"Total head movements : "<<move;

}

int main()

{

look_disk look;

look.getdata();

look.total_move();

return 0;

}

Post a Comment

0 Comments