From 77944fb0e048daf35c472e09870d984f45c84631 Mon Sep 17 00:00:00 2001 From: Veliki5382 Date: Fri, 29 Mar 2024 21:11:33 +0100 Subject: [PATCH 1/3] Popravljen SPF --- .../algorithmPlanner.cpython-310.pyc | Bin 2516 -> 2532 bytes .../operatingSystem.cpython-310.pyc | Bin 1709 -> 1709 bytes src/algorithmPlanner.py | 6 +++--- src/cpu.py | 1 + src/sanbox.py | 2 +- 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/__pycache__/algorithmPlanner.cpython-310.pyc b/src/__pycache__/algorithmPlanner.cpython-310.pyc index 9878cce0b623e40ba7518d1d5b884fef59c56b33..173938c4deb15930adbd46e776358e508d8c70ee 100644 GIT binary patch delta 262 zcmca2{6v^HpO=@50SMOcv!{L9$a{^2v3T+mmO#eh&1S55OyO z4PK&C2)s|X~j)a-D&=SO!RxFr+Z1F!eIlFvc_1 zFk~?;V6I_Y$jHc$!VnBJ*w0Oq@fLe>er`cxQK}|O5gSm)EtcZUs#J)TN z+92~-fCLYt0ORBt9MKn}!tOc1pyAOWz;CjaH&WK^BZ&S}7?Ho2cof>C2~Ag4Hx R%;ayOx(LpO=@50SL@^H*zgz0{|#51GxYI delta 19 ZcmZ3>yOx(LpO=@50SKCyH*zgz0{|(-1N#5~ diff --git a/src/algorithmPlanner.py b/src/algorithmPlanner.py index 9f39f0c..6f06e21 100644 --- a/src/algorithmPlanner.py +++ b/src/algorithmPlanner.py @@ -36,13 +36,13 @@ def __init__(self): def getProcess(self): if not self.priorityQueue.empty(): - return self.priorityQueue.get() + return self.priorityQueue.get()[1] else: return None def putProcess(self, proc): - proc.size = field(compare=False) - self.priorityQueue.put(proc) + #proc.size = field(compare=False) + self.priorityQueue.put((-proc.size, proc)) def getNumberOfProcesses(self): return self.priorityQueue.qsize() diff --git a/src/cpu.py b/src/cpu.py index 543a034..f043951 100644 --- a/src/cpu.py +++ b/src/cpu.py @@ -27,6 +27,7 @@ def run(self): proc.remainingIterations -= 1 if proc.sleepInterval > 0: #ako je sleepInterval is 0, no need to sleep + print("Process [", proc.id, "] is sleeping.", sep='') self.os.sleep(proc) else: self.os.finishProcess(proc) diff --git a/src/sanbox.py b/src/sanbox.py index 0470a59..5f5e2aa 100644 --- a/src/sanbox.py +++ b/src/sanbox.py @@ -18,7 +18,7 @@ #os.createProcess(process3)s print("--------------------------------") -os.cpuScheduler.setPrioritizedAlgorithm(fcfs) +os.cpuScheduler.setPrioritizedAlgorithm(spf) process4 = Process(5, 50, 1) os.createProcess(process4) From 00a7a8ac3a274cb66df8f9d1ee422a2b91b4e0ae Mon Sep 17 00:00:00 2001 From: Veliki5382 Date: Fri, 29 Mar 2024 22:44:48 +0100 Subject: [PATCH 2/3] Sredjena faza 1 --- linkovi.txt | 4 +++- src/.gitignore | 1 + src/__pycache__/algorithmPlanner.cpython-310.pyc | Bin 2532 -> 0 bytes src/__pycache__/cpu.cpython-310.pyc | Bin 1142 -> 0 bytes src/__pycache__/cpuScheduler.cpython-310.pyc | Bin 1105 -> 0 bytes src/__pycache__/operatingSystem.cpython-310.pyc | Bin 1709 -> 0 bytes src/__pycache__/process.cpython-310.pyc | Bin 581 -> 0 bytes src/algorithmPlanner.py | 2 +- src/cpu.py | 7 ++----- src/cpuScheduler.py | 2 -- src/operatingSystem.py | 1 - 11 files changed, 7 insertions(+), 10 deletions(-) create mode 100644 src/.gitignore delete mode 100644 src/__pycache__/algorithmPlanner.cpython-310.pyc delete mode 100644 src/__pycache__/cpu.cpython-310.pyc delete mode 100644 src/__pycache__/cpuScheduler.cpython-310.pyc delete mode 100644 src/__pycache__/operatingSystem.cpython-310.pyc delete mode 100644 src/__pycache__/process.cpython-310.pyc diff --git a/linkovi.txt b/linkovi.txt index db72563..4ce27af 100644 --- a/linkovi.txt +++ b/linkovi.txt @@ -1,3 +1,5 @@ https://afrodita.rcub.bg.ac.rs/~dmilicev/publishing/OS1/Dragan%20Milicev%20-%20Operativni%20sistemi%201%20-%20predavanja%202020%20-%20Deo%20III/#92 slajdovi 52-55 -http://os.etf.rs/OS2/predavanja/ slajdovi 2 - 26 \ No newline at end of file +http://os.etf.rs/OS2/predavanja/ slajdovi 2 - 26 + +https://github.com/lazar2222/Operating-Systems-2-Project \ No newline at end of file diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..ba0430d --- /dev/null +++ b/src/.gitignore @@ -0,0 +1 @@ +__pycache__/ \ No newline at end of file diff --git a/src/__pycache__/algorithmPlanner.cpython-310.pyc b/src/__pycache__/algorithmPlanner.cpython-310.pyc deleted file mode 100644 index 173938c4deb15930adbd46e776358e508d8c70ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2532 zcmbtW&u`l{6ecOjmSx#>*Q{&SpWE7P!j^g{dK`vy0XFR7Wynst2#QE24y4E-vG#^?@?Cl+Hw$J1l}_#QhXo3_wmVTr{fT4f8A>i|1k;q8wZQc zg26VJlHfSuG$sl4X~KL)am-@FH{jQZjl}d#{mhK5q~SM`rr)IGXTmMsxFEbC=(*wB zFm7@i#qrVLtNsq!g%-NPSFkbRVKqIOGI{< z@_|Q-&aND#a+IC@HW3p63tK$Q!YB@vDy-p1#5}?s7MlTsZ7}r~oFG2s#Alpxc0qhY znB3sz1px#W^fh+qH%iogleYksQ}o`&2N?D+*^R^FV<967n^g__XggrnKr1k{N3Q7L z3S40-5f3HOuHC=C^bgZS^d|@DeyUWTi_?BCx75~~@7}!KlA#)>Qt+eEX&7ydWf}<; z_LYqK;Szw?Po1TWu`2jq3&T^bor~g)2^%^cs8cyI7~zk6iyH%DWAmHcZ1+$62|3>?Bc$tPT51Z zf$n2;H)1J!$b-ZbH^3CWWfPk+=4f-7o?DSU621*~{Vlj<*_WdCXM*>wncU%WYPmo7 zX(Uy)13J~6Jt0rU3a=Od6|WIx#<+XS)DVPq0v^&(H zCd;4IVY)@}m|e{gZdRh2(o2eUvto&rXbe!W{0LSpWM3y9W$`JPrlm*gA>1PWikNFu zRYlBFaO*^ka#70yGVlaUUwDV+U$0?c^%h(;k|CO9bC8+(VT%!I1yhep0$##ml5a*iT~PsE%dEa*jN zy!hRzWeP9m=U_TfF3q3Tg};ME=wt9vi&JO6nQ%EBKMm&^)NPSoEZD$LoVb%^eu zYWW##P?j53(t#*@oS4O^MIFc4373 zk;D_0RsJ#dw3^yCe_Di+_@7H+jnQ>ni(GF|7qPIvFFz(fpaK-$r5@Z5m-c9n^<2CA Gkp2f|g!K0S diff --git a/src/__pycache__/cpu.cpython-310.pyc b/src/__pycache__/cpu.cpython-310.pyc deleted file mode 100644 index a609abe66dde2cd2f4585b569c689e72419267b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1142 zcmZ8gJ#Q015S`ik@cCi~6hwn4(oncaj1UC^gpfc2nh?pNF^X2l?Z&xqzB_i$L0CpY zN+c>I3VuLR<}Ynam6Dc#&j#R8V^o_ql2;&Z6CoXul`(`IckFiv2Gb)R{MQQP4MYy{`HGYDK)7L{$YD%UQuvql@&k+RYsr6kTlUbW{)IWjLZYo$Dg-;aj} z^;8dMllon4?NI5X;oNN5t$TOx-QO~qZEB;{VR4k@TaBr6ZL^^@`7m#0+s!A_Axa5z zi%G?}jxo;H=oQjMqom6xvI4t2p3vi?wdY^%-UboBa7ao z+t(xBv5b`Byvw)w=s$(yf-xt5*AFtdaHn_%=B2m98GObC+Ko0irPiJyLN#3AVWh#7$Yj+-Q?-k^c71>5RYjRcS?T)w zbkH8Ga0h`|CyFj?h@!*d|F#4~^*SZk+oV!VF~lCGVguKOAW6v+UwUHW*Sy2+qHLP> zgk~h0YAIbR<+N6_lI@<9A7)v(+%Xa1`5`mc*xDrJ`m6EHby-Szg-VxGcuWj;pO5+} zOMuvjB)T5>_#iSjX^Vb_X6CNd^ovkss>$e+ZS~afRQa?kxPAux_$7~*JfCpGEDwGH J2|aE@`~ea60agG2 diff --git a/src/__pycache__/cpuScheduler.cpython-310.pyc b/src/__pycache__/cpuScheduler.cpython-310.pyc deleted file mode 100644 index 272a1e2b6510047ea7b172a79e177659a3671327..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1105 zcmZ`&!EV|>5Z$#67y>PgQbp>mQZF2ct0>2+N)=VTQ6$t0mzCpLz>&f3ERIyfE%}h< z$S?WYQ_sEi)R`qtfWn}i+4bzqzIijGtyV*jRNdOhbAtUrFKD9$-4;U!BslkC=z^eFx2Y93;-`EdYArNE#q<>?V?FQX(`$`i zM}13-(PkwroLEX+^|qe1bH&tsdN+|*}^@D&|f{K?XB zy8HBF=zlHYPVjIU&bhPkxX9M;#5su)OMDPnXa0Kg<$bAd3B%-GE^!e}o^i+yjE>$nZ z(d~kJW6{sRNHU;;449w;=M5QB!Gv?^54hmMy(9xyc%lKVCw$R_wjlzs1FbJwB80a2 zhHx?n;PhR?j{CiIvpF7s{-)|D&{>c%(LqHo$dWC{iY`b@Mlc#X0)4(f>sH=^U7**% z_&&K}Jw;)4)1UQ(x7LuN85DX1|qknQ%vKgppWXXboRl)Y(u3>wju{W?Tq({!p$N_ zHKD1I?T=*DyPMdEs*f?^4!G87qSwfz{s00r-r+u-zX!;+=WYSR7(CVj`xP7n_7i#W z@K1Z&6+?h$R6WA+&22AW$(RfJEnz5RGIp0?KM`ll;74;Rz7TO{8!1D{4JYE z!z;9&l9S?G-q2MaVpss2*E}L-nHnFHAwlSOIIGWL!ADT7vI0<6%U1SRK<6RQzS-)Y zxURF&f%TRg5Jo9ka_~ibgXCD{ES(hr;qe2ou`7U>dIU=%uV&>XWhtkkW`ROAq0Xf& zf0=KoNI^`dnK@JC*2oYxw^H6863A6{=Vk?<)6aXcyT8wS4> z$1i6|Ue72O55pfoJw)>f8cdz~5={iggzK*-m3bb=TUUjDhQimUFk>iHjl%Z{r!D61 q_}q7VzwO%Dh}&mlKRt!Hu%la>*(YP4vj1I;^?OukegDL#d+a}Hxo>9x diff --git a/src/__pycache__/process.cpython-310.pyc b/src/__pycache__/process.cpython-310.pyc deleted file mode 100644 index 3a8e2b1cdd185230e2be3c43a659d88a7c10e279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 581 zcmY*W%}N6?5T0byAGAfO7cV|Q!F5FhFCv8=#7hyp?ImnCQMc@FYO-6f^rkQ4bNCjy zdg?29a;DotoiN}0en}=V{r&-KLno25Y1H`cV*c*CQsPA`DQRv;U(#l@x@^Ff z$J>{>*fmY?`H)d2g_aWUEeoUSocx}YZ*`J472CmmY@dLxxd%N8X=qYM^K?P59^2$5 W!^ZCQZ|Fqw-P`7@yA6~6dH{bnF@Y8U diff --git a/src/algorithmPlanner.py b/src/algorithmPlanner.py index 6f06e21..ece960f 100644 --- a/src/algorithmPlanner.py +++ b/src/algorithmPlanner.py @@ -42,7 +42,7 @@ def getProcess(self): def putProcess(self, proc): #proc.size = field(compare=False) - self.priorityQueue.put((-proc.size, proc)) + self.priorityQueue.put((proc.size, proc)) def getNumberOfProcesses(self): return self.priorityQueue.qsize() diff --git a/src/cpu.py b/src/cpu.py index f043951..22faa1f 100644 --- a/src/cpu.py +++ b/src/cpu.py @@ -1,6 +1,4 @@ import time -import cpu -from operatingSystem import OS class CPU: _instance = None @@ -17,17 +15,16 @@ def run(self): while self.os.hasProcesses(): proc = self.os.getProcess() if not proc: - time.sleep(1) + time.sleep(0.001) else: if proc.remainingIterations > 0: - print("Process [", proc.id, "] is running.", sep='') + print("{:.3f}".format(time.time()), ": Process [", proc.id, "] is running.", sep='') for i in range(proc.size): continue proc.remainingIterations -= 1 if proc.sleepInterval > 0: #ako je sleepInterval is 0, no need to sleep - print("Process [", proc.id, "] is sleeping.", sep='') self.os.sleep(proc) else: self.os.finishProcess(proc) diff --git a/src/cpuScheduler.py b/src/cpuScheduler.py index a45cbf8..63902a0 100644 --- a/src/cpuScheduler.py +++ b/src/cpuScheduler.py @@ -1,5 +1,3 @@ -import algorithmPlanner - class CPUScheduler: def __init__(self, prioritizedAlgorithm): self.prioritizedAlgorithm = prioritizedAlgorithm diff --git a/src/operatingSystem.py b/src/operatingSystem.py index e704ded..fdcd916 100644 --- a/src/operatingSystem.py +++ b/src/operatingSystem.py @@ -37,5 +37,4 @@ def sleep(self, proc): def finishProcess(self, proc): print("Process [", proc.id, "] is finished.", sep='') - pass \ No newline at end of file From 3586addca0a2d1987bf989ebfdeb9f518164031d Mon Sep 17 00:00:00 2001 From: Veliki5382 Date: Sat, 30 Mar 2024 10:49:54 +0100 Subject: [PATCH 3/3] Dodati testeri za algo planner --- .vscode/settings.json | 7 +++++++ src/test_algo_planner.py | 42 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 src/test_algo_planner.py diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7a230e1 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "python.testing.pytestArgs": [ + "src" + ], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true +} \ No newline at end of file diff --git a/src/test_algo_planner.py b/src/test_algo_planner.py new file mode 100644 index 0000000..aa8218a --- /dev/null +++ b/src/test_algo_planner.py @@ -0,0 +1,42 @@ +import pytest +from algorithmPlanner import * +from process import Process +from operatingSystem import OS +from cpu import CPU + +def test_queue_order(): + cpu = CPU() + os = OS(cpu, FirstComeFirstServe()) + cpu.setOS(os) + + p1 = Process(5, 30, 2) + p3 = Process(6, 20, 2) + p2 = Process(3, 25, 1) + + os.createProcess(p1) + os.createProcess(p2) + os.createProcess(p3) + + + assert os.getProcess() == p1 + assert os.getProcess() == p2 + assert os.getProcess() == p3 + +def test_priority_queue_order(): + cpu = CPU() + os = OS(cpu, ShortestProcessFirst()) + cpu.setOS(os) + + p1 = Process(5, 30, 2) + p2 = Process(6, 20, 2) + p3 = Process(3, 25, 1) + + os.createProcess(p1) + os.createProcess(p2) + os.createProcess(p3) + + + assert os.getProcess() == p2 + assert os.getProcess() == p3 + assert os.getProcess() == p1 +