From 87094a7afdb21e449258089dd782f2c972fa962d Mon Sep 17 00:00:00 2001 From: kieron Date: Sat, 20 May 2017 22:53:27 +0000 Subject: [PATCH] LogicMemoryManager working. git-svn-id: https://spexeah.com:8443/svn/Asuro@159 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c --- Asuro.iso | Bin 5156864 -> 5160960 bytes lib/kernel.ppu | Bin 2132 -> 2222 bytes lib/libpconsole.a | Bin 64564 -> 64564 bytes lib/libpmultiboot.a | Bin 29040 -> 29040 bytes lib/libpsystem.a | Bin 140320 -> 140320 bytes lib/scheduler.ppu | Bin 2666 -> 2666 bytes lib/vmemorymanager.ppu | Bin 4384 -> 4384 bytes src/kernel.pas | 25 ++----- src/lmemorymanager.pas | 166 +++++++++++++++++++++++++++-------------- src/vmemorymanager.pas | 1 + 10 files changed, 118 insertions(+), 74 deletions(-) diff --git a/Asuro.iso b/Asuro.iso index dbf716ef38d796ca059a530c30525e547b4ac6b7..4d47351bcbf1cac2be769ff1d73fb86f7c9a6da5 100644 GIT binary patch delta 18189 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 delta 14887 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 X^e8S#u%~+e|MCA?1vbJTK;8Za6)F}A diff --git a/lib/kernel.ppu b/lib/kernel.ppu index 0a81646490128503bc37a2fa32db0992b771436e..47e071502d86cbed9ad69988c37b3eebc866265b 100644 GIT binary patch delta 361 zcmca2uuf1hARyGx*p#K2k%5`vK!6fM8wUe}@vSZEx3efUh%zuR$WBz$XKgy65NWz*+@##Z^vq1WuS`Cc#rg`nUK<78QO6Yj4-q3exjDnLlFo{i8V##8ZnB2>f$j1-V z&X${$nU|K&z$h~L4~sm%08ofMHz_wUJu?|3rp2nw$iF#^wT@9(5-7ze$_FG_vvU(O z^FY#S?9Sr<7=c1iz{CV(FacdCz&W{*U3&6tb^&f~pcpSm9BAt{_Ao(V5E}}_foz4z lvK;=hfrxdKUbgl%)HDJpmIi5kTOOF&B>h{ssInhHBSHl diff --git a/lib/libpconsole.a b/lib/libpconsole.a index 3428ae1882f987d7f7433a116bf8bfed90995642..0a977c8334c37d95037a26b58ce52cd4a74ea221 100644 GIT binary patch delta 812 zcmZuvODIHP6z<*`QAT&l<4%poG#(qdelsK%QW_;BHHth!DI$+DMOj>>D4M2znFWQU zDI1S7B}r_sV4*Cg*v!(xV<8h#%o+a~l->F6_nq&2_xvaLY6!j>d|3&OQYS0lwPz)L zSDYy-v?oOjahL&*YasI+#q|9NnDR-iuS$jbRJW1D0Tm9_MPkuv&>9pFc3cjLw~m>) zZ`#a9J?XruH<@d)6?Sd4vT(R6us~YwKDAsGT>q4IiD&1T;ihn1s6p3miSBlUsMIyP z1YP9^2jR>7-4C?DyZ4zOQ^fNhF4FUd{WTIOOP7*ZV%V?HVDw5} ze*D`Ul+7jDNU_aUQd&{wjGbHb$k6s!2!RDwC1~EfAxjpRBufl`y4678qmVzj>v{Ep w5vI0}NQJN00v4ONB3*OC+4U^37;7NJG6jpny^&}v_FpV-gkten-`j=!1(6W_eEDws(OP}73kpdq zH-6rgByocayHG9^H@kF!UC2U;z4N_8xqF}UJn!>9=l$N$t1k4a^XI2n9d<|co+Ur+ zyJD&&Lswc%mxQ_Sv<@OGlrp|Qfhv6x>#voeDa)lNaZrXMd5KuG8a9PEgk7giU>)NI z=ASXJF>elQb*D2$G{K&^LF5isrAEjuI-r)T((9knBCvvD1KgHva5ZSk9npQZ8!9!$ zB0z7|A$ej*drb!q3I1ABD*uyRC)qPK9(}EGoqHr;SIa8FKARhQ+q?wPG3v_Tj{BXd zv;fqN_9S(hV%+b)pe`hpf!`#Y4kp=1K!(i`g~T}G(UV8UxXO}=FtG?TC-uMC^63v^ zvDc|(6N}J0+f5J$J*F9k3$x9HLPx# diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index 81001a0bbb3efed12e0e45a20b68aa47fc4b1951..22832ccd922e8fc32e322a1c581c433ebdf16c9a 100644 GIT binary patch delta 539 zcmezHi1EWC#tE{lMkdAv<{OoKSs|>+3Pxg^yI6lSBXJjS9%O=Z#W&aTyg}x+^8Y|^ z#WpYC+|D%FUz7_;L#gN=bQSy-dinYah9;J##$X44tp#h9mqXTCtEk1eIbZ%0Ba(5o ziZTe-iErMjqJ`j!ZT_Wx6v36)d`DXlm8;1(`L7xOWEmEr&1$;)82L%mlxRl*6ISXlWyAlLikX8^Lu*^WJ83U7b3Xgo6o!bLsop= z4QM9FNq3m|HY<1^M>dz)mj|I!Y_nFtNn|cx$Uv^-C)^D2%?tC+GXVg&t(GJJ delta 539 zcmezHi1EWC#tE{lhNi}*mK&9PSs|>+3Pxg^yI6lSBXJjS9%O=Z#W&aTyg}x+^8Y|^ z#WpYC+|D%FUz7_;L#gN=bQSy-dinYah9;J##$X44tp#h9mqXTCtEk1eIbZ%0Ba(5o ziZTe-iErMjqJ`j!ZT_Wx6v36)d`DXlm8;1(`L7xOWEmEr&1$;)82L%mlxRl*6ISXlWyAlLikX8^Lu*^WJ83U7b3Xgo6o!bLsop= z4QM9FNq3m|HY<1^M>dz)mj|I!Y_nFtNn|cx$Uv^-C)^D2%?tC+GXVgf&zAiF diff --git a/lib/libpsystem.a b/lib/libpsystem.a index c234dd7ad0a63c5cb1f0ec9d5c4bbbf91ddaaaee..0a9031ce8b59ee4437a63c20617fad6803f89b48 100644 GIT binary patch delta 3015 zcmZuze@xX?6yJHtH006K9H_*6(w3F^g5XVD6JL%>Y@jQ((Ht^<%*Uo!*3>o=*K#@A z=*eySVk?EBoHh~Ot&Td)m-q{L;G2b(P@~ca|b2J%P6UM; zxWIIQRf%-%<%x9dAdlgu92zDiTbI{SH<#Pw|wNYJ}b20)*_JJeH`g zsiQ=r?`b3UD0pSTi34nF6kZ%jj<4uSj@O(`j=$5L9RDDih|7vg86YcT*DZH-n^#=A zo7A=A{fWOiM~VKzxDj|2rpu;*YA$XqPrYW#G$yL#;Ek^=elQ%|_z5uR{*;)&srVO`jN+(}kG`f$Jh%QH-iBX?P3h8(%{{wOQN znj@Cpzo40Y54fd~Jn#YLx_~P|ArD(8$J|ufRnzaARJZYYIvf(A1ue$uG+1xUN(HOs zlvYA{WMYE{<^XO_hnr49G@9y^tu7*@BI+KKB^=6dFe+g5%!I^(Hb_>HcH`}t@B>Wo zkL@pv<)|aYz0Q#c;UlSdsidR#3C9d$xlcKmGF|!1XwxL?BxB(`IGLoiY2a5G+x!s4 zKt3eg0#!($eF(CKMTNjAQyyX2^NDh%K_Q%rJB#2NM@PBS_kvAg1nTIjTDB)kcy51& zp%>wAE;=gKYW(wMn8vY=XJz2DS0LNEU$u|K6s5G{o6CW(BBUQTbKYrP21aZNq+!PE zkj+lew83TNFv(I=jgpCPuZHawK*JALS3<&UGf33K5G!lIE;@4F2L=_L8#k0 zPQl)-!1t%gl+rMUiGVYv?mz?O-DAEpoU7RMD0_$Fk@lW|ZuOfRAMCWf$Jj2%3tF3A zxN*kEz{B4lxDHqDcDzu4L4fwcjdPly3q0l(p5TSnYWS42RAfbc`b1pX4ClBoG%Ia$ zl#ra{EUekrcm2EP3AdikzF}%Ynf!UW0OTrGufR} zwi*&Tnk>*`kxlHjwM;VFvB}~wCYyE9RzpH}OxNB{r; delta 3015 zcmZuze@xX?6yJHtH006K9H_*6(w3F^g27v`CcYe%*g#imqd8>!n2$}dtf_4#uH|yJ z(UaTu#byabIc*}mTODuij*{Y#a{;EwLpV7yfDq)c0Xh;MZB~|EGp>@FTP^^s}Q-Ul z#!EGo^e*XT_IPQE^?P$$t*k8j&eA1GRF+*8vBET2Qr->Iip;Y)N0Wh7J`kNXa-3>;BUWOVr+sA1;>sOh5#P)8F(Dslb0`2;F) z{kzRbf7?uv&YKwNTAA9CsGr($RV?pw%SZP1TcHiN6@&Ed<4A|wIMC{N(%(LbYfgzP z_uFE;v|2_Ee#v1XQA7?#RhUG>aJh_kyvMl-5yz$5V7)OX6|9z1 zS_$QmiH#nZ2e>^QZaN9kXsT1Tx`>d9sApW3a5%%ksDRNk8xjlJAX!D)jkjmR4=~L? zzP~V*qmC5!I!7XekEG(Il8)Xd95amNKILG_bk#FsO_QvXjD-u}WRljVfnRNG^FtH^ z`H*l6R3m}*A;=mQ7XqhDd4%Q9C(4-yg>XLZEQV_w9pz5{3pR-nsHdxH*`6%nxxE)d zFT&qkbX2T0_~*+ogJT`f%D@?~K(=+iY9EOyN@>M6mjho#NI!1oywkcIjMx%L!;IG< zo1LI(gUc#lilwF+B@^FX4cje%h99o3f`r*-kf?_tR@H)CbmY7b3@SP|ZdeOZ%XK7p zGE-Ae)fp!?K#!^R;d)z5^-vws7T>GJ_AOA4eH)>b8&UxV0cWsvlT!tRaup!0$phM* zhJ9Os?@yB{rEwe+0cT9z!A8ov$9!ivSF!0)_72A*?L7fK>Nht&*lBx@v0aWAv^KqP zBLE718B@s!L9ym(vvGRbJiCX2_IY|cen4GFc$==oERbw5J~SEK?A0tVFl#g_))6nM7ohA9=ge@$ lm`eBV)S0fW7NB0&)9KNy$Eo9#f(_qXm-WuZz+Bg`>wm&@<%IwM diff --git a/lib/scheduler.ppu b/lib/scheduler.ppu index 53479f24e76890b97759cd478624c041226ce531..e2199e5e07ef9d453434c3bd88a37ee0d8dd21b8 100644 GIT binary patch delta 81 zcmV-X0IvV)6zUX^6bKy#;p@wRtWJ>}IvE|rAX!uZ0003426K6HbY*RRT$?|?-(ZlD nZz~pTZDnn5a(QiGZeeF-a$QemL4?=p4Y9Co1p#cc9tKPV>>eJf delta 81 zcmV-X0IvV)6zUX^6bK}z%o|84HCmAzIvGb_A6ZlY0003426K6HbY*SId*gO28@k$& nZz~pXZDnn5a(QiGZeeF-a+u~0u$4gjY(=8j2V+VIj%A~Z;t0=V`QwHoW}Klv1zh9_gU^q+^h^>z^F4h MkXvH2InPTL03wDEi~s-t delta 59 zcmZ3Wv_NS>0#m_)jY(=8jOmj*Ij%A~ZI0(;V`QwDoW}Klv2n6H_gU_V+^h^>z^F4h MkXvH2InPTL05m`l;Q#;t diff --git a/src/kernel.pas b/src/kernel.pas index 8a3fcd6d..fb20b342 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -14,8 +14,9 @@ uses bios_data_area, keyboard, vmemorymanager, - pmemorymanager; - //scheduler; + pmemorymanager, + lmemorymanager, + scheduler; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; @@ -50,32 +51,22 @@ begin isr.init(); irq.init(); pmemorymanager.init(); - - //while true do begin end; - vmemorymanager.init(); + lmemorymanager.init(); - vmemorymanager.new_page(0); - pint:= puint32(0); - - console.writestringln('Writing 1234 to Logical Address $00000000'); - pint^:= 1234; - if pint^ = 1234 then begin - console.writestringln('Read 1234 back from Logical Address $00000000!!!'); - end; - - //scheduler.init(); + scheduler.init(); STI; isr32.hook(uint32(@bios_data_area.tick_update)); {z:= 1; while true do begin - console.writeword(z); + console.writehex(z); console.writestring(': '); pint:= kalloc(1024*4); - console.writewordln(uint32(pint)); + console.writehexln(uint32(pint)); if pint = nil then while true do begin end else pint^:= 1234; + //kfree(pint); z:=z+1; end;} diff --git a/src/lmemorymanager.pas b/src/lmemorymanager.pas index dc7d5dd7..948489b0 100644 --- a/src/lmemorymanager.pas +++ b/src/lmemorymanager.pas @@ -7,98 +7,150 @@ uses vmemorymanager, console; -type - TBlock_Entry = packed record - Present : Boolean; - Length : uint8; - end; - const ALLOC_SPACE = 8; //64-Bit Allocations - MAX_ENTRIES = 0x60000; + MAX_ENTRIES = $60000; + DATA_OFFSET = $100000; + +type + THeapEntry = bitpacked record + Present : Boolean; + Root : Boolean; + Last : Boolean; + Resv1 : Boolean; + Resv2 : Boolean; + Resv3 : Boolean; + Resv4 : Boolean; + Resv5 : Boolean; + end; + THeapPage = packed record + Next_Page : uint32; + Prev_Page : uint32; + Entries : Array[0..MAX_ENTRIES-1] of THeapEntry; + end; + PHeapPage = ^THeapPage; var - Memory_Start : uint32; - Memory_Manager : packed array[1..MAX_ENTRIES] of TBlock_Entry; + Root_Page : PHeapPage; procedure init; +function kalloc(size : uint32) : void; +procedure kfree(area : void); implementation +function new_lmm_page() : uint32; +var + i : integer; + +begin + i:= KERNEL_PAGE_NUMBER + 4; + while not vmemorymanager.new_page(i) do begin + i:= i + 1; + end; + new_lmm_page:= i SHL 22; +end; + +function new_heap_page(CurrentPage : PHeapPage) : PHeapPage; +var + i : integer; + +begin + new_heap_page:= PHeapPage(new_lmm_page); + if CurrentPage <> nil then CurrentPage^.Next_Page:= uint32(new_heap_page); + new_heap_page^.Next_Page:= 0; + new_heap_page^.Prev_Page:= uint32(CurrentPage); + For i:=0 to MAX_ENTRIES-1 do begin + with new_heap_page^.Entries[i] do begin + Present:= False; + Root:= False; + Last:= False; + end; + end; +end; + procedure init; var i : uint32; begin - console.writestringln('LMM: INIT BEGIN.'); + Root_Page:= PHeapPage(new_lmm_page); + Root_Page^.Next_Page:= 0; + Root_Page^.Prev_Page:= 0; For i:=0 to MAX_ENTRIES-1 do begin - Memory_Manager[i].Present:= False; - end; - Memory_Start:= uint32(@util.endptr); - console.writestringln('LMM: INIT END.'); + Root_Page^.Entries[i].Present:= False; + Root_Page^.Entries[i].Root:= False; + Root_Page^.Entries[i].Last:= False; + end; end; function kalloc(size : uint32) : void; var - blocks : uint32; - rem : uint32; - i,j : uint32; - miss : boolean; + Heap_Entries : uint32; + i, j : uint32; + hp : PHeapPage; + miss : boolean; begin - blocks:= size div ALLOC_SPACE; - rem:= size - (blocks * ALLOC_SPACE); - if rem > 0 then blocks:= blocks + 1; + Heap_Entries:= size div 8; + If sint32(size-(Heap_Entries*8)) > 0 then Heap_Entries:= Heap_Entries + 1; + hp:= Root_Page; kalloc:= nil; - for i:=0 to MAX_ENTRIES-1 do begin - miss:= false; - for j:=0 to blocks-1 do begin - if Memory_Manager[i+j].Present then begin - miss:= true; + while kalloc = nil do begin + for i:=0 to MAX_ENTRIES-1 do begin + miss:= false; + for j:=0 to Heap_Entries-1 do begin + if hp^.Entries[i+j].Present then begin + miss:= true; + break; + end; + end; + if not miss then begin + kalloc:= void( uint32( hp ) + DATA_OFFSET + (i * 8) ); + for j:=0 to Heap_Entries-1 do begin + hp^.Entries[i+j].Present:= True; + if j = (Heap_Entries-1) then begin + hp^.Entries[i+j].Last:= True; + end; + if j = 0 then begin + hp^.Entries[i+j].Root:= True; + end; + end; break; end; end; - if not miss then begin - kalloc:= void(Memory_Start+(i * ALLOC_SPACE)); - for j:=0 to blocks-1 do begin - Memory_Manager[i+j].Present:= true; - Memory_Manager[i+j].Length:= 0; - if j = 0 then Memory_Manager[i+j].Length:= blocks; + if kalloc = nil then begin + if PHeapPage(hp^.Next_Page) = nil then begin + new_heap_page(hp); end; - console.writestring('Allocated '); - console.writeint(blocks); - console.writestring(' Block(s). [Block: '); - console.writeint(i); - console.writestringln(']'); - break; + hp:= PHeapPage(hp^.Next_Page); end; end; end; procedure kfree(area : void); var - Block : uint32; - bLength : uint8; - i : uint32; + hp : PHeapPage; + entry : uint32; begin - if uint32(area) < Memory_Start then begin - asm - INT 13 - end; - end; - Block:= (uint32(Area) - Memory_Start) div ALLOC_SPACE; - if Memory_Manager[Block].Present then begin - If Memory_Manager[Block].Length > 0 then begin - bLength:= Memory_Manager[Block].Length; - for i:=0 to bLength-1 do begin - Memory_Manager[Block+i].Present:= False; - end; - end else begin - asm - INT 13 - end; + hp:= PHeapPage((uint32(area) SHR 22) SHL 22); + entry:= (uint32(area) - DATA_OFFSET - uint32(hp)) div 8; + if hp^.Entries[entry].Present then begin + while not hp^.Entries[entry].Root do begin + entry:= entry - 1; end; + While not hp^.Entries[entry].Last do begin + hp^.Entries[entry].Present:= False; + hp^.Entries[entry].Root:= False; + hp^.Entries[entry].Last:= False; + entry:= entry + 1; + end; + hp^.Entries[entry].Present:= False; + hp^.Entries[entry].Root:= False; + hp^.Entries[entry].Last:= False; + end else begin + GPF; end; end; diff --git a/src/vmemorymanager.pas b/src/vmemorymanager.pas index a340f567..27065f4b 100644 --- a/src/vmemorymanager.pas +++ b/src/vmemorymanager.pas @@ -60,6 +60,7 @@ begin PageDirectory:= load_current_page_directory; map_page(KERNEL_PAGE_NUMBER + 1, 1); map_page(KERNEL_PAGE_NUMBER + 2, 2); + map_page(KERNEL_PAGE_NUMBER + 3, 3); console.writestringln('VMM: INIT END.'); end;