diff --git a/Assignment8/code/disk.c b/Assignment8/code/disk.c index a2fd38c..03ae242 100644 --- a/Assignment8/code/disk.c +++ b/Assignment8/code/disk.c @@ -47,6 +47,7 @@ void delete(DiskQueue *queue, DiskRequest request) { previous->next = current->next; } queue->size--; + free(current); return; } previous = current; @@ -60,11 +61,11 @@ DiskRequest peek(DiskQueue *queue) { return *queue->head; } -DiskRequest dequeue(DiskQueue *queue) { +DiskRequest *dequeue(DiskQueue *queue) { DiskRequest *head = queue->head; queue->head = head->next; queue->size--; - return *head; + return head; } void destroyDiskQueue(DiskQueue *queue) { diff --git a/Assignment8/code/disk.h b/Assignment8/code/disk.h index 7ae8538..ae379de 100644 --- a/Assignment8/code/disk.h +++ b/Assignment8/code/disk.h @@ -23,7 +23,7 @@ void delete(DiskQueue *queue, DiskRequest request); DiskRequest peek(DiskQueue *queue); -DiskRequest dequeue(DiskQueue *queue); +DiskRequest *dequeue(DiskQueue *queue); DiskRequest *findClosest(DiskQueue *queue, int position, double time); diff --git a/Assignment8/code/main.c b/Assignment8/code/main.c index 55071c8..826b776 100644 --- a/Assignment8/code/main.c +++ b/Assignment8/code/main.c @@ -36,11 +36,12 @@ int diskMovement(int position, int destination) { void fcfs(int start) { int position = start; while (queue->size > 0) { - DiskRequest request = dequeue(queue); - while (seekTime < request.time) { seekTime++; } - seekTime += timeToProcessRequest(position, request.position); - movement += diskMovement(position, request.position); - position = request.position; + DiskRequest *request = dequeue(queue); + while (seekTime < request->time) { seekTime++; } + seekTime += timeToProcessRequest(position, request->position); + movement += diskMovement(position, request->position); + position = request->position; + free(request); } } @@ -53,11 +54,9 @@ void cscan(int start) { seekTime++; } else { if (request->position < position) { - seekTime += timeToProcessRequest(position, 9999); - movement += diskMovement(position, 9999); - // Special case for when we are at the end of the disk, wrap around to the beginning - seekTime += timeToProcessRequest(9999, 10000); // 10000 is the beginning of the disk - movement += diskMovement(9999, 10000); + // + 1 simulates the time it takes to move to the end of the disk (it is a circular disk) + seekTime += timeToProcessRequest(position, 9999 + 1); + movement += diskMovement(position, 9999 + 1); position = 0; // Rescan for closest, so we can efficiently handle requests request = findClosest(queue, position, seekTime);