The before code shows a simple FCFS scheduler that moves the disk head to each request in arrival order, causing inefficient movement. The after code implements the LOOK algorithm, moving the head in one direction servicing all requests before reversing, reducing unnecessary head movement and improving efficiency.
### Before: Naive FCFS Disk Scheduler
class DiskSchedulerFCFS:
def __init__(self):
self.queue = []
self.head = 0
def add_request(self, request):
self.queue.append(request)
def process_requests(self):
while self.queue:
request = self.queue.pop(0)
print(f"Moving head from {self.head} to {request}")
self.head = request
### After: LOOK Disk Scheduler
class DiskSchedulerLOOK:
def __init__(self):
self.queue = []
self.head = 0
self.direction = 1 # 1 for up, -1 for down
def add_request(self, request):
self.queue.append(request)
self.queue.sort()
def process_requests(self):
while self.queue:
# Filter requests in current direction
if self.direction == 1:
candidates = [r for r in self.queue if r >= self.head]
if not candidates:
self.direction = -1
continue
next_request = candidates[0]
else:
candidates = [r for r in self.queue if r <= self.head]
if not candidates:
self.direction = 1
continue
next_request = candidates[-1]
print(f"Moving head from {self.head} to {next_request}")
self.head = next_request
self.queue.remove(next_request)