Skip to content

Commit

Permalink
#9 #12 Dodata klasa System koja sadrzi vise core-ova cpu-a i deklaris…
Browse files Browse the repository at this point in the history
…an i implementiran u sve operacije os-a mutex kljuc koji pokriva sve kriticne zone
  • Loading branch information
Veliki5382 committed Mar 30, 2024
1 parent d77a159 commit 52b2807
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 12 deletions.
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@
"src"
],
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true
"python.testing.pytestEnabled": true,
"python.REPL.enableREPLSmartSend": false
}
7 changes: 0 additions & 7 deletions src/cpu.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
import time

class CPU:
_instance = None

def __new__(cnt):
if not cnt._instance:
cnt._instance = super().__new__(cnt)
return cnt._instance

def setOS(self, os):
self.os = os

Expand Down
16 changes: 13 additions & 3 deletions src/operatingSystem.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,47 @@
class OS:
_instance = None

def __new__(cls, cpu, pAlgorithm):
def __new__(cls, pAlgorithm):
if not cls._instance:
cls._instance = super().__new__(cls)

cls.blockedProcesses = []
cls.numberOfProcesses = 0
cls.cpu = cpu
cls.cpuScheduler = CPUScheduler(pAlgorithm)

return cls._instance

def createProcess(self, proc):
self.getSys().mutex.acquire()
print("Process [", proc.id, "] is created.", sep='')
self.cpuScheduler.putProcess(proc)
self.getSys().mutex.release()

def hasProcesses(self):
return self.numberOfProcesses + self.cpuScheduler.getNumberOfProcesses() > 0

def getProcess(self):
self.sys.mutex.aquire()
for proceess in self.blockedProcesses:
if proceess.wakeTime <= time.time():
self.blockedProcesses.remove(proceess)
self.numberOfProcesses -= 1
self.cpuScheduler.putProcess(proceess)
return self.cpuScheduler.getProcess()

proc = self.cpuScheduler.getProcess()
self.getSystem().mutex.release()
return proc

def sleep(self, proc):
self.getSystem().mutex.acquire()
self.blockedProcesses.append(proc)
self.numberOfProcesses += 1
proc.wakeTime = time.time() + proc.sleepInterval
self.getSystem().mutex.release()

def finishProcess(self, proc):
print("Process [", proc.id, "] is finished.", sep='')

def getSystem(sys):
return sys

2 changes: 1 addition & 1 deletion src/sanbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
spf = ShortestProcessFirst()

cpu = CPU()
os = OS(cpu, fcfs)
os = OS(fcfs)
cpu.setOS(os)

#process1 = Process(5, 10, 1)
Expand Down
35 changes: 35 additions & 0 deletions src/system.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
from operatingSystem import OS
from cpu import CPU
from algorithmPlanner import *
import threading
import threading

class System:
_instance = None

def __new__(cnt):
if not cnt._instance:
cnt._instance = super().__new__(cnt)
return cnt._instance

def __init__(self, n = 1):
self.mutex = threading.Lock()
self.cpu = [CPU() for _ in range(5)]
self.os = OS(FirstComeFirstServe())

for i in range(n):
self.cpu[i].setOS(self.os)
t = threading.Thread(target=self.cpu[i].run)
self.threads.append(t)

def startThreads(self):
for thread in self.threads:
thread.start()

self.joinThreads()

def joinThreads(self):
for thread in self.threads:
thread.join()


0 comments on commit 52b2807

Please sign in to comment.