I was writing a First Come First Serve scheduling algorithm for OS161 on ubuntu 16
#FCFS code
#include <types.h>
#include <lib.h>
#include <machine/types.h>
#include <stdlib.h>
#include <FCFS.h> //custom header made by me
void enqueue(Queue *queue, int pid, int arrival_time, int burst_time) {
Process *new_process = kmalloc(sizeof(Process));
new_process->pid = pid;
new_process->arrival_time = arrival_time;
new_process->burst_time = burst_time;
new_process->next = NULL;
if (queue->head == NULL) {
queue->head = new_process;
queue->tail = new_process;
} else {
queue->tail->next = new_process;
queue->tail = new_process;
}
}
int dequeue(Queue *queue) {
if (queue->head == NULL) {
return -1;
}
int pid = queue->head->pid;
Process *old_head = queue->head;
queue->head = queue->head->next;
if (queue->head == NULL) {
queue->tail = NULL;
}
kfree(old_head);
return pid;
}
void init_queue(Queue *queue) {
queue->head = NULL;
queue->tail = NULL;
}
double calculate_average_wait_time(Process *processes, int num_processes) {
int current_time = 0;
int total_wait_time = 0;
Queue q;
init_queue(&q);
for (int i = 0; i < num_processes; i++) {
int time_difference = processes[i].arrival_time - current_time;
if (time_difference > 0) {
current_time += time_difference;
}
enqueue(&q, processes[i].pid, processes[i].arrival_time, processes[i].burst_time);
current_time += processes[i].burst_time;
total_wait_time += current_time - processes[i].arrival_time - processes[i].burst_time;
}
return ((double) total_wait_time) / num_processes;
}
#FCFS.h
#ifndef FCFS_H
#define FCFS_H
typedef struct Process {
int pid;
int arrival_time;
int burst_time;
struct Process *next;
} Process;
typedef struct Queue {
Process *head;
Process *tail;
} Queue;
void enqueue(Queue *queue, int pid, int arrival_time, int burst_time);
int dequeue(Queue *queue);
void init_queue(Queue *queue);
double calculate_average_wait_time(Process *processes, int num_processes);
#endif
After adding the method to the main.c file under kmain
void
kmain(char *arguments)
{
boot();
Process process_list[5];
int num_processes = 0;
// Add code to populate the process_list and num_processes
// Run your FCFS algorithm and store the result
double average_wait_time = calculate_average_wait_time(process_list, num_processes);
// Print the average wait time or perform any necessary actions
kprintf("Average wait time: %f\n", average_wait_time);
menu(arguments);
/* Should not get here */
}
The error appeared full error
panic: Fatal exception 11 (Coprocessor unusable) in kernel mode
panic: EPC 0x8000d0cc, exception vaddr 0x0
panic: I can't handle this... I think I'll just die now...
sys161: trace: software-requested debugger stop
sys161: Waiting for debugger connection...