From e4620f60c9e5c2e83821317d9750a8d4b3735822 Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Wed, 28 Jan 2026 20:32:55 +1100 Subject: [PATCH] page table manager working --- OVMFbin/OVMF_VARS-pure-efi.fd | Bin 131072 -> 131072 bytes kernel/bin/CustomOS.img | Bin 48000000 -> 48000000 bytes kernel/bin/kernel.elf | Bin 17272 -> 17704 bytes kernel/lib/kernel.o | Bin 2896 -> 3224 bytes kernel/lib/memory.o | Bin 1680 -> 1840 bytes kernel/lib/paging/PageFrameAllocator.o | Bin 5664 -> 5704 bytes kernel/lib/paging/PageTableManager.o | Bin 0 -> 2728 bytes kernel/src/kernel.cpp | 35 +++++++----- kernel/src/memory.cpp | 7 +++ kernel/src/memory.h | 3 +- kernel/src/paging/PageFrameAllocator.cpp | 1 + kernel/src/paging/PageFrameAllocator.h | 4 +- kernel/src/paging/PageTableManager.cpp | 65 +++++++++++++++++++++++ kernel/src/paging/PageTableManager.h | 9 ++++ 14 files changed, 110 insertions(+), 14 deletions(-) create mode 100644 kernel/lib/paging/PageTableManager.o create mode 100644 kernel/src/paging/PageTableManager.cpp create mode 100644 kernel/src/paging/PageTableManager.h diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index d40d20e2a884830999d602a1067b2b839a37eb5a..e1e2fa3f13f772fd6bab269ef2f0ff54b0d2b02a 100644 GIT binary patch delta 80 zcmZo@;Am*z*ifOx*f;s0mGJ$%x(m;2gv-)%h(H~&T>w+3Q^j;!DSlbW~&fBk4+y8SehHYY;Fj&Wmd%$!3*AHxru1r6C|&I`#7ZFhM=Z+K}D@F5z#DBK=hH7Ffwzf ztiZA?voJ5+&AlV+4p1h;i!{(M_C6_Bk8YkJM`=!|IB6CTR*)(|t;F%Fu+N z36dmQvm}o3apAFX@pfy>c*WX5i`VssN#U|2jj_eX*v49|wz1Txe~8q>rcV3HZ1-%K zHCl3d@7!UI7_qUNn@4oR9(}$(eXMndr@oH5`LyLo5#z?i83P*iyCLlsH<9*^ZMbRo z{d-z{+UW487?IXSQH{1COJS#xd9&M|?ruHKn&(BRJ;dzD4M zu2PH4a%iwqpH`BvNO7Q28hd~3QnLFRt!i?UgS`GR>{BwyO%Cj6s#I5Wk$nPEt^341 z%8l!a!&a!2TYm4M=fLR=<5b;-kr^XBmAql)2q})EHGQ!`CC^eJF7w)%esj5$;7VlJ zs^mghO$#O4X~K0eu8WntLFcbwL|)4r?e@cp<77=&Yz-NfXp!=oCQU_RTPenu?i2ev zs4dG;UXx`)Pi}lhsgh^QQ5pwX7-n5(@Ms#3KuCFjZorg49Z}%~pO@sNFAZF?pU1#nX0n8HK`T zY_+qMUUDFcBc)kts{eGk{Er=pR~(lV$MPD*vA9}s#8)Y~mgYgYd$lvo9p`^_S37l+ zLo?p*ju<9#SoY&A+jh;AYrCctC_`-3se3VQ3!+o&lQ}MnR5`YbsAsKK&yJ{PjaY(~ z!d9VS?`oNMnAGw#w{MuDD%PRW?pT8=KY`Hf88!(D& z=`AjDEg_=mtry-BtRA<@tIeNYQE&Rm{=qHu+vfT=7&2L0UMv*gE{dRwcKA$=w4SYC^J4*e~%#i~XH$d6_ikGmG7y{uI} zHy+Q*6O}g#pMt`p;EM}U_=4F=uKvC#4qI)1C!S$pgV$=f_5p~`6YGq}>nB%YTrr+) zadx#S`?3koYE_nm<>y(B`=D`@XVfI_QYov} zV)*a_5s?)4+f!ATa*RnU%s4}e+bfDLRvaxVfAB=GSme#n6N#S$@v4jV?~6`bfdzNf z7hJO)p9yw_z1y63{)Y6>*X#UW)|(+}^S1@pEv4~ljm3((SBv@ob+HS(Y1OSU>5CP= zAr*HnHvNWH+>DC`A^^+$2zt6NTr#@>wlHT!S=K9s; zI#zNhK(25vX*xjmG2s)PXbXz9S>wk?#f-MbDK=}2ZKBm4KH6rD4!8T_kksIT@k*gJhrZVc)x45e@S!zny0&?w^5vzGIzP_3IRWP90T? z2FaZ*={UWmmWk6%I89J}LvVTkr|VRcI6aHg%UU$>7Eb+sbh$DcPHSGK%`3Lw#Z8h{ zs)^#Rp*Y>8X5rM9fK%_ET&~zV?uxFzD;@m``j_6(zo@={6Z#8PQz#z6dev7ntJDi( zj$7zhqK1dc?MG;{(i*ayyf{AyjUgaSXj) zQWHrUAo563ruMHSokQDNGD#O(>j5t#-V`g0>W^#8tA00F_UcI5g;^SD{9%`344S5Tg~{zZCL1|6VwvLjT5qIuH5}bh4x?K! zma0`2LyC>~=|)>PW5oN2%HVibZ=@QvNX*t0VNsC+V~65x7KgWb3f&n&=oTAY*+vg* z^~Gtl5#MS2G5U?(EloAzuX^Z#2}XRi5l_dDzc^y`M%sqBm_EPJ^n3L28IrTncElSi z7Bs54oWvhLxX3>kWs{@~NqWxc zh%h>C89U1~;&Y5dTaAge`_PwajK6MdAk`SZ)`(kM>H+OD#_35Tz8Qa=iX&6}gZZVK zMu)f-#~8hldf=58EA=y8*1D3$8SykDo@Ivj=G8e zFm5oyQ=#LLav{w1lGal;g2 z0?GKVO{Ot%N?p9svs`5)YWxT`8S#&?5ph&&|4P!EM*N2H5d@g*de45NqmviROiT_>PF^r8F>OI=$>?yo*re7*$X4@6Z}rM!zx^N2Q;~9L>r7vxM#jUNB&(f9$-~V~ zH~pTaqvQ^zD)p&R@`!e|gY>aAsG~UC;V$*kD7jbj>LFT0@@b-WvdJOtu5kT&wwe_x zw^5UA@`jyGv)#-jGg+9LFg0ar#^lb_oarv67ECRfJeXQBc`|u1wPtF=)Rw6olQ&a) zrVdOUnL06bX6nM!m8lz(50jP2m&uRGpDBPTkf}RU5K|APV5Xi-y_oK1>dn-LsV`GM zrv6L=md6AQxel0rnyY>m>y($i0NUbWTyE{k1#D@N?}^al*+V-DUE3{(-NjfnU*p=#`HMT zGNyE<GMF-%vY1vfWizc}TFt~vYnXDF987DOa+#iB%41r`^dwV0(^E|AnVx3a z!1N5$MkbZ1fazJL=a`;n+Qjq%(~C?mF%>cuF>Pjgndud#EljU6y~eba>2;rlnZ9AV$aIP6Tc+=rYM8!f`VZ3&Og}RH#Pl=MFHD!2t}tC?`jzP# z({D`InQk!EGTmhQo#_vzTTFj4{l(;3OQv;X0yDUQ3>IhtO`#dMLvy$bT0l$ifL7oM zUeFraKwD@B-q0R8Ku72VouLbKg>K*jR`3Ns@P_~hgzgXoJs=o*LNB-*dP5)R3;m!! z41j@f4-A432!+8A2KT}c7z)E+IE;Xi5DpO#38TOUqAsIBfhf2S#=uyJh8P$JcDNs6 zVLZe^JWPOzFbN)j$uI>HU@A<5=`aHlVJ6Ii*^mTtU@pvq2jL-j7?NQ=JOT?K1r|ao zEP^yx3`^iqSPGB9j6l)_%v2m9dwybA~65ICU>4#N?658j8PP!1Jv3_gGl;W&H*C*UMh!YMcn zAHyf`DV%}Npb9>RFW^f!3+Lb~I1klu0ltQB;38atZ{a(rf$!lz@B{n^Kf%xN3tWaP za20-qYw#OfhZ|4}H{o~q18%{e@E5pDYsrkyAI#teGFYGqG=*m14$a{%XaOz316qM6 zctLAu18t!lctd;W03D$dbcQa_6}o{BSiu+kz#jr25V}JU^nhUK3BBNM=nZ|KFZ6@{ zFaQR^JunDDAQT2e7~Bg(U?>cO;V=S5LO4V~B#Z(Zh`Njh1)|_S7z1M=8e(7^*x`PN zh4Byv@h|}cVJSQYkHa!Zhvl#WG9VMOU?pV3Dp(B+Yaj<4uoiOR3CM$W@Fe8JQ?MSM zh7IrxYy=ew;8}PMo`+5F0=x(>K_L{uW_TH1fi3VVyarq0b$A1|!JDuh-h#KG7t!r*H;7gDUtOzJM>yZ_!z^-+uv{@eD2i delta 5612 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 PbMJaN>P>v6+-v>^O*lUd diff --git a/kernel/bin/kernel.elf b/kernel/bin/kernel.elf index 9ec57c4f27362affffecb0dfb25a914ec43a5b2d..0fcb592759ecb825a0dba94f271eb2e061724d5e 100755 GIT binary patch delta 3806 zcmbVPeNdFg8Q=Hxg+Nh0R1Bcr9Umgvs9=B^HFD55uG2Z^MkQK<)k`GU4pu_Y+6j7` zfZ@%R&go`4m)4nrGijMgGjknMhnP%qn5kgLCd5uHf5Z_RZLgEGL2Kn~NZ$VT*}S$gdb zB0A@Eh~?+0`9X9s_5_B*0vU)VBywV-5Al8H_}1PLs?33?UxO!5?dzkRMh7*oP+<3X z^nelMF`wAs4bp%+C_x4H4gD@ zrsfW#cAw2h@=gQA6FVD4p|BYvwvVouU4Y_{COtaxg=OVke6O0CH>r6vO3gzf)T|z+ z0X?}8tJ@<@Nf>{*lw~g}_x*k;AmlOiw=ilo?q~ty4h_+D#z^Cv2zwRi?g=h)lrwc0 zH&D))C}$SR8RZHD$@$c?#*GdeZ8c(=0M{AAjaP%g-R}j3oYqhGLQ)?jg+bIq&H3)G z)U*2ck)$n>+FpahyP)r4XBKs*H++c_n#KrdAYVUK(7S!{3eEQG+swZtx9Hk!USR#P ze5h9i)*s=MfL_MUBeLjv5xcac-S+2O?4Bd9C`B%+%bOCgi%$ajGu*_9o@BqYpRj4S zc&6oRZ;4DV=S~TDkxv482RHFdFXXa6E@{(Nv6v%&`Lm;9Q9mBnM8F$-63~CgO*~VN zlXcna*z3-RZQjq=fU{<4zk}CXR?9pZ!-9A3Ltb^T&AC7FsRNFonxmrFfodF28j7uI z-GEx7#)rC4>(D+LkT-;yMyxo3W9yo7kscRUo(1)o4DGp;bHDD3bz`L>TR31Y;tU; zhGUDd!{KplG8}G~$B9N*QSlCKFY_1MwV$wV^gCHU`pfJ(`ngOiv1>0fC;C&&g?=0J zqMyh7=&!JD^dZ(?V)u>Rw5)s$m)tcs?S!prPQom^mXi1oSp?`b@X!BdS$Oi3{@vV5 zg#T^$zknZ~@kxK>r2ixMZ@`~po8q69X^ZoZYs5ybG4C3?Yr{V*t8yyM(Mg*1SiTqj z6Vqh+CuG*Ze}Q$c$tOvC6Sj7B+DFpg2~rBIa!6@^embG=-8u!GSX80-mN2d9opYWfCzl&+5{6L)O z+t_vRj{`l-T%`*)ioE!hG6;_BsT|c)Dgpm__}_v4$pd?n7qoXr=>mxsMfHE1tdHiii8d8io z^0L2|rDr`M#x_!+exx<1nD4Rl@`YLTis5Gv$=hG0AST$BP0tr=Q$!igCJFu zg$nnm!1xB-3LmhE{S&f6EqF>LAnM^fPuK`=BcdndHwqt9 zZy;auNY7i!@xHpf@sd6VTwJ0O8P}qSuBrIDGma)Hft`Eo4|6@*-oMV|0B@0eTOkDQQn6iw_kCvzm zY)BwyOVpW+{;|jsw-LK#jv3QxB7rZ8g_ru4nB-qNJVQ&XS6Y^~oc4=hQ_7!=}DSR~Jd zDoNlxKl%Sqd!UKuKF0^)Sh_uNTh@^9*XCxlZg&@i((RtsB(2BYuXPVk_j9!LC|3)F zNKL=5>)P5e^y}4p_z6wNYsZ5e&!;tC<7urYVSW}p4DJm<@58$AICe$UDuBFLls@;g z&|waJyRV{sQ0u-ekg$l~lj`{?)u2V-2?6`ulfq^1Q=}`B^zm}efaHt|j_WDTDam#&!tO+=J-qcA;7HJ-=Ub#pL2dSer7v^|7vxTx-<2f7QB=Vq0%xm5t+?Pif7^ z9!>_^EU53#2X97Mj!Qrs$ET>M9e2-ipLOBkA%b zu|SAOI$O3#$A5%=HOHAKNiB{g4m-ucr!)!?38XnNo5y7N8{Tv@=e6K%-gB*&COnVM zd!ItwD$F?E2~_0`TLS&uYYxN~+POJvT^7_A?dD$a7uop*2;triQ@DqL7u)%IP;oyG z)wo}T7Tga(2ks@{$Nd3>aK8jo#dc5HZ@Qj?&w^DaCUu%>6IPh*JU;drmVwYY#BIOp zI(G2HzDHP@VZV&_Oti-?wbwkcPoO;p?O!g7Ke!nG5oacL20BXY>io2>cP?}5Saho} zG4>ivmDrSK)ZPca(UyAzwb?&(eaF(&rk9M|M(JqJgX)boh{Ra36fBG~iLGG%5&}s4i&FT9F|1fqQm_PQDNC!* zz@a50%S+#oUa}S$xQPWRODo~^h>K{pI0-li-wh#*b^xtOXpLTN#OkMFjUk}ZhlD$$ zdI^DAp60nl*6kGTF3B+BqUK)eRNN=AI6eST+w)YLajy`!5+0zRiaUlkV-CU}CrDry z;oBtsD*GW(B0I>?iUyImD=P6}3iNDL8-Bv;s37AaW2^yq1=|ZyG;g5{@1-o)iB*nm zigi{Bc8BntRF#+TSbVUes(z}9XeLB^MB<^JG@e(m!98_D0u&_$vUMbjF z;G5GtBV>J-ep@3$xlj0agm(}tGe)NWXQc#=5nfL?9odVdv=iP=kIh4UbV}UA2B@q^ z;tNC=#<_^)BEk^jVje8&O5cp&QS-h-aiZt+knme58S~)lD1!Bl{=xnc7x@~U!RWJGV4B7y6mGF&6{Dg zwvzk7Qdh>Cpt|mb)b>*868VE=!DAeJQ0Iyp+bk`|6d0}BWNE09$Nj)JrNBg8{C{YP B5gz~m diff --git a/kernel/lib/kernel.o b/kernel/lib/kernel.o index c49a104f4385bacffd9cb6be01f4c68c23ea237c..d0cd876524a70b9c3728b7feb541fbb444a794f5 100644 GIT binary patch literal 3224 zcmbtVO=u)V6t2n7CTji^l|WYPU3A?=9i|f!9Pww8SeXjDlQc6KRs|V)W-6PQ`P-gO zNR|az{J~}z7zH86T!fq?;$g#rGVX%Wi^hxWF&A|~FM7}jLVT~ftJCS3_Mi`{tKRp% z_v*d+>$m8onT}A1NC}ab$gw6-LWb`<9>>HmMg~YfNi*xm#v6CAV>fG~i?;eJ94Y6TX`^csn$}M5~^ABdxEw87Kp+N{|#@G<6zbIU+uk3m1A_}WNBG3zv1KnmdXkXszV{bP@pznab!|LOL zQSZ0iZ!_z=6A@(M7TpE@?kzGz$QL$OmXzLwD&J?;4{nuv6qkwo@;Ixd8?2US*o5O{ zxB&zR|MEXV*A{}pcZ{`koffU^UC@7T>65dj)zCXsxlfGortKBG4$_(ra;4; z0}kmRp(bMTtcHC0!(c-RT}zVC`cP=3ucx;G@f$Iy2uT%C!oPu zX^~U_o(sUY1MtrR@MZx1Qvlu%3)C*pkpTSV0GtQl9|YiJg&QSa2GlDw4X1~;Zvs;TOXp%-~}b#aj!T2xETsF|7hxdjq0 zl(TwavQQ}JbhB&-_vbYI3Kx7AS0|EO&(oRN1TU72jf7sI+NcV8CP5SP$=5Qk(A0Et zR$G`)7KhJnDiXa0@32wb(_$LnOzQ+Hp(3Zs>*No+o zNwtf3HW@S&yxXUs{S7}2l&c7W;FZKXaA?Cv*AWDfxUCU_=NU!fGR}?-i}-loC4SSv zk&nMRiHp}9bj0uX;0G{9@#8<+aLc^EJ2=+$05lo@uK>RMB_ki-1j)zyf`T~yl_Vba z-~%3f-h&T%@arBN@1>0My$AR54;>uq?ey?_5CFk^9)u?2oc7>olehw76f`>&p~uAc z7?mtZ!av^Uwbb7%=94^;f|cWBR9Ca)2{n^NP%0 zVo?~Ne?$UKZ#n+*A1=)@f7wrgL5?K{`;YwzIYvJ>2{@iXKYiN){CWBFe-nH$rr-ar z1H1}0ulW7(6t>&{ibIt1|8x0@U1i#Qv);}nc<3(n*B$C&=T2Z$UX8RQe+ Vg85YO7PRxzHiq zD?zi*y!$?@#>F@x`-aL+|FiW)O5mD+@SILqyZbn`!Q6JpRL}KY|FNEP7%JTTC#N-i zA26NP(>mdSNqR}PuiLOmZFo&TRSC;^WdvX?Z&1EJ!oOTxDtIS!H>C zaSoPZV^or$8aqG#n%@s1f}vn^@zFTma1wz!NyP~GZB8OMuVDoI0VfeB`Svj_MPN!v zUgcX1jKK9P=;CP(@KM-Nl5vw?4T8^isyQ2GOh<8DB zD?_|%qWfxy_bu^0jFBe=cxvQnT7eJ71l%xGB>o!X+8_CNfdx5pTz|-)4N;N!q<@Bk BE^Pn+ diff --git a/kernel/lib/memory.o b/kernel/lib/memory.o index f775d83a6a4fdf2b9fe2b59e7be3f2d421d4772c..7bd77d624892aebf7037002f9091cf838b21d173 100644 GIT binary patch delta 310 zcmbQhyMb?l2IGf`np2%ZJvyIybk@G;{NT|UdZWYjiN|r*9}Gb7TGFFC^o2*a>kkjc z3m%<^__w(}>0t6`cKyK!7PNM~QFM30gxJFq4|K@N05#ZvbOC`Ah;ZZ+Xk&8bWvk_3 z=a?MGEIm1au|lvMC?Uka$WRAT0R&EyFEZBg$48mvrsfu>mIRb#3CewAs1Cuv0n={^+{F2#z@_uH)$qCHtlO0$zfNYM*1uPa|dIO6ElMEx! zO0h|-8cYg|leJjwI0G0V=0!{{WHsjuV21DvCT|4tRzT%eO#TRx1K9=yt&$N~ADP7`KVZ>dI>0cQi`5Q9d9m6t-T{j*VAWuHz%cm~s~x8RBLf&% qOcrD_=R5(l1q37}2LgE>P`L?{CjxmlpuFQWaGMMS~DDhNWbAk|P%v<}u$xy8Xs zcX5!8y0lXfI&@HQba&C!iryoq=ne1Q`+nc$?nph;&YTUaQTKMF70o(IL`f-O*pyc= z#}q~{MLD7C6);VB4@7^|CGx#P4rvm-vi2zw$_qrNp`Z!23Fmn3%G0Zob5;HCyn!at zF45z@kRH)@KHv@M5Z1^pi`1n;bPm$G@b-w-`$O3wdI|HoU@h3v*Q~r>Trc=jzF*uZ zl!`l$<6h%Mzf+k8H9p34=x_l&Zt!g!M275Sz$dC1)8L~tv{Ws~ngQIK2789IDWHuv z3m(mYIWTJp*tZPcr8PqTffaZ$tn7V-aY$>(WCFJZ)(_eNi$l#8p83aFqLrl6X>{ys um7PM_t@3dcegprL+epQejLpDgBF~ngl95XN`T1n(~Q%FE3aqQSx-0gX)>L9I-aLJR9e&?<#pER)J6it^Qhf{lox zxlXGHf`$GE5yUQ7S=fm>ms=qNyED7LZyvi(#na+ZL3>Nx&OPXe8JYN@5W>T%o~ApL z4C%k~IVDIejB&uW5jmlw&UBF?+GihHYq$%siDN_3_Hb{a$I26>yw)N~TPb_^Wcs0~ z7K^U`yGZ0s=`V9mI71;G(LI&BgLS4IMZ1b7744#J*07bx1xDgtBOQwflsMAehVPBkxl&&f*0FKmN_1QcH*SNH znDnG?k7&=;14HMa>NWlJ2(79oM3r7WNnY^fU20UrS$dy*3^G$eC6gnXMm@VmE4av( Sjh4wJ*!mb`%e0I9#OxmtUTPQs diff --git a/kernel/lib/paging/PageTableManager.o b/kernel/lib/paging/PageTableManager.o new file mode 100644 index 0000000000000000000000000000000000000000..8027176fee9952fb2044e7632d86695cfeddf1e5 GIT binary patch literal 2728 zcmbtVPe>F|7=N?cf6Xl-Bs*+}%BZFtD^ZD9StehRBGy6#wal)g8}96Gv!iIxKa^-# z1dkFOJbLJ`r?3vO)}iet2_bZ`LmPa1mQ2RTzAC{;+yh?LwiRL1!)b>x^`M^BmKQrK+ z1@8>CBh&pfS9`n}(y6VMlmZ0L&`EWH+Fz*saRtjljaixl6bCb8Ac*2tBqy=a(6lQ}f5y8ld2w zN~faqocApHz}i5lJ5TMpg&%$Z^Q(OSq@XOUgRl0?3(-llSxZ*^M&hoMj!yT=(~hC$U7fAgumvEuN=W#n;yucmi$`VAs}1TmwOCT`)>2@a zay*kE(c3*rtJ@Q9QG46hL5~>a|1s^|TBch!(&m`jJ8~l!WtA>qVQ^ec_3NX$8CFz- zbS2XT<2W+-=@$4Cj^nK2d= zcb%&a+*xPQqs~`Hypzu#2kxx%8Hs>k-@UK|{{Yx1=;k48A7al6F6NcU*)hY?VxTRv ztP{dA^`s_S`lvA--91{%F8lThas=o>>T%Qwr>#6lQ^+H=Ze)co!&*WkpVa zM!bgag=%yI+`-F8FSrSDr#to< z;P@W7&$W%`yLpN8M;(I0vxby!38k;k` literal 0 HcmV?d00001 diff --git a/kernel/src/kernel.cpp b/kernel/src/kernel.cpp index 10b1506..d0cbcf6 100644 --- a/kernel/src/kernel.cpp +++ b/kernel/src/kernel.cpp @@ -7,6 +7,8 @@ #include "Bitmap.h" #include "paging/PageFrameAllocator.h" #include "paging/PageMapIndexer.h" +#include "paging/paging.h" +#include "paging/PageTableManager.h" struct BootInfo { Framebuffer* framebuffer; @@ -31,25 +33,34 @@ extern "C" void _start(BootInfo* bootInfo) { // display information of memory map uint64_t mMapEntries = bootInfo->mMapSize / bootInfo->mMapDescriptorSize; - - PageFrameAllocator newAllocator; - newAllocator.ReadEFIMemoryMap(bootInfo->mMap, bootInfo->mMapSize, bootInfo->mMapDescriptorSize); + GlobalAllocator = PageFrameAllocator(); + GlobalAllocator.ReadEFIMemoryMap(bootInfo->mMap, bootInfo->mMapSize, bootInfo->mMapDescriptorSize); // ensure we don't absolutely fuck shit up uint64_t kernelSize = (uint64_t)&_KernelEnd - (uint64_t)&_KernelStart; uint64_t kernelPages = (uint64_t)kernelSize / 4096 + 1; + GlobalAllocator.LockPages(&_KernelStart, kernelPages); - newAllocator.LockPages(&_KernelStart, kernelPages); + // create page map + PageTable* PML4 = (PageTable*)GlobalAllocator.RequestPage(); + memset(PML4, 0, 0x1000); - PageMapIndexer pageIndexer = PageMapIndexer(0x1000); + PageTableManager pageTableManager = PageTableManager(PML4); - newRenderer.Print(to_string(pageIndexer.P_i)); - newRenderer.Print(" - "); - newRenderer.Print(to_string(pageIndexer.PT_i)); - newRenderer.Print(" - "); - newRenderer.Print(to_string(pageIndexer.PD_i)); - newRenderer.Print(" - "); - newRenderer.Print(to_string(pageIndexer.PDP_i)); + for (uint64_t t = 0; t < GetMemorySize(bootInfo->mMap, mMapEntries, bootInfo->mMapDescriptorSize); t += 0x1000) { + pageTableManager.MapMemory((void*)t, (void*)t); + } + + uint64_t fbBase = (uint64_t)bootInfo->framebuffer->BaseAddress; + uint64_t fbSize = (uint64_t)bootInfo->framebuffer->BufferSize + 0x1000; + + for (uint64_t t = fbBase; t < fbBase + fbSize; t += 4096) { + pageTableManager.MapMemory((void*)t, (void*)t); + } + + asm("mov %0, %%cr3" :: "r" (PML4)); + + newRenderer.Print("WE'RE USING THE NEW PAGE MAP!!!!"); return; } \ No newline at end of file diff --git a/kernel/src/memory.cpp b/kernel/src/memory.cpp index 9118a4e..4c9b61a 100644 --- a/kernel/src/memory.cpp +++ b/kernel/src/memory.cpp @@ -15,3 +15,10 @@ uint64_t GetMemorySize(EFI_MEMORY_DESCRIPTOR* mMap, uint64_t mMapEntries, uint64 } + + +void memset(void* start, uint8_t value, uint64_t num) { + for (uint64_t i = 0; i < num; i++) { + *(uint8_t*)((uint64_t)start + i) = value; + } +} \ No newline at end of file diff --git a/kernel/src/memory.h b/kernel/src/memory.h index 63251b0..c882933 100644 --- a/kernel/src/memory.h +++ b/kernel/src/memory.h @@ -3,4 +3,5 @@ #include #include "efiMemory.h" -uint64_t GetMemorySize(EFI_MEMORY_DESCRIPTOR* mMap, uint64_t mMapEntries, uint64_t mMapDescSize); \ No newline at end of file +uint64_t GetMemorySize(EFI_MEMORY_DESCRIPTOR* mMap, uint64_t mMapEntries, uint64_t mMapDescSize); +void memset(void* start, uint8_t value, uint64_t num); \ No newline at end of file diff --git a/kernel/src/paging/PageFrameAllocator.cpp b/kernel/src/paging/PageFrameAllocator.cpp index 03c8d44..674b377 100644 --- a/kernel/src/paging/PageFrameAllocator.cpp +++ b/kernel/src/paging/PageFrameAllocator.cpp @@ -4,6 +4,7 @@ uint64_t freeMemory; uint64_t reservedMemory; uint64_t usedMemory; bool Initialized = false; +PageFrameAllocator GlobalAllocator; void PageFrameAllocator::ReadEFIMemoryMap(EFI_MEMORY_DESCRIPTOR* mMap, size_t mMapSize, size_t mMapDescSize){ if (Initialized) return; diff --git a/kernel/src/paging/PageFrameAllocator.h b/kernel/src/paging/PageFrameAllocator.h index 7551b7a..19221f0 100644 --- a/kernel/src/paging/PageFrameAllocator.h +++ b/kernel/src/paging/PageFrameAllocator.h @@ -24,4 +24,6 @@ class PageFrameAllocator { void ReservePages(void* address, uint64_t pageCount); void UnreservePage(void* address); void UnreservePages(void* address, uint64_t pageCount); -}; \ No newline at end of file +}; + +extern PageFrameAllocator GlobalAllocator; \ No newline at end of file diff --git a/kernel/src/paging/PageTableManager.cpp b/kernel/src/paging/PageTableManager.cpp new file mode 100644 index 0000000..7cb4078 --- /dev/null +++ b/kernel/src/paging/PageTableManager.cpp @@ -0,0 +1,65 @@ +#include "PageTableManager.h" +#include "PageMapIndexer.h" +#include +#include "PageFrameAllocator.h" +#include "../memory.h" + +PageTableManager::PageTableManager(PageTable* PML4Address) { + this->PML4 = PML4Address; +} + +void PageTableManager::MapMemory(void* virtualMemory, void* physicalMemory) { + PageMapIndexer indexer = PageMapIndexer((uint64_t)virtualMemory); + PageDirectoryEntry PDE; + + PDE = PML4->entries[indexer.PDP_i]; + PageTable* PDP; + + if (!PDE.Present) { + PDP = (PageTable*)GlobalAllocator.RequestPage(); + memset(PDP, 0, 4096); // zero out the new page + + PDE.Address = (uint64_t)PDP >> 12; + PDE.Present = true; + PDE.ReadWrite = true; + PML4->entries[indexer.PDP_i] = PDE; + } else { + PDP = (PageTable*)((uint64_t)PDE.Address << 12); + } + + PDE = PDP->entries[indexer.PD_i]; + PageTable* PD; + + if (!PDE.Present) { + PD = (PageTable*)GlobalAllocator.RequestPage(); + memset(PD, 0, 4096); // zero out the new page + + PDE.Address = (uint64_t)PD >> 12; + PDE.Present = true; + PDE.ReadWrite = true; + PDP->entries[indexer.PD_i] = PDE; + } else { + PD = (PageTable*)((uint64_t)PDE.Address << 12); + } + + PDE = PD->entries[indexer.PT_i]; + PageTable* PT; + + if (!PDE.Present) { + PT = (PageTable*)GlobalAllocator.RequestPage(); + memset(PT, 0, 4096); // zero out the new page + + PDE.Address = (uint64_t)PT >> 12; + PDE.Present = true; + PDE.ReadWrite = true; + PD->entries[indexer.PT_i] = PDE; + } else { + PT = (PageTable*)((uint64_t)PDE.Address << 12); + } + + PDE = PT->entries[indexer.P_i]; + PDE.Address = (uint64_t)physicalMemory >> 12; + PDE.Present = true; + PDE.ReadWrite = true; + PT->entries[indexer.P_i] = PDE; +} \ No newline at end of file diff --git a/kernel/src/paging/PageTableManager.h b/kernel/src/paging/PageTableManager.h new file mode 100644 index 0000000..7e9bea2 --- /dev/null +++ b/kernel/src/paging/PageTableManager.h @@ -0,0 +1,9 @@ +#pragma once +#include "paging.h" + +class PageTableManager { + public: + PageTableManager(PageTable* PML4Address); + PageTable* PML4; + void MapMemory(void* virtualMemory, void* physicalMemory); +}; \ No newline at end of file