Ejemplo n.º 1
0
class cscanMode:
    def __init__(self, queue, headpos):
        self.headPos = headpos

        if not isinstance(queue, list):
            raise TypeError("queue must be set to an list")
        self.name = "c-scan algorithm"
        print(self.name)
        self.requestList = queue.copy()

        self.direction = 1  #direction modifier

    def run(self):
        print("starting run")
        self.records = Records()
        print(len(self.requestList))
        print(self.requestList)
        self.startIndex = 0
        self.requestList.sort()
        finished = False
        endPos = cylinders
        direction = 1  # values 1 or -1
        hp = self.headPos
        while len(self.requestList) > 0:
            for track in range(hp, endPos, direction):
                if track in self.requestList:
                    print(track)
                    self.nextTrack = track
                    self.requestList.remove(track)
                    self.records.addRecord(self.headPos, self.nextTrack)
                    self.headPos = self.nextTrack
                if track == 199:
                    hp = 0

        print(self.records)
Ejemplo n.º 2
0
class FIFO:
    def __init__(self, queue, trackStartPos):

        self.currentTrack = trackStartPos
        if not isinstance(queue, list):
            raise TypeError("queue must be set to an list")
        self.name = "first in first out"
        print(self.name)
        self.queue = queue.copy()
        self.pos = 0

    def getQueue(self):

        return self.queue

    def accessNextTrack(self):
        self.pos += 1
        return self.queue.pop(0)

    def run(self):
        print("starting run")
        self.records = Records()
        print(len(self.queue))
        for i in range(len(self.queue)):
            self.nextTrack = self.accessNextTrack()
            self.records.addRecord(self.currentTrack, self.nextTrack)

            self.currentTrack = self.nextTrack

        print(self.records)
class nstepscan:
    def __init__(self, queue, headpos, queuesize):
        self.headPos = headpos
        self.queueSize = queuesize
        if not isinstance(queue, list):
            raise TypeError("queue must be set to an list")
        self.name = "n-scan step scan algorithm"
        print()
        print(self.name)
        self.requestList = queue.copy()

    def run(self):

        print("starting run")
        self.records = Records()
        # print(len(self.requestList))
        # print(self.requestList)
        self.startIndex = 0

        hp = self.headPos
        endPos = cylinders
        direction = 1  # values 1 or -1
        while len(self.requestList) > 0:
            self.activeRequestQueue = []
            for i in range(self.queueSize):
                #print(i)
                if len(self.requestList) > 0:
                    self.activeRequestQueue.append(self.requestList.pop(0))
            while len(self.activeRequestQueue) > 0:

                for track in range(hp, endPos, direction):
                    if track in self.activeRequestQueue:
                        #print("while " + str(track))
                        self.nextTrack = track
                        self.activeRequestQueue.remove(track)
                        self.records.addRecord(self.headPos, self.nextTrack)
                        self.headPos = self.nextTrack

                    if track == 199:
                        direction = -1
                        endPos = -1
                        hp = cylinders - 1
                    elif track == 0:
                        endPos = cylinders
                        hp = 0
                        direction = 1
        print(self.records)
class LIFO:
    def __init__(self, queue, trackStartPos):

        self.currentTrack = trackStartPos
        if not isinstance(queue, list):
            raise TypeError("queue must be set to an list")
        self.name = "last in first out"
        print()
        print(self.name)
        self.queue = queue.copy()

        self.pos = 0

    def copyList(self, in_List):
        self.out_list = []
        for i in in_List:
            self.out_list.append(i)
        return self.out_list

    def getQueue(self):

        return self.queue

    def accessNextTrack(self):
        self.pos += 1
        return self.queue.pop(0)

    def run(self):
        self.queue.reverse()
        print("starting run")
        self.records = Records()
        print("length of request list: " + str(len(self.queue)))
        for i in range(len(self.queue)):
            self.nextTrack = self.accessNextTrack()
            self.records.addRecord(self.currentTrack, self.nextTrack)

            self.currentTrack = self.nextTrack

        print(self.records)
Ejemplo n.º 5
0
class SSTF:
    def __init__(self, queue, trackStartPos):

        self.currentTrack = trackStartPos
        if not isinstance(queue, list):
            raise TypeError("queue must be set to an list")
        self.name = "shortest seek time first"
        print(self.name)
        self.queue = queue.copy()

    def selectClosetTrack(self):
        self.minIndex = 0  #setting to first index and assuming there is atleast one
        self.diff = abs(self.queue[0] -
                        self.currentTrack)  #using first index to start with

        for i in range(len(self.queue)):
            print("index: " + str(i) + ", diff: " +
                  str(abs(self.currentTrack - self.queue[i])) + ", value: " +
                  str(self.queue[i]))
            if abs(self.currentTrack - self.queue[i]) < self.diff:
                self.diff = abs(self.currentTrack - self.queue[i])
                self.minIndex = i

        print("removing: " + str(self.minIndex))
        return self.queue.pop(self.minIndex)

    def run(self):
        print("starting run")
        self.records = Records()

        for i in range(len(self.queue)):

            self.nextTrack = self.selectClosetTrack()
            self.records.addRecord(self.currentTrack, self.nextTrack)

            self.currentTrack = self.nextTrack

        print(self.records)