ࡱ>  nh @(1!PNG  IHDRio,=PLTE ###+++333;;;CCCKKKSSS[[[ccckkksss{{{&ե!tRNS!IDATx]bȮeキM{m%ٝ$.9"Aԃo2^ֿd׺^۾a+2^e':߼Wow[RWoŋddG^u]9 W繎c[d8aHRfeU ^q~ez\jFRaE }҅Ed?QֶE\BjȨ.L2^\𒜱Ȓ($l+$ܿ~ܮz$-J2bz?fvM)kg^B9iu]?<Ɓ~u]E2G%c=wa٤C7Xƫ7k B$21!Ey^V 3gbMգ'yy,`. nW'qV+u[mNg*JBK55BRoږzُҒ"-1"lsMaG%%w_5oך:CTQZ4oƫ7 4PO!gE$d_yۑ̠'c 5Sx@XoGWokx2UͶXEFBܖih<#ͱ#Se;~\H6Iýcߵ8Gbj9Z,#liYRpmF$߰x-NįDYKD{"uJ(xnm ׺܂ ._#jƫ7UFVg⋻aWXLy1lji]+/8nl $ssټ0 Fez_Hl#u[^#~ ȱme۶zEVu&az_( h$pMLǼ !h1;I{/$au[obXN\K/I{eha6O(E$p'rZ/P3jN-(T%Q%w4庾Qc[qlY]ۋ,k?],tN&uFƉ"X7ͦ8PdQ;%I'( (N޽.n!zXyߞYMYx%~{&h|3񻕚VTK&βm =Q/W3KVu0&<=h皕Xz fz|i{tst̋rύں <i5^* 'L x6.U>,݅JCgv?XBGsɬL5$g7%)ْ}}ZPH@+Cܴ"0;<" 7cm6p2 ]`Z$kU?8fz˂@8sǠVzdѭa.++麄Wij +jύOT9Ҽ [#13Y  ㅻ3gᝉ3K/n"p?4ϫo.ѲA]22^,d` &~yOj=Gdn>t ]S4%NOn[үwY镦m6iQ􆣿9:NDY}dg2wșhpG;-9 t?dʪҒ~>B$iߒnjc渹ezH)^[>]'H47{Y)liQֲ; |n#5uy69!Vm,?ީn/3v ﷖L5I9^3.iX=)n((4,+g:|E Ȏxi&^3N3ifjUƫ7ɵ":e4>Cl85LӴW. ޔ ]Η̥?mlȺcW !brM0^mXâo[|yI=ccI]͊kWx>ЂR>&3N#uYmMY6/ɃfrۋtHz$͂؆㗬z^ ʒIUd͕*;;>_e;,Icmq`t#?LmDb4i`OD6&oX,jB~;HgnVOaT-Uk]2MIjY"2 ` #˰[+4'!K L;n0 #få?QH{k;0-/75̢Ѥmnmg^[$>Hhd9$iKgKRH4>,>𒾽 e52)i'.ĢH r4m/.7j"FIEu64 gY) n8yi{S4r &BZ\'a"\C]Ox~V}'X'LUPcQV5mEI~AQ$b im?m vzVv K,DNnC(o+"Wq j%1RsGdVIhϑ/PsS4g0a٨〹 ;X2  Bƒ4wjDDa&<ɮr3:pwr:x~VvQ{N 0bon\pP|P˲t-4v]a Y.NX NoMuKbj|1=x ;Ue /.%lͤ$׾uBuJCrKLtxJ0&To]7H`B俞HNz>mSgO#l2NvϞ jLuM#E◗2#$9c6=I:>k7)cqwi5m u^scv$Ԑ.x«uh4)yE-O'05^_-}218 βexl1nzW"ٶD!X ֝T)ev -' Ws`_hMu,]YwQ:weq9B#`Q3^_.55(̹f-qϵ´"=D_Y{K ,ue۠ tLVRCd'̈́j,()(oʤ絮KQҟ`㫤SnD:[j(cwީGKIqssw{ (Y9 x/o+^bpT1`CQ)TWoEY,'.s\ Ws((&ž 7H>FYV餖(`9IfB1h8t _M6@j#E^'Ń!f]mA|vg,xs-S_/ZOf<.׫cCyX;l.7 KсvHYOA_^ nS:ٰU%׹E9/4v3~ۡGL$eOjƫ7aP~O EVg,Vz.ի+ F<'L}Jڧ. vBQ]3 ;,'= >D91Ljzo,5'Xp*T8T2tւ')Î5pHP!svAM2:Y1)hV%zyo_ #^)wl~yR <.Bh& DηA^)X*4!|o]4N{ϼJe}T6C)8=R$i8Q]J B8vu{SQaosÎy'bA@ ťO@3[S0XHE釔vɣ}8q!e.Ůa9Lh;]j&rc8fe R)ˑ_6M^hwگZ ?iS'681JQ,%Gi{24j|]M5cXr)!ۧVh`` m'pNY0+[y&ܶ6J2i$ɒ Xi;MĽ_dkQ3(PXӌJ%,8Fl/tYΫ@ul!KݔƔ'wKORT8]xhÖֺs?t$;*gvCFZqn\]dl2_sz%jƫ7pX\Z/ 2Ow~шQ0&ar.t7S; &I5~UI]Ƴhjvn[mQCs뜮I&'.`tCxPF2(-;VEu]G^pMtcJNOoyI6vfFC]2mߵ,z.'a9O b)`U^ |J.Uް= l5[xNKoTMzINz;Ml?*0šc!T(vymI%Q ġt(l)4l@'ٔE;3`p_0??$ yOol" ,zcuxN d`9Ǝrciȑ`ftob.7,!jQ%ס>>D6lNSn`'krR!7u_PSTt'ug״t}r9x΋.diNN vG5} O{73%3vCV3L;=Gj@zu0M1Cc%yr;ۚ[Y4w\UC&..0k3`8&AR +HZ\$ !`A~ |EtЋک6ME(A)0KQ_sȅ<;jy ڰ3#Mv:q%͢4*_ƫ7W J3l AeF‡tj"z*'+r~4C٩ɲ|@>WF7 Icdݳ`.v0n.y UYnZO +_mNsOK=cYB^r%D4oG} n͓?"SnSk%ӋezX|&D;I-(7'>6*i[wwo2Ӫ66~).ԣiteHNs&s੧$ O`7 inLo#;88=᤻&Ŷ*,zxF(࢓I&HXذpfy>lC&.r'_wh_`$K5E!v֙B6כL)\q=뼼ZIJ-<.?PZq$]Ix,^Diy}Z΃=p oEu߈9`;Q[gZ5gmZx֌WoIg,q¢yN B!s#BͶuȞqL,wں*"Pcaj!cYD O?vsfPM;5^W${^9RZtQ?XELchB-IYR2B:QG f-4YIc>#(/}R]aF€rW !ptRot~[&a]B˻*xnVc&zk*&6qJ2zB*s#yص3lceڵ^~@E2G#%Y2YQ%#m5 eWeU{cG's(N Hr[lÁHt =%e+ Wsayi@/'M~\byEܛ2i nntuDnG_YsN ~9ec8g!btn~(Bо&p\.CZ6kWp@5츿4d;u[ LҨPo(qxU+%]o}ko/j0L,2Iu!*KSbRcutü,XyqiGZyL(T+]Pi2P|GCF$#-؟ eniz`v|N9-n1ۏkg2qv@H8p87yCzi9jS]ʭt^҆qxٙ(CAr" c3~&%x&p=75aPfJl}AuuN'lnht kՠʹB*w@="L$RP g[ƫNrF4(w[dEͱ0t|x3+Cż)XGn:6F9RU [SBj7]O݂l<1i_s0ضit,$npٜ1A϶M }|6jB2З)&ZHE6|89nض-O5-Ŵ>ö&HH7U*t?GnYa~q;Obwy{?!L#02^vf "GWS@zż_H?5MOXz-hhn{βGAȊCO󻳱lPh[!:cye| gc“O[<%NR:ynL?.cJe-aTSJ)SKYtP)@nWvsi( 3ĜOuvW$i6@-GsUg|yBw8OBy Zկ&G3/~ʃ$+\;+PhX/ϸ"W2> MV4HQ 9],h#}⪽VW$2`Va/N[8 " &Y ۳/>ϟblط`h*M =jCNI^0 H&_?%hm3Z~yL%y\>cNTM:O'S.&ɝh"8N j/hҊ1۞mЃ;Ӽ7ut~#EmF&b)drܨbSgI[Ծ0}%(N̝|5Z^ș9qF9QcܺY(-|eK.̤*eH%yڒKrxsW rɽ[O'.)fy#zlaCKPj{xsոZW*OЅ#Xa@>Z2~ `. s4PRS[ ڦ)P9nXY2[ OݴtBG ɐB)5h*LqT Yu}ۤ~\V;C z4pyBQtE״爹VrDI4 h3Wj=׫'ƂFn3 F+mj8Q9cS1##I0+D [KR&h (2l/J02?7iepyxt"e &|֥붩aA{mlp2 1}Jr)(`ck[ܣ^>-tvq kHAs[]ڂPXuIj"Owo٪N2f7z:*d촻6JFλm砬j&a ,O?5[ nd{kc`șPi)ryRG*hZa{?v& -wF`YZDY I~YV3L W16IOG^O͝mW! ~{=td`36JC (ݍ)Ar#.= lMؘ 湐t~\.KpЙ$oћf?y239^ynsVl}0^ a췼 4ln,\뮎8A cIKzХQ1}uk3 A{nUCEKsx$Drļ4-7rPjhseGI*Hv<`uuMQ='-YI3% ]47e)I!!f[`u(O{- !X3Iهi^A|Zn}ڵ/ 2'C\Ə5q6'!$t9W $0$isEN?F8\,G{IgvmFh,JÐ3;jd]MzheΙ\; ItT)p'B9\XVOZmI{+ufI+!xyNWcbF IGKcgk@:WZ ryr1Lr$M5,7[8Gz@a(o2NJ:W.gו`8ٴ02zCQ#iUC.@ȱLcQcV '?|d`?fؙVdv!ј1ϨB @V|{=U'QޟGae]F?ޞ+r{iq4haB7PXwhXBjP80Ke'P |Dt9NP1ZF ]ŚDmlfO%NU543Hڔ=53O_ =N#4`6TӦ޻Ϸ0VDfvBW0.hГyQa.9a]~+; 9:"nz̪0~LsYP0Qڍ(,||zIpdWEU*ow Z |q*oixGXCk M8ItIne YyktyqII{r6؁͹!CUb~h c`53ѥx֪5MݚENb?]:mVpaͲ0\nИDNĮWV1vHg X_rǓ$L,S<ǎc\%MQΈ5_X[dfԉ w!qE"靏ǧOq^[~ͨQ,lh@O\̺޿nԞ[cՃ&QZ =$I$Jp>ݳx֋j?8{3<5/.z9TH9Oz\jwHu?p8;aedDME sF$/|@έCb_q5WȇAr|5nQ\ykД(O䀒&غԱݼݶ03?pa$g8F߼ +dn߽8NJ;h%pm/.sGxE2s&r~FE>S|@&BދsK4r5$T*`diloG gU}w:O\6 ry&٬Ԝ˟^ƷAۅ?(1mACvձWs@upSWVmhqrb+ߧ!"/wcU|O&T_SSЗS5}}) /`y(ק X BoP2 \ -b7qכGXn;#3Rdl#i 橆6`\Bu(XGq5oEu1Yg&I;'ǔp~#b 9s. p\Ȭ`w/3`vG=H h@r4ow.Vŏ7 m!s+T|ch4敫4y0FI(2 ][%&q% \Qs\J ٺvk*?woV".8Sn0}FOaLu,p?67\$m]%rWPhA= N?ViãSQ7͏YIhOyٵ i;KI6&OMsY>8rs[ѿvi (18<5 (-k(ZE +CFeo JS\.AJZJˊpnl7.,)Ht5 J I[:ȂGb8GY Ѵmvhu}]Cmë6d&=w_6e/fIv8( J@2Hf;aJ.txt:|H;6u*79<+2 YW l{br"tP}{?S,(Ms!w!Oh+#)pқdy3[MžﺶOp*wҔ.$(rVd 5-S>vi>$Aݱ"Аy?} Ե$6lϒ/m<)(S mѣ gpEF Xݒ9]CO=\T5Rs O{YA.ХpR'AȅUSeqx B|c=!l~A# Q=a̞ NqfYt=n3Q)z|p8/\lL]e|ԁQxx7},7/gt*plxbI{&$(kK&s=!_-mWun_Yٜ@aϺ-^QрpVfI ),A4QCkMCM I%*i?FugpE54zT\>bLx7ޝ"hP;q14t%H7DfE) 7?&\U!,X]c,"fped* r1@6ΊBuEV@d^=-=b H0QEq[BޠGUh>+YOb1mcd㼨K S4Z`3@زހ.mhB^% 5FX|$p^cMiX*&uZ񥓱f~񽇟Kl1@7m8-6R,]J :O_%(mvf^t%fII *%!W3@sx5E?fR聤DabymQ lU&yx_)0C'.e~jК>] m" P0 iwF MxUnvU֥gu*qm J9OU]G'+CVV4-{bWM!';czijbfwWMcOSxi9iuژ0J"fv\)p>єM}':L R)`\Hqz'!'S֍ySU$S3ЌҺq*9Lf5GOݴ4䪹q7;bo\0co!{]`i .yJQȯwȊdF&4 :?Xу4^C^ٙBWU>ЁB8tU6mJu^UQdyrrgSaԵɣ$a4iun*Ȑ@3-ێ&?kѝ[N$bGcRu]F05 6sU*IY y@dU ;~/SG 򮏰ݧ6˓5|0\.<(^ێteYG "56%G*k@q"Rtc}}!ke 1TJ2ؖ\V*hA1rs<$\r\/ #HJw`̃"oZ$1aL<௔H5rYl1`T/WN uc06CHM)2OHmGp{PčFD@g(ZVbEPݛh %UTt ԮrxlbJ;:ar-"svGn2  σݎB͔`R0t!kSk9ֲ[xB&W&`Lp䥭NDmӲlW(6:@F]0, ׳ߡm ƝTeq̮=4ZLy&1kۦ%U9Hqe|㱧1I=ŦyzU|LuKDԢƶ21xY|&=4@'̏U$Mx 4a^:;]ۯsS48a!C|wG2:Zָ=떇MƴYa"ߢY$F6< \eo]CyNdiw;l6jwh 4K で29YL/( }"#`@ldX䇏 ʛHMt'H9PVZa@AY ؠK. ܹ{6]4y}3@9]3S#eNwm*ZGecR~EEqncaS>LjI5wf Cbl[e|ߡ19[ǶZkߵMgIz 8-So.@}t.JRA ڑ@wj0/ܞ ־"PzIٝy>Y.I! l)F t=/ކq.KP 5@oێ h jҴ{A:) Y'a2x)@ 6&@=7v8沪mw5Znӹ)##%:ƸP̑-o,(^i瑹I9#+G5ۦ ilqHY\tkb菎D@"i#Zg7bgnTOR`gs0]~C?'MWI@vLVHrDW46%"2 )ƣ AOʭ« 6pxLo$B_Ý`$J& },>KM L-ٹDwd3;R5k v~Ȕw9*0uM{Sլyjwx*(L񍫮Cyx0aOwb|hBO\Kp`S?ua塕 g>Iש.59z)|¸9c*4_:ߴ~>`Ⱥ-|~UDP, :RLRn0ݗhvŪ.$,"`$|J7WȚ]F>%[(ɣK%\ FwչBi`pLԳOcCPmδvFd,*k\f.7N0$tBjRS, "uc q+4d/ft -29  SR pxP I侥/fZ̀V \Vzxx'3Tx* A9%CCNItqmr"(F.C~Ys%չ@t&-ρ8}.x(eֆ{-#s} ݖ%o8u6rȂƒ\yBw7bNy̦xTH=di^edOf&x,`v䯅F~<(}8;.]U96>#6+Kf{EYi6h dwJ:Ar5u/B@2;@I1h$y72#^_D$ 1$F jggz|4#TK赽)țvnJ(؃c?h/ճ ՕÇmG:q_x( Is 6ISmlnc ia%Vd$'u+dM7L]n9,%9VZAG @Oڎ 9l8F=kG$,ِG.)(CޚRjd(Ŝ$h-swTA5Ja;m.bֈ*2N|֛$f3 g1BYuΡ0.m2 OYgﳣRp^a)$}q̣BG]g'w_}@RrahtJЁV2O6p,k 83.Y# w:QЖBxq8*eC~"9OCwDyKv݄d3SCOja~r"&oN_ (ȅ 5W˩ PxX ?>zۺ?$[RyT.Kbsg6 WWRvv, 33k1@n E QjcQ#&4XLH5Ud BT:sf@eYʃ߿0rWU(,&R$\MkcGmzgn_~Dg?QU{&:ɀ]%lj:w>wavۨTm\L>TL[Ţ}E:3<3""OR4y WnS5 < AH,xpҨpk<^'(dU` P p,ut麎 3iy}x?/?"FhWU. \!"e .J{F,h=Hd.Zo3>O:flZ; CE'}6{VEFz{=t>xA@+bl;nPKru;j Q) )5IHe'/ ϲȋ@)2fĺ@<b_~AO==dX*h|w> :)?WNtp7}n6z)=&آ."F${I~WHXאꮓ,O<+Qk:[ϹS=Ec /)0YyR$L: =7);jmlmVgYi'xK@kGt&Mnd7+#6lQ i~XG]ēA謠Y>cce|ݡҭ6x o%x(.sK[:(왩Ouf_Xˏna[}GAu _y@{r}ʔ)fQtw+-Q>i2!Z+a;?-0⠸n 29wuBsC Im =[-4bS%M8; ժi:^des?fUgT<k +(J|rBV{8ewrϫJuFYO=нN_%#S-D"U>"=[XfJ (؏m(Ao1\%_m@^@b8 `(̵0XŖE>}52xO\ OuO2Iyf+7pv~Be#SNr90\Z5 c# 3_!˶oچʖeJ ?:*OcL*(00}>ucqr"OS/<۹JY cD#>ֱ <^Rt.:_%&~|P7e}LIcSxb-Ʊ1ARIki!CH[xd(%i2 vR ދFI& 3fYtPB6$.C"tqJ74-'4TS$H0[#&Xdt%K/2:|PPY! 0pd($3p鈜2+P̭Íb# LI[^yQV% P̺48[WIa4!=,:PEF) > X6o:ۤ4;0WpM,/ F@UegE99>Β 8S5uGreUFDZHcz$Ԉ R&L)=PF |袵`U aϦ8ݨܪ?6PxN"n~%(Gkk9PcSϙWYQ[HM0jnQ-Vn1+=|.I]V-QH~YOWoڍq MK [T d.;sp}RC''--gb)ѝCkiB ib:=XI$ }iI9/*_~Ͳ-sUM6G"I i %v 9 ;8ꝨKRZw`8y=EI EZ~m|mĂSU-K7gz11"=M]M)\A;u>?IZ5}/EB&? Wre9܄Lmlp7ďH_z4M ޹h qOW"!NX mT yE%PV)g ^cȶ$g;$ibyWzM[-(`$w/h:ـOW/OwiKGͧS}"[|k AKm\3KL1u?"($ X 4zH Ƽ,z׬`=I(}: ݼx ]6z_aR=| Oܶ%@?-+&8v5|BcJ[mS{N4;J̴P[ = {sMz@gIM1rO3I i '62/ȁ@XXGnSϯJ& p޳3 44ReNGT!.oi1kڀEy>Yh<65_O2-;1?톈J&E9z_DP`Rݿ{xGscrb9jNWQ Z0FPBS]%G=̖wY3*..A8 B^Xi?ME Eּ͍= ,&| 鵷G)__RYN=$`lz ?5`ms$sNt;y>wW0ԺQIm G :"n tcħn%s1_CDhГ@R/"ocl^PW&u 46FatSB ?Rh_x=/CHtX}a>9sOn8!ijd lpyI,}ӥ=tRNMW|_7> "D >+JBP}B$h+v@A-$6"aLF.;Qs8C#gc^%d#'0ʚJaX؋OYV{zI8hdT !U\r~{榵 Tb1bq?0ﵱ{IJ *ůYk5Êϱs=c;>!05xlS9shqεJ@O%[#.㥁FoH{:MO%0u36E^2B̳`vZ]ЦvȀY}vt/Hfe|ݡsPLS]De"Oq|G0h)^K(%< ]7L~Y KU5Q T=iN#h~H]lS㨔5y<'6m8+eFÑ0l,OuB >"-4[&-ӈ-E<]p[qaEsĘVjl2sIOۯcjXMM7o #iӵ~ZHVyu(|a}< T7+7n!$%]Ȗ2Mti#C]\jKʳVh\%]Rh A>?hϣ05-m5REQSWa&$ϼn(5< V#7]-]ZY&L) +TAvD&<=WKeG[u}/BsuWyUsg*3u:NI9nX L!!{Htn|/AYh#݉S! ,#}z,ŜsN)/ hM=7ˢ(D#lˆ9&K۱ʺ4˾c V=U5jjҢi(mndcL$J5COiCGdP۸R֟& ˭ˮmYq#`۱NwnE_*?imBcrl 6UTbBìl.iϴ =QzZuYD/GmGB+PGP]|V2TF0yeyqy[%YI.Mjiq5S]qT ͵|seyI}On []o)@%x"40;; ?벴i4_ EQ[%lܶۥn{v}t .{KmL뫂b=" p1{"XАFQR2~~!ɒ'fi =$Q:m2Ð6K.|Mx1g<9bJ>v ^^T+'eKU \?O w e|H|P_Ε/6KơVz)6ϵ-b1IδM;p^aHBE.=X. LZGea\); .)UӤ(<ņZii Kc_Lr6 :Oq)K2(alIur׹鷙qa3XB~CGmK{٪YTLY}S#e y]bXtZ$# yj^0"Z|]=1I*`26Nxr~μ(_=F zl2}PV9-eJ7Qj v~KؑTQ}אSXg|D~"Nn+H֍?L18Խ6Im[+#3bNizg2&g^uDӨyԎgqYgdiSq5)#%;tQǪ鼽HtiVa^aʣ0l\4cz>E᪄O]|NFChaCu"߽wTwp6Yǣ0oǶ,=M7Cg#ʟ)+Bo r5j"aͮ !Γ((qCmA$dO]͗I<يk8miGN* DRM`q5=Ec>XT}h[m8, 뱊y|Aн4tFmgl߿r! YXR{E#z e.STE(8&ow*Y3Qjb,#T!$2M (^ HDCFJin!ьH"$~(A6+(rӸJwSWT҆Ԏeq.}Pl6Ƌ>Zi *3uT/u>O!d͜'+$~_/*2CM(VP R|Y_^( ,l IV´y^7e2/^2t, 2Qց3@Cwq~"/+#ܹ1]珹oUo )A~`~&%;g3O.Sq~%:*ļزӛt#PJiI|q:̴tbb ߪ(#lkǩGB51UIRI_eG]ז&Bm/n] G@aGځ2Zi2bgg~Ieue|@\1T|Z,~ap$B9}m@Y94h tLE4jA`oU-sUݧ,YeUq,G2 Ԉ:녥ݜ׏:&Xd.R0,/qvp!ejCr1 157"&d_@m\fi /n^:8.#*hLiv?C;ǀ˗]LT>_%KC D#;zo# ~&M {b.ĬofRR~i3n,~i%S_ 7pxvAX^:f+Ƈ3"L8Mdun֥v` vC@2dO`)\uKfEf_M=}Ox3wL;~0mo.䎇º#bL(Bf|8h=;5А:f>p9 -<4FмR$7,~I^Xm,hdKwǑjݙe+bj||Csե #W_ԋ,M jO[ϲi˷´e|CM`/R7nOK{'+6; sں|ćlBcއʽy~EQ=N3-?}'j1uSetEq1)'||SPn]驼 `)E  U*$*ߍiDy& SPa a̲uK6 S$o^llZK\x:Oų:24O$JF(/ʒ4 KgKKݾ>|u/(m3-A%=(xXQB|(Ш7 8fzyK{Lu(cR;qy/}/P6e݃ ]Q./S،mt}q½4NSː}cr,|a;EkYybM3ZS C- }Uض ô U9 ACVFI7uUg85)c˱ݤ[pIGnČ]HNqZk2ɺEgșO_-q#Y_gb cByt9A(A Goy JYw>*vOPnQ%0>sMsmk/Vд=t4Jf82 =/n$L,ͳ&뮈!y=el,[Ks]e\XRM>eMUR'H{v˧Og"%XVf@Og!qj'eScU~ga4 *? ߰lu}pYSMszǮ[ {BnQ,ym@7~'.6ԺɄ +vZLvphRxX'~@>Bq8zM'y,CGFM~A2]f@dr56K4 !BB^jš ~=硦G#~y@R\U0!qWGO=OQx2>sycy(l8_KT(Qu2%l@< rك8M>_1 ;B67M ì nUg}ݨ ⤦.ssadmV8uSMa=*"䎩s 1D 5ƅuiS!4!se4mwې7mf7#|d21v![M cAs&º[Gatg,Mn(`+/m'Ɠ$ .ɋȡDy mx'GS 1HdN]9LU@h[F'5^Pmt6[JS!=a]f./|ڐZf[!3ۘ8԰-kZbvH*C~um!%U]O* ɡɳâ,ðA`ൖ*j qi?)L=W&#+ʶ;(R5=2ꮌ h >i4 ܻU䫔Wũ 1.`;KEl>_kN4K[(\q9( y;|Ӑu'$ËŤ3f >mA8q9uBnn⠠ 3[]qYi35s2"k2@Qױ=Lt|y4<`zddEv5pPrPlgQDIUpv]nASdFwؘn=|ׇ&k",G혏O[eAٕ!1ɻ**eY>XnqH{6eidCG\[m~? x'ymB]msa.65RC #>ɇI@w;E8vMxi}pgT%|jGH/b2qF~m]0F+ZBbC&:]-- /mz`iUb Ɠ4vp:GFtfi-:> v'TK^=}Ai҂5zQ^3~iPQz=WŅL]Maw=[G },}G]Ly)~Y>  UYu0ҿ0aRdgL'YN{B'̱ǠYUUQ8_+s. wm)fq{Ps[v?U2KszlD=bimFb A6ZsY9v?ayQюs9Qt`iqOPȃ V7cΕs,FgLeV-sG6di*RO<@lu/u7gꕳ'zxpQeJmY+K;JA_U8~.ː~!Jf Z^}bq:S64 ݯ.݄0'2>s5={/Lm{Ģ<(v UzKMl[NMq>\e-#ӧT_*c< ]>C6Z/(6+vgŜsXwfR>XQ˼viX0 kySV<¸ס,{s)|a,+X./!r_ݵ~B\~Ӥ6'#aEF˼N[ ZB 耷pl8V fѷ.o,S,mvy/CQjjtmsxig[DǢFWۢ o_qDFA+ͬV5^Fە="ڦbEmor lR>}UŠoWⴵ/>;euba*ttk3L*6k"ˏ;AV}s.JZ{c{S&JxE+ \en"Հ|#"cpVTi\K~;O'Û)4w c 㷓SKb=* ~ihKז.+una7jqV/1Z1q4~2轤gPLrě}\Y,3Yۘk.m-J+gnSt&c|1|J)bMcbd.>lgf$6yH?G| V_eϝEQ}ah{wϻrtRT'>E\8̚Pk6X1d ʏ-jJ>@\} )ʺ t٫<(Zi;}j[>[zhӦe: byE(rEEU1Xth-h ƺhCpdDnim'_g s$3mjC*r$+'A_T-KrN'jBٴVݿvh l/\0!>4W?OT*De=éM0ɨ W_[(^dҮ,tߵLIZ7>s|S'qZt+q:=@j sJx(.fZ8Ŷ)ț&ؔy=LS?~^"<%#ue:?h3du]R:+e֏8pp-Kyu%ܕf晬ht= tf_^Ý B#Ee* ji"Gƕ j ۄĸ(q]\ 8 NRAq?ôk9nGyPS2`1ǸfN\~CDQ$'5R&@A8LYi08"Dʏc]M;0yi:uY5l8v+8 TuӂmB6&D~)v06_k2Q䄐1x6 /?-3â04t^G,Ii[S8Ǣ f޴ ~&ku6^~a{kVbZ-Xp,m=cTlއ8pBi|8hɍ.5 U=ku\7L 9Yce(I$ٓ-%kX%q'MbҾ0V[h0xq*31gjEQ5mE"Ey}Eu6-4IMQZr;T㯖z-]:4YUڑw&ishM* ]yHn@E萝tO[:kt kDP~ fXm4i>U䲥-s47i$i,-6:.:p= 0PI7BK(,:K, XVZEu#Ll>D}pλh g6, W󉋴wjJ vtN2hqLV9aMQe1Ӆmd%^m,GmܚEq ni\bsP#RE v<E>|Qm sҧ/Se]e%}YUIYM[5^,yCe%w d]X(k3`C78CM(8(us>T:Pk×R?­64i%&5Vǟc, vOhȽy<ҁ%(>,7%!ek:Ge*"^p3c[0PSsNFxn"dž,-ET C dR]5TcV8k !xjY"-YLQNo8Fɿ8)dؠrhLGA(#=6(W/bT1~3Eat `z `.U#q`iC?FZxPAؐ}߅,}%4xB>Mmy,H^kƲPVyZYu^ݍ(j,#+!4358oc!]vÔ  ".H*_aAGƂtKu,`^<Ci$()\4\pK טȲ똢Q8'w^_?.Cǡ -X h.r<1LP _+a6}4팸݌Ju> PЦ9d%A Ey %uW-tq|-[s[pL([P%qA΢ͫhD"+>;:M"n C eo^ڡhG~Keb jA.A' iw$~P:T?oQfEUW9[Gr)V&7|1(o6bj.! İ-ⴱ:ªN2 "/MAGAYWl<.Jc]R2 tɡ *V+7*i%IF,a~1:#yqLVMu}[;˭Zd-A5 25!JRͷ 2>u `,Eˇ8+8鄘a9`̾y٬?d l*L~y6V (㠋H+z)\. .jUQ:*2_50l ?K_E?4EqI>(yO˱.-!xKuꗯS S6sQVŖαG }qn#_oM 7THFB9KCIiF>d lZ9c zGky98X` x\Xh=t߬Lؓ'{ێU7TpyX7?0ECɎC9Z ,E+Q䢼1~_/"כ*L85J7\J PS2cRVq JM]j+-Yjl;Jo`(#X^6G"ʦ NeƠZz,Y6P>zό<%,(n,[<ȟ!I*Vb߸ϰ]_%Q󾫈MywaP^?MSܘH3K9-MW,:ykRv\e~5(1N kryYH`]ŵDsKm, R_ x0ŴN艡DvLT0wmb:ԻE uV p % אnc! NEU[\oQ<谞.]DpN_eHOuTJx (o-mQ9[d-m)wRVoޢj^5ن4}z!ap2.ƣ*K=/r ie#0f潸T3lt(FlӧbUgEE{5rc8u!Y9d{BۡlJ^X5LOY5õd;PGhCXW\~ԑrخqy|`)Q[vnjv!*n@Lb"ʊ;7bT)뉱fUjm N6PӔԁiFB a"=j8uحlu!͕oq'~X@ļSw "_$Q>hPsĹ$UX$*W=Hde7/~(Qq9F]lyV=_hI fM}f.m5^~|;uN>O5an~bc lzʄm>觉ʡ4u)Z\gY[@1-#B&{ɮV VN FAbJX9!An$p\w+ 5~X) n[י\4D rɧq%1IyXa+W }\'Ȋ,|ұK64\F\0gmɾz6M`]3l9l%Itط-̬]< ;{,}ںYRjdl u+yxO}07W0)ِ<:QS\g-,7TX,m]R#hǧ D pv3#_ -C?L)c ȳas{BD($vFHMdfዤ,6ZR83\ PyěaA4C\mC@qfQ+{[P"Wx*Hz[3:$c4VĵW(=ZV[g[(·BJn$ &k$es T$kY^Ŵ%ו r.oo0d rH,cGLG4=]xئ@i hln:쥣^ Jg1(9w J#vut~eF+?n.4e?.y#PD>IUg\lQ kqM !V[Xp+tujiˌ1 7L}G=znʝF4Mlʸ%X7uiQϢgղ6əu9Aoc+<0/'p {n $~*]QCeű9PT7q.(JyoJulpYË}-,6C"(UV2Pt$m+^eɽUAL}Vv;2s4iVmnv"o#~~-!m=Ldl% ]K^47j^s{ *v̠"[h-Y*϶C xDK*ߩSn58JrkXϐ\#_!gniI-G59@~I Z{nRLznXҐ:`/sH??,]+,j ^S;U@M&-ES$E0<4g}659YAtY4tۂo^D.&8=]Q N<#ي"x N{!e|Pfm=l|nP=ݰٶϝ|"''E,Ivcw(R|rQK_B{ 3'x_0"n.{zYfΧ7, XYջ)^N´dle׽nI{  uLӼ̀b Ҥ&c5)`HP!_|'-]%ۀt/PRCm't! 5q5xP./1@(M0%9e/M!#e)aZd~kH|)bJ1G5}zu @[O>X.!TXQ%ۭD-;{P]gc_jO]qc -`_U@;GIt&&P'֎|u}`h G4,/ZaL Msb; (4Gq(m^YaR@ 9s-"bF ж]TTy.-s M|>>0P!kIFr41ӘU/~u|캣0-e_O4$Z,44(KWRwWPhX.tl /󵳦NU׍,e ^)xy]Eɮ(y. ^x,nqzxŌ2U+2tvAd9Au;yboaw'¼elދ=LjQ6?uQǏ DASF*SnP9U}߽>7 I@=<aN ]ur"6#>/Dg_*2>x,Pp2G`38ɘm)e3}=3L$^3 hRu h; Jodii 18%Ɂ+42z1C]M,^QM]na[ i3Ed ZcنPc+6`^Ͳ$gud&t! qՑ}x!W4N8? bM>W]EQ1-ވY3Ԣ/p&ZFe6YT;N !8ydqA҄&H(#B![g%#{wxwSHC1c#7Ćo .ΜQ Yu|1(1;gZc[TrV,h$0Vٟ]'$2h ^0ӱ٤X3v|zNl AyۥK]3Q;o?кtôbI&uO:u2fe~2z]Z]#E BXWsу<*wyJ/PXD5rV*&l~iZ~^gSmPG\i[Eݸ5SrJ'/W1ʻSOѐI˹&qbS #R3onZ!Ԥ;lx[.fW-ȍ*~Mh# S+84XB'NC+pir٧dl z U/XM$A`v*FEqb[e|`s|{3%;1 |q056&2-E11`<&)1 5Ŋ![85gе}G# 2}@!վ04$ze/`O%1Y.*f3`cKUȗ <ԉ;הa2Ʀ%B("5:7[NN@SY>*Ƀ-]WiR.|@-Ocvjk+`C/@&䋞Nm*c+HǶ(M.om\+(/nѿZy.2 x2C tZ%XixeUN߁!z@$\cͨXqEYei^qﲔ'ǖUm˲z Lm[YƀNGQNM`o_2>w(L$yu 艤xڴeY,7D7Mkq(ϻ2 ,.yuEFzsZ N$gԌ17E3w|PGr k(L"6ݤ\!67m?L鑈W4>嵴aŴmrAfs.BcLlEQ*&JƻW+/YaiOhcf㭣BrHeuJ >$65. k](ؓGal(SحƂϣҍJ|Dz0&'Si46wrפlbHd_cL~gQ N+Ea$&FhIлYI F0 \!⪉lӠY󠁉5٪%]&yz h(,I>v}/@<6Oש E n%I5/,8 EEm2dVx<3jRz$57p Ohg!õeQ鰡r~x;01.Q/A7>Ș;W&SuxiOВiKʺbJ,-Cif)O[h+ؕYJ\qI<3w;o:b6[C)dlܤ>մWi4څEv%:iL+o7"ƽNU%{zQ!C*RyѷQC+σudh`|I\x)22vnʎfF݀l7>ʼ yӲc2mX.x9KYQ(+)MH|CH-KxN¶kL߁u ӷ.H@^3SaNr)a1_k2>xuŸ\F΄DfB9Q,И VEG&Q`%`4 IX\#Xc1C$堰%M"@,”A18mlp}LUh{gj7mi{fǭAYA&*OW.VErl٘iw3Yю:~d<تn̶00G."oc?v7;L+ȇTMߢJ<OTfC72 oR&r 1,'řuX#bIB_8IAI!asf7afajRp,`^aY("cA4'f55{jGg8P;ӏ2\\ʰ'n~Z{r*U{Z}Pheݕbn\ jeQeǍR.gBm̩%ا@AOLqvf"U7QI\f0BS@i{rO|>dfm [v}R!1_Y1Yg Rc1lAacr}'c)o4>{d{~`DӶL}"7uYr}~ƦԚ'h(23ϰgʽg K)۱c{FQ1]n<.E ڴI>KS}WL06nHț<"յ& 'c8#sN2D$?`ti&=5*Im'í`RΖ/jJ4ҥuo $0W˅w,D mE!v/m7.'b7L. \$C-e87O1lABǻyS^g!rYYK&VtP ˴g5 qoH] DL3iEPfm qeWB%Bjo#i/Ѿi30ߖ>=9*"sN @9/>Ȏ 0ڐKY׏m"'ZYoPmCۨvˮ^A)OaѶKoŧkv1RĸPg_1gPְ /[q3,(_K<*( limEeNR@9hvֻUVV2\E٦։c6f%."dcK)썍m< g_,d֝KHsl3:p bb/ѫ̤vOۓ {@A;Btg/GҲ3U n ]LoY%{5& WN2W*|]9glH\@ޕolEغ-ި*1'%,('tL)<%anr."1mˉ`OdgCKR|2xxe??rKQrkynLD`(ʹYQ£9UKU`QDWomvr؄ M=-W?x0fT&V1W~qC3m;D1&0\-y5:vݤs8Asu CdT|e{)J0 R_n <{1 R@f3?_~=/ކsݞ,N_‹KC<^[-sO Ȋw&Kt(  bv;\)TP_m*i~1HV:q..MͶ|NIݙ @FM=[-m#M=JAX](mk:"'\hjRm3va5}ݤwČ"*#p2fo:)Zـ M.3ȟ){mYюObW\#6":cFx|<~E* )7)kk(yu^"ܳfHt9MChrmHEdPO".ăb#9!Cڇc2dÔ[0)߈iZP៬HӮ^Hfbv\xPd1ʛg]1'9Ա4-' " 8NnF7 zDaxj$u$\&%B+^)CjB2ya/Bp y(XM:)I gF69'RX+:1slJeXee5 9q}PTXBl,P =С,ץ4 ^[~"<[j{O|U_DžVucqSdE {=9'6>%0gxHh0EpR)xnaf1f6eG͍ւ+Y7swqxr[7yסamÎ5}?-\Gvk@)/?z}UBr7MigC$F} tM{?|ުDvtihNT=.OI23 :51ĴQ"nNL9,U`*ao5 rfEf$#gɲm"c,-ױYmsDf[(xwDoJ?!7l'T S<$L䖖L-)%kωahOu![_}@wj&mD)+O~WYgWkTZaF1ZhS-CC1txr Š k$:m>]e3,#JeU{ӹ2>uq$^Agʑ?$Bfx5 ?? Ys eS#!m7ֆi9k;G̝&MQeXa ԰ 13w<j}Κ yZ=^O ;׭Oc` sId ,xX66i;`['eez00uͣWstv͕)@k(r=${I!K {fiN}Er?Uy\/>| je. EՖmv>ɺS@fhsT^%^72=Dܓ.4 9ƧwgelPO9Q\JﭾTqq^|)0#ЩvvM7Y3&C1vM` t̰هAn& M;r&nPE_i}J4!3VR/S9=]UpZ!qo[lqz8>(Od SH#pg!BAvû!^Lj[䁅3[=7: wZ[@y4JH"L?0UW,_-\nqEZrȯhۯ[ۚR*.ma2:M XjA\ (k*V´NK>Zaj]U2ЭbA'6Y tl0e`bP΢1ŭGfsms'Ͷsq,}M~ 橫軩q+z|y?rmS/@,j} -X~}4bp/E+TpGPvRIPIռ3Ȕ:;}Vη0692:UjE}(p~lŴS[c?MaN̏BIVЖa_<ٷ@}Ц`-kU -r=sdvZ}YG؀U/ .ulGi{V! m:'_Q}2?#\wX"vh/ %qэ:yϹ6 2~NBnl<_ urb)|ٞz 8JQVm-ޤ/CǠTNXBH?T3b`Mp\r}: ΁~GYYScFywOjUlb2M|/~)>x}F2>~D JMm12/+]ce~<?s7Z=wfJ|x>deFg#!:ut[S)>:`WkBWUuf]CGy К=e|qNszh`߲׋2jߜ=Ap[sp&O+"} U'`.sNQy7jFǫG rQdk̂aT(K.@b=__w ?! %Wc︊ٚ|<ڞl$?kw 3]L I[)N<1vZTktCWOƘ:׿L!˚]B7E?:e㍮Ѿvj_$1֊w˵Ӄ[eSx;V¢|u#?SX;hJónbw\ճn7NLUkaCfK20燖=i2~{cVP-t-ܟf-NjM5#T$cva4dRxps ϘBN JHK|QӞ)/ l[TB8>g?u`&+49ְ=4$ ƌ h0 nHf8IZAyJXڂߪ&cT ;1ρmU߰T ejy$[I 'u, _ }@Xm("qz _՜[ @&"!9ϘcOP?f\gKZ\P& MaFpuָ>?Ys.족Y }2ʥn1o"w(dzG̓l&F_ɝ'n#>a3;4Ң1Sn2zhбt`nKg3JxV+V.G u@-=1rv߱e(C!t djWДKH'($IeϘʏi#D /\nOaHe]9}Lm q~2~Ь+|Nm/IBg?QMe℩(,RHԻϒrm!3] ޅkȟ1J3'yrI#8'iOQ(JJ~Mߗsݒo__rR3Uig` v:mǍ`G>t4=,_@$Eˀȧ+DLs1%'1tA§}l Kgʹ0%_J3q O|(qgWt"G9CwL*E嵣W&-3:`tК\_nsC淊+ʾ<8FWL#fqn©c9!9Wj:L.MsS_gkl)z4?TrױmO\\;$p@[3Ua\d#%U@oW_4xoe,el3vN0OBq27m\jx" bV'k;svWDU/vc fh`Q~v1C2p=94LHϛ/ti*gbYfa>/̊Fm?m'砱a2q⡽#1 1~Ε^Q6j?vd,d%DiSDm m<<>w93ƿ6QdQV5-uY&M 3|cʄZ 5¨ON#%Ƚ' J~i?vd6>e'mO0 <+T@'Lea(v-(̘s˄A6>D˖1a|1CPdFVj7S{ΖoY)BBР5{rIWmUgZ)d64{?,gBHx,y׶*kȂYB߮n> #[scpY[Eyc˲[U_-LeǠyY7]'|[OHZEZ (q|eoÃ^n4_t Jh.<9R8> L)JDDQ'iEYּʲE= }W& 4΅.4SFx Q% & Fpĝ\O%[zxMX%4qcƮSbO[~۰H}{ԠMC^m_]=hg EaEEaAր8Bs\aADqȏQ*Jtt?,a>zٰׄEi/?Nn΃Ӭq1-?@8UT̶J'EcC c?Q-EZzWidHz\~?iBn@G"GeUyѾ UN"*sGsᨽyΖISreC6-?0%|{.mn}% mI Dn@_#%.T̟M}E7%$g'Ʀ^0-&d(~ *)m.޵nv\'zRӼt V~{̏w΍]gKC M bP#3Ttq(/"K]WPm^̔ E6El, D{"D)Ml~Y"2iG ۏӒGM}3hZ%aLbw,eQ|_x? qrP)nƀ1-둛c׏b%jPYhf6χ*augHƮq8lϋ(vBȨo%8SvKY|25JpKq#ApX % S9M{St[GtdhL!_-MR*k: {2; PEI67b$$-3Z^Zu|oUf(HǓW4qhz&vrg|j3;u+ɱ4?PZW&PѸ15#>Yë(R/ Їi<ϕ}5HhSGbT F,van)uEh_~N( elB&H*a| jbne]m(kM]V9p@kY45^|'6Lg N7+51miU]W`]|?J/GO:ڬ*|dJN&3'yc*6.=P/V%< xIkpN}hB@RO]Xpo<+4lۯnD/u)/l$G‘~zFk5 cA(AE r΂)>);QRʔQ%.j`Ox0nwد-4&h.NJ]RPڸTs$j4È%R('In}` ARMv-]ުf0ƈ Ow@ѧel:c[{s4f˼Z`OJ.l/XJ':Y3R)&m^52Ѭس)H ߔzx^C >]f6Wi5}wJJNm6O#Ď_ r8OA84?~xA*i9c62?"jP*7  cH t?7 -z}&h!J1:`GS I.EA1@.w街\$/9d9Qqrn[̙)js'GnAB坙b~osYQ5)y}fCAaǏ\)s%Ѹ\aj>)%|-Cl䩴StmEa2b묔_(ЙgTulS&Q'90l=Qt&v4oZ3(LN8ID(BB;<J|Vu#]|Ũ&zFi8#;YsIsv%BLrS$e!ff"+;Hn(Rj,a)bt\PތfZ.(8l/eV,d4ꥴ_GW >,@O򓪓է*+}sT)arIĄ P&`;gDYFXuKs7ѩ_3~l]oS_d^5Fj~O]Tf8֘.kEƔL`ɳӌ<7M2P` ̺ Qƴ8es%S״krG֫ЁM=ʈi#udx&xaܗ9/d!PR䡳lnAK]vƇ:ՇLq;-63rozS)e_R0i&,=fª<` F!5 [{9$um]$Ūh>Mַ \>lhH]UuR'r׎/)v:C]¬V\F2;Nា47+1au 'yR8HIU}W EU`cCb7Mvg(_Nh!*tNߎ^v]Dɱ!RYV~$'[ p!2Lv[䌌&@k jU;{ }DZ_qSjb;*T]m>gO~I rn څB9Ɗ#<$:U+K+pߜGnw+BsQifYG@=PB)kD XM]faVv[f !MAD?Ď/H9:B>k>`䐊u%.1-?, GHHY^jÀ6Ta/^]},y"#,wR/mZ$^!T|$ )'bK e* gqRx `SQǞJ(<H2SU3Y#ϐyxb~Mvl,.$ =G"0gX68)?ZC a|X -jm*ͳ]Mgz#zMdIb}w7O2aaŌ/Y{M W ,;Ѕ _G-o-踠 0l.̦.)y!L콀FٿR1SM:aڎ>;f8 d%߼WY&%lynZq1,{/`SH3W+f L}t'IoC){oٚ^C?pRص]d7wé>ހʾRJN{/hY,NX]pGщ"0f#LR)WWPh#QMmQs;ڛ`/_px O0|[ Whi)m5j49lOoFr=LV%ʸG!t&S4Z? u0~̷%4R7]x}=3gh"^!O4gRM+y&n#^SV'v40y9&e 0UEǘć:|V -w|Y>فr#\fҿ3_nb,&i("1;٧|)st5& L>+naUƓ?Mb Jg9v)3ߖhsݰrΏ0.L1R ؏7txAu ,'fnX>6Bۤj;NL5,MeI;w \5n寪n,&^qj.qװgżnߦ{>s'SX:C9dܓG3x'U jhBL콀 [Ϊ5KS3I_ۄw ϩ|Uff3du~q2;sm|ZǮ̼`M8{lldkr[ /ձFu1{~uMlNTxxUby|S{,k> @j!{ !1q9Xs¢.|(o=y]Jaf\:-d~]ᐤx;@̨{qeSPb6{/஡`qo[w]X\19o' .7Pn}jc.ixZ mu 5kO)*JU/py`eXi<5ȝ 5(}G1eMh$v<'Kd%\xX8oP3Z)j4t悬y>&^㢥2k*F~@ Gލě1C7n9XAcӆ4 r~bGɞ M0߂uݱtaFr^M~DOh&sy6Xs"\ Oq/O3nϘt,Iɮq2@9twyNi0^+CAN9kv226>6o.A u)D-oڭÀȝ_Cqv_ZhfClGޞ#4ԑ #bg_|.kb+, Wg 2N* M]fܞ/c[nE洸G(@s x桌3CzPvǡYHL]۶籒iԷ=١%jCJ<6..n,W7vO7h͐u\1|j[Q{>./.Գ@ +ơY9%|ԃa26m8aS΃aS,tj1Nqh1Su.I`Ze:u%Wzؗ +'u%ob.<]8,IF jR5^0 #,1yj)j ưT>>nr"TnU|uvvq]ai4-XK3e#}[:*9j(X^=@JfnL/j&^36u Tpüuo_B =^ sC!o%6#!؄ͽde:^C]vHw0{J?V{/`jPiJ"}(;;jtcBI׻SW3OiѠ/})!aժ EʮJЗ4LfkAdyNmE!8M7G2CVəή&E+hXI/?4yY}DuX91]Lr~3y'-ןD1MMa,/)~ItiA?%-is9\,<ǖy*$ʫT ;E#VxonYQV e O\Bdm]y'qү@>&M콀cԵګlPlv\qOL;"h+$|̃Ok11,'6Uw&^z{†SeIL(daL $򲪛E?LWf_aTΕږ( >30dcω%v9S.v 7փ04fUVy&qa8p9Ie9Z{f>I(dCK6il}Ҟi.,- !x}Ɲ*,}IIoagBbꪒukb|EGrO,1 ;:*,Ί<󚉽}6ϲ $jn*֑vp5ҁKeuU:; f[e0]T fQ Js. r(y32՝h%Xa0yL~u NXyQ,_\Envjbce-apaϑ6G9'c?C_+} (eYQuJeX{/' (mSWٹyYU]7-IfL콀l Fr(Gދ&^#&^#&^#&^#&^#&^#&^#&^#&^#s>IENDB``!L'E4v0g. <=5ipqIx[_lD9;q404B(jeJ5 Ć mò6mMW%Y ( 4ThlK%&V)hiRU@廳:m8l˹O@?]@р^` taK3oR`oH ml`-}Xehg{ s_񶏽;|1&fo -臈wDiM@i5x09x9Jt>x G/z=z;^'\iaam ysoq+g9 =_Gxj`Byi94]ѷAp"(h3{-ش55G{O-݃d:{$>%"GRHts#tB:p.a-Jޅ1V; ُ>WST+%yn 4N ߪzEXw;h21cpoo&-X3=.y^̥&l[zU_h9ӓNd2Ktc:`ƪУ54)֣Hޚ8ne!R=fY4c81ufvyQ)&C";2͹\ ;)w@zieee'j=(˫n p>+AghV-ݚzH JmeIOe%zB"k~%K-' rBrRmRCBV-'|^Uf!TZNU j9a&6+VCB=ZNkժ: dtC&XƢl@"r(ID҉d&H/DjE-fD?VE" ]k'Ӿr0m쳈cWBw|B] nRҔC:^ɾ!u,߬ HF'́ʫXڍdS7\ Q>C(2?^Y->8N5I5'yJo72H<>usF@I=lb5X.ke@y`$HNfp/VUzd|qʨ\")¢j&zttG ߱;E`yE` DŽ<-X*oD!T4n^&׮-y9ٮ߶d^YuEK+-:aO!v\t7N/,ǮL7|=ry_7*[GWk ^vHr<#d$Rkm!e ݝdbpVi&ZU'cw93uFLDӽE=F+Jo}iI+)Vovۤ8Le8Q7 qG)C?D@+A BC0D4E3F(GH0I(J)K!LMNOP"QLRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Ob$h @(1!2$'E4v0g. Tb$˴`WUb$] QV2as 0AA@P        + g4`d`d 0:ppp@ <4@k 0t6g4;d;d( 0(p@ ppʚ;ʚ;<4dddd@l 0@<4BdBd@l 0@90___PPT10 ___PPT9nh֧1qPNG  IHDR +tsRGB PLTEfffm cmPPJCmp0712 7tRNS@fIDATWc`  SP1H $XLIENDB`/ 0?  %O  =      !"#$%&'()*+,-./ 0!1"2#3$4%5&6'8)9*:+;,<-=. >/?0@1A2B3C4D5E6F7G8H9I:J;K<L=M>N?O@PAQBRCSDTEUFVGWHXIYJZK[L\M]N^O/_`abcdefgh i j k l mnopqrstuvwxyz{|}~ !"#$%&')*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP 0` ̙33` ` ff3333f` 333MMM` f` f` 3^?" d3ff  3f?" PW % d %" @ `% v?" dd    " @ `@n?" dZ   @@``Pf ") )@)`)`4p1" dd 1 d0" d0 d0d1" dd 1 d0" d0 d0d  x(    Ht։_ж_ж O.  W#Click to edit the title text format$ $  Bhى_ж_ж @.  Click to edit the outline text format Second Outline Level Third Outline Level Fourth Outline Level Fifth Outline Level Sixth Outline Level Seventh Outline Level Eighth Outline Level Ninth Outline Level&g s  B_ж_ж :   AEECS 213 Introduction to Computer Systems Northwestern University*B083dB' 3Z @` @ `  @`d  <fff ?`d  <fff ?`8  f  6fff ?f  6fff ?f   6fff ?d   <fff ?`X   B|_ж_ж cc  *(08d'Z @` @ `  @`B   s *޽h ? ̙33___PPT92p22 Default Design2  0` ̙33` ` ff3333f` 333MMM` f` f` 3^?" d3ff  3f?" PW % d %" @ `% v?" dd    " @ `@n?" dZ   @@``Pf ") )@)`)`4p1" dd 1 d0" d0 d0d1" dd 1 d0" d0 d0d    (  ^  6fff ?A8    f  6fff ? f  6fff ? ^  6fff ?A^  6fff ?Aj  BAk lB ?@P%   Ht _ж_ж O.  W#Click to edit the title text format$ $   B _ж_ж @.  Click to edit the outline text format Second Outline Level Third Outline Level Fourth Outline Level Fifth Outline Level Sixth Outline Level Seventh Outline Level Eighth Outline Level Ninth Outline Level&g    B4_ж_ж `.   !Fabin E. Bustamante, Spring 2007>"083d' 3' 3XB   s *޽h ? ̙33___PPT92p22 Default Design` 0` ̙33` ` ff3333f` 333MMM` f` f` 3^?" d3ff  3f?" PW % d %" @ `% v?" dd    " @ `@n?" dZ   @@``Pf ") )@)`)`4p1" dd 1 d0" d0 d0d1" dd 1 d0" d0 d0d NF0 (   d  <fff ?`d  <fff ?`8   f   6fff ?f   6fff ?f   6fff ?d  <fff ?`  H_ж_ж O.  W#Click to edit the title text format$ $  BԈ_ж_ж @.  Click to edit the outline text format Second Outline Level Third Outline Level Fourth Outline Level Fifth Outline Level Sixth Outline Level Seventh Outline Level Eighth Outline Level Ninth Outline Level&g A  B`_ж_ж :   AEECS 213 Introduction to Computer Systems Northwestern University<B083d*' 3' 3X   B`_ж_ж cc  l*(08d'B  s *޽h ? ̙33___PPT92p22 Default Design` 0` ̙33` ` ff3333f` 333MMM` f` f` 3^?" d3ff  3f?" PW % d %" @ `% v?" dd    " @ `@n?" dZ   @@``Pf ") )@)`)`4p1" dd 1 d0" d0 d0d1" dd 1 d0" d0 d0d NF@ (  d  <fff ?`d  <fff ?`8  f  6fff ?f  6fff ?f  6fff ?d  <fff ?`  Hh_ж_ж O.  W#Click to edit the title text format$ $   BP _ж_ж @.  Click to edit the outline text format Second Outline Level Third Outline Level Fourth Outline Level Fifth Outline Level Sixth Outline Level Seventh Outline Level Eighth Outline Level Ninth Outline Level&g A   B&_ж_ж :   AEECS 213 Introduction to Computer Systems Northwestern University<B083d*' 3' 3X    B3_ж_ж cc  l*(08d'B   s *޽h ? ̙33___PPT92p22 Default Design` 0` ̙33` ` ff3333f` 333MMM` f` f` 3^?" d3ff  3f?" PW % d %" @ `% v?" dd    " @ `@n?" dZ   @@``Pf ") )@)`)`4p1" dd 1 d0" d0 d0d1" dd 1 d0" d0 d0d NFP (  d  <fff ?`d  <fff ?`8  f  6fff ?f  6fff ?f  6fff ?d  <fff ?`  H쟒_ж_ж O.  W#Click to edit the title text format$ $   B8_ж_ж @.  Click to edit the outline text format Second Outline Level Third Outline Level Fourth Outline Level Fifth Outline Level Sixth Outline Level Seventh Outline Level Eighth Outline Level Ninth Outline Level&g A   BШ_ж_ж :   AEECS 213 Introduction to Computer Systems Northwestern University<B083d*' 3' 3X    Bе_ж_ж cc  l*(08d'B   s *޽h ? ̙33___PPT92p22 Default Design` 0` ̙33` ` ff3333f` 333MMM` f` f` 3^?" d3ff  3f?" PW % d %" @ `% v?" dd    " @ `@n?" dZ   @@``Pf ") )@)`)`4p1" dd 1 d0" d0 d0d1" dd 1 d0" d0 d0d NF` (  d  <fff ?`d  <fff ?`8  f  6fff ?f  6fff ?f  6fff ?d  <fff ?`  Hh _ж_ж O.   W#Click to edit the title text format$ $   BP _ж_ж @.   Click to edit the outline text format Second Outline Level Third Outline Level Fourth Outline Level Fifth Outline Level Sixth Outline Level Seventh Outline Level Eighth Outline Level Ninth Outline Level&g A   B _ж_ж :   AEECS 213 Introduction to Computer Systems Northwestern University<B083d*' 3' 3X    B _ж_ж cc   l*(08d'B   s *޽h ? ̙33___PPT92p22 Default Design` 0` ̙33` ` ff3333f` 333MMM` f` f` 3^?" d3ff  3f?" PW % d %" @ `% v?" dd    " @ `@n?" dZ   @@``Pf ") )@)`)`4p1" dd 1 d0" d0 d0d1" dd 1 d0" d0 d0d NFp (  d  <fff ?`d  <fff ?`8  f  6fff ?f  6fff ?f  6fff ?d  <fff ?`  H_ж_ж O.  W#Click to edit the title text format$ $   B_ж_ж @.  Click to edit the outline text format Second Outline Level Third Outline Level Fourth Outline Level Fifth Outline Level Sixth Outline Level Seventh Outline Level Eighth Outline Level Ninth Outline Level&g A   B(_ж_ж :   AEECS 213 Introduction to Computer Systems Northwestern University<B083d*' 3' 3X    B(_ж_ж cc  l*(08d'B   s *޽h ? ̙33___PPT92p22 Default Design` 0` ̙33` ` ff3333f` 333MMM` f` f` 3^?" d3ff  3f?" PW % d %" @ `% v?" dd    " @ `@n?" dZ   @@``Pf ") )@)`)`4p1" dd 1 d0" d0 d0d1" dd 1 d0" d0 d0d NF (   d  <fff ?`d  <fff ?`8   f   6fff ?f   6fff ?f   6fff ?d  <fff ?`  H| _ж_ж O.   W#Click to edit the title text format$ $  Bd _ж_ж @.   Click to edit the outline text format Second Outline Level Third Outline Level Fourth Outline Level Fifth Outline Level Sixth Outline Level Seventh Outline Level Eighth Outline Level Ninth Outline Level&g A  B  _ж_ж :   AEECS 213 Introduction to Computer Systems Northwestern University<B083d*' 3' 3X   Bh _ж_ж cc   l*(08d'B  s *޽h ? ̙33___PPT92p22 Default Design` 0` ̙33` ` ff3333f` 333MMM` f` f` 3^?" d3ff  3f?" PW % d %" @ `% v?" dd    " @ `@n?" dZ   @@``Pf ") )@)`)`4p1" dd 1 d0" d0 d0d1" dd 1 d0" d0 d0d NF $(  $d $ <fff ?`d $ <fff ?`8  $f $ 6fff ?f $ 6fff ?f $ 6fff ?d $ <fff ?` $ HJ _ж_ж O.   W#Click to edit the title text format$ $  $ BhM _ж_ж @.   Click to edit the outline text format Second Outline Level Third Outline Level Fourth Outline Level Fifth Outline Level Sixth Outline Level Seventh Outline Level Eighth Outline Level Ninth Outline Level&g A  $ BS _ж_ж :   AEECS 213 Introduction to Computer Systems Northwestern University<B083d*' 3' 3X   $ B` _ж_ж cc   l*(08d'B  $ s *޽h ? ̙33___PPT92p22 Default Design` 0` ̙33` ` ff3333f` 333MMM` f` f` 3^?" d3ff  3f?" PW % d %" @ `% v?" dd    " @ `@n?" dZ   @@``Pf ") )@)`)`4p1" dd 1 d0" d0 d0d1" dd 1 d0" d0 d0d NF ((  (d ( <fff ?`d ( <fff ?`8  (f ( 6fff ?f ( 6fff ?f ( 6fff ?d ( <fff ?` ( HT _ж_ж O.   W#Click to edit the title text format$ $  ( B< _ж_ж @.   Click to edit the outline text format Second Outline Level Third Outline Level Fourth Outline Level Fifth Outline Level Sixth Outline Level Seventh Outline Level Eighth Outline Level Ninth Outline Level&g A  ( Bȭ _ж_ж :   AEECS 213 Introduction to Computer Systems Northwestern University<B083d*' 3' 3X   ( BȺ _ж_ж cc   l*(08d'B  ( s *޽h ? ̙33___PPT92p22 Default Design` 0` ̙33` ` ff3333f` 333MMM` f` f` 3^?" d3ff  3f?" PW % d %" @ `% v?" dd    " @ `@n?" dZ   @@``Pf ") )@)`)`4p1" dd 1 d0" d0 d0d1" dd 1 d0" d0 d0d NF ,(  ,d , <fff ?`d , <fff ?`8  ,f , 6fff ?f , 6fff ?f , 6fff ?d , <fff ?` , Hp _ж_ж O.   W#Click to edit the title text format$ $  , B _ж_ж @.   Click to edit the outline text format Second Outline Level Third Outline Level Fourth Outline Level Fifth Outline Level Sixth Outline Level Seventh Outline Level Eighth Outline Level Ninth Outline Level&g A  , Bp _ж_ж :   AEECS 213 Introduction to Computer Systems Northwestern University<B083d*' 3' 3X   , Bp _ж_ж cc   l*(08d'B  , s *޽h ? ̙33___PPT92p22 Default Design` 0` ̙33` ` ff3333f` 333MMM` f` f` 3^?" d3ff  3f?" PW % d %" @ `% v?" dd    " @ `@n?" dZ   @@``Pf ") )@)`)`4p1" dd 1 d0" d0 d0d1" dd 1 d0" d0 d0d NF 0(  0d 0 <fff ?`d 0 <fff ?`8  0f 0 6fff ?f 0 6fff ?f 0 6fff ?d 0 <fff ?` 0 HX _ж_ж O.   W#Click to edit the title text format$ $  0 Bx[ _ж_ж @.   Click to edit the outline text format Second Outline Level Third Outline Level Fourth Outline Level Fifth Outline Level Sixth Outline Level Seventh Outline Level Eighth Outline Level Ninth Outline Level&g A  0 Ba _ж_ж :   AEECS 213 Introduction to Computer Systems Northwestern University<B083d*' 3' 3X   0 Bn _ж_ж cc   l*(08d'B  0 s *޽h ? ̙33___PPT92p22 Default Designr 0  4(  4^" 4 6G$ ?R" 4 s *G ?L 4 c $ ?/L 4 c $ ?2 / 4 Hh_ж_ж$    0  4 BHzpHzp 9 1  0 L 4 c $ ?q 4 HHzpHzp q2   *d# X <  4 c $ηo~ ? ̙3380___PPT10.re  0L0  ?78(  8G 8 <0._ж_ж ?`0 !Fabin E. Bustamante, Spring 2007<"083d 3' 3Z @` @ `  @`  8 s *2 ?  Virtual Memory$03fd$3fZ @` @ `  @`B 8 c $$I ?   ,Today Motivations for VM Address translation Accelerating translation with TLBs Dynamic memory allocation  mechanisms & policies Memory bugsD "P lPZ @` @ `  @`< 8 c $޽h ? ̙33ZR___PPT102.]0G+D'  = @B D' = @BA?%,( < +O%,( < ++| 0L0  <:(  < < s * ?R0 "A system with physical memory only"#03fd# 3fZ @` @ `  @`U < c $4 ?@0 OAddresses generated by the CPU correspond directly to bytes in physical memory 2OPPd0"PdP\ 6Vv  6 Vv6Vc < <ن_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 < <_ж_ж ?ce *&08dZ @` @ `  @`d" < <G f3o?P  < BXކ`` ?U CPU$0 3f3fZ @` @ `  @`X < 0f3J?  :8  O  < O Z  < s *J? Z  < s *J?  Z  < s *J? Z  < s *J? @Z  < s *J? @Z < s *J? `  Z < s *J? ` Z < s *J?  Z < s *J?  Z < s *J?   Z < s *J? 0 Z < s *J? P Z < s *J? 0   < B`` ?  0:$0 3f3fZ @` @ `  @` < B`` ?` 4 1:$0 3f3fZ @` @ `  @` < B|`` ? 0 d  N-1:$0 3f3fZ @` @ `  @` < B)`` ?  Memory$0 3f3fZ @` @ `  @`RB < s *D?~P BRB < s *D?. R & < B7`` ?  Physical Addresses$03fP3fZ @` @ `  @`I < <|8_ж_ж ? 6K EE.g. most Cray machines, early PCs, nearly all embedded systems, etc.FdFZ @` @ `  @`< < c $޽h ? ̙33ZR___PPT102.]0G+D'  = @B D' = @BA?%,( < +O%,( < ++/+ 0L0  Q)I)-B@((  @ @ s *e ?R0 A system with virtual memory"03fd 3fZ @` @ `  @` @ c $ v ?@0 Modern processors use virtual addresses Hardware converts virtual addresses to physical addresses via OS-managed lookup table (page table) `0Pd\ 6Vv  6 Vv6Vc @ <x_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 @ <h_ж_ж ?ce *&08dZ @` @ `  @`d" @ <G f3o? ;  @ B`` ?[ U@  CPU$0 3f3fZ @` @ `  @`X @ 0f3J?;K:8   @ Z  @ s *J? +Z  @ s *J?+ Z  @ s *J? KZ  @ s *J?K Z  @ s *J? k Z @ s *J?  Z @ s *J?k  Z @ s *J?  Z @ s *J?  Z @ s *J? ; Z @ s *J?;  Z @ s *J?[  Z @ s *J? [  @ B0`` ?k ? 0:$0 3f3fZ @` @ `  @` @ Bܴ`` ?  1:$0 3f3fZ @` @ `  @` @ B`` ?+   N-1:$0 3f3fZ @` @ `  @` @ B@`` ?KQ Memory$0 3f3fZ @` @ `  @`X @ 0f3J? 8  {?  @{ ? Z @ s *J? {@ Z @ s *J? @ Z @ s *J? @ + Z @ s *J? + @ Z  @ s *J? @ K Z !@ s *J? @ k Z "@ s *J? K @ Z #@ s *J? k @ Z $@ s *J? @  %@ BD`` ?K0 "   0:$0 3f3fZ @` @ `  @` &@ B@`` ?0 "  1:$0 3f3fZ @` @ `  @` '@ B`` ? "  P-1:$0 3f3fZ @` @ `  @` (@ B`` ?   Page Table$ 0 3f 3fZ @` @ `  @`RB )@ s *D?  X2 *@ 081? t X2 +@ 081? z S RB ,@ s *D?  RB -@ s *D?9  RB .@ s *D?I  8  j @  /@j @ TB 0@ c $DJ? i @ TB 1@ c $DJ? i B 8  @ K  2@ @ K TB 3@ c $DJ? @ M TB 4@ c $DJ? B M R8  K0 5@K 0` 6@ 0f3 ? 0@  K0 7@ K0f2 8@ 6f3J? K0 TB 9@ c $DJ?  TB :@ c $DJ?01,B ;@ # B0CTE4FQ.UVWf3J?  Q.<JFTTTcJ<. 0@    <T<00T 0 <@ B`` ?  b Disk$0 3f3fZ @` @ `  @`*B =@ 3 B1CBE4FQ.UVW? : \*K-yv1b*0B@    nsB d5 (31B K*B >@ 3 B1CBE4FQ.UVW? : \*K-yv1b*0B@    g.j$ X@8 1B P K' ?@ B`` ?2  Virtual Addresses&03fP3fZ @` @ `  @`( @@ B3`` ? R7  Physical Addresses&03fP3fZ @` @ `  @`0 A@ <4_ж_ж ?  ,E.g. workstations, servers, modern PCs, etc.-d-Z @` @ `  @`< B@ c $޽h ? ̙33ZR___PPT102.]0G+D'  = @B D' = @BA?%,( < +O%,( < ++3 0L0  U M D (  Dc D <Pc_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 D <o_ж_ж ?ce *&08dZ @` @ `  @` D s *pv ?R0 Motivations for virtual memory"03fd 3fZ @` @ `  @` D c $ ?@0___PPT9zr Use physical DRAM as a cache for the disk Address space of a process can exceed physical memory size Sum of address spaces of multiple processes can exceed physical memory Simplify memory management Multiple processes resident in main memory. Each process with its own address space Only  active code and data is actually in memory Allocate more memory to process as needed. Provide protection One process can t interfere with another. because they operate in different address spaces. User process cannot access privileged information different sections of address spaces have different permissions. *a0]d0 dq0]d,0 d(0d20 d+0dq0]d*0 d20d20 dA0d0 d*,  (  2+*22  A    `<6Vv  6 Vv6V< D c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++M 0L0  og H (  Hc H <ϊ_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 H <ۊ_ж_ж ?ce *&08dZ @` @ `  @`F H s * ?R0 LMotivation #1: DRAM a  cache for disk"'03fd' 3fZ @` @ `  @`d H c $( ?@0xph___PPT9JB bFull address space is quite large: 32-bit addresses: ~4,000,000,000 (4 billion) bytes 64-bit addresses: ~16,000,000,000,000,000,000 (16 quintillion) bytes Disk storage is ~300X cheaper than DRAM storage 80 GB of DRAM: ~ $33,000 80 GB of disk: ~ $110 To access large amounts of data in a cost-effective manner, the bulk of the data must be stored on disk#a0]dx0 d0q0]d00 dhq0]d#x00  h^6Vv  6 Vv6V@B H C D ? 56@B H C D ? op 8 f _f H f_f H B_ж_ж ?h x P   1GB: ~$200  d Z @` @ `  @` @ F _f  HF _f`  H 0??? ?F _f2  H 6???J?F _ TB  H c $DJ?F k G TB  H c $DJ?_k `,B H # B0CTE4FQ.UVW???J?  Q.<JFTTTcJ<. 0@    lXl:0TF _g  H B_ж_ж ?    80 GB: ~$110 d Z @` @ `  @`` H 0???J?q < ` H 0???J?" " H B,_ж_ж ?f    4 MB: ~$500 d Z @` @ `  @``B H 0Do?#  `B H 0Do?B E  H B&`` ?N V Disk"0 3f3fZ @` @ `  @`  H B(E`` ?N " DRAM$0 3f3fZ @` @ `  @`  H BR`` ?N " SRAM$0 3f3fZ @` @ `  @`< H c $޽h ? ̙33ZR___PPT102.]0G+D'  = @B D' = @BA?%,( < +O%,( < ++(  0L0  JB0 !L(  Lc L <\Ћ_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 L <܋_ж_ж ?ce *&08dZ @` @ `  @` L s *\ ?R0 Levels in memory hierarchy"03fd 3fZ @` @ `  @`LB L c $D81?n8 4 L4% L N|xx81?4 CPUdZ @` @ `  @`& L Nxx81?@2 regsdZ @` @ `  @` L Bxx81? t j  C a c h e d Z @` @ `  @`   L Nxx81?` 2 MemorydZ @` @ `  @`8   L`2  L 081?`2  L 081?``2  L 081?8,2 L Txx81? diskdZ @` @ `  @`* L Bp7`` ?!    size: speed: $/Mbyte: line size:!d!Z @` @ `  @` L BE`` ?! q   32 B 1 ns 8 BdZ @` @ `  @` L BR`` ?;    Register  d Z @` @ `  @` L B\^`` ?;   CachedZ @` @ `  @` L Bk`` ?; ;   MemorydZ @` @ `  @` L Bw`` ?; [K   Disk Memory d Z @` @ `  @`$ L Bx`` ?!  +  32KB-4MB 2 ns $125/MB 32 BdZ @` @ `  @`& L Bh`` ?! a ;  1024 MB 30 ns $0.20/MB 4 KBdZ @` @ `  @` L B``` ?! `  100 GB 8 ms $0.001/MBdZ @` @ `  @`RB L s *DH?@@A! L B`` ?r :_ W larger, slower, cheaperdZ @` @ `  @`  L BL`` ?a"  8 BdZ @` @ `  @` L Bō`` ?a 0  32 BdZ @` @ `  @` L BPҍ`` ?a] 4 KBdZ @` @ `  @`XB L 0D81?  XB L 0D81?  L B@`` ?w i  cachedZ @` @ `  @`  L B`` ?8W virtual memorydZ @` @ `  @`< !L c $޽h ? ̙33ZR___PPT102.]0G+D'  = @B D' = @BA?%,( < +O%,( < ++  0L0  @PA(  P. P s *L ?R0 4DRAM vs. SRAM as a  cache "03fd 3fZ @` @ `  @`( P c $ ?@0|___PPT9^V @zDRAM vs. disk is more extreme than SRAM vs. DRAM Access latencies: DRAM ~10X slower than SRAM Disk ~100,000X slower than DRAM Importance of exploiting spatial locality: First byte is ~100,000X slower than successive bytes on disk vs. ~4X improvement for page-mode vs. regular accesses to DRAM Bottom line: Design decisions made for DRAM caches driven by enormous cost of misses@1a0]d0 d;0d+0 d=0d?0 d0 dH0d1!+    &  ?Hb|6Vv  6 Vv6Vc P <l@_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 P <lL_ж_ж ?ce *&08dZ @` @ `  @`< P c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++?  0L0  a Y PT (  T T s * h ?R0 Impact of properties on design"03fd 3fZ @` @ `  @` T c $ ?@0vnf___PPT9H@ (If DRAM was to be organized similar to an SRAM cache, how would we set the following design parameters? Line size? Large, since disk better at transferring large blocks Associativity? High, to minimize miss rate Write through or write back? Write back, since can t afford to perform small writes to disk What would the impact of these choices be on: Miss rate: Extremely low. << 1% Hit time: Must match cache/DRAM performance Miss latency: Very high. ~20ms Tag storage overhead: Low, relative to block sizeha0Pd0 d?0d.q0Pd0 dh?.  d< +Kk +Kk _c T <t_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 T <|_ж_ж ?ce *&08dZ @` @ `  @`< T c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++f" 0L0    `'X$ (  X8 X s *( ?R0 >Locating an object in a  Cache " 03fd  3fZ @` @ `  @` X c $Ҏ ?@0h`X___PPT9:2 SRAM Cache Tag stored with cache line Maps from cache block to memory blocks From cached to uncached form Save a few bits by only storing tag No tag for block not in cache Hardware retrieves information Can quickly match against multiple tags a0]dB0 dA0d=0 d(0d BA=(  `<6Vv  6 Vv6Vc X <Վ_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 X <_ж_ж ?ce *&08dZ @` @ `  @`8    X  T X c $J?   X BH `` ?G   X$0 3f3fZ @` @ `  @`' X Bh`` ?    Object Name$ 0 3f 3fZ @` @ `  @`X  X 0f3o? `  X Bh#`` ?   Tag$0 3f3fZ @` @ `  @`  X Bx`` ?   Data$0 3f3fZ @` @ `  @`P8  s   X s Z  X s *J? `` Z X s *J?` `  X BH>`` ? t  D$0 3f3fZ @` @ `  @` X BI`` ?P t  243$0 3f3fZ @` @ `  @`P8  c  X c Z X s *J? `P Z X s *J?` P  X BhJ`` ? d  X$0 3f3fZ @` @ `  @` X BW`` ?P d   17$0 3f3fZ @` @ `  @`P8  pC Xp CZ X s *J? p`0Z X s *J?`p0 X Bds`` ? pD J$0 3f3fZ @` @ `  @` X B|`` ?PpD 105$0 3f3fZ @` @ `  @` X <_ж_ж ?P   " " " 2Z @` @ `  @` X <4_ж_ж ?P K  " " " 2Z @` @ `  @` X B䡏`` ? t  0:$0 3f3fZ @` @ `  @` X BК`` ? d  1:$0 3f3fZ @` @ `  @` X B`` ?p * D N-1:$0 3f3fZ @` @ `  @`LB  X@ c $Do?0  " LB !X c $Do? LB "X c $Do? LB #X@ c $Do? "  $X Bˏ`` ? x u  = X?$0 3f3fZ @` @ `  @`" %X B Տ`` ? @   Cache $0 3f3fZ @` @ `  @`RB &X@ s *D? r < 'X c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++%  0L0  ##p(\Y#(  \F \ s * ?R0 LLocating an object in  Cache (cont.) "'03fd' 3fZ @` @ `  @`L \ c $ ?@0\TL___PPT9.& DRAM Cache Each allocated page of virtual memory has entry in page table Mapping from virtual pages to physical pages From uncached form to cached form Page table entry even if page not in memory Specifies disk address Only way to indicate where to find page OS retrieves information  a0]dk0 d"0d,0 d?0d0 d0 d 3 -",?`<6Vv  6 Vv6Vc \ <*_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 \ <0_ж_ж ?ce *&08dZ @` @ `  @`X \ 0f3o? @ 0 \ Bl>`` ? PT  Data$0 3f3fZ @` @ `  @`R \ s *J?p 0  \ B7`` ?p D  243$0 3f3fZ @` @ `  @`R  \ s *J?`    \ BD`` ?` 4   17$0 3f3fZ @` @ `  @`R  \ s *J?@  \ Be`` ?@ 105$0 3f3fZ @` @ `  @`  \ <q_ж_ж ? {_  " " " 2Z @` @ `  @`8 p  \p  \ B}`` ?@p 2D  0:$0 3f3fZ @` @ `  @` \ B(`` ?@` 24  1:$0 3f3fZ @` @ `  @`  \ B`` ?@ N-1:$0 3f3fZ @` @ `  @`8 @p !)  \p @!) T \ c $J?` @  \ B `` ?V *  X$0 3f3fZ @` @ `  @`' \ BL`` ?@p "D   Object Name$ 0 3f 3fZ @` @ `  @`X \ 0f3o?  0 \ B`` ? T  Location$ 0 3f 3fZ @` @ `  @`R \ s *J?p 0 0 R \ s *J?` 0 R \ s *J?@ 0  \ <_ж_ж ? _  " " " 2Z @` @ `  @`8 p  \p  \ Bא`` ?p D  D:$0 3f3fZ @` @ `  @` \ B,`` ?` 4  J:$0 3f3fZ @` @ `  @` \ B`` ?@ X:$0 3f3fZ @` @ `  @`RB  \ s *Do? @ p !\ Bl`` ?@  1$0 3f3fZ @` @ `  @` "\ B` `` ?p D  0$0 3f3fZ @` @ `  @` #\ Bh`` ?m ] /  On Disk&0(3f3fZ @` @ `  @`RB $\ s *Do? 0 r" %\ B`` ? Bd   Cache $0 3f3fZ @` @ `  @` &\ B/`` ? @ d   Page Table$ 0 3f 3fZ @` @ `  @`RB '\@ s *D?  < (\ c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++9  0L0   88cc`7(  `> ` s *K ?R0 DPage faults (like  cache misses ) "#03fd# 3fZ @` @ `  @` ` c $e ?@0\TL___PPT9.& What if an object is on disk rather than in memory? Page table entry indicates virtual address not in memory OS exception handler invoked to move data from disk into memory current process suspends, others can resume OS has full control over placement, etc.b4a0]dy0 dU0d4yU`<6Vv  6 Vv6Vc ` <v_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 ` <`_ж_ж ?ce *&08dZ @` @ `  @`X" ` 0G ToW ? N8 7" `  `,``G f3o? 1  CPU&0(3f3fZ @` @ `  @`X ` 0[]2 ? P uX ` 0f3J? 3 XR  ` s *J?   R  ` s *J?  i R  ` s *J?i  R  ` s *J?   R  ` s *J?  l R ` s *J?   R ` s *J?l  R ` s *J?  n R ` s *J?n  R ` s *J?   R ` s *J?  q R ` s *J?  R ` s *J?q   ` Bx`` ?!  Memory$0 3f3fZ @` @ `  @`X ` 0[]2 ? z;X ` 0f3J? ]R ` s *J? Z$2 R ` s *J?2 Z$ R ` s *J? Z$ R ` s *J? Z$5 R ` s *J?5 Z$ R ` s *J? Z$8 R ` s *J? Z$ R  ` s *J?8 Z$ R !` s *J? Z$  "` B4`` ? /   Page Table$ 0 3f 3fZ @` @ `  @`^B #` 6Do? U ^B $` 6Do?M  LB %` c $DJ?6 Z$ LB &` c $DJ?6 X& LB '` c $DJ?3 Z$ LB (` c $DJ?3 X& X )` 0[]2 ?"^2 *` 6[]2J?XLB +` c $DJ?"LB ,` c $DJ?"$B -` # B0CTE4FQ.UVW[]2J?  Q.<JFTTTcJ<. 0@    l-x{6 x_ 0T"T .` BX`` ?R` Disk$0 3f3fZ @` @ `  @`B /`  B1CBE4FQ.UVWo? : \*K-yv1b*0B@    G%' Hk Q  1Bd XB 0`  B1CBE4FQ.UVWo? : \*K-yv1b*0B@    tMLhŷ ! I1Bc `X' 1` Bpϑ`` ?   Virtual Addresses&03fP3fZ @` @ `  @`( 2` Bܑ`` ? >  Physical Addresses&03fP3fZ @` @ `  @`X" 3` 0G ToW ? - 7" 4`  ```G f3o?   CPU&0(3f3fZ @` @ `  @`X 5` 0[]2 ? /X 6` 0f3J? R 7` s *J? br R 8` s *J?r b R 9` s *J? b R :` s *J? bu R ;` s *J?u b R <` s *J?" bx R =` s *J? b" R >` s *J?x b R ?` s *J? b% R @` s *J?% b{ R A` s *J?{ b R B` s *J?(b~R C` s *J? b( D` B0`` ?0   Memory$0 3f3fZ @` @ `  @`X E` 0[]2 ? YX F` 0f3J? p<~R G` s *J?< 9 R H` s *J? 9 R I` s *J? 9? R J` s *J?? 9 R K` s *J? 9 R L` s *J?B 9 R M` s *J? 9B R N` s *J? 9 R O` s *J? 9E P` B4`` ?P    Page Table$ 0 3f 3fZ @` @ `  @`^B Q` 6Do? b ^B R` 6Do? ba LB S` c $DJ? 9 LB T` c $DJ? 7 B U`  B1CBE4FQ.UVWo? : \*K-yv1b*0B@    G%' Hk Q  1B ' V` B``` ?   Virtual Addresses&03fP3fZ @` @ `  @`( W` B$`` ?   Physical Addresses&03fP3fZ @` @ `  @`^B X` 6Do? O  Y` B1`` ?%>-   Before fault" 0  Z @` @ `  @` Z` B ?`` ?)1   After fault" 0  Z @` @ `  @`RB [` s *Do? \t RB \` s *Do? 1 X ]` 0[]2 ?w`^2 ^` 6[]2J?w`+LB _` c $DJ?wxLB `` c $DJ?`a$B a` # B0CTE4FQ.UVW[]2J?  Q.<JFTTTcJ<. 0@    l-x{6 x_ 0Tw` b` BDN`` ?2 Disk$0 3f3fZ @` @ `  @`< c` c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++)  0L0    "d(  d d s *(Ò ?R0 Servicing a page fault"03fd 3fZ @` @ `  @`V d c $ ?@0 |t___PPT9VN v&Processor signals controller Read block of length P starting at disk address X and store starting at memory address Y Read occurs Direct Memory Access (DMA) Under control of I/O controller I / O controller signals completion Interrupt processor OS resumes suspended process a0]dY0 d q0]d<0 d$q0]d20 dY <  $2^6Vv  6 Vv6Vc d <_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 d <_ж_ж ?ce *&08dZ @` @ `  @`^2 d 6;;;81? _ d N``;;; ? a  diskdZ @` @ `  @`X d 0;;;81? _ ^2 d 6;;;81? _ X  d 0;;; ? \   d <D`` ? {  DiskdZ @` @ `  @`48    d f2  d 6;;;81? "  d ND(``;;; ? m  diskdZ @` @ `  @`` d 0;;;81?  f2 d 6;;;81?  ` d 0;;; ?  |  d Bp5`` ?    DiskdZ @` @ `  @`LB d c $D81?@  LB d c $D81?@  LB d c $D81?|} LB d c $D81?8LM 8 d  `=``81T * *?x @0  Memory-I/O busdZ @` @ `  @`3 d  `LQ``81T * *? 0  Processor d Z @` @ `  @`5 d  fxJ``;;;81T * *? P CachedZ @` @ `  @`6 d  f(_``;;;81T * *?   MemorydZ @` @ `  @`8 d  ``u``81T * *?0 h  I/O controllerdZ @` @ `  @`# d T``;;;81?p H RegdZ @` @ `  @`lB d 3 DBHCEXFQFUVW33?0((8HxH7G/ ( 8@//  @       L81LD)X= ppԔmԔg HX  d <_ж_ж ?L @  (2) DMA TransferdZ @` @ `  @`B d 3 BC E FQUVWJ? @X $ P B d 3 BC E FQUVW3J? @j(j  !  d B_ж_ж ?pX (1) Initiate Block ReaddZ @` @ `  @` !d <_ж_ж ?  (3) Read DonedZ @` @ `  @`< "d c $޽h ? ̙33wo___PPT10O.]0G+D#' = @B D' = @BA?%,( < +O%,( < +DW' =%(D' =%(D' ='@BBB%()))D' =1:Bvisible*o3>+B#style.visibility<*d%(DW' =%(D' =%(D' ='@BBB%()))D' =1:Bvisible*o3>+B#style.visibility<*d%(DW' =%(D' =%(D' ='@BBB%()))D' =1:Bvisible*o3>+B#style.visibility<*d%(+   0L0  B:h(  h h s * Ɣ ?R0  Motivation #2: Memory management"!03fd! 3fZ @` @ `  @` h c $Pݔ ?@0PH@___PPT9" iMultiple processes can reside in physical memory. How do we resolve address conflicts? what if two processes access something at the same address? TWa0]d<0 d0 dW=^6Vv  6 Vv6Vc h <|Ҕ_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 h <,_ж_ж ?ce *&08dZ @` @ `  @`/ h N_ж_жc?  kernel virtual memorydZ @` @ `  @`C h N_ж_жc?   )Memory mapped region forshared libraries*d*Z @` @ `  @`X h 0???c?   N h N@_ж_жc?  %  4runtime heap (via malloc) dZ @` @ `  @`X  h 0???c?- D  h N%_ж_жc?e  *program text (.text) dZ @` @ `  @`L  h N,_ж_жc?  l 2initialized data (.data) dZ @` @ `  @`N  h N E_ж_жc?   4uninitialized data (.bss) dZ @` @ `  @`RB  h s *D?i     h NP>_ж_жc? - stackdZ @` @ `  @`RB h s *D?  RB h s *D?-% & ) h T^_ж_ж???c?   forbidden d Z @` @ `  @`  h B@X_ж_ж ?`" 0dZ @` @ `  @` h Bx_ж_ж ?hv %espdZ @` @ `  @`RB h s *Dc?* h B}_ж_ж ?c memory invisible to user codedZ @` @ `  @`RB h s *D?!"& h BX_ж_ж ? y  the  brk ptrdZ @` @ `  @`RB h@ s *Dc?  - h <`` ? p   Linux/x86 process memory image$ 0( Z @` @ `  @`< h c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++h'  0L0  %%++l&%(  l! l s *l ?R0 'Solution: Separate virtual addr. spaces"(03fd( 3fZ @` @ `  @` l c $ԕ ?@0jbZ___PPT9<4 Virtual and physical address spaces divided into equal-sized blocks blocks are called  pages (both virtual and physical) Each process has its own virtual address space operating system controls how virtual pages as assigned to physical memoryDa0]d80 d/q0]dK0 dD8/K  ^6Vv  6 Vv6Vc l <4ݕ_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 l <_ж_ж ?ce *&08dZ @` @ `  @`( l <`` ?P  $Virtual Address Space for Process 1:%d%Z @` @ `  @`D l <\`` ?p@[  @Physical Address Space (DRAM) !d!Z @` @ `  @`R l s *81? W $ l T$``???81?_    VP 1dZ @` @ `  @`$  l T$``???81?  w  VP 2dZ @` @ `  @`R  l s *81?   R  l s *81?  G R  l s *81? R  l s *81?? R l s *81? W $ l Tp4``???81?_   PP 2dZ @` @ `  @`R l s *81? w R l s *81?  R l s *81?  R l s *81? ' R l s *81? 8 R l s *81?7  R l s *81?G R l s *81? WRB l s *D81?   l <=`` ?O Y  Address TranslationdZ @` @ `  @`  l BP`` ?h  0dZ @` @ `  @`  l B]`` ?   0dZ @` @ `  @` l B_`` ?   N-1dZ @` @ `  @`  l Bv`` ?F  0dZ @` @ `  @` l B`` ?2 N-1dZ @` @ `  @` l Bp`` ?  M-1dZ @` @ `  @`RB  l s *D81?K  [ $ !l TH``???81?K   VP 1dZ @` @ `  @`$ "l T``???81? c VP 2dZ @` @ `  @`$ #l T ``???81?+   PP 7dZ @` @ `  @`RB $l s *D81?  } RB %l s *D81?  % &l T Ö``???81? K PP 10dZ @` @ `  @`D 'l <Ζ`` ? Og  >(e.g., read/only library code)  d Z @` @ `  @` (l Bۖ`` ? n  ..."0 3f3fZ @` @ `  @` )l B`` ? n ..."0 3f3fZ @` @ `  @`( *l <`` ? P $Virtual Address Space for Process 2:%d%Z @` @ `  @`< +l c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++QH 0L0  sFkF3ZpF(  p p s * ?R0 Motivation #3: Protection"03fd 3fZ @` @ `  @`b p c $( ?@0PH@___PPT9" Page table entry contains access rights information hardware enforces this protection (trap into OS if violation occurs) B4a0]dF0 d4F^6Vv  6 Vv6Vc p <@6_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 p <l@_ж_ж ?ce *&08dZ @` @ `  @` p B4N`` ?  T  Page Tables$ 0 3f 3fZ @` @ `  @` p B[`` ? `  Process i:$ 0 3f 3fZ @` @ `  @`X p 0f3o?p ! p Bi`` ? b  Physical Addr$0 3f3fZ @` @ `  @`  p B,u`` ?b Read?$0 3f3fZ @` @ `  @`  p BЁ`` ? b Write?$0 3f3fZ @` @ `  @`R  p s *o?`   p BP`` ?` 6 "  PP 9$ 0 3f 3fZ @` @ `  @`R  p s *o?` R p s *o?`  p B`` ?`0" Yes$0 3f3fZ @` @ `  @` p B `` ?`@\ " No$0 3f3fZ @` @ `  @`R p s *o?P  p B`` ?P 6   PP 4$ 0 3f 3fZ @` @ `  @`R p s *o?PR p s *o?P  p B(×`` ?P0 Yes$0 3f3fZ @` @ `  @` p Bļ`` ?Pf  Yes$0 3f3fZ @` @ `  @`R p s *o?@  p Bܗ`` ?@   XXXXXXX$0 3f3fZ @` @ `  @`R p s *o?@ R p s *o?@  p B`` ?@0p   No$0 3f3fZ @` @ `  @` p B``` ?@@\   No$0 3f3fZ @` @ `  @`8 `1  p`1 ! p B`` ?`2" VP 0:$0 3f3fZ @` @ `  @`! p B`` ?P2 VP 1:$0 3f3fZ @` @ `  @`!  p Bd`` ?@2  VP 2:$0 3f3fZ @` @ `  @` !p <h+_ж_ж ? +?   " " " 2Z @` @ `  @` "p <$1_ж_ж ? p ?   " " " 2Z @` @ `  @` #p <<_ж_ж ? @ ?   " " " 2Z @` @ `  @` $p BO`` ?` `E   Process j:$ 0 3f 3fZ @` @ `  @`X %p 0[]2 ?0 X &p 0f3J? :8 0oO  'p0oO Z (p s *J?0pZ )p s *J?0p Z *p s *J?0 pZ +p s *J?0p@Z ,p s *J?0@pZ -p s *J?0` p Z .p s *J?0p` Z /p s *J?0 p Z 0p s *J?0 p Z 1p s *J?0 p Z 2p s *J?0 p0 Z 3p s *J?0 pP Z 4p s *J?00 p  5p BT``` ?pb 0:$0 3f3fZ @` @ `  @` 6p BPm`` ?`pb4 1:$0 3f3fZ @` @ `  @` 7p By`` ? jd  N-1:$0 3f3fZ @` @ `  @` 8p B`` ?j Memory$0 3f3fZ @` @ `  @`RB 9p s *D? 0pRB :p s *D? 0 RB ;p s *D? 0p RB p BH`` ?   Physical Addr$0 3f3fZ @` @ `  @` ?p Bġ`` ?   Read?$0 3f3fZ @` @ `  @` @p Bp`` ?   Write?$0 3f3fZ @` @ `  @`R Ap s *o? `  Bp B`` ? 6 b   PP 6$ 0 3f 3fZ @` @ `  @`R Cp s *o? ` R Dp s *o?  `  Ep Bǘ`` ? 0b  Yes$0 3f3fZ @` @ `  @` Fp BӘ`` ? f b  Yes$0 3f3fZ @` @ `  @`R Gp s *o? P  Hp B`` ? 6 R   PP 9$ 0 3f 3fZ @` @ `  @`R Ip s *o? P R Jp s *o?  P  Kp B0`` ? 0R  Yes$0 3f3fZ @` @ `  @` Lp B,`` ? @\ R  No$0 3f3fZ @` @ `  @`R Mp s *o? @ Np B `` ?  B XXXXXXX$0 3f3fZ @` @ `  @`R Op s *o? @R Pp s *o?  @ Qp B\`` ? 0pB  No$0 3f3fZ @` @ `  @` Rp BX%`` ? @\ B No$0 3f3fZ @` @ `  @` Sp <\2_ж_ж ?@+  " " " 2Z @` @ `  @` Tp <8_ж_ж ?@p   " " " 2Z @` @ `  @` Up <B_ж_ж ?@@   " " " 2Z @` @ `  @`8  1A Vp 1A! Wp B$U`` ? 2b  VP 0:$0 3f3fZ @` @ `  @`! Xp B b`` ? 2R  VP 1:$0 3f3fZ @` @ `  @`! Yp Bn`` ? 2B VP 2:$0 3f3fZ @` @ `  @`< Zp c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++a  0L0   { t (  tc t <_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 t <8_ж_ж ?ce *&08dZ @` @ `  @` t s * ?R0 VM address translation"03fd 3fZ @` @ `  @`$ t c $ ?@0___PPT9~ Virtual Address Space V = {0, 1, & , N 1} Physical Address Space P = {0, 1, & , M 1} M < N Address Translation MAP: V P U {} For virtual address a: MAP(a) = a if data at virtual address a is at physical address a in P MAP(a) = if data at virtual address a is not in physical memory Either invalid or stored on disk a0]d0 dq0]d0 dq0]d,0 d0d!0 d0dP PU0 d       U8!  $$b|6Vv  6 Vv6V< t c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++ 0L0   x(  xc x <_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 x <_ж_ж ?ce *&08dZ @` @ `  @` x Hcc81?$3p  Processor \ Z @` @ `  @`+ x B$cc81?4  Hardware Addr Trans MechanismXZ @` @ `  @` x HT0cc81?( dy  Main Memory X Z @` @ `  @`L x c $81?d RB x s *D81?8\ 9LB x c $D81?xRB  x s *D81?   x BT?cc ?x aUZ @` @ `  @`  x BKcc ? 3  a'UZ @` @ `  @`  x BLcc ? `  physical addressUZ @` @ `  @`LB  x c $D81?"  x Becc ?   virtual addressUZ @` @ `  @`LB x c $D81?0 LB x c $D$?@A ^ x <kcc ? xP  Xpart of the on-chip memory mgmt unit (MMU) -U-Z @` @ `  @` x s *Xy ?R0 VM address translation: Miss"03fd 3fZ @` @ `  @`< x c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++ 0L0  !!|(  | | s *$ ?R0 VM address translation: Miss"03fd 3fZ @` @ `  @`c | < _ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8 | <L_ж_ж ?ce *&08dZ @` @ `  @` | Hcc81?$3  Processor \ Z @` @ `  @`+ | B<Țcc81?4  Hardware Addr Trans MechanismXZ @` @ `  @`! | Hۚcc81? AY  fault handlerXZ @` @ `  @` | Hcc81?X d  Main Memory X Z @` @ `  @` | Bcc81?WD Secondary memoryXZ @` @ `  @`L  | c $81?d RB  | s *D81?x|yRB  |@ s *D81?hn"iRB  | s *D81?h\ iLB  | c $D81?\ ] LB | c $D81?X Y RB | s *D81?X LB | c $D81?dRB | s *D81?4LB | c $D81?RB | s *D81?  | BH cc ? x aUZ @` @ `  @` | Bhcc ? c  a'UZ @` @ `  @` | B\"cc ?p 8  "UZ @` @ `  @` | BL#cc ?    page fault U Z @` @ `  @`LB |@ c $D81?  | B<cc ? `  physical addressUZ @` @ `  @`LB | c $D81?R LB | c $D81?dT ^ | B(7cc ? @   ROS performs this transfer (only if miss) *U*Z @` @ `  @` | BYcc ?   virtual addressUZ @` @ `  @`LB | c $D81?0 LB | c $D$?& @A ^  | <\cc ? xP  Xpart of the on-chip memory mgmt unit (MMU) -U-Z @` @ `  @`< !| c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++ 0L0   (    s * ?R0 VM address translation"03fd 3fZ @` @ `  @`1  c $ ?@0PH@___PPT9" gParameters P = 2p = page size (bytes). N = 2n = Virtual address limit M = 2m = Physical address limit a0]d]0 d    ^6Vv  6 Vv6Vc  <_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8  <_ж_ж ?ce *&08dZ @` @ `  @`+  N``81?2{S  virtual page numberdZ @` @ `  @`#  N``81?2[   page offset d Z @` @ `  @`  BΜ`` ? n virtual addressdZ @` @ `  @`,  N(ۜ``81? ;S  physical page numberdZ @` @ `  @`#  N``81? [    page offset d Z @` @ `  @`  B`` ? ./u  physical addressdZ @` @ `  @`RB  s *D81?"W X :    B`` ? ^   0dZ @` @ `  @`  B`` ? N  p 1dZ @` @ `  @`72  Z(``???81?   address translationdZ @` @ `  @`   Bp5`` ? P  pdZ @` @ `  @`  BB`` ? .  m 1dZ @` @ `  @`  BN`` ?`nE n 1dZ @` @ `  @`   Bt[`` ?`E 0dZ @` @ `  @`  B h`` ?`$ E p 1dZ @` @ `  @`   Bt`` ?`^ E pdZ @` @ `  @`RB  s *D81?" RB  s *D81? j v  <삝`` ?pih pPage offset bits don t change as a result of translation9d9Z @` @ `  @`<  c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++. 0L0  =,5,0P+(    s * ?R0  Page tables" 03fd  3fZ @` @ `  @`c  <$_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8  <|_ж_ж ?ce *&08dZ @` @ `  @`X  0???J? " R  s *J?"  X  0???J?  B R  s *J?B  R  s *J? R  s *J?2 R  s *J? RX  0???J?R R  s *J? rR  s *J?r X2  0c?r 7 X2  0c?7X2  0c?R 7 X2  0c? 7 X2  0c?27bX2  0c?7X2  0c?7BX2  0c?7X2  0c?b7X2  0c?7"  B ҝ_ж_ж ?p~  $zMemory resident page table (physical page or disk address) ,>d#Z @` @ `  @`  B,ޝ_ж_ж ?R Y Physical MemorydZ @` @ `  @`8 @2!  2@! Z  s *J?@" Z  s *J?@Z  s *J?@2Z  s *J?@RZ  s *J?@RZ   s *J?@rZ ! s *J?@rRB " s *DJ?@ XB # 0DJ?EPRB $ s *DJ?@l XB % 0DJ? ERB & s *DJ?  @PRB ' s *DJ?`@RB ( s *DJ?&@XB ) 0DJ?My RB * s *DJ?@BRB + s *DJ? @bL , c $ ?y U R2 - s *J? U  LB . c $DJ?S U V LB / c $DJ?S B 0  B0CTE4FQ.UVWJ?  Q.<JFTTTcJ<. 0@    7לq`ל+i 0TU v 1 Bt_ж_ж ? s  jDisk Storage (swap file or regular file system file) 6d6Z @` @ `  @`X 2 0???J? EPX 3 0???J? Ey X 4 0???J?E)8 @2  52@ T 6 c $J?@" T 7 c $J?@"  T 8 c $J?@ B T 9 c $J?@B  T : c $J?@T ; c $J?@2T < c $J?@RT = c $J?@RT > c $J?@rT ? c $J?@r  @ <_ж_ж ?r`  Validd Z @` @ `  @`  A B8_ж_ж ?A 1dZ @` @ `  @`  B BH_ж_ж ?A 1dZ @` @ `  @`  C B)_ж_ж ?A 1dZ @` @ `  @`  D B6_ж_ж ?rA4 1dZ @` @ `  @`  E BTC_ж_ж ?A 1dZ @` @ `  @`  F B P_ж_ж ?" A  1dZ @` @ `  @`  G B\_ж_ж ?B A  1dZ @` @ `  @`  H Bi_ж_ж ? At  0dZ @` @ `  @`  I Bu_ж_ж ?AT  0dZ @` @ `  @`  J BĂ_ж_ж ?RA 0dZ @` @ `  @`R K s *J?! L B_ж_ж ?p Virtual Page NumberdZ @` @ `  @`8  MTB N c $DJ?ZB O s *DJ?< P c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++&' 0L0  H%@% 00$(    s *, ?R0 "Address translation via page table"#03fd# 3fZ @` @ `  @`c  <<_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8  <͞_ж_ж ?ce *&08dZ @` @ `  @` 8 `"X "`XV  Nڞ``81? 4virtual page number (VPN) dZ @` @ `  @`-  N``81?,  page offset d Z @` @ `  @`#  B\`` ? " virtual addressdZ @` @ `  @`X  N``81? l 6physical page number (PPN) dZ @` @ `  @`-   Nh``81? l  page offset d Z @` @ `  @`$   B`` ?` a physical addressdZ @` @ `  @`ZB   s *D81?d    B(`` ? Y  0dZ @` @ `  @`   B !`` ?   p 1dZ @` @ `  @`  B@`` ?   pdZ @` @ `  @`  BM`` ?g  m 1dZ @` @ `  @`  BO`` ?A  n 1dZ @` @ `  @`  Bf`` ?m/ 0dZ @` @ `  @`  Br`` ? p 1dZ @` @ `  @`  Bx`` ? pdZ @` @ `  @`:  N``81?`dBI page table base registerdZ @` @ `  @`Z  s *81?  `  0???81? Z  s *81? , Z  s *81? 4  f2  6ff81? D lZB  s *D81? l | ZB B s *D81? r 6  B`` ?0@   "if valid=0 then page not in memory#d#Z @` @ `  @`  BT`` ?}5  validdZ @` @ `  @`J  B\`` ? "u 6physical page number (PPN) dZ @` @ `  @`TB  c $D81?P ZB   s *D81? H Z ! s *81?, ` " 0???81?, Z # s *81?, , Z $ s *81?4 , Z % s *81?4  ` & 0???81?4  Z ' s *81?4  , Z ( s *81?4 4 TB ) c $D81?p~q f2 * 6ff81?VD~l + Bğ`` ? R w accessdZ @` @ `  @`% , <џ_ж_ж ?P" VPN acts as table indexdZ @` @ `  @`TB -B c $DJ??; TB . c $DJ?AwB~ZB / s *DJ?A~}< 0 c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++S  0L0  um0(    s *h ?R0 Page table operation"03fd 3fZ @` @ `  @`^  c $ ?@0PH@___PPT9" Translation Separate (set of) page table(s) per process VPN forms index into page table (points to a page table entry) B a0]dl0 d l^6Vv  6 Vv6Vc  <_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8  <"_ж_ж ?ce *&08dZ @` @ `  @`L  c $ ? x^  6A ?K <<  c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++  0L0  @{(    s *,< ?R0 Page table operation"03fd 3fZ @` @ `  @`  c $M ?@0\TL___PPT9.& Computing physical address Page Table Entry (PTE) provides info about page if (valid bit = 1) then the page is in memory. Use physical page number (PPN) to construct address if (valid bit = 0) then the page is on disk - page faulta0]d00 d/0d40 d90d0/49b|6Vv  6 Vv6Vc  <xk_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8  <u_ж_ж ?ce *&08dZ @` @ `  @`L  c $ ? x^  6A ?L<  c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++a  0L0  {P(    s *ؑ ?R0 Page table operation"03fd 3fZ @` @ `  @`l  c $ ?@0PH@___PPT9" Checking protection Access rights field indicate allowable access e.g., read-only, read-write, execute-only typically support multiple protection modes Protection violation fault if user doesn t have necessary permissiona0]d.0 dV0dE0 d.VE`<6Vv  6 Vv6Vc  <_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8  <Xɠ_ж_ж ?ce *&08dZ @` @ `  @`L  c $ ? x^  6A ?`<  c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++b 0L0  |` (    s *| ?R0 Multi-level page tables"03fd 3fZ @` @ `  @`8  c $ħ ?@___PPT9nf @rGiven: 4KB (212) page size 32-bit address space 4-byte PTE Problem: Would need a 4 MB page table! 220 *4 bytes Common solution multi-level page tables e.g., 2-level table (P6) Level 1 table: 1024 entries, each of which points to a Level 2 page table. Level 2 table: 1024 entries, each of which points to a pageJa0]d50 d q0]d0 d 0dq0]d20 d0d -     2`<6Vv  6 Vv6Vc  <_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8  <+_ж_ж ?ce *&08dZ @` @ `  @`#  B8`` ?-N  Level 1 Table&0(3f3fZ @` @ `  @`R  s *$?Bg  R  s *$?R  s *$?B R  s *$?    BE`` ? _<  ...$0 3f3fZ @` @ `  @`$  BR`` ?\ Level 2 Tables&0(3f3fZ @` @ `  @`RB  s *D$? RB  s *D$?@ RB  s *D$?  <  c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++ 0L0  p f(    s *o ?R0 Integrating VM and cache"03fd 3fZ @` @ `  @`  c $| ?@0zr___PPT9TL t Most caches  Physically Addressed Accessed by physical addresses Allows multiple processes to have blocks in cache at a time Allows multiple processes to share pages Cache doesn t need to be concerned with protection issues Access rights checked as part of address translation Perform address translation before cache lookup But this could involve a memory access itself (of the PTE) Of course, page table entries can also become cached`0]d#a0]d0 d50d0q0]dq0 d#5  0q`<6Vv  6 Vv6Vc  <_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8  <x_ж_ж ?ce *&08dZ @` @ `  @`8 @ @TB  c $D81?TB  c $D81?TB B c $D81?   B̺cc ?(p# CPUUZ @` @ `  @`'   H``81?\   Trans- lationdZ @` @ `  @`   Hlԣ``81?4   CachedZ @` @ `  @`%   H(``81?   Main Memory d Z @` @ `  @`ZB   s *D81?ZB  s *D81?T , ZB  s *D81? TB B c $D81? TB  c $D81?TB B c $D81?TB  c $D81?ZB B s *D81?TB  c $D81?ZB B s *D81? TB B c $D81? 2 ZB  s *D81?  f2  6f381?|  Bcc ?0PA VAUZ @` @ `  @`  Bcc ?h Py  PAUZ @` @ `  @`  Bcc ?@x missUZ @` @ `  @`  B4cc ?  c hitUZ @` @ `  @`  B$cc ?H` dataUZ @` @ `  @`TB  c $D81?~<  c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++O 0L0  qi)) (    s *B ?R0 "Speeding up translation with a TLB"#03fd# 3fZ @` @ `  @`  c $Y ?@0 @j Translation Lookaside Buffer (TLB) Small hardware cache in MMU Maps virtual page numbers to physical page numbers Contains complete page table entries for small number of pages T&a0]d0 d0 d&^6Vv  6 Vv6Vc  <T_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8  <r_ж_ж ?ce *&08dZ @` @ `  @`j8 _ _TB  c $D81? a TB  c $D81?e f TB B c $D81? g    Bcc ?dX   CPUUZ @` @ `  @`$   H``81?   TLB Lookup d Z @` @ `  @`   H``81?\   CachedZ @` @ `  @`%   H|``81?    Main Memory d Z @` @ `  @`ZB   s *D81?i  ZB  s *D81?  Y  ZB  s *D81?  TB B c $D81?S T TB  c $D81?N MTB B c $D81?U VTB  c $D81?q WZB B s *D81?cs t TB  c $D81?[ ^ZB B s *D81?] ^ TB B c $D81? N Z O ZB  s *D81? R Jf2  6f381?C`  Bcc ?yS   VAUZ @` @ `  @`  BĤcc ? S   PAUZ @` @ `  @`  BѤcc ?D   missUZ @` @ `  @`  BTޤcc ?  }  hitUZ @` @ `  @`  Bcc ? pZ dataUZ @` @ `  @`'  H```81?   Trans- lationdZ @` @ `  @`   Bcc ?   hitUZ @` @ `  @`ZB ! s *D81?; <  " B cc ?  }  missUZ @` @ `  @`TB # c $D81?C D TB $ c $D81?G  ZB % s *D81? ZB &B s *D81? UVZB ' s *D81? TB ( c $D81?  < ) c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++; 0L0  : :cc9(    s *4. ?R0 Address translation with a TLB"03fd 3fZ @` @ `  @`c  <8B_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8  <xN_ж_ж ?ce *&08dZ @` @ `  @`  <@\\\ ?  virtual addressdZ @` @ `  @`-  N`\\81?0  virtual page numberdZ @` @ `  @`%  Nlt\\81?0 |   page offset d Z @` @ `  @`*  N8v\\81?z |P  physical addressdZ @` @ `  @`RB  s *D81?` a u   B\\ ?E n 1dZ @` @ `  @`   B\\ ? E 0dZ @` @ `  @`  B\\ ? E p 1dZ @` @ `  @`   BH\\ ? E pdZ @` @ `  @`R  s *81?l BLB  c $D81?pq  B8\\ ?X D validdZ @` @ `  @`   B ͥ\\ ?Xa  physical page numberdZ @` @ `  @`R  s *81?BR  s *81?,0B  B$ۥ\\ ?Xm tagdZ @` @ `  @`R  s *81?Hl R  s *81?HR  s *81?H,0R  s *81?l R  s *81?R  s *81?,0R  s *81?l bR  s *81?bR  s *81?,0bLB @ c $D81?2vLB  c $D81?01!X2  081?gPR  s * ?TLB ! c $D81?VR " s *81? O # R # s *81?+ O r X $ 0???81?z O R % s *81? O ` R & s *81? O  R ' s *81?h O R ( s *81? # R ) s *81?+ r X * 0???81?z  R + s *81?  R , s *81? ` R - s *81?h  R . s *81? # R / s *81?+ r X 0 0???81?z  R 1 s *81?  R 2 s *81? ` R 3 s *81?h   4 BxHxiHxi ?H   validdZ @` @ `  @` 5 BtHxiHxi ?H ,  tagdZ @` @ `  @` 6 B` HxiHxi ?H  datadZ @` @ `  @`RB 7@ s *D81? b RB 8 s *D81?  9 BHxiHxi ? $ R datadZ @` @ `  @`LB : c $D81? _`RB ; s *D81? de3RB < s *D81?VH W!2 = THxiHxi81?;. =d Z @` @ `  @`LB > c $D81?_`2LB ?@ c $D81?6'a7X2 @ 081? Wj X2 A 081? Zm X2 B 081? z LB C@ c $D81?"aRB D@ s *D81?r E B05`` ?  cache hit d Z @` @ `  @`LB F c $D81? LB G@ c $D81? B LB H c $D81? DER I BD`` ?E Zu  tagdZ @` @ `  @`RB J s *D81? R  K B0O`` ?E    byte offset d Z @` @ `  @`LB L c $D81? LB M c $D81?   N <\`` ?u K 3  indexdZ @` @ `  @`X2 O 081?' R P s * ?$ LB Q c $D81?& RB R s *D81?!8&!2 S TkHxiHxi81? m =d Z @` @ `  @`LB T c $D81?u LB U@ c $D81?  LB V@ c $D81?RB W@ s *D81? X BXw`` ?#u  TLB hitdZ @` @ `  @`RB Y s *D81?pLB Z c $D81?zRB [ s *D81? ` R \ s *c?0`R ] s *c?`   ^ B_ж_ж ?Av TLBdZ @` @ `  @` _ B_ж_ж ? Qr  CachedZ @` @ `  @`  ` <`` ?}$ ."0 3f3fZ @` @ `  @`  a <`` ?=  ."0 3f3fZ @` @ `  @`  b <@`` ?, ."0 3f3fZ @` @ `  @`< c c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++A  0L0  c [  (  ,  s *צ ?R0 2Taken stock  main themes"03fd 3fZ @` @ `  @`  c $ ?@0___PPT9xp Programmer s view Large  flat address space Can allocate large blocks of contiguous addresses Processor  owns machine Has private address space Unaffected by behavior of other processes System view Virtual address space created by mapping to set of pages Need not be contiguous Allocated dynamically Enforce protection during address translation OS manages many processes simultaneously Continually switching among processes Especially when one must wait for resource E.g., disk I/O to handle page faultna0]d0 d20d0 dD0d q0]d90 d[0d)0 dQ0d$0 d2D   9[)Q$  b|6Vv  6 Vv6Vc  <_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8  <!_ж_ж ?ce *&08dZ @` @ `  @`<  c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++F 0L0  5D-DaeC(    s *; ?R0 Simple memory system"03fd 3fZ @` @ `  @`  c $F ?@0PH@___PPT9" Memory is byte addressable Access are to 1-byte words 14-bit virtual addresses, 12-bit physical address Page size = 64 bytes (26) v6a0]d2a0 ]da0 ]dh !\ 6Vv  6 Vv6Vc  < c $$?k u % ? HX[`` ?k  7&0(3f3fZ @` @ `  @`@  t  @ t T A c $$? u % B Ht`` ?  6&0(3f3fZ @` @ `  @`@  t  C t T D c $$? u % E H$`` ?   5&0(3f3fZ @` @ `  @`@  6t  F 6t T G c $$? 7u % H H0`` ? 7  4&0(3f3fZ @` @ `  @`@ 7 it  I7 it T J c $$?7 ju % K H<`` ?7 j  3&0(3f3fZ @` @ `  @`@ j t  Lj t T M c $$?j u % N HH`` ?j   2&0(3f3fZ @` @ `  @`@  t  O t T P c $$? u % Q H`` ?   1&0(3f3fZ @` @ `  @`@  t  R t T S c $$? u % T H¨`` ?   0&0(3f3fZ @` @ `  @`8    U  `B V 0D$? @ A % W H8`` ? 9  VPO$0 3f3fZ @` @ `  @`8  x X x`B Y 0D$? % Z HXɨ`` ? Dy PPO$0 3f3fZ @` @ `  @`8  x [  x`B \ 0D$? % ] H<`` ?  y PPN$0 3f3fZ @` @ `  @`8 9  ^ 9 `B _ 0D$?9; < % ` H`` ?  VPN$0 3f3fZ @` @ `  @`> a B`` ?   ,(Virtual Page Number) "0 3f3fZ @` @ `  @`> b B `` ? 2  ,(Virtual Page Offset) "0 3f3fZ @` @ `  @`@ c B `` ? U .(Physical Page Number) "0 3f3fZ @` @ `  @`B d B+`` ?S[i .(Physical Page Offset) $0(3f3fZ @` @ `  @`< e c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++*K 0L0  LIDIMMH(    s *`` ?  1&8"PdZ @` @ `  @` - <TJ`` ?  0D&8"PdZ @` @ `  @` . <U`` ? `  2D&8"PdZ @` @ `  @` / <a`` ?`   1&8"PdZ @` @ `  @` 0 <@m`` ?@   06&8"PdZ @` @ `  @` 1 <x`` ?    &8"PdZ @` @ `  @` 2 <`` ?  0&8"PdZ @` @ `  @` 3 <,`` ?  0E&8"PdZ @` @ `  @` 4 <Л`` ? `  11&8"PdZ @` @ `  @` 5 <t`` ?`   1&8"PdZ @` @ `  @` 6 <`` ?@ h  07&8"PdZ @` @ `  @` 7 <`` ? h   &8"PdZ @` @ `  @` 8 <`ʬ`` ? h  0&8"PdZ @` @ `  @` 9 <֬`` ? h  0F&8"PdZ @` @ `  @` : <`` ? ` h  0D&8"PdZ @` @ `  @` ; <L`` ?` h  1&8"PdZ @` @ `  @`TB < c $D81?h TB = c $D81?h TB > c $D? ! h TB ? c $D81?  h TB @ c $D81?` a h TB A c $D81?@BCTB B c $D81?@&'TB C c $D81?@  TB D c $D81?@TB E c $D81?@  TB F c $D81?@  TB G c $D81?@  TB H c $D81?@  TB I c $D?@Ah TB J c $D?h TB K c $D?@TB L c $D?@h i < M c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++n{ 0L0  yy,y(    s * ?R0 Simple memory system TLB"03fd 3fZ @` @ `  @`  c $x! ?@0\TL___PPT9.& H$TLB 16 entries 4-way associative a0]d0 d0 d0d0 d`<6Vv  6 Vv6Vc  <9_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8  <PC_ж_ж ?ce *&08dZ @` @ `  @` "8 ]&/  ]&/ *@ ]w& ]w&@ ]w ]wT  c $$?]7&   H\T`` ?]w7 13&0(3f3fZ @` @ `  @`@ w  wT   c $$?7&   Ha`` ?w7 12&0(3f3fZ @` @ `  @`@ w  wT  c $$?7&  Hl`` ?w7 11&0(3f3fZ @` @ `  @`@ w( w(T  c $$?7)&  He`` ?w)7 10&0(3f3fZ @` @ `  @`@ )w[ )w[T  c $$?)7\%  H4`` ?)w\7 9&0(3f3fZ @` @ `  @`@ \w  \w T  c $$?\7 %  H@`` ?\w 7 8&0(3f3fZ @` @ `  @`@  w   w T  c $$? 7 %  HL`` ? w 7 7&0(3f3fZ @` @ `  @`@  w   w T  c $$? 7 %  HX`` ? w 7 6&0(3f3fZ @` @ `  @`@  w'   w' T   c $$? 7( % ! Hd`` ? w( 7 5&0(3f3fZ @` @ `  @`@ ( wZ "( wZT # c $$?( 7[% $ Hpƭ`` ?( w[7 4&0(3f3fZ @` @ `  @`@ [w %[wT & c $$?[7% ' H|ӭ`` ?[w7 3&0(3f3fZ @` @ `  @`@ w (wT ) c $$?7% * H`` ?w7 2&0(3f3fZ @` @ `  @`@ w +wT , c $$?7% - H`` ?w7 1&0(3f3fZ @` @ `  @`@ w& .w&T / c $$?7'% 0 H`` ?w'7 0&0(3f3fZ @` @ `  @`@  \&/  1 \&/ `B 2 0D$? '% 3 H`` ?\]0  VPO$0 3f3fZ @` @ `  @`@ ]W *  4]W * `B 5 0D$?] % 6 H `` ?W+  VPN$0 3f3fZ @` @ `  @`@    7  `B 8 0D$? + ,( 9 H"`` ?   TLBI&0(3f3fZ @` @ `  @`@ ]  :] `B ; 0D$?] ( < H$`` ?l$ TLBT&0(3f3fZ @` @ `  @`Q8  p 0 =p 0 > <P)`` ? p B  Set&8"PdZ @` @ `  @` ? <H`` ?p 7B  Tag&8"PdZ @` @ `  @` @ <S`` ?7p B  PPN&8"PdZ @` @ `  @` A <`_`` ?p MB  Valid&8"PdZ @` @ `  @` B < k`` ?Mp B  Tag&8"PdZ @` @ `  @` C <h`` ?p b B  PPN&8"PdZ @` @ `  @` D <`` ?b p B  Valid&8"PdZ @` @ `  @` E <ԍ`` ? p y B  Tag&8"PdZ @` @ `  @` F <x`` ?y p B  PPN&8"PdZ @` @ `  @` G <`` ?p B  Valid&8"PdZ @` @ `  @` H <`` ?p B  Tag&8"PdZ @` @ `  @` I <d`` ?p B  PPN&8"PdZ @` @ `  @` J <Ȯ`` ?p 0B  Valid&8"PdZ @` @ `  @` K <Ӯ`` ? B   0&8"PdZ @` @ `  @` L <P߮`` ?B 7  03&8"PdZ @` @ `  @` M <`` ?7B    &8"PdZ @` @ `  @` N <`` ?B d  0&8"PdZ @` @ `  @` O <`` ?MB   09&8"PdZ @` @ `  @` P < `` ?B b   0D&8"PdZ @` @ `  @` Q <`` ?b B   1&8"PdZ @` @ `  @` R <4%`` ? B y   00&8"PdZ @` @ `  @` S <0`` ?y B    &8"PdZ @` @ `  @` T <<`` ?B   0&8"PdZ @` @ `  @` U <8H`` ?B   07&8"PdZ @` @ `  @` V <S`` ?B   02&8"PdZ @` @ `  @` W <_`` ?B 0  1&8"PdZ @` @ `  @` X <  > v@ ; ;@ ; ;T  c $$?|<&   H`` ?| 11&0(3f3fZ @` @ `  @`@ ;  ;T   c $$?|<&   Hؓ`` ?| 10&0(3f3fZ @` @ `  @`@  ;   ;T  c $$?| <%  H`` ? | 9&0(3f3fZ @` @ `  @`@  O ;  O ;T  c $$? |P <%  H藱`` ? P | 8&0(3f3fZ @` @ `  @`@ P  ; P  ;T  c $$?P | <%  H`` ?P  | 7&0(3f3fZ @` @ `  @`@   ;   ;T  c $$? | <%  Hű`` ?  | 6&0(3f3fZ @` @ `  @`@  ;  ;T  c $$? |<%  H(ұ`` ? | 5&0(3f3fZ @` @ `  @`@ ; ;T  c $$?|<%  H4߱`` ?| 4&0(3f3fZ @` @ `  @`@ N; N;T   c $$?|O<% ! H@`` ?O| 3&0(3f3fZ @` @ `  @`@ O; "O;T # c $$?O|<% $ H`` ?O| 2&0(3f3fZ @` @ `  @`@ ; %;T & c $$?|<% ' H `` ?| 1&0(3f3fZ @` @ `  @`@ ; (;T ) c $$?|<% * H`` ?| 0&0(3f3fZ @` @ `  @`@  l?  + l? `B , 0D$? % - H!`` ?l)@  PPO$0 3f3fZ @` @ `  @`@ l ?  .l ? `B / 0D$? % 0 HL`` ?f l @  PPN$0 3f3fZ @` @ `  @`@ p 1p`B 2 0D$?p+,& 3 H 0`` ?+\ CO&0(3f3fZ @` @ `  @`@  s 4 s`B 5 0D$? t& 6 H<`` ? CI&0(3f3fZ @` @ `  @`@   7 `B 8 0D$?+ ,& 9 H I`` ?   CT&0(3f3fZ @` @ `  @`8   :  ; <M`` ? .  Idx&8"Pd Z @` @ `  @` < <n`` ? {.  Tag&8"Pd Z @` @ `  @` = <w`` ?{ .  Valid&8"Pd Z @` @ `  @` > <`` ? g.  B0&8"Pd Z @` @ `  @` ? <T`` ?g .  B1&8"Pd Z @` @ `  @` @ <`` ? R .  B2&8"Pd Z @` @ `  @` A <ĥ`` ?R .  B3&8"Pd Z @` @ `  @` B <`` ? > .  Idx&8"Pd Z @` @ `  @` C <Ľ`` ?> .  Tag&8"Pd Z @` @ `  @` D <ɳ`` ? ).  Valid&8"Pd Z @` @ `  @` E <Գ`` ?) .  B0&8"Pd Z @` @ `  @` F <p`` ? .  B1&8"Pd Z @` @ `  @` G <`` ? .  B2&8"Pd Z @` @ `  @` H <`` ? .  B3&8"Pd Z @` @ `  @` I <`` ?.   0&8"Pd Z @` @ `  @` J <`` ?. {  19&8"Pd Z @` @ `  @` K <`` ?{.   1&8"Pd Z @` @ `  @` L <'`` ?. g  99&8"Pd Z @` @ `  @` M <d3`` ?g.   11&8"Pd Z @` @ `  @` N <?`` ?. R  23&8"Pd Z @` @ `  @` O <J`` ?R .  11&8"Pd Z @` @ `  @` P <PV`` ? . >  8&8"Pd Z @` @ `  @` Q <a`` ?> .  24&8"Pd Z @` @ `  @` R <m`` ? . )  1&8"Pd Z @` @ `  @` S <  9&8"Pd Z @` @ `  @` _ <`` ?>  2D&8"Pd Z @` @ `  @` ` <`` ? )  0&8"Pd Z @` @ `  @` a <p`` ?)    &8"Pd Z @` @ `  @` b <t(`` ?    &8"Pd Z @` @ `  @` c < 4`` ?    &8"Pd Z @` @ `  @` d <?`` ?    &8"Pd Z @` @ `  @` e <xK`` ? 0  2&8"Pd Z @` @ `  @` f <$W`` ? {0  1B&8"Pd Z @` @ `  @` g <b`` ?{ 0  1&8"Pd Z @` @ `  @` h <|n`` ? g0  00&8"Pd Z @` @ `  @` i <(z`` ?g 0  02&8"Pd Z @` @ `  @` j <ԅ`` ? R 0  04&8"Pd Z @` @ `  @` k <`` ?R 0  08&8"Pd Z @` @ `  @` l <,`` ? > 0  A&8"Pd Z @` @ `  @` m <ب`` ?> 0  2D&8"Pd Z @` @ `  @` n <`` ? )0  1&8"Pd Z @` @ `  @` o <0`` ?) 0  93&8"Pd Z @` @ `  @` p <˵`` ? 0  15&8"Pd Z @` @ `  @` q <׵`` ? 0  DA&8"Pd Z @` @ `  @` r <4`` ? 0  3B&8"Pd Z @` @ `  @` s <`` ?0   3&8"Pd Z @` @ `  @` t <`` ?0 {  36&8"Pd Z @` @ `  @` u <`` ?{0   0&8"Pd Z @` @ `  @` v <H`` ?0 g   &8"Pd Z @` @ `  @` w <(!`` ?g0    &8"Pd Z @` @ `  @` x <*`` ?0 R   &8"Pd Z @` @ `  @` y <5`` ?R 0   &8"Pd Z @` @ `  @` z <A`` ? 0 >  B&8"Pd Z @` @ `  @` { <M`` ?> 0  0B&8"Pd Z @` @ `  @` | <\Y`` ? 0 )  0&8"Pd Z @` @ `  @` } <e`` ?)0    &8"Pd Z @` @ `  @` ~ <p`` ?0    &8"Pd Z @` @ `  @`  <H|`` ?0    &8"Pd Z @` @ `  @`  <쇶`` ?0    &8"Pd Z @` @ `  @`  <`` ?   4&8"Pd Z @` @ `  @`  <4`` ? {  32&8"Pd Z @` @ `  @`  <ت`` ?{   1&8"Pd Z @` @ `  @`  <|`` ? g  43&8"Pd Z @` @ `  @`  < ¶`` ?g   6D&8"Pd Z @` @ `  @`  <Ͷ`` ? R  8F&8"Pd Z @` @ `  @`  <hٶ`` ?R  09&8"Pd Z @` @ `  @`  < `` ? >  C&8"Pd Z @` @ `  @`  <`` ?>  12&8"Pd Z @` @ `  @`  <T`` ? )  0&8"Pd Z @` @ `  @`  < `` ?)    &8"Pd Z @` @ `  @`  <`` ?    &8"Pd Z @` @ `  @`  < `` ?    &8"Pd Z @` @ `  @`  <l,`` ?    &8"Pd Z @` @ `  @`  <8`` ? ; 5&8"Pd Z @` @ `  @`  <C`` ? {; 0D&8"Pd Z @` @ `  @`  <XO`` ?{ ; 1&8"Pd Z @` @ `  @`  <Z`` ? g; 36&8"Pd Z @` @ `  @`  <f`` ?g ; 72&8"Pd Z @` @ `  @`  <Dr`` ? R ; F0&8"Pd Z @` @ `  @`  <}`` ?R ; 1D&8"Pd Z @` @ `  @`  <`` ? > ; D&8"Pd Z @` @ `  @`  <0`` ?> ; 16&8"Pd Z @` @ `  @`  <Ԡ`` ? ); 1&8"Pd Z @` @ `  @`  <x`` ?) ; 04&8"Pd Z @` @ `  @`  <`` ? ; 96&8"Pd Z @` @ `  @`  <$ķ`` ? ; 34&8"Pd Z @` @ `  @`  <Ϸ`` ? ; 15&8"Pd Z @` @ `  @`  <l۷`` ?; 6&8"Pd Z @` @ `  @`  <(`` ?;{ 31&8"Pd Z @` @ `  @`  <`` ?{; 0&8"Pd Z @` @ `  @`  <p`` ?;g  &8"Pd Z @` @ `  @`  < `` ?g;  &8"Pd Z @` @ `  @`  <`` ?;R   &8"Pd Z @` @ `  @`  <"`` ?R ;   &8"Pd Z @` @ `  @`  <.`` ? ;>  E&8"Pd Z @` @ `  @`  <9`` ?> ;  13&8"Pd Z @` @ `  @`  <\E`` ? ;) 1&8"Pd Z @` @ `  @`  <Q`` ?); 83&8"Pd Z @` @ `  @`  <\`` ?; 77&8"Pd Z @` @ `  @`  <Hh`` ?; 1B&8"Pd Z @` @ `  @`  <s`` ?; D3&8"Pd Z @` @ `  @`  <`` ? 7&8"Pd Z @` @ `  @`  <4`` ?{ 16&8"Pd Z @` @ `  @`  <ؖ`` ?{ 1&8"Pd Z @` @ `  @`  <|`` ?g 11&8"Pd Z @` @ `  @`  < `` ?g C2&8"Pd Z @` @ `  @`  <Ĺ`` ?R  DF&8"Pd Z @` @ `  @`  <hŸ`` ?R   03&8"Pd Z @` @ `  @`  < Ѹ`` ? >  F&8"Pd Z @` @ `  @`  <ܸ`` ?>   14&8"Pd Z @` @ `  @`  <T`` ? ) 0&8"Pd Z @` @ `  @`  <`` ?)  &8"Pd Z @` @ `  @`  <`` ?  &8"Pd Z @` @ `  @`  <<`` ?  &8"Pd Z @` @ `  @`  <`` ?  &8"Pd Z @` @ `  @`TB  c $D81? TB  c $D81?{ |TB  c $D81? TB  c $D81?g hTB  c $D81? TB  c $D81?R S TB  c $D? TB  c $D81?> ? TB  c $D81? TB ¸ c $D81?) *TB ø c $D81? TB ĸ c $D81? TB Ÿ c $D81? TB Ƹ c $D81?. / TB Ǹ c $D81?  TB ȸ c $D81?  TB ɸ c $D81?0 1 TB ʸ c $D81?  TB ˸ c $D81?  TB ̸ c $D81?;<TB ͸ c $D81?TB θ c $D? TB ϸ c $D? TB и c $D?  TB Ѹ c $D?< Ҹ c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++L! 0L0  $JJrrI(  c  <pA_ж_ж ?: AEECS 213 Introduction to Computer Systems Northwestern University8B083d* 3 3Z @` @ `  @`8  <M_ж_ж ?ce *&08dZ @` @ `  @`  s *[ ?K !Address translation problem 10.12""03fd" 3fZ @` @ `  @`d  c $] ?@0|___PPT9^V |Virtual address 0x03a9 VPN ___ TLBI ___ TLBTag ____ TLB Hit? __ Page Fault? __ PPN: ____ Physical address Offset ___ CI___ CT ____ Hit? __ Byte returned: ____ Na0PU`0PU0 d0 dD0 dp0PUq0PU0 d0 d60 dD   6` +Kk +Kk _ "8  *@ 8 8@ 8 8T  c $$?&   HPz`` ?8 13&0(3f3fZ @` @ `  @`@ 8K  8KT   c $$?L&   Ht`` ?8L 12&0(3f3fZ @` @ `  @`@ L8~  L8~T  c $$?L&  H`` ?L8 11&0(3f3fZ @` @ `  @`@ 8 8T  c $$?&  H,`` ?8 10&0(3f3fZ @` @ `  @`@ 8 8T  c $$?%  H8`` ?8 9&0(3f3fZ @` @ `  @`@ 8  8 T  c $$? %  HD˹`` ?8  8&0(3f3fZ @` @ `  @`@  8J   8J T  c $$? K %  HPع`` ? 8K  7&0(3f3fZ @` @ `  @`@ K 8}  K 8} T  c $$?K ~ %  H `` ?K 8~  6&0(3f3fZ @` @ `  @`@ ~ 8  ~ 8 T   c $$?~  % ! H`` ?~ 8  5&0(3f3fZ @` @ `  @`@  8 " 8T # c $$? % $ H`` ? 8 4&0(3f3fZ @` @ `  @`@ 8 %8T & c $$?% ' H `` ?8 3&0(3f3fZ @` @ `  @`@ 8I (8IT ) c $$?J% * H`` ?8J 2&0(3f3fZ @` @ `  @`@ J8| +J8|T , c $$?J}% - HD`` ?J8} 1&0(3f3fZ @` @ `  @`@ }8 .}8T / c $$?}% 0 H3`` ?}8 0&0(3f3fZ @` @ `  @`@ ~  1~ `B 2 0D$?~ xy% 3 HD-`` ?C VPO$0 3f3fZ @` @ `  @`@   4 `B 5 0D$?s t% 6 HL`` ?5 VPN$0 3f3fZ @` @ `  @`@   ^ 7  ^`B 8 0D$?  ( 9 HF`` ? 1 _ TLBI&0(3f3fZ @` @ `  @`@  Q : Q`B ; 0D$? ( < He`` ?R TLBT&0(3f3fZ @` @ `  @`: 8 @ N  =@ N v@ , C  >, C @ ,   ?,  T @ c $$?  & A Hg`` ?,   11&0(3f3fZ @` @ `  @`@ , E  B, E T C c $$? F & D H䀻`` ?, F  10&0(3f3fZ @` @ `  @`@ F, x  EF, x T F c $$?F y % G H`` ?F, y  9&0(3f3fZ @` @ `  @`@ y,  Hy, T I c $$?y % J Hć`` ?y,  8&0(3f3fZ @` @ `  @`@  ,  K , T L c $$? % M H`` ? ,  7&0(3f3fZ @` @ `  @`@  ,   N ,  T O c $$?  % P H`` ? ,   6&0(3f3fZ @` @ `  @`@  , D  Q , D T R c $$? E % S H`` ? , E  5&0(3f3fZ @` @ `  @`@ E , w  TE , w T U c $$?E x % V Hλ`` ?E , x  4&0(3f3fZ @` @ `  @`@ x,   Wx,  T X c $$?x  % Y H ۻ`` ?x,   3&0(3f3fZ @` @ `  @`@ ,   Z,  T [ c $$?  % \ H`` ?,   2&0(3f3fZ @` @ `  @`@ ,   ],  T ^ c $$?  % _ H`` ?,   1&0(3f3fZ @` @ `  @`@ , C  `, C T a c $$? D % b H`` ?, D  0&0(3f3fZ @` @ `  @`@  N  c N `B d 0D$? 7 O8 % e H,`` ?   PPO$0 3f3fZ @` @ `  @`@  .  f . `B g 0D$?7 / 8 % h H `` ? \  PPN$0 3f3fZ @` @ `  @`@ M <  iM < `B j 0D$? = & k H`` ?M   CO&0(3f3fZ @` @ `  @`@  @   l @  `B m 0D$?  & n H06`` ?.@   CI&0(3f3fZ @` @ `  @`@ M   oM  `B p 0D$? & q HP [ @ P [  ?P [ T @ c $$?P \ & A H<`` ?P   11&0(3f3fZ @` @ `  @`@  [  B [ T C c $$? \ & D H`` ?   10&0(3f3fZ @` @ `  @`@  [  E [ T F c $$? \ % G H|`` ?   9&0(3f3fZ @` @ `  @`@   [  H  [ T I c $$?  \ % J H`` ?   8&0(3f3fZ @` @ `  @`@  N [  K N [ T L c $$? O \ % M Hͽ`` ? O  7&0(3f3fZ @` @ `  @`@ O [  NO [ T O c $$?O \ % P Hؽ`` ?O  6&0(3f3fZ @` @ `  @`@  [  Q [ T R c $$? \ % S Hpw`` ?  5&0(3f3fZ @` @ `  @`@  [  T [ T U c $$? \ % V Hҽ`` ?  4&0(3f3fZ @` @ `  @`@  [  W [ T X c $$? \ % Y H`` ?   3&0(3f3fZ @` @ `  @`@  M[  Z M[ T [ c $$? N\ % \ H,`` ? N  2&0(3f3fZ @` @ `  @`@ N [  ]N [ T ^ c $$?N \ % _ H4`` ?N   1&0(3f3fZ @` @ `  @`@  [  ` [ T a c $$? \ % b H%`` ?   0&0(3f3fZ @` @ `  @`@  _  c _ `B d 0D$?  % e HD`` ?R `  PPO$0 3f3fZ @` @ `  @`@ m _  fm _ `B g 0D$?m % h H>`` ?2 `  PPN$0 3f3fZ @` @ `  @`@ <   i<  `B j 0D$?<K L & k HK`` ? (  CO&0(3f3fZ @` @ `  @`@  ?  l ? `B m 0D$? > @? & n HX`` ?   CI&0(3f3fZ @` @ `  @`@ P n  oP n `B p 0D$?PK o L & q H`` ?   CT&0(3f3fZ @` @ `  @`< r c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++# 0L0  r(    s * ?R0  Harsh reality"03fd 3fZ @` @ `  @`+  c $ ?@0___PPT9bZ ?Memory matters Memory is not unbounded It must be allocated and managed Many applications are memory dominated Especially those based on complex, graph algorithms Memory referencing bugs especially pernicious Effects are distant in both time and space Memory performance is not uniform Cache and virtual memory effects can greatly affect program performance Adapting program to characteristics of memory system can lead to major speed improvements'a0]dH0 d40d.q0]d+0 d"q0]d0 dH4.  +"`<6Vv  6 Vv6V<  c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++z $ 0L0    8 (    s * ?R0 Dynamic memory allocation"03fd 3fZ @` @ `  @`K  c $| ?@0___PPT9nf S Explicit vs. implicit memory allocator Explicit: application allocates and frees space E.g., malloc and free in C Implicit: application allocates, but does not free space E.g. garbage collection in Java, ML or Lisp Allocation In both cases the memory allocator provides an abstraction of memory as a set of blocks Doles out free memory blocks to application Will discuss simple explicit memory allocation today.`0]d'a0]d20 d0d90 d,0d q0]d0 d5q0]d'29  , 5`<6Vv  6 Vv6V%  N4ݾ_ж_жc?   Application d Z @` @ `  @`8  T_ж_жfc? @ Dynamic Memory AllocatordZ @` @ `  @`%  N_ж_жc?@`  Heap Memory d Z @` @ `  @`<  c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++a% 0L0  {0(    s * ?R0 Process memory image"03fd 3fZ @` @ `  @`/  N&_ж_жc?` kernel virtual memorydZ @` @ `  @`C  N43_ж_жc?`c )Memory mapped region for shared libraries*d*Z @` @ `  @`X  0???c?``( r  TA_ж_жfc?* `  6run-time heap (via malloc) :dZ @` @ `  @`X  0???c?``  N0H_ж_жc? ` *program text (.text) :dZ @` @ `  @`h  N^_ж_жc? `  2initialized data (.data) :dZ @` @ `  @`j  Nxc_ж_жc? `  4uninitialized data (.bss) :dZ @` @ `  @`RB  s *D?C 8 9 %   Nw_ж_жc?` stackdZ @` @ `  @`RB  s *D?B C RB  s *D?L M ^X  0???c?`   B q_ж_ж ?| 0dZ @` @ `  @`  B_ж_ж ? %espdZ @` @ `  @`RB  s *Dc?fcg*  B`_ж_ж ?p%? memory invisible to user codedZ @` @ `  @`RB  s *D?nB  BP_ж_ж ? D  the  brk ptr8dZ @` @ `  @`RB @ s *Dc? ^R!   < _ж_ж ?`  ]Allocators request additional heap memory from the operating system using the sbrk function. 8^dN Z @` @ `  @`<  c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++ & 0L0    @Z (    s *п ?R0 Malloc package"03fd 3fZ @` @ `  @`  c $ӿ ?@0t___PPT9bZ &*#include <stdlib.h> void *malloc(size_t size) If successful: Returns a pointer to a memory block of at least size bytes, (typically) aligned to 8-byte boundary. If size == 0, returns NULL If unsuccessful: returns NULL (0) and sets errno. void *realloc(void *p, size_t size) Changes size of block p and returns pointer to new block. Contents of new block unchanged up to min of old and new size. void free(void *p) Returns the block pointed at by p to pool of available memory p must come from a previous call to malloc or realloc. /a0]U  0a2  %q0]Uy  q0]U>  7  /03 +#    a #P `<6Vv  6 Vv6V<  c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++' 0L0  Pl(    s *P ?R0 Malloc example"03fd 3fZ @` @ `  @`$  HT_ж_жf81? void foo(int n, int m) { int i, *p; /* allocate a block of n ints */ if ((p = (int *) malloc(n * sizeof(int))) == NULL) { perror("malloc"); exit(0); } for (i=0; i<n; i++) p[i] = i; /* add m bytes to end of p block */ if ((p = (int *) realloc(p, (n+m) * sizeof(int))) == NULL) { perror("realloc"); exit(0); } for (i=n; i < n+m; i++) p[i] = i; /* print new array */ for (i=0; i<n+m; i++) printf("%d\n", p[i]); free(p); /* return p to available memory pool */ } d  Z @` @ `  @`<  c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++() 0L0  &&p\\A&(     s *t> ?R0 Allocation examples"03fd 3fZ @` @ `  @`X  0f ?4X  0f ?4@X  0f ?4@ X  0f ?4 R  s * ?4 R  s * ?4 @ R  s * ?4@ R  s * ?4 R  s * ?4 R  s * ?4 @R  s * ?4@R  s * ?4R  s * ?4R  s * ?4@R  s * ?4@R  s * ?4R  s * ?4*  BdN_ж_ж ?  p1 = malloc(4) dZ @` @ `  @`X  0f ?c#X  0f ?c@#X  0f ?c@ #X  0f ?c #X  03 ?c #X  03 ?c @ #X  03 ?c@ #X  03 ?c #X  03 ?c #R  s * ?c @#R  s * ?c@#R  s * ?c#R  s * ?c#R ! s * ?c@#R " s * ?c@#R # s * ?c#R $ s * ?c#* % Bg_ж_ж ?8  p2 = malloc(5) dZ @` @ `  @`X & 0f ?R X ' 0f ?@R X ( 0f ?@ R X ) 0f ? R X * 03 ? R X + 03 ? @ R X , 03 ?@ R X - 03 ? R X . 03 ? R X / 0f3 ? @R X 0 0f3 ?@R X 1 0f3 ?R X 2 0f3 ?R X 3 0f3 ?@R X 4 0f3 ?@R R 5 s * ?R R 6 s * ?R * 7 B$r_ж_ж ?gO p3 = malloc(6) dZ @` @ `  @`X 8 0f ?  X 9 0f ? S X : 0f ? S X ; 0f ?  R < s * ? R = s * ? S R > s * ? S  R ? s * ?  R @ s * ? X A 0f3 ? S X B 0f3 ? S X C 0f3 ?  X D 0f3 ?  X E 0f3 ? S X F 0f3 ? S R G s * ?  R H s * ?   I B|_ж_ж ? ~  free(p2)  d Z @` @ `  @`X J 0f ? w X K 0f ? w7 X L 0f ? 7 X M 0f ?  X N 0̙3f ? w X O 0̙3f ? w 7 R P s * ? 7 R Q s * ? R R s * ? w X S 0f3 ? w 7 X T 0f3 ? 7 X U 0f3 ?  X V 0f3 ? w X W 0f3 ? w7 X X 0f3 ? 7 R Y s * ?  R Z s * ? w * [ BȖ_ж_ж ?   p4 = malloc(2) dZ @` @ `  @`< \ c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++I * 0L0  k c  (    s * ?R0  Constraints" 03fd  3fZ @` @ `  @`  c $ ?@0___PPT9ld Applications: Can issue arbitrary sequence of allocation and free requests Free requests must correspond to an allocated block Allocators Can t control number or size of allocated blocks Must respond immediately to all allocation requests i.e., can t reorder or buffer requests Must allocate blocks from free memory i.e., can only place allocated blocks in free memory Must align blocks so they satisfy all alignment requirements 8 byte alignment for GNU malloc (libc malloc) on Linux boxes Can only manipulate and modify free memory Can t move the allocated blocks once they are allocated i.e., compaction is not allowedna0]dq0 d q0]de0 d'0d&0 d50d=0 d=0dc0 d 0dq e  '  &5==c `<6Vv  6 Vv6V<  c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++4 + 0L0  V N (    s *T ?R0 Goals of good malloc/free "03fd 3fZ @` @ `  @`  c $ ?@0___PPT9ld vPrimary goals Good time performance for malloc and free Ideally should take constant time (not always possible) Should certainly not take linear time in the number of blocks Good space utilization User allocated structures should be large fraction of the heap. Want to minimize  fragmentation . Some other goals Good locality properties Structures allocated close in time should be close in space  Similar objects should be allocated close in space Robust Can check that free(p1) is on a valid allocated object p1 Can check that memory references are to allocated spacea0]d*0 dw0d0 db0dq0]d0 dq0d0 dr0dwb  q 8`<6Vv  6 Vv6V<  c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++, 0L0  t(    s *L4 ?R0 Performance goals: throughput"03fd 3fZ @` @ `  @`  c $> ?@0___PPT9bZ 1GGiven some sequence of malloc and free requests: R0, R1, ..., Rk, ... , Rn-1 Want to maximize throughput and peak memory utilization. These goals are often conflicting Throughput: Number of completed requests per unit time Example: 5,000 malloc calls and 5,000 free calls in 10 seconds Throughput is 10,000 operations/second.f1a0]d0 d9q0]d"0 d q0]d40 d_0d1     9"   4_`<6Vv  6 Vv6V<  c $޽h ? ̙33ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++ - 0L0  80(  !  s *