From 68df6c7ebb074e063a91764a792486c70d74939d Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Wed, 28 Jan 2026 21:37:05 +1100 Subject: [PATCH] paging optimization --- OVMFbin/OVMF_VARS-pure-efi.fd | Bin 131072 -> 131072 bytes kernel/bin/CustomOS.img | Bin 48000000 -> 48000000 bytes kernel/bin/kernel.elf | Bin 18672 -> 18712 bytes kernel/lib/paging/PageFrameAllocator.o | Bin 5720 -> 6072 bytes kernel/src/paging/PageFrameAllocator.cpp | 83 ++++++++++++----------- 5 files changed, 45 insertions(+), 38 deletions(-) diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index f6bce0b9f9b11e8338df05165003e63b510651d8..dccf4a9b585e8df090b40405fa2f1bbb86c90509 100644 GIT binary patch delta 73 zcmZo@;Am*z*pL=Bxz5UI^NO%@oSXYx)L0moZ$4=CnU`?|gjxxqRspGvypz+yoETRF TnP)jSmn9tYZ2GY51ET-{m&YK_ delta 34 scmV+-0Nww9fCzwq2(V^WlPa7-v#3_i39~w;#!0gDTt@TTwq5DEYf@c;k- diff --git a/kernel/bin/CustomOS.img b/kernel/bin/CustomOS.img index 6a763282b77273047a8900fad7390bc501159272..e900d934761c8b96ba44dbf10e2b172f58188670 100644 GIT binary patch delta 5187 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 delta 4906 zcmZ|Q3w)0C8^`hcd3MjN95%!zW=CXMbZ|Zm)8q7Y)=8pNI!J_$m~hoB8p%ybsiY*O zVmfIeM2U_RrKEJWQZ1?dKlh${{qcHrzh3YCp6B{qzw3AX?)%=Bzq_<uXZiOi0z*_5GR%b|zjyyAv# zcBsfZ(9q2Z-R{*&aVLehx!$Z4H$A*R&Rdn@E(tX*?%T*c5(+1Vy>4l4&+vp8Z%&%K zBz|T|&G{uWN+$O3#$~#7a{eqWFP~8|Av;nS8_A%4tiz3n6vVdozZAxH_lM>|taXOB zJ=5(P>gd(Ta&trPd;g@nna$JxUtwJOaoMB%FNLvV{Gqby2(Mp;d%2gLcZ7 z&9x;b_S3xg;eY#iAnmx7v;8lHv2*;PvY%<*woJEM&`vn(XRkcn&B&QR-QYwUQ;*AD z>whVXE%t}XepaM<{WIK=Q&S@alMh9<8$t5`ZMdj z%bK`LGn^oCj^9&3UI~dMCng^CGMc(eGCMbnu6yTLMdDTxx1N~T_7Cr1Q}A;w(tj@(0?pi%%Wp{+UZ%Z@-gSf^75G{q~`xye=qa%y#cLBJ;uk)q~3Bu z>P`QqHsEhdinqEoJtTO${2}a>GNc`0(fAVp*mHehlJA>O}(`f_Po- zi(mZln$f_}Al@m6-xK7I4&tMu@mkIl-YNeY7#*BB-WMI*ddZ7|bvsTv>+4=(N4H+j z%}gh9_Z9C9DLuWV z{`8Pw+6}5!JV&O-c)R@R=Y#1dg9lQ%daoDiM6Z7Z)4`Tb@8Cl-ZmqxRnYE&U$~!PL zh))UP6>lXeQ@oLsOI{I7pM1m}-dumTzk}($)uUCr2D_bFCAwRSq-Y>3h_@u}-^r5T zP6m&|$@NP8-TDQ~h6ZP=Y;vNP)|u()!D^>vv|N5rb)h$a>8UG&)hFM$O_f!HW(EYy zz6;`~a0vg}U-8p%jt23Z_-G)LH{QSE?u&!N0;I=hL<&4VO2c$F%T za6xfm7k5Y4i|_89R_u0jC&Y%ACwZl7Vp6~{qnp{(?sfsDi zRMix3I>mIVshX*}sfMYhDZ!Lzs%5Hes$)9MRM%9`lw?Xa)i<4PYG7(;N-;GurJB-A z>81=*rYXzR*wnO_!L4nJzUAH(h2LVH#<=+;oL$l<7*-Ri>*=qfOVCt~Fg}y52O#bc1QE z=|q-E@a(vT2HGswv+z&2*<}x@m@KrpZiqneH|f zm}Z#@P4}2)o93AAH5HlWn&z4AGtD>MZ(3mTObbnmOb?hIG%YqgWLjc+*z|~Lsp(PE zW2VPV%S=z0mYbe5J!M*9dfK$o^o(hh=~>frrq!nBO)r>UG_5hMH5HrInO-uzYWq>O{O3h=;rXNi| znSM4MHkF!wG5u;fV*1VWyXg;8ndwi{QPW?hW2V1N|Cq{WDKtkRgb@Q5v8aMLR7E^a z!KtW*>ZpO5NI)WLp*HH^G}J{sBq15~aXK2HAyUu?sYpXQGLVTZG)5CN#TjUZY@CVa z$iZ1?ftENM=ipqNhgN8fHfW1>Xpau)h)(E?F33e!bVGOKp$E=K1U=CUz0n7K;orA@ z=#K#yh(Q>PAsC7aa3L9Q(=h`xVYmx-qX4r|he2Uh9|HbPvR-8z|&ZXXRr#-;yJ9w^LPO- zVhz@!80+v7UdAhU6|Z4EUPlQw;08z`NLqU3d@g;{$w% zkMJ>eV-G&Tr`U^q_za(8Kfb`1IDoHk5MSdP9KyHw4&UPk{D`0MGY+E^zu;FK!Eg8- zf1nJ1;wb*YG5n2xP#&74Fu(o?BL*&FQ3Y|Rig=uYQ&A1oQ3ExRfJD?nZPdYOsEc|? zLNe;(bTmLiq@WQ}k%n|+AQM?=j3#J`Gtdm#I1|m0gR{^AEpax^!MQjOtxU=^Olb6Ab%@d94N8mvVz*5M_*j92g~Uc-94juLFZ y8`y|VcoUnk1zYhJwqZNo#yi-7cd-+@@E+dB2lx;l;bZK^9(;mN!>hD6obo@?g1emn diff --git a/kernel/bin/kernel.elf b/kernel/bin/kernel.elf index 6de91656dd5b5983295eca4e4837e38aff2784ca..d07eeb226d91ccf158d539c8337da923f32550f2 100755 GIT binary patch delta 2136 zcmai0T})g>6rQrxNcF<35(6Cu@NvFTFFgi#4|*x_JW2cL#@TY9eTU*U=Ej|gkUrb|64 zOh9-Ts?us*ahj)PW$}pCRlcHiZHpEJ&#b6E^uFI8d&Sqb!ec-2wfo-Pf%=$+@_*8+T)3*XH9`^`Kbl@r5`9(|jqAqR~^HLF^b~FlozmHT+s2R)u>p|x~f)&1Vi&oikiMd4)&!C<41`Qfus0sB7+((ut2ZYB$lYBDqndgMpmqb zAh5{0C&pgVJa@FVrF?9_g64s5yLYT{+)1YrWz zs1nN*rs$DswjuDiYRox!J$N*im9baHy7ihR(()hVC~VkQ?e0`efxW6-$6N7~58|;0 zhs0a?p5YLl55Syp(LS6acl~QR&xbr;Fz*Wdn$e%WW|6#Gt2%ESdE>#nhkwGw%sbrb zJ(E?yy}oRN!E4Ar7n;%`5|+lqomR@C!xVRvA)GM`#w;O>O~Jq}D_39|=i{)v%UasI zaT^r0f`uHWAm&WdK8CrD{(QW*LqUPbaa)C9i5EZ9_6b+k-K2&tVGY%_n2Pe));3UqMpa13eltM=dZTdJkGRPE z`EwG-yVS>J;wNl5-3`KyA;?K%BVB8b$`i(e4q)jG{iY*nn-1!o46P|>)sJRe3 zCq}O{tblL_)vP}g^u0oH2B~I}u{z0jF^v-IcZ-4+3X~cnBcCS4DBa&6 zCXNo11%%}uWN?erB8Y1_cf_}5u6n}BN_b{ rU{6D5g(ISowvFD23IpeJFnz$qZQ#^)M`S-Q6ShE)wwr$e6I#|k_BGgH delta 1842 zcmZ`)ZA_b06u$SRUFqBgWz$k9>o-G?TH^TraDc@Z7c;?tzx+TKGZTq2+2UdbEWnal zLD<<3W+rjTmYHQSLX&~U%oka<$s&Q6XiPA{EJU(7M-9e~vDI^XPmz*%f86ul=RD_} z=bU?+4xQjjgM1)IS@I9&78y${EVfDp-+G77jQnyUgSWujnPsMnddAc~eM%0Rz_rCs z4KS9O#|PkMrk8&JY1YHalny?$I+b|?d|@5t*`epNmbqe5pw?Eev?oEoZP?hWrJU4y zv_o~!=G@`E7mh}IwDvqTs8?N>R?kvJa(%ft1oh7dlTTQ&3vM`TcqMFeRr4R=q1~PD z{4c!CxsJMD9D@2*Vd5!YgME(IAI%&FBAp*8uGM6-U_&~huu$S$*3PzW4!CgyPn7^{RbAZ7x){Y8@mcQ zyvuc?j~fi|8Q&8!`1*8NJ)&;)w$$TF?bc07=N3aUV^)N$NsLXy$Zi{FFpK+}5Z-Nb z4E=!@^FI-%F=7>2nVxU(%X=pp?M+~It>vCW|4C>l%=E0{*HvV`pTK-?jcL^}wi8AQ zZ9ElbaaSN*Xmc!M#KDA!*0qS!7*PiWMK-<%8gREl8}9pI5ce(^!Toq>w&-VW`D?q# zz?exIc8oK;2LqddiIR^MEgc$5U&&}DQcNEb8x+RU7-#d_VXCwlO3KnZ#|RqOArr0Q zS*%|PzlFbZv2IGk?hw9gmOusJkKrgp>a!^lXePXh@Q;XpfbatnPh%bUdcKINdraQB78G;Al7_r zXKaOVuTcVSeBxpm4YH#dlH4m{b_)5}5&T|hvg8v-NAD-D|D}+rYFYtf&7&b*b-SLQ zha+`QZq`VVmII@8MMfX}>G?w8Is@l3aPQepo(xCSVqu^U{I&=HBm|^PPL{ojaSA zD^;m-cEqz(QOZK8X%j!M<4!5@FtgVwC0jF6(#v3z5*t$D^DY_k@8$6f;%DRudALGK z<|yv9ZJU%>R}%h3>YRI3DQz|`BPpR~Df*1Gwr$eNG_1!GD`p}Izu6kN%34l!VAWkI zc_p)|R7!l&7BV3ZwZLg}IdqsT)`r&10|%)OGi>TV^X|c)oEkX8eSko&57Jz3<1{JR z0Eq0E5Y|FJUOaN0ygva)Rz={9ai9dkgfGaFMkBHwm?5+~FoX+h>1>LL~dtH4o zKAh`f5YuRaQEMTZgjs7S{*DGs(x5juNMOuNHJ#(-DfWpbPn*=a(gz;yP~N9(F~$Ewvq)FGlv3SNeJJieviOZbY%-=PVk84xcb9)cJH3YNe=9#<0#4%1yE z%1)i~JmpDY(vVhh5uWm5TsH7-=+x}GtSy81Jp=y0fVZe;Sixj3tA!pec{y~2d*GT= zL@^k{7$+E?qLD;_9HiD581QpCUcV8q4ESG^Coi{7Kd62+@Y5;yZ_qD@#ORN+69hp- z0}2j76CRHdY=1)Iv%8)(;J0-8BLAd zc^csd_G)(zUn|8luMY&5*sk5Qi&xFF`eV0})1 ZFcJ9Zt+QJ4RlOrPBr}gX>xV;k(O*z1k>>ya delta 1325 zcmai!T}TvB6vywKb$4Bz+1=T%aZC)+%swbWvK7kBww2MM)*jNJU?n0UAvRHbvuF)A zUyRd3P%l16z69D52)?ZPU_C^vh*%gV^dT68Z%YYv&&-{e2BZUX=FIQ>_ndq0oY|S9 ztB1!Lgo@zw!8*Y+lJ`B%XYvDWaL>61&N)2L>kwg~Bm_T7vT#9I{jVbDSxgiOv#k#B zJNCxww9!OSoBJec*?AUjYS|SnySRx8GqY7Srrl2zsh%DsOzhB_6U93dGpKsA0Bx>X z=yF9M?aKKw$XdPr2SQwO3B%CnPOCO1x=RVEVzM1L<=!h)QK)uT3nwYGxT}?`6bleC zgzj&h{#;|}0Bw#skP>pqxRDAb4iHMdmKea~XELuqRylR2- zhrFAd&E7^1NMj|-~g>n^=(q(uq`eCWO0@lU)+=Nt1)kCZT8m`dC zuASe8HNl2gp>f@Jfb3Ifm+qfJD~mtEG|LK*X0Zh0%vYlCso@8MMRBQSwIjRme$KHw z?$y-4vT(13zt=l{);n(Nz6b@Ma?HsO82e&q)@kP)ZvhJ*g*m^XPFb?nz0bn7U!kwj z55MCYd*!uVcnyC;m=0MwUbArPjxrW*J%L$+!#7!0-*S!pRM$ZcC@>S~rYVqvifWE) zp7ljTJzi00Wm$7***xlIX1$OOD(&Wop0;Jp4=82he00fO8=rzgP^mQMG;hl;J3$Do z2w$A=A=Fg%L^4*AcR*#hiSC2WaEvxUXGDR?a0819?D;Inkr>q&jnN@^6p0DlGAu<} iJW2Lnfz}PGa>6rNW;}g|EBJ&jn^_->mj index) pageBitmapIndex = index; + + + } +} + +void PageFrameAllocator::FreePages(void* address, uint64_t pageCount) { + for (int t = 0; t < pageCount; t++) { + FreePage((void*)((uint64_t)address + (t * 4096))); + } +} + +void PageFrameAllocator::UnreservePage(void* address) { + uint64_t index = (uint64_t)address / 4096; + if (PageBitmap[index] == false) return; // page is already free + + // free page in bitmap + if (PageBitmap.Set(index, false)) { + freeMemory += 4096; + reservedMemory -= 4096; + + if (pageBitmapIndex > index) pageBitmapIndex = index; + } +} + +void PageFrameAllocator::UnreservePages(void* address, uint64_t pageCount) { + for (int t = 0; t < pageCount; t++) { + UnreservePage((void*)((uint64_t)address + (t * 4096))); + } +} + uint64_t PageFrameAllocator::GetFreeRAM() { return freeMemory; }