Skip to content

readyqueue up to date #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Binary file modified cmake-build-debug/CMakeFiles/Simulation_Project1.dir/main.cpp.o
Binary file not shown.
8 changes: 4 additions & 4 deletions eventNode.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#ifndef EVENT_NODE_H
#define EVENT_NODE_H
//Header file for node funciton prototypes.
//Header file for node function prototypes.
struct Node{
int processID;
double arrivalTime;
double eventTime;
int eventType;
//Enum:
//CPU Arrival = 1
Expand All @@ -18,9 +18,9 @@ struct Node{
Node* next;

//Constructor:
Node(int ID, double arrival, int type, double Ts){
Node(int ID, double time, int type, double Ts){
processID = ID;
arrivalTime = arrival;
eventTime = time;
eventType = type;
burst = Ts;
waitTime = 0;
Expand Down
27 changes: 18 additions & 9 deletions eventQueue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,20 @@ class EventQueue {
}

// Method to insert a new node at the beginning of the list
void insert(int ID, double arrival, int type, double Ts) {
Node* newNode = new Node(ID, arrival, type, Ts);
Node* current = head;
while(!(current->next == nullptr))
{
current = current->next;
void insert(int ID, double time, int type, double Ts = 0.0) {
Node* newNode = new Node(ID, time, type, Ts);
//Node* current = head;
if (head == nullptr)
head = newNode;
else{
//newNode->next = head;
//head = newNode;
Node* temp = head;
while (temp->next != nullptr){
temp = temp->next;
}
temp->next = newNode;
}
current->next = newNode;

}

Expand All @@ -45,10 +51,13 @@ class EventQueue {
cout << endl;
while (current) {
std::cout << "PID: " << current->processID << ", Process Type: " << current->eventType
<< ", Arrival Time: " << current->arrivalTime << ", Ts: " << current->burst << endl;
<< ", Arrival Time: " << current->eventTime << ", Ts: " << current->burst << endl;
current = current->next;
}
std::cout << std::endl;
}


Node* get_head() {
return head;
}
};
68 changes: 66 additions & 2 deletions main.cpp
Original file line number Diff line number Diff line change
@@ -1,18 +1,82 @@
#include "eventQueue.cpp"
#include "readyQueue.h"
#include "readyQueue.cpp"
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

void handle_ARR(double, bool, Node*, EventQueue);
void handle_DEP(Node*);


int main(){
double lambda = 0;
double clock = 0.0;
bool CPU_idle = true;
int eventID = 0;
EventQueue eventQueue;
ReadyQueue readyQueue_CPU;
ReadyQueue readyQueue_Disk;

eventQueue.insert(11, 0.0, 1, 3.3);
eventQueue.insert(12, 3.3, 1, 3.0);
eventQueue.insert(13, 4.0, 1, 3.0);
eventQueue.insert(14, 6.2, 1, 2.9);
readyQueue_CPU.insert(20);

//create a loop that creates events. must create arrivals with poisson distributions.
while(!(eventID == 10000)) {
//begin running the simulation processes on the CPU and each time a process starts
//create a departure event, time = clock + Ts, calculate probability of exit vs. disk
Node* event = eventQueue.get_head(); //returns head of event queue
clock = event->eventTime;
switch(event->eventType) {
case 1:
handle_ARR(clock, CPU_idle, event, eventQueue);
case 2:
handle_DEP(event);
}
}


//eventQueue.display();
}

void handle_ARR(double clock, bool &idle, Node* event, EventQueue &queue, ReadyQueue &rqCPU){
bool CPU_idle = idle;
EventQueue eventQueue = queue;
ReadyQueue readyQueue_CPU = rqCPU;
int pID = event->processID;
double time = event->eventTime;
double burst = event->burst;

if(CPU_idle){
eventQueue.insert(pID, clock + burst, 2);
CPU_idle = false;
idle = CPU_idle;
}
else
//enqueue PID into ready queue
readyQueue_CPU.insert(pID)

eventQueue.insert(100, random, 1, clock + burst);
}

void handle_DEP(double clock, bool &idle, Node* event, EventQueue &queue, ReadyQueue &rqCPU){
bool CPU_idle = idle;
EventQueue eventQueue = queue;
ReadyQueue readyQueue_CPU = rqCPU;
int pID = event->processID;
double time = event->eventTime;
double burst = event->burst;

eventQueue.display();
if (readyQueue_CPU.isEmpty()) {
CPU_idle = true;
idle = CPU_idle;
}
else{
//pop pid from ReadyQueue
//...^^
eventQueue.insert(pID, clock + burst, 2);
}
}
40 changes: 39 additions & 1 deletion readyQueue.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,41 @@
#include "readyQueue.h"
//Definitions for the Ready Queue, Disk Queue,
//and Event queue.
#include <iostream>
using namespace std;

class ReadyQueue{
private:
ReadyNode* head;

public:
ReadyQueue() : head(nullptr) {}

~ReadyQueue() {
while (head) {
ReadyNode* temp = head;
head = head->next;
delete temp;
}
}

void insert(int PID){
ReadyNode* newNode = new ReadyNode(PID);
if (head == nullptr)
head = newNode;
else{
//newNode->next = head;
//head = newNode;
ReadyNode* temp = head;
while (temp->next != nullptr){
temp = temp->next;
}
temp->next = newNode;
}
}

void pop(){}

bool isEmpty() {
return (head == nullptr);
}
};
9 changes: 9 additions & 0 deletions readyQueue.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
#ifndef EVENT_NODE_H
#define EVENT_NODE_H
//Header file for queue function prototypes.
struct ReadyNode{
int processID;
ReadyNode* next;

//Constructor:
explicit ReadyNode(int PID){
processID = PID;
next = nullptr;
}
};

#endif