From 9ea562bbfed16d88bebd50b14ecaf35fc134eb7b Mon Sep 17 00:00:00 2001 From: cdez Date: Sun, 21 Apr 2024 16:48:36 -0700 Subject: [PATCH 1/2] new save point with 'working' simulator... --- Sim04/logfile_1.lgf | 2 +- Sim04/sim04 | Bin 75008 -> 75008 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Sim04/logfile_1.lgf b/Sim04/logfile_1.lgf index c83aaef..fea283a 100644 --- a/Sim04/logfile_1.lgf +++ b/Sim04/logfile_1.lgf @@ -1 +1 @@ -0.000000, OS: Simulator start +0.000001, OS: Simulator start diff --git a/Sim04/sim04 b/Sim04/sim04 index 3334c458b0d0e6e0e12ecc77599fbfef5821467c..085f484ea10e2e4a5340a3aa1bafe967ed720e9c 100755 GIT binary patch delta 7806 zcmZWO30zcF_jBHxkwst}5ENwC5fB7%K~qr>!I41RK|uip)6CD@P*EIQ&}gKbjy2ln zXHZ&Nmgtn?KIE>s?`AHQ3ZmeWWu?9Ux$nIhhW_vOd*{4!&wlQC_ue;CdO}%xLRswy zPCc>|;?={fflRJ#(euXd-;3X!7uLINV*fFBZsvDhnQC6hJF9(P^;amCS!Qe1JIXYI zAkd?W&XD|ASAMiE3O{wv_q`n>3iKoa_hx}QCQyg|9$JXPc#lZUw7v?3uACGN$s#Wu z=X>mfH?e2ic#@byuo2B|yTNe0-!>A~qK9WZ_f&_&J+DDKbClN}zQe90g`&(dJB}>W z=qfzF%wz^HGe4go=hFkGU@xDJFaUFX!aDefvU56^2tAr>rb6{GN6bPJVtQ~7C@>JnTOtZhF}7ONpK@)Ii?-i)asF>bpgrWEl?d>rhP zkYztqASpdhmxAlTT-{=GSfRQjj|EC1TV*%y%&t1f-pKO?vBtHMg5>K|gBZ4HbXrnu$2F3Q!2*0y4Ncp#WCm*DHTINSr?zz@Sy z)fZFkgoOK|%loK~IHKM$*pA~Qah{;6Q=sR@d;dR}TI|y)RUK`wGv=OXEfK%#G*_Lg zv$MASuE_Zqb0Py_2ri0DRW}T><9kW`fAB@57D~`7Y6XPh`Y3Nsm5jThCc|nB>O2Kf zaAjvL_~VzIC#p{;+o_-X87pGKxb01->l%VnqNl2R+OwTSwx)qz^ZK_~GqdHg!ZQ#% z#7uM>H_*;d9Xf2{vi^?Ek~4<|Pd5r-w6G)$h7{R-8>l)XzI7iX`K<{=MM5`9XhQfF9_O7^r{N zok$HS zRgqocS<86%MWUbnQ+uh+B-PNC+^)7CMXRn#$$}D%FR&MwDGL}%myv+TpKQ+`ZsWgW z<&Tj0G&?jYU9BDrrK?C{l1}{}3q{de7NQ|Vog0&}jn&=4k^$$S5Hpej;4OSRsXZ;S z zcxZ4A+{M7u9Jq&z2*#LyOr6TXHXM}R1D0Y*dRG{a)#+Logs0QBoJ%Ksl z@<6F9ZYW*NTnuMtE}gx-W`Q-<7zWz&^K1szS@{X}`~>VfJTxZ4e#li;(Wy3&id2da zdx3|zYWNSdU5y*@Zl@cew&~gDBu;V+rFWavf688#YFXAltO}k#qGqHYti&!OyLGs_ zM=XLU^-_GcN_~WjMrLZJibloVf+A4VO~QL4V>O-sH5!89qoOp=LRbLJviGrYRGMp7 zlC|zY9dZAt1)#y+qt}m~xU1Ro3h~+MIX~Ez$Vdn4nxLWOfYK4)+i*M8v=*u<7@e68 z?QvnIkMG8sW(UW`XRCwO!MHs$AF{A*Rty}&fms3YH5L*?TuyL4evuUmX?QIwm_D># z5%k5tF~OWm5T=X?f`4$zm|%E{6$F39ZDRtGZUx!`zQD7}&vB?}P1R}`L=m$$^_^Vj2^fqUz1f>56PlHMu#i~KL#o|_9F zo89wLf!2<3`4eFQ*5Fy!<&~um18DK{%qiKxY#m8@J0< zr`R!ttd*;d($ge$ljW&ellB=*gh^l%UQqs=E9%y%y0_g!++` zlX{1$gc!@Hm=&a^t4Ka;`?AO*ujJ%xd0*8eQ91c)xhhXIHkKfHJ^xhQ>8wFDP@;|# zbVj~%EC$;Zl7JL$=w+D5S1 zEJ~DY)+kYwC^I_?0}DTfQrue@(QdStLh)3cRm)27_^G;0@(Tj4I`hlI{+zk*(cVxRGuLdQPKzD%~Y?e}I~W z4SLIGf}m6>6jwJ3LI~lbRNsMwPg6t%grjzlZNf|U2*L)!^A8HbF~a2(RvqCJgdJ&n z&!BL_34cLYM>v!=_Q{0f=(M$(u;#2Fd`ox_;fsXt5dN)|La%6dP7vDCx{^+~JK?|1 z3j$kb)?N^Vd4!J=UPIV;kv<9t54tP}R|#LIL|+mvx*-U@jta%yp9G;V;r=%TA&0Pm z@It~{Db-5C1$2(J5N`FeApA;rI$@>L2pXWHatN)^F9{DM+=q_d1%ww6UPkyk!W#(B zyDJEX2zR?jnG?<=?C7je_|oS@IN?zC9Zb01oWAH6PU}V8tVncgvz$wEZN+Oi7Y9d$ zFAZ5}{98<4>ovL2v?oO|TMA5xjzr76-#-)GYC*U&3Mu?#5vR{c#4tOf(Yw z4!13dgpctjdLD(Z2;M^NQhz%B#4q*d{yvW5m-^AlUP43b@qbH$!5eGoISlU*JcqE% zpFWfVmj%OROs41ISV*u6%Lx968won#Vd6SqJw2~Or?O!1!Oms=FcH%UUdL$!tFeOM z8T^`H6P_aIgpUYrLD%KMkc6?z{pqMRjNn6@LGTh93C=ffTb}6vQD&$2E^}}gZ?6iY zpW+;iF>nog5p2TA1Wo2O#(^q0Z2svZ7e~h;rD`hG?jSx{@1rkLM*Tq($QzH9@PE@p z6e$P46lqHd--%kXNSO;X%o}S;U==O=^OP0E0Y|u3)W4e))2$J!E2>(U(Dy(8+C*4UPAHk#>exank@dp`%39m>%o!eUwK=+ zBZ<7rw_(|F#stV>-NxI(uO#jR-g%m{o>{A0ASU0yi^)?l^kO~_c{#tzVlkgbR{cB( zrSu!EWDYzhb4^w<4H8`yipN$`2T3HXw&tD%Lx^lAk-RZ$T`_!1nfWW7mx!5d(!&#a z2vVx&P>p!ws$yVkKu4>>%3|P1K1`CQiRxgX4;psOrtN@TkWO>aA3Ib9@%g+PCRF+8 z^ZAZ!9x1aTv99@iqEy%FBA(STpPwkzaZ?e$hulu!$NWZZz#BIdiET20pCPr$nj*1M z1yZG0VcEpLVJ(zp5u7A*lX>Sklq7Go6v3M`0cmgY8a8jNk3Of4naZ~|QlOkM4?2^# zx2$9qTq5o?Yvo45HRArqN)Cn3$i{RG{WL%y&O1bi$toO3gI%z$lsxmyd^qpU%u~}B z^UQuYA1Kk5VxBn&=VPXd{Jq6uHNyEpay5$icB1@fiC!Ri5M}w z*a@sw{YbqFFE_&3Vujb|6kQ|Nz9V%lyPDX#Nf)durj8SHZ{$2$(V0k zMo!lv_eL(WMea>p%iNndmb#wiPRhNB6FbA2`x8!HKcw8Ba`GEQxp$&Q_?>Ic-IKcb z4^Dg|#oV`0vM)GW?(8M_lWWf1a~SDIa;+-ad}HDUAAKYjE;Vh9o)4nAkK_`<$tG|7 zR?okn!bWoGQYzJY{!OY+BsWH)x9G)bkL0FHsaNX7X^!HiOVhkYFTP39oHKLA8OMri zVGL(mTkf!V(Mz#&#*y$2xsA1w1>i)XceRp3;U}8ZZdNi4YKiP_CG$W@wt868PJk0c z##y;Jpr*WfTI0x8cs3Ay6I|HK==4A2B#mG#y!u&n+HCov-NyS3LOV5mJIqWqfPA)`V~31)=0meKB=8a&jsJV z4jZug`_Z&RIviZAF-?#xqHHPL8J@z)m_=0NZ4F}lE!F|(O zXNZ9a({YAUOn*AVAZTw&Y)w>=X+~>k2g6L|M0ua1f2-KFLteL2=xugas1;i zZl+il5;mCzyO4!FCL^Oxnl>|PgXsyQ-Zwe9k|F0r$xxYWD44p|ool0rG7WQucHaNq zU%N0i`Ef8Ub|pWBraOdUpXW(N4oXO2mZfZ6Ca*R7+Lrqm~ zlyQ^k9FyuR8<$&D;Z5rp3t@o?)NlX-O|@!DXO`)j8oq!Prp0YYM-d>IY)@|!yZ(@M za!lLWz#yN@bZMA=7ZtBinp$S^?=+LU22#9tWJ%-G<)Vz2`MXRrG-UlC{p8B7-|3vf zt|FPe)l{XS0v|WkYbg9{CU1Ah^)5`2gfw#du){m^Rbeu^!(6B_IeE}D_{bjDNy3U< xvQ+P#!#p6v1$<0Z{t)97HCf_E?Y!m>M|l`vstSgl@QLYKF!TqN$vXt@{~wz+hI;@2 delta 7835 zcmZWu3tSY{_n$Mf8xMhX7eNQLD!~WV+wy_fVTk#Vv={1cHtn7ORu7V z)oGHf02g@ghXvTTQxa*sLhTc@bm|Soc&AeoY({UNBpxzwtj|RVvqbyu6}p~C<+w^~ zX&*vpNU!nvIFA9IXLhzC@0SR#VL!hx$iYIt@UD@P?kh2*YbD*lHeC(Y`9;GG{MJto zC(!0+2>5s?!_`!t0s@rvD{>v!Z&^aRy790SV+{r07$}P-NNAl-tX20Mxjf< zLP*1ufN=aIKzPF6-CA071$c^0QTUmz*jy0lf!Y< zDn5M;xp^O_2bJg}vzhVZwi)+nK#e+6VJF_lz+k;$xXd=N*|Uw6Rc?-vM+9Tn?om*S zBf3ZGE0w;Z%@T@TWoI)E3W@bPCQD_McQGK?FL|nS*F1R?uYe3Cw(${9R%+Duvt(nj zvdSBZN&o}t)4>^}v#haM8DP6dAnOUFdi=iXOe>{&bJe#j(3f#;u%XKgMQsbIk(ura z?phoe66f`?ER_8%$Lr*8hI7|=dC=`l*|#ue>Ss2eHR`iUpH5b(Rm=zsSL5vra=S^& z@D6!^Z0kUi6q200qoV%iAEBi*v?mxau?lb!|bhFZDqdq6ZEzZO5-9^_>L-FUbs_eLx z>DQ=pl;I{~o3fe5rJ2+{K zHAs-P7#k4;Z(?>tkk267|AOV?@`#a|qa&S$wA^7{z=c(j$21>hI0^o9TXOHlZ<2fN zJv@C@-~M039T?qXq$a?5;7Dm8^ukR&Ue#o$J3(&vMS`q;$RNFX_2oE6m_u-G)JVnNi!p7e8n|p1!m#wo--oX)5FpPD+#NGu(l*KJ!z@k9?cfZSNs$!yHV_^ z@4BH)Ufy0_iM`_|X;;$_+VPZ`t^DZEV#Xw zzuV>%$xYjIJl|`Ec8b51`X4HfFG(u5ur)E&U+gzdw_Dmn*_tWa`Rhl_9uUl5y@leyaO~cHx-P0sgBDuO)?3n`YP0rVq#ZJ_ zeIATBWcB;;GzEAaK^ww-532G8dPeW?e}v`11{my zfiJ@~d}+`n-Hd(?6$xbC_e{kzm*S(!tV(Nb4B@e*e+2GK3e(lmljB?&*Uw58kNr$O z4a2;_1Hg)_24B);^l|7(pgCtGyM6G3A^qU6<)m=#WQif?IFqwzMWZ>&J0YG8?DS-cN zYe8B#?8myaF7OWSNel8FdQudRr#*g#{A#oEfB0)!06nSN;XOS)NP%YR0-N2_maO3} zJhWhL`q-{vaSm6SJ4t865Ynq9CpCCDeKD-UVHw@wW&Br04;YQB=spI&$SCkQALAHT zfz}Lv>_0LQe#E&W3n0*PYUC^)KEQsNiBO7jGJC-otjjb&KRlRe;Gaa|)l7d-O9M{T_>i{!=0Azx;7mFwFsrjR*XIQGp6HI^tN zq^{NjGGg`Ow}_WYzQ|dAj>&7()1CXQ${5Yg#VctLy`E@EWwNYdTT0R<4RvHI9rGL} z-eD%jvcp+_XS_CrHFh5oo#i)90<--J4*cfXr7@o|*oYb^g0_c5Hx{HH7nKBw9g`?%YmzuyFU{vz1(SB^pB zdUyS5uVh*p-YnhQhrfYy$K`1YBoJvsA=fxt9{xBkUfb;-y*{WPAFaI=!aQr!y@0vn zM|%d7u6>j0jN8V)4m?KXuJ1Z-cbnzcq7X$J#!3}5U`T4JI zXhYc}-P=(fcgGER#q@%x&X0rLn3x|3>oJ$w3VfB?nYboDp5D_=<_AMK-lx_RbrXX5 zCqdYELU%feO`H%6H*wK~;M5<292sw=^wHtQrGXO4HBDEZtJ7@?-`f>BFoh9{!cn|6 zArL-6^~3?N2$LrU!W1l?Sm*guU|Vj!L(L?A+9#tY`N0w#G0Bir72vQNPs=8~fmTeS znIp^#G`;iMq~3}&sZBZ&>n0f>6%S4t01}zmf*02&c}TvK zq?aO5jZnjakLd^Dk`0 z_n-5{uZp{q?R&)w;R~EGB_BS;FQ)UdG&|LENKipJ ztD#}(HEE|E=kFY{N=8ms4N~VxgVQclsdFT-QPh&vvkx^rPFJfFW$r8DPE@Pe$w~I8 zhqYSmgT*DI;RtRm=`#AGPgocm>F~syw^pgQvU5~*+KDRlX1c3Ze?V;;Y=z7zuuEl* z0%fozsGGVL=HX{kBRh}q<+z8M{6j1SEe|yv(;iXd+27JUbqH^Xnts$}$BWYiZRf3` zsHW*SNp!*vQJid9@bWTV8+c3<6HbWY>La3P{Yn)5EuQngR)yZbB#OdMqS&2&L+O`C zza{iT`h7^hUGzJLPs)A^>hrTGx?U$dqEG1OOUJWG^edwuJBrq!c43q8yA7hKQghs$ zEut7g^gQKu7||=+M6rbEz@79(i0G=lqPUUhn}&3XXL`ph+-!fjw>LVK-BGfQ5;8fGtt+G zo+rA7Xze*V{u9kTFNzn4Hd3IEiB?{w+_-XF>lINPL^SKFC>9W1OLQU80~Bg4(U&O| zR-!&PMDZ5UMMPC@&r-)tikueW4!0 z@1tQ^0JLJ#vH;%wBu-w|4Fa*8x<14AmIXru9-{j`c%9m72o(V^AA>4_;TKG!`(m6* zZ9P^}dlx^X))$YG)E67+{u6Yo45p((Ol1JPgqhSf;%sUUVhy!d@iS_l;y2WG!Dedr zqUZ8p7>n`C1L&xkL+#%bm&R-^P0+yLGz{(u#s|^%6%nm z0fOoDA_yha*ByL0OeFP%Dube51nC}BM)u(aFiypBM*QggZpKT(>%9n*t~@fxE?764 zN<(t@l3$P6m?rBY;@jqoeo1gbQzP>uxC$}(VU zK!|<7TV=qLeyFTZ6V>%QdWT_GDQyMpf=rr=BwK6=6EK>VZZ>bMjy6%n%n&-5$Wh)@1Tkc7rk%})A4odOp1E;w zk)$u!*=*QA7_%|-gFs`L;2S9g%el}9cEP&EWLaSFVS5 zakC`(zA`BrVZsO{8)ZUgNk3PXHWkSj6VNcGrMZk_yQLOBkch}0`MM963;}cAm%OI5mF@jVHELVeRc&wll!s#;3 zcN2Mcj}H%{s%6&$wr&mF&q}cEA-tA()$9HcR`#rvAyV&pX>Fr{_$LF<+y_s(x zdo#~MH`3h6u{ZNlW!PhXz$@#A9D56|JV6wD4=RLKzAbhis^Z^y>4}tL|CECLgLlNv z9)dslw%C1gXnZ99Of5~I22(cr86)`!xo8`VLU)?`NIp4&Fa^`+M&S`9Hj>YjL#a0k zGbulj`~;c*)F@4RBtKUUz1ApAa}R#5Jk4v2(vuX;yE9|FX`-|i#_*1{?d)hcL~JiRTLdb?>TM4@8BP+LV3!tvhT=-J`!R|0 zX(IkAc(8}j?XE$d{ZPx44-IPVi6Jr@*ioi+mX#lmQqeoX<*o6s4!yR;(|(w|Et$U3 zE!mdLyJzCzZ9Sm~TenT7Pp;3_zXYY0WAz;Y{=gr%-=z14y*u(ikKUF9`fn%Q(vy9p zuw?ky=${C7`BFyN6{90puzH`~(qd^<(V702hMDj-X75gc1YET{8II!jyW?p`RPRZK z)i`|54f?1WxwnXR))jk4(ysZ#-l?>k4cs?S`?NrY+)U|YSC-|CeS6rSO+ybx!*QH@ za5k?h#;XU{!bx0U9Ztsqt91!qaHwe>EmNs4K!Q4&L0q5Lij$uYTrAS zvlrL9zzNH|>(y$oS)SbXRl!qBr>3(!>ECH?(VKhvgKF1h7ud(cALe)6ArAVPzhY#( z`7d`E0paG94#ZWO=XHS2P-LzmPJfO5ykgf*W#Jx9kF$=`aBrK>bbvxInBzT2d6PNA zgAh)dO^mx_-oiMG`B%oRH@kTfkUm8Qs#Ji2scdz8M{bZg#}hj1|GB~TWMZ=8YhL0> zc1q3HiNvdlWst)%;Vg=lqs)}WX1~%u-aOBXz Date: Mon, 22 Apr 2024 20:18:59 -0700 Subject: [PATCH 2/2] Commiting right now to take a break. --- Sim04/config0.cnf | 2 +- Sim04/sim04 | Bin 75008 -> 69816 bytes Sim04/simulator.c | 408 ++++++++++++++++++++++++---------------------- Sim04/simulator.h | 4 +- 4 files changed, 213 insertions(+), 201 deletions(-) diff --git a/Sim04/config0.cnf b/Sim04/config0.cnf index 9404729..4654fe8 100644 --- a/Sim04/config0.cnf +++ b/Sim04/config0.cnf @@ -1,7 +1,7 @@ Start Simulator Configuration File: Version/Phase : 1.05 File Path : metadata5.mdf -CPU Scheduling Code : SJF-N +CPU Scheduling Code : FCFS-P Quantum Time (cycles) : 3 Memory Available (KB) : 11100 Memory Display (On/Off) : On diff --git a/Sim04/sim04 b/Sim04/sim04 index 085f484ea10e2e4a5340a3aa1bafe967ed720e9c..30f062f5ff20bfe09bb39f7c2f0e0832c4384bfb 100755 GIT binary patch delta 20241 zcmeHvX}W`?F-;gCvKB8ua>b*!i? zt<)?{O1)`CrD@*kT6xXP$_5Rz!OXg()_MQW+It@k-1qDI?cM&^&wA!z4SVgiPgNZ= z?SI--pT<{O-5FoHei^UG%YaIVhBE*YHOuIRt4!W~@JfV+8_-|R0@m>gjeoqZJ>151 zT!Z58EG$$PJ*$hJtrI)ghh6FyYLXqHQ@7w0kMa^jx6O^X%9liluud<({i)~0$m4V3 z=7)T6e`xnVzG+;enmMa)Tx))axpY@H&4qF)RBN2-K;Ny?m)2{1L*Brf9@6NPu^yHr z9QC8Cnuxp~*Xb@&2=HT^@>9@zKyuIe(Zl`ZSLy+oK@0PvD>~f@8g-#@+5G6}R+m9n zLi`wH%(!Cw=oGARCHc|GiE*X*(Tyq*FWZl9H-yQ5z8}NkV<<|2AKmFkFZQDc`q4}L z=s|w;Qa^gIAH9s|je+)S78jx@u5K#l-s8pV4%y!E33>Y-1Iyd(ecXc+3(z8bKJi=5 zdU17on{cXc%W;XnMmP2jvZmE}q$B006ZmE*^ zM#8DSElVYSKjBo@mNJR2C7kNnQX=uygi{$?3M9Uaa2jAO*%Dt!IF+*{N#ds~6-8J= z(^#d*3XO~ax46!nL7;zYd1P^|c}b-x4UM-+M&GNIVohi~WFHMpNQb7fyvO9?b%W!m zSzL3j+*w>Z_(>qm=`h|r2e)_4PgIJtp`${^lEjhb_`kefcsM&&^bZ@G`&vImS>IIN zIe2e%D1_03g`!I&*wR-~-YxR7iwVVb)s$;-&AU)6A1hu98`b%VRH@hxieYVv&7}Bj zH<1(`A2~EyQ99@bjujKaqti2TDHM3AEs_e3ZW3?4=-7`mlx8dX51y`$5$^EEonwf3 zk_@K~6ZsK2euS0+v7#N}g#z(PL=F!gE}A2foHzP3rwkJjk%RcI0&!F1s4gWR+I#)+4G_+DjmuToCH;V5g3;BtmjlH6FtKCQX9IhCsC>YRrNO6C0 zUF427&WwRVjmvPh5xNf){o^|M5xfILSzNrUP2$r5WNdja7;A#Dq&Cj$8Yi48SzEOp z^Pr|^Yi-e1R&-qV{NEA2nCdm*1l`Q}HqHu-V_H{ql<9i!XSA_PB|EtKec0EP*SB#8 z3~21u=`U7V=yQ~vPw@s!)b&*1UQgpyqgSO-(YYHc+k#kDlDTB}|sni9Oe zf#yYRHR;t>ZI(_f%Tshpv3V=8<*>eGIJJ&w1F+>6X;6BTGFd45JSiauV#Z|(1A}*6 zMYB@g<6<&mZ7r^yjL|Il$HY?!@w4UFUI|kzzx;0$*7B&1aRpaDAmtvW^or}M&l1oK z{wEL79Vt2szH%{Idc*t?@rkjlN#rFax=8l5E~JiZYCih4_}S)FzeD}rLm{%$9+t(a z;T?Qh%cR$3D8`=^+Y7M?e+zoNWBInZoA{Ij%J_NUkDqkT=Z zx@uZ!k;t3U#P6a$JumoVfuGe?KTE6C*Tw$S-fX56i1ZgY`;!#-;TpN^*BK+u=VHxI z|Lb-W(K@(&F<)j=H`LE>wq|zFHNny!*D`9In-C0 z*gDA1$wkM?C-dzrxn@Z#hS)kLig}7g>rmO&^cHWy%$4Avn$8I#J0iWv*(Ih6-!&pId)w@Vw=7@XRC{}4KxO%)CsnTFc8@HvGwwTDdQCCe5S>Mp8 z7FV+d1^-jRFrh{~+g{#FeBmS<_CX%Q}LGdNT?_;=!VF!*_nxRy0A_zR3v-w-Zs zCX0OLZ(>RId{_MyulFLW*YmmuBTLV#S5H}zINjmj+c@EpQ$9r3xvP!yM~`+o6Wcgn zNlv+=s^TjpxcXfzmDDOP7n6I3usg-+-f3a4O6d=MasGK;Z0_AP#zFxu>zLTJZ1H*T z)UeqdbZVpy-}tMzJ!e$vE*gzB^ysLzVOF*+n8A1&U%^g+rtO?_;?tbmsQ+fk>SaUD z*B#$xi7tH-!e~#S6-8SER-Y3S`Xo8;!=kw#HCLJgeh?LX68YjE#gl!if)mmGzOh>Q zo#>UDXSHC*hV@lEoI8TuB+le^3mZ-=U`<=L-+oI*Q+}4q(&V$qH$;Z=5k^}Qde~>t z^{trNHl)f`PNbre?RdF;bH#xd0o>_>>lL_n^>h2I@T0jX-VPY zQvWoucX0Qx;pl(=zUU)``JiT4EEH3R4B&a+3o+!gu#1>S{#LhqCWG5~UThiKk4Jvi zcxGrP##eqS{wPRt-G>Q8)m-u^DqCl+)6rQ#TSn4CQ)jN%Xxf;ZM{;aUPeGS)t`D2RB~HvHc?R0c#yxq ztGa-`yCdhLD?&ICu#*k>(F{A&`{j2_)mA zH7B1GciwQEx2B6>!xKC0`VW{j*o&>JIIAr0ig_V7Xmycari;G~FW~#q#p}akv)(&F znHanm(kVu{8JZZUC^FWTc^C|DZidI^A5I8!;T)cKLM$pw3i<96f7OI^@p$1Ed|{ec zUDUnPtTdk?PYgCc%TTSe)UoG376*!w`u*c$ulGpNbqmsH^WLvbX(W`S_lq;z_#@Ip z*ods4Tc8Vbr^sCL$BpAhSUBI9BBmBkh(9V{No4##M$jT%j!k3HX3WKxyNN@^E}q*> z6piY_BfE+Dqtf|LDMA4IcZ%3MYPxe}iZAB%qG?pT=s&tIUzIGDj-Jln?%Mdl=!KjY zb`kx@=JKd6;?A+XlYU9^Y5ay)WNe<-FGHQ=$f%1vog|vZ#`C9=#FqfiCyDC-8)f?%+_WUIdt6LjWSh_jL9!s@ zbmLDa`eJX?IJr9Kr$q7BxEOvaQN)bz%QF(i`0+7$F>T_R?G4%5I1%j)T}}{BjE~_t zoyETKgZbZ%ir>dyC{0Wtzek#%KZ0JYGpFe2CPL}0tJXKxJ8LX$efII!HQBWJX0Va7 z(!A=3$e)nnvgj(3HbOU9TSc1?Imfs^zq=NJ!=DzW>jdwuqGJxcScf7=MH6X0@h%nv zda7RTtR?Xd2o!Z~)j!C^M4IQHYdkr6o7)6788Lk7&)?!RK(9P9#!vkD>)sWaH>G4B z^rw~RI{xoL`}_s6-W6+a`WJuuuoyqFX5yXkzK(t!2OgLcSqNE9#+`>K{OVHq;u5)} zO)w89Au@rMU-3wPGmR$yze%{J=v0eC74^fT#IQ->@tvdr&DhX(#?s@((n(Xo{^~@| zo7^Mpz7FJ!cf{1mHwGOB*?6Y@vy<38c{Se}CwfkK zBL2CzWc_6_$7I_`=1QzMHzhHCk)Oar?F2rH6-iUa@E2mmlBu!r%}s5FobBYEj1^m^ z&gPFd2}@}vpB^jnN)vfOte6VWJyxs)aK?&9OSAb`G2&mP$^5+-@iV}#7!iJRGJh&Y z^aF6mi0J^;F~W6oa^XEOzAm|f`r?qlx*ru+F3#7d;IcM>PYi(o5*Voq+#Vy&-JHnB z#t6%_{yZs044an7O)=uuX`6#8aDro$>#k@KGQAUD6D@j8kL6vXMe+3b89kzW?t5cx zr)6upwrrikN*Uh94cEDY+ql;weY(GaO1g<{+;fqlY5EX;JYwUFcs?mgB+OWpcd|{x zDK*N+APMsHQ5)wnlEcW%(K*jYiZ^F0;cp)hSu>aLk6&wiYUX7YKJK45KPbA68Axvj zSVIQ?Q*51e3;$w&qp55Z-`Fdjni(bDo1M%}`^1m4|HiF*#ll;s^1ogc z@7&s*pL|tZy!C)9_EkD%i|UJWUf4TZV-7)+EZ3MFXw3`$x#@CnXi@7C^EK@0=sIHl zO>fl({)|?w`5f*zK-gXLA)?7dwOS@2#o)c>CNS2cHg!-dt}8nJ2I*7CTV9a^?Rd># z^LD9RbgIU@MH+hocX<8ya&X4+TJzsE>^)#dYt0oJhKMqnYR$Ljid*O0$fI(_t~t?T z|7fH{e#b78!f&cED-cHOXpQ+Qh_&V`xVITTsbRX|6B?!)-rGln&wZ4K2a1>Grp2^4 z73Fep>04BWOP7N~idu0C{M_02)7-&a^qe2FXQ_>gs=HT-?DEvc((I+_PE8rZ!7|g9zfcb#00G0wS*y;7I1UwJ82{7mIMS0k9Lg=OADu;2FTF7DX(`iVC83C?*o8or@h{tfa3t)2V4*M1K?|bPOGBae#YzV326Dk>n#Dy1zZaF z7hpZ$D_?oNy8%a{Z%zPy3wQNYVNpm3X52+)6sE*Si3HtPBeZxsMMIv=pyX)fpzI6;V+zWf*{yUJ^e+W9myH z=-!0n$1rL>!`k7~P){%tC+Q|gPuwk*+#6>(i)M18c<|o15ef#QeXrO1jK3fC3F(Bi zlEANh&Ff_tGi_F{OMVha1>i4!Q~Y#qf@=<%Lyma8bm-V78sH0HJ@}bNz20G9`}k{Q zHZs7i;ExBtx}AQNPyZ13ue^up;jhmp8s$h;zJtII5U2$7IZ#)rB#{P^2|14bK--(ydOhR-0cj7}d3($P>JMj~m zWoQmNCxY%vaIHu46xNdz|6pgyShW!a{u%HO`}28|FWE!j-+La*K)Ym2NJg77-+{jn z50FFc^xrh}t%?aVF{q_+&wUBj#%%j3CXUzThc(Y4aYc#MfO5P}#66hE>coHtUF@O8 z*B;DbKwjoi8|&|4^=N1xm(< zbc3;TlE&C(CWf;VM>U$MNz)o1buUy|??%(Zdl@ed69*qj3R>Gm6W@(-VhtA;9vPkC z#okce6uS%z>nnI@tB-b~w&@Yv?9B2sBtxkkRwi!o#O4i#c~hR<4T_CV!#Zl}Cy@}I ziL#mUB@)A5B(eSyN#czG;zdu4>j8Z40lP7A%MKqAHbDU1r!Fo~4# z&V<|`ky1VeqtsLwbp!gXjE^8|BO*ouna|IWSg~~xqFTytBhDy^l=DeQ&onw<6@7MJ z$^TBQv0+mnSH)ZLSTKzXo(W_vKabVJG~PA_=GO5jQkoDv1IPwmO32ND)ex)aBgoP8 zXgb!|#NVX!XT&ZAvYCHN3C)!8Y~#bo^ey&c=T8*TcQp zJQ`*#W`SU>X4;CpKV($|CCp4lTL1k>r-gPQ8cmt&D-5k_b z0z7bQPwjL&AxsOI+A?IXV#-9@dJs2zno8}^#khqHGGlLMvuA|RiqDsly_5o5XgwG&k zkVGQ*^W>1ertK7XJeeP(Qaf}qB*Ly?SlI02Lhc2kWjY}aZ5kpb60nY?GT)@mL)+OI zYL3sHWbQ@amgO*Rp%!L6Zq9{h26VSl`>5FcM5K#4+H#q0bWUhtD2Qb=xQdBXLx^p9 zi(3DsmIdrIQjR1!YAE5^sDN`GlRk5ZOiP{|x^ap#6wH7$86GmEL6fTqf$=Jf(UaFnYMWHriAw29h}Go*=G$0WYLg8hQ1*PG-J;qDT)0qklMb)mxD^I06s z-Di>`gS+RjQRw~+CPzJjR^7)dnHTIDA6~%y9?OYD9dlEFR?S={;oQtC->&R$*TNUl~qyQ`&}~8 zR#i`Y^J5o7+Es!c-f9>W#^zizOL*;Yt*@|A(@0@_tWRd>T` zwiB84Fv+Q@y0^L5=SVTr6ig#tb=R+EZvf9R zb(q!_yH}`G`bFw(TIsi~P!Ax|#p=yhT$m)Pd+Q20<`%1WX=85F3R&GHT6L)}XcXOL z6t}68Sy8TKszdsAH?3g5BK~q!E`2m6pTmGzt_IL-;qEfl3*J^3Xes*-xc6wac5(M4 z_8HhKjoO#6IwY}5b!>(dcaPT=^zn#atAwgV+)dS0PbO=XutJV5)-Vb|spL9G4I|g8 z`{-(weCMcLG`wlGO3riCtVNQ4(6w5YDn}iumuj^dEfuC{0{d6X()Lk@XrAe7{dCEfaX{Aa8x??7((|mlmJe3eRWNa$_0tPbp}vh_ ze4Z83&{Ew8E7aRvDCc=LMH}|JE7%seXl8-51HkH8!K~<>3rubds5{<({fh=#)@gzs zg-6DMC?0~|Z!DM|J=~4==+0#LAhVFe7jXDb*KHa=$VEX||76SuSt`X07jn2AWFxiJ zy-fWH5g%l8XrIL0GnCG61t`k%Og>&V=mxv`3_gM{J3a1PGFM^Gvry_psHlTr;dvIP zp{2}*6t**cRbA{-VpQ^R?kJDQFz( z{fseMl*CgIt&M3CXSYSh{|w!r9OU_+e58}F#2e5ZD-fFq-5wE{7^(}b(x2%F=4mlt zdz|Y&aHQL5sfOE|QN?L_x?9^?1TpOf4J(l$O&gPj(gzor9-~%XR~%yJEWzd1mW}wU*n?;I7(^;cl{h1sSs~ z9(RlFUEHlU0lG~IxF=BD^y2d|^uA)<X)P>q_W^AQAdfH-6bJ@?RPn+nZ$Y zf((F`1d_KH#$K4i;4}PvKh!h*K}8xQ@fY z{w(?iMe*6+fbjkz>Jq#=Raz&*`oWO?@@X}~x&^Xt7+ql93f>#hTK(o*ml7{k!{%6b zf%m544iuB3w!Q|mNw4i~*3+oLTcNUC?yzF37cSq{(NgRBU{SXxIWQCEm`4urF$2WG zJt;TR@bKt!pu|q2!_!yqJS*)lA2R||y2YUSY^vo*KJ^XW$MIfF7i;(!iP&!s7Cjo{ zC*7xW>8OP+)?mf63tT*qdT7DTSGpgiI6?vmH=Yvm6OUAo!XaIBVf#6!c)T$+s_m3o z+Eqs5QEbzZ)HETK`5ao<<`xlr--zHrC=2-LoZIqwYP{g5}$lRaB z@l>0&KY^ZVuKjVWw|H!SPZu4n*>JR$jrB||Ch5Rb#C(-mROoNGi742-BYwJA!;_G6 zJSHXdC18eQu0*?Old{yYSE9L3KnLe4jx9j1u^~NSj=PJ476bJ%2U*8@>r@hRL114n z%b=UYgnxE((F8xMtzz^z2`mNsAPc3seKSFeVwwgJO#s$$vFKtDW*1B>Bvg68wn@tTVK_9#`{q*5a# zdbRl!JztCEg`>sD*HTtcOrJ-Wu!1l6VTL4dbW6D_pMLSBF@ zci&*T3|@KUa}p~ytw$+V1ZeNAB_@jU9tZuXjFwhY7M$GERYxmKUqN=I_V}29muOP} z*ek=dE-5sXqXsLJG;D@x0(h&O)IV7ID@=XCT;n((!>y`Fj=fRKc%laIktI|NJTNZp zK{+}UMSjVZm59Qs8bHYoO{0+M(9JYFOuT#`VbECE%s4bsGjU9}#2S{8MhrAEI#Vz> zwsQqsL(UoLZi&{rOxHt2z`?9YV=1* zXQjP~S^Jphq;^!<#@A!yE?)nXCpYo>mpr+L*FWURExi66PwwFTH}L-Zcm2Db+`j9d z_2lkd|Eec9@A^kQxpl`kJ>hvh)J2>15fK^aiurP{UTmehXj}DBvaRjZ{Wt1k!zMt6 z_UZV6N^mLKYZ-mN8*j^kopp>h?h}HCqP;=x+x3rka-p3bJqq+qa@Rg1cH&eZo8_*3 zrVL`6+_dXo?&O|*mVnQ8=pIsRz9klmo4&%@b42AE+6rqegp?gC z?2B&<&0V?>rf>!4g=1A@+)26af`CK*_p7nA7Fn?ty-g%J+JeW6q&K4m#G;E|W)|wY zY<=>lkRe)!_QkJQ^Q|H0{%`8zH{s&#^V-nBO@ck|s&P>DM9LqkiXBp^X%kMBg+d${bU~e;m zEmgw0p-_cv0>W6S2Zw`d?L>+-5Lw*C+Y&-&9fdR-}vEpVqx&oFS{z*~G@dG#>%p=Sdn?!oP*7&+|2G z45v8HBxzw5a|-iJZ!O9KQw*@LjJ=|X`t>XQwFeQsBwlwA=;t zXA<><_zA*tHLS!`3hX)EbeSm$*fyV|E5Nqv*nE?NuqZ9@IZ7OT#bOl}6+Y=&paEqF zYbdtBCk@<+XuZsw#%+Z@j!I+#RfZQOAQ`IDWCF7%i+%p}>^Gp5Of3h=CfL=L`jX`c1)gYESLt~8)d;ckP}f0^z&|@|Ij^7IF$^QRSi?7v zSLcFzIEH2-o%!BFST_wTRbPz|0f#%elHu`4kVc%(XjC4F(6Bjd0~C%rWX|r}6lVd@ z7v6%gWZl~#a)paEtbkv20ZhFRPXe^c-AY(54J%M5L3d|Y!sxS{I)>1`KyRcifD6F@ zFI*?t_;MBm-Itu2?tE4U<}Mv8W48d?tz)Iyr{D!789QBEIvnYWg6e`;%0PAR)C@1^ zsTsyOZa$P3h5j2{ySly}02iaU7l)9FUEN?1Dg4C=8gY|Bq%0O^Xv7B$BIUBUzea3u z8Pvm|-k}?T?2#LjriVvdsn%FIY{|ev^dt>lPD`Sz3(VvF%&@lC+ves-n zYEGYNj(^hZtQJ|Hbz`f=|1>y_aJSQvWH2 ze$ltvG37~f)B>{|8rk7yrUsBkl)5_8N8;V0gy)NLHP+T7!oRFAnZs;D8$Dls#`%hV zjmy5i-^?Ew+4$G_NE6>VsWI~6N1WrAX3akiwTi6YRyFSZ?MD{BU`hGhWy_W?Ex&2* zUCZa*U9OZbxMS|b@?{H_+`dYj`EQ+d$=sFYCFRS+1Fa()ueHu)jT^3ZXX2A<&x-r6 zFKV>@`H{nu70=9`GgkI+tT9T_PjpSjA5$WgQ+1yEZ7hq`d0w-z=Y6AI%HaJG|j}=>hySYFcED0Bt|j*Z#xEeo>YrbnrTJ$yVignrUWZn2Y4QHuuOh_rso(z zb&BVzgN<-?{18k3ca2b_u~Lu9rrU}Go$T}(t`Ur5#8jOgRH)H+=<-+av`)e=9OvtH zbh47G%j<7Q;l5X-5jtbgO`eYf*e!7#eQv3`?|NV#>-3HHxo2LednQE2A%4tcc?+e1kx2cZi4I>=oHW&y5pg` zW10X&&(|wmpwlyT`UX#IFw4p@b`wV3Y1H2GlJ?$3LaavpSfKi0gQEU!$AN zp5{3XK6}A~g*S%Pdj^D{iiM*!@5aXJ2VFXLx<;2j{6(`B^bo&kp~sA$J?cp!0J^s8 z;o5b2M3F|%(|{7E)AbJo4yC)!NcMCIWzj61IzM{$a9yn9AQ`Z@5iWUog3`paQ3HZ-<>hct?v7?6WgNlPse$l zNo1K0V_9gP@6s=^c3r42n>;h9FL{$OZwc^>man_ZsMgzB?uew8OKxeZ-e<(ZbuhO#Qp zV;VROV82%jW>2msxhu=#3-)@Zb!9^wf4!~I%VIsxfF63w84a(*K1*Kir^7whyRvxo q%rAFvj(X=V?L%ELwLj^n9Jn68{etC3boM delta 24299 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 F{|i}J@f`pF diff --git a/Sim04/simulator.c b/Sim04/simulator.c index ba49b0b..3fd445b 100644 --- a/Sim04/simulator.c +++ b/Sim04/simulator.c @@ -89,6 +89,8 @@ Dependencies: ??? */ bool allocMemory(ProcessControlBlock *singlePCB, int offset, int size, int arraySize) { + // printf("Memory Offset: %d\n", offset); + // printf("Memory Size: %d\n", size); int allocateIterator = 0; // while until a '-1' is hit, then store the value. while(singlePCB->allocatedMemSizes[allocateIterator] != -1 && allocateIterator < arraySize) @@ -397,6 +399,13 @@ ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *me inOutArg = wkgMetaPtr->inOutArg; } + if (configPtr->cpuSchedCode == CPU_SCHED_RR_P_CODE) + { + // if in round robin preemptive scheduling, then make the linked list + // into a circularly linked list, with the head pointer pointed to the + // first node, and the last node linked to the first. + wkgPCBPtr->nextPtr = headPointer->headPtr; + } // return headPointer return headPointer; } @@ -455,7 +464,6 @@ bool interruptManager(ConfigDataType *configPtr, ProcessControlBlock *singlePCB, // /* code */ // break; case CLEAR_INTERRUPT: - // COMMENT HERE return false; break; } @@ -478,7 +486,7 @@ Dependencies: fprintf, ??? logFileLL *logOutput(ConfigDataType *configPtr, char *logStr, bool isEnd, logFileLL *logPtr) { logFile toLog; - logFile *logStrPtr; + // logFile *logStrPtr; logFile *wkgLogPtr; logFile *prevWkgLogPtr; wkgLogPtr = logPtr->headPtr; @@ -521,8 +529,8 @@ logFileLL *logOutput(ConfigDataType *configPtr, char *logStr, bool isEnd, logFil } if (wkgLogPtr == NULL) { - logStrPtr = addLog(toLog); - // prevWkgLogPtr->nextPtr = addLog(toLog); + // logStrPtr = addLog(toLog); + // prevWkgLogPtr->nextPtr = addLog(toLog); // THIS SHOULD BE THE WORKING LINE, but it doesn't. // prevWkgLogPtr = addLog(toLog); // prevWkgLogPtr->nextPtr = logStrPtr; // prevWkgLogPtr->nextPtr = logStrPtr; @@ -552,190 +560,192 @@ Device Input/Device: none Device Output/Device: none Dependencies: ??? */ -bool memManager(ProcessControlBlockLL *pcbList, MEMORY_SIGNALS memCode, int offset, int size, ConfigDataType *configPtr, - ProcessControlBlock *singlePCB) -{ - bool memDisplay = configPtr->memDisplay; - ProcessControlBlock *wkgPtr; - int availableMem = configPtr->memAvailable; - int usedMem = 0; - int currentOffset = 0; - int currentSize = 0; - int memIterator; - int *memorySizeArray; - int totalArraySize = 0; - bool subFunctionSuccess = true; - wkgPtr = pcbList->headPtr; +// bool memManager(ProcessControlBlockLL *pcbList, MEMORY_SIGNALS memCode, int offset, int size, ConfigDataType *configPtr, +// ProcessControlBlock *singlePCB) +// { +// // printf("Memory Offset: %d\n", offset); +// // printf("Memory Size: %d\n", size); +// bool memDisplay = configPtr->memDisplay; +// ProcessControlBlock *wkgPtr; +// int availableMem = configPtr->memAvailable; +// int usedMem = 0; +// int currentOffset = 0; +// int currentSize = 0; +// int memIterator; +// int *memorySizeArray; +// int totalArraySize = 0; +// bool subFunctionSuccess = true; +// wkgPtr = pcbList->headPtr; - // grab how much memory is being used total, then count how big the total memory array should be - while(wkgPtr != NULL) - { - // count up the total used memory within each process control block. - for(memIterator = 0; memIterator < wkgPtr->memArraySize; memIterator++) - { - if(wkgPtr->allocatedMemSizes[memIterator] != -1) - { - // grab how much memory is used by that process - usedMem = usedMem + wkgPtr->allocatedMemSizes[memIterator]; - } - totalArraySize = totalArraySize + 1; - } - // move to the next pointer - wkgPtr = wkgPtr->nextPtr; - } +// // grab how much memory is being used total, then count how big the total memory array should be +// while(wkgPtr != NULL) +// { +// // count up the total used memory within each process control block. +// for(memIterator = 0; memIterator < wkgPtr->memArraySize; memIterator++) +// { +// if(wkgPtr->allocatedMemSizes[memIterator] != -1) +// { +// // grab how much memory is used by that process +// usedMem = usedMem + wkgPtr->allocatedMemSizes[memIterator]; +// } +// totalArraySize = totalArraySize + 1; +// } +// // move to the next pointer +// wkgPtr = wkgPtr->nextPtr; +// } - // reset the working pointer - wkgPtr = pcbList->headPtr; +// // reset the working pointer +// wkgPtr = pcbList->headPtr; - // declare the array for the memory - memorySizeArray = malloc(sizeof(int) * totalArraySize); +// // declare the array for the memory +// memorySizeArray = malloc(sizeof(int) * totalArraySize); - // grab the entire memory structure, so that the memory can be contiguous - while (wkgPtr != NULL) - { - // count up the total used memory within each process control block. - for (memIterator = 0; memIterator < totalArraySize; memIterator++) - { - // grab how much memory is used by that process - memorySizeArray[memIterator] = wkgPtr->allocatedMemSizes[memIterator]; - } - // move to the next pointer - wkgPtr = wkgPtr->nextPtr; - } +// // grab the entire memory structure, so that the memory can be contiguous +// while (wkgPtr != NULL) +// { +// // count up the total used memory within each process control block. +// for (memIterator = 0; memIterator < totalArraySize; memIterator++) +// { +// // grab how much memory is used by that process +// memorySizeArray[memIterator] = wkgPtr->allocatedMemSizes[memIterator]; +// } +// // move to the next pointer +// wkgPtr = wkgPtr->nextPtr; +// } - // grab the size of the - // while() - // { - // // - // } +// // grab the size of the +// // while() +// // { +// // // +// // } - // switch case for each memory code - switch (memCode) - { - case MEMORY_INITIALIZE: - for(memIterator = 0; memIterator < singlePCB->memArraySize; memIterator++) - { - // initialize the arrays with all '-1' to 'nullify' the memory, make it easier to iterate through later - singlePCB->allocatedMemOffsets[memIterator] = -1; - singlePCB->allocatedMemSizes[memIterator] = -1; - } - if(memDisplay) - { - // - printf("--------------------------------------------------\n"); - printf("After memory initialization\n"); - printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); - printf("--------------------------------------------------\n"); - } - break; +// // switch case for each memory code +// switch (memCode) +// { +// case MEMORY_INITIALIZE: +// for(memIterator = 0; memIterator < singlePCB->memArraySize; memIterator++) +// { +// // initialize the arrays with all '-1' to 'nullify' the memory, make it easier to iterate through later +// singlePCB->allocatedMemOffsets[memIterator] = -1; +// singlePCB->allocatedMemSizes[memIterator] = -1; +// } +// if(memDisplay) +// { +// // +// printf("--------------------------------------------------\n"); +// printf("After memory initialization\n"); +// printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); +// printf("--------------------------------------------------\n"); +// } +// break; - case MEMORY_ALLOCATE: - // check if the memory allocation can happen before storing it. - if(size <= availableMem - usedMem + 1) - { - // grab the offset and size, store it, using the allocate memory function. - subFunctionSuccess = allocMemory(singlePCB, offset, size, singlePCB->memArraySize); - usedMem = usedMem + size; - } - else - { - // set the subfunction success to false. - subFunctionSuccess = false; - } - // if the function returns true, then it successfully did the operation, display as such. - if (memDisplay) - { - if(subFunctionSuccess) - { - // - printf("--------------------------------------------------\n"); - printf("After memory allocation\n"); - printf("%d [ Used, P#: %d, %d-%d ] %d\n", offset - offset, singlePCB->uniquePid, offset, - offset + size - 1, size - 1); - printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); - printf("--------------------------------------------------\n"); - } - else - { - // - printf("--------------------------------------------------\n"); - printf("After memory allocation failure\n"); - printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); - printf("--------------------------------------------------\n"); - } - } - break; +// case MEMORY_ALLOCATE: +// // check if the memory allocation can happen before storing it. +// if(size <= availableMem - usedMem + 1) +// { +// // grab the offset and size, store it, using the allocate memory function. +// subFunctionSuccess = allocMemory(singlePCB, offset, size, singlePCB->memArraySize); +// usedMem = usedMem + size; +// } +// else +// { +// // set the subfunction success to false. +// subFunctionSuccess = false; +// } +// // if the function returns true, then it successfully did the operation, display as such. +// if (memDisplay) +// { +// if(subFunctionSuccess) +// { +// // +// printf("--------------------------------------------------\n"); +// printf("After memory allocation\n"); +// printf("%d [ Used, P#: %d, %d-%d ] %d\n", offset - offset, singlePCB->uniquePid, offset, +// offset + size - 1, size - 1); +// printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); +// printf("--------------------------------------------------\n"); +// } +// else +// { +// // +// printf("--------------------------------------------------\n"); +// printf("After memory allocation failure\n"); +// printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); +// printf("--------------------------------------------------\n"); +// } +// } +// break; - case MEMORY_ACCESS: - // printf("Used memory at current: %d\n", usedMem); - subFunctionSuccess = accessMemory(singlePCB, offset, size); - if (memDisplay) - { - if (subFunctionSuccess) - { - // - printf("--------------------------------------------------\n"); - printf("After access success\n"); - printf("%d [ Used, P#: %d, %d-%d ] %d\n", offset - offset, singlePCB->uniquePid, offset, - offset + size - 1, size - 1); - printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); - printf("--------------------------------------------------\n"); - } - else - { - // - printf("--------------------------------------------------\n"); - printf("After access failure\n"); - printf("%d [ Used, P#: %d, %d-%d ] %d\n", offset - offset, singlePCB->uniquePid, offset, - offset + size - 1, size - 1); - printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); - printf("--------------------------------------------------\n"); - } - } - break; +// case MEMORY_ACCESS: +// // printf("Used memory at current: %d\n", usedMem); +// subFunctionSuccess = accessMemory(singlePCB, offset, size); +// if (memDisplay) +// { +// if (subFunctionSuccess) +// { +// // +// printf("--------------------------------------------------\n"); +// printf("After access success\n"); +// printf("%d [ Used, P#: %d, %d-%d ] %d\n", offset - offset, singlePCB->uniquePid, offset, +// offset + size - 1, size - 1); +// printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); +// printf("--------------------------------------------------\n"); +// } +// else +// { +// // +// printf("--------------------------------------------------\n"); +// printf("After access failure\n"); +// printf("%d [ Used, P#: %d, %d-%d ] %d\n", offset - offset, singlePCB->uniquePid, offset, +// offset + size - 1, size - 1); +// printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); +// printf("--------------------------------------------------\n"); +// } +// } +// break; - case MEMORY_DEALLOCATE: - subFunctionSuccess = deallocMemory(singlePCB, singlePCB->memArraySize); - if (memDisplay) - { - if (subFunctionSuccess) - { - // THIS SHOULD ALWAYS HAPPEN. - printf("--------------------------------------------------\n"); - printf("After clear process %d success\n", singlePCB->uniquePid); - printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem - usedMem, currentOffset, currentSize, availableMem - 1); - printf("--------------------------------------------------\n"); - } - else - { - // THIS SHOULD NEVER HAPPEN. - printf("--------------------------------------------------\n"); - printf("After clear process %d failure\n", singlePCB->uniquePid); - printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem - usedMem, currentOffset, currentSize, availableMem - 1); - printf("--------------------------------------------------\n"); - } - } - break; +// case MEMORY_DEALLOCATE: +// subFunctionSuccess = deallocMemory(singlePCB, singlePCB->memArraySize); +// if (memDisplay) +// { +// if (subFunctionSuccess) +// { +// // THIS SHOULD ALWAYS HAPPEN. +// printf("--------------------------------------------------\n"); +// printf("After clear process %d success\n", singlePCB->uniquePid); +// printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem - usedMem, currentOffset, currentSize, availableMem - 1); +// printf("--------------------------------------------------\n"); +// } +// else +// { +// // THIS SHOULD NEVER HAPPEN. +// printf("--------------------------------------------------\n"); +// printf("After clear process %d failure\n", singlePCB->uniquePid); +// printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem - usedMem, currentOffset, currentSize, availableMem - 1); +// printf("--------------------------------------------------\n"); +// } +// } +// break; - case MEMORY_CLEAR: - if (memDisplay) - { - // this will happen regardless. Will always be cleaning up memory with dealloc. - printf("--------------------------------------------------\n"); - printf("After memory clear\n"); - printf("No memory configured\n"); - printf("--------------------------------------------------\n"); - } - break; +// case MEMORY_CLEAR: +// if (memDisplay) +// { +// // this will happen regardless. Will always be cleaning up memory with dealloc. +// printf("--------------------------------------------------\n"); +// printf("After memory clear\n"); +// printf("No memory configured\n"); +// printf("--------------------------------------------------\n"); +// } +// break; - default: - break; - } - // clear out the dynamic array - free(memorySizeArray); - // return if the subfunction succeeded, if applicable - return subFunctionSuccess; -} +// default: +// break; +// } +// // clear out the dynamic array +// free(memorySizeArray); +// // return if the subfunction succeeded, if applicable +// return subFunctionSuccess; +// } /* Name: runCPU @@ -910,15 +920,17 @@ void runProcess(ProcessControlBlock *singlePCB, ConfigDataType *configPtr, Proce singlePCB->uniquePid, command, argument, intArg, intArgTwo); logOutput(configPtr, processOutput, false, logList); // run the memory manager in allocate mode - memManagerSuccess = memManager(pcbList, MEMORY_ALLOCATE, intArg, intArgTwo, configPtr, singlePCB); - if(!memManagerSuccess) - { - // - timeDigits = accessTimer(LAP_TIMER, timeStringy); - sprintf(processOutput, "%f, Process: %d, failed %s %s request (%d, %d)\n", timeDigits, - singlePCB->uniquePid, command, argument, intArg, intArgTwo); - logOutput(configPtr, processOutput, false, logList); - } + // printf("Memory Offset: %d\n", intArg); + // printf("Memory Size: %d\n", intArgTwo); + // memManagerSuccess = memManager(pcbList, MEMORY_ALLOCATE, intArg, intArgTwo, configPtr, singlePCB); + // if(!memManagerSuccess) + // { + // // + // timeDigits = accessTimer(LAP_TIMER, timeStringy); + // sprintf(processOutput, "%f, Process: %d, failed %s %s request (%d, %d)\n", timeDigits, + // singlePCB->uniquePid, command, argument, intArg, intArgTwo); + // logOutput(configPtr, processOutput, false, logList); + // } } else if(compareString(argument, "access") == EQUIV) { @@ -927,15 +939,15 @@ void runProcess(ProcessControlBlock *singlePCB, ConfigDataType *configPtr, Proce singlePCB->uniquePid, command, argument, intArg, intArgTwo); logOutput(configPtr, processOutput, false, logList); // run the memory manager in access mode - memManagerSuccess = memManager(pcbList, MEMORY_ACCESS, intArg, intArgTwo, configPtr, singlePCB); - if (!memManagerSuccess) - { - // - timeDigits = accessTimer(LAP_TIMER, timeStringy); - sprintf(processOutput, "%f, Process: %d, failed %s %s request (%d, %d)\n", timeDigits, - singlePCB->uniquePid, command, argument, intArg, intArgTwo); - logOutput(configPtr, processOutput, false, logList); - } + // memManagerSuccess = memManager(pcbList, MEMORY_ACCESS, intArg, intArgTwo, configPtr, singlePCB); + // if (!memManagerSuccess) + // { + // // + // timeDigits = accessTimer(LAP_TIMER, timeStringy); + // sprintf(processOutput, "%f, Process: %d, failed %s %s request (%d, %d)\n", timeDigits, + // singlePCB->uniquePid, command, argument, intArg, intArgTwo); + // logOutput(configPtr, processOutput, false, logList); + // } } } workingMeta = workingMeta->nextNode; @@ -971,7 +983,7 @@ void runProcess(ProcessControlBlock *singlePCB, ConfigDataType *configPtr, Proce logOutput(configPtr, processOutput, false, logList); } // deallocate the memory for the process - memManager(pcbList, MEMORY_DEALLOCATE, intArg, intArgTwo, configPtr, singlePCB); + // memManager(pcbList, MEMORY_DEALLOCATE, intArg, intArgTwo, configPtr, singlePCB); } /* @@ -1066,7 +1078,7 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) currentPid = scheduleProcess(pcbList, configPtr, loggingList); // initialize memory with the memManager - memManager(pcbList, MEMORY_INITIALIZE, memoryOffset, memorySize, configPtr, pcbList->headPtr); + // memManager(pcbList, MEMORY_INITIALIZE, memoryOffset, memorySize, configPtr, pcbList->headPtr); // loop until current process is hit for(processIterator = 0; processIterator < processCount; processIterator++) @@ -1114,7 +1126,7 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) } pthread_join(cpuThread, NULL); // deallocate all the memory for each process. - memManager(pcbList, MEMORY_CLEAR, memoryOffset, memorySize, configPtr, pcbList->headPtr); + // memManager(pcbList, MEMORY_CLEAR, memoryOffset, memorySize, configPtr, pcbList->headPtr); timeDigits = accessTimer(LAP_TIMER, timeStringy); sprintf(simulatorOutput, "%f, OS: System Stop\n", timeDigits); logOutput(configPtr, simulatorOutput, false, loggingList); diff --git a/Sim04/simulator.h b/Sim04/simulator.h index df03988..07e724a 100644 --- a/Sim04/simulator.h +++ b/Sim04/simulator.h @@ -301,8 +301,8 @@ Device Input/Device: none Device Output/Device: none Dependencies: ??? */ -bool memManager(ProcessControlBlockLL *pcbList, MEMORY_SIGNALS memCode, int offset, int size, ConfigDataType *configPtr, - ProcessControlBlock *singlePCB); +// bool memManager(ProcessControlBlockLL *pcbList, MEMORY_SIGNALS memCode, int offset, int size, ConfigDataType *configPtr, +// ProcessControlBlock *singlePCB); /* Name: runCPU