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;
}

You May Also Like:

C Program for SCAN disk scheduling algorithm 

C program for First Come First Serve (FCFS) disk scheduling algorithm | C Programming


C program for Shortest Seek Time Next Disk Scheduling Algorithm | C Programming


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


C Program for C-SCAN Disk Scheduling Algorithm | C Programming


C++ Program For C-LOOK Disk Scheduling Algorithm | C++ Programming

Comments

Popular posts from this blog

C Program for SCAN Disk Scheduling Algorithm | C Programming

C program to Find Cartesian Product of Two Sets | C programming

C Program To Check The String Is Valid Identifier Or Not | C Programming