Skip to content
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
5 changes: 4 additions & 1 deletion Entities/Process.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@ Process::Process(int id, int AT, int cpuT) :
responseTime(-1), waitingTime(-1), terminationTime(-1)
, turnAroundTime(-1), finishedTime(0), currentIoTime(0), state(NEW) , child(nullptr)
{}

int Process::getId() const
{
return processId;
}
int Process::getIoTime() const
{
return currentIoTime;
Expand Down
1 change: 1 addition & 0 deletions Entities/Process.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class Process
Process* child;
public:
Process(int id, int AT, int cpuT);
int getId() const;
int getIoTime() const;
int getWaitingTime() const;
int getRemainingTime() const;
Expand Down
87 changes: 87 additions & 0 deletions Entities/processor/FCFSProcessor.cpp
Original file line number Diff line number Diff line change
@@ -1 +1,88 @@
#include "FCFSProcessor.h"
FCFSProcessor::FCFSProcessor()
{
}

int FCFSProcessor::getFinishTime()
{
if (currentProcess)
{
return finishTime + currentProcess->getRemainingTime();
}
return finishTime;
}

void FCFSProcessor::addProcess(Process* process)
{
readyQueue.insertEnd(process);
}

//kill process with passed id if found at passed timestep
void FCFSProcessor::killProcess(int processId, int sigKill)
{
if (currentProcess && currentProcess->getId() == processId)
{
currentProcess->setTerminationTime(sigKill);
//--->move the process to terminated list
currentProcess = nullptr;
return;
}

Node<Process*>* current = readyQueue.getHead();
Node<Process*>* prev = nullptr;

// Search for the process in the ready queue
while (current)
{
if (current->getItem()->getId() == processId)
{
current->getItem()->setTerminationTime(sigKill);
// --->Move the process to the terminated list

// Remove the process from the ready queue
if (prev)
{
prev->setNext(current->getNext());
}
else
{
readyQueue.setHead(current->getNext());
}
return;
}
prev = current;
current = current->getNext();
}
}

void FCFSProcessor::getNextProcess(int clock)
{
if (!currentProcess && !readyQueue.isEmpty())
{
currentProcess = readyQueue.getHead()->getItem();
readyQueue.deleteFirst();
currentProcess->setState(RUN);
currentProcess->setResponseTime(clock);
}
}

void FCFSProcessor::run(int clock)
{
if (currentProcess && !currentProcess->isFinished())
{
busyTime++;
currentProcess->run();

if (currentProcess->isFinished())
{
currentProcess->setTerminationTime(clock);
currentProcess->setState(TRM);
finishTime = clock;
currentProcess = nullptr;
}
}
else
freeTime++;
//clock++;
}

12 changes: 11 additions & 1 deletion Entities/processor/FCFSProcessor.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,19 @@
#pragma once

#include "Processor.h"

#include"../../Utils/DataStructure/LinkedList.h"

class FCFSProcessor : public Processor
{
private:
LinkedList<Process*> readyQueue;
public:
FCFSProcessor();
virtual int getFinishTime();
virtual void addProcess(Process* process);
virtual void run(int clock);
void killProcess(int processId, int sigKill);
virtual void getNextProcess(int clock);

};

16 changes: 16 additions & 0 deletions Entities/processor/Processor.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#include "Processor.h"

Processor::Processor():busy(false),busyTime(0),freeTime(0),currentProcess(nullptr)
{

}

bool Processor::isBusy()
{
return busy;
}

int Processor::getUtilization()
{
return (busyTime / (busyTime + freeTime));
}
19 changes: 18 additions & 1 deletion Entities/processor/Processor.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,23 @@
#pragma once

#include "../Process.h"
#include"../../Control/Scheduler.h"
class Processor
{
private:
bool busy;
Scheduler* schedulerPtr;
protected:
int busyTime;
int finishTime;
int freeTime;
Process* currentProcess;
public:
Processor();
virtual int getFinishTime() = 0;
virtual void getNextProcess(int clock) = 0;//get one from the DS
virtual void run(int clock)=0;
bool isBusy();
int getUtilization();
virtual void addProcess(Process* process) = 0;

};
4 changes: 4 additions & 0 deletions OS-Scheduler.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -134,11 +134,15 @@
<ClInclude Include="Entities\processor\RRProcessor.h" />
<ClInclude Include="Control\Scheduler.h" />
<ClInclude Include="User\UI.h" />
<ClInclude Include="Utils\DataStructure\LinkedList.h" />
<ClInclude Include="Utils\DataStructure\Node.h" />
<ClInclude Include="Utils\DataStructure\Queue.h" />
<ClInclude Include="Utils\Defs.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Entities\Process.cpp" />
<ClCompile Include="Entities\processor\FCFSProcessor.cpp" />
<ClCompile Include="Entities\processor\Processor.cpp" />
<ClCompile Include="Entities\processor\SJFProcessor.cpp" />
<ClCompile Include="Entities\processor\RRProcessor.cpp" />
<ClCompile Include="Control\Scheduler.cpp" />
Expand Down
12 changes: 12 additions & 0 deletions OS-Scheduler.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,15 @@
<ClInclude Include="Utils\Defs.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utils\DataStructure\LinkedList.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utils\DataStructure\Queue.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utils\DataStructure\Node.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Entities\processor\FCFSProcessor.cpp">
Expand All @@ -62,5 +71,8 @@
<ClCompile Include="Source.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Entities\processor\Processor.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>
Loading