ࡱ> F*Nт۳ Y*JFIF`WANG2 CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 C    $.' ",#(7),01444'9=82<.342 i }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?Ѷm:LREQEQE܍L-QMM/L3NQLy5=XMqq' X?|%bVX?|# rgK6 ¢G4'  ͷy!HAx"I9ϙ6kR,cT]cnAJ,1Ymi鷾lFƻcTQ = *HVA\RqIQӬY!/PdJA5o:MfӮ+u~$=kwkV/nF )s4ޚcS.* |WB襎Xuu# ԔQEQEQEQEQERQEQKEQEQEQEQEQE! s[څF@3ɯWNjˢ^L|9M$K^ៀk3ϖzk <9SI 9MvQQ5EQ( s2f&K>ҷTr rEr4_^Z fmX6%2J:״+2#"z6ycOh[jtj?k:"ߺox~4Etrkc9unp?*xE2q(@¹:mkrQy"jo⻟@#mOS^V~iVQ@qL4H/`[$6+3Q4Z&K(f ܼu~$*inֳu5!a? H4(r%4xNt5]>34ף2K]6Pۆmkw:FCoT4gr=+pjxU ?*? 6#^%1׬xR.4EB2Mp+*Q GtR1G,O#c ¾CQ>'%7A|XQkpf=6V%*E|.'PӭnapTs򯡭mm*U=MZxA)@-nI#+ſ 5 3M-sj"X S<'K]l 2E} 7ɝb }* -QEQEQEQEQEQEQEQEQEQEQHzkM+̲(rs_9ǚߍ/v4 8?`{}м/xr R%hw2Xڤvq 'sIK5FH6*? h^'RW!~VV+|-]E1&=mR5E(WcIh/޵? $ 6%ٌD}*Oxz/ecm:r1{׿ibL$J +ʾngC^5TWxݲSRJ'K?4b\۵} {-GCӂ fAWVj]/ڍ66~5|;:3I+:Mg3sonMڑ׌pmoZq\\JҊJul&]!qYfXSpѱ#XHG*9,/_In|^ xs_nFJk< 1i }­u-%!J(((((((((()@Ҽ[/;Lr(9 4sZKoF7}31uy2^: ڕWnaZQ^cxZC5 #{y~hq4n٬|\qҾw+M\S ⾗VWPAdyYzݨom2W+/jZ]QX(uiؽ*иL ̺ cg+0$5~{y Oz'58𽿊=qg"5Ah xxKIJxgX-}_5b:aՁR2=k>3,>p%F>Z|%`4 ָd ƼoZ?!62GAaKM m^Sy>w ѥHc]Er3 7w{pCQO^:ϊ5+^M>/0dtm졊_:UP}kGc4; rTaG"y #gdJ<UmY_Mcźglub@~e5QEQEQEQEQEQEQEQEQEQTyG c+築?Z]+CdI0<ҹ_;|ev;0ْgJc|3`}G+TA'.xͯkHۡDoG9h$<+q;(P9$N/\jVf;N/zNWUC۹\U#+7^O|S tqGnk`Mn$#pZOKi V׊m*(/. 0ֹ/2ҼW($^IPbxcږi>%ɶ&|xᯌ5kUKłMqs^yYV5@ 1׼[Y4rVQ7c!ul)?_TcYۅ%\~:QLwTFf` OJoֱI}M{4<9[i n u5cmj6ڎ!Jx|H|\ RyWDktG2^5 j:,k ,с+t_[.2A4M 6(VE"'EQEQEQEQEQEQEQEQETI.%_ďW$M7Nш$dsĒǩjHir_Iime)HEhqA/jmnOGc/Դ<hM ނo豓yBU5ɏ31oՎfV7 4L:ҴW?&owSђ E|cZtMnTNA_FitW$jq*ʹwVA.J:=NgúLq9,qQ?P)䢂IP=jڥ􂩟9n>2<xӓŚ [fufwI?-AZ r#XڃW7xcKuK۸CMlۑȮc-yŏp#9S{xP?ɯl"F5u'/ v Si^ɵCv7G$;hZY3tg'WUËXıj 2y]k"d=W?~!YRi_x-QEQEQEQEQEQEQEQEV+hi$H2OJĩCw.R3`>|/_T)`*>}'imvGP8W;yhPy o#I]G{k%˺9)5ZvSO^ZIc#]W¦r~lk-;6ifx*e7EWv]wJmcJNNVF@kZ,g&YFI5*F bczou(UUk>9Xh]:\o];I"~|G՜5+১Vu1;ո~ig៼9?_?AQyWj{|j|Fmu˸{U)>xMoxWQ;3?5Vm>4jk<@}E?һⷅu;ՂCq]ݽbKyD=5ltV>{e,S"-mo 5"ws)נs66g+cw>0Ք~[ts./ ߵaש5R2[A!yz54k.xMP\%` #_zr=ih((((((()ŘI=oyt-&l@HJ]l?j xE$U\|qikCPbWMq'Éj]#4NUМ0?Jk6:=7w1ƈ3 7ѧvhaֿ|su=^OX8~wpk>LBVJ5k51x퍬.+on<;Isr"f[>2ibŚt|0+i+6yzyjsJѰSWjռ5OFBmZkTExr.b xVγa+ح-" (UQLu m6K(MxcǖX+CYaxn7ۻRpG;źd*#k;Pռ P4St9WEb^6yv^4jvu2W`: Z(#{Zi=C[xDbPng5-B)μTQv j2Ǵ V|;r{[xKKv?ZmB.-fIbq)Yx $QeB"Ny-*[ǜk&Ծ+kei-?t+Yxke孔A#D k7'|}us:Hϧ^t/hOhf");s׵E4w,0daa^Ucz&a]B >7o<-@[d5}gjvƟ C iEQEQEQEQEQEQEQA\|UoMk\y"%'MFR}p3_Wx3С X֝a][NpvƤ?GS-k)m.Y!qiMgƫ.M*M?ƻ߃VΟ& f2r^8mj;\_؆kHzG_ʽӌgj6]^Lă%׊jF7IvKZC_k5?wr8ׅEp~;e2u'A\1)xOvmq^[ë~ex!;H6yG>64=Bb-?,~( QEQEQEQEQEQEQET,$N)UWcelB}kվ t-uP-{;tƋ[]_HLVk,q^OA9mm2yS]+?R-uk)m/"YaU|  5'KM'=Sǚd6̻nf샽z<e8E.fiRkK~(3p>T,k?|]9B7 ? _K͒X@||konfQOݦm97$}szP !x6UK(sYk C\\n>|Q}lBMGQף 59j4 㷒:v ?Wc]FCQ^y^yOxYG\֦Mrpj# BےU-x1oK"_\wqDeQɌ4RZσ|U%,,pƀҼCڼ/Ֆf ~t.g^<ϳ lo/m|95M( | [_ ev/3LܜoKQk]: 6a <]K"RH=kt5K lPZVƛrq a 8+WŚ LRosGu &hyCjMT^/Zkvicf?vOŲxwB֙7ן5 NwjW_;uJ%vEx-rY3<֨'d3EX: }S!8ߎi~EaԠ>~7\S:W|]ާ}&Ny3e#'"+^0l>6X4Y=֡r  ~'x#ðJv^=/ÏKPcS m+~(x:?jcYlr}x)ܲ }}yaAYCwT UҊ((((((+?SMn/ep…M|}}f>-nvM/^3_M;~1;y[kc:s UI=Myx#Ŗ7(;3;RxŖקMfϛIpzޥkdrSE"vq^[=JӮ6ڽ2AJqO3_^:F XWiVgW7ţ߻ ^img[Ek(EV^Mze!#0 s6UI֋ˤOBӚ]kD3ۈ|C:/DRk !7?fn/dDu x'Ě*3(2޽VWW+o>&_~U/.'7:&n?y]~i^{URh>QTGV-nzQ1yfdGkz(u+s~*_vZ1j#[f;vX:Ljt.|< tq3zwzrּMߋ>(}X-V[DqJG&| r+>Q%eP1jk^:&uKhktrp8VW~ݦs&f((((((+ž;;HMLMs̀\? k {O}>v^mmحTVC7e^Mж:vuj.-2F E<|?eˋ-6dl4,zUi_j`;r {W=sV<o4f6M"9x Az$#FrTJox [٣ҭ+oz֑i}{oy6rYi#{ƛnEBKWm_^7G'oagmuM 89>DvO F+f?d/Ү^T]cP_WWk:**yoa^ QM.IB[۞ M{-EtH֬69Q0S}k%BH-,,dAֻxŚ$w! X5*") ⻋%9{ 3';Ew𭷄? 4c'dҞE|;tgz*Vg%Ք4L35DƓ,;Gn=+%_QU4]f8U#=E'҉C&Q^ڕ9o5 Qx87ľ#ƻ0Ѯam)Z7enດw? ~2k,o-ﬡ*R 6->."VI>(oheT$^?,M;I,Y#A]Ox~oQrbg^ooa!Qs1Vy]h@;5zKíLhp3W@(((((;W^~ Tkݧ5 |: "n_[*(*N:dSrsw a|z0kzkP)+wc j/kiu,Mz~>$&pAjτ~Q~Ɉ8=kXeX~j> oI$:5Ǽ^)vi5Myxwz&c]-n[|n6{\/&aBB=Hz$Y۴Hkbz X Yz'~G3$2s[KGtE+s=V#EyKu$W"P$ՏbToTsФ ߻aSGҵQel?rLӴ֯Nb? 鱎_Nv%_4ؚ- t\*1f{!{?LXՏirkǩ&vgZ4>yMr@C]Ay4Z>ﬥVGySW"w0Ĩ6[hk1dV81!QߏtZ_5/j knLH-8"^W%e#K(фF}%Cj񯆡O,Am-w \?Kg4\g"HhڂF"cĖߠndӝ*_ ƕzy|358q8WXZKs1csjfk1Z˾\wſsw4qn<Wďː]4((((((ȯ~<{XV˒]R꒡ܷԵ-A46_ #ֲ-o1@Uw n~{Qǵ~=-<3b |ώ벽7&!Tu5kWpxn.$A+حn`gD6 "J,(WzbG?`Yrl)e2Mx_O{ wO by^XxCL /v5q+[98Y~ /GN q]ei/)*?xu';xl攅 I^T|7 D1f}9 "{q^Vw,-C&@$WTkAhV׿h7Q>S3}\qkKm:[$1.I'mͦY6UP*;Wf&0Vms[Iӄs;Ivt71=OL,ed0 SE⏴[B~A蠚'Stom\4R`G8{z֯cv0tP`ڇ CF9ci յQjr#$g> ^&ݶ*A?<9;SlOWZ:k |'2c`2]<][:"NNϯJF>'jwTbdcJZ }+w^~H"81Iף\4|5{Tm#_UxXMw}X+((((({tvS9ƌğa_2Ɠ6Kg_^xgLO21!u gqt.Akw|7Ϧ]m/<,::g~h4&m%aҺ~(xk"[ubGL}+o̺,&7OjZZ//@=)9תM㒅8Y/qs\<xɺPa$AcO5$o[hsK/$.z2[r|yZ~+x]>)j7ggAx" i+5n$#VW0oåj*lH77/^ Ct9t_|Ga#}?k?ɑ_Z]#DAw+WVZ%׊_ 0zQ⻏j;TcҺxW^*Ok?-Nr[WuԺ圂n<;x#7EƯoho4Oפ͢xFfc$W1O~$6icbGZkZƐuy9*IT o h;+!\>2hZeÍ0q,uO4%hB:W7xO[8O/8HsM?H!FyW>> o>O 9A^Z0Ad\V Iq3Xx^cpV~:f/[rZωP}Α>Y+!c!|Wզ6C=@)8Eb{Ӊ:lrzҮ~am3!Ҋ(((((;W SV]#n_<%=) uvG?6@h~+>WYSOgWxh63i,:\3_AVKaZ"E? ڃ:bKO 2^[gHm`|s^p4_|D?M?MȀFp\d^ii:jZķ ~3\Kf|c]p‰EgP3X$ sN,jpsڼᖉ?YRG]7Voi887z.j=SF"⧃naDwVH|gz~G]qOV.{MgVY Zb8'ں1rV&uuv>bȥȮG)>κ 'A_?WIc\+a׺!k3-.Ogm/ XG,5tWK4p^GTP9,p+>!i_c_<}ki#TϨ!=sR J,>&h h(O#41*i\j|#h|,{)7fH¬CK<w5~2xj-gmoRO_ŤwSr c"/x'9 :g-OW{cvZb%B+_Km+~Cgۏ]d-!a¾9wQ| n5 yzd5}?zYMRg^pȬ"4Ka!w}kh&}-@9eɮុ/eLA?Ȯƚ%V"ϭpƋw:/%-u h֟'R=4j~ĖX[lW :j7V0_3>3Z.~!x Z[wH98ֽ+V#4 s^;*]D,:׹+Fu4\<-xՉ+5!NJJKwbo-4F܋z{ױk"/6R(_j._[C 2Fps\2ַ$<s槬$ 7@.HX5T[լfᢶm Wfuow-lFckc$sϪ1777kM͌m9]L^H@XmUyo|cOMw kgivpo[x\5Xƪ}gO e{-]lF_h}(=+E}i|C! 9gְu?M񞋪rZZkmb:|$~5ƟHGae(J|Cڴq[Of?o/.bU x{u+ ϮYC= ƣ<'}eiMRqXc3V]Fw[|qsZ~jFDxf_ƻQR{ K]o$.]hlC_ײl*0BY:|?VCd2|J%w2 Cl/SPXDW`;א3;/W&;RW.ZҊ(#}3vczWkVڷkvϦ6d3Wg4, }*ޟ=LU[m6qܦMjX]B"AYAk;kUD=@}寏:x*OI$׭|&&*(((((V <&,_s('}[@ +ɭjGNh.%&GpHֶ<j\w:%ܗ+k)sI{Q7Z߇NםKzgXXm1)obkpX ]7Qeq `oEݤcuxiö pť0%#j4 ~`n-bF4 ?SL46GEe#FA?Ox]ktGF03^-'$=X6*Ww4:\N]q?V!Q}*iffvZFWڹ/Bκ (#LAwn"ZRzW|OHH FT)ָ C㟉/1٪[„?G?B@j(]T8;Nq^&7ާ'^0á{X״]?R1 gV gmD\&~aڕp}___񭶏ak s-ܻ0thpZd=xIs^EQEQEQEQEQT'1 6`x|ů_i٨K8#QW|{eMJb@In;] ;/ʚ?UKIMJطt@J#Xy5@kx#1so@!A5'孚H(,~_ c }*x>ɩ]%ˮ'r? ZytZOl[Kp~ +_o)-ZR.bŝٷq9>"i{!i{\cQې> Ȭhb!\v<W"tmƖ'k'V{--Լ~VKn/n)cR:&p-杇ʋް'sɫf6ZW{yLTqNԾ%\i#%u/ @ ^c,Xy91S+]F!Zf Y*-IA|u ݵw pqZGXլ@p=EYv_Gko9!PxSҼKkxLK8dY𷇾xqVC{kup:!'v‚8KdU* q?‘HPژ~*xETy{"֎m+ReKApP9t;1ιoN:4vc&s9+L-gW]B8ܟ¼Tx|%!oN-kʷfb[yzcpuO]Y^Ǧ&-\O+~:Ϣ%4c<r8p5;d {eku^>+)Ͻm?oJCs*ך(}kmѫzkh}Nq9ʻ5H^EQEQEQEQEQYz>5} /t{bYg k=Yi UpdE|}Fhn]O`븏_ᶳ]cJ!km5ŶE9#\U*+ {-4WxOZf]>_¼ ߎ:̬ ~D׼y)kd1z5?4Iav֤Vgw{{Zܐ; ʒjNw-q`p \gl#݆FbA OR?:jI{-A~&k5[y#0u,$cH]mVjpN%aj};z[!x;~ė c03of1+(՗崻no5IE61Ut[MSM2I ]^0*Oxm`uijey4KN:H85ھ}iq{B_'yŚ ]>w_QBkY.KAk<()ҡt,+h-l0e@**c6x:C'4W '>0k}&5KZWg[klcm#ci'EtT(?j|5X|rndB- T]ڶZl"P8~n%wd8x/tM2OJJt#T hœ85l^'>it?Q^X*HG<:'Yg"^]}XGѣm='+OuI5G@9et}+>>6k5Ze,OWxƱ<,pRMq%cSr׾1#1+׮bZmD)ɵWX7𯞙wcZSOM,H0H@NL1JFU8k ҷAں}n1LH5(Q+!Tui8Ȳ?V#vB3A1sJ|9g^^E}]׃|l֯t/iW#>Kḳ~_ t?-pan᫧mATsَ+zZn/|Ă㬨< 9qWoP?#Hʺ#)dW#xC՝/٧<`;Nk ìFվn~چ{6I\#~nT~/q7! _X4)"m$y4mNKh$91 ?/ _}yMwQw[y3tV_P8 :(((((u-ꎦF9nzA}t*U.=B-Ṿ* 7FӴ87}jZa|15xW`sWA=cgDg^iiS-ĐD+~}Y5Mnw8xNs=›:PxWKi=F'`ɭU`2 xg[7 pg_ֽcږ}iQ;W|⼔ F1sk *0ʀ7Z{M99)H KVV+"I\b?X/m[ܸHFf'\?<˫iM=:_.+MzaF1ʳ-nY?UZ MxŶ!Vo%U:4O |,V15C gGT|* 4'V_ \nfZe5dQ:^݁ƹ$w.}JUXC+jvOAζ#TsFK;KƔȏ^޼㴅C7//zސNfq"xHxiT3u=EuY[EooQTp*;Ra}/j?Ez;sVG⟿[?}EQEQEQEQEQU̲OFKׯ4]C +P oFnjkbTMWN5s~5=P,?wy&~'1ku} 5Qx1_v~ ߘlKk wFxsI#dL?y׈>I 跗8W++Y 0A'-vӯ [57@e ?VӴ:5=svv[¹\o7Qz \U?o5EC o8n Hs^\ l69o!-CY./[tyKimMqg>HSMsTPӬDKҘ=ƩikVEp/=i$ Ecs.~&w;ִ5[]^%ôI_硫nZ?!!(;dk#z4Bg=t񖣯_^LdXPFW :oH״?GՃNneHӖ栓UѴ3@l kޡqx#IA<5yiEDY#w~w |c,;NCDV/>u` =㵌 $Oeow@:|?Gf{M+kAE ºG!v6?_^ 1PҼg/|=umS^w70^jQGjܼ8zV=īH2YOvq뫲IfYbnC)ȫhɶåEnZYx((((()2z/d*s -I9y*_jMzFZ(Z¾Ծ$K6^J9#$~ k>H\<%IJ6y?{WvvV:[İkZ9h^g2Ӄ`G^ WosT_/G? u/daH;|Q Ed:ɎGhզGyg(x~^Ƽ㝳K 5^Ch67L"gVC`z8-kz_PH@Mx>9^,?/zy6[ꗑ M&q־q2.;D_ݏmf˦<3[Ն8W'eˢk:4MxҴz](7kh wQgt+m8EvatCJORj|2lpXJ;kᯇZ+#37Ax~NV2uh汴_6m^]K}7):jv7GeҐ ~Oҍ T/9Kg}|/=}b|;ahiS)rƼ~{K2/kVZ|k׭kU!N2Pvc.+OWlb^lVJ#}F[Kּ?OoexgF H$WSZ|SM9eSM3Ym{ J%Mѣ_n?_XLӦ-4}2i H >Cފ~\zF]Z ['^@j&ut# @7t=GX2ʻw?ZuDŽ|{uᕙ?6;C|C^x=Cfa,s^EQEQEQEQEQA_$k6^?|af]5 uOv9tOš 4'5|7f*(&t=r87~,JM.n$epp^k 3oks/2R λ\B[ysA)OQֺ?u1TާXc90=L1Pƣy '̈Bi~ eaxv֬Eq,j)Wx#$;4[͍ # ٹ W9S]7m6fHb^y-Ċ3JkǚΦZ\;|ipG] wjz{Wu)ΈARď]:g@R1q^iJ"1ҩg ;Dd690`z 8|E!Tui8Ȳ KI)qHG/Z~R$HH ǿ5zu4s\"Wz>'i>" mrMFolנRQX^'F.3+>\.+; ⦭seᆲ25S\FSVʹ6$.#DuPda$8"o!xNg}*ki,@Xбx{v~ kE?t=wQoᑴ@mgaOXtI{hMy ] B66d%jNYb2I^W^oWkezq^?|> !9XF07~QEQEQEQEQE|C5]?Pa?t'Չ9xdHbϴ, bsMkUY ႀݓ] 2YCWKa *#nâvOQXZ74;:fomkv,W AٲZ0knb͞ED25ZVw kjЬC]F23Uiz֭}b&kч!y׫>wt,˂پ|_cPl=9fҬ y ~_ʴx8bDOEyUTdڼK?^ yY&^7Ω~\s+)RxkźՍIF,j$;H cAxԧTFy"GR`7/ݶehMK|#7/*kAOӭ#Pz™D;#!5=?tʩ*;tPp7 OPsjKVp+>4jS >mqn7_+oVn(^Upd#ǂ3@yl)"Xھ2麲yEp?Ǻ^$w H-9+$cwجjP Pyeş=Zu#3G_K֗2ZȞa3<I|w=`Fz~yo3i [AݹwwFi5':X6$8FA xMg y⻽7K,$*cc? [?|헐uj&`V<"?|Kruݹ%뭃}}!c> Q٢(((((& kgx^w W[O`ͅN=}9ڠwyQn9l f{maiR4fc+̼CD{{{N~7n:fv'N_N,Y,W{QҼ#4 _zg`bpֽ?k?\2"주̄1^x[(/>d⭷/yږW|NԡlM^:]x.'< c X}narq]G_ IJ7e 2خN{BD$^C]_<A-pw4-֮9*zfVMEE^ (> yV>*#HبX0yeJ~ʠ7-ԛm{Pk-ɾz ԑRIX4ڌo4gL&'*sqo@Mb8k!:/Dnu"H*58K6Lc"X j4K?g~l]bڬM] mHͥۂɽQQaSK/jh-׬FR2j6qrcKg=kƾ^*NE״wO<=+l>i:5yIخ_he bD*/#יW1Ck <70s-oC}HͻnH UMka.+>:xYXihiWEᏎaVD_O4Mn :2g` oAKQ|q J>[Z{;ۦٱ)QEQEQEQEQEL: B/#M͜1\yo?¾͂d9ǥxſZxWG/vɰ< M-b7!MzlVV;x@r)ml>hf`*x}Zm?P'BżsޛOÃDy =qx¿Bok2ko--[<lEmI/EQRM,pHʨ$9&U5YGFk?FQyeq( 86(_0ޕxCZ悗{7SW޼_%-ofK .y5^,A ۆG+dI|RGgI;mLK,jLI +2V༷`J_D-LW(q\y#~dE?5<32ohu^únyj7;Z-[Ð?;6~vjO~1\V}Zus%,sj/+zW]x.ħZOHb ʨo/B Hq^q| 4^Nqʦ fE>"+y+)k>24[cfNޣҽxQ+>cZlm~Gq4qs+I+nZ((((()0kω<*lfewvW$j#qJ xO"=W⎹^|k) qs^E&xL?[xy2L֯g4'GPU(O^6Rnzku^GҸOn,$=^uK{[ 5&?>0Lӭ~+g|QMcp,#cjo> o A^#$WRr+uռcx>^M= { <9]7b pB>f>qcW7Kcה.Tާ'Zo~ E$ ˌhI}8UπlGjٟYw0^/^GA bebF\}?W<\m~>d?6zZxn%Z/:>,C9S\7Q&t9=z W|PvI[~UTh]_;CJ_R٘rSXxvkHn_b;^[u 4,̮ x&f%t.yZVo^[8hPC#Hl:@ׅmmvbWPs]x#RъLJ{h.P$Pk| 㛽n("p? Ofu_Ih]) 'q:m9J((((((xOlӘ3FC>x8+ȴwyM렂Km? hO4粑gk 鷚Ov Xu&cy_ I׸\^Z~6*{O8܊HSGZƩ[=֛pۧN}EUimt<g\|ALjk}>& WA vQT@Ҧ#">kA0s\<{s^ t2|~+L!<2659#it$մ>!x[4m=sGQ;{xG¨y]7v3]H ]<73mb.Ҝu5EiX=uF𽍒.ݑ ܊:~l um9/K"2BTÊP3Qqd5>/c.Tvt5nM[×9Y!rUM{5E}+7k7ˣ˟n碷{Ҳ-*T1\*WW7xZ[ɎF:Wl^)e ,R2@A\ΡGREc+):<+/Bk,7vAJXֶ~7bX$l~WꚔF=˅$,rk<c?}q[&Ȅ7JSW6Ǧ[sll MFfI#;WJk6\ Z6]#}\׊&.y~d+{ uqߌ}GivֈXc VQEQEQEQEQEPzW;5 X:/+WZq1%^m3_cj:|d O|O3f9;z_xJ-o퓄9${> zd>(i$;brGZ>giYıƒIu}mcN;Wsc& ex믇^=VrQd^ݤ֙ UV쌛yc?ʬ)R0x,|ahTCz1̽s^sx\{ 1%;b9}kb״}:Y%LVt2 *-^,{k_#nN:Wzcx5umlʷwUJ=K:8A {XPxFeж\qu{^/6"]?i_z%+mz|:T`b8ѝ?uaV%KC|dpNkH#hC Ic]{ęT~Bׯ* 8S>(^:3\2 x~ |27:hjv]i+G$T8+ςEΖK%?ѼoO5Ő9|muGKm`}IT1NEղ1^kFSaN7_@ O߉ɥCW1k֦BRa2;Ҁ t((((()|Ÿ$т=|W|A<>t{5aXf[;UmooP51\?>!Cn:qs^ox%:05 bx@>t$t> /~x+; 9;(xgM%j"c_=,znrp>xO2ގ$f7zteXȘWSA:|v;cƶ3\?iZ}3^ڼM<7ƕ+;#>v:$܏{V4]HxpE]gtp*0>W=O]͎"CMyƯ/MtptȯG_Í/‘1qxF^w9AKER1WKgMkKWߨ܍"T*M6ٵUwj76[תqҗ`T34r"2+[sCU,YrC'BkuxcO쯶lE {/ 1H?[ԍK1>?qOYZO.!gῇÞ)CqMvQEQEQEQEQEQE|L70$y㜊 ^/g܊ys)}yeyWhP5JdH|[^OS /y\] +Wm<7e>m#K';N3y[v(j+1+.Z'."m9q4.Fes\ÏOouD^ I(p})C( W⟅ݥ}%c$?K}FNN+WK,-IMg( wx:*jz+ⲷhFk G+c^ rCklుa#F pcڗ42`GRxŶ^dUQ5ugU"H GYzvcOq V;KAY?k"l;^-,>)~/Oo+UUT` ?0Ўm 7\6*_|&VI= WJ1ҝEQEQEQEQEQEQE5*As_,dFڅx;FKoq^H*y_>|Ix/?oA'{|9\P𪂀k;N43dص~ϺaCԝ~y'Wꚵf7 H9,kt?C':-ܘ,A*=s^oq)4.7PGz󯈿VYxߊ4?Pq E: 񦕪&y߀v u(Ԁ3ßĒh"_&4R ^W FG=iJ =+U𾏭!}5j7u!զ~Y"m#ēEflLtjTҾ/.j%k&_֝_5/)µ>i*VMJNGuOp^&DB;jiMJLbº;_@~35yn}iͽ1oV6k.x%}k<9ͤhZM3*[ [?z[<.,Ƽz+C2鱶b#Z=œ2 > ~<-O4&y74>`lཷKyVHd25x:w"+veITa]T}4ifKnmީAܾBĚŚό|[$2ģ5Ï -onT y[k(((((((ҹOfxvDaRbltjVPOnh :dfοoM PpC3i۬c ؊ƨ 㟴Ӂ;8R*| r}쩹 ,xt xj^&Kk xKº,)hl>Z:Զ;hQ.^Gj+ 6hڎ>ϪE#/4CpbLf%7WF A=+|y;Bkk YU1mF㻵k4I!u"AxQЭIR2qW>|A SXp4ZF>o<ѵl#nrXhCKMN1FGQ(ڎFOݱYZϋI҈\f<[X Ge$vVcJiu=sƞ#[FK=*7,J~fi=>_د3O׼OizYeaL0{΂PIF\l`mҸoEӼ%fM|G מxkߏu/[=ۢnvXGoo4UQwTFa7{o?yi+ >Ycq |WφӅ?,L3Ǩ⺻OXK [v=&//Gq /[.,)b(,l4Rvڳ/cc5e&Jj^َ/ֺ?4zZvIP?|UYE·G&㪹zJՎ`|)Y;$r=EbxEYk4xj5kbڗb[FŋN+WZNEu4riv8B ziwt]:]Z1Z|-k-E[?xHEq^ݵCCsq -,*F,q?|ZyNX1FB7d_&M&-{qq"U?QH@$l4h IDSn\+\6l* k~,(,"5|צ[gCQWpGA_0}U) }k I>".l/Tc;=+ڻW -,"snJ-QEi6Zū[0Wk _6)+Wß]7Ķct)r0 S!IgXd`j(hʞbTM^n!cf,7dj%\e.Z'`R1>][ԏ6rx5ү7 O<1YOq"+k!w"["(9=Mz_è5I1n7_#FWogkuq|jO NծSCb*_4{cY\|GY|ɷֻmk4N8hZvA%Q2H_|Nм4\]tX993e+&ߌ/|>)ngIuS8v t(K2k^P^y?ɱ-hv\N0+ۆ6Yޱk]ȫ`OZ+>%@]џd1¾W4𾊗WHGz`Җ(((((((J|S_X]v>9S_'ZV?4/nxLq([Y[޽jZ(3Epk/_Dq*5yρ|iu纶>Kp+OGַ|rdہ}'Ś.cR 4[kyABۢcՂWDӓQ{i\a&ܖЬj͸W8v+B3Q-gr[@FXcPԬ#/ws*W`+2hN,zd~> ;X_MӛxcHzB^ 1A*"Q*P-dQEZ$ #V'|1aI G.G$ֹFs1=fNVRl(}k9-uXs~((((((()O-`9W'A๷~Wa_Ox6~2ҖU%%<]#(UZXU@',EC'Y(x[G"x-[pk_Ф~bB fŧo _0F]H>F4RSmֶM>Tw`9}ϊx9o'`lZ|%+`[iֺ**P>(]ZY-۪@-_&x]ֵ }tI_ |DZ¸ˮ{קTnbAh2ǁ_<|Tɣ貕^%O/X x/oQӐ嘏}+ >L!Q@QEQEQEQEQEQEQEQEQE!+;"9}oèF27{[[/-aoa_Exem`TN7}+҇AKHyx3Kִ{á+&>l1߅fGf9o0pGTy /zt[Wyr -<+V,*<I? iX|t(=*դ7qIꧡ+Ŀ5}KKm(g +# H aT 7 A(d;xY̋$%1ι^y;Ld ' ^\B"l2=qEQQIrEǰZ,+x"pP3}+KX@6ƁGSH8ERMxz׶ZeshP:R(x6N@!W|(oNuWrDC{WјA5_W?'gBT̥C޻/|EC4 lTQG5?yncVSE gŽsIlmInWx͗.E_f=5)  `:~5reܟE$t ( TQETM,,qVc+ǼwK2X.n@~Umwq#{?;Y#!+֕* ?QEQEQEQEQEQEQEQEQEQER`TSC4Rtad|Ԍ*nycx#V$'F]gE%i|:ne[W1 [5KEW^ֿ vQ$_/7.$|ڽss^2xk×Z?: 5b牙RcNъQKᆭHZXW׾x7^_fSd_{դ K$mXdi:zp<Ҿvau~9V`ׯ,2A#}XHS&kĶ2Ga]Gmj>(EsdEe w(4 )$+gĽвp3HpFNO֭x/6YR6',9j'Ҽ+nX[(`>iHqREQEQEQEQEQEQEQEQEQEQER0x wW^PI>9x_4z+zG s^6E=ū#s{m)oBc~>_tf%)ʶ◵QY!+) O^νn#/`8'Ʃy:5ɂ|ֽy2}G?fh[yQ}=v[u".2ɞ^{~hGu}J((T Q*J((((((((((((R0kt?}f#0>( {h^CϋzH5'#<[QR^g+м3rme>: \`{S$8q\εh?ڵ8wk̵-ѥzIҼ\oV[U_99Ğ%rڼ1&Y<+KH.5/˅i(5p6,QT`U8((((((((((((1H@KEHW֑N̼כFO%<:f\)}-FqH|57KFQEQEQEQEQEQEQEQEQEQEQEQEQEQE*JZC0?L%|%K9j5?NiD}뗿6Pʽ;uw6_/Ys=up1U-86zgя?Y<5/Ɣh,'gԿ?zz\WK?[6Wr}pKښN0u\N_KHYs]$qh4U_E&((((((((((((((((QE`S4QO"ȣȋy'*LQ(((((((((((((((((((((((((((((Pc( / 0DArial Newmantt0 0"DTahoma Newmantt0 0" DTimes New Romantt0 00DWingdingsRomantt0 0@DVerdanasRomantt0 0"PDCourier Newmantt0 01`DSymbol Newmantt0 0 C0.  @n?" dd@  @@``  :-2   () *  - <  :  B:+=;d5"M"#%&'()*+,-./012345678B&CD/X$R$Nт۳ Y*2 AA1? 3fff@338w ʚ;y5ʚ;g4dddd} 0@ppp@ <4dddd@k 0t0 <4BdBd@l 0tg4<d<d 0p p 0___PPT10 ___PPT9unnIt>"ՌPNG  IHDR +tsRGB PLTEfffm cmPPJCmp0712 7tRNS@fIDATWc`  SP1H $XLIENDB`\N^(? -O  =}F[ DeadlocksResources & deadlocks The ostrich algorithm Deadlock detection and recovery Deadlock avoidance Deadlock prevention Other issues: System modelSystem  a collection of resources to be shared among a set of processes Resources partitioned in types, each with multiple instances (printers, files, memory,& ) Resources can be Preemptable - can be taken away from process w/o ill effects e.g. memory Nonpreemptable - the process will fail if taken away e.g. CD recorder A request for resource type R can be satisfied by any instance of the type Z=Z Z5ZZLZ= 5 L, >\ System modelA process must request a resource before using it & release it after once done (open/close, malloc/free, & ) Sequence of events to use a resource request it  if not granted then block or return error down(semaphore) use it release it up(semaphore) Suppose Process A holds resource R & requests S Process B holds resources S and requests R A & B are now blocked7    iP*7     i>\f s]Introduction to deadlocks A  cute example  When two trains approach each other at a crossing, both shall come to a full stop and neither shall start up until the other has gone. An actual law passed by the Kansas legislature & Formal definition A set of processes is deadlocked if each process in the set is waiting for an event that only another process in the set can cause None of the processes can & run release resources be awakened Assumptions Processes are single threaded There are no interrupts possible to wake up a blocked processZZZZZ"Z Z\Z1  " \^Conditions for deadlockMutual exclusion - Each resource assigned to 1 process or available Hold and wait - A process holding resources can request others No preemption - Previously granted resources cannot forcibly be taken away Circular wait  A circular chain of 2+ processes, each waiting for resource held by next one All conditions must hold for a deadlock to occur. Each condition is associated with a policy the system can or not have; break one condition ! no deadlockL,n+ b_Deadlock modelingModeled with directed graphs process B is requesting/waiting for resource S resource R assigned to process A process C & D in deadlock over resources T & U You can generalize it to multiple resource instances per class:??{ Basic Facts|If graph contains no cycles no deadlock. If graph contains a cycle if only one instance per resource type, then deadlock. if several instances per resource type, possibility of deadlock.2Gx+x`Deadlock modelingaDealing with deadlocksPossible strategies Ignore the problem altogether  ostrich  algorithm Detection and recovery  do not stop it, let it happen, detect it and recover from it Dynamic avoidance - careful resource allocation Prevention - negating one of the four necessary conditions bThe ostrich algorithm`Pretend there is no problem Reasonable if deadlocks occur very rarely cost of prevention is high UNIX s & Windows approach A clear trade off between convenience correctnessN+86+86 cHDeadlock detection  single instance#How, When & What then Simplest case.$ c 1.L ! empty & unmark arcs 2.For each node N 2.1.Add N to L & check if N in L twice, if so deadlock; exit 2.2.Pick one arc at random, mark it & follow it to next current node 3.At end, if no arc no deadlock Arcs: A!S, A!R, B!T, C!S D!S, D!T, E!V, E!T F!S, F!W, G!V, G!V L:[R], L:[R,A], L:[R,A,S] L:[B], L:[B,T], L:[B,T,E], & 6:8ccc   bb  $b$(( ,b,004b488 |h | c c k c c Cc k c k Ac   h$$jDeadlock preventionAvoidance is pretty hard or impossible Can we break one of the condition? Mutual exclusion Hold & wait No preemption Not a viable option How can you preempt a printer? Circular waitNJ+3J+3kAttacking mutual exclusionBSome devices can be spooled (printer) Only the printer daemon uses printer resource Thus deadlock for printer eliminated But not all devices can be spooled  process table? Principle: Assigning resource only when absolutely necessary Reduce number of processes that may claim the resource l&ZSZ?ZiZZ&S?i lAttacking hold & waitProcesses request all resources at start (wait) Process never has to wait for what it needs But May not know required resources at start It ties up resources others could be using Variation (hold) Process must release all resources to request a new onev0,T80,T 8mAttacking circular wait^Impose total order on resources Processes request resources in order If all processes follow order, no circular wait occurs Deadlock if i ! A ! j & j ! B ! i If i < j then A ! j & Process cannot request resource lower than what it s holding Advantage - Simple Disadvantage - Arbitrary ordering |ZAZrZZ|b b bb  $b$((t((nRelated issuesHTwo-phase locking  gather all locks, work & free all If you cannot get all, drop all you have and start again Non-resource deadlocks Each is waiting for the other to do some task Can happen with semaphores Starvation Algorithm to allocate a resource SJF  consider allocation of a printer Great for multiple short jobs in a system May cause long job to be postponed indefinitely even though not blocked Solution: FIFO 69I IZ69I   IZ  Next time & We have discussed sharing CPU to improve utilization and turnaround time For that to happen we also need to share memory We ll start with memory organization and basic management techniques (e.g. paging) Before moving to memory virtualization & /          ; _   0` .T3f` T3f3f` 999MMM` lff3f3޲` eoHff33Ҷ` ff!` T3f3fffq` T3f3fff[>?" dd@ ?nPd@ d " @ ` n?" dd@   @@``PR   @ ` `p>>  UM ,(  , , s * "`0  T Click to edit Master title style! ! , c $ "@0  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S , c $l ":   7CS 343 Operating Systems EECS, Northwestern UniversityN80(2 3 33 3 , Nff??"` , Nff??"` F   ," , Nff??" , Nff??"  , Nff??"  , Nff??"`  , c $ྒ "ce  L*"0(2Z , B޽h))? ? T3f3fff[ 0___PPT10.Zj&___PPT92p22 1_aqualab01P  0  0>(  0~ 0 Hff??"A 0 0c "    A Click to edit  0 <f "3  T Click to edit Master title style! !T   0 "  0 Tjff??"  4 0 0 T\mff??"  4 0~  0 Hff??"A~  0 Hff??"A  0 RAk B?nwu-seal-gray"@P%  0 c $q "`0   Fabin E. Bustamante, Fall 2005H 0(2 3& 3& 3Z 0 B޽h))? ? T3f3fff[80___PPT10.Zj&( 0 d8(  d  d N0yy .   v* a11aa d N4yy 2 .  x* a11aad d c $ ?  4 d NXyy 9 3  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S d Tyy q   v* a11aa d Tyy q2   x* a11aaH d 0ηo~ ? 3380___PPT10.eۡ ((    Nyy .    \* a11aa  N- yy 2 .   ^* a11aa  T@ yy q    \* a11aa  TC yy q2    ^* a11aaH  0ηo~ ? 3380___PPT10.dz͓ 0  6(  ~  s *{03  x  c $,}0    H  0޽h ? 3ff3fy___PPT10Y+D=' = @B +}   0 0$(  r  S \.,`0   r  S ,@0  H  0޽h ? T3f3fff[___PPT10i.;D+D=' = @B +  0 0<(  ~  s *,`0   ~  s *t,@0  H  0޽h ? ffy___PPT10Y+D=' = @B +  0 @<(  ~  s *`,`0   ~  s *l,@0  H  0޽h ? ffy___PPT10Y+D=' = @B +  0 PR(  ~  s *XC,`0     s *I,@0  "P@08@H  0޽h ? ffy___PPT10Y+D=' = @B +  0 `/9 (  r # S Z,`0   r $ S T,@0  L 0   # @     f1?"`0     `]1?8   =T 0 2bL 0   # @`P    f1?"`0     `_1?8   =U 0 2bL   #  x 2   f1?"`    `W1?  =C 0 2bL   #  2   f1?"`    `g1?  =D 0 2bR   fG HI 8c?(@R  # lZGHI8c? x R   # lGH~I8c? p  R ! # lG NHI N8c?,p H & # l1?"`P 2 '  f1?"` Fv 2 (  f1?"`LM|{2 )  f1?"` $T 2 *  f1?"`L*Z|L   /#  p2 0  f1?"`  1  `$o1?  =A 0 2b|B 2@ TD8c? @ 5  fhs1? `0p =R 0 2b8 `@  9(P T   # @2   f1?"`    `w1?  =A 0 2bT 0   #      f1?"`0      `0|1?8   =R 0 2bB   ZD8c?0 0  6  f(1?`0`  B Assignment 0 2 8 0h  8 8 T    # x ` 2    f1?"`     `1?  =B 0 2bT 0   # x0h    f1?"`0     `81?8   =S 0 2bB  ZD8c?  7  f1?0 `  ?Request0 2H  0޽h ?O ! ffy___PPT10Y+D=' = @B +3  0 <-4- FL\ ,(  \r \ S ,`0   r \ S ,@0  8    J\  T   \#   2  \  f1?"`   \  `П1?  =C 0 2bT    \#   2  \  f1?"`   \  `1?  =B 0 2bT   \#    2 \  f1?"`  \  `1?  =A 0 2b@  ` P  \`   \ # l1?"` ` P 2 \  f1?"` N  ` P  \ `   \ # l1?"` ` P 2 \  f1?"` p@  h  \@   \ C xZ1?"` h 2 \ 3 rZ1?"`Z`  2 \ # lZ1?"``  (@ "   )\  %\ C xZ1?"`"  2 &\ 3 rZ1?"`h  2 '\ 3 rZ1?"` 2 (\ # lZ1?"`jB *\  fD1?  B +\  fD1? 0 B ,\  fD1?  B -\  fD1?  B .\B  fD1?  B /\  fD1?  B 0\  fD1? 0  1\  f1?}  <R10 2  2\  f1?}  <R20 2  3\  f|1? 0 <R20 2  4\  fԻ1?@  <R40 2 `8 X  I\0 X rN  h  \  P@  \ 3 rZ1?"` h 2 \ # lZ1?"`Z`  2 \ # lZ1?"``  rN  h   \  P  !\ 3 rZ1?"` h 2 "\ # lZ1?"`Z`  2 #\ # lZ1?"``  T   5\# X p @H 2 6\  f1?"`  7\  `p1?  =A 0 2bT   8\#   2 9\  f1?"`  :\  `1?  =B 0 2bT   ;\#   2 <\  f1?"`  =\  `1?  =C 0 2bT   >\# h @2 ?\  f1?"`  @\  `L1?  =D 0 2bB A\  fD1? p B B\  fD1?  P B C\  fD1?   B D\B  fD1?P  B E\  fD1?0  B F\  fD1?    G\  fl1?`C   <R10 2  H\  f1?`  <R20 2  K\  f<1?0 t ,$ 0 JNo deadlock here0 2 L\  f1?` 4 ,$ 0 G Deadlock here0 2H \ 0޽h ? ̙33LD___PPT10$+3SLD' = @B DS' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*L\%(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*K\%(+p+0+K\0 ++0+L\0 +*  0 p%* .(  ~  s *,`0   B  ZD1? ,$D 0J8  *(   f1?X  0 A Request R Request S Release R Release S>10 2b b (b (   fD 1?`   0 B Request S Request T Release S Release T>10 2b b (b (   f 1?0  0 C Request T Request R Release T Release R>10 2b b (b S   fd1?g  i1.A requests R 2.B requests S 3.C requests T 4.A requests S 5.B requests T 6.C requests R deadlock0j0 2ab b V   f 1?(  l1.A requests R 2.C requests T 3.A requests S 4.C requests R 5.A releases R 6.A releases S no deadlock0m0 2ab b T X X`   #  (  2   ZjJ?"`X X`     `( 1?x @@  =A 0 2bT     # (   ZjJ?"`     ` 1?   =R 0 2bT 0   # ` 8   ZjJ?"`0     ` 1?@   =S 0 2bT 8 8  # P ( P  2  ZjJ?"`8 8    `< 1?X p  =B 0 2bT X X`  # p ( p 2  ZjJ?"`X X`    `$ 1?x @@  =C 0 2bT    # x P   ZjJ?"`     `( 1?   =T 0 2b   `, 1?(h a%Requests and releases of each process &0 2&bN P0  P0B B ZD1?PB    `D1?0 !  `1 1? t  RTwo possible orderings 0 2bB # TD1? ,$D 0B $ TD1? ,$D 0B % TD1? @  ,$D 0B & TD1? 0 P  ,$D 0 )  BCDE4FAA1? P|0@@ @    "`  ,$D 0H  0޽h ? 333MMM___PPT10+5LmDn' = @B D)' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*#%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*&%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*)%(+  0 <(  ~  s *G ,`0   ~  s *4H ,@0   H  0޽h ? ffy___PPT10Y+D=' = @B +  0 <(  ~  s *S ,`0   ~  s *S ,@0   H  0޽h ? ffy___PPT10Y+D=' = @B + %   0 !$$<<#(  ~  s *Z ,`0   ~  s *De ,@?    ~  s *f ,@ 0   !F  ` X       `i 1?2P   20 2 N h   ` 02  Z>?"`h    `l 1? U =A 0 2b N h 8 h     2   Z>?"`h 8 h     `q 1?  U  =F 0 2b N pp   P  2  Z>?"`pp   `?"`8    `Hy 1?H   =G 0 2b N 8`  P@  2  Z>?"`8`   `} 1?HM =E 0 2b N   @p@2  Z>?"`   ` 1? =B 0 2b N X x 8   `   ZjJ?"`X x 8   `0 1?h  5 =R 0 2b N 0     (   ZjJ?"`0     `t 1?8   =S 0 2b N @     @    ZjJ?"`@   !  `h 1?H   =W 0 2b N  X  " P   # ZjJ?"` X  $  ` 1? (  =U 0 2b N h % 80   & ZjJ?"`h '  ` 1?U =T 0 2b N 0   ( H   ) ZjJ?"`0   *  ` 1?H   =V 0 2b N H   +  2 , Z>?"`H   -  `@ 1?X   =C 0 2b B .  `D1? B /  `D1?( H B 0  `D1? 8 B 1  `D1?  B 2  `D1?( ( X B 3  `D1?8 8 B 4  `D1?@ @@  B 5  `D1?` B 6  `D1?(  B 7  `D1? 0 B 8  `D1?  B 9  `D1? p N X   : X  B ;  `D1?X  B < ZD1?  H  0޽h ? T3f3f___PPT10i.8`(+D=' = @B +    0 2*(  ~  s *X ,`0   ~  s *0 ,@?    ~  s * ,@ 0   H  0޽h ? 333MMMy___PPT10Y+D=' = @B +j8   0 ,,::+(  ~  s *X ,`0     s *0 ,@? <$@ 0    p X  3 #"a      f 1? ^X  K0 @`   f 1? ^  K0 @`   f"1?> ^  K1 @`   f 1?p ^>  K2 @`    f@"1? X ^ K0 @`    f"1?  ^ K1 @`    fh("1?>  ^ K0 @`    f"1?p > ^ K1 @`    f:"1? X  K1 @`   fLC"1?   K0 @`   fTL"1?>   K0 @`   f\U"1?p >  K2 @`xB  H1 ?p > xB  H1 ?p > xB  Ho ?p p xB  Ho ?X X xB  H1 ?>  xB  H1 ?  xB  H1 ? X xB  H1 ?>  xB  H1 ?  xB  H1 ? X xB  Ho ?p p ^xB  Ho ?X X ^xB  Ho ?p ^p xB  Ho ?X ^X 8 D `  3 #"  "    fPc"1 ? `  K0 @` !  fPl"1 ?   K2 @` "  ft"1 ?   K1 @` #  f|~"1 ?   K0 @` $  fo"1 ? `  K1 @` %  ft"1 ?   K0 @` &  fL"1 ?   K0 @` '  f"1 ?   K2 @` (  f"1 ?D `  K0 @` )  fP"1 ?D   K1 @` *  f"1 ?D   K0 @` +  f"1 ?D   K0 @`~B , N1 ?D D ~B - N1 ?  ~B . No ?D  ~B / No ?`D ` ~B 0 N1 ?D D ~B 1 N1 ?D D ~B 2 N1 ?D `D ~B 3 N1 ?  ~B 4 N1 ?  ~B 5 N1 ? ` ~B 6 No ?  ~B 7 No ?` ` ~B 8 No ?  ~B 9 No ?` `  : c $"  0 Algorithm: All processes unmarked 1.Look for unmarked process Pi for which Ri d" A 2.If found, add Ci. to A, mark the process and go to 1 3.If not, exit All unmarked processes, if any, are deadlock Idea: See if there s any process that can be run to completion with available resources, mark it and free its resources & FP 4ckckcc c  k _ c  k {bRH  0޽h ? T3f3f  ___PPT10 .0W+ED ' = @B Di ' = @BA?%,( < +O%,( < +D' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*"%(D' =%(Dh' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*"%(+   0 <(  ~  s *\O,`0   ~  s *4,@0  H  0޽h ? T3f3f___PPT10i.Np-+D=' = @B +8   0 ((8c ((   ~   s *L",`0  " ~   s *$",@0 " F H   pHH    `D$1?h Cprinter 0 2btT (x  # Xp00B   TDjJ?((pB   TDjJ?(xxB   ZD1?PB   ZD1?XB   ZD1?  PB   ZD1?  TB   ZD1?  LB  B ZD1?I||B  B ZD1?<B  B ZD1?/  B  B ZD1?/  B   ZD1?H H hB   ZD1?TX`B   ZD1?hB   ZD1?`    `D$1?"`80 \I1>0 2bjb    ` $1?"``0(  \I2>0 2bjb    `@$1?"`h @0  \I3>0 2bjb    `$1?"` 0X  \I4>0 2bjb    `$1?"` 0 =q 0 2b    `$1?"`0 =p 0 2b    `$#$1?"`h P(  \I5>0 2bjb    `($1?"`` X  \I6>0 2bjb    `,$1?"`@`  \I7>0 2bjb    `1$1?"` P \I8>0 2bjb    `7$1?"``8( ?B"0 2b !   `:$1?"`8  ?A"0 2b "   `>$1?"`& U* u (Both processes done) 0 2b #   `1?"`  $   `1?"`p  %   `,C$1?8 Cprinter 0 2b &   `F$1? p  Cplotter 0 2b '   `J$1?H   Cplotter 0 2b~B (  ND1?   ~B )  ND1? ~B * B ND1? ~B + B ND1? X X ,   `\O$1?   =s 0 2b -   ` S$1? x  =r 0 2b .   `W$1?   =t 0 2bB /  ZD8c? P ,$D 0B 0  ZD8c? xx ,$D 0B 1  ZD8c?  ,$D 0B 2  ZD8c?p  ,$D 0 3  Z[$1?"`@  F impossible 0 2 b 4  ZD`$1?"` H  Ddeadlock 0 2 bB 5  ZD8c?P  5l 0@  c @0 ,$D 0B a   fD1?``  b  3 r,1?0@` q+Your only option here is to run A up to I4*,0*   H   0޽h ? ff2*___PPT10 +mʹD' = @B D' = @BA?%,( < +O%,( < +D' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*/ %(D' =-o6Bdissolve*<3<*/ D' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*0 %(D' =-o6Bdissolve*<3<*0 D' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*1 %(D' =-o6Bdissolve*<3<*1 D' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*2 %(D' =-o6Bdissolve*<3<*2 D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*c %(+1  0 p'h'44'(  ~  s *(x$,`0  $ ~  s *x$,@0 $ )   H  3 #"V ~  $   f$1?  H  K7 @`   f$1?    K2 @`   fH$1?   KC @`   f$1? O H  K4 @`    fP$1? O   K2 @`    fԮ$1? O   KB @`    fܷ$1?  HO  K9 @`    f$1? O  K3 @`    f$1? O  KA @`~B  No ? H xB  H1 ? O HO xB  H1 ?  H ~B  No ? H ~B  No ? xB  H1 ? xB  H1 ?   ~B  No ?H H    `h$1?H CFree: 3 0 2bE x  H  3 #" `    fd$1 ?  H  K7 @`   fd$1 ?    K2 @`   f$1 ?   KC @`   f$1 ? O H  K4 @`   fh$1 ? O   K2 @`   f%1 ? O   KB @`   f %1 ?  HO  K9 @`   f<%1 ? O  O4 @`    f#%1 ? O  KA @`B ! To ? H ~B " N1 ? O HO ~B # N1 ?  H B $ To ? H B % To ? ~B & N1 ? ~B ' N1 ?   B ( To ?H H  )  `&%1?88( UFree: 220 2bf *  `*%1? PV  f*A requests and is granted another instance +0 2+bxF  X (  + X ( B ,  `D1? X ( B -B ZD1? X  X  .  `8/%1?p 0 ,$ 0 BSafe"0 2b  /  `T3%1? H ,$ 0 HUnsafe&0 2ff 0  f؇ 1? @  ;Has0 2 1  f 1? @  =Needs0 2 2  ff 1? `  ;Has0 2 3  f 1? `  =Needs0 2n 4  ` 1?@ @ ,$ 0 nIn retrospect, A s request should not have been granted 80 28bH  0޽h ? 333MMM+ # ___PPT10 +߭UD? ' = @B D' = @BA?%,( < +O%,( < +D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*.%(D' =-o6Bdissolve*<3<*.D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*/%(D' =-o6Bdissolve*<3<*/DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*4%(++0+.0 ++0+/0 ++0+40 +  0 <(  ~  s *4S%,`0  % ~  s *S%,@0 % H  0޽h ? 333MMMy___PPT10Y+D=' = @B +  0 <(  ~  s *hh%,`0  % ~  s *h%,@0 % H  0޽h ? T3f3f___PPT10i.p'x+D=' = @B +  0  <(  ~  s *v%,`0  % ~  s *w%,@0 % H  0޽h ? ffy___PPT10Y+D=' = @B +  0 0 P(   ~   s *%,`0  % ~   s *0%,@0 % B   ZD|?`B   ZD|?@Xx H   0޽h ? ffy___PPT10Y+D=' = @B +_   0  ~ @$ (  $~ $ s *l%,@0 % ~ $ s *D%,`0  % F    $ ` N X X`  $   2 $ ZjJ?"`X X`  $  `%1?x @@  =A 0 2bN    $    $ ZjJ?"`    $  `%1?   =i 0 2bN 0    $     $ ZjJ?"`0    $  `%1?@   =j 0 2bN 8 8  $  2 $ ZjJ?"`8 8  $  `%1?X p  =B 0 2bB $ TD1?H H B $ TD1?  H $ 0޽h ? ffy___PPT10Y+D=' = @B +  0 P(<(  (~ ( s *\%,`0  % ~ ( s *4%,@0 % H ( 0޽h ? ffy___PPT10Y+D=' = @B +}  0  $(  r  S 4%,`0  % r  S %,@0 % H  0޽h ? T3f3fff[___PPT10i.բj+D=' = @B + [ 0 0(  X  C d     S d9 3    H  0ηo~ ? 3380___PPT10.QP$ \ 0 P(  X  C d     S l&d9 3    H  0ηo~ ? 3380___PPT10.Qy$ ] 0 `(  X  C d     S ;d9 3    H  0ηo~ ? 3380___PPT10.Qy$ ^ 0 p(  X  C d     S hRd9 3    H  0ηo~ ? 3380___PPT10.Qy$ _ 0 (  X  C d     S Dd9 3    H  0ηo~ ? 3380___PPT10.Qy$X` 0 h(  X  C d     S C d9 3   j<An example of how deadlock occurs and how it can be avoided 4 H  0ηo~ ? 3380___PPT10.Qy$ a 0 (  X  C d     S  P d9 3    H  0ηo~ ? 3380___PPT10.Qy$ b 0 (  X  C d     S a d9 3    H  0ηo~ ? 3380___PPT10.Qy$ c 0 (  X  C d     S ` d9 3    H  0ηo~ ? 3380___PPT10.Q$ d 0 (  X  C d     S D d9 3    H  0ηo~ ? 3380___PPT10.Q$ e 0  (   X   C d   "   S "d9 3  "  H   0ηo~ ? 3380___PPT10.Q$ f 0 (  X  C d   "  S 8"d9 3  "  H  0ηo~ ? 3380___PPT10.Q$ g 0 (  X  C d   $  S t$d9 3  $  H  0ηo~ ? 3380___PPT10.Q$ h 0 (  X  C d   %  S O%d9 3  %  H  0ηo~ ? 3380___PPT10.Q$ i 0  (  X  C d   %  S d%d9 3  %  H  0ηo~ ? 3380___PPT10.Q$ j 0 0 (   X   C d   %   S q%d9 3  %  H   0ηo~ ? 3380___PPT10.Q$ k 0 @$(  $X $ C d   % $ S %d9 3  %  H $ 0ηo~ ? 3380___PPT10.Q$ l 0 P((  (X ( C d   % ( S %d9 3  %  H ( 0ηo~ ? 3380___PPT10.Q$ m 0 `,(  ,X , C d   % , S H%d9 3  %  H , 0ηo~ ? 3380___PPT10.Q$ n 0 p0(  0X 0 C d   % 0 S %d9 3  %  H 0 0ηo~ ? 3380___PPT10.Q$  0 4(  4X 4 C d   % 4 S ,%d9 3  %  H 4 0ηo~ ? 3380___PPT10.Q$ { 0  \(  \X \ C d    \ S Ld9 3    H \ 0ηo~ ? 3380___PPT10.Q@$  0 @(  X  C d     S d9 3    H  0ηo~ ? 3380___PPT10. r XcpyG@Wc} 9<7uwa\ް -PAUi}  -AUi}!#% (*: އ1,kE.;1Oh+'0T px   , 8DL CS 343 OS DeadlockFabian E. Bustamante aqualab01Fabian E. Bustamante93Microsoft PowerPoint@@Or @QZ@@#'GSg  )'    """)))UUUMMMBBB999|PP3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f333f3333f3ffffff3f̙3f3f3f333f3333f3ffffff3f̙3f3ffffffffff!___www4'A x(xKʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮ՜.+,00  $ , On-screen Show$CompSci - Northwestern Universityp ArialTahomaTimes New Roman WingdingsVerdana Courier NewSymbol 1_aqualab01 Deadlocks System model System modelIntroduction to deadlocksConditions for deadlockDeadlock modeling Basic FactsDeadlock modelingDealing with deadlocksThe ostrich algorithm%Deadlock detection single instanceDetection - multiple instances DetectionWhen to check & what to doDeadlock avoidanceSafe and unsafe statesBanker's algorithmDeadlock preventionAttacking mutual exclusionAttacking hold & waitAttacking circular waitRelated issues Next time  Fonts UsedDesign Template Slide Titles,_=/0Fabian E. BustamanteFabian E. Bustamante  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdfghijklmnopqrstuvwxyz{|}~Root EntrydO)Pictures2Current UserSummaryInformation(e,UPowerPoint Document(Ma/DocumentSummaryInformation8