From 4daea5e4e086c14ec17f8de2feafc36969710527 Mon Sep 17 00:00:00 2001 From: Abdulaziz Ghuloum Date: Sat, 1 Sep 2007 01:00:35 -0400 Subject: [PATCH] * Added ikrt_register_guardian_pair to replace ikrt_register_guardian. --- bin/ikarus | Bin 63692 -> 63732 bytes bin/ikarus-collect.c | 143 +++++++++++++++++++++++++------------------ bin/ikarus-runtime.c | 49 +++++---------- bin/ikarus.h | 23 +++---- 4 files changed, 105 insertions(+), 110 deletions(-) diff --git a/bin/ikarus b/bin/ikarus index cf28c8e8bf97c3ea8b751fccc9df9b2c979f72a8..0c361e54a3b462aed769ef4e775a97dd40fb4a7d 100755 GIT binary patch delta 16686 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 Ml@3w->b+n74;}2NEdT%j delta 15823 zcma)D4Omn~_rLeDDk!$3;0FSNprW9nVu_-n0ilUv3TkR;nOa(}7N{Az!e!OlxQY&x z`f7fqp`xOQVSWLAfM$kezE)OLYP-Q}YG&AL^8cN=cVVsG=l}9NbN4rA&YW}R%$YND zXO}y-+|J!{%iitbD@hY~NRrfa)xmxq6HiD|swXI`?)CSm{6v!6(Nf6=$o)Mo8@0=Y z8S;~ge2$-S`^w`An!{@(X%pXVYVENEwaqB~c~GNvjiRe1DVobl%hiqC z!x|mjT3KdV-FS>Vkta7!iaI4pwzw)SHpEnJ3YiS`_DPUXmt19wyJ}FgiTWg{Ebgkc zB-LFrh1iFj;@>pxBA?>!O#+p?1H5aK0P{&nYE%F=E$*_7ug~LSn{<&+@{A_g{^@z3 zLIsPvOr2YR6WZ$VXSbi=-Q8QuCwRR3eD_BRp(JC(34Yo=K&jc!ue8JPku%?0i(1l5AZD4AUt|q)*%@s7&tJ#c-ePvs8 zwa)lYT^&=aO8I+D7t3$)j?IS1Px2Yf-jqxD)n>t7Uxq=VV4|T_dh^zv$?|djif2gE zn}+IlkMnd++RM%qnkgWgm2>+&4c5;|6cpNV-15$1h!AaLwC?@Al>rykX~KJ z)GMX@r{?~BYYk<+T>9QSDoNRx8hA*p3Abs=}NZAVX%_Ikp6*Nl|62@K8H)+6$nxEK4|rGXhp?2hZBG?hxTS9KjSGp!?3~ynB+LD zHzK|pt2KW1nmm5JMOXO{f3#%>3z`s1kJy$-USx!yh-&+{#ZD`J0n)8#Q*T8GI@Mco z3=B>ya)6z&9E%8IYC0%7Yix*TIo3oI_y(UQgq37dmp!`y;xRAFz(?^-VeZliEw?Ch zxRAgBbxqOTUaG4Gl5ld3==j;9=f|DW^UFUG+w*S|X=o>;4Qx~+G*OPgG@OQ)Kx z=!DE)sa7>nYn3!_+Yr%x4|qze6eF*wAqRN#HvXfR8Pd$UH1dP}5_Us_T*zzM^i?9)@=k5T zXtfvTjGumWD+_fj7*bN4~BM>5d5NP!)=qH?5Y^EZT>fBcB=RniD zR{`nW!~VYeE-*MI3lBtGQ)}8ZghM0JTvklssg}tf4#KB7uI$VSXYhD!;$`i^3&8UO zKmXuwa`i4Rx^xNGyU^C_W&i43{+r)$aL4+0eryk{uB}VEY(D^``=SC!_r*sfN+gSx z5KwO|-@`Zi`#lP_Vp)M(X22~>ZMm19_xB%dG1QMhv(sW9lC7VGZ0g3p7i!k|#WK2v z?HD7}&CS`s2L^R2hy*I|{ZEuTo!_-l``SAdM zpD2TQ5*UgtA`rYM@bT^2`wRoc7MDk3g%q?%_N3k1*1q3RObqGO;#;$&*gkdKjx8;5 z;`VImNhc0wODmkXGh2GjiNn~^O70cdAsCCBBut{3YJJ@Q-qkSf1Hh0wHU*Q6-7n*T5UDR|ExAgoEVX;Gq>UMrWE(IKtlAXjo=%OWU_Fv>T8f>ftK|Le>}#Tk1o- z7J1DXSLcD@ED=|Wkk^=c5EPx&*mu1oUK!vST1LX)hccJmbk=kBjuO4+qC3|XP-L(02EM=;eHA3Bs zj&Ti>y#aX+BfCiJz}^b_Fzqw}d)FIuR=uJPjwv4;EAeg}eUwB8kL}o9 z@ptgljw$k~)t!6-WnG1~e-lKo#H!NoJhjBjUCwK-`O#T88$99X@XA8bRUiWIc3ARd zEeU7ADx3wYG_gaLzIYXttJ<=BKDg5>^6PwWrZk$ zpa02VaL)f@+xY0tAzp2MbX`kh?0jkGG4cU^rE?eaTi0EiPV*(5lf63$TJ^dH&sT81 zFf_#L#x*dX*6z`?-L!Z8k?#wgrJUc&+jkin*IBeVA`!m!&b04~aOw}FTN}Zg)=C(9 zy|s=pLZV+`t2RY*yNA;H5og$hEv{ z#31F>^?YW;Cb<>&?70wm@2#Fs$Yc2Vp2^B_AKtN7rqXpIzaQn_ss#zgz^~(!`Q&_Uh&Y|Y#bQhtn&|iLS{~PXG)Y_6+rQO~B|7z2BnhXq zBWw7_z30nUczk4(GHwmeh&&+I@W=X0!6m?&KFbtTIy^RhNUy&iVM`n$oRS>0`;MX8 zl&8U5eWA3}Hr$m2@=wdaME#;&7di#8%Von#*m__oSb^A;XU(h#9S(U@z?>j}g&3V(Pc%|P$ z{&ZBj(vtJasIE$@9O2amZ|Z*F*y^0tKeL+m=+|Cp`Z-VP*Q(8Kv>;_!zk(l`l@4b# z3+q?&Mg4q9%DR63mLUrbZ?0;Pas=4^5gz)o`W8rxB%Masm^z41ZI$B^CEH#4r&E7c z-+$vn{cohht;g)M^ybH4(Bg;M10cV8qdl>{`xLzysuxgG7E@t5PEsMy7^Vk<0S*u+ zqo1-}ch5D8`R@Mhl=n^iZ2xDv29Y3)f%4sOyoh5yH-R1dAWe$CNxN&_A@&Y@MD##8 zm)oLaW5+CT4!07#^^4-@$_96FV3z34279uYTIbo>xx&Kj5f<(h;Mgf`7Hq?N4TcL#(jrjL#Nau!64{=%1KxRDZJ}G)pNop$vWuMYPzHkQP`<9S%cX z(8A`r>2@BWK4S7`z{+}WY_oA?P*`Y%A<+VfB9E41<8^%0AUcple`4dwgTj@~Hm(lp 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 X<7<{RDy+WMqOsB|g4g}_t1SH=;R>D( diff --git a/bin/ikarus-collect.c b/bin/ikarus-collect.c index 497690c..88331a4 100644 --- a/bin/ikarus-collect.c +++ b/bin/ikarus-collect.c @@ -79,7 +79,7 @@ typedef struct gc_t{ ikp tconc_ep; ikp tconc_base; ikpages* tconc_queue; - ik_guardian_table* final_guardians; + //ik_guardian_table* final_guardians; } gc_t; static unsigned int @@ -581,91 +581,112 @@ is_live(ikp x, gc_t* gc){ return 0; } -static ik_guardian_table* -move_guardian(ikp tc, ikp obj, ik_guardian_table* t){ - if(t && (t->count < ik_guardian_table_size)){ - ik_guardian_pair* p = &t->p[t->count]; - p->tc = tc; - p->obj = obj; - t->count++; - return t; - } else { - ik_guardian_table* nt = - (ik_guardian_table*)ik_mmap(sizeof(ik_guardian_table)); - nt->next = t; - nt->count = 1; - nt->p[0].tc = tc; - nt->p[0].obj = obj; - return nt; - } -} - static inline int next_gen(int i){ return ((i == generation_count) ? generation_count : (i+1)); } +static ik_ptr_page* +move_guarded(ikp x, ik_ptr_page* dst){ + if((dst == 0) || (dst->count == ik_ptr_page_size)){ + ik_ptr_page* y = ik_mmap(sizeof(ik_ptr_page)); + y->count = 0; + y->next = dst; + dst = y; + } + dst->ptr[dst->count++] = x; + return dst; +} + + static void forward_guardians(gc_t* gc){ ikpcb* pcb = gc->pcb; int gen; + ik_ptr_page* forward_list[generation_count]; for(gen = gc->collect_gen; gen>=0; gen--){ /* must move backwards from older to younger generations */ - ikp todo = pcb->guardians[gen]; - pcb->guardians[gen] = null_object; - ikp forward = pcb->guardians[next_gen(gen)]; - ikp dropped = null_object; - while(todo != null_object){ - ikp next = ref(todo, off_cdr); - ikp a = ref(todo, off_car); - /* ikp tc = ref(a, off_car); */ - ikp obj = ref(a, off_cdr); - if(is_live(obj, gc)){ - ref(todo, off_cdr) = forward; - forward = todo; - } else { - ref(todo, off_cdr) = dropped; - dropped = todo; + ik_ptr_page* todo = pcb->guardians[gen]; + pcb->guardians[gen] = 0; + ik_ptr_page* forward = 0; + ik_ptr_page* dropped = 0; + while(todo){ + int i; + int n = todo->count; + for(i=0; iptr[i]; + ikp obj = ref(a, off_cdr); + if(is_live(obj, gc)){ + forward = move_guarded(a, forward); + } else { + dropped = move_guarded(a, dropped); + } } + ik_ptr_page* next = todo->next; + ik_munmap(todo, sizeof(ik_ptr_page)); todo = next; } - pcb->guardians[next_gen(gen)] = forward; + forward_list[gen] = forward; pcb->guardians_dropped[gen] = dropped; } - for(gen = next_gen(gc->collect_gen); gen>=0; gen--){ - pcb->guardians[gen] = add_object(gc, pcb->guardians[gen], "guardians"); + for(gen=0; gen<=gc->collect_gen; gen++){ + ik_ptr_page* src = forward_list[gen]; + ik_ptr_page* dst = pcb->guardians[next_gen(gen)]; + while(src){ + int i; + int n = src->count; + for(i=0; iptr[i], "prot"); + dst = move_guarded(a, dst); + } + ik_ptr_page* next = src->next; + ik_munmap(src, sizeof(ik_ptr_page)); + src = next; + } + pcb->guardians[next_gen(gen)] = dst; } - for(gen = gc->collect_gen; gen>=0; gen--){ - pcb->guardians_dropped[gen] = - add_object(gc, pcb->guardians_dropped[gen], "guardians dropped"); + for(gen = 0; gen<=gc->collect_gen; gen++){ + ik_ptr_page* src = pcb->guardians_dropped[gen]; + while(src){ + int i; + int n = src->count; + for(i=0; iptr[i] = add_object(gc, src->ptr[i], "prot"); + } + src = src->next; + } } - } static void empty_dropped_guardians(gc_t* gc){ ikpcb* pcb = gc->pcb; int gen; - for(gen = gc->collect_gen; gen>=0; gen--){ - ikp ls = pcb->guardians_dropped[gen]; - while(ls != null_object){ - ikp next = ref(ls, off_cdr); - ikp a = ref(ls, off_car); - ikp tc = ref(a, off_car); - ikp obj = ref(a, off_cdr); - assert(tagof(tc) == pair_tag); - ikp d = ref(tc, off_cdr); - assert(tagof(d) == pair_tag); - ref(d, off_car) = obj; - ref(d, off_cdr) = a; - ref(a, off_car) = false_object; - ref(a, off_cdr) = false_object; - ref(tc, off_cdr) = a; - pcb->dirty_vector[page_index(tc)] = -1; - pcb->dirty_vector[page_index(d)] = -1; - ls = next; + for(gen = 0; gen<=gc->collect_gen; gen++){ + ik_ptr_page* src = pcb->guardians_dropped[gen]; + while(src){ + int i; + int n = src->count; + for(i=0; iptr[i]; + ikp tc = ref(a, off_car); + ikp obj = ref(a, off_cdr); + assert(tagof(tc) == pair_tag); + ikp d = ref(tc, off_cdr); + assert(tagof(d) == pair_tag); + ref(d, off_car) = obj; + ref(d, off_cdr) = a; + ref(a, off_car) = false_object; + ref(a, off_cdr) = false_object; + ref(tc, off_cdr) = a; + pcb->dirty_vector[page_index(tc)] = -1; + pcb->dirty_vector[page_index(d)] = -1; + } + ik_ptr_page* next = src->next; + ik_munmap(src, sizeof(ik_ptr_page)); + src = next; } - pcb->guardians_dropped[gen] = null_object; + pcb->guardians_dropped[gen] = 0; } } diff --git a/bin/ikarus-runtime.c b/bin/ikarus-runtime.c index 9d67c3c..31c79fa 100644 --- a/bin/ikarus-runtime.c +++ b/bin/ikarus-runtime.c @@ -264,14 +264,6 @@ ikpcb* ik_make_pcb(){ ikpcb* pcb = ik_malloc(sizeof(ikpcb)); bzero(pcb, sizeof(ikpcb)); pcb->collect_key = false_object; - { - int i; - for(i=0; iguardians[i] = null_object; - pcb->guardians_forward[i] = null_object; - pcb->guardians_dropped[i] = null_object; - } - } #define HEAPSIZE (1024 * 4096) #define STAKSIZE (1024 * 4096) //#define STAKSIZE (256 * 4096) @@ -893,40 +885,27 @@ ikrt_write_char(){ -#if 0 -ikp -ikrt_register_guardian(ikp tc, ikp obj, ikpcb* pcb){ - ik_guardian_table* g = pcb->guardians[0]; - if((!g) || (g->count == ik_guardian_table_size)){ - if(sizeof(ik_guardian_table) != pagesize){ - fprintf(stderr, "ERR: invalid guardian table size\n"); - exit(-1); - } - ik_guardian_table* p = - (ik_guardian_table*)ik_mmap(sizeof(ik_guardian_table)); - p->next = g; - p->count = 0; - pcb->guardians[0] = p; - g=p; - } - ik_guardian_pair* p = &(g->p[g->count]); - p->tc = tc; - p->obj = obj; - g->count++; - return 0; +ikp +ikrt_register_guardian_pair(ikp p0, ikpcb* pcb){ + ik_ptr_page* x = pcb->guardians[0]; + if((x == NULL) || (x->count == ik_ptr_page_size)){ + assert(sizeof(ik_ptr_page) == pagesize); + ik_ptr_page* y = ik_mmap(pagesize); + y->count = 0; + y->next = x; + pcb->guardians[0] = y; + x = y; + } + x->ptr[x->count++] = p0; + return void_object; } -#endif ikp ikrt_register_guardian(ikp tc, ikp obj, ikpcb* pcb){ ikp p0 = ik_alloc(pcb, pair_size) + pair_tag; - ikp p1 = ik_alloc(pcb, pair_size) + pair_tag; ref(p0, off_car) = tc; ref(p0, off_cdr) = obj; - ref(p1, off_car) = p0; - ref(p1, off_cdr) = pcb->guardians[0]; - pcb->guardians[0] = p1; - return void_object; + return ikrt_register_guardian_pair(p0, pcb); } diff --git a/bin/ikarus.h b/bin/ikarus.h index af25e2c..01766b1 100644 --- a/bin/ikarus.h +++ b/bin/ikarus.h @@ -90,20 +90,16 @@ typedef struct ikdl{ /* double-link */ struct ikdl* next; } ikdl; -typedef struct ik_guardian_pair{ - ikp tc; - ikp obj; -} ik_guardian_pair; -#define ik_guardian_table_size \ - ((pagesize - sizeof(int) - sizeof(struct ik_guardian_table*))/sizeof(ik_guardian_pair)) +#define ik_ptr_page_size \ + ((pagesize - sizeof(int) - sizeof(struct ik_ptr_page*))/sizeof(ikp)) -typedef struct ik_guardian_table{ +typedef struct ik_ptr_page{ int count; - struct ik_guardian_table* next; - ik_guardian_pair p[ik_guardian_table_size]; -} ik_guardian_table; - + struct ik_ptr_page* next; + ikp ptr[ik_ptr_page_size]; +} ik_ptr_page; + typedef struct ikpcb{ /* the first locations may be accessed by some */ @@ -135,9 +131,8 @@ typedef struct ikpcb{ int stack_size; ikp symbol_table; ikp gensym_table; - ikp guardians[generation_count]; - ikp guardians_forward[generation_count]; - ikp guardians_dropped[generation_count]; + ik_ptr_page* guardians[generation_count]; + ik_ptr_page* guardians_dropped[generation_count]; unsigned int* dirty_vector_base; unsigned int* segment_vector_base; unsigned char* memory_base;