%!PS (but not EPSF because of memory limits) %%Creator: dvips by Radical Eye Software %%Title: thesis.dvi %%Pages: 122 1 %%BoundingBox: 0 0 612 792 %%EndComments %%BeginDocument: tex.pro /TeXDict 200 dict def TeXDict begin /bdf{bind def}def /bop-aux{}bdf /@rigin{ /@page-height exch def /@page-width exch def 72 Resolution div dup neg scale translate}bdf /@letter{Resolution dup -10 mul 8.5 11 @rigin}bdf /@landscape{[ 0 1 -1 0 0 0]concat Resolution dup 8.5 11 @rigin}bdf /@a4{Resolution dup -10.6929133858 mul 21 2.54 div 29.7 2.54 div @rigin}bdf /@legal{Resolution dup -13 mul 8.5 14 @rigin}bdf /@11x17{statusdict /11x17tray known{statusdict begin 11x17tray end}if Resolution dup -16 mul 11 17 @rigin}bdf /@manualfeed{ statusdict /manualfeed true put}bdf /@copies{/#copies exch def}bdf /@draft{ /bop-aux{gsave initmatrix 72 dup scale @page-width 2 div @page-height 2 div translate @page-height @page-width atan rotate /Helvetica-Bold findfont 2 scalefont setfont(DRAFT)dup stringwidth pop 2 div neg -1 moveto .95 setgray show grestore}bdf}bdf /@FontMatrix[1 0 0 -1 0 0]def /@FontBBox[0 0 0 0]def /dmystr(ZZf@@@)def /newname{dmystr cvn}bdf /df{/fontname exch def dmystr 2 fontname cvx(@@@@)cvs putinterval newname 7 dict def newname load begin /FontType 3 def /FontMatrix @FontMatrix def /FontBBox @FontBBox def /BitMaps 256 array def /BuildChar{CharBuilder}def /Encoding IdentityEncoding def end fontname{/foo setfont}2 array copy cvx def fontname load 0 dmystr 6 string copy cvn cvx put}bdf /dfe{newname dup load definefont setfont}bdf /ch-image{ ch-data 0 get}bdf /ch-width{ch-data 1 get}bdf /ch-height{ch-data 2 get}bdf /ch-xoff{ch-data 3 get}bdf /ch-yoff{ch-data 4 get}bdf /ch-dx{ch-data 5 get} bdf /CharBuilder{save 3 1 roll exch /BitMaps get exch get /ch-data exch def ch-data null ne{ch-dx 0 ch-xoff ch-yoff neg ch-xoff ch-width add ch-height ch-yoff sub setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-height ch-yoff sub .1 add]{ch-image}imagemask}if restore}bdf /dc{/ch-code exch def /ch-data exch def newname load /BitMaps get ch-code ch-data put}bdf /bop{gsave /SaveImage save def /bop-aux load exec 0 0 moveto}bdf /eop{clear SaveImage restore showpage grestore}bdf /@start{/Resolution exch def /IdentityEncoding 256 array def 0 1 255{IdentityEncoding exch 1 string dup 0 3 index put cvn put}for}bdf /p{show}bdf /RuleMatrix[1 0 0 -1 -.1 -.1]def /BlackDots 8 string def /v{gsave currentpoint translate false RuleMatrix{ BlackDots}imagemask grestore}bdf /a{moveto}bdf /delta 0 def /tail{dup /delta exch def 0 rmoveto}bdf /b{exch show tail}bdf /c{show delta 4 sub tail}bdf /d{ show delta 3 sub tail}bdf /e{show delta 2 sub tail}bdf /f{show delta 1 sub tail}bdf /g{show delta 0 rmoveto}bdf /h{show delta 1 add tail}bdf /i{show delta 2 add tail}bdf /j{show delta 3 add tail}bdf /k{show delta 4 add tail} bdf /l{show -4 0 rmoveto}bdf /m{show -3 0 rmoveto}bdf /n{show -2 0 rmoveto} bdf /o{show -1 0 rmoveto}bdf /q{show 1 0 rmoveto}bdf /r{show 2 0 rmoveto}bdf /s{show 3 0 rmoveto}bdf /t{show 4 0 rmoveto}bdf /w{0 rmoveto}bdf /x{0 exch rmoveto}bdf /y{3 2 roll show moveto}bdf /bos{/section save def}bdf /eos{clear section restore}bdf end %%EndDocument %%BeginDocument: special.pro TeXDict begin /SDict 200 dict def SDict begin /@SpecialDefaults{/hs 612 def /vs 792 def /ho 0 def /vo 0 def /hsc 1 def /vsc 1 def /ang 0 def /CLIP false def /BBcalc false def}bdf /@scaleunit 1 def /@hscale{@scaleunit div /hsc exch def}bdf /@vscale{@scaleunit div /vsc exch def}bdf /@hsize{/hs exch def /CLIP true def}bdf /@vsize{/vs exch def /CLIP true def}bdf /@hoffset{/ho exch def} bdf /@voffset{/vo exch def}bdf /@angle{/ang exch def}bdf /@rwi{10 div /rwi exch def}bdf /@llx{/llx exch def}bdf /@lly{/lly exch def}bdf /@urx{/urx exch def}bdf /@ury{/ury exch def /BBcalc true def}bdf end /@MacSetUp{userdict /md known{userdict /md get type /dicttype eq{md begin /letter{}def /note{}def /legal{}def /od{txpose 1 0 mtx defaultmatrix dtransform exch atan/pa exch def newpath clippath mark{transform{itransform moveto}}{transform{itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{ itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{ closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}def /txpose{pxs pys scale ppr aload pop por{noflips{pop exch neg exch translate pop 1 -1 scale}if xflip yflip and{pop exch neg exch translate 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if xflip yflip not and{pop exch neg exch translate pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{ppr 1 get neg ppr 0 get neg translate} if}{noflips{translate pop pop 270 rotate 1 -1 scale}if xflip yflip and{ translate pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if xflip yflip not and{translate pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{ translate pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 exch translate} if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy translate .96 dup scale neg exch neg exch translate}if}def /cp{pop pop showpage pm restore}def end}if}if}def /psf$TeXscale{65536 div}def /startTexFig {/psf$SavedState save def userdict maxlength dict begin Resolution 72 div dup neg scale currentpoint translate /psf$ury exch psf$TeXscale def /psf$urx exch psf$TeXscale def /psf$lly exch psf$TeXscale def /psf$llx exch psf$TeXscale def /psf$y exch psf$TeXscale def /psf$x exch psf$TeXscale def currentpoint /psf$cy exch def /psf$cx exch def /psf$sx psf$x psf$urx psf$llx sub div def /psf$sy psf$y psf$ury psf$lly sub div def psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub translate /showpage{}def /erasepage{ }def /copypage{}def @MacSetUp}def /doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto}def /endTexFig{end psf$SavedState restore}def /@beginspecial{SDict begin /SpecialSave save def Resolution 72 div dup neg scale currentpoint translate @SpecialDefaults}bdf /@setspecial{CLIP{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}{initclip}ifelse ho vo translate hsc vsc scale ang rotate BBcalc{rwi urx llx sub div dup scale llx neg lly neg translate}if /showpage{}def newpath}bdf /@endspecial{clear SpecialSave restore end}bdf /@defspecial{SDict begin}bdf /@fedspecial{end}bdf /li{lineto}bdf /rl{rlineto} bdf /rc{rcurveto}bdf /np{/SaveX currentpoint /SaveY exch def def newpath}bdf /st{stroke SaveX SaveY moveto}bdf /fil{fill SaveX SaveY moveto}bdf /ellipse{ /endangle exch def /startangle exch def /yrad exch def /xrad exch def /savematrix matrix currentmatrix def translate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}bdf end %%EndDocument TeXDict begin bos 300 @start /fa df[<0C003C00CC000C000C000C000C000C000C000C00 0C000C000C000C000C00FF80>9 16 2 0 15]49 dc dfe /fb df[<03000700FF000700070007 00070007000700070007000700070007000700070007000700070007007FF0>12 21 2 0 18] 49 dc dfe /fc df[<0001FF81FE00001FFFEFFF80007F80FF87C000FC00FE0FE001F801FE0FE0 03F801FC0FE007F001FC0FE007F001FC07C007F001FC000007F001FC000007F001FC000007F001 FC000007F001FC000007F001FC000007F001FC0000FFFFFFFFF800FFFFFFFFF800FFFFFFFFF800 07F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001 FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC0000 07F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001 FC000007F001FC00007FFF1FFFE0007FFF1FFFE0007FFF1FFFE000>43 42 1 0 40]11 dc[<1C 003E007F00FF80FF80FF807F003E001C00>9 9 5 0 19]46 dc[<000E00001E00007E0007FE00 FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00 00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00 00FE0000FE0000FE0000FE0000FE0000FE007FFFFE7FFFFE7FFFFE>23 39 5 0 34]49 dc[<00 FF800003FFF0000FFFFC001F03FE003800FF007C007F80FE003FC0FF003FC0FF003FE0FF001FE0 FF001FE07E001FE03C003FE000003FE000003FC000003FC000007F8000007F000000FE000000FC 000001F8000003F0000003E00000078000000F0000001E0000003C00E0007000E000E000E001C0 01C0038001C0070001C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFFFF80> 27 39 3 0 34]50 dc[<007F800003FFF00007FFFC000F81FE001F00FF003F80FF003F807F803F 807F803F807F801F807F800F007F800000FF000000FF000000FE000001FC000001F8000007F000 00FFC00000FFF0000001FC0000007E0000007F0000007F8000003FC000003FC000003FE000003F E03C003FE07E003FE0FF003FE0FF003FE0FF003FC0FF007FC07E007F807C007F003F01FE001FFF FC0007FFF00000FF8000>27 39 3 0 34]51 dc[<00000E0000001E0000003E0000007E000000 FE000000FE000001FE000003FE0000077E00000E7E00000E7E00001C7E0000387E0000707E0000 E07E0000E07E0001C07E0003807E0007007E000E007E000E007E001C007E0038007E0070007E00 E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000FE000000FE000000FE000000FE000000FE 000000FE000000FE00007FFFF8007FFFF8007FFFF8>29 39 2 0 34]52 dc[<0C0003000F803F 000FFFFE000FFFFC000FFFF8000FFFF0000FFFE0000FFFC0000FFE00000E0000000E0000000E00 00000E0000000E0000000E0000000E7FC0000FFFF8000F80FC000E003E000C003F0000001F8000 001FC000001FC000001FE000001FE018001FE07C001FE0FE001FE0FE001FE0FE001FE0FE001FC0 FC001FC078003F8078003F803C007F001F01FE000FFFF80003FFF00000FF8000>27 39 3 0 34] 53 dc[<0007F000003FFC0000FFFE0001FC0F0003F01F8007E03F800FC03F801FC03F801F803F 803F801F003F8000007F0000007F0000007F000000FF000000FF0FC000FF3FF800FF707C00FFC0 3E00FFC03F00FF801F80FF801FC0FF001FC0FF001FE0FF001FE0FF001FE07F001FE07F001FE07F 001FE07F001FE03F001FE03F001FC01F801FC01F803F800FC03F0007E07E0003FFFC0000FFF000 003FC000>27 39 3 0 34]54 dc[<000003800000000007C00000000007C0000000000FE00000 00000FE0000000000FE0000000001FF0000000001FF0000000003FF8000000003FF8000000003F F80000000073FC0000000073FC00000000F3FE00000000E1FE00000000E1FE00000001C0FF0000 0001C0FF00000003C0FF80000003807F80000007807FC0000007003FC0000007003FC000000E00 3FE000000E001FE000001E001FF000001C000FF000001FFFFFF000003FFFFFF800003FFFFFF800 00780007FC0000700003FC0000700003FC0000E00001FE0000E00001FE0001E00001FF0001C000 00FF0001C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE001FFFFE>47 41 2 0 52]65 dc[<00 003FF001800003FFFE0380000FFFFF8780003FF007DF8000FF8001FF8001FE00007F8003FC0000 3F8007F000001F800FF000000F801FE0000007801FE0000007803FC0000007803FC0000003807F C0000003807F80000003807F8000000000FF8000000000FF8000000000FF8000000000FF800000 0000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000007F80000000007F 80000000007FC0000003803FC0000003803FC0000003801FE0000003801FE0000007000FF00000 070007F000000E0003FC00001E0001FE00003C0000FF8000F800003FF007E000000FFFFFC00000 03FFFF000000003FF80000>41 41 4 0 50]67 dc[45 41 3 0 53]68 dc[47 41 3 0 54]72 dc[22 41 2 0 26]73 dc[58 41 3 0 65]77 dc[47 41 3 0 54]78 dc[39 41 3 0 47]80 dc[48 41 3 0 52]82 dc[<007F806003FFF0E007FFF9E00F807FE01F00 1FE03E0007E07C0003E07C0001E0FC0001E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FF C000007FFE00007FFFE0003FFFFC001FFFFE000FFFFF8007FFFFC003FFFFE000FFFFE00007FFF0 00007FF000000FF8000007F8000003F8600001F8E00001F8E00001F8E00001F8F00001F0F00001 F0F80003F0FC0003E0FF0007C0FFE01F80F3FFFF00E0FFFE00C01FF000>29 41 4 0 38]83 dc[ <7FFFFFFFFFC07FFFFFFFFFC07FFFFFFFFFC07F803FC03FC07E003FC007C078003FC003C07800 3FC003C070003FC001C0F0003FC001E0F0003FC001E0E0003FC000E0E0003FC000E0E0003FC000 E0E0003FC000E0E0003FC000E000003FC0000000003FC0000000003FC0000000003FC000000000 3FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000 0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000000000 3FC0000000003FC0000000003FC0000000003FC0000000003FC00000007FFFFFE000007FFFFFE0 00007FFFFFE000>43 40 2 0 48]84 dc[46 41 3 0 53]85 dc[<01FF800007FFF0000F81F8001FC07E001FC07E001FC03F000F803F8007003F8000003F8000 003F8000003F80000FFF8000FFFF8007FC3F800FE03F803F803F803F003F807F003F80FE003F80 FE003F80FE003F80FE003F807E007F807F00DF803F839FFC0FFF0FFC01FC03FC>30 27 2 0 33] 97 dc[<001FF80000FFFE0003F01F0007E03F800FC03F801F803F803F801F007F800E007F0000 007F000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000007F0000007F00 00007F8000003F8001C01F8001C00FC0038007E0070003F01E0000FFFC00001FE000>26 27 2 0 31]99 dc[<00003FF80000003FF80000003FF800000003F800000003F800000003F800000003F8 00000003F800000003F800000003F800000003F800000003F800000003F800000003F800000003 F800001FE3F80000FFFBF80003F03FF80007E00FF8000FC007F8001F8003F8003F8003F8007F00 03F8007F0003F8007F0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF 0003F800FF0003F8007F0003F8007F0003F8007F0003F8003F8003F8001F8003F8000F8007F800 07C00FF80003F03BFF8000FFF3FF80003FC3FF80>33 42 2 0 38]100 dc[<003FE00001FFF800 03F07E0007C01F000F801F801F800F803F800FC07F000FC07F0007C07F0007E0FF0007E0FF0007 E0FFFFFFE0FFFFFFE0FF000000FF000000FF0000007F0000007F0000007F0000003F8000E01F80 00E00FC001C007E0038003F81F0000FFFE00001FF000>27 27 2 0 32]101 dc[<0007F0003FFC 00FE3E01F87F03F87F03F07F07F07F07F03E07F00007F00007F00007F00007F00007F00007F000 FFFFC0FFFFC0FFFFC007F00007F00007F00007F00007F00007F00007F00007F00007F00007F000 07F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0007FFF807FFF80 7FFF80>24 42 2 0 21]102 dc[<00FF81F003FFE7F80FC1FE7C1F80FC7C1F007C383F007E107F 007F007F007F007F007F007F007F007F007F007F007F003F007E001F007C001F80FC000FC1F800 1FFFE00018FF800038000000380000003C0000003E0000003FFFF8001FFFFF001FFFFF800FFFFF C007FFFFE01FFFFFF03E0007F07C0001F8F80000F8F80000F8F80000F8F80000F87C0001F03C00 01E01F0007C00FC01F8003FFFE00007FF000>30 40 2 13 34]103 dc[33 42 3 0 38]104 dc[<07000FC01FE03FE03FE03FE01FE00FC0070000000000 00000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F E00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE>15 43 3 0 20]105 dc[15 42 3 0 20]108 dc[53 27 3 0 58]109 dc[33 27 3 0 38]110 dc[<003FE00001FFFC0003F07E000FC01F801F800FC03F800FE03F0007E07F00 07F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF 0007F87F0007F07F0007F03F800FE03F800FE01F800FC00FC01F8007F07F0001FFFC00003FE000 >29 27 2 0 34]111 dc[33 39 2 12 38]112 dc[<001FC0380000FFF0780003F838F80007 E00DF8000FC007F8001FC007F8003F8003F8007F8003F8007F8003F8007F0003F800FF0003F800 FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F8007F0003F8007F0003F8 007F8003F8003F8003F8001F8007F8000FC007F80007E01FF80003F07BF80000FFF3F800003FC3 F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8000000 03F800000003F80000003FFF8000003FFF8000003FFF80>33 39 2 12 36]113 dc[ 24 27 2 0 28]114 dc[<03FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FF E0007FFE007FFF803FFFE01FFFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F8 0038FC0070FF01E0F7FFC0C1FF00>22 27 2 0 27]115 dc[<00700000700000700000700000F0 0000F00000F00001F00003F00003F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F0 0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F03807F03807F03807F0 3807F03807F03803F03803F87001F86000FFC0001F80>21 38 1 0 27]116 dc[33 27 3 0 38]117 dc[33 39 1 12 36]121 dc dfe /fd df [<00001E000000003E00000000FE00000003FE0000003FFE0000FFFFFE0000FFFFFE0000FFFFFE 0000FFCFFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000F FE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE000000 0FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000 000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00 00000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE 0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00007FFFFFFFC07FFFFFFFC07FFF FFFFC07FFFFFFFC0>34 56 7 0 49]49 dc[<0007FE0000007FFFE00001FFFFF80003FFFFFE00 07F01FFF000F8007FF801F0001FFC03E0000FFE07F8000FFF07FC0007FF0FFE0007FF8FFF0003F F8FFF0003FFCFFF0003FFCFFF0003FFCFFF0003FFC7FE0003FFC3FC0003FFC1F80003FFC000000 3FFC0000003FF80000007FF80000007FF00000007FF0000000FFE0000000FFC0000001FF800000 01FF00000003FE00000007FC00000007F80000000FF00000001FC00000003F800000007F000000 00FC00000001F800000001F0003C0003E0003C0007C0003C000F000078001E000078003C000078 00780000F800F00000F801FFFFFFF803FFFFFFF007FFFFFFF00FFFFFFFF01FFFFFFFF03FFFFFFF F07FFFFFFFF0FFFFFFFFF0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0>38 56 5 0 49]50 dc[<0000 001FFF000030000001FFFFE000F000000FFFFFFC01F000007FFFFFFE03F00001FFFE007F87F000 03FFE0000FCFF0000FFF000003FFF0001FFC000001FFF0003FF80000007FF0007FF00000003FF0 00FFC00000003FF001FFC00000001FF003FF800000000FF007FF000000000FF00FFF0000000007 F00FFE0000000007F01FFE0000000003F01FFE0000000003F03FFC0000000003F03FFC00000000 01F03FFC0000000001F07FFC0000000001F07FF80000000001F07FF80000000000007FF8000000 000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF80000 00000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF800 0000000000FFF80000000000007FF80000000000007FF80000000000007FF80000000000007FFC 0000000000F03FFC0000000000F03FFC0000000000F03FFC0000000000F01FFE0000000000F01F FE0000000001E00FFE0000000001E00FFF0000000001E007FF0000000003C003FF8000000003C0 01FFC0000000078000FFE00000000F00007FF00000001F00003FF80000003E00001FFC0000007C 00000FFF000001F8000003FFE00007F0000001FFFE003FC00000007FFFFFFF000000000FFFFFFC 0000000001FFFFF000000000001FFF000000>60 61 5 1 71]67 dc[<001FFF00000001FFFFF0 000003FFFFFC000007F007FE00000FF801FF00001FFC00FF80001FFC007FC0001FFC007FE0001F FC003FE0000FF8003FF0000FF8003FF00007F0003FF00001C0003FF0000000003FF0000000003F F0000000003FF0000000FFFFF000000FFFFFF000007FF83FF00001FF803FF00007FE003FF0000F F8003FF0001FF0003FF0003FE0003FF0007FE0003FF0007FE0003FF000FFC0003FF000FFC0003F F000FFC0003FF000FFC0003FF000FFC0007FF0007FE0007FF0007FE000DFF0003FF0039FF8001F FC0F0FFFF007FFFE0FFFF001FFFC07FFF0003FE000FFF0>44 38 3 0 48]97 dc[<0001FFC000 000FFFF800003FFFFE0000FF80FF0001FE003F8007FC001FC00FF8000FE00FF8000FF01FF00007 F03FF00007F83FF00007F87FE00007F87FE00003FC7FE00003FC7FE00003FCFFE00003FCFFFFFF FFFCFFFFFFFFFCFFFFFFFFFCFFE0000000FFE0000000FFE0000000FFE00000007FE00000007FE0 0000007FE00000003FE00000003FF000003C1FF000003C1FF000003C0FF800007807FC0000F803 FE0001F001FF0007E000FFC03FC0003FFFFF000007FFFC000000FFE000>38 38 3 0 45]101 dc [<00FF00000000FFFF00000000FFFF00000000FFFF00000000FFFF0000000007FF0000000003FF 0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF000000 0003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF 0000000003FF0000000003FF0000000003FF007FC00003FF01FFF80003FF07FFFC0003FF0F03FE 0003FF1C01FF0003FF3001FF8003FF6000FF8003FFE000FFC003FFC000FFC003FF8000FFC003FF 8000FFC003FF8000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FF C003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF 0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FF C003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFFFFFFFF FC3FFFFFFFFFFC3FFFFF>48 60 4 0 55]104 dc[<00FF01FF8000FFFF0FFFF000FFFF3FFFFC00 FFFFFE03FF00FFFFF000FF8003FFC0007FC003FF80003FE003FF00003FF003FF00001FF803FF00 001FFC03FF00000FFC03FF00000FFE03FF00000FFE03FF000007FE03FF000007FF03FF000007FF 03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF00 0007FF03FF000007FE03FF000007FE03FF00000FFE03FF00000FFC03FF00000FFC03FF00001FF8 03FF00001FF803FF00003FF003FF80003FE003FFC0007FC003FFF001FF8003FFFC07FF0003FF3F FFFC0003FF0FFFF00003FF01FF000003FF0000000003FF0000000003FF0000000003FF00000000 03FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00 00000003FF0000000003FF00000000FFFFFC000000FFFFFC000000FFFFFC000000FFFFFC000000 >48 55 3 17 55]112 dc[<00FE03F000FFFE0FFE00FFFE1FFF00FFFE3C3F80FFFE707FC007FE 60FFE003FEE0FFE003FEC0FFE003FFC0FFE003FF807FC003FF807FC003FF803F8003FF800E0003 FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF000000 03FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF0000 0003FF00000003FF00000003FF00000003FF00000003FF000000FFFFFE0000FFFFFE0000FFFFFE 0000FFFFFE0000>35 38 3 0 41]114 dc[<000780000007800000078000000780000007800000 0F8000000F8000000F8000000F8000001F8000001F8000003F8000003F8000007F800000FF8000 01FF800007FF80001FFFFFF0FFFFFFF0FFFFFFF0FFFFFFF001FF800001FF800001FF800001FF80 0001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF 800001FF800001FF800001FF800001FF800001FF800001FF803C01FF803C01FF803C01FF803C01 FF803C01FF803C01FF803C01FF803C00FF807800FFC078007FC070003FE0E0001FFFC00007FF80 0001FF00>30 55 2 0 38]116 dc dfe /fe df[<3078F87870>5 5 4 0 13]46 dc[<000C001C 00FC0F380038003800380038003800700070007000700070007000E000E000E000E000E000E001 C001C001C001C001C001C0038003C0FFFE>15 30 4 0 23]49 dc[<003F8000C1E00100F00200 780400780400780F007C0F807C0F807C0F00780600780000F80000F00001E00001C00003800007 00000E00001C0000380000600000C0000180000300200600200800401000403FFFC07FFF80FFFF 80>22 30 2 0 23]50 dc[<0000100000001800000038000000380000007800000078000000FC 000001BC0000013C0000033C0000023C0000063C0000043E0000081E0000081E0000101E000010 1E0000201E0000200F0000400F0000400F0000FFFF0000800F0001000F80010007800200078002 00078004000780040007800C0007C03E0007C0FF807FFC>30 32 2 0 34]65 dc[<0001F80800 0E061800380138007000F801E0007803C0007007800030078000300F0000301F0000301E000030 3E0000203C0000007C0000007C0000007C0000007C000000F8000000F8000000F8000000F80000 00F80000007800004078000080780000803C0000803C0001001C0002000E00020006000C000300 100001C0E000003F0000>29 33 5 1 33]67 dc[<07FFFF00007C01E0003C00F0003C00780078 003C0078003C0078001E0078001E0078001E0078001F00F0001F00F0001F00F0001F00F0001F00 F0001F00F0001F01E0001E01E0003E01E0003E01E0003E01E0003C01E0007C03C0007803C000F0 03C000F003C001E003C003C003C0078007800F0007803C00FFFFE000>32 31 2 0 35]68 dc[< 07FFFFF8007C0078003C0038003C00180078001800780008007800080078000800780008007808 0800F0100000F0100000F0100000F0300000FFF00000F0700001E0200001E0200001E0200001E0 200001E0000801E0001003C0001003C0001003C0002003C0002003C0006003C000C0078001C007 8007C0FFFFFF80>29 31 2 0 31]69 dc[<0001FC04000F030C003C009C0070007C00E0003C01 C0003803800018078000180F0000181F0000181E0000183E0000103C0000007C0000007C000000 7C0000007C000000F8000000F8000000F8007FFCF80003E0780001E0780001E0780003C0780003 C03C0003C03C0003C01C0003C00E0007C007000B800380118001E06080003F8000>30 33 5 1 36]71 dc[<07FFC7FFC0007C00F800003C007800003C007800007800F000007800F000007800F0 00007800F000007800F000007800F00000F001E00000F001E00000F001E00000F001E00000FFFF E00000F001E00001E003C00001E003C00001E003C00001E003C00001E003C00001E003C00003C0 07800003C007800003C007800003C007800003C007800003C007800007800F000007C00F8000FF F8FFF800>34 31 2 0 34]72 dc[<07FFE0007C00003C00003C00007800007800007800007800 00780000780000F00000F00000F00000F00000F00000F00001E00001E00001E00001E00001E000 01E00003C00003C00003C00003C00003C00003C00007800007C000FFFC00>19 31 1 0 16]73 dc[<07FFF000007E0000003C0000003C0000007800000078000000780000007800000078000000 78000000F0000000F0000000F0000000F0000000F0000000F0000001E0000001E0000001E00000 01E0000001E0008001E0010003C0010003C0010003C0030003C0020003C0060003C0060007801E 0007807C00FFFFFC00>25 31 2 0 28]76 dc[<07FC0000FFC0007C0000F800003C0001780000 3C00017800004E0002F000004E0002F000004E0004F000004E0004F000004E0008F000004E0008 F00000870011E00000870011E00000870021E00000870021E00000870041E00000838041E00001 038083C00001038083C00001038103C00001038203C0000101C203C0000101C403C0000201C407 80000201C80780000201C80780000201D00780000200F00780000600E00780000600E00F00000F 00C00F8000FFE0C1FFF800>42 31 2 0 42]77 dc[<07FC01FFC0003E003E00003E001800003E 001800004F001000004F001000004780100000478010000043C010000043C010000083C0200000 81E020000081E020000080F020000080F020000080782000010078400001007C400001003C4000 01003C400001001E400001001E400002000F800002000F800002000F8000020007800002000780 00060003800006000300000F00010000FFE0010000>34 31 2 0 34]78 dc[<0003F800001E0E 000038070000E0038001C001C003C001E0078000E00F0000F00F0000F01E0000F01E0000F83E00 00F83C0000F87C0000F87C0000F87C0000F87C0000F8F80001F0F80001F0F80001F0F80001F0F8 0003E0780003E0780003C0780007C07C0007803C000F003C001E001E001C000E0038000700F000 03C3C00000FE0000>29 33 5 1 35]79 dc[<07FFFF00007C03C0003C01E0003C00F0007800F0 007800F8007800F8007800F8007800F8007800F000F001F000F001E000F003C000F0078000F00F 0000FFF80001E0000001E0000001E0000001E0000001E0000001E0000003C0000003C0000003C0 000003C0000003C0000003C000000780000007C00000FFFC0000>29 31 2 0 31]80 dc[<07FF FC00007C0700003C03C0003C01E0007801E0007801F0007801F0007801F0007801F0007801E000 F003E000F003C000F0078000F00F0000F03C0000FFF00001E0300001E0380001E01C0001E01C00 01E01C0001E01E0003C03E0003C03E0003C03E0003C03E0003C03E0003C03E0207803E0407C01F 04FFFC0F18000003E0>31 32 2 1 33]82 dc[<003F040060CC01803C03801C03001C07001806 00080E00080E00080E00080E00000F00000F80000FE00007FE0003FF8001FFC0007FE00007E000 01E00000E00000F00000F04000E04000E04000E04000E06000C0600180E00380F80300C60C0081 F800>22 33 3 1 25]83 dc[<3FFFFFF03C0780F03007803060078030400F0010400F0010C00F 0010800F0010800F0010800F0010001E0000001E0000001E0000001E0000001E0000001E000000 3C0000003C0000003C0000003C0000003C0000003C000000780000007800000078000000780000 007800000078000000F0000001F800007FFFE000>28 31 6 0 33]84 dc[29 32 7 1 34]85 dc dfe /ff df[<70F8F8F870>5 5 4 0 13]58 dc dfe /fg df[< 000000003FFE00000E0000000FFFFFC0001E0000007FFFFFF8003E000003FFFFFFFE00FE00000F FFFFFFFF81FE00003FFFF800FFC3FE0000FFFF80000FF7FE0001FFFC000003FFFE0007FFF00000 01FFFE000FFFC00000007FFE001FFF800000003FFE003FFF000000001FFE007FFE000000000FFE 00FFFC0000000007FE01FFF80000000007FE03FFF00000000003FE03FFF00000000001FE07FFE0 0000000001FE07FFE00000000000FE0FFFC00000000000FE0FFFC000000000007E1FFFC0000000 00007E1FFF8000000000007E3FFF8000000000007E3FFF8000000000003E3FFF8000000000003E 7FFF8000000000003E7FFF0000000000003E7FFF000000000000007FFF00000000000000FFFF00 000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000 000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000 FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF000000000000007FFF00 0000000000007FFF000000000000007FFF000000000000007FFF8000000000003E3FFF80000000 00003E3FFF8000000000003E3FFF8000000000003E1FFF8000000000003E1FFFC000000000003E 0FFFC000000000007C0FFFC000000000007C07FFE000000000007C07FFE00000000000F803FFF0 0000000000F803FFF00000000001F801FFF80000000001F000FFFC0000000003E0007FFE000000 0007E0003FFF000000000FC0001FFF800000001F80000FFFC00000003F000007FFF0000000FE00 0001FFFC000001FC000000FFFF80000FF80000003FFFF8007FF00000000FFFFFFFFFC000000003 FFFFFFFF00000000007FFFFFFC00000000000FFFFFE00000000000003FFE000000>71 73 7 1 86]67 dc[65 70 4 0 75]70 dc[39 71 3 0 45]73 dc[61 71 4 0 71]76 dc[104 71 4 0 113]77 dc[<00007FF00007000007 FFFF000F00001FFFFFC01F00007FFFFFF03F0000FFFFFFFC7F0003FFC00FFEFF0007FE0000FFFF 0007FC00003FFF000FF000001FFF001FF0000007FF001FE0000003FF003FE0000001FF003FC000 0001FF007FC0000000FF007FC00000007F007FC00000007F00FFC00000003F00FFC00000003F00 FFC00000003F00FFE00000003F00FFE00000001F00FFF00000001F00FFF80000001F00FFFC0000 001F00FFFF00000000007FFFC0000000007FFFFE000000007FFFFFE00000003FFFFFFF0000003F FFFFFFF000001FFFFFFFFC00001FFFFFFFFF00000FFFFFFFFFC00007FFFFFFFFE00007FFFFFFFF F00003FFFFFFFFF80000FFFFFFFFFC00007FFFFFFFFE00003FFFFFFFFE00000FFFFFFFFF000001 FFFFFFFF0000003FFFFFFF80000001FFFFFF800000000FFFFFC000000000FFFFC0000000001FFF C0000000000FFFE00000000007FFE00000000003FFE07800000001FFE0F800000000FFE0F80000 0000FFE0F8000000007FE0F8000000007FE0F8000000007FE0FC000000007FE0FC000000007FC0 FC000000007FC0FE000000007FC0FE000000007F80FF00000000FF80FF80000000FF80FFC00000 00FF00FFE0000001FE00FFF8000003FE00FFFE000007FC00FFFF80000FF800FFFFFC007FF000FE 3FFFFFFFE000FC0FFFFFFF8000F803FFFFFF0000F0007FFFF80000E00003FFC00000>51 73 7 1 66]83 dc[<3FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF003FFFFFFF FFFFFFFFFF003FFFFFFFFFFFFFFFFF003FFF0003FFF8003FFF007FF80003FFF80007FF807FE000 03FFF80001FF807FC00003FFF80000FF807F800003FFF800007F807F000003FFF800003F807F00 0003FFF800003F807E000003FFF800001F807E000003FFF800001F807E000003FFF800000F807C 000003FFF800000F807C000003FFF800000F807C000003FFF800000F807C000003FFF800000F80 FC000003FFF800000FC0F8000003FFF8000007C0F8000003FFF8000007C0F8000003FFF8000007 C0F8000003FFF8000007C0F8000003FFF8000007C000000003FFF80000000000000003FFF80000 000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800 00000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8 0000000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FF F80000000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003 FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000000000 03FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8000000000000 0003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000000000 000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000 00000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8000000 0000000003FFF80000000000000003FFF80000000000000003FFF8000000000003FFFFFFFFFFF8 00000003FFFFFFFFFFF800000003FFFFFFFFFFF800000003FFFFFFFFFFF800000003FFFFFFFFFF F80000>74 70 4 0 83]84 dc[<0007FFFC000000007FFFFFC0000001FFFFFFF8000003FFFFFF FE000007FE001FFF000007FF0003FFC0000FFF8001FFE0000FFF8000FFF0000FFF80007FF0000F FF80007FF8000FFF80007FF80007FF00003FFC0007FF00003FFC0003FE00003FFC0000F800003F FC00000000003FFC00000000003FFC00000000003FFC00000000003FFC00000007FFFFFC000000 FFFFFFFC000007FFFFFFFC00003FFFE03FFC0000FFFE003FFC0003FFF0003FFC0007FFC0003FFC 000FFF00003FFC001FFE00003FFC003FFC00003FFC007FF800003FFC007FF800003FFC00FFF000 003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000007FFC00 7FF80000FFFC007FF80001EFFC003FFC0003EFFC003FFF0007CFFF000FFFC03F8FFFF807FFFFFF 07FFFC01FFFFFC03FFFC007FFFF001FFFC0003FF80007FF8>54 46 3 0 58]97 dc[<007FC000 00000000FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC0 000000000003FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FF C0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001 FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000000000 01FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000000000 0001FFC0000000000001FFC00FFC00000001FFC07FFFC0000001FFC3FFFFF0000001FFCFFFFFFC 000001FFDFF00FFF000001FFFF8003FF800001FFFE0001FFC00001FFF800007FE00001FFF00000 7FF00001FFE000003FF80001FFE000001FFC0001FFE000001FFC0001FFE000001FFE0001FFE000 001FFE0001FFE000000FFF0001FFE000000FFF0001FFE000000FFF0001FFE000000FFF0001FFE0 00000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FF E000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001 FFE000000FFF0001FFE000000FFF0001FFE000000FFF0001FFE000001FFE0001FFE000001FFE00 01FFE000001FFC0001FFE000001FFC0001FFE000003FF80001FFF000003FF80001FFF800007FF0 0001FFFC0000FFE00001FFFE0001FFC00001FFBF0007FF800001FF1FE01FFE000001FE0FFFFFFC 000001FC03FFFFF0000001F800FFFF80000001F0001FF8000000>57 72 4 0 66]98 dc[<0000 1FFFC0000000FFFFF8000007FFFFFE00001FFFFFFF80007FFC00FFC000FFE001FFC001FFC003FF E003FF8003FFE007FF0003FFE00FFE0003FFE00FFE0003FFE01FFC0001FFC01FFC0001FFC03FFC 0000FF803FFC00003E007FF8000000007FF8000000007FF800000000FFF800000000FFF8000000 00FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF8 00000000FFF8000000007FF8000000007FF8000000007FFC000000003FFC000000003FFC000000 001FFC000000F81FFE000000F80FFE000000F80FFF000001F007FF800003F003FFC00007E001FF E0000FC000FFF0001F80007FFE00FF00001FFFFFFE000007FFFFF8000000FFFFE00000001FFE00 00>45 46 4 0 53]99 dc[<00000000007FC00000000000FFFFC00000000000FFFFC000000000 00FFFFC00000000000FFFFC00000000000FFFFC0000000000003FFC0000000000001FFC0000000 000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000 00000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000 0000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0 000000000001FFC0000000000001FFC0000000000001FFC00000000FFC01FFC0000000FFFF81FF C0000007FFFFE1FFC000001FFFFFF9FFC000007FFC03FFFFC00000FFF0007FFFC00001FFC0001F FFC00003FF80000FFFC00007FF000007FFC0000FFE000003FFC0000FFE000003FFC0001FFC0000 03FFC0001FFC000003FFC0003FFC000003FFC0003FFC000003FFC0007FF8000003FFC0007FF800 0003FFC0007FF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8 000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FF F8000003FFC000FFF8000003FFC0007FF8000003FFC0007FF8000003FFC0007FF8000003FFC000 3FF8000003FFC0003FFC000003FFC0003FFC000003FFC0001FFC000003FFC0001FFC000003FFC0 000FFE000007FFC00007FF00000FFFC00003FF00001FFFC00001FFC0003FFFC00000FFE000FFFF E000007FF807FBFFFF80001FFFFFF3FFFF800007FFFFC3FFFF800001FFFF03FFFF8000001FF803 FFFF80>57 72 4 0 66]100 dc[<00001FFE00000001FFFFE0000007FFFFF800001FFFFFFE0000 7FFC07FF0000FFE001FF8001FFC0007FC003FF80003FE007FF00003FF00FFE00001FF01FFE0000 0FF81FFC00000FF83FFC00000FFC3FFC000007FC7FFC000007FC7FF8000007FC7FF8000007FE7F F8000007FEFFF8000007FEFFF8000007FEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFF FFFCFFF800000000FFF800000000FFF800000000FFF8000000007FF8000000007FF8000000007F FC000000003FFC000000003FFC000000003FFC0000001C1FFE0000003E0FFE0000003E07FF0000 007E07FF000000FC03FF800001F801FFC00003F0007FF0001FE0003FFE00FFC0001FFFFFFF8000 07FFFFFE000000FFFFF80000000FFF8000>47 46 3 0 54]101 dc[<000000FFC000000007FFF8 0000003FFFFC000000FFFFFF000001FFC1FF000007FF03FF80000FFC03FF80000FF807FFC0001F F807FFC0003FF007FFC0003FF007FFC0003FE003FF80007FE003FF80007FE001FF00007FE000FE 00007FE0003800007FE0000000007FE0000000007FE0000000007FE0000000007FE0000000007F E0000000007FE0000000007FE0000000007FE0000000007FE0000000FFFFFFFE0000FFFFFFFE00 00FFFFFFFE0000FFFFFFFE0000FFFFFFFE0000007FF0000000007FF0000000007FF0000000007F F0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF00000 00007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007F F0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF00000 00007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007F F0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF00000 003FFFFFF800003FFFFFF800003FFFFFF800003FFFFFF800003FFFFFF80000>42 72 3 0 36] 102 dc[<00000000001F8000007FF000FFE00007FFFF03FFF0001FFFFFC7FFF0007FFFFFFFC7F8 00FFE03FFE0FF801FF800FFC0FF803FF0007FE0FF807FE0003FF07F007FE0003FF07F00FFC0001 FF81C00FFC0001FF80000FFC0001FF80001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001F FC0001FFC0001FFC0001FFC0001FFC0001FFC0000FFC0001FF80000FFC0001FF80000FFC0001FF 800007FE0003FF000007FE0003FF000003FF0007FE000001FF800FFC000000FFE03FF8000001FF FFFFF0000001DFFFFFC0000003C7FFFF00000003C07FF000000007C0000000000007C000000000 0007C0000000000007C0000000000007E0000000000007F0000000000007F8000000000007FFFF FFF0000007FFFFFFFF000003FFFFFFFFE00003FFFFFFFFF80001FFFFFFFFFE0001FFFFFFFFFF00 00FFFFFFFFFF80007FFFFFFFFF8003FFFFFFFFFFC00FFFFFFFFFFFC01FF800001FFFE03FE00000 01FFE07FC00000007FF07FC00000003FF0FF800000001FF0FF800000001FF0FF800000001FF0FF 800000001FF0FF800000001FF07FC00000003FE07FC00000003FE03FE00000007FC03FF0000000 FFC01FFC000003FF800FFF00000FFF0003FFF000FFFC0000FFFFFFFFF000003FFFFFFFC0000007 FFFFFE000000003FFFC00000>53 68 3 21 59]103 dc[<007FC00000000000FFFFC000000000 00FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC0000000000003FFC0000000 000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000 00000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000 0000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0 000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FF C001FFC0000001FFC00FFFF8000001FFC03FFFFE000001FFC0FFFFFF000001FFC1FC07FF800001 FFC3E003FFC00001FFC7C001FFC00001FFCF0001FFE00001FFDE0000FFE00001FFDC0000FFE000 01FFFC0000FFF00001FFF80000FFF00001FFF00000FFF00001FFF00000FFF00001FFF00000FFF0 0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000 FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE000 00FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE0 0000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF E00000FFF00001FFE00000FFF000FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FF FFFFC07FFFFFE0FFFFFFC07FFFFFE0>59 72 4 0 66]104 dc[<00FC0001FF0003FF8007FFC00F FFC01FFFE01FFFE01FFFE01FFFE01FFFE01FFFE00FFFC007FFC003FF8001FF0000FC0000000000 0000000000000000000000000000000000000000000000000000000000007FC0FFFFC0FFFFC0FF FFC0FFFFC0FFFFC003FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001 FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001 FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0FFFFFFFF FFFFFFFFFFFFFFFFFFFFFF>24 73 4 0 32]105 dc[<007FC000FFFFC000FFFFC000FFFFC000FF FFC000FFFFC00003FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001 FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 0001FFC00001FFC00001FFC00001FFC000FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF80>25 72 4 0 32]108 dc[<007FC001FFC00000FFE00000FFFFC00FFFF80007FFFC0000FFFFC03FFFFE 001FFFFF0000FFFFC0FFFFFF007FFFFF8000FFFFC1FC07FF80FE03FFC000FFFFC3E003FFC1F001 FFE00003FFC7C001FFC3E000FFE00001FFCF0001FFE78000FFF00001FFDE0000FFEF00007FF000 01FFDC0000FFEE00007FF00001FFFC0000FFFE00007FF80001FFF80000FFFC00007FF80001FFF0 0000FFF800007FF80001FFF00000FFF800007FF80001FFF00000FFF800007FF80001FFE00000FF F000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF00000 7FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800 01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE0 0000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FF F000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF00000 7FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800 01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE0 0000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800FFFFFFC07FFF FFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03F FFFFF0FFFFFFC07FFFFFE03FFFFFF0>92 46 4 0 99]109 dc[<007FC001FFC00000FFFFC00FFF F80000FFFFC03FFFFE0000FFFFC0FFFFFF0000FFFFC1FC07FF8000FFFFC3E003FFC00003FFC7C0 01FFC00001FFCF0001FFE00001FFDE0000FFE00001FFDC0000FFE00001FFFC0000FFF00001FFF8 0000FFF00001FFF00000FFF00001FFF00000FFF00001FFF00000FFF00001FFE00000FFF00001FF E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001 FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000 01FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF0 0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000 FFF000FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC0 7FFFFFE0>59 46 4 0 66]110 dc[<00000FFF0000000000FFFFF000000007FFFFFE0000001FFF FFFF8000003FFC03FFC00000FFE0007FF00001FF80001FF80003FF00000FFC0007FE000007FE00 0FFE000007FF000FFC000003FF001FFC000003FF803FFC000003FFC03FF8000001FFC03FF80000 01FFC07FF8000001FFE07FF8000001FFE07FF8000001FFE0FFF8000001FFF0FFF8000001FFF0FF F8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001 FFF0FFF8000001FFF0FFF8000001FFF07FF8000001FFE07FF8000001FFE07FF8000001FFE07FF8 000001FFE03FFC000003FFC03FFC000003FFC01FFC000003FF801FFE000007FF800FFE000007FF 0007FF00000FFE0003FF80001FFC0001FFC0003FF80000FFE0007FF000007FFC03FFE000001FFF FFFF80000007FFFFFE00000000FFFFF0000000000FFF000000>52 46 3 0 59]111 dc[<00FF80 3F8000FFFF80FFF000FFFF83FFFC00FFFF87FFFE00FFFF8FC3FF00FFFF8F07FF0003FF9E0FFF80 01FFBC0FFF8001FFB80FFF8001FFF80FFF8001FFF00FFF8001FFF007FF0001FFF007FF0001FFE0 03FE0001FFE000F80001FFE000000001FFE000000001FFC000000001FFC000000001FFC0000000 01FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0 00000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0000000 01FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0 00000001FFC0000000FFFFFFE00000FFFFFFE00000FFFFFFE00000FFFFFFE00000FFFFFFE00000 >41 46 4 0 49]114 dc[<000FFF00E0007FFFF3E001FFFFFFE007FFFFFFE00FF800FFE01FC000 1FE03F80000FE03F000007E07F000003E07F000003E0FF000003E0FF000003E0FF800003E0FFC0 000000FFF0000000FFFE000000FFFFF800007FFFFFC0007FFFFFF0003FFFFFFC001FFFFFFF000F FFFFFF8007FFFFFFC003FFFFFFE000FFFFFFF0003FFFFFF00003FFFFF800001FFFF8000000FFFC 0000001FFC7800000FFCF8000007FCF8000003FCFC000003FCFC000003FCFE000003F8FE000003 F8FF000003F8FF800007F0FFC0000FF0FFF0001FE0FFFC00FFC0FFFFFFFF80FC7FFFFE00F81FFF F800E003FF8000>38 46 4 0 47]115 dc[<0001F000000001F000000001F000000001F0000000 01F000000001F000000003F000000003F000000003F000000007F000000007F000000007F00000 000FF00000000FF00000001FF00000003FF00000003FF00000007FF0000001FFF0000003FFF000 000FFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC000FFF0000000FFF0000000FFF0 000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FF F0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000 FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF001F000FFF001F000FFF001F0 00FFF001F000FFF001F000FFF001F000FFF001F000FFF001F000FFF001F0007FF001E0007FF803 E0003FF803E0003FFC07C0001FFE0F80000FFFFF800007FFFE000001FFFC0000001FF000>36 66 2 0 46]116 dc[<007FE000003FF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE0007FFFF0 00FFFFE0007FFFF000FFFFE0007FFFF00003FFE00001FFF00001FFE00000FFF00001FFE00000FF F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000 FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE000 00FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE0 0000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001 FFE00001FFF00001FFE00001FFF00001FFE00001FFF00001FFE00003FFF00000FFE00007FFF000 00FFE0000F7FF000007FE0001F7FF000007FF0003E7FF800003FFC00FC7FFFE0001FFFFFF87FFF E00007FFFFE07FFFE00001FFFF807FFFE000003FFE007FFFE0>59 46 4 0 66]117 dc dfe /fh df[<387CFEFEFE7C38>7 7 4 0 16]46 dc[<00180000780001F800FFF800FFF80001F80001F8 0001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8 0001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8007FFFE07FFFE0>19 32 4 0 28]49 dc[<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01F87C01F8 3803F80003F80003F00003F00007E00007C0000F80001F00003E0000380000700000E01801C018 0380180700180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF0>21 32 3 0 28]50 dc[<00 0070000000007000000000F800000000F800000000F800000001FC00000001FC00000003FE0000 0003FE00000003FE00000006FF000000067F0000000E7F8000000C3F8000000C3F800000183FC0 0000181FC00000381FE00000300FE00000300FE00000600FF000006007F00000E007F80000FFFF F80000FFFFF800018001FC00018001FC00038001FE00030000FE00030000FE000600007F000600 007F00FFE00FFFF8FFE00FFFF8>37 34 2 0 42]65 dc[<01FC0407FF8C1F03FC3C007C7C003C 78001C78001CF8000CF8000CFC000CFC0000FF0000FFE0007FFF007FFFC03FFFF01FFFF80FFFFC 03FFFE003FFE0003FF00007F00003F00003FC0001FC0001FC0001FE0001EE0001EF0003CFC003C FF00F8C7FFE080FF80>24 34 3 0 31]83 dc[<7FFFFFFF807FFFFFFF807E03F80F807803F807 807003F803806003F80180E003F801C0E003F801C0C003F800C0C003F800C0C003F800C0C003F8 00C00003F800000003F800000003F800000003F800000003F800000003F800000003F800000003 F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8000000 03F800000003F800000003F800000003F800000003F8000003FFFFF80003FFFFF800>34 34 2 0 39]84 dc[<07FC001FFF803F07C03F03E03F01E03F01F01E01F00001F00001F0003FF003FDF01F C1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF87F07E03F>24 22 2 0 27] 97 dc[<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000FC0000FC0000FC0000FC00 00FC0000FC00007C00007E00007E00003E00301F00600FC0E007FF8000FE00>20 22 2 0 25] 99 dc[<0001FE000001FE0000003E0000003E0000003E0000003E0000003E0000003E0000003E 0000003E0000003E0000003E0000003E0001FC3E0007FFBE000F81FE001F007E003E003E007E00 3E007C003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E007C 003E007C003E003E007E001E00FE000F83BE0007FF3FC001FC3FC0>26 35 2 0 31]100 dc[<00 FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC 00007C00007C00007E00003E00181F00300FC07003FFC000FF00>21 22 2 0 26]101 dc[<03FC 1E0FFF7F1F0F8F3E07CF3C03C07C03E07C03E07C03E07C03E07C03E03C03C03E07C01F0F801FFF 0013FC003000003000003800003FFF801FFFF00FFFF81FFFFC3800FC70003EF0001EF0001EF000 1EF0001E78003C7C007C3F01F80FFFE001FF00>24 33 2 11 28]103 dc[26 35 2 0 31]104 dc[26 35 2 0 30]107 dc[11 35 2 0 16]108 dc[43 22 2 0 48]109 dc[26 22 2 0 31]110 dc[<00FE0007FFC00F 83E01E00F03E00F87C007C7C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C 007C7C007C3E00F81F01F00F83E007FFC000FE00>23 22 2 0 28]111 dc[19 22 2 0 23]114 dc[<0FF3003FFF00781F00 600700E00300E00300F00300FC00007FE0007FF8003FFE000FFF0001FF00000F80C00780C00380 E00380E00380F00700FC0E00EFFC00C7F000>17 22 2 0 22]115 dc[<01800001800001800001 80000380000380000780000780000F80003F8000FFFF00FFFF000F80000F80000F80000F80000F 80000F80000F80000F80000F80000F80000F80000F81800F81800F81800F81800F81800F830007 C30003FE0000F800>17 32 1 0 22]116 dc[37 22 1 0 40]119 dc dfe /fi df[<00003F03E00000C38670 0001878CF00003879CF00003031860000700380000070038000007003800000E003800000E0070 00000E007000000E00700000FFFFFF80001C007000001C00E000001C00E000001C00E000001C00 E000003800E000003801C000003801C000003801C000003801C000007001C00000700380000070 03800000700380000070038000006003800000E007000000E007000000E007000000E007000000 C006000001C00E000001C00E000031860C0000798F180000F31E100000620C6000003C07C00000 >36 41 -2 9 28]11 dc[<7FF0FFE07FE0>12 3 3 -8 16]45 dc[<000200020006000E003C00 DC031C001C0038003800380038007000700070007000E000E000E000E001C001C001C001C00380 0380038003800780FFF8>15 30 5 0 23]49 dc[<01FFFF80001E00E0001E0070001E0038001E 001C003C001C003C000E003C000E003C000E0078000E0078000E0078000E0078000E00F0001E00 F0001E00F0001E00F0001E01E0003C01E0003C01E0003C01E0007803C0007003C0007003C000E0 03C001C0078001C00780038007800E0007801C000F007000FFFFC000>31 31 3 0 34]68 dc[< 01FFF3FFE0001F003E00001E003C00001E003C00001E003C00003C007800003C007800003C0078 00003C007800007800F000007800F000007800F000007800F00000F001E00000FFFFE00000F001 E00000F001E00001E003C00001E003C00001E003C00001E003C00003C007800003C007800003C0 07800003C007800007800F000007800F000007800F000007800F00000F801F0000FFF1FFE000> 35 31 3 0 34]72 dc[<0007E040001C18C0003005800060038000C0038001C001800180010003 80010003800100038001000380000003C0000003C0000003F8000001FF800001FFE000007FF000 001FF0000001F80000007800000078000000380000003800200038002000380020003000600070 00600060006000E0007000C000E8038000C606000081F80000>26 33 3 1 26]83 dc[<0FFFFF F01E0780E0180780201007802020078020200F0020600F0020400F0020400F0020801E0040001E 0000001E0000001E0000003C0000003C0000003C0000003C000000780000007800000078000000 78000000F0000000F0000000F0000000F0000001E0000001E0000001E0000001E0000003E00000 FFFF0000>28 31 8 0 33]84 dc[<00F1800389C00707800E03801C03803C0380380700780700 780700780700F00E00F00E00F00E00F00E20F01C40F01C40703C40705C40308C800F0700>19 20 4 0 23]97 dc[<07803F8007000700070007000E000E000E000E001C001C001CF01D0C3A0E3C0E 380F380F700F700F700F700FE01EE01EE01EE01CE03CE038607060E031C01F00>16 32 5 0 21] 98 dc[<007E0001C1000300800E07801E07801C07003C0200780000780000780000F00000F000 00F00000F00000F0000070010070020030040018380007C000>17 20 4 0 21]99 dc[<000078 0003F80000700000700000700000700000E00000E00000E00000E00001C00001C000F1C00389C0 0707800E03801C03803C0380380700780700780700780700F00E00F00E00F00E00F00E20F01C40 F01C40703C40705C40308C800F0700>21 32 4 0 23]100 dc[<007C01C207010E011C013C0138 02780C7BF07C00F000F000F000F0007000700170023804183807C0>16 20 4 0 21]101 dc[<00 3C6000E27001C1E00380E00700E00F00E00E01C01E01C01E01C01E01C03C03803C03803C03803C 03803C07003C07001C0F001C17000C2E0003CE00000E00000E00001C00001C00301C00783800F0 700060E0003F8000>20 29 2 9 21]103 dc[<01E0000FE00001C00001C00001C00001C0000380 00038000038000038000070000070000071E000763000E81800F01C00E01C00E01C01C03801C03 801C03801C0380380700380700380700380E10700E20700C20701C20700C40E00CC0600700>20 32 3 0 23]104 dc[<00C001E001E001C000000000000000000000000000000E00330023004380 4300470087000E000E000E001C001C001C003840388030807080310033001C00>11 31 4 0 14] 105 dc[<01E0000FE00001C00001C00001C00001C0000380000380000380000380000700000700 000703C00704200E08E00E11E00E21E00E40C01C80001D00001E00001FC00038E0003870003870 00383840707080707080707080703100E03100601E00>19 32 3 0 21]107 dc[<03C01FC00380 03800380038007000700070007000E000E000E000E001C001C001C001C00380038003800380070 00700070007100E200E200E200E20064003800>10 32 4 0 12]108 dc[<1C0F80F0002630C318 004740640C004780680E004700700E004700700E008E00E01C000E00E01C000E00E01C000E00E0 1C001C01C038001C01C038001C01C038001C01C0708038038071003803806100380380E1003803 80620070070066003003003800>33 20 4 0 37]109 dc[<1C0F802630C0474060478060470070 4700708E00E00E00E00E00E00E00E01C01C01C01C01C01C01C0384380388380308380708380310 7003303001C0>22 20 4 0 26]110 dc[<007C0001C3000301800E01C01E01C01C01E03C01E078 01E07801E07801E0F003C0F003C0F003C0F00780F00700700F00700E0030180018700007C000> 19 20 4 0 23]111 dc[<01C1E002621804741C04781C04701E04701E08E01E00E01E00E01E00 E01E01C03C01C03C01C03C01C0380380780380700380E003C1C0072380071E000700000700000E 00000E00000E00000E00001C00001C0000FFC000>23 29 0 9 23]112 dc[<1C1E002661004783 804787804707804703008E00000E00000E00000E00001C00001C00001C00001C00003800003800 00380000380000700000300000>17 20 4 0 19]114 dc[<00FC030206010C030C070C060C000F 800FF007F803FC003E000E700EF00CF00CE008401020601F80>16 20 3 0 19]115 dc[<018001 C0038003800380038007000700FFF007000E000E000E000E001C001C001C001C00380038003800 3820704070407080708031001E00>12 28 4 0 15]116 dc[<0E00C03300E02301C04381C04301 C04701C08703800E03800E03800E03801C07001C07001C07001C07101C0E20180E20180E201C1E 200C264007C380>20 20 4 0 24]117 dc[<0E03803307802307C04383C04301C04700C0870080 0E00800E00800E00801C01001C01001C01001C02001C02001C04001C04001C08000E300003C000 >18 20 4 0 21]118 dc[<0E00C1C03300E3C02301C3E04381C1E04301C0E04701C06087038040 0E0380400E0380400E0380401C0700801C0700801C0700801C0701001C0701001C0602001C0F02 000C0F04000E13080003E1F000>27 20 4 0 30]119 dc[<0383800CC4401068E01071E02071E0 2070C040E00000E00000E00000E00001C00001C00001C00001C040638080F38080F38100E58100 84C600787800>19 20 3 0 21]120 dc[<0E00C03300E02301C04381C04301C04701C08703800E 03800E03800E03801C07001C07001C07001C07001C0E00180E00180E001C1E000C3C0007DC0000 1C00001C00003800F03800F07000E06000C0C0004380003E0000>19 29 4 9 22]121 dc dfe /fj df[<01FC0007FF001F07C01E03C03E03E07C01F07C01F07C01F0FC01F8FC01F8FC01F8FC01 F8FC01F8FC01F8FC01F8FC01F8FC01F8FC01F8FC01F8FC01F8FC01F87C01F07C01F07C01F03E03 E01E03C01F8FC007FF0001FC00>21 29 2 0 26]48 dc[<00E00001E0000FE000FFE000F3E000 03E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E000 03E00003E00003E00003E00003E00003E00003E00003E00003E000FFFF80FFFF80>17 29 4 0 26]49 dc[<07F0001FFE00383F007C1F80FE0FC0FE0FC0FE0FE0FE07E07C07E03807E0000FE000 0FC0000FC0001F80001F00003E0000780000F00000E00001C0000380600700600E00601C00E01F FFC03FFFC07FFFC0FFFFC0FFFFC0>19 29 3 0 26]50 dc[<01FC0007FF000E0F801E0FC03F07 E03F07E03F07E03F07E01E0FC0000FC0000F80001F0001FC0001FC00000F800007C00003E00003 F00003F83803F87C03F8FE03F8FE03F8FE03F0FC03F07807E03C0FC01FFF8003FC00>21 29 2 0 26]51 dc[<0001C00003C00007C00007C0000FC0001FC0003BC00073C00063C000C3C00183C003 83C00703C00E03C00C03C01803C03803C07003C0E003C0FFFFFEFFFFFE0007C00007C00007C000 07C00007C00007C000FFFE00FFFE>23 29 1 0 26]52 dc[<3803803FFF803FFF003FFE003FFC 003FF0003F800030000030000030000030000033F80037FE003C1F00380F801007C00007C00007 E00007E07807E0FC07E0FC07E0FC07E0FC07C0780FC0600F80381F001FFC0007F000>19 29 3 0 26]53 dc[<003F0001FFC007E0E00F81E01F03F01E03F03E03F07C03F07C01E07C0000FC1000FC FF00FDFFC0FD03E0FE01F0FE01F0FC01F8FC01F8FC01F8FC01F87C01F87C01F87C01F83C01F03E 01F01E03E00F07C007FF8001FE00>21 29 2 0 26]54 dc[<6000007FFFF87FFFF87FFFF07FFF E07FFFC0E00180C00300C00300C00600000C0000180000380000380000780000700000F00000F0 0001F00001F00001F00001F00003F00003F00003F00003F00003F00003F00001E00000C000>21 30 3 0 26]55 dc[<01FC0007FF000F07801E03C01C01E03C01E03C01E03E01E03F01E03FC3C0 1FE3801FFF000FFE0007FF8007FFC01FFFE03C3FF0780FF07803F8F001F8F000F8F00078F00078 F000707800707C00E03E03C00FFF8003FC00>21 29 2 0 26]56 dc[<01FC000FFF001F07803E 03C07C03E07C01E0FC01F0FC01F0FC01F0FC01F8FC01F8FC01F8FC01F87C03F87C03F83E05F81F FDF807F9F80041F80001F03C01F07E01F07E03E07E03E07E07C03C0780381F001FFC0007F000> 21 29 2 0 26]57 dc[<387CFEFEFE7C38000000000000387CFEFEFE7C38>7 20 4 0 15]58 dc [<0000E000000000E000000001F000000001F000000001F000000003F800000003F800000006FC 00000006FC0000000EFE0000000C7E0000000C7E000000183F000000183F000000303F80000030 1F800000701FC00000600FC00000600FC00000C007E00000FFFFE00001FFFFF000018003F00001 8003F000030001F800030001F800060001FC00060000FC000E0000FE00FFE00FFFE0FFE00FFFE0 >35 31 2 0 40]65 dc[31 31 2 0 37]66 dc[<0007FC02003FFF0E00FE 03DE03F000FE07E0003E0FC0001E1F80001E3F00000E3F00000E7F0000067E0000067E000006FE 000000FE000000FE000000FE000000FE000000FE000000FE0000007E0000007E0000067F000006 3F0000063F00000C1F80000C0FC0001807E0003803F0007000FE01C0003FFF800007FC00>31 31 3 0 38]67 dc[34 31 2 0 40]68 dc[30 31 2 0 34]69 dc[16 31 2 0 20]73 dc[36 31 2 0 41]75 dc[ 45 31 2 0 50] 77 dc[36 31 2 0 41]78 dc[<001FF80000FFFF0001F81F8007E007E00FC003F01F8001F81F 0000F83F0000FC7F0000FE7E00007E7E00007EFE00007FFE00007FFE00007FFE00007FFE00007F FE00007FFE00007FFE00007FFE00007F7E00007E7F0000FE7F0000FE3F0000FC3F8001FC1F8001 F80FC003F007E007E001F81F8000FFFF00001FF800>32 31 3 0 39]79 dc[30 31 2 0 36]80 dc[36 31 2 0 39]82 dc[<03FC080FFF381E03F83800F8700078700038 F00038F00018F00018F80000FC00007FC0007FFE003FFF801FFFE00FFFF007FFF000FFF80007F8 0000FC00007C00003CC0003CC0003CC0003CE00038E00078F80070FE01E0E7FFC081FF00>22 31 3 0 29]83 dc[<7FFFFFFC7FFFFFFC7C07E07C7007E01C6007E00C6007E00CE007E00EC007E006 C007E006C007E006C007E0060007E0000007E0000007E0000007E0000007E0000007E0000007E0 000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007 E00003FFFFC003FFFFC0>31 30 2 0 36]84 dc[35 31 2 0 40]85 dc[51 31 1 0 54]87 dc[<07FC001FFF003F0F803F07C03F03 E03F03E00C03E00003E0007FE007FBE01F03E03C03E07C03E0F803E0F803E0F803E0FC05E07E0D E03FF8FE0FE07E>23 20 1 0 25]97 dc[24 32 2 0 29]98 dc[<01FE0007FF801F0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000FC00 00FC0000FC00007C00007E00003E00603F00C01F81C007FF0001FC00>19 20 2 0 23]99 dc[< 0007F80007F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F801F8F8 0FFEF81F83F83E01F87E00F87C00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00F8 7C00F87E00F83E01F81F07F80FFEFF03F8FF>24 32 2 0 29]100 dc[<01FE0007FF800F83C01E 01E03E00F07C00F07C00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00003E00181E 00180F807007FFE000FF80>21 20 1 0 24]101 dc[<001F8000FFC001F3E003E7E003C7E007C7 E007C3C007C00007C00007C00007C00007C000FFFC00FFFC0007C00007C00007C00007C00007C0 0007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0003FFC003FFC 00>19 32 1 0 16]102 dc[<01FC3C07FFFE0F079E1E03DE3E03E03E03E03E03E03E03E03E03E0 1E03C00F07800FFF0009FC001800001800001C00001FFF800FFFF007FFF81FFFFC3C007C70003E F0001EF0001EF0001E78003C78003C3F01F80FFFE001FF00>23 30 1 10 26]103 dc[24 32 3 0 29]104 dc[<1C003E003F007F003F003E001C 00000000000000000000000000FF00FF001F001F001F001F001F001F001F001F001F001F001F00 1F001F001F001F001F00FFE0FFE0>11 33 2 0 14]105 dc[11 32 2 0 14]108 dc[39 20 3 0 44]109 dc[24 20 3 0 29]110 dc[<01FF0007FFC01F83F03E00F83E00F87C007C7C007CFC007EFC007EFC007E FC007EFC007EFC007E7C007C7C007C3E00F83E00F81F83F007FFC001FF00>23 20 1 0 26]111 dc[24 29 2 9 29]112 dc[<01F81807FE381F87783F01F83E01F87E00 F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00F87E00F87E00F83F01F81F87F80FFE F803F8F80000F80000F80000F80000F80000F80000F80000F80007FF0007FF>24 29 2 9 28] 113 dc[18 20 2 0 22]114 dc[<0FE63F FE701E600EE006E006F800FFC07FF83FFC1FFE03FE001FC007C007E007F006F81EFFFCC7F0>16 20 2 0 21]115 dc[<01800180018003800380038007800F803F80FFFCFFFC0F800F800F800F80 0F800F800F800F800F800F800F860F860F860F860F8607CC03F801F0>15 29 1 0 20]116 dc[< FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8 1F00F81F00F81F01F81F01F80F06F807FCFF03F8FF>24 20 3 0 29]117 dc[25 20 1 0 28]118 dc[35 20 1 0 38]119 dc[< FFE07F80FFE07F801F001C000F8018000F80180007C0300007C0300003E0600003E0600001F0C0 0001F0C00001F9C00000F9800000FF8000007F0000007F0000003E0000003E0000001C0000001C 0000001800000018000078300000FC300000FC600000C0E00000E1C000007F8000001E000000> 25 29 1 9 28]121 dc dfe /fk df[<007E1F8001C170400703C060060380E00E0380400E0380 000E0380000E0380000E0380000E038000FFFFFFE00E0380E00E0380E00E0380E00E0380E00E03 80E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E07F 8FE3FC>30 26 0 0 32]14 dc[<00800100020004000C00080018003000300030006000600060 006000E000E000E000E000E000E000E000E000E000E00060006000600060003000300030001800 08000C000400020001000080>9 38 3 10 15]40 dc[<8000400020001000180008000C000600 060006000300030003000300038003800380038003800380038003800380038003000300030003 000600060006000C00080018001000200040008000>9 38 2 10 15]41 dc[<60F0F070101010 20204080>4 11 3 7 11]44 dc[10 2 0 -7 13]45 dc[<60F0F060>4 4 3 0 11] 46 dc[<0004000C00180018001800300030003000600060006000C000C000C001800180018003 00030003000600060006000C000C000C00180018001800300030003000600060006000C000C000 >14 37 2 9 19]47 dc[<078018603030303060186018E01CE01CE01CE01CE01CE01CE01CE01C E01CE01CE01CE01C601860187038303018600780>14 24 2 0 19]48 dc[<03000700FF000700 0700070007000700070007000700070007000700070007000700070007000700070007000700FF F0>12 24 3 0 19]49 dc[<0F80106020304038803CC01CE01C401C003C003800380070006000 C001800100020004040804100430083FF87FF8FFF8>14 24 2 0 19]50 dc[<0F8010E0207060 7870382038007800700070006000C00F8000E000700038003C003CE03CE03CC03C4038407030E0 0F80>14 24 2 0 19]51 dc[<30183FF03FE03FC02000200020002000200027C0386020300038 0018001C001C401CE01CE01C80184038403030E00F80>14 24 2 0 19]53 dc[<40007FFE7FFC 7FFC40088010801080200040004000800180018001000300030003000300070007000700070007 0007000200>15 25 2 0 19]55 dc[<078018603030201860186018601870103C303E600F8007 C019F030F86038401CC00CC00CC00CC00C6008201018600FC0>14 24 2 0 19]56 dc[<078018 60303070306018E018E018E01CE01CE01C601C603C303C185C0F9C001C00180018003870307060 604021801F00>14 24 2 0 19]57 dc[<000C0000000C0000000C0000001E0000001E0000003F 000000270000002700000043800000438000004380000081C0000081C0000081C0000100E00001 00E00001FFE000020070000200700006007800040038000400380008001C0008001C001C001E00 FF00FFC0>26 26 1 0 29]65 dc[<003F0201C0C603002E0E001E1C000E1C0006380006780002 700002700002F00000F00000F00000F00000F00000F000007000027000027800023800041C0004 1C00080E000803003001C0C0003F00>23 26 2 0 28]67 dc[24 26 2 0 29]68 dc[22 26 2 0 26]69 dc[30 26 2 0 35]77 dc[24 26 2 0 29]78 dc[<007F000001C1C000070070000E0038001C001C003C00 1E0038000E0078000F0070000700F0000780F0000780F0000780F0000780F0000780F0000780F0 000780F000078078000F0078000F0038000E003C001E001C001C000E0038000700700001C1C000 007F0000>25 26 2 0 30]79 dc[21 26 2 0 26]80 dc[25 26 2 0 28]82 dc[<0FC21836200E6006C006C002C002C0 02E00070007E003FE01FF807FC003E000E00070003800380038003C002C006E004D81887E0>16 26 2 0 21]83 dc[<7FFFFF00701C0700401C0100401C0100C01C0180801C0080801C0080801C 0080001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C000000 1C0000001C0000001C0000001C0000001C0000001C0000001C0000001C000003FFE000>25 26 1 0 28]84 dc[24 26 2 0 29]85 dc[26 26 1 0 29]86 dc[36 26 1 0 39]87 dc[< 7FC0FF000F003C0007003000078020000380600001C0400001E0800000E1800000710000007A00 00003C0000001C0000001E0000001E00000017000000278000004380000041C0000081E0000100 E0000100700002007800040038000C001C001E003E00FF80FFC0>26 26 1 0 29]88 dc[<3F80 70C070E020700070007007F01C7030707070E070E071E071E0F171FB1E3C>16 16 2 0 19]97 dc[18 26 1 0 21]98 dc[<07F80C1C381C30087000E000E000E000E000E000E00070003004 38080C1807E0>14 16 1 0 17]99 dc[<007E00000E00000E00000E00000E00000E00000E0000 0E00000E00000E0003CE000C3E00380E00300E00700E00E00E00E00E00E00E00E00E00E00E00E0 0E00600E00700E00381E001C2E0007CFC0>18 26 1 0 21]100 dc[<07C01C3030187018600CE0 0CFFFCE000E000E000E0006000300438080C1807E0>14 16 1 0 17]101 dc[<01F0031807380E 100E000E000E000E000E000E00FFC00E000E000E000E000E000E000E000E000E000E000E000E00 0E000E007FE0>13 26 0 0 12]102 dc[<0FCE187330307038703870387038303018602FC02000 600070003FF03FFC1FFE600FC003C003C003C0036006381C07E0>16 24 1 8 19]103 dc[18 26 1 0 21]104 dc[<18003C003C001800000000000000000000000000FC001C001C001C001C00 1C001C001C001C001C001C001C001C001C001C00FF80>9 26 0 0 10]105 dc[<018003C003C0 01800000000000000000000000000FC001C001C001C001C001C001C001C001C001C001C001C001 C001C001C001C001C001C001C041C0E180E3007E00>10 33 -2 7 12]106 dc[18 26 1 0 20]107 dc[9 26 0 0 10]108 dc[29 16 1 0 32]109 dc[18 16 1 0 21]110 dc[<07E01C38300C700E6006E007E007E007E007E007E0076006700E381C1C3807 E0>16 16 1 0 19]111 dc[18 23 1 7 21]112 dc[<03C2000C2600381E00300E00700E00E00E00E00E00E00E00E0 0E00E00E00E00E00700E00700E00381E001C2E0007CE00000E00000E00000E00000E00000E0000 0E00007FC0>18 23 1 7 20]113 dc[12 16 1 0 15]114 dc[<1F2060E04020C020C020F0007F003FC01FE000 F080708030C030C020F0408F80>12 16 1 0 15]115 dc[<0400040004000C000C001C003C00FF C01C001C001C001C001C001C001C001C001C201C201C201C201C200E400380>11 23 1 0 15] 116 dc[18 16 1 0 21]117 dc[17 16 1 0 20]118 dc[25 16 1 0 28] 119 dc[18 16 1 0 20]120 dc[17 23 1 7 20]121 dc dfe /fl df[<007E0001C18003 01800703C00E03C00E01800E00000E00000E00000E00000E0000FFFFC00E01C00E01C00E01C00E 01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07F 87F8>21 29 0 0 23]12 dc[<60F0F060>4 4 4 0 12]46 dc[<001F808000E061800180198007 0007800E0003801C0003801C00018038000180780000807800008070000080F0000000F0000000 F0000000F0000000F0000000F0000000F0000000F0000000700000807800008078000080380000 801C0001001C0001000E000200070004000180080000E03000001FC000>25 30 2 1 30]67 dc[ 27 28 2 0 32]68 dc[33 28 2 0 38]77 dc[ 23 28 2 0 28]80 dc[<07E0801C1980300580700380600180E00180E00080 E00080E00080F00000F800007C00007FC0003FF8001FFE0007FF0000FF80000F800007C00003C0 0001C08001C08001C08001C0C00180C00180E00300D00200CC0C0083F800>18 30 2 1 23]83 dc[26 29 2 1 31]85 dc[<1FC000307000783800781C00301C00001C00001C0001FC000F1C00 381C00701C00601C00E01C40E01C40E01C40603C40304E801F8700>18 18 2 0 21]97 dc[19 29 1 0 23]98 dc[<07E00C301878307870306000E000E000E000E000 E000E00060007004300418080C3007C0>14 18 2 0 18]99 dc[<003F00000700000700000700 00070000070000070000070000070000070000070003E7000C1700180F00300700700700600700 E00700E00700E00700E00700E00700E00700600700700700300700180F000C370007C7E0>19 29 2 0 23]100 dc[<03E00C301818300C700E6006E006FFFEE000E000E000E00060007002300218 040C1803E0>15 18 1 0 18]101 dc[<00F8018C071E061E0E0C0E000E000E000E000E000E00FF E00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE0>15 29 0 0 13]102 dc[<00038003C4C00C38C01C3880181800381C00381C00381C00381C001818001C38 000C300013C0001000003000001800001FF8001FFF001FFF803003806001C0C000C0C000C0C000 C06001803003001C0E0007F800>18 28 1 9 21]103 dc[20 29 1 0 23]104 dc[<18003C003C0018000000000000000000000000000000FC001C001C001C001C001C 001C001C001C001C001C001C001C001C001C001C001C00FF80>9 29 1 0 12]105 dc[9 29 1 0 12]108 dc[33 18 1 0 36]109 dc[20 18 1 0 23]110 dc[<03F0 000E1C00180600300300700380600180E001C0E001C0E001C0E001C0E001C0E001C06001807003 803003001806000E1C0003F000>18 18 1 0 21]111 dc[19 26 1 8 23]112 dc[<03C1000C 3300180B00300F00700700700700E00700E00700E00700E00700E00700E0070060070070070030 0F00180F000C370007C700000700000700000700000700000700000700000700003FE0>19 26 2 8 22]113 dc[13 18 1 0 16]114 dc[<1F9030704030C010C010E010F8007F803FE00FF000F88038 8018C018C018E010D0608FC0>13 18 1 0 16]115 dc[<04000400040004000C000C001C003C00 FFE01C001C001C001C001C001C001C001C001C001C101C101C101C101C100C100E2003C0>12 26 1 0 16]116 dc[20 18 1 0 23]117 dc[19 18 1 0 22]118 dc[19 26 1 8 22]121 dc dfe /fm df[<00 1F83E000F06E3001C078780380F8780300F0300700700007007000070070000700700007007000 0700700007007000FFFFFF80070070000700700007007000070070000700700007007000070070 000700700007007000070070000700700007007000070070000700700007007000070070000700 7000070070007FE3FF00>29 32 0 0 27]11 dc[<003F0000E0C001C0C00381E00701E00701E0 070000070000070000070000070000070000FFFFE00700E00700E00700E00700E00700E00700E0 0700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E07FC3FE >23 32 0 0 25]12 dc[<003FE000E0E001C1E00381E00700E00700E00700E00700E00700E007 00E00700E00700E0FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700E007 00E00700E00700E00700E00700E00700E00700E00700E00700E07FE7FE>23 32 0 0 25]13 dc[ <001F81F80000F04F040001C07C06000380F80F000300F00F000700F00F000700700000070070 00000700700000070070000007007000000700700000FFFFFFFF00070070070007007007000700 700700070070070007007007000700700700070070070007007007000700700700070070070007 007007000700700700070070070007007007000700700700070070070007007007000700700700 7FE3FE3FF0>36 32 0 0 38]14 dc[<001F81FF0000F06F070001C07C0F000380F80F000300F0 07000700700700070070070007007007000700700700070070070007007007000700700700FFFF FFFF00070070070007007007000700700700070070070007007007000700700700070070070007 007007000700700700070070070007007007000700700700070070070007007007000700700700 0700700700070070070007007007007FE3FE3FF0>36 32 0 0 38]15 dc[<7038F87CFC7EFC7E 743A040204020402080408041008100820104020>15 14 2 -18 23]34 dc[<70F8FCFC740404 04080810102040>6 14 4 -18 13]39 dc[<0020004000800100020006000C000C001800180030 00300030007000600060006000E000E000E000E000E000E000E000E000E000E000E000E0006000 600060007000300030003000180018000C000C00060002000100008000400020>11 46 3 12 18 ]40 dc[<800040002000100008000C00060006000300030001800180018001C000C000C000C000 E000E000E000E000E000E000E000E000E000E000E000E000C000C000C001C00180018001800300 0300060006000C0008001000200040008000>11 46 3 12 18]41 dc[<70F8FCFC740404040808 10102040>6 14 4 9 13]44 dc[10 2 1 -9 15]45 dc[<70F8F8F870>5 5 4 0 13 ]46 dc[<000100030003000600060006000C000C000C0018001800180030003000300060006000 6000C000C000C00180018001800300030003000600060006000C000C000C001800180018003000 30003000600060006000C000C000C000>16 45 3 11 23]47 dc[<03F0000E1C001C0E00180600 380700700380700380700380700380F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0 F003C0F003C0F003C0F003C0F003C07003807003807003807807803807001806001C0E000E1C00 03F000>18 31 2 1 23]48 dc[<018003800F80F3800380038003800380038003800380038003 8003800380038003800380038003800380038003800380038003800380038007C0FFFE>15 30 4 0 23]49 dc[<03F0000C1C00100E00200700400780800780F007C0F803C0F803C0F803C02007C0 0007C0000780000780000F00000E00001C0000380000700000600000C000018000030000060040 0C00401800401000803FFF807FFF80FFFF80>18 30 2 0 23]50 dc[<03F0000C1C00100E0020 0F00780F80780780780780380F80000F80000F00000F00000E00001C0000380003F000003C0000 0E00000F000007800007800007C02007C0F807C0F807C0F807C0F00780400780400F00200E001C 3C0003F000>18 31 2 1 23]51 dc[<000600000600000E00000E00001E00002E00002E00004E 00008E00008E00010E00020E00020E00040E00080E00080E00100E00200E00200E00400E00C00E 00FFFFF0000E00000E00000E00000E00000E00000E00000E0000FFE0>20 30 1 0 23]52 dc[< 1803001FFE001FFC001FF8001FE00010000010000010000010000010000010000011F000161C00 180E001007001007800003800003800003C00003C00003C07003C0F003C0F003C0E00380400380 400700200600100E000C380003E000>18 31 2 1 23]53 dc[<007C000182000701000E03800C 07801C0780380300380000780000700000700000F1F000F21C00F40600F80700F80380F80380F0 03C0F003C0F003C0F003C0F003C07003C07003C07003803803803807001807000C0E00061C0001 F000>18 31 2 1 23]54 dc[<4000007FFFC07FFF807FFF804001008002008002008004000008 0000080000100000200000200000400000400000C00000C00001C0000180000380000380000380 00038000078000078000078000078000078000078000078000030000>18 31 3 1 23]55 dc[< 03F0000C0C001006003003002001806001806001806001807001807803003E03003F06001FC800 0FF00003F80007FC000C7E00103F00300F806003804001C0C001C0C000C0C000C0C000C0C00080 6001802001001002000C0C0003F000>18 31 2 1 23]56 dc[<03F0000E18001C0C0038060038 0700700700700380F00380F00380F003C0F003C0F003C0F003C0F003C07007C07007C03807C018 0BC00E13C003E3C0000380000380000380000700300700780600780E00700C002018001070000F C000>18 31 2 1 23]57 dc[<70F8F8F8700000000000000000000070F8F8F870>5 20 4 0 13] 58 dc[<70F8F8F8700000000000000000000070F0F8F878080808101010202040>5 29 4 9 13] 59 dc[<000100000003800000038000000380000007C0000007C0000007C0000009E0000009E0 000009E0000010F0000010F0000010F00000207800002078000020780000403C0000403C000040 3C0000801E0000801E0000FFFE0001000F0001000F0001000F0002000780020007800200078004 0003C00E0003C01F0007E0FFC03FFE>31 32 1 0 34]65 dc[26 31 2 0 32]66 dc[<000FC040007030C001C009C0038005C0070003C00E0001C01E0000C01C0000C03C00 00C07C0000407C00004078000040F8000000F8000000F8000000F8000000F8000000F8000000F8 000000F8000000F8000000780000007C0000407C0000403C0000401C0000401E0000800E000080 070001000380020001C0040000703800000FC000>26 33 3 1 33]67 dc[ 29 31 2 0 35]68 dc[27 31 2 0 31]69 dc[25 31 2 0 30]70 dc[<000FE0200078186000E004E0038002E0070001E00F0000E01E0000601E0000603C 0000603C0000207C00002078000020F8000000F8000000F8000000F8000000F8000000F8000000 F8000000F8007FFCF80003E0780001E07C0001E03C0001E03C0001E01E0001E01E0001E00F0001 E0070001E0038002E000E0046000781820000FE000>30 33 3 1 36]71 dc[29 31 2 0 34]72 dc[14 31 1 0 16]73 dc[<0FFFC0007C00003C00003C00003C00003C00003C00003C00003C00003C00003C0000 3C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00203C00F8 3C00F83C00F83C00F0380040780040700030E0000F8000>18 32 2 1 23]74 dc[30 31 2 0 35]75 dc[23 31 2 0 28]76 dc[< FF80001FF80F80001F800780001F0005C0002F0005C0002F0005C0002F0004E0004F0004E0004F 000470008F000470008F000470008F000438010F000438010F000438010F00041C020F00041C02 0F00041C020F00040E040F00040E040F00040E040F000407080F000407080F000407080F000403 900F000403900F000401E00F000401E00F000401E00F000E00C00F001F00C01F80FFE0C1FFF8> 37 31 2 0 42]77 dc[29 31 2 0 34]78 dc[<001F800000F0F00001C038 0007801E000F000F000E0007001E0007803C0003C03C0003C07C0003E0780001E0780001E0F800 01F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0780001E07C 0003E07C0003E03C0003C03C0003C01E0007800E0007000F000F0007801E0001C0380000F0F000 001F8000>28 33 3 1 35]79 dc[25 31 2 0 31]80 dc[<001F800000F0 F00001C0380007801E000F000F000E0007001E0007803C0003C03C0003C07C0003E07C0003E078 0001E0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0 780001E0780001E07C0003E03C0003C03C0F03C01E1087800E2047000F204F0007A03E0001E038 0000F0F010001FB01000003010000038300000387000003FF000001FE000001FE000000FC00000 0780>28 41 3 9 35]81 dc[30 32 2 1 33]82 dc[<07E0800C 1980100780300380600180600180E00180E00080E00080E00080F00000F000007800007F00003F F0001FFC000FFE0003FF00001F800007800003C00003C00001C08001C08001C08001C08001C0C0 0180C00380E00300F00600CE0C0081F800>18 33 3 1 25]83 dc[<7FFFFFE0780F01E0600F00 60400F0020400F0020C00F0030800F0010800F0010800F0010800F0010000F0000000F0000000F 0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000 0F0000000F0000000F0000000F0000000F0000000F0000000F0000001F800007FFFE00>28 31 2 0 33]84 dc[29 32 2 1 34]85 dc[31 32 1 1 34]86 dc[44 32 1 1 47]87 dc[<7FF83FF80FE00FC007C0070003C0020001E00400 01F00C0000F0080000781000007C1000003C2000003E4000001E4000000F8000000F8000000780 000003C0000007E0000005E0000009F0000018F8000010780000207C0000603C0000401E000080 1F0001800F0001000780020007C0070003C01F8007E0FFE01FFE>31 31 1 0 34]88 dc[32 31 1 0 34]89 dc[<7FFFF87C00F87000F06001E04001E0C003C0C003C08007 80800F80800F00001E00001E00003C00003C0000780000F80000F00001E00001E00003C00403C0 040780040F80040F000C1E000C1E00083C00183C0018780038F801F8FFFFF8>22 31 3 0 28] 90 dc[7 45 4 11 13]91 dc[7 45 1 11 13]93 dc[<08 1020204040808080B8FCFC7C38>6 14 3 -18 13]96 dc[<1FE000303000781800781C00300E00 000E00000E00000E0000FE00078E001E0E00380E00780E00F00E10F00E10F00E10F01E10781E10 3867200F83C0>20 20 2 0 23]97 dc[<0E0000FE00000E00000E00000E00000E00000E00000E 00000E00000E00000E00000E00000E3E000EC3800F01C00F00E00E00E00E00700E00700E00780E 00780E00780E00780E00780E00780E00700E00700E00E00F00E00D01C00CC300083E00>21 32 1 0 25]98 dc[<03F80E0C1C1E381E380C70007000F000F000F000F000F000F00070007000380138 011C020E0C03F0>16 20 2 0 20]99 dc[<000380003F80000380000380000380000380000380 00038000038000038000038000038003E380061B801C0780380380380380700380700380F00380 F00380F00380F00380F00380F003807003807003803803803807801C07800E1B8003E3F8>21 32 2 0 25]100 dc[<03F0000E1C001C0E00380700380700700700700380F00380F00380FFFF80F0 0000F00000F000007000007000003800801800800C010007060001F800>17 20 1 0 20]101 dc [<007C00C6018F038F07060700070007000700070007000700FFF0070007000700070007000700 0700070007000700070007000700070007000700070007007FF0>16 32 0 0 14]102 dc[<0000 E003E3300E3C301C1C30380E00780F00780F00780F00780F00780F00380E001C1C001E380033E0 002000002000003000003000003FFE001FFF800FFFC03001E0600070C00030C00030C00030C000 306000603000C01C038003FC00>20 31 1 10 23]103 dc[<0E0000FE00000E00000E00000E00 000E00000E00000E00000E00000E00000E00000E00000E3E000E43000E81800F01C00F01C00E01 C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 C0FFE7FC>22 32 1 0 25]104 dc[<1C001E003E001E001C000000000000000000000000000E00 7E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFC0> 10 31 0 0 12]105 dc[<00E001F001F001F000E0000000000000000000000000007007F000F0 007000700070007000700070007000700070007000700070007000700070007000700070007000 7000706070F060F0C061803F00>12 40 -2 9 14]106 dc[<0E0000FE00000E00000E00000E00 000E00000E00000E00000E00000E00000E00000E00000E0FF00E03C00E03000E02000E04000E08 000E10000E30000E70000EF8000F38000E1C000E1E000E0E000E07000E07800E03800E03C00E03 E0FFCFF8>21 32 1 0 24]107 dc[<0E00FE000E000E000E000E000E000E000E000E000E000E00 0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FF E0>11 32 0 0 12]108 dc[<0E1F01F000FE618618000E81C81C000F00F00E000F00F00E000E00 E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E 00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E00FFE7FE7FE0>35 20 1 0 38]109 dc[<0E3E00FE43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C0 0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC>22 20 1 0 25]110 dc[<01 F800070E001C03803801C03801C07000E07000E0F000F0F000F0F000F0F000F0F000F0F000F070 00E07000E03801C03801C01C0380070E0001F800>20 20 1 0 23]111 dc[<0E3E00FEC3800F01 C00F00E00E00E00E00F00E00700E00780E00780E00780E00780E00780E00780E00700E00F00E00 E00F01E00F01C00EC3000E3E000E00000E00000E00000E00000E00000E00000E00000E0000FFE0 00>21 29 1 9 25]112 dc[<03E0800619801C05803C0780380380780380700380F00380F00380 F00380F00380F00380F003807003807803803803803807801C0B800E138003E380000380000380 000380000380000380000380000380000380003FF8>21 29 2 9 24]113 dc[<0E78FE8C0F1E0F 1E0F0C0E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE0>15 20 1 0 18]114 dc[<1F9030704030C010C010C010E00078007F803FE00FF00070803880188018C018C0 18E030D0608F80>13 20 2 0 18]115 dc[<020002000200060006000E000E003E00FFF80E000E 000E000E000E000E000E000E000E000E000E000E080E080E080E080E080610031001E0>13 28 1 0 18]116 dc[<0E01C0FE1FC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 C00E01C00E01C00E01C00E01C00E01C00E03C00603C0030DC001F1FC>22 20 1 0 25]117 dc[< FF83F81E01E01C00C00E00800E00800E008007010007010003820003820003820001C40001C400 01EC0000E80000E800007000007000007000002000>21 20 1 0 24]118 dc[30 20 1 0 33]119 dc[<7FC3FC0F01E00701C007018003810001C20000E40000EC00007800003800003C00 007C00004E000087000107000303800201C00601E01E01E0FF07FE>23 20 0 0 24]120 dc[21 29 1 9 24]121 dc[<3FFF380E200E201C40384078407000E001E001C0 0380078007010E011E011C0338027006700EFFFE>16 20 1 0 20]122 dc[22 1 0 -12 23]123 dc dfe /fn df[11 2 2 -9 17]45 dc[<01F000060C000C06001803 003803803803807001C07001C07001C0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001 E0F001E0F001E0F001E0F001E0F001E07001C07001C07001C03803803803801803001C0700071C 0001F000>19 31 3 1 25]48 dc[<018003801F80E38003800380038003800380038003800380 038003800380038003800380038003800380038003800380038003800380038007C0FFFE>15 30 5 0 25]49 dc[<03F0000C1E001007002007804003C04003C0F003E0F801E0F801E0F801E02003 E00003E00003C00007C0000780000F00000E00001C0000380000700000C0000180000300000200 200400200800201000403FFFC07FFFC0FFFFC0>19 30 3 0 25]50 dc[<1801801FFF001FFE00 1FFC001FF00010000010000010000010000010000010000011F800120E00140700180380100380 0001C00001C00001E00001E00001E07001E0F001E0F001E0E001C04003C0400380200300100600 0C1C0003F000>19 31 3 1 25]53 dc[<01F000060C001C06001803003803807003807001C0F0 01C0F001C0F001E0F001E0F001E0F001E07001E07003E03803E03803E01C05E00E19E003E1E000 01C00001C00003C0000380300380780700780600700E00201C001030000FC000>19 31 3 1 25] 57 dc[<000FE01000381C3000E0027003C00170078000F00F0000701E0000701E0000303C0000 303C0000107C00001078000010F8000000F8000000F8000000F8000000F8000000F8000000F800 0000F8000000F8000000780000007C0000103C0000103C0000101E0000201E0000200F00002007 80004003C0008000E0030000380C00000FF000>28 33 4 1 36]67 dc[39 31 3 0 45]77 dc[ <03F0200C0C601803E03000E06000E0600060E00060E00020E00020E00020F00000F800007C00 007F80003FFC001FFF0007FF8001FFC0000FE00003E00001F00000F00000708000708000708000 70800070C00060C000E0E000C0F80180C6030081FC00>20 33 4 1 28]83 dc[31 32 3 1 37]85 dc[<001800001800001800003C00003C00004E00004E00004E 000087000087000187800103800103800201C00201C003FFC00400E00400E00800700800701800 703C0078FE01FF>24 23 1 0 28]97 dc dfe /fo df[<70F8F8F870>5 5 4 0 14]46 dc[<01 F000071C000C06001803003803803803807001C07001C07001C07001C0F001E0F001E0F001E0F0 01E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E07001C07001C070 01C07803C03803803803801C07000C0600071C0001F000>19 34 2 1 24]48 dc[<008003800F 80F380038003800380038003800380038003800380038003800380038003800380038003800380 03800380038003800380038003800380038007C0FFFE>15 33 4 0 24]49 dc[<01F000060C00 0C0600180700380380700380700380F001C0F001C0F001C0F001E0F001E0F001E0F001E0F001E0 7001E07003E03803E01805E00C05E00619E003E1E00001C00001C00001C0000380000380300300 780700780600700C002018001030000FC000>19 34 2 1 24]57 dc[29 34 2 0 35]66 dc[31 34 2 0 37]68 dc[<03FFF0001F00000F00000F00000F00000F00000F00000F00000F0000 0F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0000 0F00000F00000F00000F00700F00F80F00F80F00F80E00F01E00401C0020380018700007C000> 20 35 2 1 25]74 dc[25 34 2 0 30]76 dc[ <0FE0001838003C0C003C0E0018070000070000070000070000FF0007C7001E07003C07007807 00700700F00708F00708F00708F00F087817083C23900FC1E0>21 21 2 0 24]97 dc[<01FE00 0703000C07801C0780380300780000700000F00000F00000F00000F00000F00000F00000F00000 7000007800403800401C00800C010007060001F800>18 21 2 0 22]99 dc[<0000E0000FE000 01E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E001F8E007 04E00C02E01C01E03800E07800E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E070 00E07800E03800E01801E00C02E0070CF001F0FE>23 35 2 0 27]100 dc[<1C001E003E001E00 1C00000000000000000000000000000000000E00FE001E000E000E000E000E000E000E000E000E 000E000E000E000E000E000E000E000E000E00FFC0>10 34 1 0 14]105 dc[<0E0000FE00001E 00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E03FC0E 01F00E01C00E01800E02000E04000E08000E10000E38000EF8000F1C000E1E000E0E000E07000E 07800E03C00E01C00E01E00E00F00E00F8FFE3FE>23 35 1 0 26]107 dc[<0E00FE001E000E00 0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E 000E000E000E000E000E000E000E000E000E000E00FFE0>11 35 1 0 14]108 dc[<0E0070FE07 F01E00F00E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00 700E00700E00F00E00F006017003827800FC7F>24 21 1 0 27]117 dc[23 21 1 0 26]118 dc[23 31 1 10 26]121 dc dfe /fp df[50 41 2 0 55]77 dc[41 42 2 1 44]82 dc[<00FE010003 FF83000F81E3001E0037003C001F0038000F007800070070000700F0000300F0000300F0000300 F0000100F8000100F8000100FC0000007C0000007F0000003FE000001FFF00000FFFE00007FFF8 0003FFFC00007FFE000007FF0000007F0000001F8000000F80000007C0000007C0800003C08000 03C0800003C0800003C0C00003C0C0000380C0000380E0000780F0000700F8000E00EE001C00C3 C07800C1FFF000803FC000>26 43 3 1 33]83 dc[<7FFFFFFFF87FFFFFFFF87C007C00F87000 7C003860007C001840007C000840007C0008C0007C000CC0007C000C80007C000480007C000480 007C000480007C000480007C000400007C000000007C000000007C000000007C000000007C0000 00007C000000007C000000007C000000007C000000007C000000007C000000007C000000007C00 0000007C000000007C000000007C000000007C000000007C000000007C000000007C000000007C 000000007C000000007C000000007C00000000FE000000FFFFFE0000FFFFFE00>38 41 2 0 43] 84 dc[<01FC00000E0780001001C0003C00E0003E00F0003E0078001C00780008007800000078 000000780000007800007FF80003E078000F8078001F0078003E0078007C00780078007820F800 7820F8007820F8007820F800F8207C00F8203C013C401F063FC007F80F00>27 26 2 0 30]97 dc[<007F8001C0700780080F003C1E007C3C007C3C00387C0010780000F80000F80000F80000F8 0000F80000F80000F80000F800007800007C00003C00043C00041E00080F001007802001C0C000 7F00>22 26 2 0 27]99 dc[<00000F000001FF000001FF0000001F0000000F0000000F000000 0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000 3F0F0001C0CF0003802F000F001F001E001F001C000F003C000F007C000F0078000F0078000F00 F8000F00F8000F00F8000F00F8000F00F8000F00F8000F00F8000F0078000F0078000F003C000F 003C000F001E001F000E002F0007004F8001C18FF8007E0FF8>29 42 2 0 33]100 dc[<007E00 03C3800700E00E00F01C00703C00783C003878003C78003CF8003CF8003CFFFFFCF80000F80000 F80000F80000F800007800007C00003C00043C00041E00080E001007002001C0C0007F00>22 26 2 0 27]101 dc[<001F000070C000E1E001C3E003C3E00381C007808007800007800007800007 8000078000078000078000078000078000FFFE00FFFE0007800007800007800007800007800007 800007800007800007800007800007800007800007800007800007800007800007800007800007 800007800007800007C000FFFE00FFFE00>19 42 1 0 18]102 dc[<0000078001FC1840070721 C00E03C1C01E03C0803C01E0003C01E0007C01F0007C01F0007C01F0007C01F0007C01F0003C01 E0003C01E0001E03C0000E0380001707000011FC0000300000003000000030000000380000001C 0000001FFFC0000FFFF80007FFFC001C003E0030000F007000070060000380E0000380E0000380 E0000380E0000380700007007000070038000E000C0018000780F00000FF8000>26 40 2 13 30 ]103 dc[<07800000FF800000FF8000000F800000078000000780000007800000078000000780 0000078000000780000007800000078000000780000007800000078000000783F800078C1C0007 900E0007A0070007A0078007C0078007C007800780078007800780078007800780078007800780 078007800780078007800780078007800780078007800780078007800780078007800780078007 800780078007800780FFFCFFFCFFFCFFFC>30 42 1 0 33]104 dc[<07000F801F801F800F8007 0000000000000000000000000000000000000007807F807F800F80078007800780078007800780 07800780078007800780078007800780078007800780078007800780FFF8FFF8>13 41 1 0 17] 105 dc[<0780FF80FF800F80078007800780078007800780078007800780078007800780078007 800780078007800780078007800780078007800780078007800780078007800780078007800780 078007800780FFFCFFFC>14 42 1 0 17]108 dc[<0781F800FC00FF860E030700FF98070C0380 0FA0079003C007A003D001E007C003E001E007C003E001E0078003C001E0078003C001E0078003 C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E0 078003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003 C001E0078003C001E0FFFC7FFE3FFFFFFC7FFE3FFF>48 26 1 0 51]109 dc[<0783F800FF8C1C 00FF900E000FA0070007A0078007C0078007C00780078007800780078007800780078007800780 078007800780078007800780078007800780078007800780078007800780078007800780078007 8007800780078007800780FFFCFFFCFFFCFFFC>30 26 1 0 33]110 dc[<007F000001C1C00007 0070000E0038001C001C003C001E003C001E0078000F0078000F00F8000F80F8000F80F8000F80 F8000F80F8000F80F8000F80F8000F80F8000F8078000F0078000F003C001E003C001E001E003C 000E0038000700700001C1C000007F0000>25 26 2 0 30]111 dc[<0783F000FF8C1C00FFB00F 0007A0078007C003C0078003E0078001E0078001F0078001F0078000F8078000F8078000F80780 00F8078000F8078000F8078000F8078000F0078001F0078001F0078001E0078003C007C003C007 C0078007A00E0007983C000787E000078000000780000007800000078000000780000007800000 07800000078000000780000007800000FFFC0000FFFC0000>29 38 1 12 33]112 dc[<003F00 8001E0C180038021800F0013801E000B801E000F803C0007807C0007807C00078078000780F800 0780F8000780F8000780F8000780F8000780F8000780F80007807C0007807C0007803C0007803E 000F801E000F800F0017800780278001E0C780007F078000000780000007800000078000000780 0000078000000780000007800000078000000780000007800000FFFC0000FFFC>30 38 2 12 32 ]113 dc[<0787C0FF98E0FF91F00FA1F007C1F007C0E007C00007800007800007800007800007 800007800007800007800007800007800007800007800007800007800007800007800007C000FF FE00FFFE00>20 26 1 0 23]114 dc[<07F8401C06C03001C06000C06000C0E00040E00040F000 40F800007E00007FF0003FFE000FFF0003FF80003FC00007C08001E08001E0C000E0C000E0C000 E0E000C0F001C0F80180C4070083F800>19 26 2 0 24]115 dc[<008000008000008000008000 0180000180000180000380000380000780000F80001FFF80FFFF80078000078000078000078000 078000078000078000078000078000078000078000078000078000078040078040078040078040 07804007804007804003C08001C08000E100003E00>18 37 1 0 23]116 dc[<07800780FF80FF 80FF80FF800F800F80078007800780078007800780078007800780078007800780078007800780 0780078007800780078007800780078007800780078007800780078007800780078007800F8007 800F800380178001C027C000E047FC003F87FC>30 26 1 0 33]117 dc dfe end TeXDict begin @letter %%EndProlog %%Page: 0 1 bop 281 529 a fp(Sc)n(heduling)19 b(and)i(Resource)d(Managemen)n(t)h(T)-5 b (ec)n(hniques)18 b(for)769 604 y(Multipro)q(cessors)813 737 y fo(Da)o(vid)d (L.)i(Blac)n(k)871 808 y(July)f(1990)794 877 y fn(CMU-CS-90-152)696 1245 y fm (Sc)o(ho)r(ol)f(of)g(Computer)g(Science)702 1301 y(Carnegie)g(Mellon)h(Univer\ sit)o(y)758 1357 y(Pittsburgh,)f(P)l(A)g(15213)158 1548 y fl(Submitted)e(to)g (Carnegie)h(Mellon)g(Univ)n(ersity)f(in)h(partial)f(ful\014llmen)l(t)h(of)f (the)i(requiremen)o(ts)f(for)g(the)684 1598 y(Degree)h(of)e(Do)q(ctor)h(of)g (Philosoph)n(y)l(.)69 2655 y fk(This)g(research)f(w)o(as)g(supp)r(orted)h(b)o (y)f(the)h(Defense)f(Adv)o(anced)h(Researc)o(h)g(Pro)r(jects)f(Agency)h(\(DOD\ \))f(and)h(monitored)h(b)o(y)f(the)0 2701 y(Space)g(and)f(Na)o(v)o(al)g(W)m (arfare)g(Systems)h(Command)g(under)g(Con)o(tract)f(N00039-87-C-0251,)g(ARP)m (A)g(Order)g(No.)g(5993)g(.)69 2777 y(The)g(views)h(and)g(conclusions)i(con)o (tained)f(in)f(this)g(do)q(cument)f(are)g(those)h(of)e(the)i(author)f(and)h (should)h(not)f(b)q(e)f(interpreted)h(as)0 2823 y(representing)g(the)f(o\016c\ ial)i(p)q(olicies,)g(either)f(expressed)g(or)f(implied,)i(of)e(D)o(ARP)m(A)g (or)g(the)g(U.S.)f(gov)o(ernment.)p eop %%Page: 1 2 bop 71 2701 a fj(Keyw)m(ords:)21 b fm(Multipro)r(cessor,)16 b(Op)r(erating)g (System,)g(Mac)o(h,)g(Sc)o(heduling,)i(Hando\013)e(Sc)o(heduling,)i(Gang)0 2757 y(Sc)o(heduling,)27 b(Discouragemen)o(t,)d(NUMA,)f(Memory)f(Managemen)n (t,)j(Comp)q(etitiv)o(e)e(Algorithms,)i(Timing,)0 2814 y(P)o(arallelism,)16 b (Concurrency)p eop %%Page: 2 3 bop 873 736 a fj(Abstract)0 842 y fm(This)13 b(thesis)f(describ)s(es)g(resea\ rc)o(h)g(in)h(the)g(design)g(and)f(implemen)q(tation)f(of)h(m)o(ultipro)r(ces\ sor)g(resource)g(manage-)0 898 y(men)o(t)17 b(and)g(related)h(areas.)26 b(App\ lication)19 b(requirements)e(motiv)m(ated)g(the)g(ma)s(jor)f(researc)o(h)h (areas,)g(pro)q(cessor)0 955 y(sc)o(heduling)d(and)e(non-uniform)h(memory)f (managemen)o(t,)g(as)f(these)i(areas)e(con)o(tain)h(the)h(most)e(imp)r(ortan) n(t)h(prob-)0 1011 y(lems)k(raised)f(b)o(y)h(the)f(c)o(hanging)h(design)g(and) f(use)h(of)e(m)o(ultipro)r(cessors.)0 1098 y(A)k(v)m(ariet)o(y)g(of)g(pro)q (cessor)g(sc)n(heduling)j(problems)d(are)g(addressed)g(b)o(y)g(this)h(w)n(ork\ .)28 b(A)18 b(ma)r(jor)g(con)n(tribution)h(is)0 1154 y(the)g(design)h(and)f (implemen)q(tation)g(of)f(a)h(pro)q(cessor)g(allo)r(cation)g(and)g(con)o(trol) g(facility)g(for)g(the)g(Mac)n(h)g(op)r(er-)0 1211 y(ating)f(system)f(that)g (allo)o(ws)h(pro)q(cessors)f(to)g(b)r(e)h(dedicated)h(to)e(applications.)29 b (The)18 b(implemen)q(tation)f(of)g(this)0 1267 y(facility)h(has)g(b)q(een)h (v)m(alidated)g(b)o(y)f(pro)q(duction)h(use,)g(and)f(it)g(is)g(one)g(of)g(the) g(\014rst)f(successful)j(applications)f(of)0 1324 y(p)r(olicy-mechanism)g(sep\ aration)f(to)g(m)o(ultipro)r(cessor)g(sc)o(heduling)i(\(and,)f(in)g(particula\ r,)h(to)e(the)g(problem)h(of)0 1380 y(dividing)f(a)d(m)n(ultipro)r(cessor)h (among)e(comp)q(eting)i(applications\).)22 b(The)15 b(tec)o(hniques)i(of)e (Discouragemen)o(t)g(and)0 1436 y(Hando\013)e(Sc)o(heduling)j(are)e(in)o(tro) q(duced)h(to)e(address)h(the)g(comm)n(unication)h(and)f(sync)o(hronization)h (problems)f(of)0 1493 y(applications)h(with)e(more)g(activ)o(e)h(en)o(tities) g(than)f(pro)q(cessors.)19 b(Supp)r(ort)12 b(for)h(timesharing)h(has)f(b)r (een)g(preserv)o(ed)0 1549 y(b)o(y)i(in)o(tegrating)f(the)h(new)g(features)g (in)o(to)f(the)h(Mac)o(h)f(timesharing)i(sc)o(heduler.)21 b(In)15 b(the)g(pro) q(cess,)g(it)g(w)o(as)f(neces-)0 1606 y(sary)f(to)g(redesign)h(the)g(sc)o(hed\ uler)h(from)e(scratc)n(h,)h(and)g(a)f(n)o(um)o(b)q(er)h(of)f(lessons)h(w)o (ere)f(learned)i(ab)q(out)e(the)h(design)0 1662 y(and)k(implementation)g(of)f (timesharing)h(sc)o(hedulers,)h(including)i(ho)n(w)d(to)f(collect)h(accurate) g(pro)q(cessor)f(usage)0 1719 y(information)e(based)h(on)f(timestamps)g(inste\ ad)h(of)f(in)o(terrupt-driv)o(en)h(sampling.)0 1805 y(The)c(non-uniform)g(mem\ ory)f(managemen)o(t)g(researc)o(h)h(tak)n(es)g(a)f(di\013erent)g(approac)n (h,)i(predicated)f(on)g(obtaining)0 1862 y(more)k(information)g(from)g(hardw) o(are.)22 b(Curren)o(t)16 b(implemen)q(tations)g(of)g(non-uniform)h(memory)f (managemen)n(t)0 1918 y(are)e(restricted)i(b)o(y)e(the)h(a)o(v)m(ailable)i (reference)e(information.)20 b(Hardw)o(are)14 b(reference)i(and)f(modi\014cat\ ion)i(bits)e(in-)0 1975 y(dicate)g(only)g(that)e(a)h(page)h(w)n(as)f(referenc\ ed)h(or)f(mo)q(di\014ed)i(at)e(least)g(once)h(sometime)f(in)h(the)g(past;)f (they)g(do)g(not)0 2031 y(indicate)g(ho)o(w)e(man)o(y)h(references)g(w)o(ere) g(made)f(or)g(ho)o(w)h(long)g(ago.)18 b(If)13 b(more)f(reference)i(informatio\ n)e(w)o(ere)h(a)n(v)n(ail-)0 2087 y(able,)19 b(more)e(sophisticated)i(\(and)e (hop)r(efully)i(b)r(etter\))e(managemen)n(t)h(tec)n(hniques)i(w)n(ould)f(b)q (e)f(p)r(ossible.)28 b(This)0 2144 y(researc)o(h)17 b(assumes)g(that)g(an)n (y)h(desired)g(information)f(ab)r(out)f(the)i(access)f(history)g(of)g(an)o (y)g(region)h(of)e(memory)0 2200 y(is)f(a)o(v)m(ailable)i(and)e(designs)h(com\ p)q(etitive)f(replication)i(and)e(migration)g(algorithms)g(that)f(can)h(tak)n (e)g(adv)n(an)o(tage)0 2257 y(of)i(this)h(information.)26 b(A)18 b(case)f(stu\ dy)g(examines)h(ho)o(w)f(these)h(algorithms)f(could)i(b)q(e)f(incorp)r(orated) e(into)h(the)0 2313 y(Mac)n(h)f(op)q(erating)f(system.)p eop %%Page: 1 4 bop 831 195 a fi(T)l(o)16 b(my)h(p)n(ar)n(ents)804 252 y(and)f(gr)n(andp)n (ar)n(ents)p eop %%Page: 2 5 bop 754 195 a fh(Ac)n(kno)o(wledgmen)l(ts)71 301 y fm(I'd)16 b(like)g(to)f (express)h(m)o(y)g(gratitude)g(to)f(the)h(man)o(y)f(p)r(eople)i(who)f(help)r (ed)h(mak)n(e)f(this)g(researc)o(h)g(and)g(thesis)0 358 y(p)r(ossible.)38 b (First)21 b(and)g(foremost)f(to)h(m)n(y)h(advisor,)g(Rick)f(Rashid,)i(whose)e (supp)r(ort,)h(encouragemen)o(t,)g(and)0 414 y(en)o(th)o(usiasm)c(w)n(ere)g (instrumental)f(in)i(seeing)f(this)g(w)o(ork)f(through)g(to)g(its)h(completio\ n.)29 b(Thanks)17 b(also)h(to)f(the)0 471 y(other)d(mem)n(b)r(ers)g(of)f(m)o (y)h(thesis)h(committee,)f(Hide)h(T)l(okuda,)f(Zary)f(Segall,)i(and)f(Ik)o (e)h(Nassi,)f(for)f(their)i(supp)r(ort)0 527 y(and)21 b(con)o(tin)o(ued)g(int\ erest)f(in)h(m)o(y)g(w)n(ork.)36 b(Dann)n(y)21 b(Sleator)f(deserves)g(a)h(sp) q(ecial)h(note)e(of)h(gratitude)f(for)g(his)0 584 y(generous)d(assistance)h (with)f(development)f(of)h(the)h(comp)q(etitive)f(algorithms,)g(and)h(his)g (diligen)q(t)f(c)o(hec)o(king)h(of)0 640 y(details)e(in)g(the)g(associated)g (pro)q(ofs.)71 697 y(The)11 b(Sc)o(ho)q(ol)g(of)g(Computer)f(Science)j(at)d (Carnegie)h(Mellon)h(and)f(the)g(Mac)n(h)g(pro)r(ject)g(pro)o(vided)h(a)e(sup\ p)r(ortiv)o(e)0 753 y(en)o(vironment,)k(allo)o(wing)h(me)g(the)f(freedom)h (to)f(concentrate)f(on)i(researc)n(h)g(issues.)21 b(I)15 b(o)n(w)o(e)f(a)h (debt)g(of)f(gratitude)0 809 y(to)f(Avie)i(T)l(ev)n(anian)f(for)f(explaining) k(some)c(of)h(the)g(in)o(tricacies)h(of)f(Mac)n(h)g(and)g(answ)o(ering)g(m)o (y)g(questions)g(in)h(the)0 866 y(early)j(da)o(ys)f(when)h(w)n(e)g(shared)g (an)f(o\016ce.)27 b(Other)18 b(mem)n(b)r(ers)f(of)g(the)h(Mac)n(h)g(pro)r(jec\ t)f(help)s(ed)h(in)g(man)o(y)f(w)o(a)n(ys.)0 922 y(My)i(thanks)f(to)h(Bob)g (Baron,)g(Mik)o(e)g(Y)m(oung,)g(Da)n(vid)h(Golub,)g(Bill)h(Bolosky)l(,)f(Rich\ ard)f(Dra)n(v)o(es,)g(Alessandro)0 979 y(F)l(orin,)f(Jo)q(e)f(Barrera,)g(Char\ les)g(Hill,)i(Mik)o(e)f(Jones,)g(Jonathan)f(Chew,)g(Rich)g(Sanzi,)i(and)e(Mar\ y)f(Thompson.)0 1035 y(Serious)e(researc)o(h)g(on)f(large)h(soft)n(w)n(are)f (systems)h(is)g(hea)o(vily)g(dep)r(endent)f(on)h(the)f(com)o(bined)i(e\013ort\ s)d(of)i(talen)o(ted)0 1092 y(p)r(eople.)71 1148 y(Some)k(of)f(this)i(w)n(ork) f(w)n(as)g(furthered)h(b)o(y)f(co)q(op)q(eration)g(with)g(researc)o(hers)g (at)g(Stanford)f(Universit)o(y)l(.)29 b(I'd)0 1205 y(like)13 b(to)f(thank)g (Ano)r(op)g(Gupta,)h(W)l(olf-Dietrich)g(W)l(eb)q(er,)g(and)g(Andy)g(T)l(uc)o (k)o(er)g(for)f(their)h(con)o(tributions)h(to)e(these)0 1261 y(e\013orts.)28 b (Additional)20 b(inspiration)g(came)e(from)g(design)h(discussions)h(with)f (researc)n(hers)g(at)e(IBM)i(Researc)o(h's)0 1318 y(Ha)o(wthorne)c(facility)l (.)20 b(Thanks)15 b(in)h(particular)g(to)f(Ra)o(y)g(Bry)n(an)o(t,)g(Bry)n(an) h(Rosen)o(burg,)f(and)g(Henry)h(Chang,)e(for)0 1374 y(their)k(participation)g (and)g(in)o(terest.)26 b(I'd)18 b(also)f(like)g(to)g(thank)g(Gregg)g(Kellogg) h(of)f(NeXT)g(for)g(reviewing)i(and)0 1430 y(commen)o(ting)c(on)g(preliminary) i(v)o(ersions)f(of)f(some)f(of)h(the)g(interfaces.)71 1487 y(Most)e(of)h(the) h(implementation)f(w)o(ork)g(w)o(as)g(p)q(erformed)g(on)h(an)f(Encore)h(Multi\ max.)20 b(Man)n(y)15 b(thanks)f(to)g(the)0 1543 y(p)r(eople)i(at)e(Encore)i (who)f(help)r(ed)h(p)q(ort)f(and)g(supp)r(ort)f(Mac)o(h)h(on)g(the)g(v)n(ario\ us)g(v)o(ersions)h(of)e(the)i(Multimax,)f(in-)0 1600 y(cluding)f(Jim)e(V)l (an)g(Sciver,)g(F)-5 b(red)12 b(Oliv)q(eira,)g(Da)n(vid)g(Kirschen,)h(P)n(ete\ r)f(F)l(a)n(y)l(,)g(Joseph)h(Bo)n(ykin,)g(Alan)f(Langerman,)0 1656 y(and)j (Susan)h(LoV)l(erso.)71 1713 y(F)-5 b(eedback)17 b(from)e(users)i(w)o(as)f (imp)r(ortan)n(t)g(in)h(impro)o(ving)h(the)e(design)i(and)f(implementation)f (of)h(the)f(Mac)o(h)0 1769 y(sc)o(heduler.)k(My)13 b(thanks)f(to)h(all)g(the) g(users)g(of)f(the)h(Multimax)g(who)g(cop)q(ed)h(with)f(soft)n(w)n(are)g(unde\ r)g(dev)o(elopment)0 1826 y(and)g(pro)o(vided)h(useful)g(bug)f(rep)r(orts,)f (including)j(Dirk)f(Kalp,)f(Wilson)h(Harv)o(ey)l(,)f(Milind)i(T)l(am)n(b)r (e,)e(eddie)h(caplan,)0 1882 y(and)21 b(T)l(ed)g(Lehr.)36 b(Also)21 b(thanks) g(to)f(Allan)h(Fisher,)h(Thomas)e(Gross,)h(and)g(the)f(students)g(in)h(their) g(parallel)0 1939 y(programming)15 b(courses)g(for)f(putting)i(the)f(pro)q (cessor)g(allo)r(cation)h(soft)n(w)n(are)f(through)g(its)g(paces.)71 1995 y (Sharon)f(Burks)g(w)n(as)g(ev)o(er-vigilant)g(in)h(protecting)f(graduate)f (studen)o(ts)h(from)f(the)h(rest)g(of)f(the)h(Universit)o(y)l(.)0 2051 y(Sid) k(Chatterjee)e(help)r(ed)h(explain)h(the)f(in)o(tricacies)h(of)e(L)970 2045 y fn(a)991 2051 y fm(T)1016 2065 y(E)1042 2051 y(X,)g(and)g(assisted)h(with)g (dev)o(elopment)f(of)g(the)h(pro-)0 2108 y(cessor)h(allo)r(cation)h(serv)n (er)g(at)e(a)h(crucial)i(juncture.)30 b(Man)n(y)18 b(thanks)h(to)e(Catherine) i(Cop)q(etas)f(and)h(all)g(of)f(the)0 2164 y(other)d(p)q(eople)h(who)f(mak)o (e)g(Carnegie)h(Mellon)g(suc)o(h)f(an)h(in)o(teresting)f(and)h(stim)o(ulating) g(place)g(to)e(do)i(researc)n(h.)71 2221 y(And)i(last)f(but)h(not)f(least,)h (m)o(y)f(wife,)i(Kathryn,)e(someho)o(w)g(con)o(vinced)i(L)1359 2215 y fn(a) 1380 2221 y fm(T)1405 2235 y(E)1431 2221 y(X)e(to)g(pro)q(duce)i(most)e(of)g (the)0 2277 y(diagrams.)24 b(Her)16 b(patient)g(pro)q(ofreading)h(and)g(cop)n (y-editing)h(of)f(sev)n(eral)g(drafts)f(ha)o(v)o(e)g(greatly)h(impro)o(v)n (ed)g(this)0 2334 y(do)q(cument.)i(I)d(am)f(truly)g(grateful,)g(and)g(an)o (y)g(errors)f(that)h(ma)n(y)g(remain)h(are)f(mine)h(alone.)71 2390 y(Liv)o (e)g(long)f(and)h(prosp)q(er.)k(Pittsburgh,)15 b(July)h(26,)e(1990.)p eop %%Page: 1 6 bop 0 527 a fg(Con)m(ten)m(ts)0 795 y fj(1)42 b(In)o(tro)q(duction)1566 b (1)68 852 y fm(1.1)46 b(Programming)14 b(Mo)q(dels)i(and)f(Sc)o(heduling)j (Requirements)45 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)61 b fm(2)68 908 y(1.2)46 b(Processor)15 b(Allo)s(cation)g (and)g(Con)o(trol)24 b ff(:)e(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)61 b fm(3)68 965 y(1.3)46 b(Discouragemen)o(t)15 b(and)g(Hando\013)g(Sc)o(heduling)25 b ff (:)e(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)61 b fm(4)68 1021 y(1.4)46 b(Sc)o(heduler)17 b(Design) e(and)h(Implementation)37 b ff(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)61 b fm(5)68 1077 y (1.5)46 b(NUMA)15 b(Memory)f(Managemen)o(t)22 b ff(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)61 b fm(5)68 1134 y(1.6)46 b(Structure)15 b(of)g(the)g (Thesis)i ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)61 b fm(6)0 1236 y fj(2)42 b(Timesharing)18 b(and)g(the)g(Mac)o(h)f(Sc)o (heduler)994 b(7)68 1292 y fm(2.1)46 b(Timesharing)16 b(Sc)o(heduling)36 b ff (:)22 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)61 b fm(7)68 1349 y(2.2)46 b(The)15 b(Mac)n(h)h(Sc)o(heduler)33 b ff(:)23 b(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)61 b fm(9)173 1405 y(2.2.1) 50 b(Thread)15 b(States)e ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)61 b fm(9)173 1462 y(2.2.2)50 b(Data)14 b(Structures)e ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm (14)173 1518 y(2.2.3)50 b(Priorit)o(y)15 b(Calculations)22 b ff(:)g(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(16)173 1575 y(2.2.4)50 b(Prior\ ities)16 b(and)g(Usage)31 b ff(:)22 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)38 b fm(17)173 1631 y(2.2.5)50 b(Priorit)o(y)15 b(Interface)21 b ff (:)h(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(19)173 1687 y(2.2.6)50 b(Managing)15 b(Con)o(text)f(Switches)21 b ff(:)i(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)38 b fm(20)0 1789 y fj(3)k(Accurate)18 b(Usage)g(Timing)1286 b (21)68 1846 y fm(3.1)46 b(Statistical)16 b(Usage)e(Timing)20 b ff(:)i(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(21)68 1902 y(3.2)46 b (Timestamp-Based)15 b(Usage)g(Timing)38 b ff(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)38 b fm(22)68 1959 y(3.3)46 b(The)15 b(Mac)n(h)h(Timing)g(F)l(acil\ ity)22 b ff(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm (23)173 2015 y(3.3.1)50 b(Design)20 b ff(:)i(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(23)173 2072 y(3.3.2)50 b(Relationship)18 b(to)c(Lamp)r(ort)g(Clo)r(c)o(ks)44 b ff(:)23 b(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)38 b fm(25)173 2128 y(3.3.3)50 b(Implemen)q(tation)16 b ff(:)22 b(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(27)173 2185 y (3.3.4)50 b(P)o(erformance)45 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(28)68 2241 y(3.4)46 b(Conclusion)h ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)38 b fm(29)0 2343 y fj(4)k(Concurren)n(t)18 b(and)g(P)n(arallel)h(Prog\ ramming)e(Mo)q(dels)761 b(30)68 2399 y fm(4.1)46 b(Programming)14 b(Mo)q(dels) e ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(30)68 2456 y(4.2)46 b(Sc)o(heduling)17 b(Requiremen)q(ts)45 b ff(:)23 b (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(32)68 2512 y(4.3) 46 b(Conclusion)h ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(33)0 2614 y fj(5)k(Sc)o(heduling) 19 b(Supp)q(ort)f(for)f(Concurrency)986 b(34)68 2671 y fm(5.1)46 b(Ov)o(ervie\ w)c ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)38 b fm(34)68 2727 y(5.2)46 b(Discouragemen)o(t)15 b (and)g(Hando\013)g(Sc)o(heduling)25 b ff(:)e(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(35)68 2784 y(5.3)46 b(P)n(erformance)15 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(36)967 2927 y(i)p eop %%Page: 2 7 bop 0 50 a fe(CONTENTS)1664 b fm(ii)68 195 y(5.4)46 b(Related)16 b(W)l(ork) 23 b ff(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)38 b fm(39)0 297 y fj(6)k(Pro)q(cessor)17 b(Allo)r(cation)i (and)f(Con)n(trol)1062 b(41)68 353 y fm(6.1)46 b(The)15 b(Mac)n(h)h(Pro)q(ces\ sor)f(Allo)r(cation)g(F)l(acility)40 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm (41)173 410 y(6.1.1)50 b(Design)20 b ff(:)i(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(42)173 466 y(6.1.2)50 b (Implemen)q(tation)16 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)38 b fm(45)173 523 y(6.1.3)50 b(A)15 b(Gang)g(Sc)o(heduling)i (Serv)o(er)i ff(:)j(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(47)68 579 y (6.2)46 b(Scalabilit)q(y)20 b ff(:)j(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(49)68 636 y(6.3)46 b (Sc)o(heduling)17 b(Priorities)f(and)g(P)n(olicies)26 b ff(:)c(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)38 b fm(49)68 692 y(6.4)46 b(A\016nit)o(y)c ff(:)22 b (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)38 b fm(50)68 749 y(6.5)46 b(Heterogeneit)o(y)24 b ff(:)e(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(51)68 805 y(6.6)46 b(Related)16 b(W)l(ork)23 b ff(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(52)0 907 y fj(7)k(Comp)q(etitive)17 b(NUMA)g(Memory)f(Managemen)n(t)i(Algorithms) 562 b(54)68 963 y fm(7.1)46 b(Ov)o(erview)c ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(54)68 1020 y(7.2)46 b(In)o(tro)q(duction)15 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(54)68 1076 y (7.3)46 b(Replication)40 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(57)173 1133 y(7.3.1)50 b (Replication)18 b(for)c(Tw)o(o)h(No)q(des)43 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)38 b fm(57)173 1189 y(7.3.2)50 b(Replication)18 b(for)c(the)i(Unif\ orm)f(Problem)k ff(:)j(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(58)173 1246 y(7.3.3)50 b(Replicati\ on)18 b(for)c(T)l(rees)21 b ff(:)h(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)38 b fm(58)173 1302 y(7.3.4)50 b(Replication)18 b(for)c(Uniform)i(T)l (rees)i ff(:)k(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(59)68 1359 y(7.4)46 b(Migr\ ation)31 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(61)173 1415 y(7.4.1)50 b(Lo)o(w)o(er) 15 b(Bound)29 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)38 b fm(61)173 1472 y(7.4.2)50 b(Migration)15 b(on)g(a)g(Complete) h(Graph)39 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(62)173 1528 y(7.4.3)50 b (Migrations)15 b(on)g(an)g(Arbitrary)g(T)l(ree)36 b ff(:)23 b(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)38 b fm(64)173 1584 y(7.4.4)50 b(Migration)15 b(on)g(Uniform)h(T)l(rees)i ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(67)173 1641 y(7.4.5)50 b(Decre\ men)o(tation)15 b(V)m(arian)n(ts)c ff(:)23 b(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)38 b fm(69)68 1697 y(7.5)46 b(Lo)q(ok-Ahead)16 b(One)32 b ff(:)22 b (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm (70)68 1754 y(7.6)46 b(Applications)17 b(of)e(the)g(Algorithms)36 b ff(:)23 b (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(70)68 1810 y(7.7)46 b(F)l(urth\ er)15 b(W)l(ork)25 b ff(:)d(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(72)68 1867 y(7.8)46 b(Conclusion)h ff (:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)38 b fm(72)0 1969 y fj(8)k(Implemen)n(ting)19 b(NUMA)d(Memory) g(Managemen)o(t)801 b(74)68 2025 y fm(8.1)46 b(Ov)o(erview)c ff(:)23 b(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)38 b fm(74)68 2082 y(8.2)46 b(Processor-Memory)15 b(Model)39 b ff(:)23 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(74)68 2138 y(8.3) 46 b(Basic)16 b(Problem)45 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(76)68 2194 y(8.4)46 b(Op)r(era\ ting)15 b(Systems)g(Issues)38 b ff(:)23 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)38 b fm(76)173 2251 y(8.4.1)50 b(Limited)17 b(Ph)o(ysical)f (Memory)f(Size)41 b ff(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(76)173 2307 y(8.4.\ 2)50 b(Memory)15 b(Managemen)n(t)g(In)o(teractions)34 b ff(:)22 b(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)38 b fm(77)68 2364 y(8.5)46 b(Hardw)n(are)15 b(Supp)r(ort)36 b ff(:)22 b (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm (78)68 2420 y(8.6)46 b(Replication)17 b(of)e(W)l(ritable)h(P)o(ages)23 b ff (:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(79)68 2477 y(8.7)46 b (Input)16 b(and)f(F)l(eedback)43 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(79)68 2533 y(8.8)46 b(Related)16 b(W)l (ork)23 b ff(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)38 b fm(80)p eop %%Page: 3 8 bop 0 50 a fe(CONTENTS)1651 b fm(iii)0 195 y fj(9)42 b(Conclusion)1578 b(81) 68 252 y fm(9.1)46 b(Timesharing)16 b(Sc)o(heduling)h(and)f(Timing)35 b ff (:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(81)68 308 y(9.2)46 b(Sc)o(heduling) 17 b(Supp)s(ort)d(for)g(Concurrency)i(and)g(P)n(arallelism)30 b ff(:)22 b(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(82)68 364 y(9.3)46 b(NUMA)15 b(Memory)f(Managemen)o(t)22 b ff(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(83)68 421 y(9.4)46 b(Conclusion)h ff(:)22 b (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)38 b fm(84)0 523 y fj(A)28 b(Mac)o(h)17 b(Pro)q(cessor)g(Allo)r(cation) i(In)n(terface)992 b(85)68 579 y fm(A.1)35 b(Host)14 b(Op)r(erations)43 b ff (:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)38 b fm(85)173 636 y(A.1.1)h(Get)15 b(Host)f(P)o(ort:)19 b(host)r 14 2 v 14 w(self)d(and)f(host)s 14 2 v 13 w(priv)t 14 2 v 13 w(self)g ff(:)22 b(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm (85)173 692 y(A.1.2)h(Get)15 b(Pro)q(cessor)g(Con)n(trol)g(P)o(orts:)k(host)r 14 2 v 14 w(pro)q(cessors)31 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(85)173 749 y(A.1.3)h(Obtain)16 b(Host) f(Information:)20 b(host)r 14 2 v 14 w(info)15 b ff(:)22 b(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(86)173 805 y(A.1.4)h(Obtain)16 b(Kernel)h(V)l(ersion:)j(host)s 14 2 v 13 w(k)o(ernel)t 14 2 v 14 w(v)n(ersion)41 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(86)173 862 y(A.1.5)h (Obtain)16 b(List)g(of)f(Pro)q(cessor)f(Sets:)20 b(host)s 14 2 v 13 w(pro)q (cessor)s 14 2 v 13 w(sets)47 b ff(:)22 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)38 b fm(87)68 918 y(A.2)d(Processor)15 b(Op)r(erations)h ff (:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm (87)173 974 y(A.2.1)h(Obtain)16 b(Information:)k(pro)q(cessor)s 14 2 v 13 w (info)j ff(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(87)173 1031 y(A.2.2)h(Start)14 b(Pro)q (cessor:)20 b(pro)q(cessor)r 14 2 v 14 w(start)14 b ff(:)22 b(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)38 b fm(87)173 1087 y(A.2.3)h(Stop)15 b(Pro)q(cessor:)20 b(pro)q(cesso\ r)r 14 2 v 14 w(exit)45 b ff(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(88)173 1144 y(A.2.4)h(Miscellaneous:)22 b(pro)q(cessor)s 14 2 v 13 w(con)o(trol)40 b ff (:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(88)68 1200 y(A.3)d(Processor)15 b(Set)h (Op)r(erations)43 b ff(:)23 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)38 b fm(88)173 1257 y(A.3.1)h(Creation:)20 b(pro)q(cessor)r 14 2 v 14 w (set)s 14 2 v 13 w(create)d ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(88)173 1313 y(A.3.2)h(Destruction:)20 b(pro)q(cessor)s 14 2 v 13 w(set)s 14 2 v 13 w (destro)o(y)37 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(88)173 1370 y(A.3.3)h(Iden\ tify)15 b(Default)h(Set:)k(pro)q(cessor)r 14 2 v 14 w(set)r 14 2 v 14 w(defau\ lt)j ff(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)38 b fm(88)173 1426 y(A.3.4)h(Obtain)16 b(Information:)k(pro)q(ces\ sor)s 14 2 v 13 w(set)s 14 2 v 13 w(info)h ff(:)i(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(89)173 1483 y (A.3.5)h(Get)15 b(List)h(of)e(T)l(asks:)20 b(pro)q(cessor)r 14 2 v 14 w(set)s 14 2 v 13 w(tasks)39 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(89)173 1539 y(A.3.6)h(Get)15 b (List)h(of)e(Threads:)20 b(pro)q(cessor)s 14 2 v 13 w(set)s 14 2 v 14 w(threa\ ds)13 b ff(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)38 b fm(90)173 1595 y(A.3.7)h(Get)15 b(Con)n(trol)g(P)o(ort:)k (host)r 14 2 v 14 w(pro)q(cessor)s 14 2 v 13 w(set)s 14 2 v 13 w(priv)34 b ff (:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)38 b fm(90)68 1652 y(A.4)d(Execution)16 b(Con)n(trol)f(Op)r(erations)j ff(:)k(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(90)173 1708 y(A.4.\ 1)h(Pro)q(cessor)15 b(Assignmen)o(t:)20 b(pro)q(cessor)s 14 2 v 13 w(assign) 38 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)38 b fm(90)173 1765 y(A.4.2)h(Obtain)16 b(Pro)q(cessor)f (Assignment:)k(pro)q(cessor)s 14 2 v 13 w(get)s 14 2 v 13 w(assignmen)o(t)25 b ff(:)d(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(90)173 1821 y(A.4.3) h(Thread)15 b(Assignment:)20 b(thread)r 14 2 v 14 w(assign)32 b ff(:)22 b(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)38 b fm(91)173 1878 y(A.4.4)h(Default)15 b(Thread)h(Assignmen)o (t:)k(thread)r 14 2 v 14 w(assign)s 14 2 v 14 w(default)34 b ff(:)22 b(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(91)173 1934 y(A.4.\ 5)h(Obtain)16 b(Thread)f(Assignment:)20 b(thread)r 14 2 v 14 w(get)r 14 2 v 14 w(assignmen)o(t)f ff(:)j(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)38 b fm(91)173 1991 y(A.4.6)h(T)l(ask)15 b(Assignment:)k(task)r 14 2 v 14 w (assign)k ff(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(91)173 2047 y(A.4.7)h(Defa\ ult)15 b(T)l(ask)g(Assignment:)k(task)r 14 2 v 14 w(assign)s 14 2 v 14 w(defa\ ult)25 b ff(:)d(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)38 b fm(91)173 2104 y(A.4.8)h(Obtain)16 b(T)l(ask)f(Assignment:)k(task) r 14 2 v 14 w(get)r 14 2 v 14 w(assignmen)o(t)45 b ff(:)22 b(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(92)0 2205 y fj(B)31 b (Mac)o(h)17 b(Priorit)o(y)g(and)h(P)o(olicy)g(In)n(terface)1026 b(93)68 2262 y fm(B.1)37 b(Priorit)o(y)15 b(Op)r(erations)g ff(:)22 b(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(93)173 2318 y(B.1.1)j (Set)15 b(Thread)h(Priorit)o(y:)j(thread)s 14 2 v 14 w(priorit)o(y)34 b ff (:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)38 b fm(93)173 2375 y(B.1.2)j(Change)15 b(Thread)h(Max)e (Priorit)o(y:)20 b(thread)r 14 2 v 14 w(max)r 14 2 v 14 w(priorit)o(y)27 b ff (:)22 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(93)173 2431 y(B.1.3)j(Set)15 b(T)m(ask)f(Priorit)o(y:)20 b(task)r 14 2 v 14 w(priori\ t)o(y)25 b ff(:)d(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(94)173 2488 y(B.1.4)j(Set)15 b (Max)g(Priorit)o(y)g(for)g(Processor)g(Set:)20 b(pro)q(cessor)s 14 2 v 13 w (set)s 14 2 v 14 w(max)r 14 2 v 14 w(priorit)o(y)39 b ff(:)23 b(:)f(:)g(:)h (:)f(:)g(:)h(:)38 b fm(94)68 2544 y(B.2)f(Sc)o(heduling)17 b(P)o(olicy)f(Op)r (erations)32 b ff(:)22 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm (94)173 2601 y(B.2.1)j(Set)15 b(Thread)h(P)n(olicy:)21 b(thread)s 14 2 v 14 w (p)q(olicy)28 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(94)173 2657 y(B.2.2)j(Enab\ le)16 b(P)o(olicy:)21 b(pro)q(cessor)s 14 2 v 13 w(set)s 14 2 v 13 w(p)r(olic\ y)t 14 2 v 13 w(enable)g ff(:)h(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(95)173 2714 y(B.2.3)j(Disable)16 b(P)o (olicy:)21 b(pro)q(cessor)s 14 2 v 13 w(set)s 14 2 v 13 w(p)r(olicy)t 14 2 v 14 w(disable)36 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)38 b fm(95)p eop %%Page: 4 9 bop 0 50 a fe(CONTENTS)1652 b fm(iv)0 195 y fj(C)30 b(The)18 b(cpu)s 16 2 v 16 w(serv)m(er)f(In)o(terfaces)1242 b(96)68 252 y fm(C.1)36 b(Serv)o(er)15 b (RPC)g(Interface)f ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)38 b fm(96)173 308 y(C.1.1)i(Create)15 b(a)g(Request:)20 b(cpu) t 14 2 v 13 w(request)s 14 2 v 14 w(create)12 b ff(:)22 b(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm (96)173 364 y(C.1.2)i(Add)16 b(to)e(a)h(Request:)21 b(cpu)s 14 2 v 14 w(reque\ st)s 14 2 v 13 w(add)15 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(96)173 421 y(C.1.3) i(Request)16 b(Noti\014cations:)k(cpu)t 14 2 v 13 w(request)s 14 2 v 14 w(set) r 14 2 v 14 w(notify)38 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(97)173 477 y(C.1.4)i(Activ)n(ate)15 b(Requ\ est:)21 b(cpu)s 14 2 v 14 w(request)r 14 2 v 14 w(activ)n(ate)13 b ff(:)23 b (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)38 b fm(97)173 534 y(C.1.5)i(Activ)n(ate)15 b(Request)h(for)e(T)l(ask:) 20 b(cpu)s 14 2 v 14 w(request)s 14 2 v 13 w(activ)n(ate)r 14 2 v 14 w(task)f ff(:)j(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(97)173 590 y (C.1.6)i(T)l(erminate)16 b(a)f(Request:)20 b(cpu)t 14 2 v 13 w(request)s 14 2 v 14 w(destro)n(y)h ff(:)h(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(98)173 647 y(C.1.7)i(Get)15 b(Request)h (Information:)k(cpu)s 14 2 v 14 w(request)r 14 2 v 14 w(status)34 b ff(:)22 b (:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm (98)173 703 y(C.1.8)i(Get)15 b(Serv)o(er)g(Information:)20 b(cpu)s 14 2 v 14 w (serv)o(er)r 14 2 v 14 w(info)35 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(98)68 760 y(C.2)e(Libr\ ary)15 b(Interfaces)f ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(99)173 816 y(C.2.1)i(Allo)s(cate)14 b(Inte\ rface)e ff(:)22 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm (99)173 873 y(C.2.2)i(T)l(ask)15 b(In)o(terface)d ff(:)23 b(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(99)173 929 y(C.2.3)i (Ho)q(ok)15 b(Interface)36 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)16 b fm(100)173 985 y(C.2.4)40 b(T)l(ask-ho)q(ok)15 b (Interface)42 b ff(:)22 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm (100)0 1087 y fj(D)28 b(Thread)t 16 2 v 15 w(switc)o(h)18 b(In)n(terface)1253 b(101)0 1189 y(E)34 b(Timer)18 b(In)n(terface)1441 b(102)68 1246 y fm(E.1)38 b (Initialization)18 b(Routines)32 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(102)173 1302 y(E.1.1)42 b(Master)14 b(Init\ ialization:)23 b(init)t 14 2 v 14 w(timers)34 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(102)173 1359 y(E.1.2)42 b(Slav)n(e)16 b(Initialization:)22 b(start)r 14 2 v 13 w(timer)28 b ff(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(102)173 1415 y(E.1\ .3)42 b(T)l(ermination)16 b ff(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(102)68 1472 y(E.2)38 b(T)l(rap)15 b(and)g (Con)o(text)f(Switch)h(Routines)28 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)16 b fm(102)173 1528 y(E.2.1)42 b(T)l(rap)15 b(En)o(try:)k(time)s 14 2 v 14 w(trap)r 14 2 v 14 w(uen)o(try)j ff(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm (103)173 1584 y(E.2.2)42 b(T)l(rap)15 b(Exit:)20 b(time)s 14 2 v 14 w(trap)r 14 2 v 14 w(uexit)45 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(103) 173 1641 y(E.2.3)42 b(Interrupt)14 b(En)o(try:)20 b(time)s 14 2 v 13 w(int)r 14 2 v 14 w(en)o(try)k ff(:)e(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(103)173 1697 y(E.2\ .4)42 b(Interrupt)14 b(Exit:)20 b(time)t 14 2 v 13 w(int)r 14 2 v 14 w(exit) 12 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(103)173 1754 y(E.2.5) 42 b(Con)o(text)14 b(Switch:)20 b(timer)s 14 2 v 13 w(switc)o(h)26 b ff(:)c (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(104)68 1810 y(E.3)38 b(Basic)16 b(Timer)f (Op)r(erations)34 b ff(:)22 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)16 b fm(104)173 1867 y(E.3.1)42 b(Normalize:)21 b(timer)s 14 2 v 13 w (normalize)30 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(104)173 1923 y (E.3.2)42 b(Read:)21 b(timer)s 14 2 v 13 w(grab)e ff(:)j(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(104)173 1980 y(E.3.3)42 b(Read)16 b (Routines)39 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)16 b fm(104)173 2036 y(E.3.4)42 b(Read)16 b(a)f(Timer:)20 b(timer)s 14 2 v 14 w(read)k ff(:)e(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(104)173 2093 y(E.3.5)42 b(Read)16 b(b)q(oth)f(Thread)h(Timers:)k(thread)r 14 2 v 14 w (read)s 14 2 v 13 w(times)i ff(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(105)68 2149 y(E.4)38 b(Sc)o(heduler)17 b (In)o(terface)25 b ff(:)d(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)16 b fm(105)173 2205 y(E.4.1)42 b(Delta:)20 b(timer)s 14 2 v 14 w(delta)38 b ff(:)23 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(105)173 2262 y(E.4.2)42 b(F)l(ast)15 b(Delta:)k(TIMER)s 14 2 v 14 w(DEL) l(T)l(A)12 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(105)173 2318 y (E.4.3)42 b(Delta)15 b(for)g(Sc)o(heduler:)21 b(thread)s 14 2 v 14 w(timer)s 14 2 v 13 w(delta)43 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(105)68 2375 y(E.5)38 b(Timestamps) 15 b(and)g(Units)22 b ff(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)16 b fm(105)173 2431 y(E.5.1)42 b(Obtain)16 b(Timestamp:)k(get)r 14 2 v 14 w(timestamp)g ff(:)i(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(106)173 2488 y(E.5.2)42 b (Describ)r(e)16 b(Timestamps)42 b ff(:)22 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)16 b fm(106)173 2544 y(E.5.3)42 b(Unit)16 b(Adjustmen)o(t)26 b ff (:)c(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)16 b fm(106)p eop %%Page: 5 10 bop 0 527 a fg(List)41 b(of)f(Figures)68 750 y fm(2.1)46 b(Sc)o(heduler)17 b (State)d(Diagram)g ff(:)22 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)38 b fm(10)68 806 y(2.2)46 b(Mac)n(h)15 b(Run)i(Queue)f(Structure)30 b ff(:)22 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(14)68 904 y (3.1)46 b(Timer)15 b(Op)r(erations)f ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(26)68 1002 y(4.1)46 b(Tw)n (o)15 b(Lev)o(els)h(of)f(Concurrency)39 b ff(:)22 b(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)38 b fm(31)68 1100 y(5.1)46 b(Sync)o(hronization)16 b (Exp)r(erimen)o(t)f(Results)34 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm (37)68 1198 y(6.1)46 b(Processor)15 b(Allo)s(cation)g(Comp)q(onen)o(ts)g ff (:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(43)68 1254 y(6.2)46 b(Mac) n(h)15 b(Pro)q(cessor)g(Set)e ff(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(44)68 1352 y(8.1)46 b(Clustered)16 b (NUMA)f(Arc)o(hitecture)40 b ff(:)23 b(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)38 b fm(75)961 2927 y(v)p eop %%Page: 6 11 bop 0 527 a fg(List)41 b(of)f(T)-10 b(ables)68 750 y fm(2.1)46 b(Sc)o(hedule\ r)17 b(States)41 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)38 b fm(11)68 806 y(2.2)46 b(Sc)o(heduler)17 b(T)l(ran\ sitions)12 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)38 b fm(11)68 863 y(2.3)46 b(Binary)15 b(F)l(ractional)h(Appro)o (ximation)23 b ff(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(17)68 961 y (3.1)46 b(Multimax)15 b(Timer)h(Switc)o(h)g(Costs)e(\(Instructions)h(and)h (Microseconds\))30 b ff(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(28)68 1059 y(4.1)46 b(Programming)14 b(Mo)q(dels)i(for)e(P)o(arallel)j(and) e(Concurren)o(t)g(Programming)45 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)38 b fm(31)68 1156 y(5.1)46 b(Mild-bad)16 b(Synchronization)g(Times)g (\(Milliseconds\))29 b ff(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(37)68 1213 y(5.2)46 b(Message)14 b (P)o(assing)h(Hando\013)g(Results)29 b ff(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)38 b fm(38)68 1311 y(6.1)46 b(Multimax)15 b(Allo)s(cation)g(Op)r(erati\ on)g(P)o(erformance)40 b ff(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)38 b fm(46)955 2927 y(vi)p eop %%Page: 1 12 bop 0 506 a fd(Chapter)34 b(1)0 714 y fg(In)m(tro)t(duction)0 936 y fm(This) 18 b(thesis)g(describ)s(es)g(researc)n(h)g(in)h(the)e(design)i(and)f(implemen\ tation)g(of)f(m)o(ultipro)r(cessor)g(resource)h(man-)0 993 y(agemen)o(t)f(and) h(related)h(areas.)27 b(New)18 b(approac)o(hes)g(to)f(resource)h(managemen)o (t)f(are)h(required)h(b)o(y)f(signi\014cant)0 1049 y(c)o(hanges)23 b(in)g(m)o (ultipro)r(cessor)f(arc)o(hitectures)h(and)g(programming.)42 b(The)23 b(use)g (of)f(pro)q(cessing)i(resources)e(is)0 1106 y(c)o(hanged)c(b)o(y)f(tec)o(hniq\ ues)i(suc)o(h)f(as)f(parallel)i(programming)e(and)g(m)o(ultithreading)i(that) e(emplo)o(y)h(more)f(than)0 1162 y(one)d(indep)s(endently)f(executing)i(en)o (tit)o(y)f(\(e.g.,)e(pro)q(cess,)i(thread\))f(in)i(a)e(single)i(application.) 21 b(This)14 b(co)r(op)q(eration)0 1219 y(within)19 b(applications)g(con\015i\ cts)f(with)g(the)g(usual)g(timesharing)g(notion)g(that)f(all)i(sc)o(hedulable) g(entities)f(com-)0 1275 y(p)r(ete)d(indep)s(endently)m(.)21 b(A)16 b(recen)o (t)g(trend)f(in)i(large)f(m)n(ultipro)s(cessors)f(is)h(the)g(use)g(of)g(non-u\ niform)g(memory)l(,)f(so)0 1332 y(that)i(di\013eren)o(t)g(pro)q(cessors)g(ha) o(v)o(e)g(di\013erent)g(access)g(times)h(to)f(the)g(same)g(region)h(of)f(memo\ ry)l(.)26 b(Suc)o(h)18 b(designs)0 1388 y(inv)m(alidate)i(resource)e(manageme\ n)o(t)g(tec)o(hniques)i(based)f(on)f(uniform)i(memory)-5 b(,)19 b(b)r(ecause) g(the)g(memory)f(can)0 1445 y(no)e(longer)f(b)r(e)h(treated)f(as)g(a)g(single) i(large)f(p)q(o)q(ol.)22 b(This)16 b(researc)o(h)f(inv)o(estigates)g(new)h (tec)o(hniques)h(for)e(resource)0 1501 y(managemen)o(t;)j(its)g(primary)g(fo) q(cus)g(is)g(on)g(the)f(op)r(erating)g(system,)h(but)g(imp)r(ortan)n(t)f(cons\ ideration)i(is)f(giv)o(en)0 1557 y(to)g(utilizing)k(information)d(that)f(ma)o (y)h(b)q(e)g(a)o(v)m(ailable)i(from)d(applications.)33 b(The)19 b(c)o(hanging) h(requirements)e(of)0 1614 y(applications)h(motiv)m(ate)e(the)g(ma)r(jor)g (researc)o(h)g(areas)g(of)g(pro)q(cessor)g(sc)o(heduling)i(and)e(non-uniform) h(memory)0 1670 y(managemen)o(t)12 b(b)r(ecause)i(they)f(con)o(tain)g(the)h (most)e(imp)r(ortan)n(t)h(problems)h(raised)f(b)o(y)g(the)h(c)o(hanging)f(des\ ign)i(and)0 1727 y(use)h(of)e(m)o(ultipro)r(cessors.)71 1783 y(The)19 b(colle\ ction)j(of)d(problems)h(inv)n(olved)g(in)g(managing)f(pro)q(cessing)i(resourc\ es,)f(or)f fi(sche)n(duling)p fm(,)g(can)h(b)r(e)0 1840 y(c)o(haracterized)e (b)o(y)f(the)h(class)g(of)f(applications)i(that)d(exhibits)j(eac)o(h)f(proble\ m.)27 b(Some)17 b(parallel)i(applications)0 1896 y(require)e(dedicated)h(use) e(of)g(pro)q(cessors)g(for)f(acceptable)j(p)q(erformance,)e(and)g(cannot)g (tolerate)g(sharing)h(these)0 1953 y(with)e(an)o(y)g(other)f(uses)h(\(as)g (w)n(ould)h(b)q(e)f(the)g(case)g(under)h(timesharing\).)k(This)15 b(is)h(comp) q(ounded)g(b)o(y)f(the)g(v)m(ariet)o(y)0 2009 y(of)h(languages)g(and)g(progra\ mming)f(mo)q(dels)i(that)f(exhibit)h(suc)o(h)g(requirements.)22 b(A)16 b(seco\ nd)g(class)h(of)e(applica-)0 2066 y(tions)g(uses)g(more)g(activ)o(e)g(en)o (tities)h(than)f(pro)q(cessors)f(and)h(needs)h(supp)r(ort)e(for)h(e\013ectiv) o(e)g(comm)n(unication)i(and)0 2122 y(sync)o(hronization)i(among)e(them.)28 b (A)18 b(third)g(problem)h(o)q(ccurs)f(in)h(in)o(tegrating)f(supp)q(ort)g(for) f(these)h(classes)g(of)0 2178 y(applications)d(without)f(losing)g(sight)f(of) g(timesharing,)h(which)g(is)g(still)h(an)f(imp)r(ortan)n(t)f(\(if)h(not)f(dom\ inan)o(t\))g(class)0 2235 y(of)i(applications)i(for)d(m)o(ultipro)r(cessors.) 71 2291 y(This)e(researc)o(h)g(emplo)o(ys)g(a)f(n)o(um)o(b)r(er)g(of)h(tec)o (hniques)h(to)e(address)h(these)g(sc)o(heduling)i(problems.)19 b(Extensions)0 2348 y(and)f(modi\014cations)h(to)e(an)g(existing)i(sc)o(heduling)g(metho)q (dology)f(are)f(emphasized)i(to)d(preserv)o(e)i(supp)r(ort)e(for)0 2404 y(tim\ esharing.)28 b(A)18 b(ma)r(jor)f(con)o(tribution)h(of)f(this)h(w)o(ork)f(is)h (the)g(design)h(and)f(implementation)f(of)h(a)f(pro)q(cessor)0 2461 y(allo)r (cation)12 b(and)g(con)o(trol)g(facility)g(for)f(the)h(Mac)n(h)g(op)r(erating) f(system[42)o(])h(to)f(allo)o(w)h(pro)q(cessors)g(to)f(b)q(e)h(dedicated)0 2517 y(to)h(applications.)21 b(The)14 b(implemen)q(tation)f(of)g(this)h(facil\ ity)g(has)f(b)r(een)h(v)n(alidated)g(b)o(y)g(pro)q(duction)h(use,)f(and)f(it) h(is)0 2574 y(one)f(of)g(the)g(\014rst)f(successful)j(applications)f(of)f(p)q (olicy-mec)q(hanism)g(separation)g(to)f(m)o(ultipro)r(cessor)h(sc)o(heduling) 0 2630 y(\(and)19 b(in)h(particular,)h(to)e(the)g(problem)h(of)f(dividing)i (a)e(m)o(ultipro)r(cessor)g(among)g(comp)q(eting)h(applications\).)0 2687 y (The)c(tec)o(hniques)h(of)f fi(Disc)m(our)n(agement)h(and)g(Hando\013)g(Sche) m(duling)e fm(are)h(introduced)h(to)e(address)h(the)g(comm)n(u-)0 2743 y(nica\ tion)j(and)f(sync)o(hronization)h(problems)g(of)f(applications)h(with)g(more) e(activ)o(e)i(en)o(tities)g(than)e(pro)r(cessors.)0 2800 y(These)e(tec)o(hniq\ ues)g(yield)i(signi\014cant)d(p)q(erformance)g(improv)n(ements)f(for)h(comm)o (unication)h(and)g(sync)o(hroniza-)962 2927 y(1)p eop %%Page: 2 13 bop 0 50 a fe(CHAPTER)15 b(1.)35 b(INTRODUCTION)1238 b fm(2)0 195 y(tion)18 b (in)h(this)f(class)g(of)f(applications.)30 b(Supp)r(ort)17 b(for)g(timesharin\ g)i(has)e(b)r(een)h(preserv)o(ed)g(b)o(y)g(integrating)f(the)0 252 y(new)e (features)f(in)o(to)g(the)g(Mac)o(h)g(timesharing)h(sc)o(heduler.)21 b(In)15 b (the)g(pro)q(cess,)f(it)h(w)n(as)f(necessary)h(to)e(redesign)j(the)0 308 y (sc)o(heduler)e(from)f(scratc)n(h,)g(and)g(a)g(n)o(um)o(b)r(er)f(of)h(lessons) h(w)n(ere)f(learned)h(ab)r(out)e(the)h(design)h(and)g(implementation)0 364 y (of)e(timesharing)h(sc)o(hedulers.)20 b(An)13 b(imp)r(ortan)m(t)f(con)o(tribu\ tion)h(in)g(this)g(area)f(is)h(the)f(design)h(and)g(implementation)0 421 y (of)i(a)f(timestamp-based)h(timing)h(facility)f(to)g(measure)f(pro)q(cessor)h (usage)g(on)g(b)q(oth)g(unipro)r(cessors)g(and)g(m)o(ulti-)0 477 y(pro)q(cess\ ors.)26 b(This)18 b(timing)g(facility)g(eliminates)h(the)e(distortion)h(in)g (measuremen)o(ts)f(obtained)h(from)f(curren)o(t)0 534 y(statistical)j(timing) g(implemen)q(tations)f(and)h(impro)o(v)o(es)f(accuracy)h(b)o(y)f(m)o(ultiple) j(orders)d(of)g(magnitude)h(at)f(a)0 590 y(minimal)e(o)n(v)o(erhead)f(cost.)j (A)c(mo)q(dicum)h(of)f(hardw)o(are)g(supp)r(ort)f(is)i(required)g(to)e(genera\ te)h(the)h(timestamps.)71 647 y(The)g(non-uniform)i(memory)e(managemen)n(t)g (researc)o(h)h(tak)n(es)f(a)h(di\013eren)o(t)f(approac)o(h,)h(predicated)g (on)g(ob-)0 703 y(taining)g(more)e(information)h(from)f(hardw)o(are.)22 b(Cur\ ren)o(t)15 b(implemen)q(tations)g(of)h(non-uniform)h(memory)e(man-)0 760 y (agemen)o(t)d(are)g(restricted)h(b)o(y)f(the)h(a)n(v)n(ailable)h(reference)f (information.)19 b(Hardw)o(are)12 b(reference)h(and)g(mo)q(di\014cation)0 816 y(bits)j(indicate)h(only)e(that)g(a)g(page)g(w)o(as)g(referenced)h(or)f(mo)q (di\014ed)i(at)d(least)i(once)f(sometime)h(in)g(the)f(past;)g(they)0 873 y (do)j(not)f(indicate)j(ho)o(w)d(man)o(y)h(references)g(w)o(ere)g(made)g(or)f (ho)o(w)h(long)g(ago.)27 b(If)19 b(more)e(reference)i(information)0 929 y(w)o (ere)c(a)o(v)m(ailable,)i(more)e(sophisticated)h(\(and)f(hop)r(efully)i(b)q (etter\))e(managemen)o(t)g(tec)n(hniques)i(w)o(ould)f(b)q(e)g(p)r(ossi-)0 985 y(ble.)23 b(This)16 b(researc)o(h)f(assumes)h(that)f(an)o(y)h(desired)g(infor\ mation)g(ab)r(out)f(the)h(access)g(history)f(of)h(an)o(y)f(region)h(of)0 1042 y(memory)d(is)h(a)o(v)m(ailable)h(and)f(inv)o(estigates)f(replication)i(and)f (migration)f(algorithms)h(that)f(can)g(tak)o(e)g(adv)n(an)o(tage)0 1098 y(of) 18 b(this)i(information.)30 b(These)20 b(algorithms)e(cannot)h(b)q(e)g(implem\ en)q(ted)g(in)h(the)e(current)g(generation)h(of)f(non-)0 1155 y(uniform)e(mem\ ory)e(access)h(\(NUMA\))g(m)n(ultipro)s(cessors,)f(but)h(ma)o(y)g(suggest)f (appropriate)h(hardw)o(are)g(supp)r(ort)0 1211 y(for)g(future)g(designs.)71 1268 y(The)d(ma)r(jor)f(con)o(tributions)i(of)f(the)g(non-uniform)h(memory)e (managemen)o(t)h(researc)n(h)h(are)e(new)i(comp)q(etitive)0 1324 y(algorithms) d(and)h(a)f(case)g(study)h(of)f(ho)o(w)g(they)g(could)i(b)q(e)f(incorp)r(orat\ ed)f(in)o(to)g(Mac)n(h.)19 b(The)11 b(primary)f(con)o(tribution)0 1381 y(is)i (new)f(on-line)i(algorithms)e(for)f(sev)o(eral)h(imp)r(ortan)n(t)g(cases)g (of)f(the)i(replication)g(and)f(migration)g(problems.)20 b(The)0 1437 y(p)r (erformance)13 b(of)g(these)g(algorithms)h(is)g(within)h(a)e(small)h(constan) n(t)g(factor)e(\(2{4\))g(of)h(optimal;)h(this)g(prop)q(ert)o(y)f(of)0 1494 y (on-line)h(algorithms)f(is)g(called)h fi(c)m(omp)o(etitiveness)p fm(.)j(The)c (migration)f(algorithms)h(are)f(an)g(imp)r(ortan)n(t)g(theoretical)0 1550 y (con)o(tribution,)i(as)g(they)f(are)h(the)f(\014rst)g(comp)r(etitiv)o(e)h(alg\ orithms)g(for)f(the)g fi(1-server)i(with)h(excursions)c fm(problem.)0 1606 y (This)j(researc)o(h)f(includes)j(not)d(only)h(the)f(design)h(and)g(\(comp)q (etitiv)o(e\))g(analysis)g(of)f(these)g(algorithms,)g(but)h(also)0 1663 y(a)h (design)h(study)g(of)e(ho)o(w)h(they)h(could)g(b)q(e)g(incorp)r(orated)f(in)o (to)g(Mac)n(h.)24 b(The)16 b(c)o(hosen)h(cases)f(of)g(the)g(replication)0 1719 y(and)f(migration)h(problems)f(apply)h(to)f(most)f(current)g(and)i(prop)q(ose\ d)f(NUMA)g(m)o(ultipro)r(cessor)g(designs.)0 1863 y fc(1.1)70 b(Programming) 22 b(Mo)s(dels)g(and)i(Sc)n(heduling)d(Requiremen)n(ts)0 1964 y fm(The)f(sc)o (heduling)h(researc)o(h)e(is)h(motiv)n(ated)f(b)o(y)g(the)h(sc)o(heduling)h (requirements)e(of)g(parallel)i(and)f(concurren)o(t)0 2021 y(programs,)f(whic\ h)h(are)g(deriv)o(ed)g(from)f(a)h(classi\014cation)h(of)e(their)i(programming) e(mo)q(dels.)34 b(The)20 b(classi\014ca-)0 2077 y(tion)e(is)h(based)f(on)g (the)g(additional)h(concurrency)g(\(if)f(an)o(y\))f(that)h(the)g(mo)q(dels)h (in)o(tro)q(duce)f(b)r(ey)o(ond)g(the)g(basic)0 2133 y(hardw)o(are)13 b(paral\ lelism.)22 b(An)14 b(op)q(erating)g(system)f(can)h(intro)q(duce)g(concurrency) h(b)o(y)f(pro)n(viding)i(indep)s(endently)0 2190 y(sc)o(hedulable)f(en)o(titi\ es)e(\(e.g.,)f(Unix)h(pro)q(cesses,)g(Mac)n(h)g(threads\))f(that)g(it)h(m)n (ultiplexes)i(on)o(to)d(the)g(hardw)o(are)g(pro-)0 2246 y(cessors.)19 b(These) 12 b(en)o(tities)h(are)f(called)h fi(virtual)h(pr)n(o)n(c)n(essors)d fm(or)g (VPs.)19 b(A)12 b(user)g(level)h(library)g(or)e(language)h(run)o(time)0 2303 y (can)17 b(introduce)h(further)f(concurrency)h(b)o(y)f(m)o(ultiplexing)j(langu\ age)d(level)g(entities)g(on)o(to)g(these)g(VPs.)25 b(These)0 2359 y(language) 13 b(en)o(tities)g(are)f(called)i fi(multir)n(outines)p fm(;)f(they)g(ma)n (y)f(b)r(e)h(though)n(t)f(of)g(as)g(m)o(ultipro)r(cessor)h(generalizations)0 2416 y(of)19 b(coroutines.)31 b(Sp)r(eci\014c)20 b(examples)g(of)f(m)n(ultiro\ utines)i(include)g(coroutines)f(\(only)f(1)g(VP\),)f(and)h(the)g(usual)0 2472 y(programming)14 b(notion)h(of)g(m)n(ultiple)i(threads)e(\(1)f(VP)h(p)q(er)g (m)o(ultiroutine\).)21 b(F)l(our)14 b(classes)i(emerge)e(when)i(these)0 2529 y (mo)q(dels)j(are)g(classi\014ed)h(b)o(y)e(their)h(use)g(of)f(concurrency)n (,)h(ranging)f(from)g fi(pur)n(e)i(p)n(ar)n(al)r(lelism)d fm(mo)q(dels)j(that) d(use)0 2585 y(no)d(concurrency)h(b)q(ey)o(ond)f(the)g(hardw)o(are)g(parallel\ ism)h(to)f fi(dual)h(c)n(oncurr)n(ent)f fm(models)h(that)f(tak)n(e)g(adv)m (an)o(tage)f(of)0 2642 y(concurrency)j(at)f(b)q(oth)g(the)g(op)q(erating)h (system)e(and)i(user)f(levels.)71 2698 y(Sc)o(heduling)j(supp)r(ort)d(require\ ments)g(for)h(parallel)h(and)f(concurrent)f(programs)g(can)h(b)q(e)h(identi\ \014ed)g(based)0 2754 y(on)e(this)h(classi\014cation.)21 b(Tw)n(o)15 b(suc)o (h)h(requirements)f(emerge:)p eop %%Page: 3 14 bop 0 50 a fe(CHAPTER)15 b(1.)35 b(INTRODUCTION)1238 b fm(3)56 195 y(1.)22 b (Models)16 b(that)d(assume)i(the)f(a)o(v)m(ailabilit)q(y)h(of)f(pro)q(cessors) g(for)g(parallel)i(execution)f(require)h(guaran)n(tees)e(of)114 252 y(that)g (a)o(v)m(ailabilit)q(y)m(.)56 345 y(2.)22 b(Models)15 b(that)d(employ)h(syste\ m)g(concurrency)h(\(e.g.,)e(more)h(threads)g(than)h(pro)q(cessors\))f(require) h(supp)r(ort)114 402 y(to)g(manage)h(this)g(concurrency)i(\(esp)q(ecially)g (for)e(e\016cient)g(sync)o(hronization)h(and)f(comm)n(unication\).)0 496 y (The)g(pro)q(cessor)f(allo)r(cation)g(and)h(con)o(trol)f(mec)o(hanisms)h(addr\ ess)g(the)f(\014rst)g(area)g(of)g(supp)r(ort,)f(and)i(the)f(second)0 552 y (is)i(addressed)f(b)o(y)h(the)f(tec)o(hniques)h(of)f(Discouragemen)o(t)g(and) g(Hando\013)g(Sc)o(heduling.)0 695 y fc(1.2)70 b(Pro)r(cessor)23 b(Allocation) g(and)g(Con)n(trol)0 797 y fm(This)17 b(thesis)g(describ)s(es)g(the)f(design) i(and)f(implemen)q(tation)f(of)g(a)g(pro)q(cessor)h(allo)r(cation)g(and)f(con) o(trol)h(facility)0 853 y(for)d(the)i(Mac)n(h)f(op)q(erating)h(system.)j(This) d(facility)f(allo)o(ws)g(the)g(pro)o(vision)h(of)f(dedicated)h(pro)q(cessors) f(to)f(appli-)0 910 y(cations)g(that)f(need)i(them)f(and)g(allo)o(ws)g(suc)o (h)g(applications)h(to)f(con)o(trol)f(their)i(use.)k(By)14 b(separating)g(p)r (olicy)h(and)0 966 y(mec)o(hanism,)h(this)g(facilit)q(y)f(can)h(divide)i(pro) q(cessor)d(resources)h(among)f(comp)r(eting)h(applications)h(without)f(in-)0 1023 y(v)o(olving)d(the)f(op)q(erating)h(system)e(k)o(ernel)i(in)g(the)g(deta\ ils)g(of)e(p)r(olicy)m(,)i(programming)e(mo)q(dels,)j(or)d(m)o(ultipro)r(cess\ or)0 1079 y(top)q(ology)l(.)24 b(The)17 b(op)q(erating)f(system)g(k)o(ernel)i (implements)e(the)h(basic)g(mec)o(hanisms)g(for)f(pro)q(cessor)h(allo)r(catio\ n)0 1136 y(and)12 b(con)o(trol.)18 b(Allo)s(cation)12 b(of)f(resources)h(amon\ g)f(comp)q(eting)h(applications)i(is)e(handled)h(b)o(y)f(a)f(privileged)j(ser\ v)o(er)0 1192 y(which)k(encapsulates)h(most)e(kno)o(wledge)h(ab)r(out)f(p)r (olicy)i(and)f(top)q(ology)l(.)28 b(Allo)r(cation)18 b(of)g(resources)g(withi\ n)h(a)0 1248 y(single)j(application)h(is)e(handled)i(b)o(y)d(the)h(applicatio\ n)i(itself;)h(this)e(encapsulates)f(most)g(kno)n(wledge)h(ab)q(out)0 1305 y (programming)17 b(mo)q(dels)h(within)h(the)e(individual)k(applications.)28 b (The)18 b(o)n(v)o(erall)g(design)h(of)e(the)g(facility)h(allo)o(ws)0 1361 y (applications)g(to)e(manage)g(resources)h(without)f(giving)i(them)f(absolute) g(con)n(trol;)g(the)g(serv)o(er)f(can)h(alw)o(a)n(ys)g(re-)0 1418 y(mo)n(v)o (e)f(resources)g(from)f(a)g(recalcitrant)g(application.)23 b(Changing)16 b (the)g(allo)r(cation)g(p)q(olicy)h(requires)g(replacing,)0 1474 y(at)d(most,) f(the)i(serv)o(er)f(and)h(application)h(interfaces)e(to)g(it;)g(the)h(k)o(ern\ el)g(\(whic)o(h)g(is)g(m)o(uc)o(h)g(harder)f(to)g(replace\))h(is)0 1531 y(not) g(a\013ected.)71 1587 y(A)e(pro)q(cessor)g(allo)r(cation)g(serv)o(er)g(for)f (a)h(simple)i(p)q(olicy)f(and)g(the)f(interfaces)f(to)h(it)g(ha)o(v)o(e)g(b)q (een)h(implemen)q(ted)0 1644 y(to)j(exercise)i(and)g(v)m(alidate)g(the)f(pro) q(cessor)g(allo)r(cation)g(and)g(con)o(trol)g(facilities.)30 b(This)18 b(serv) o(er)g(implemen)q(ts)f(a)0 1700 y(greedy)12 b(F)o(CFS)g(\(\014rst)g(come,)g (\014rst)g(serv)o(ed\))g(pro)q(cessor)g(allo)r(cation)h(p)q(olicy)h(sub)s(jec\ t)e(to)g(\014xed)h(time)f(and)h(resource)0 1757 y(limits.)21 b(The)14 b(p)q (olicy)h(means)e(that)g(as)h(man)n(y)g(requests)g(as)f(there)h(are)f(pro)q (cessors)g(for)g(will)j(b)q(e)e(gran)n(ted,)g(but)g(the)0 1813 y(serv)o(er)g (will)j(not)d(reorder)h(the)g(request)g(queue)g(\(e.g.,)f(mo)n(v)o(e)h(a)f (smaller)i(request)f(ahead)f(of)h(a)f(larger)h(one\).)20 b(The)0 1869 y(resul\ ting)14 b(serv)o(er)f(b)q(ears)g(distinct)h(similarities)h(to)e(a)f(batc)o (h)h(sc)o(heduler)i(for)d(ph)o(ysical)i(memory)l(.)19 b(The)13 b(serv)o(er)g (has)0 1926 y(b)r(een)g(successfully)i(used)f(for)f(researc)n(h)h(and)f(for)g (teac)n(hing)h(an)f(undergraduate)h(parallel)g(programming)f(course)0 1982 y (at)h(Carnegie)g(Mellon.)21 b(The)15 b(latter)f(use)h(allo)o(w)o(ed)f(undergr\ aduates)h(to)f(allo)r(cate)g(pro)q(cessors)g(when)h(needed)g(for)0 2039 y(gen\ eration)i(of)f(sp)q(eedup)i(curv)o(es)f(without)f(introducing)i(administrativ\ e)f(di\016culties,)h(or)e(ev)o(en)h(the)g(need)g(for)0 2095 y(recompilation)f (of)f(the)h(measured)f(applications.)71 2152 y(Man)n(y)g(extensions)h(and)g (c)o(hanges)g(to)e(the)i(p)q(olicy)h(implemen)q(ted)e(in)h(this)g(serv)o(er)f (are)g(p)r(ossible.)22 b(Since)17 b(it)e(is)0 2208 y(a)h(batc)o(h)g(sc)o(hedu\ ler)i(for)e(pro)q(cessors,)g(tec)o(hniques)i(originally)g(dev)o(elop)r(ed)f (for)f(batc)n(h)h(sc)o(heduling)i(of)d(memory)-5 b(,)0 2265 y(suc)o(h)17 b (as)f(assigning)h(higher)g(priorit)o(y)f(to)g(shorter)g(requests,)g(are)g(app\ licable.)25 b(In)17 b(addition,)g(the)g(serv)o(er)f(could)0 2321 y(b)r(e)i (extended)h(to)f(allo)o(w)h(some)f(users)g(higher)h(or)f(absolute)h(priorit)o (y)f(in)h(allo)r(cating)g(pro)q(cessors,)f(or)g(to)g(allo)o(w)0 2378 y(more) 12 b(pro)q(cessors)g(to)g(b)q(e)g(allo)r(cated)h(during)g(light)f(usage)g(p)q (erio)r(ds.)19 b(Finally)n(,)12 b(the)h(serv)n(er)g(can)f(b)r(e)g(replaced)i (in)f(its)0 2434 y(en)o(tiret)o(y)i(b)o(y)g(a)g(serv)o(er)g(that)g(implements) g(a)g(di\013eren)o(t)g(sc)o(heduling)j(p)q(olicy)m(.)i(One)c(promising)g(new) g(p)q(olicy)h(is)e(to)0 2490 y(v)m(ary)e(the)g(n)o(um)o(b)q(er)g(of)g(pro)q (cessors)g(a)n(v)n(ailable)h(to)f(applications)h(based)f(on)g(the)g(o)o(v)o (erall)h(demand)f(for)f(pro)r(cessors.)0 2547 y(A)20 b(serv)o(er)g(with)g(thi\ s)g(p)r(olicy)h(can)f(notify)g(applications)i(to)d(recon\014gure)h(when)h(it) f(c)o(hanges)g(the)g(n)o(um)o(b)q(er)g(of)0 2603 y(pro)q(cessors)15 b(a)o(v)m (ailable.)23 b(Researc)o(hers)16 b(at)e(Stanford)h(are)h(pursuing)g(this)g (approac)n(h)g(and)g(ha)o(v)n(e)g(implemen)q(ted)f(a)0 2660 y(serv)o(er)g(for) f(this)i(sc)o(heduling)h(p)r(olicy)f(under)g(Mac)n(h)g(with)f(go)q(o)q(d)g (initial)j(results[51)o(].)p eop %%Page: 4 15 bop 0 50 a fe(CHAPTER)15 b(1.)35 b(INTRODUCTION)1238 b fm(4)0 195 y fc(1.3) 70 b(Discouragemen)n(t)21 b(and)j(Hando\013)g(Sc)n(heduling)0 297 y fm(Progra\ ms)c(that)h(use)h(more)g(virtual)g(pro)q(cessors)g(\(e.g.,)f(Mac)o(h)h(thread\ s\))f(than)g(physical)h(pro)r(cessors)f(need)0 353 y(supp)r(ort)13 b(for)h (managing)g(the)g(resulting)h(system)f(concurrency)m(.)20 b(An)14 b(imp)r(ort\ an)n(t)g(problem)h(faced)f(b)o(y)g(such)g(pro-)0 409 y(grams)e(is)i(interacti\ ng)f(\(comm)n(unicating)i(or)d(sync)o(hronizing\))j(with)e(a)g(virtual)h(pro) q(cessor)f(that)g(isn't)g(currently)0 466 y(executing)19 b(on)e(a)h(ph)o(ysic\ al)h(pro)q(cessor.)27 b(In)18 b(the)g(absence)h(of)e(sp)q(eci\014c)i(supp)r (ort,)e(the)h(b)r(est)f(that)g(can)h(b)r(e)f(done)0 522 y(is)g(to)e(blo)r(c)o (k)h(the)g(virtual)h(pro)q(cessor,)f(or)f(w)o(ait)h(for)g(its)g(time)g(slice) i(to)e(run)g(out)g(in)h(the)f(hop)q(es)h(that)e(the)h(sc)o(hed-)0 579 y(uler) g(will)i(run)e(the)f(desired)i(virtual)f(pro)q(cessor.)21 b(Both)15 b(of)h (these)f(approac)o(hes)h(en)o(tail)g(p)r(oten)n(tially)h(prohibitiv)q(e)0 635 y(o)n(v)o(erheads)g(\(e.g.,)f(blo)r(c)o(king)i(on)f(a)f(Unix)i(system)f(can)g (require)h(t)n(w)o(o)e(system)h(calls)h(that)e(use)h(h)o(undreds)h(of)f(in-)0 692 y(structions)h(eac)o(h\).)28 b(This)19 b(thesis)g(describ)r(es)f(the)g (design)h(and)g(implementation)f(of)g(t)n(w)o(o)f(b)r(etter)g(approac)o(hes,) 0 748 y(Discouragemen)o(t)e(and)g(Hando\013)g(sc)o(heduling.)71 805 y(The)10 b (o)o(v)n(erall)i(design)f(implemen)q(ts)e(the)i(sc)o(heduler)h(in)f(the)f(k)o (ernel,)i(but)e(allows)g(users)g(to)g(pro)n(vide)i(hints)e(based)0 861 y(on) 16 b(lo)q(cal)h(information.)k(Implemen)q(ting)16 b(the)g(sc)o(heduler)h(in)g (the)e(k)o(ernel)i(a)o(v)n(oids)g(the)e(exp)r(ense)h(of)g(crossing)g(the)0 918 y(user-k)o(ernel)k(b)r(oundary)f(to)g(mak)n(e)h(critical)h(sc)n(heduler)g(dec\ isions,)h(and)d(also)h(a)n(v)o(oids)g(the)f(need)h(for)f(users)g(to)0 974 y (main)o(tain)d(complex)h(information)f(ab)q(out)f(the)h(o)o(v)o(erall)g(state) f(of)h(the)f(application)j(\(t)n(w)o(o)d(ma)r(jor)g(dra)o(wbac)o(ks)g(of)0 1030 y(some)e(past)h(e\013orts)e(in)j(this)f(area[57)o(,)f(25)o(]\).)19 b(Lo) r(cal)14 b(hints)f(tak)n(e)h(adv)m(an)o(tage)f(of)h(sc)n(heduling)i(informati\ on)e(that)f(is)0 1087 y(readily)k(a)o(v)m(ailable)h(to)e(users;)g(the)g(infor\ mation)h(that)e(the)h(current)f(thread)h(cannot)g(mak)o(e)g(progress,)f(and)i (the)0 1143 y(identit)o(y)d(of)g(some)g(other)g(thread)g(that)g(should)h(b)r (e)f(run)h(instead.)20 b(F)l(or)14 b(example,)h(a)f(thread)g(ma)n(y)h(b)q(e)g (unable)g(to)0 1200 y(acquire)h(a)g(lo)q(c)o(k,)g(or)f(it)h(ma)n(y)g(encoun)o (ter)g(an)f(empt)o(y)h(bu\013er)f(and)h(kno)o(w)f(the)h(identit)o(y)f(of)h (the)f(\(unique\))i(thread)0 1256 y(that)e(\014lls)j(that)d(bu\013er.)23 b (A)16 b(lo)r(cal)h(hin)o(t)f(only)h(a\013ects)e(the)i(thread)f(that)f(pro)o (vides)i(it,)f(and)g(p)r(ossibly)h(one)f(other)0 1313 y(thread.)25 b(The)17 b (use)g(of)g(hints)f(rather)g(than)h(directives)g(is)h(imp)r(ortan)n(t)e(b)r (ecause)h(it)g(allows)f(the)h(information)g(to)0 1369 y(b)r(e)d(wrong.)19 b (In)c(the)g(bu\013er)f(example,)h(the)g(thread)f(that)g(\014lls)i(the)e(bu\ \013er)g(ma)o(y)g(not)g(b)r(e)g(runnable)i(b)r(ecause)f(it)f(is)0 1426 y(blo) r(c)o(k)o(ed)g(w)o(aiting)h(for)e(something)i(else;)g(the)f(k)o(ernel)h(can)g (c)o(hec)o(k)f(this)h(more)f(e\013ectiv)o(ely)h(than)f(the)h(application.)71 1482 y fi(Disc)m(our)n(agement)23 b(sche)n(duling)f fm(in)o(v)o(olv)o(es)h (hints)f(that)f(the)i(curren)o(t)f(thread)h(should)g(not)f(b)r(e)h(run.)42 b (The)0 1539 y(mildest)17 b(hint)e(surrenders)h(the)g(thread's)f(time)g(slice) j(to)d(an)n(y)h(other)f(thread)h(that)e(can)i(use)g(it.)21 b(Stronger)15 b (hints)0 1595 y(discourage)j(the)g(sc)o(heduler)h(from)f(assigning)g(another) g(time)g(slice)h(b)o(y)f(depressing)h(the)f(thread's)f(priority)g(or)0 1651 y (blo)r(c)o(king)f(it)f(for)g(a)g(time)h(p)q(erio)r(d.)21 b(These)15 b(hints)g (are)g(intended)h(for)f(use)g(when)h(it)g(is)g(not)f(kno)n(wn)h(whic)o(h)g (thread)0 1708 y(is)e(b)r(eing)g(w)o(aited)g(for)f(\(e.g.,)f(some)i(other)f (thread)g(holds)i(a)e(lo)r(c)o(k,)g(but)h(the)g(lo)q(c)o(k)g(do)q(esn't)f(rec\ ord)h(the)g(identit)o(y)f(of)0 1764 y(the)h(holder\).)21 b(The)14 b(range)g (of)g(hints)g(is)h(motiv)m(ated)f(b)o(y)h(priorit)o(y)f(inv)o(ersion)g(and)h (timing)g(gran)n(ularity)f(problems)0 1821 y(encountered)h(in)h(building)i (real)d(sc)o(hedulers.)71 1877 y fi(Hando\013)h(sche)m(duling)f fm(employs)g (hints)g(that)f(explicitly)k(sp)r(ecify)e(the)f(thread)h(that)e(should)j(b)q (e)f(run)f(instead)0 1934 y(of)20 b(the)g(curren)o(t)g(thread.)34 b(If)21 b (that)e(thread)h(is)h(runnable)g(but)g(not)e(currently)h(running,)i(the)e(pro) q(cessor)g(will)0 1990 y(b)r(e)d(directly)h("handed)f(o\013")f(to)g(it,)h(b)o (ypassing)h(the)f(sc)o(heduler's)g(normal)g(thread)g(selection)h(algorithm.) 25 b(This)0 2047 y(yields)17 b(t)n(w)o(o)e(adv)m(an)o(tages:)56 2135 y(1.)22 b (The)15 b(desired)h(thread)g(runs)f(immediately)i(if)e(p)r(ossible.)56 2226 y (2.)22 b(The)15 b(con)o(text)g(switc)o(h)g(is)h(more)f(e\016cient)f(b)r(ecaus\ e)i(the)f(co)q(de)h(path)f(through)g(the)g(sc)o(heduler)i(is)e(shorter.)0 2315 y(Uses)i(in)h(the)g(op)q(erating)f(system)g(k)o(ernel)h(gain)f(additional)i (e\016ciency)g(b)o(y)e(optimizing)i(w)n(ak)o(eup)f(and)f(hando\013)0 2371 y (op)q(erations)k(in)h(a)e(single)i(path.)37 b(A)21 b(hando\013)f(hint)h(alw)o (a)n(ys)g(implies)i(some)d(form)g(of)h(discouragemen)o(t)g(hint,)0 2428 y(b)r (ecause)14 b(the)g(thread)g(making)h(the)f(hando\013)g(request)g(is)g(indicat\ ing)i(a)e(willingness)j(to)c(giv)o(e)i(up)f(the)g(pro)q(cessor.)0 2484 y(A)f (single)h(k)o(ernel)g(trap)e(can)h(pro)o(vide)h(b)q(oth)f(hin)o(ts)g(to)f(all\ ow)g(an)o(y)h(form)f(of)g(discouragement)g(to)h(b)q(e)g(coupled)h(with)0 2540 y(hando\013)h(sc)o(heduling.)71 2597 y(An)d(exp)r(erimental)g(ev)n(aluation)h (of)f(Discouragemen)o(t)h(and)f(Hando\013)h(Sc)o(heduling)h(demonstrates)e (their)h(use-)0 2653 y(fulness.)24 b(Sync)o(hronization)18 b(exp)q(eriments)e (sho)n(w)g(that)g(b)q(oth)g(Discouragemen)o(t)g(and)h(Hando\013)e(hints)h(imp\ ro)o(v)o(e)0 2710 y(p)r(erformance)j(of)g(sync)o(hronization)h(in)h(a)e(progr\ am)f(using)i(more)g(threads)f(than)g(pro)q(cessors)g(o)o(v)o(er)g(a)g(simple) 0 2766 y(con)o(text)14 b(switc)o(h)h(strategy)-5 b(.)19 b(Hando\013)14 b(hint\ s)g(ha)o(v)o(e)g(m)o(uc)o(h)h(b)q(etter)f(p)r(erformance,)g(and)g(are)h(faste\ r)e(than)i(sending)0 2823 y(a)20 b(message.)35 b(The)20 b(use)h(of)f(Hando\ \013)f(Scheduling)j(within)g(the)e(k)o(ernel)h(also)f(impro)o(v)o(es)g(the)h (p)q(erformance)f(of)p eop %%Page: 5 16 bop 0 50 a fe(CHAPTER)15 b(1.)35 b(INTRODUCTION)1238 b fm(5)0 195 y(remote) 14 b(pro)q(cedure)i(calls)g(b)o(y)e(shortening)i(the)e(co)r(de)h(path)f(requi\ red)i(to)e(run)h(the)g(receiver.)20 b(This)15 b(result)g(holds)0 252 y(for)i (a)g(m)n(ultipro)s(cessor)g(b)q(ecause)h(a)f(hando\013)g(can)h(b)q(e)g(used)f (to)g(ac)o(hieve)g(faster)g(dispatc)o(h)h(of)f(the)g(recipien)q(t)g(on)0 308 y (an)f(idle)h(pro)q(cessor.)22 b(No)16 b(p)q(erformance)g(impro)o(v)o(emen)o (t)f(w)o(as)g(observ)o(ed)h(for)g(the)g(unidirectional)i(message)e(case)0 364 y(b)r(ecause)g(the)h(sender)g(can)f(queue)i(m)n(ultiple)h(messages)d(p)q(er)h (con)o(text)f(switc)o(h)g(in)h(the)g(unipro)r(cessor)f(case,)h(and)0 421 y (the)e(sender)h(runs)f(in)h(parallel)h(with)f(the)f(receiver)g(on)g(a)g(m)o (ultipro)r(cessor.)0 564 y fc(1.4)70 b(Sc)n(heduler)21 b(Design)h(and)i(Imple\ men)n(tati)o(on)0 666 y fm(The)18 b(redesign)h(and)g(reimplementation)f(of)g (the)g(Mac)n(h)g(sc)o(heduler)i(\(necessitated)e(b)o(y)g(the)g(need)h(to)f (preserv)o(e)0 722 y(timesharing)f(functionality)g(and)f(incorp)r(orate)g(the) g(new)h(features)f(describ)s(ed)g(ab)r(o)n(v)o(e\))g(pioneered)i(the)f(use)f (of)0 779 y(sev)o(eral)j(tec)o(hniques)h(for)e(implemen)q(ting)h(timesharing) h(sc)o(hedulers)g(and)f(related)g(facilities.)33 b(The)19 b(sc)o(heduler)0 835 y(a)n(v)o(oids)g(the)f(need)i(for)d(p)r(erio)r(dic)i(scans)f(of)g(all)i(threa\ ds)e(in)h(the)f(system)g(b)o(y)h(making)f(individual)k(threads)c(re-)0 891 y (sp)q(onsible)g(for)e(collecting)i(and)f(up)r(dating)f(their)h(o)o(wn)f(usage) h(information.)23 b(A)17 b(p)q(erio)r(dic)g(scan)g(of)f(all)h(threads)0 948 y (on)c(the)g(run)h(queues)g(is)f(still)i(necessary)e(to)g(a)n(v)o(oid)h(starv) l(ation,)f(but)h(the)f(n)o(um)o(b)q(er)g(of)g(threads)g(inv)n(olved)g(is)h (m)n(uch)0 1004 y(smaller.)22 b(The)16 b(sc)o(heduler)h(employs)e(a)h(new)g (usage)f(aging)h(algorithm)g(that)f(a)n(v)o(oids)h(the)g(use)g(of)g(\015oatin\ g)f(p)r(oin)o(t)0 1061 y(n)o(um)o(b)q(ers)h(and)f(division)i(op)r(erations)e (in)h(the)f(sc)o(heduler.)22 b(Accurate)15 b(cpu)h(usage)f(information)h(is)f (collected)i(for)0 1117 y(b)r(oth)g(users)h(and)g(the)g(sc)o(heduler)i(b)o (y)d(a)h(new)g(timing)h(subsystem)f(based)g(on)g(timestamps)g(from)f(a)h(hard\ w)n(are)0 1174 y(timestamp)13 b(source)g(\(a)g(free)g(running)i(coun)o(ter)e (at)g(a)f(kno)o(wn)h(clo)r(c)o(k)g(frequency)h(is)g(su\016cient\).)19 b(This) 14 b(a)n(v)o(oids)g(the)0 1230 y(distortions)h(caused)h(b)o(y)f(statistical)h (timing,)g(impro)o(v)o(es)f(timing)h(accuracy)f(b)o(y)g(sev)o(eral)h(orders)f (of)g(magnitude,)0 1287 y(and)i(bases)g(sc)o(heduler)i(decisions)f(on)f(these) h(accurate)e(usage)h(times)g(instead)h(of)f(p)q(oten)o(tially)h(inaccurate)g (ap-)0 1343 y(pro)o(ximations.)26 b(A)17 b(m)o(utual)g(exclusion)i(proto)q (col)e(based)h(on)f(tec)o(hniques)i(dev)o(elop)r(ed)e(b)o(y)g(Lamp)r(ort[30)n (,)g(31])f(is)0 1400 y(used)i(to)e(a)n(v)o(oid)h(interlo)q(c)o(k)o(ed)g(instr\ uctions)h(in)g(this)f(subsystem)g(since)h(it)g(is)f(inv)n(ok)o(ed)g(from)f (the)h(critical)i(trap,)0 1456 y(interrupt,)12 b(and)g(con)o(text)f(switc)o (h)i(paths)e(in)i(the)g(k)n(ernel.)20 b(A)12 b(cac)o(hing)h(tec)o(hnique)g (is)g(used)g(to)e(mak)n(e)i(the)f(resulting)0 1512 y(usage)j(information)g (e\016ciently)h(a)n(v)n(ailable)h(to)d(the)i(sc)n(heduler.)0 1656 y fc(1.5)70 b(NUMA)22 b(Memory)h(Managemen)n(t)0 1757 y fm(The)15 b(researc)o(h)g(on)f (NUMA)h(memory)f(managemen)o(t)g(is)i(motiv)m(ated)f(b)o(y)f(c)o(hanges)h(in) h(m)o(ultipro)r(cessor)e(arc)o(hitec-)0 1814 y(tures.)29 b(Designers)19 b(of) f(large)g(m)o(ultipro)r(cessors)g(are)g(mo)n(ving)h(a)o(w)n(a)o(y)f(from)g (uniform)g(memory)g(access)h(\(UMA\))0 1870 y(arc)n(hitectures)f(to)f(non-uni\ form)g(memory)g(access)g(\(NUMA\))f(arc)o(hitectures.)26 b(In)17 b(the)g(memo\ ry)g(system,)f(this)0 1926 y(en)o(tails)e(a)g(c)o(hange)g(from)f(a)g(structur\ e)g(in)i(which)e(all)i(memory)e(is)h(equally)h(close)g(to)e(all)h(pro)r(cesso\ rs)f(\(in)h(terms)f(of)0 1983 y(access)h(time\))h(to)f(one)g(in)h(which)f(som\ e)g(memory)g(is)h(close)g(to)f(eac)o(h)g(pro)q(cessor,)g(but)h(di\013eren)o (t)f(pro)q(cessors)g(ha)o(v)o(e)0 2039 y(di\013erent)d(access)h(times)g(to)f (the)h(same)g(memory)-5 b(.)19 b(The)12 b(latter)g(\(NUMA\))f(structure)g(is) i(referred)f(to)f(as)g fi(physic)n(al)r(ly)0 2096 y(distribute)n(d)j fm(memor\ y)g(b)q(ecause)g(the)h(memory)e(is)h(physically)h(distributed)h(throughout)d (the)h(mac)o(hine)h(to)e(mak)o(e)0 2152 y(sure)f(eac)o(h)h(pro)q(cessor)f(is) h(close)f(to)g(some)g(memory)l(.)18 b(New)13 b(tec)o(hniques)g(are)f(required) i(to)d(manage)h(these)g(memory)0 2209 y(structures)k(b)q(ecause)g(the)g(lo)r (cation)g(of)g(memory)f(used)h(b)o(y)g(an)g(application)i(\(with)d(resp)r(ect) h(to)f(the)h(pro)q(cessors)0 2265 y(executing)k(the)f(application\))h(directl\ y)g(a\013ects)e(p)r(erformance.)31 b(Optimizing)21 b(the)e(use)g(of)f(ph)o (ysical)i(memory)0 2322 y(to)c(minimize)k(access)d(costs)f(is)i(a)e(ma)s(jor) g(concern)i(for)e(b)q(oth)h(applications)i(and)e(op)q(erating)g(systems)g(on) f(such)0 2378 y(arc)n(hitectures.)71 2435 y(New)h(on-line)i(comp)q(etitive)e (algorithms)g(for)g(managing)g(memory)g(in)h(NUMA)f(arc)o(hitectures)h(ha)o (v)n(e)g(b)q(een)0 2491 y(dev)o(elop)r(ed)h(as)f(a)h(result)g(of)f(this)h(res\ earc)o(h.)30 b(An)19 b(algorithm)f(is)i fi(on-line)d fm(if)i(it)g(m)o(ust)f (resp)r(ond)g(to)g(a)h(sequence)0 2547 y(of)e(requests)g(without)g(adv)m(ance) h(kno)n(wledge)g(of)f(future)g(requests)g(\(elements)f(of)h(the)g(sequence\).) 27 b(An)17 b(on-line)0 2604 y(algorithm)d(is)g fi(c)n(omp)n(etitive)g fm(if)g (the)g(costs)g(it)g(incurs)h(for)e(an)o(y)h(sequence)h(are)f(within)h(a)f(sma\ ll)g(constan)o(t)f(factor)g(of)0 2660 y(the)j(smallest)h(p)q(ossible)g(costs) f(for)f(that)g(sequence)i(\(i.e.,)f(those)g(costs)f(incurred)i(b)o(y)f(the)g (b)r(est)g(algorithm)g(that)0 2717 y(has)g(adv)m(ance)h(kno)o(wledge)g(of)e (the)i(en)o(tire)f(sequence\).)24 b(A)16 b fi(str)n(ongly)g(c)n(omp)n(etitive) g fm(algorithm)g(is)h(one)f(for)g(which)0 2773 y(the)j(constan)n(t)f(factor)g (is)h(the)g(smallest)g(p)q(ossible.)32 b(F)-5 b(or)18 b(this)i(problem,)f(the) g(`costs')e(inv)n(olved)i(are)f(the)g(extra)p eop %%Page: 6 17 bop 0 50 a fe(CHAPTER)15 b(1.)35 b(INTRODUCTION)1238 b fm(6)0 195 y(costs)15 b(of)f(accessing)i(remote)f(memories,)g(plus)h(an)o(y)f(costs)f(incurred)j (in)f(cop)o(ying)g(data)e(among)g(memories.)21 b(An)0 252 y(informal)d(statem\ en)n(t)f(of)g(the)g(comp)r(etitiv)o(e)h(prop)q(erties)g(of)f(these)g(algorith\ ms)g(is)h(that)f(their)h(p)q(erformance)f(is)0 308 y(the)e(b)r(est)f(that)g (can)h(b)r(e)g(ac)o(hieved)g(in)h(the)f(absence)g(of)g(kno)o(wledge)g(ab)r (out)f(the)h(future,)g(and)g(kno)o(wledge)g(of)g(the)0 364 y(en)o(tire)h(futu\ re)f(can)g(only)h(impro)o(v)o(e)f(p)r(erformance)f(b)o(y)i(the)f(small)h(cons\ tan)n(t)f(factor.)71 421 y(This)f(thesis)h(presen)o(ts)e(and)i(analyzes)f(new) g(comp)r(etitiv)o(e)g(and)g(strongly)g(comp)q(etitive)g(algorithms)g(for)f (t)o(w)n(o)0 477 y(imp)r(ortan)n(t)19 b(problems)h(that)e(o)q(ccur)i(in)g(NUM\ A)f(memory)g(managemen)n(t,)h fi(r)n(eplic)m(ation)f fm(and)h fi(migr)n(ation) p fm(.)32 b(W)l(e)0 534 y(consider)16 b(top)q(ologies)f(that)f(corresp)q(ond) h(to)f(common)g(NUMA)h(m)o(ultipro)r(cessor)f(interconnection)i(structures,)0 590 y(the)i(complete)h(graph)f(\(corresp)q(onding)h(to)e(b)r(oth)g(bus)i(and) f(complete)h(net)o(w)o(ork)e(interconnects\),)h(and)g(trees.)0 647 y(The)i (migration)g(problem)h(solutions)f(also)g(extend)g(naturally)h(to)e(pro)q(duc\ t)h(graphs,)h(whic)o(h)f(corresp)q(ond)g(to)0 703 y(h)o(yp)q(ercub)r(es)15 b (and)f(meshes.)20 b(The)14 b(replication)i(results)f(are)e(an)h(extension)h (of)f(w)o(ell-known)g(results)h(in)g(the)f(\014eld,)0 760 y(but)g(the)h(migra\ tion)f(results)h(are)f(signi\014cant)g(new)h(con)o(tributions)g(to)e(this)i (area)f(of)g(theory;)f(they)i(are)f(the)g(\014rst)0 816 y(comp)q(etitive)h (and)g(strongly)g(comp)q(etitiv)o(e)g(algorithms)g(\(as)f(w)o(ell)i(as)f(a)f (lo)o(w)o(er)h(b)q(ound)h(result\))f(for)f(the)h fi(1-server)0 873 y(with)22 b (excursions)d fm(problem.)36 b(The)21 b(p)r(oten)n(tial)g(use)g(of)f(these)g (algorithms)h(in)g(an)f(op)r(erating)g(system)g(is)h(also)0 929 y(discussed,) 16 b(using)g(Mac)o(h)f(as)g(a)g(case)g(study)l(.)0 1072 y fc(1.6)70 b(Structu\ re)22 b(of)h(the)g(Thesis)0 1174 y fm(T)l(o)d(pro)o(vide)h(con)o(text)f(and)g (bac)o(kground)h(for)e(the)i(sc)o(heduling)h(p)r(ortion)e(of)g(this)h(thesis,) g(Chapter)g(2)f(b)q(egins)0 1230 y(with)14 b(a)g(discussion)h(of)e(the)h(Mac) o(h)g(sc)o(heduler)h(and)f(the)g(tec)o(hniques)h(used)f(to)f(implemen)q(t)h (timesharing.)20 b(Chap-)0 1287 y(ter)e(3)f(con)o(tinues)h(this)g(topic)h(wit\ h)f(a)g(description)i(of)d(the)h(accurate)g(usage)g(timing)h(system)e(used)i (to)e(gather)0 1343 y(usage)g(information)g(for)f(b)r(oth)g(the)h(sc)o(hedule\ r)h(and)g(users.)25 b(P)n(erformance)17 b(measuremen)o(ts)f(are)h(presen)o (ted)g(to)0 1400 y(demonstrate)d(the)i(lo)o(w)f(cost)g(of)f(obtaining)i(this) g(information.)71 1456 y(Programming)11 b(mo)q(dels)j(and)f(classi\014cation) i(of)d(parallel)i(and)f(concurrent)f(programs)g(is)h(co)o(v)o(ered)g(in)h(Cha\ p-)0 1512 y(ter)21 b(4,)h(whic)o(h)g(also)f(identi\014es)h(the)f(new)h(sc)o (heduling)h(requirements)e(of)f(these)i(programs.)36 b(The)22 b(next)f(t)o (w)n(o)0 1569 y(c)o(hapters)15 b(co)o(v)n(er)g(the)h(new)f(Mac)o(h)g(features) g(that)f(address)h(these)h(requirements.)j(Chapter)c(5)g(co)o(v)n(ers)g(Disco\ ur-)0 1625 y(agemen)o(t)i(and)g(Hando\013)g(Sc)o(heduling)i(and)f(its)f(supp) r(ort)g(for)f(concurrent)h(programs.)24 b(Chapter)17 b(6)g(co)o(v)o(ers)g(the) 0 1682 y(Pro)q(cessor)e(Allo)r(cation)g(and)h(Con)n(trol)f(subsystem)g(and)h (its)f(supp)r(ort)g(for)f(parallel)j(programs.)71 1738 y(NUMA)i(memory)g(mana\ gemen)o(t)g(problems)i(are)e(considered)j(in)e(the)g(next)g(t)n(w)o(o)f(c)o (hapters.)34 b(Chapter)19 b(7)0 1795 y(formally)e(de\014nes)g(the)g(replicati\ on)h(and)f(migration)g(problems)g(for)f(NUMA)g(arc)o(hitectures,)h(introduces) h(new)0 1851 y(algorithms)c(to)g(solv)o(e)g(them,)g(and)h(pro)n(vides)g(pro)q (ofs)f(of)g(their)h(comp)q(etitiv)o(e)g(prop)q(erties.)20 b(Chapter)14 b(8)g (considers)0 1908 y(some)h(of)f(the)h(imp)r(ortan)n(t)g(issues)h(that)e(arise) h(in)h(actually)g(implementing)g(these)f(algorithms)g(in)g(real)h(systems,)0 1964 y(using)g(Mac)n(h)g(as)e(a)h(case)h(study)l(.)71 2021 y(The)i(thesis)h (concludes)h(with)e(Chapter)g(9.)29 b(Fiv)o(e)18 b(app)q(endices)i(pro)o(vide) f(more)f(detailed)i(information)e(on)0 2077 y(the)d(Mac)o(h)g(features)g(disc\ ussed)i(throughout)d(the)h(thesis.)p eop %%Page: 7 18 bop 0 506 a fd(Chapter)34 b(2)0 714 y fg(Timesharing)40 b(and)e(the)h(Mac)m (h)f(Sc)m(heduler)0 936 y fm(T)l(o)21 b(pro)n(vide)h(a)e(basis)i(for)e(the)h (in)o(v)o(estigation)g(of)f(m)o(ultipro)r(cessor)h(sc)n(heduling,)j(this)e (c)o(hapter)e(co)o(v)o(ers)g(time-)0 993 y(sharing)15 b(sc)o(heduling)j(and)d (describ)s(es)g(the)g(tec)o(hniques)i(used)e(in)h(the)g(Mac)n(h)f(sc)o(hedule\ r.)22 b(An)15 b(historic)h(o)n(v)o(erview)0 1049 y(of)j(timesharing)i(sc)o (heduling)h(describ)r(es)e(the)g(ma)r(jor)f(tec)o(hniques)j(used)e(for)f(time\ sharing)i(and)f(some)f(of)h(the)0 1106 y(problems)14 b(encountered)f(in)i(the) f(past.)k(One)d(imp)r(ortan)n(t)e(conclusion)i(is)f(that)f(a)g(timesharing)i (sc)n(heduler)h(based)0 1162 y(on)j(usage)f(measuremen)o(ts)g(m)o(ust)g(tak)n (e)h(the)g(system)f(load)h(in)o(to)f(account)g(to)g(pro)q(duce)h(reasonable)g (b)r(eha)o(vior)0 1219 y(under)d(high)g(load.)21 b(This)15 b(o)o(v)o(erview)h (is)f(follow)n(ed)h(b)o(y)f(a)g(description)i(of)e(the)g(internals)g(of)g(the) h(Mac)n(h)f(sc)o(heduler)0 1275 y(including)k(the)d(state)f(mac)n(hine)i(used) g(to)e(manage)g(individual)20 b(threads)15 b(and)h(the)g(tec)o(hniques)h(used) g(to)e(adjust)0 1332 y(priorities)j(of)f(threads)g(based)h(on)f(pro)q(cessor) g(usage.)25 b(An)17 b(imp)s(ortan)m(t)g(con)o(tribution)h(in)g(the)f(area)g (of)g(priorit)o(y)0 1388 y(managemen)o(t)12 b(is)i(the)f(use)h(of)e(appro)o (ximations)h(based)h(on)f(shifts)g(and)g(adds)h(to)e(replace)i(and)f(optimize) i(priorit)o(y)0 1445 y(manipulations)i(that)f(w)n(ould)h(otherwise)f(require) h(m)o(ultiplication)i(and)d(division)i(instructions.)23 b(The)16 b(c)o(hapter) 0 1501 y(concludes)i(with)f(descriptions)i(of)d(tec)o(hniques)i(used)f(to)f (reduce)i(the)f(n)o(um)o(b)q(er)g(of)f(con)o(text)g(switc)o(hes)h(for)g(load) 0 1557 y(and)e(usage)g(balancing)i(on)e(b)r(oth)f(unipro)s(cessors)g(and)i (m)n(ultipro)s(cessors.)0 1701 y fc(2.1)70 b(Timesharing)21 b(Sc)n(heduling)0 1802 y fm(A)c(ma)r(jor)g(goal)g(of)g(timesharing)g(sc)o(hedulers)i(is)f(fair) f(sharing)g(of)g(pro)q(cessor)g(resources)g(so)g(that)f(applications)0 1859 y (comp)q(eting)k(for)e(pro)q(cessor)h(time)g(will)i(receiv)o(e)f(appro)n(ximat\ ely)g(equal)f(p)r(ortions.)31 b(The)19 b(notion)g(of)g(`appro)n(x-)0 1915 y (imately)i(equal')f(applies)i(o)n(v)o(er)e(fairly)g(short)g(p)q(erio)r(ds)g (of)g(time)g(\(seconds\))g(to)f(ensure)i(in)o(teractiv)o(e)f(resp)r(onse)0 1972 y(in)e(the)f(presence)h(of)e(compute-b)r(ound)h(jobs.)25 b(In)17 b(pract\ ice,)h(this)f(sharing)g(requires)h(some)e(form)h(of)f(pro)q(cessor)0 2028 y (usage)e(trac)n(king)h(and)f(the)g(use)h(of)e(this)i(information)f(in)h(sc)o (heduling)h(decisions.)21 b(The)15 b(simplest)g(form)e(of)h(this)g(is)0 2084 y (a)h(decreasing)i(priorit)o(y)f(sc)o(heduler)h(in)g(whic)o(h)f(the)g(priorit) o(y)g(of)f(a)h(pro)q(cess)f(decreases)i(con)o(tin)o(uously)f(as)g(it)g(uses)0 2141 y(pro)q(cessor)h(time,)g(and)g(the)g(sc)o(heduler)h(fa)o(v)o(ors)e(highe\ r)i(priorit)o(y)f(pro)q(cesses.)25 b(Multics)18 b(used)g(suc)o(h)f(a)f(sc)o (heduler)0 2197 y(and)21 b(disco)o(v)o(ered)g(its)f(ma)r(jor)g(disadv)n(an)o (tage;)i(on)e(a)g(hea)o(vily)i(loaded)f(system)f(with)g(signi\014can)q(t)g (n)o(um)n(b)r(ers)g(of)0 2254 y(short-lived)f(jobs,)g(the)g(priorit)o(y)g(of) g(a)f(lengthy)h(job)f(can)h(decrease)h(to)e(the)h(p)q(oint)f(that)g(little)j (or)d(no)h(further)0 2310 y(pro)q(cessor)14 b(time)h(is)f(a)o(v)m(ailable)i (to)e(it)g([39)o(].)19 b(The)c(automatic)e(depression)j(of)e(priorit)o(y)g (for)g(length)o(y)g(jobs)g(in)h(some)0 2367 y(v)o(ersions)g(of)g(Unix)h(also) f(exhibits)i(this)f(dra)n(wbac)o(k.)71 2423 y(T)l(o)i(a)o(v)o(oid)h(the)g(pro\ blem)h(of)f(p)q(ermanently)g(depressed)h(priorities,)h(it)e(is)h(necessary)f (to)g(elev)n(ate)g(them)g(in)0 2480 y(some)h(manner.)35 b(There)20 b(are)g (t)o(w)n(o)g(ma)r(jor)g(c)o(hoices)h(for)e(elev)o(ation)h(metho)q(dologies;)j (ev)o(en)o(t-based)e(elev)n(ation,)0 2536 y(and)15 b(pro)q(cessor)f(usage)g (aging.)19 b(Ev)o(en)o(t-based)c(elev)n(ation)f(is)h(used)g(to)f(delib)s(erat\ ely)h(fa)n(v)o(or)f(in)o(teractiv)o(e)g(resp)r(onse)0 2593 y(o)n(v)o(er)j(com\ pute-b)q(ound)g(jobs)g(b)q(ecause)g(pro)q(cess)g(priorit)o(y)f(is)h(elev)o (ated)f(b)o(y)g(the)h(o)q(ccurrence)g(of)f(ev)o(en)o(ts)g(such)g(as)0 2649 y (I/O)f(completion.)21 b(The)14 b(elev)o(ations)g(asso)q(ciated)h(with)g(the)f (ev)o(en)o(ts)g(of)g(interest)g(m)o(ust)g(b)q(e)h(determined)h(in)f(some)0 2705 y(manner,)g(suc)o(h)g(as)g(tuning)h(under)g(exp)r(ected)f(w)o(orkloads)g (to)f(pro)q(duce)i(the)g(desired)g(resp)r(onse)f(b)q(eha)o(vior.)20 b(This)0 2762 y(metho)q(dology)d(assumes)h(that)e(jobs)i(are)f(either)h(distinctly)h (compute-b)r(ound)f(or)f(distinctly)i(in)o(teractiv)o(e)f(and)0 2818 y(that)f (interactiv)n(e)h(jobs)f(are)h(more)f(imp)r(ortan)n(t.)26 b(Users)18 b(whose) f(interactiv)o(e)g(w)o(ork)g(consumes)h(large)g(amoun)n(ts)962 2927 y(7)p eop %%Page: 8 19 bop 0 50 a fe(CHAPTER)15 b(2.)35 b(TIMESHARING)16 b(AND)f(THE)g(MA)o(CH)g (SCHEDULER)587 b fm(8)0 195 y(of)18 b(pro)q(cessor)g(time)h(ma)n(y)g(not)f (do)g(w)o(ell)i(under)f(this)g(metho)q(dology)l(.)30 b(The)19 b(V)-5 b(AX/VMS) 1548 179 y fb(1)1586 195 y fm(sc)o(heduler)20 b(emplo)o(ys)0 252 y(this)15 b (elev)n(ation)f(metho)q(dology)g([29)o(],)g(as)f(do)r(es)h(the)g(Universit)o (y)g(of)f(Maryland's)h(ESCHED)g(sc)o(heduler)h(for)f(large)0 308 y(Unix)i(sys\ tems)f([46)o(].)71 364 y(The)g(second)i(priorit)o(y)f(elev)n(ation)g(metho)q (dology)f(is)i(pro)q(cessor)e(usage)h(aging.)21 b(Its)16 b(original)g(form)f (is)i(based)0 421 y(on)f(exp)q(ected)g(usage)g(functions)g(that)f(de\014ne)i (the)f(goals)f(for)g(pro)q(cessor)g(usage)h(based)g(on)f(the)h(time)g(a)f(job) h(has)0 477 y(b)r(een)i(in)h(the)f(system)g(\(its)g fi(elapse)m(d)h(time)p fm (\)[2)o(,)f(43)o(].)28 b(Eac)o(h)18 b(job's)f(priorit)o(y)h(is)h(based)f(on)g (ho)o(w)g(close)g(its)h(actual)0 534 y(usage)e(comes)g(to)f(this)h(goal.)25 b (T)l(o)17 b(reduce)g(o)o(v)o(erhead,)g(the)g(goal)g(function)g(is)h(in)o(v)o (erted)f(to)f(calculate)i(the)f(time)0 590 y(b)o(y)e(which)g(a)g(job's)g(curr\ en)o(t)g(pro)q(cessor)g(usage)g(should)h(ha)n(v)o(e)g(b)q(een)g(attained)f (\(the)g(job's)g fi(critic)m(al)h(time)p fm(\).)k(Eac)o(h)0 647 y(job's)15 b (priorit)o(y)h(is)h(the)e(di\013erence)i(b)r(et)o(w)n(een)g(its)f(elapsed)h (time)f(and)g(its)g(critical)h(time.)22 b(The)16 b(priorit)o(y)g(of)f(a)h(job) 0 703 y(that)h(receives)h(no)g(pro)q(cessor)g(time)g(is)g(elev)o(ated)g(as)f (this)i(di\013erence)g(increases.)29 b(Multiple)19 b(p)r(olicy)g(functions)0 760 y(can)e(b)r(e)g(used)h(to)f(pro)o(vide)h(di\013erent)e(levels)i(of)f(serv\ ice)h(to)f(distinct)h(classes)g(of)f(jobs.)26 b(The)18 b(de\014nition)h(of)e (the)0 816 y(term)12 b(`job')g(is)h(imp)r(ortan)n(t)f(to)g(an)g(understanding) i(of)e(these)h(sc)n(hedulers;)i(they)e(are)f(in)o(tended)i(for)e(en)o(vironme\ n)o(ts)0 873 y(comp)q(osed)19 b(of)f(\(a)g(limited)i(n)o(um)o(b)r(er)e(of)s (\))g(batc)o(h)h(jobs)f(and)h(distinct)h(\(short-liv)o(ed\))e(interactions)g (with)h(users.)0 929 y(A)d(user's)g(terminal)h(session)g(w)o(ould)g(b)q(e)g (comp)q(osed)f(of)g(a)g(large)h(n)o(um)n(b)r(er)f(of)g(interactions)g(\(e.g.,) f(one)h(for)g(eac)o(h)0 985 y(command)d(giv)o(en)h(to)f(the)g(system\).)19 b (Long-lived)14 b(in)o(teractions)f(p)r(ose)g(problems)h(for)f(these)g(sc)o (hedulers)i(b)q(ecause)0 1042 y(the)h(exp)r(ected)g(usage)g(function)h(is)g (not)f(sensitive)g(to)f(load.)23 b(An)17 b(exp)q(ected)g(usage)f(function)h (can)f(b)r(e)g(tuned)g(to)0 1098 y(a)h(single)i(load,)f(but)f(then)h(v)m(aria\ tions)g(in)g(load)g(pro)q(duce)g(unacceptable)h(b)q(eha)o(vior.)27 b(If)17 b (the)h(load)f(rises)h(ab)q(o)o(v)o(e)0 1155 y(the)c(tuned)g(lev)o(el,)h(old)f (in)o(teractions)g(are)f(fa)n(v)o(ored)h(o)n(v)o(er)f(new)h(ones)g(and)g(syst\ em)f(resp)q(onsiv)o(eness)h(su\013ers;)g(if)g(the)0 1211 y(load)g(falls,)h (new)f(interactions)g(are)g(fa)n(v)o(ored)g(o)n(v)o(er)g(old)h(ones)f(leading) i(to)d(the)h(same)g(starv)m(ation)g(problem)g(found)0 1268 y(in)g(Multics.)20 b(Long-lived)14 b(in)o(teractions)f(are)g(common)g(on)g(curren)o(t)g(systems,) g(making)g(this)g(class)h(of)e(sc)o(hedulers)0 1324 y(inappropriate.)71 1381 y (Modern)17 b(pro)r(cessor)f(usage)h(aging)f(sc)o(hedulers)j(elev)n(ate)d(prio\ rities)i(b)o(y)f(gradually)h(forgetting)e(ab)q(out)g(past)0 1437 y(pro)q(cess\ or)k(usage,)g(usually)h(in)f(an)g(exp)r(onen)o(tial)g(fashion.)34 b(An)20 b (example)h(is)f(that)f(usage)g(from)g(one)h(minute)0 1494 y(ago)c(is)i(half)g (as)f(costly)g(as)g(usage)g(within)i(the)e(past)g(min)o(ute,)h(usage)f(from)f (the)i(min)o(ute)g(b)q(efore)f(is)h(half)g(again)0 1550 y(as)f(costly)m(,)h (and)g(so)f(on.)28 b(As)18 b(a)g(result,)g(the)g(sc)o(heduler's)h(measure)f (of)f(pro)q(cessor)h(usage)g(is)g(an)g(exp)q(onentially)0 1606 y(w)o(eigh)o (ted)j(a)o(v)n(erage)g(o)n(v)o(er)g(the)g(lifetime)h(of)f(a)g(pro)q(cess.)37 b (A)21 b(simple)h(exp)r(onen)o(tial)g(a)n(v)o(erage)e(is)i(not)e(desirable)0 1663 y(b)r(ecause)e(it)g(has)g(the)g(unexp)r(ected)h(side)g(e\013ect)f(of)f (raising)i(priorities)g(when)g(the)f(load)g(on)g(the)g(system)g(rises.)0 1719 y(This)i(happ)r(ens)f(b)r(ecause)g(under)h(higher)g(loads)g(eac)o(h)f(pro)q (cess)h(gets)e(a)h(smaller)h(share)f(of)g(the)h(pro)q(cessor,)f(so)0 1776 y (its)e(usage)f(a)o(v)o(erage)g(drops,)h(causing)g(its)g(priorit)o(y)g(to)f (rise.)25 b(These)17 b(elev)o(ated)f(priorities)i(can)f(degrade)g(system)0 1832 y(resp)q(onse)e(under)g(hea)o(vy)g(loads)f(b)r(ecause)h(no)f(pro)q(cess) h(accum)o(ulates)g(usage)f(fast)g(enough)h(to)f(drop)g(its)h(priorit)o(y)l (.)0 1889 y(The)d(4.3BSD)g(v)n(ersion)h(of)e(Unix)i(solv)o(es)g(this)f(proble\ m)h(b)o(y)f(making)g(the)g(aging)g(rate)g(dep)r(end)g(on)g(the)g(load)h(facto\ r)0 1945 y(so)k(that)f(aging)h(is)h(slo)o(w)n(er)f(in)h(the)f(presence)h(of)f (higher)h(load,)f(k)o(eeping)h(priorities)g(in)g(more)f(or)f(less)i(the)f(sam\ e)0 2002 y(range)g([34)o(].)24 b(An)17 b(alternativ)o(e)g(tec)o(hnique)h(is)g (to)e(use)h(an)g(o)n(v)o(erload)g(factor)f(to)g(alter)h(the)g(rate)f(at)g(whi\ ch)h(usage)0 2058 y(is)i(accum)o(ulated.)31 b(F)l(or)18 b(this)h(tec)o(hnique\ ,)i(the)e(usage)f(accum)o(ulated)i(b)o(y)e(the)h(sc)o(heduler)h(is)f(the)g (actual)g(usage)0 2115 y(m)o(ultiplied)i(b)o(y)d(a)f(factor)g(that)g(re\015ec\ ts)i(the)f(increased)h(load)f(on)g(the)g(system.)28 b(Although)18 b(these)g (sc)o(hedulers)0 2171 y(are)f(a)h(dev)o(elopment)f(of)g(the)h(older)g(exp)r (ected)g(usage)f(function)i(sc)o(hedulers,)g(the)f(exp)q(ected)h(usage)e(func\ tions)0 2227 y(ha)o(v)n(e)c(v)m(anished)h(b)q(ecause)f(priorit)o(y)f(is)h(cal\ culated)g(b)o(y)f(comparing)h(usage)f(among)f(pro)q(cesses)i(instead)f(of)g (against)0 2284 y(individual)18 b(goals.)71 2340 y(F)-5 b(or)15 b(a)g(m)o(ult\ ipro)r(cessor)g(sc)o(heduler,)i(the)e(concept)h(of)f(fair)h(sharing)f(is)h (strongly)g(in)o(tert)n(wined)h(with)f(that)e(of)0 2397 y(load)19 b(balancing\ .)31 b(The)19 b(goal)f(of)g(load)h(balancing)h(is)f(to)e(spread)i(the)g(syste\ m's)e(computational)i(load)g(ev)o(enly)0 2453 y(among)c(the)h(a)n(v)n(ailable) h(pro)q(cessors)e(o)o(v)o(er)g(time.)22 b(F)l(or)15 b(example,)h(if)g(three)g (similar)h(jobs)e(are)g(running)i(on)f(a)f(t)o(w)n(o)0 2510 y(pro)q(cessor)h (system,)h(eac)o(h)f(should)i(get)e(t)o(w)n(o-thirds)h(of)g(a)f(pro)q(cessor) h(\(on)f(a)n(v)o(erage\).)24 b(This)17 b(often)f(requires)i(the)0 2566 y(sc)o (heduler)f(to)e(sh)o(u\017e)h(pro)q(cesses)h(among)e(pro)q(cessors)g(to)g(k)o (eep)h(the)g(load)g(balanced.)23 b(There)16 b(is)h(an)e(imp)r(ortan)n(t)0 2623 y(tradeo\013)d(b)r(et)n(w)o(een)i(load)g(balancing)g(and)g(o)n(v)o(erhead)g (in)g(that)f(optimal)g(load)h(balancing)h(causes)e(high)h(sc)o(heduler)0 2679 y(o)n(v)o(erhead)e(due)g(to)f(frequen)o(t)g(con)o(text)g(switc)o(hes.)19 b (A)11 b(unipro)r(cessor)g(timesharing)h(sc)o(heduler)h(encounters)e(similar)0 2727 y 779 2 v 52 2784 a fa(1)69 2800 y fk(V)l(AX/VMS)i(is)g(a)g(trademark)h (of)f(Digital)i(Equipmen)q(t)e(Corp)q(oration.)p eop %%Page: 9 20 bop 0 50 a fe(CHAPTER)15 b(2.)35 b(TIMESHARING)16 b(AND)f(THE)g(MA)o(CH)g (SCHEDULER)587 b fm(9)0 195 y(issues)16 b(in)g(minimizing)i(the)d(n)o(um)o (b)r(er)g(of)f(con)o(text)h(switc)o(hes)h(used)f(to)g(implemen)q(t)f(fair)i (sharing.)0 338 y fc(2.2)70 b(The)22 b(Mac)n(h)h(Sc)n(heduler)0 440 y fm(Alth\ ough)11 b(Mac)o(h)f(splits)i(the)f(traditional)g(pro)q(cess)g(notion)g(in)o (to)f(the)h(task)f(\(address)g(space)h(and)g(comm)o(unication)0 496 y(capabil\ ities\))18 b(and)e(thread)g(\(lo)q(cus)h(of)e(con)o(trol,)h(program)f(coun)o (ter,)g(and)h(registers\))g(abstractions,)f(the)h(Mac)o(h)0 553 y(sc)o(hedule\ r)k(only)g(sc)o(hedules)g(threads.)31 b(The)19 b(kno)n(wledge)h(that)e(t)o (w)n(o)h(threads)f(are)h(in)h(the)f(same)f(task)g(can)h(b)r(e)0 609 y(used)i (to)f(optimize)i(the)e(con)o(text)g(switc)o(h)h(b)q(et)o(w)o(een)g(them.)36 b (This)21 b(information)f(is)h(not)f(used)i(to)d(select)j(the)0 666 y(threads) 12 b(to)g(run)h(b)r(ecause)g(there)f(ma)o(y)g(b)r(e)g(little)i(impro)o(v)o (emen)o(t)f(in)g(p)q(erformance)g(dep)r(ending)g(on)g(the)g(hardw)n(are)0 722 y(and)19 b(application)h(inv)n(olved,)f(and)g(b)q(ecause)g(fa)o(v)n(oring)g (threads)g(on)f(this)h(basis)g(can)g(b)r(e)f(detrimental)h(to)f(load)0 779 y (and)h(usage)g(balancing.)32 b(Some)19 b(sc)o(heduler)i(functions)e(are)g(dri\ v)o(en)h(b)o(y)e(p)r(erio)r(dic)i(clo)q(c)o(k)f(or)g(timer)g(in)o(terrupts)0 835 y(that)j(o)q(ccur)h(on)g(all)g(pro)q(cessors)g(ev)o(ery)f(10)g(to)g(100)g (milliseconds.)45 b(Mac)n(h)23 b(uses)g(the)g(same)f(sc)o(heduler)i(for)0 891 y(b)r(oth)c(m)n(ultipro)s(cessors)g(and)h(unipro)r(cessors;)i(this)e(descript\ ion)h(is)f(oriented)f(to)o(w)n(ards)g(the)h(m)o(ultipro)r(cessor)0 948 y(use) d(of)f(the)g(sc)o(heduler,)i(but)e(is)h(also)g(applicable)h(to)e(unipro)r(ces\ sors.)26 b(The)18 b(original)g(Mac)o(h)f(sc)o(heduler)i(design)0 1004 y(\(inc\ luding)h(the)e(run)f(queue)i(structure\))e(is)h(due)g(to)f(Av)m(adis)h(T)l (ev)n(anian)g(Jr.,)g(and)f(the)h(state)f(mac)n(hine)i(design)0 1061 y(and)c (implemen)q(tation)g(w)n(as)g(done)h(b)o(y)f(Da)n(vid)h(B.)f(Golub.)71 1117 y (The)22 b(virtual)g(memory)g(system's)f(sw)n(apping)i(functionality)f(interac\ ts)f(with)h(thread)g(sc)o(heduling.)43 b(An)0 1174 y(imp)r(ortan)n(t)15 b(res\ ource)g(asso)q(ciated)h(with)g(eac)o(h)f(thread)h(is)f(its)h fi(kernel)g(stac\ k)p fm(,)e(the)i(stac)n(k)f(used)h(b)o(y)g(the)f(k)o(ernel)h(to)0 1230 y(exec\ ute)e(op)r(erations)f(on)h(the)g(thread's)f(b)r(ehalf.)20 b(This)14 b(stac)n (k)g(m)o(ust)f(b)r(e)h(memory)f(resident)g(when)i(the)f(thread)f(is)0 1287 y (executing)k(b)q(ecause)g(there)f(is)g(no)g(other)g(stac)n(k)g(that)f(can)h (b)q(e)g(used)h(to)e(handle)i(a)f(page)g(fault)g(on)f(the)h(memory)0 1343 y (that)g(it)g(o)q(ccupies.)26 b(Mac)n(h)16 b(allows)g(the)h(k)n(ernel)h(stac)n (ks)e(of)g(inactive)h(threads)f(to)g(b)q(e)h fi(swapp)n(e)n(d)f fm(to)g(free) g(up)h(their)0 1400 y(memory)k(resources.)37 b(The)22 b(action)f(of)g(sw)n (apping)h(out)f(a)g(thread)g(consists)h(of)e(making)i(its)f(stac)n(k)g(memory) 0 1456 y(eligible)d(for)d(the)g(normal)h(pageout)f(mec)o(hanisms.)21 b(Neithe\ r)16 b(the)f(stac)o(k)g(nor)g(an)o(y)g(other)g(memory)g(is)h(explicitly)0 1512 y(forced)e(out)g(of)g(memory)g(b)o(y)g(this)h(action.)20 b(The)14 b(corresp)q (onding)h(action)g(of)f(sw)n(apping)h(in)h(a)e(thread)g(consists)g(of)0 1569 y (forcing)h(its)h(k)n(ernel)h(stac)n(k)e(into)f(memory)l(,)h(and)g fi(wiring)g fm(it)g(so)g(that)g(it)g(cannot)g(b)r(e)g(paged)g(out.)0 1691 y fh(2.2.1)55 b (Thread)19 b(States)0 1776 y fm(There)c(are)f(14)h(p)q(ossible)h(sc)o(hedulin\ g)h(states)d(for)g(a)g(Mac)o(h)g(thread.)20 b(These)15 b(and)g(the)g(transiti\ ons)g(among)f(them)0 1833 y(are)h(sho)o(wn)g(in)i(Figure)e(2.1;)g(sc)n(hedule\ r)i(actions)f(that)f(do)g(not)g(cause)h(state)f(c)o(hanges)g(are)g(omitted)h (for)f(clarit)o(y)l(.)0 1889 y(This)j(\014gure)f(organizes)h(the)f(states)g (in)o(to)g(three)g(nested)h(squares)f(\(four)g(states)f(in)i(the)g(inner)g (square,)g(\014v)o(e)f(in)0 1946 y(b)r(oth)g(the)h(middle)i(and)f(outer)e(squ\ ares\).)28 b(The)19 b(comp)q(onen)o(ts)f(of)g(state)f(names)h(corresp)q(ond)g (to)g(the)g(state)f(of)0 2002 y(the)h(thread;)g(running)g(\()p fj(R)p fm(\),) f(w)n(aiting)h(\()p fj(W)p fm(\),)f(susp)q(ended)i(\()p fj(S)p fm(\),)d(and)i (sw)n(app)r(ed)g(out)f(\()p fj(O)p fm(\).)f(The)i(su\016x)g fj(pro)q(c)f fm (is)0 2059 y(added)e(to)e(states)g(in)i(whic)o(h)f(the)h(thread)e(is)i(execut\ ing)g(on)f(a)f(pro)q(cessor,)h(and)g(the)g(su\016x)g fj(runq)f fm(indicates)j (that)0 2115 y(the)i(thread)g(is)g(queued)h(to)e(run)h(\(on)f(a)h(run)g(queue\ \).)28 b(The)18 b(innermost)g(square)g(con)o(tains)g(the)g(four)f(states)g (in)0 2172 y(which)g(a)f(thread)h(is)h(executing)g(on)f(a)f(pro)q(cessor,)h (as)g(indicated)h(b)o(y)f(the)g(presence)h(of)f fj(pro)q(c)g fm(in)h(their)f (names.)0 2228 y(The)g(outermost)e(square)h(con)o(tains)h(the)f(\014v)o(e)h (states)e(in)i(which)g(a)f(thread)g(is)h(sw)n(app)r(ed)g(out;)f(in)h(this)g (state)f(the)0 2285 y(thread's)i(k)n(ernel)i(stac)n(k)e(ma)n(y)g(not)g(b)r (e)g(resident)g(in)h(memory)e(and)i(m)n(ust)f(b)r(e)g(forced)g(into)g(memory) f(\(sw)n(apin\))0 2341 y(b)r(efore)f(the)h(thread)g(can)g(b)r(e)g(executed.) 26 b(The)18 b(middle)g(square)f(con)o(tains)g(the)g(\014v)o(e)g(states)g(in)g (which)g(a)g(thread)0 2397 y(is)g(sw)o(app)q(ed)g(in)h(\(k)n(ernel)g(stac)n (k)f(is)g(memory)f(resident\),)g(but)h(not)f(actually)h(running;)h(such)e(a)h (thread)f(ma)o(y)g(b)r(e)0 2454 y(w)o(aiting)e(on)f(an)h(ev)o(en)o(t,)g(susp) q(ended)h(b)o(y)f(the)f(k)o(ernel,)i(or)e(queued)i(to)e(run)h(on)f(a)h(pro)q (cessor.)19 b(T)l(able)14 b(2.1)f(describ)s(es)0 2510 y(the)j(states)f(in)i (the)g(\014gure,)f(and)g(T)l(able)h(2.2)e(describ)s(es)h(the)g(lab)r(eled)i (state)d(transitions.)23 b(The)16 b(second)h(column)0 2567 y(in)i(T)l(able)g (2.2)f(giv)o(es)g(the)h(actual)g(name)f(of)g(the)g(internal)h(Mac)n(h)g(routi\ ne)g(that)e(p)r(erforms)g(the)i(action;)h(these)0 2623 y(names)15 b(are)f(abb\ reviated)i(in)f(Figure)g(2.1)f(for)g(clarity)l(.)19 b(These)d(routines)f(are) f(not)h(part)f(of)g(the)h(k)o(ernel)h(in)o(terface)0 2680 y(exp)r(orted)f(b)o (y)g(Mac)n(h.)71 2736 y(V)l(ertical)k(transitions)f(in)g(Figure)g(2.1)f(inv)o (olv)o(e)h(the)g(susp)q(end)h(mec)o(hanism.)28 b(This)19 b(is)f(used)g(b)o (y)g(the)g(k)o(ernel)0 2793 y(to)c(prev)o(en)o(t)g(a)g(thread)g(from)g(execut\ ing)h(\(e.g.,)e(a)h(thread)g(that)g(is)h(ab)q(out)f(to)g(b)q(e)h(terminated)f (m)o(ust)g(b)r(e)g(stopp)q(ed)p eop %%Trailer eos end TeXDict begin bos 300 @start /fa df[30 26 2 0 35]78 dc[<0FF0001C3C003E1E003E0E003E0F001C0F00 000F0000FF000FCF003E0F007C0F00F80F00F80F00F80F00F817007C27E01FC3E0>19 17 1 0 21]97 dc[<03F0000E1C001C0E003C0700780700780780F80780F80780FFFF80F80000F8000078 00007800003C01801C03000E060003FC00>17 17 1 0 20]101 dc[<1C003E003E003E003E001C 0000000000000000007E007E001E001E001E001E001E001E001E001E001E001E001E001E001E00 FF80FF80>9 27 1 0 13]105 dc[10 26 1 0 13]108 dc[< FE1F01F000FE63C63C001E81C81C001F01F01E001F01F01E001E01E01E001E01E01E001E01E01E 001E01E01E001E01E01E001E01E01E001E01E01E001E01E01E001E01E01E001E01E01E00FFCFFC FFC0FFCFFCFFC0>34 17 1 0 37]109 dc[<03F8000E0E003C07803803807803C07803C0F803E0 F803E0F803E0F803E0F803E0F803E07803C07C07C03C07800E0E0003F800>19 17 1 0 22]111 dc[15 17 1 0 18]114 dc[<7FFF781E703E603C607860F001F001E003C007800F830F031E033C067C0678 1EFFFE>16 17 1 0 20]122 dc dfe /fb df[<03CC0E2E181C381C301C701CE038E038E038E0 38C072C072C07260F261341E18>15 16 4 0 20]97 dc[<01F006080C181838301070006000E0 00E000E000E000E008E010602030C01F00>13 16 4 0 18]99 dc[<001F800003800003800003 80000700000700000700000700000E00000E0003CE000E2E00181C00381C00301C00701C00E038 00E03800E03800E03800C07200C07200C0720060F2006134001E1800>17 26 4 0 20]100 dc[< 01E006181C08380870087010FFE0E000E000E000E000E0086010602030C01F00>13 16 4 0 18] 101 dc[<00F300038B800607000E07000C07001C0700380E00380E00380E00380E00301C00301C 00301C00183C0018780007B800003800003800007000607000E0E000C1C0007F0000>17 23 2 7 18]103 dc[<030706000000000000384C4E8E9C9C1C3838707272E2E46438>8 25 4 0 12]105 dc[<030F000590C009E0C009C06009C06009C0600380E00380E00380E00380E00701C007018007 03800703000E8E000E78000E00000E00001C00001C00001C00001C0000FF0000>19 23 0 7 20] 112 dc[<30F059189E389C189C009C0038003800380038007000700070007000E0006000>13 16 4 0 16]114 dc[<38184C1C4E1C8E0C9C0C9C0C1C08380838083808701070107020304018C00F 00>14 16 4 0 18]118 dc dfe /fc df[<0000300000600000C0000180000300000700000E00 000C0000180000380000300000700000E00000C00001C000018000038000038000030000070000 0600000E00000E00000C00001C00001C00001C0000180000380000380000380000380000700000 700000700000700000700000700000700000E00000E00000E00000E00000E00000E00000E00000 E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000 E00000700000700000700000700000700000700000700000380000380000380000380000180000 1C00001C00001C00000C00000E00000E000006000007000003000003800003800001800001C000 00C00000E000007000003000003800001800000C00000E000007000003000001800000C0000060 000030>20 99 9 97 31]18 dc[ 20 99 1 97 31]19 dc[55 58 2 58 60]88 dc dfe /fd df[<0300038003000000000000000000000000001C002400460046008C000C001800180018 0031003100320032001C00>9 23 1 0 12]105 dc[<383C0044C6004702004602008E06000C06 000C06000C0C00180C00180C40181840181880300880300F00>18 14 1 0 21]110 dc dfe /fe df[20 2 3 -7 27]0 dc dfe /ff df[<60F0F060>4 4 3 0 11]58 dc[<0004 000C00180018001800300030003000600060006000C000C000C001800180018003000300030006 00060006000C000C000C00180018001800300030003000600060006000C000C000>14 37 2 9 19]61 dc dfe /fg df[26 2 4 -10 35]0 dc[<03C00FF01FF83FFC7FFE 7FFEFFFFFFFFFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003C0>16 18 3 -2 23]15 dc[26 36 4 7 35]21 dc[<000002 0000000003000000000300000000018000000000C000000000C00000000060007FFFFFF000FFFF FFFC000000000E00000000038000000001F0000000007C00000000F000000003C0000000070000 00000C00FFFFFFF8007FFFFFF0000000006000000000C000000001800000000180000000030000 00000300000000020000>38 26 3 2 45]41 dc dfe /fh df[<00000000002000000000006000 00000000C0000000000180000000000300000000000600000000000C0000000000180000000000 300000000000600000000000C0000000000180000000000300000000000600000000000C000000 0000180000000000300000000000600000000000C0000000000180000000000300000000000600 000000000C0000000000180000000000300000000000600000000000C000000000018000000000 0300000000000600000000000C0000000000180000000000300000000000600000000000C00000 00000180000000000300000000000600000000000C000000000018000000000030000000000060 0000000000C00000000000800000000000>43 44 0 1 42]0 dc[<00010003000600060006000C 000C000C00180018001800300030003000600060006000C000C000C00180018001800300030003 000600060006000C000C000C00180018001800300030003000600060006000C000C0004000>16 44 -1 1 14]2 dc[<001000300030006000600060006000C000C000C000C00180018001800180 0180030003000300030006000600060006000C000C000C000C0018001800180018003000300030 00300030006000600060006000C000C0004000>12 44 -1 1 10]3 dc[<0100018003C003E003 F007F807FC07FE0FFF0FFC1FE01F003C00700060008000>16 16 0 0 42]9 dc[<002000600060 00E001E003E003E007E00FE01FE03FE07FE0FFE03FE007E000F00010>12 17 3 -24 14]14 dc[ <0000000000600000000003E0000000001F8000000000FC0000000007E0000000003F00000000 01F8000000000FC0000000007E0000000003F0000000001F8000000000FC0000000007E0000000 003F0000000000F80000000000C00000000000>43 16 0 1 42]16 dc[<000000000060000000 0000E0000000000380000000000700000000001C0000000000380000000000E00000000001C000 0000000700000000000E0000000000380000000000700000000001C0000000000380000000000E 00000000001C0000000000700000000000E0000000000380000000000700000000001C00000000 00380000000000E00000000001C0000000000700000000000E0000000000380000000000700000 000000C00000000000800000000000>43 30 0 1 42]17 dc[<0040004000C001C001C003C003 C007C00FE01FE01FE03FE07FE0FFE00FF000F0>12 16 0 -25 10]23 dc[<0002001E007E01FE 0FFEFFFEFFFE0FFE01FE007E001E0002>15 12 2 6 42]27 dc[<00200000700000700000F800 01FC0001FC0003FE0007FF0007FF000FFF801FF8003F0000700000800000>17 14 0 0 42]43 dc[<8000F000FC00FF00FFE0FFFEFFFEFFE0FF00FC00F0008000>15 12 25 6 42]45 dc[<0000 80000700007E000FFC00FFF8007FF0007FF0003FE0001FC0001FC0000F80000700000700000200 00>17 14 25 -14 42]51 dc[<06000600060006000F000F000F001F801F803FC03FC07FE07FE0 7FE0FFF0>12 15 -6 -25 42]54 dc[12 15 -6 -2 42]63 dc[<800000000000C000000000006000000000003000 000000001800000000000C000000000006000000000003000000000001800000000000C0000000 00006000000000003000000000001800000000000C000000000006000000000003000000000001 800000000000C000000000006000000000003000000000001800000000000C0000000000060000 00000003000000000001800000000000C000000000006000000000003000000000001800000000 000C000000000006000000000003000000000001800000000000C0000000000060000000000030 00000000001800000000000C000000000006000000000003000000000001800000000000C00000 00000060000000000020>43 44 0 1 42]64 dc[<400000C00000600000600000300000300000 1800001800000C00000C000006000006000003000003000001800001800000C00000C000006000 006000003000003000001800001800000C00000C00000600000600000300000300000180000180 0000C00000C000006000006000003000003000001800001800000C00000C000006000002>23 44 -1 1 21]65 dc[<4000C000C0006000600060003000300030001800180018000C000C000C0006 000600060003000300030001800180018000C000C000C000600060006000300030003000180018 0018000C000C000C00060006000600030001>16 44 -1 1 14]66 dc[<4000C000C00060006000 600060003000300030003000300018001800180018000C000C000C000C00060006000600060003 000300030003000180018001800180018000C000C000C000C00060006000600060003000300010 >12 44 -1 1 10]67 dc[<8000600070003C001F001FE00FFC0FFF07FE07FC07F803F003E003C0 01800100>16 16 0 -26 42]73 dc[<800040006000700078007C007E007F003FC03FE03FF03F F03FC03F003C003000>12 16 0 -25 21]75 dc[<400060006000700078007C007C007E007F00 7F807FC07FE07FF07FC07E00F0008000>12 17 -1 -24 14]77 dc[<001000F007E03FE0FFE07F E03FE01FE00FE007E003E003E001E000E0006000600020>12 17 3 -1 14]78 dc[<2000200030 00380038003C003C003E007F007F807F807FC07FE07FF0FF00F000>12 16 -2 -25 10]79 dc[< 800000000000C000000000007000000000003800000000000E000000000007000000000001C000 00000000E000000000003800000000001C000000000007000000000003800000000000E0000000 00007000000000001C00000000000E000000000003800000000001C00000000000700000000000 3800000000000E000000000007000000000001C00000000000E000000000003800000000001C00 0000000007000000000003800000000000E0000000000060>43 30 0 1 42]81 dc[<00800180 03C007C00FC01FE03FE07FE0FFF03FF007F800F8003C000E00060001>16 16 26 0 42]82 dc[< 00F00FF0FFE07FE03FE01FE01FE00FE007C003C003C001C001C000C000400040>12 16 0 -1 10 ]87 dc[43 12 0 1 42]88 dc[<8000007000003F00001FF8000FFF8007FF0007FF0003FE0001FC0001FC00 00F800007000007000002000>17 14 0 -14 42]107 dc[<0200000700000700000F80001FC000 1FC0003FE0007FF0007FF000FFF8000FFC00007E00000700000080>17 14 25 0 42]115 dc[< 2000300038003E007F007F807FE07FF8FFFCFFFFFF00C000>16 12 25 2 42]122 dc dfe /fi df[26 27 -24 25 50]8 dc[<00000040000000C0000000C0000000C0000000C0000000C000000180000001800000 0180000001800000030000000300000006000000060000000C0000001800000018000000300000 0060000000C0000003800000070000001C00000078000007E00000FF800000F8000000>26 27 -24 0 50]9 dc[<40000000C0000000C0000000C0000000C0000000C000000060000000600000 0060000000300000003000000018000000180000000C0000000600000006000000030000000180 000000C000000060000000380000001C0000000700000003C0000000F80000003FE0000007E0> 27 27 0 0 50]10 dc[<000007E000003FE00000F8000003C00000070000001C00000038000000 60000000C00000018000000300000006000000060000000C000000180000001800000030000000 30000000600000006000000060000000C0000000C0000000C0000000C0000000C0000000400000 00>27 27 0 25 50]11 dc[84 85 -82 83 166]36 dc[<000000000000000000001000000000 000000000000300000000000000000000030000000000000000000003000000000000000000000 300000000000000000000030000000000000000000003000000000000000000000300000000000 000000000030000000000000000000003000000000000000000000600000000000000000000060 000000000000000000006000000000000000000000600000000000000000000060000000000000 0000000060000000000000000000006000000000000000000000C000000000000000000000C000 000000000000000000C000000000000000000000C0000000000000000000018000000000000000 000001800000000000000000000180000000000000000000018000000000000000000003000000 000000000000000300000000000000000000030000000000000000000006000000000000000000 00060000000000000000000006000000000000000000000C000000000000000000000C00000000 000000000000180000000000000000000018000000000000000000001800000000000000000000 300000000000000000000030000000000000000000006000000000000000000000600000000000 0000000000C000000000000000000000C000000000000000000001800000000000000000000300 000000000000000000030000000000000000000006000000000000000000000600000000000000 0000000C0000000000000000000018000000000000000000003000000000000000000000300000 00000000000000006000000000000000000000C000000000000000000001800000000000000000 000180000000000000000000030000000000000000000006000000000000000000000C00000000 000000000000180000000000000000000030000000000000000000006000000000000000000000 C0000000000000000000018000000000000000000003000000000000000000000E000000000000 000000001C000000000000000000003000000000000000000000E000000000000000000001C000 000000000000000003000000000000000000000E000000000000000000003C0000000000000000 00007000000000000000000001C000000000000000000007800000000000000000001E00000000 000000000000F800000000000000000003E00000000000000000001F00000000000000000000FC 0000000000000000000FE0000000000000000000FF0000000000000000007FF000000000000000 00FFFF000000000000000000FF80000000000000000000>84 85 -82 0 166]37 dc[<40000000 00000000000000C000000000000000000000C000000000000000000000C0000000000000000000 00C000000000000000000000C000000000000000000000C000000000000000000000C000000000 000000000000C000000000000000000000C0000000000000000000006000000000000000000000 600000000000000000000060000000000000000000006000000000000000000000600000000000 000000000060000000000000000000003000000000000000000000300000000000000000000030 000000000000000000003000000000000000000000300000000000000000000018000000000000 00000000180000000000000000000018000000000000000000000C000000000000000000000C00 0000000000000000000C0000000000000000000006000000000000000000000600000000000000 000000060000000000000000000003000000000000000000000300000000000000000000018000 00000000000000000180000000000000000000018000000000000000000000C000000000000000 000000C00000000000000000000060000000000000000000006000000000000000000000300000 0000000000000000180000000000000000000018000000000000000000000C0000000000000000 00000C000000000000000000000600000000000000000000030000000000000000000003000000 00000000000000018000000000000000000000C000000000000000000000C00000000000000000 000060000000000000000000003000000000000000000000180000000000000000000018000000 000000000000000C00000000000000000000060000000000000000000003000000000000000000 00018000000000000000000000C000000000000000000000600000000000000000000030000000 0000000000000018000000000000000000000C0000000000000000000006000000000000000000 00038000000000000000000001C000000000000000000000600000000000000000000038000000 000000000000001C00000000000000000000070000000000000000000003800000000000000000 0000E00000000000000000000078000000000000000000001C0000000000000000000007000000 0000000000000003C000000000000000000000F8000000000000000000003E0000000000000000 000007C000000000000000000001F8000000000000000000003F0000000000000000000007F800 000000000000000000FFE000000000000000000007FFF80000000000000000001FF8>85 85 0 0 166]38 dc[<0000000000000000001FF8000000000000000007FFF80000000000000000FFE000 0000000000000007F80000000000000000003F00000000000000000001F8000000000000000000 07C00000000000000000003E00000000000000000000F800000000000000000003C00000000000 0000000007000000000000000000001C000000000000000000007800000000000000000000E000 0000000000000000038000000000000000000007000000000000000000001C0000000000000000 000038000000000000000000006000000000000000000001C00000000000000000000380000000 00000000000006000000000000000000000C000000000000000000001800000000000000000000 30000000000000000000006000000000000000000000C000000000000000000001800000000000 00000000030000000000000000000006000000000000000000000C000000000000000000001800 000000000000000000180000000000000000000030000000000000000000006000000000000000 000000C000000000000000000000C0000000000000000000018000000000000000000003000000 00000000000000030000000000000000000006000000000000000000000C000000000000000000 000C00000000000000000000180000000000000000000018000000000000000000003000000000 00000000000060000000000000000000006000000000000000000000C000000000000000000000 C00000000000000000000180000000000000000000018000000000000000000001800000000000 000000000300000000000000000000030000000000000000000006000000000000000000000600 00000000000000000006000000000000000000000C000000000000000000000C00000000000000 0000000C0000000000000000000018000000000000000000001800000000000000000000180000 000000000000000030000000000000000000003000000000000000000000300000000000000000 000030000000000000000000003000000000000000000000600000000000000000000060000000 000000000000006000000000000000000000600000000000000000000060000000000000000000 006000000000000000000000C000000000000000000000C000000000000000000000C000000000 000000000000C000000000000000000000C000000000000000000000C000000000000000000000 C000000000000000000000C000000000000000000000C000000000000000000000400000000000 0000000000>85 85 0 83 166]39 dc[<00003FC000000003FFFC0000000FC03F0000001C0003 800000700000E00000E000007000018000001800030000000C000600000006000C00000003000C 00000003001800000001803000000000C03000000000C060000000006060000000006060000000 0060600000000060C00000000030C00000000030C00000000030C00000000030C00000000030C0 0000000030C00000000030C0000000003060000000006060000000006060000000006060000000 00603000000000C03000000000C01800000001800C00000003000C000000030006000000060003 0000000C0001800000180000E00000700000700000E000001C00038000000FC03F00000003FFFC 000000003FC00000>44 44 -22 22 42]105 dc dfe /fj df[<0C003C00CC000C000C000C000C 000C000C000C000C000C000C000C000C00FF80>9 16 2 0 15]49 dc[<1F00618040C08060C060 0060006000C00180030006000C00102020207FC0FFC0>11 16 1 0 15]50 dc[<1F00218060C0 60C000C0008001800F00008000400060C060C060804060801F00>11 16 1 0 15]51 dc[<0300 030007000F000B001300330023004300C300FFE003000300030003001FE0>11 16 1 0 15]52 dc[<20803F002C002000200020002F0030802040006000600060C06080C061801F00>11 16 1 0 15]53 dc dfe /fk df[<07C018303018701C600C600CE00EE00EE00EE00EE00EE00EE00EE00E E00E600C600C701C30181C7007C0>15 21 1 0 18]48 dc[<03000700FF000700070007000700 07000700070007000700070007000700070007000700070007007FF0>12 21 2 0 18]49 dc[< 0F8030E040708030C038E0384038003800700070006000C00180030006000C08080810183FF07F F0FFF0>13 21 2 0 18]50 dc[<0FE030306018701C701C001C00180038006007E00030001800 0C000E000EE00EE00EC00C401830300FE0>15 21 1 0 18]51 dc[<00300030007000F001F001 700270047008701870107020704070C070FFFE0070007000700070007003FE>15 21 1 0 18] 52 dc[<20303FE03FC0240020002000200020002F8030E020700030003800384038E038E03880 30406020C01F00>13 21 2 0 18]53 dc[<01F00608080C181C301C70006000E000E3E0EC30F0 18F00CE00EE00EE00E600E600E300C3018183007C0>15 21 1 0 18]54 dc[<07E01830201860 0C600C700C78183E101F600FC00FF018F8607C601EC00EC006C006C004600C38300FE0>15 21 1 0 18]56 dc[22 10 2 -3 27]61 dc dfe /fl df[17 6 1 -11 23] 45 dc[<1C003E007F00FF80FF80FF807F003E001C00>9 9 5 0 19]46 dc[<000E00001E00007E 0007FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE 0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE 0000FE0000FE0000FE0000FE0000FE0000FE0000FE007FFFFE7FFFFE7FFFFE>23 39 5 0 34] 49 dc[<00FF800003FFF0000FFFFC001F03FE003800FF007C007F80FE003FC0FF003FC0FF003F E0FF001FE0FF001FE07E001FE03C003FE000003FE000003FC000003FC000007F8000007F000000 FE000000FC000001F8000003F0000003E00000078000000F0000001E0000003C00E0007000E000 E000E001C001C0038001C0070001C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF80FFFFFF80 FFFFFF80>27 39 3 0 34]50 dc[<007F800003FFF00007FFFC000F81FE001F00FF003F80FF00 3F807F803F807F803F807F801F807F800F007F800000FF000000FF000000FE000001FC000001F8 000007F00000FFC00000FFF0000001FC0000007E0000007F0000007F8000003FC000003FC00000 3FE000003FE03C003FE07E003FE0FF003FE0FF003FE0FF003FC0FF007FC07E007F807C007F003F 01FE001FFFFC0007FFF00000FF8000>27 39 3 0 34]51 dc[ 41 41 3 0 49]66 dc[36 41 3 0 43]70 dc[58 41 3 0 65]77 dc[<007F806003FFF0E007FFF9E00F807FE01F001FE0 3E0007E07C0003E07C0001E0FC0001E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FFC000 007FFE00007FFFE0003FFFFC001FFFFE000FFFFF8007FFFFC003FFFFE000FFFFE00007FFF00000 7FF000000FF8000007F8000003F8600001F8E00001F8E00001F8E00001F8F00001F0F00001F0F8 0003F0FC0003E0FF0007C0FFE01F80F3FFFF00E0FFFE00C01FF000>29 41 4 0 38]83 dc[<7F FFFFFFFFC07FFFFFFFFFC07FFFFFFFFFC07F803FC03FC07E003FC007C078003FC003C078003FC0 03C070003FC001C0F0003FC001E0F0003FC001E0E0003FC000E0E0003FC000E0E0003FC000E0E0 003FC000E0E0003FC000E000003FC0000000003FC0000000003FC0000000003FC0000000003FC0 000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000 003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0 000000003FC0000000003FC0000000003FC0000000003FC00000007FFFFFE000007FFFFFE00000 7FFFFFE000>43 40 2 0 48]84 dc[46 41 3 0 53]85 dc[< 01FF800007FFF0000F81F8001FC07E001FC07E001FC03F000F803F8007003F8000003F8000003F 8000003F80000FFF8000FFFF8007FC3F800FE03F803F803F803F003F807F003F80FE003F80FE00 3F80FE003F80FE003F807E007F807F00DF803F839FFC0FFF0FFC01FC03FC>30 27 2 0 33]97 dc[<001FF80000FFFE0003F01F0007E03F800FC03F801F803F803F801F007F800E007F0000007F 000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000007F0000007F000000 7F8000003F8001C01F8001C00FC0038007E0070003F01E0000FFFC00001FE000>26 27 2 0 31] 99 dc[<00003FF80000003FF80000003FF800000003F800000003F800000003F800000003F800 000003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8 00001FE3F80000FFFBF80003F03FF80007E00FF8000FC007F8001F8003F8003F8003F8007F0003 F8007F0003F8007F0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF00 03F800FF0003F8007F0003F8007F0003F8007F0003F8003F8003F8001F8003F8000F8007F80007 C00FF80003F03BFF8000FFF3FF80003FC3FF80>33 42 2 0 38]100 dc[<003FE00001FFF80003 F07E0007C01F000F801F801F800F803F800FC07F000FC07F0007C07F0007E0FF0007E0FF0007E0 FFFFFFE0FFFFFFE0FF000000FF000000FF0000007F0000007F0000007F0000003F8000E01F8000 E00FC001C007E0038003F81F0000FFFE00001FF000>27 27 2 0 32]101 dc[<00FF81F003FFE7 F80FC1FE7C1F80FC7C1F007C383F007E107F007F007F007F007F007F007F007F007F007F007F00 7F003F007E001F007C001F80FC000FC1F8001FFFE00018FF800038000000380000003C0000003E 0000003FFFF8001FFFFF001FFFFF800FFFFFC007FFFFE01FFFFFF03E0007F07C0001F8F80000F8 F80000F8F80000F8F80000F87C0001F03C0001E01F0007C00FC01F8003FFFE00007FF000>30 40 2 13 34]103 dc[33 42 3 0 38]104 dc[<07000FC01F E03FE03FE03FE01FE00FC007000000000000000000000000000000FFE0FFE0FFE00FE00FE00FE0 0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFF FEFFFE>15 43 3 0 20]105 dc[15 42 3 0 20]108 dc[53 27 3 0 58]109 dc[33 27 3 0 38]110 dc[33 39 2 12 38]112 dc[<03 FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FFE0007FFE007FFF803FFFE01F FFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F80038FC0070FF01E0F7FFC0C1 FF00>22 27 2 0 27]115 dc[<00700000700000700000700000F00000F00000F00001F00003F0 0003F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007F00007F00007F00007F0 0007F00007F00007F00007F00007F00007F03807F03807F03807F03807F03807F03803F03803F8 7001F86000FFC0001F80>21 38 1 0 27]116 dc[33 39 1 12 36]121 dc dfe /fm df[<00 03FF8000001FFFF000007FFFFE0000FE03FF0001F000FF8003C000FFC00780007FE00FF0007FF0 0FF8007FF01FFC007FF81FFE007FF81FFE007FF81FFE007FF81FFE007FF81FFE007FF80FFC007F F007F8007FF003F0007FF0000000FFE0000000FFC0000001FF80000001FF00000003FE00000007 FC0000001FF000000FFFC000000FFF8000000FFFF800000003FE00000000FF800000007FE00000 003FF00000003FF80000003FFC0000001FFC0000001FFE0000001FFE0200001FFF1FC0001FFF3F E0001FFF7FF0001FFF7FF0001FFFFFF8001FFFFFF8001FFFFFF8001FFEFFF8001FFEFFF0001FFE 7FF0003FFC7FE0003FFC3FC0003FF81F80007FF01FE000FFE007FC03FFC003FFFFFF0001FFFFFE 00003FFFF0000007FF8000>40 57 4 1 49]51 dc[<0000001FFF000030000001FFFFE000F000 000FFFFFFC01F000007FFFFFFE03F00001FFFE007F87F00003FFE0000FCFF0000FFF000003FFF0 001FFC000001FFF0003FF80000007FF0007FF00000003FF000FFC00000003FF001FFC00000001F F003FF800000000FF007FF000000000FF00FFF0000000007F00FFE0000000007F01FFE00000000 03F01FFE0000000003F03FFC0000000003F03FFC0000000001F03FFC0000000001F07FFC000000 0001F07FF80000000001F07FF80000000000007FF8000000000000FFF8000000000000FFF80000 00000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF800 0000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF80000000000007FF8 0000000000007FF80000000000007FF80000000000007FFC0000000000F03FFC0000000000F03F FC0000000000F03FFC0000000000F01FFE0000000000F01FFE0000000001E00FFE0000000001E0 0FFF0000000001E007FF0000000003C003FF8000000003C001FFC0000000078000FFE00000000F 00007FF00000001F00003FF80000003E00001FFC0000007C00000FFF000001F8000003FFE00007 F0000001FFFE003FC00000007FFFFFFF000000000FFFFFFC0000000001FFFFF000000000001FFF 000000>60 61 5 1 71]67 dc[<001FFF00000001FFFFF0000003FFFFFC000007F007FE00000F F801FF00001FFC00FF80001FFC007FC0001FFC007FE0001FFC003FE0000FF8003FF0000FF8003F F00007F0003FF00001C0003FF0000000003FF0000000003FF0000000003FF0000000FFFFF00000 0FFFFFF000007FF83FF00001FF803FF00007FE003FF0000FF8003FF0001FF0003FF0003FE0003F F0007FE0003FF0007FE0003FF000FFC0003FF000FFC0003FF000FFC0003FF000FFC0003FF000FF C0007FF0007FE0007FF0007FE000DFF0003FF0039FF8001FFC0F0FFFF007FFFE0FFFF001FFFC07 FFF0003FE000FFF0>44 38 3 0 48]97 dc[<0001FFC000000FFFF800003FFFFE0000FF80FF00 01FE003F8007FC001FC00FF8000FE00FF8000FF01FF00007F03FF00007F83FF00007F87FE00007 F87FE00003FC7FE00003FC7FE00003FCFFE00003FCFFFFFFFFFCFFFFFFFFFCFFFFFFFFFCFFE000 0000FFE0000000FFE0000000FFE00000007FE00000007FE00000007FE00000003FE00000003FF0 00003C1FF000003C1FF000003C0FF800007807FC0000F803FE0001F001FF0007E000FFC03FC000 3FFFFF000007FFFC000000FFE000>38 38 3 0 45]101 dc[<00FF00000000FFFF00000000FFFF 00000000FFFF00000000FFFF0000000007FF0000000003FF0000000003FF0000000003FF000000 0003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF 0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF000000 0003FF007FC00003FF01FFF80003FF07FFFC0003FF0F03FE0003FF1C01FF0003FF3001FF8003FF 6000FF8003FFE000FFC003FFC000FFC003FF8000FFC003FF8000FFC003FF8000FFC003FF0000FF C003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF 0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FF C003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF 0000FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFFFFFFFFFC3FFFFFFFFFFC3FFFFF>48 60 4 0 55]104 dc[<00FF01FF8000FFFF0FFFF000FFFF3FFFFC00FFFFFE03FF00FFFFF000FF8003FFC0 007FC003FF80003FE003FF00003FF003FF00001FF803FF00001FFC03FF00000FFC03FF00000FFE 03FF00000FFE03FF000007FE03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF00 0007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FE03FF000007FE 03FF00000FFE03FF00000FFC03FF00000FFC03FF00001FF803FF00001FF803FF00003FF003FF80 003FE003FFC0007FC003FFF001FF8003FFFC07FF0003FF3FFFFC0003FF0FFFF00003FF01FF0000 03FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00 00000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00000000 FFFFFC000000FFFFFC000000FFFFFC000000FFFFFC000000>48 55 3 17 55]112 dc[<00FE03 F000FFFE0FFE00FFFE1FFF00FFFE3C3F80FFFE707FC007FE60FFE003FEE0FFE003FEC0FFE003FF C0FFE003FF807FC003FF807FC003FF803F8003FF800E0003FF00000003FF00000003FF00000003 FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF000000 03FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF0000 0003FF00000003FF000000FFFFFE0000FFFFFE0000FFFFFE0000FFFFFE0000>35 38 3 0 41] 114 dc[<0007800000078000000780000007800000078000000F8000000F8000000F8000000F80 00001F8000001F8000003F8000003F8000007F800000FF800001FF800007FF80001FFFFFF0FFFF FFF0FFFFFFF0FFFFFFF001FF800001FF800001FF800001FF800001FF800001FF800001FF800001 FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF8000 01FF800001FF800001FF803C01FF803C01FF803C01FF803C01FF803C01FF803C01FF803C01FF80 3C00FF807800FFC078007FC070003FE0E0001FFFC00007FF800001FF00>30 55 2 0 38]116 dc dfe /fn df[<3078F87870>5 5 4 0 13]46 dc[<003F8000C1E00100F0020078040078040078 0F007C0F807C0F807C0F00780600780000F80000F00001E00001C0000380000700000E00001C00 00380000600000C0000180000300200600200800401000403FFFC07FFF80FFFF80>22 30 2 0 23]50 dc[<007F000183C00201E00400F00700F00F00F00F01F00F01F00001E00001E00003C000 0380000700000E0000F800000E000007000007800007C00003C00007C03007C07807C0F807C0F8 07C0F00780800F00400E00201C0018780007E000>20 31 3 1 23]51 dc[<0000100000001800 000038000000380000007800000078000000FC000001BC0000013C0000033C0000023C0000063C 0000043E0000081E0000081E0000101E0000101E0000201E0000200F0000400F0000400F0000FF FF0000800F0001000F8001000780020007800200078004000780040007800C0007C03E0007C0FF 807FFC>30 32 2 0 34]65 dc[<0001F808000E061800380138007000F801E0007803C0007007 800030078000300F0000301F0000301E0000303E0000203C0000007C0000007C0000007C000000 7C000000F8000000F8000000F8000000F8000000F80000007800004078000080780000803C0000 803C0001001C0002000E00020006000C000300100001C0E000003F0000>29 33 5 1 33]67 dc[ <07FFFF00007C01E0003C00F0003C00780078003C0078003C0078001E0078001E0078001E0078 001F00F0001F00F0001F00F0001F00F0001F00F0001F00F0001F01E0001E01E0003E01E0003E01 E0003E01E0003C01E0007C03C0007803C000F003C000F003C001E003C003C003C0078007800F00 07803C00FFFFE000>32 31 2 0 35]68 dc[<07FFFFF8007C0078003C0038003C001800780018 007800080078000800780008007800080078080800F0100000F0100000F0100000F0300000FFF0 0000F0700001E0200001E0200001E0200001E0200001E0000801E0001003C0001003C0001003C0 002003C0002003C0006003C000C0078001C0078007C0FFFFFF80>29 31 2 0 31]69 dc[<0001 FC04000F030C003C009C0070007C00E0003C01C0003803800018078000180F0000181F0000181E 0000183E0000103C0000007C0000007C0000007C0000007C000000F8000000F8000000F8007FFC F80003E0780001E0780001E0780003C0780003C03C0003C03C0003C01C0003C00E0007C007000B 800380118001E06080003F8000>30 33 5 1 36]71 dc[<07FFC7FFC0007C00F800003C007800 003C007800007800F000007800F000007800F000007800F000007800F000007800F00000F001E0 0000F001E00000F001E00000F001E00000FFFFE00000F001E00001E003C00001E003C00001E003 C00001E003C00001E003C00001E003C00003C007800003C007800003C007800003C007800003C0 07800003C007800007800F000007C00F8000FFF8FFF800>34 31 2 0 34]72 dc[<07FFE0007C 00003C00003C0000780000780000780000780000780000780000F00000F00000F00000F00000F0 0000F00001E00001E00001E00001E00001E00001E00003C00003C00003C00003C00003C00003C0 0007800007C000FFFC00>19 31 1 0 16]73 dc[<07FFF000007E0000003C0000003C00000078 0000007800000078000000780000007800000078000000F0000000F0000000F0000000F0000000 F0000000F0000001E0000001E0000001E0000001E0000001E0008001E0010003C0010003C00100 03C0030003C0020003C0060003C0060007801E0007807C00FFFFFC00>25 31 2 0 28]76 dc[< 07FC0000FFC0007C0000F800003C00017800003C00017800004E0002F000004E0002F000004E00 04F000004E0004F000004E0008F000004E0008F00000870011E00000870011E00000870021E000 00870021E00000870041E00000838041E00001038083C00001038083C00001038103C000010382 03C0000101C203C0000101C403C0000201C40780000201C80780000201C80780000201D0078000 0200F00780000600E00780000600E00F00000F00C00F8000FFE0C1FFF800>42 31 2 0 42]77 dc[<07FC01FFC0003E003E00003E001800003E001800004F001000004F00100000478010000047 8010000043C010000043C010000083C020000081E020000081E020000080F020000080F0200000 80782000010078400001007C400001003C400001003C400001001E400001001E400002000F8000 02000F800002000F800002000780000200078000060003800006000300000F00010000FFE00100 00>34 31 2 0 34]78 dc[<07FFFF00007C03C0003C01E0003C00F0007800F0007800F8007800 F8007800F8007800F8007800F000F001F000F001E000F003C000F0078000F00F0000FFF80001E0 000001E0000001E0000001E0000001E0000001E0000003C0000003C0000003C0000003C0000003 C0000003C000000780000007C00000FFFC0000>29 31 2 0 31]80 dc[<07FFFC00007C070000 3C03C0003C01E0007801E0007801F0007801F0007801F0007801F0007801E000F003E000F003C0 00F0078000F00F0000F03C0000FFF00001E0300001E0380001E01C0001E01C0001E01C0001E01E 0003C03E0003C03E0003C03E0003C03E0003C03E0003C03E0207803E0407C01F04FFFC0F180000 03E0>31 32 2 1 33]82 dc[<003F040060CC01803C03801C03001C0700180600080E00080E00 080E00080E00000F00000F80000FE00007FE0003FF8001FFC0007FE00007E00001E00000E00000 F00000F04000E04000E04000E04000E06000C0600180E00380F80300C60C0081F800>22 33 3 1 25]83 dc[<3FFFFFF03C0780F03007803060078030400F0010400F0010C00F0010800F0010800F 0010800F0010001E0000001E0000001E0000001E0000001E0000001E0000003C0000003C000000 3C0000003C0000003C0000003C0000007800000078000000780000007800000078000000780000 00F0000001F800007FFFE000>28 31 6 0 33]84 dc[29 32 7 1 34]85 dc dfe /fo df[<70F8F8F870>5 5 4 0 13]58 dc[<70F8FCFC74040404080810102040 >6 14 4 9 13]59 dc[<000001C00000078000001E00000078000001E00000078000000E000000 38000000F0000003C000000F0000003C000000F0000000F00000003C0000000F00000003C00000 00F0000000380000000E0000000780000001E0000000780000001E0000000780000001C0>26 26 4 2 35]60 dc[<000100030003000600060006000C000C000C0018001800180030003000300060 0060006000C000C000C00180018001800300030003000600060006000C000C000C001800180018 00300030003000600060006000C000C000C000>16 45 3 11 23]61 dc[26 26 4 2 35]62 dc[<00FFFFC0000F0070000F00 38000F001C000F001E001E001E001E001E001E001E001E001E003C003C003C003C003C0078003C 0070007800E000780380007FFE000078000000F0000000F0000000F0000000F0000001E0000001 E0000001E0000001E0000003C0000003C0000003C0000003C0000007C00000FFFC0000>31 31 2 0 29]80 dc[<0000780003F80000700000700000700000700000E00000E00000E00000E00001C0 0001C000F1C00389C00707800E03801C03803C0380380700780700780700780700F00E00F00E00 F00E00F00E10F01C20F01C20703C20705C40308C400F0780>21 32 2 0 24]100 dc[<007C01C2 07010E011C013C013802780C7BF07C00F000F000F000F0007000700170023004183807C0>16 20 2 0 21]101 dc[<00007C0000CE00019E00039E00030C000700000700000700000700000E0000 0E00000E0000FFF0000E00000E00001C00001C00001C00001C00001C0000380000380000380000 380000380000700000700000700000700000700000E00000E00000E00000E00000C00001C00031 8000798000F300006200003C0000>23 41 2 9 22]102 dc[<00E001E001E000C0000000000000 00000000000000000E00130023804380438043808700070007000E000E001C001C001C20384038 403840388019000E00>11 31 2 0 16]105 dc[<03C01FC0038003800380038007000700070007 000E000E000E000E001C001C001C001C0038003800380038007000700070007100E200E200E200 E20064003800>10 32 2 0 14]108 dc[<1E07C07C00231861860023A032030043C03403004380 380380438038038087007007000700700700070070070007007007000E00E00E000E00E00E000E 00E00E000E00E01C101C01C01C201C01C038201C01C038401C01C0184038038018801801800F00 >36 20 2 0 40]109 dc[<1E07802318C023A06043C0704380704380708700E00700E00700E007 00E00E01C00E01C00E01C00E03821C03841C07041C07081C03083803101801E0>23 20 2 0 27] 110 dc[<03C1E004621804741C08781C08701E08701E10E01E00E01E00E01E00E01E01C03C01C0 3C01C03C01C0380380780380700380E003C1C0072380071E000700000700000E00000E00000E00 000E00001C00001C0000FFC000>23 29 -1 9 23]112 dc dfe /fp df[<0000000003E0000000 00000000000007F000000000000000000007F00000000000000000000FF8000000000000000000 0FF80000000000000000000FF80000000000000000001FFC0000000000000000001FFC00000000 00000000003FFE0000000000000000003FFE0000000000000000007FFF0000000000000000007F FF0000000000000000007FFF000000000000000000FFFF800000000000000000FFFF8000000000 00000001FFFFC00000000000000001FFFFC00000000000000001FFFFC00000000000000003FFFF E00000000000000003EFFFE00000000000000007EFFFF00000000000000007CFFFF00000000000 000007C7FFF0000000000000000FC7FFF8000000000000000F83FFF8000000000000001F83FFFC 000000000000001F03FFFC000000000000001F01FFFC000000000000003F01FFFE000000000000 003E00FFFE000000000000007E00FFFF000000000000007C007FFF00000000000000FC007FFF80 000000000000F8007FFF80000000000000F8003FFF80000000000001F8003FFFC0000000000001 F0001FFFC0000000000003F0001FFFE0000000000003E0001FFFE0000000000003E0000FFFE000 0000000007E0000FFFF0000000000007C00007FFF000000000000FC00007FFF800000000000F80 0007FFF800000000000F800003FFF800000000001F800003FFFC00000000001F000001FFFC0000 0000003FFFFFFFFFFE00000000003FFFFFFFFFFE00000000007FFFFFFFFFFF00000000007FFFFF FFFFFF00000000007FFFFFFFFFFF0000000000FC0000007FFF8000000000F80000003FFF800000 0001F80000003FFFC000000001F00000003FFFC000000001F00000001FFFC000000003F0000000 1FFFE000000003E00000000FFFE000000007E00000000FFFF000000007C00000000FFFF0000000 07C000000007FFF00000000FC000000007FFF80000000F8000000003FFF80000001F8000000003 FFFC0000001F0000000003FFFC0000007FC000000001FFFC0000FFFFFFC00007FFFFFFFF80FFFF FFC00007FFFFFFFF80FFFFFFC00007FFFFFFFF80FFFFFFC00007FFFFFFFF80FFFFFFC00007FFFF FFFF80>81 72 4 0 90]65 dc[<3FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF003FFFFFFFFF FFFFFFFF003FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF003FFF0003FFF8003FFF007FF80003 FFF80007FF807FE00003FFF80001FF807FC00003FFF80000FF807F800003FFF800007F807F0000 03FFF800003F807F000003FFF800003F807E000003FFF800001F807E000003FFF800001F807E00 0003FFF800000F807C000003FFF800000F807C000003FFF800000F807C000003FFF800000F807C 000003FFF800000F80FC000003FFF800000FC0F8000003FFF8000007C0F8000003FFF8000007C0 F8000003FFF8000007C0F8000003FFF8000007C0F8000003FFF8000007C000000003FFF8000000 0000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000 000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800 00000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8 0000000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FF F80000000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003 FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000000000 03FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8000000000000 0003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000000000 000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000 00000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8000000 000003FFFFFFFFFFF800000003FFFFFFFFFFF800000003FFFFFFFFFFF800000003FFFFFFFFFFF8 00000003FFFFFFFFFFF80000>74 70 4 0 83]84 dc[82 72 4 1 91]85 dc[<0007FFFC000000007FFFFFC0000001FFFFFFF8000003FFFFFFFE000007FE001FFF 000007FF0003FFC0000FFF8001FFE0000FFF8000FFF0000FFF80007FF0000FFF80007FF8000FFF 80007FF80007FF00003FFC0007FF00003FFC0003FE00003FFC0000F800003FFC00000000003FFC 00000000003FFC00000000003FFC00000000003FFC00000007FFFFFC000000FFFFFFFC000007FF FFFFFC00003FFFE03FFC0000FFFE003FFC0003FFF0003FFC0007FFC0003FFC000FFF00003FFC00 1FFE00003FFC003FFC00003FFC007FF800003FFC007FF800003FFC00FFF000003FFC00FFF00000 3FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000007FFC007FF80000FFFC007F F80001EFFC003FFC0003EFFC003FFF0007CFFF000FFFC03F8FFFF807FFFFFF07FFFC01FFFFFC03 FFFC007FFFF001FFFC0003FF80007FF8>54 46 3 0 58]97 dc[<00001FFFC0000000FFFFF800 0007FFFFFE00001FFFFFFF80007FFC00FFC000FFE001FFC001FFC003FFE003FF8003FFE007FF00 03FFE00FFE0003FFE00FFE0003FFE01FFC0001FFC01FFC0001FFC03FFC0000FF803FFC00003E00 7FF8000000007FF8000000007FF800000000FFF800000000FFF800000000FFF800000000FFF800 000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000 7FF8000000007FF8000000007FFC000000003FFC000000003FFC000000001FFC000000F81FFE00 0000F80FFE000000F80FFF000001F007FF800003F003FFC00007E001FFE0000FC000FFF0001F80 007FFE00FF00001FFFFFFE000007FFFFF8000000FFFFE00000001FFE0000>45 46 4 0 53]99 dc[<00001FFE00000001FFFFE0000007FFFFF800001FFFFFFE00007FFC07FF0000FFE001FF8001 FFC0007FC003FF80003FE007FF00003FF00FFE00001FF01FFE00000FF81FFC00000FF83FFC0000 0FFC3FFC000007FC7FFC000007FC7FF8000007FC7FF8000007FE7FF8000007FEFFF8000007FEFF F8000007FEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFCFFF800000000FFF80000 0000FFF800000000FFF8000000007FF8000000007FF8000000007FFC000000003FFC000000003F FC000000003FFC0000001C1FFE0000003E0FFE0000003E07FF0000007E07FF000000FC03FF8000 01F801FFC00003F0007FF0001FE0003FFE00FFC0001FFFFFFF800007FFFFFE000000FFFFF80000 000FFF8000>47 46 3 0 54]101 dc[<00000000001F8000007FF000FFE00007FFFF03FFF0001F FFFFC7FFF0007FFFFFFFC7F800FFE03FFE0FF801FF800FFC0FF803FF0007FE0FF807FE0003FF07 F007FE0003FF07F00FFC0001FF81C00FFC0001FF80000FFC0001FF80001FFC0001FFC0001FFC00 01FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0000FFC0001FF8000 0FFC0001FF80000FFC0001FF800007FE0003FF000007FE0003FF000003FF0007FE000001FF800F FC000000FFE03FF8000001FFFFFFF0000001DFFFFFC0000003C7FFFF00000003C07FF000000007 C0000000000007C0000000000007C0000000000007C0000000000007E0000000000007F0000000 000007F8000000000007FFFFFFF0000007FFFFFFFF000003FFFFFFFFE00003FFFFFFFFF80001FF FFFFFFFE0001FFFFFFFFFF0000FFFFFFFFFF80007FFFFFFFFF8003FFFFFFFFFFC00FFFFFFFFFFF C01FF800001FFFE03FE0000001FFE07FC00000007FF07FC00000003FF0FF800000001FF0FF8000 00001FF0FF800000001FF0FF800000001FF0FF800000001FF07FC00000003FE07FC00000003FE0 3FE00000007FC03FF0000000FFC01FFC000003FF800FFF00000FFF0003FFF000FFFC0000FFFFFF FFF000003FFFFFFFC0000007FFFFFE000000003FFFC00000>53 68 3 21 59]103 dc[<00FC00 01FF0003FF8007FFC00FFFC01FFFE01FFFE01FFFE01FFFE01FFFE01FFFE00FFFC007FFC003FF80 01FF0000FC00000000000000000000000000000000000000000000000000000000000000000000 007FC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC003FFC001FFC001FFC001FFC001FFC001FFC001FFC0 01FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0 01FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0 01FFC001FFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF>24 73 4 0 32]105 dc[<007FC001FFC000 00FFE00000FFFFC00FFFF80007FFFC0000FFFFC03FFFFE001FFFFF0000FFFFC0FFFFFF007FFFFF 8000FFFFC1FC07FF80FE03FFC000FFFFC3E003FFC1F001FFE00003FFC7C001FFC3E000FFE00001 FFCF0001FFE78000FFF00001FFDE0000FFEF00007FF00001FFDC0000FFEE00007FF00001FFFC00 00FFFE00007FF80001FFF80000FFFC00007FF80001FFF00000FFF800007FF80001FFF00000FFF8 00007FF80001FFF00000FFF800007FF80001FFE00000FFF000007FF80001FFE00000FFF000007F F80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001 FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE000 00FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF0 00007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007F F80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001 FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE000 00FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF0 00007FF80001FFE00000FFF000007FF800FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFF FFF0FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0> 92 46 4 0 99]109 dc[<007FC001FFC00000FFFFC00FFFF80000FFFFC03FFFFE0000FFFFC0FF FFFF0000FFFFC1FC07FF8000FFFFC3E003FFC00003FFC7C001FFC00001FFCF0001FFE00001FFDE 0000FFE00001FFDC0000FFE00001FFFC0000FFF00001FFF80000FFF00001FFF00000FFF00001FF F00000FFF00001FFF00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001 FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000 01FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF0 0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000 FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000FFFFFFC07FFFFFE0FFFFFFC0 7FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0>59 46 4 0 66]110 dc[< 00FF803F8000FFFF80FFF000FFFF83FFFC00FFFF87FFFE00FFFF8FC3FF00FFFF8F07FF0003FF9E 0FFF8001FFBC0FFF8001FFB80FFF8001FFF80FFF8001FFF00FFF8001FFF007FF0001FFF007FF00 01FFE003FE0001FFE000F80001FFE000000001FFE000000001FFC000000001FFC000000001FFC0 00000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0000000 01FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0 00000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0000000 01FFC000000001FFC0000000FFFFFFE00000FFFFFFE00000FFFFFFE00000FFFFFFE00000FFFFFF E00000>41 46 4 0 49]114 dc[<000FFF00E0007FFFF3E001FFFFFFE007FFFFFFE00FF800FFE0 1FC0001FE03F80000FE03F000007E07F000003E07F000003E0FF000003E0FF000003E0FF800003 E0FFC0000000FFF0000000FFFE000000FFFFF800007FFFFFC0007FFFFFF0003FFFFFFC001FFFFF FF000FFFFFFF8007FFFFFFC003FFFFFFE000FFFFFFF0003FFFFFF00003FFFFF800001FFFF80000 00FFFC0000001FFC7800000FFCF8000007FCF8000003FCFC000003FCFC000003FCFE000003F8FE 000003F8FF000003F8FF800007F0FFC0000FF0FFF0001FE0FFFC00FFC0FFFFFFFF80FC7FFFFE00 F81FFFF800E003FF8000>38 46 4 0 47]115 dc[<0001F000000001F000000001F000000001F0 00000001F000000001F000000003F000000003F000000003F000000007F000000007F000000007 F00000000FF00000000FF00000001FF00000003FF00000003FF00000007FF0000001FFF0000003 FFF000000FFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC000FFF0000000FFF00000 00FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF000 0000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0 000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF001F000FFF001F000FF F001F000FFF001F000FFF001F000FFF001F000FFF001F000FFF001F000FFF001F0007FF001E000 7FF803E0003FF803E0003FFC07C0001FFE0F80000FFFFF800007FFFE000001FFFC0000001FF000 >36 66 2 0 46]116 dc[<007FE000003FF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE000 7FFFF000FFFFE0007FFFF000FFFFE0007FFFF00003FFE00001FFF00001FFE00000FFF00001FFE0 0000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001 FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000 01FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF0 0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF F00001FFE00001FFF00001FFE00001FFF00001FFE00001FFF00001FFE00003FFF00000FFE00007 FFF00000FFE0000F7FF000007FE0001F7FF000007FF0003E7FF800003FFC00FC7FFFE0001FFFFF F87FFFE00007FFFFE07FFFE00001FFFF807FFFE000003FFE007FFFE0>59 46 4 0 66]117 dc dfe /fq df[<387CFEFEFE7C38>7 7 4 0 16]46 dc[<00180000780001F800FFF800FFF80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8007FFFE07F FFE0>19 32 4 0 28]49 dc[<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01 F87C01F83803F80003F80003F00003F00007E00007C0000F80001F00003E0000380000700000E0 1801C0180380180700180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF0>21 32 3 0 28] 50 dc[<00FE0007FFC00F07E01E03F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003 E00007C0001F8001FE0001FF000007C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00 FEFF00FEFF00FC7E01FC7801F81E07F00FFFC001FE00>23 32 2 0 28]51 dc[<0000E00001E0 0003E00003E00007E0000FE0001FE0001FE00037E00077E000E7E001C7E00187E00307E00707E0 0E07E00C07E01807E03807E07007E0E007E0FFFFFEFFFFFE0007E00007E00007E00007E00007E0 0007E00007E000FFFE00FFFE>23 32 2 0 28]52 dc[<1000201E01E01FFFC01FFF801FFF001F FE001FF8001BC00018000018000018000018000019FC001FFF001E0FC01807E01803E00003F000 03F00003F80003F83803F87C03F8FE03F8FE03F8FC03F0FC03F07007E03007C01C1F800FFF0003 F800>21 32 3 0 28]53 dc[<001F8000FFE003F07007C0F00F01F81F01F83E01F83E01F87E00 F07C00007C0000FC0800FC7FC0FCFFE0FD80F0FF00F8FE007CFE007CFC007EFC007EFC007EFC00 7E7C007E7C007E7C007E3C007C3E007C1E00F80F00F00783E003FFC000FF00>23 32 2 0 28] 54 dc[<0003FE0080001FFF818000FF01E38001F8003F8003E0001F8007C0000F800F80000780 1F800007803F000003803F000003807F000001807E000001807E00000180FE00000000FE000000 00FE00000000FE00000000FE00000000FE00000000FE00000000FE000000007E000000007E0000 01807F000001803F000001803F000003801F800003000F8000030007C000060003F0000C0001F8 00380000FF00F000001FFFC0000003FE0000>33 34 3 0 40]67 dc[37 34 2 0 43]68 dc[19 34 1 0 21]73 dc[29 34 2 0 34]76 dc[48 34 2 0 53]77 dc[32 34 2 0 38]80 dc[39 34 2 0 42]82 dc[<01 FC0407FF8C1F03FC3C007C7C003C78001C78001CF8000CF8000CFC000CFC0000FF0000FFE0007F FF007FFFC03FFFF01FFFF80FFFFC03FFFE003FFE0003FF00007F00003F00003FC0001FC0001FC0 001FE0001EE0001EF0003CFC003CFF00F8C7FFE080FF80>24 34 3 0 31]83 dc[38 34 2 0 43]85 dc[<07FC001FFF803F07C03F03E03F01E03F01F01E 01F00001F00001F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E 0CF81FF87F07E03F>24 22 2 0 27]97 dc[<00FF8007FFE00F83F01F03F03E03F07E03F07C01 E07C0000FC0000FC0000FC0000FC0000FC0000FC00007C00007E00007E00003E00301F00600FC0 E007FF8000FE00>20 22 2 0 25]99 dc[<0001FE000001FE0000003E0000003E0000003E0000 003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0001FC3E0007FFBE00 0F81FE001F007E003E003E007E003E007C003E00FC003E00FC003E00FC003E00FC003E00FC003E 00FC003E00FC003E00FC003E007C003E007C003E003E007E001E00FE000F83BE0007FF3FC001FC 3FC0>26 35 2 0 31]100 dc[<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00 F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E00181F00300FC07003FFC000FF 00>21 22 2 0 26]101 dc[<003F8000FFC001E3E003C7E007C7E00F87E00F83C00F80000F8000 0F80000F80000F80000F8000FFFC00FFFC000F80000F80000F80000F80000F80000F80000F8000 0F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80007FF8007FF800 >19 35 1 0 17]102 dc[<03FC1E0FFF7F1F0F8F3E07CF3C03C07C03E07C03E07C03E07C03E07C 03E03C03C03E07C01F0F801FFF0013FC003000003000003800003FFF801FFFF00FFFF81FFFFC38 00FC70003EF0001EF0001EF0001EF0001E78003C7C007C3F01F80FFFE001FF00>24 33 2 11 28 ]103 dc[26 35 2 0 31]104 dc[< 1C003F007F007F007F003F001C000000000000000000000000000000FF00FF001F001F001F001F 001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE0>11 36 2 0 16]105 dc[26 35 2 0 30]107 dc [11 35 2 0 16] 108 dc[43 22 2 0 48]109 dc[26 22 2 0 31]110 dc[<00FE0007FFC00F83E01E00F03E00F87C007C7C007C7C007CFC007E FC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F81F01F00F83E007FFC000FE00 >23 22 2 0 28]111 dc[26 32 2 10 31]112 dc[19 22 2 0 23]114 dc[<0FF3003FFF00 781F00600700E00300E00300F00300FC00007FE0007FF8003FFE000FFF0001FF00000F80C00780 C00380E00380E00380F00700FC0E00EFFC00C7F000>17 22 2 0 22]115 dc[<01800001800001 80000180000380000380000780000780000F80003F8000FFFF00FFFF000F80000F80000F80000F 80000F80000F80000F80000F80000F80000F80000F80000F81800F81800F81800F81800F81800F 830007C30003FE0000F800>17 32 1 0 22]116 dc[26 22 2 0 31] 117 dc[37 22 1 0 40]119 dc[27 22 1 0 30]120 dc[27 32 1 10 30]121 dc dfe /fr df[<00F1800389C00707800E03801C03803C0380380700 780700780700780700F00E00F00E00F00E00F00E20F01C40F01C40703C40705C40308C800F0700 >19 20 4 0 23]97 dc[<07803F8007000700070007000E000E000E000E001C001C001CF01D0C 3A0E3C0E380F380F700F700F700F700FE01EE01EE01EE01CE03CE038607060E031C01F00>16 32 5 0 21]98 dc[<007E0001C1000300800E07801E07801C07003C0200780000780000780000F000 00F00000F00000F00000F0000070010070020030040018380007C000>17 20 4 0 21]99 dc[< 0000780003F80000700000700000700000700000E00000E00000E00000E00001C00001C000F1C0 0389C00707800E03801C03803C0380380700780700780700780700F00E00F00E00F00E00F00E20 F01C40F01C40703C40705C40308C800F0700>21 32 4 0 23]100 dc[<007C01C207010E011C01 3C013802780C7BF07C00F000F000F000F0007000700170023804183807C0>16 20 4 0 21]101 dc[<003C6000E27001C1E00380E00700E00F00E00E01C01E01C01E01C01E01C03C03803C03803C 03803C03803C07003C07001C0F001C17000C2E0003CE00000E00000E00001C00001C00301C0078 3800F0700060E0003F8000>20 29 2 9 21]103 dc[<01E0000FE00001C00001C00001C00001C0 00038000038000038000038000070000070000071E000763000E81800F01C00E01C00E01C01C03 801C03801C03801C0380380700380700380700380E10700E20700C20701C20700C40E00CC06007 00>20 32 3 0 23]104 dc[<00C001E001E001C000000000000000000000000000000E00330023 0043804300470087000E000E000E001C001C001C003840388030807080310033001C00>11 31 4 0 14]105 dc[<01E0000FE00001C00001C00001C00001C0000380000380000380000380000700 000700000703C00704200E08E00E11E00E21E00E40C01C80001D00001E00001FC00038E0003870 00387000383840707080707080707080703100E03100601E00>19 32 3 0 21]107 dc[<03C01F C0038003800380038007000700070007000E000E000E000E001C001C001C001C00380038003800 38007000700070007100E200E200E200E20064003800>10 32 4 0 12]108 dc[<1C0F80F00026 30C318004740640C004780680E004700700E004700700E008E00E01C000E00E01C000E00E01C00 0E00E01C001C01C038001C01C038001C01C038001C01C0708038038071003803806100380380E1 00380380620070070066003003003800>33 20 4 0 37]109 dc[<1C0F802630C0474060478060 4700704700708E00E00E00E00E00E00E00E01C01C01C01C01C01C01C0384380388380308380708 3803107003303001C0>22 20 4 0 26]110 dc[<007C0001C3000301800E01C01E01C01C01E03C 01E07801E07801E07801E0F003C0F003C0F003C0F00780F00700700F00700E0030180018700007 C000>19 20 4 0 23]111 dc[<01C1E002621804741C04781C04701E04701E08E01E00E01E00E0 1E00E01E01C03C01C03C01C03C01C0380380780380700380E003C1C0072380071E000700000700 000E00000E00000E00000E00001C00001C0000FFC000>23 29 0 9 23]112 dc[<00F0400388C0 0705800E03801C03803C0380380700780700780700780700F00E00F00E00F00E00F00E00F01C00 F01C00703C00705C0030B8000F380000380000380000700000700000700000700000E00000E000 0FFE00>18 29 4 9 21]113 dc[<1C1E002661004783804787804707804703008E00000E00000E 00000E00001C00001C00001C00001C0000380000380000380000380000700000300000>17 20 4 0 19]114 dc[<00FC030206010C030C070C060C000F800FF007F803FC003E000E700EF00CF00C E008401020601F80>16 20 3 0 19]115 dc[<018001C0038003800380038007000700FFF00700 0E000E000E000E001C001C001C001C003800380038003820704070407080708031001E00>12 28 4 0 15]116 dc[<0E00C03300E02301C04381C04301C04701C08703800E03800E03800E03801C 07001C07001C07001C07101C0E20180E20180E201C1E200C264007C380>20 20 4 0 24]117 dc [<0E00C1C03300E3C02301C3E04381C1E04301C0E04701C060870380400E0380400E0380400E03 80401C0700801C0700801C0700801C0701001C0701001C0602001C0F02000C0F04000E13080003 E1F000>27 20 4 0 30]119 dc dfe /fs df[12 4 1 -8 17]45 dc[34 31 2 0 40]68 dc[36 31 2 0 41]78 dc[<001FF80000FFFF0001F81F8007E007E00FC003F0 1F8001F81F0000F83F0000FC7F0000FE7E00007E7E00007EFE00007FFE00007FFE00007FFE0000 7FFE00007FFE00007FFE00007FFE00007FFE00007F7E00007E7F0000FE7F0000FE3F0000FC3F80 01FC1F8001F80FC003F007E007E001F81F8000FFFF00001FF800>32 31 3 0 39]79 dc[36 31 2 0 39]82 dc[<03FC080FFF381E03F83800F8700078700038F00038F00018F00018F80000FC00 007FC0007FFE003FFF801FFFE00FFFF007FFF000FFF80007F80000FC00007C00003CC0003CC000 3CC0003CE00038E00078F80070FE01E0E7FFC081FF00>22 31 3 0 29]83 dc[35 31 2 0 40] 85 dc[51 31 1 0 54]87 dc[<07FC 001FFF003F0F803F07C03F03E03F03E00C03E00003E0007FE007FBE01F03E03C03E07C03E0F803 E0F803E0F803E0FC05E07E0DE03FF8FE0FE07E>23 20 1 0 25]97 dc[24 32 2 0 29]98 dc[<01FE0007FF801F0FC03E0FC03E0FC07C0FC07C 0300FC0000FC0000FC0000FC0000FC0000FC00007C00007E00003E00603F00C01F81C007FF0001 FC00>19 20 2 0 23]99 dc[<0007F80007F80000F80000F80000F80000F80000F80000F80000 F80000F80000F80000F801F8F80FFEF81F83F83E01F87E00F87C00F87C00F8FC00F8FC00F8FC00 F8FC00F8FC00F8FC00F87C00F87C00F87E00F83E01F81F07F80FFEFF03F8FF>24 32 2 0 29] 100 dc[<01FE0007FF800F83C01E01E03E00F07C00F07C00F8FC00F8FFFFF8FFFFF8FC0000FC00 00FC00007C00007C00003E00181E00180F807007FFE000FF80>21 20 1 0 24]101 dc[24 32 3 0 29]104 dc[<1C003E003F007F003F003E001C 00000000000000000000000000FF00FF001F001F001F001F001F001F001F001F001F001F001F00 1F001F001F001F001F00FFE0FFE0>11 33 2 0 14]105 dc[24 32 2 0 28]107 dc[11 32 2 0 14]108 dc[39 20 3 0 44]109 dc[24 20 3 0 29]110 dc[<01 FF0007FFC01F83F03E00F83E00F87C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007E7C 007C7C007C3E00F83E00F81F83F007FFC001FF00>23 20 1 0 26]111 dc[24 29 2 9 29]112 dc[<01F81807FE381F87783F01F83E01F87E00F87C00F8FC00F8FC00F8 FC00F8FC00F8FC00F8FC00F87C00F87E00F87E00F83F01F81F87F80FFEF803F8F80000F80000F8 0000F80000F80000F80000F80000F80007FF0007FF>24 29 2 9 28]113 dc[18 20 2 0 22]114 dc[<0FE63FFE701E600EE006E006F800 FFC07FF83FFC1FFE03FE001FC007C007E007F006F81EFFFCC7F0>16 20 2 0 21]115 dc[<0180 0180018003800380038007800F803F80FFFCFFFC0F800F800F800F800F800F800F800F800F800F 800F860F860F860F860F8607CC03F801F0>15 29 1 0 20]116 dc[24 20 3 0 29]117 dc[35 20 1 0 38]119 dc[<3FFFE03FFFE03C07C0380F80701F80603F00603E00607C00 00F80001F80003F00003E06007C0600F80601F80E03F00C03E01C07C03C0FFFFC0FFFFC0>19 20 1 0 23]122 dc dfe /ft df[<60F0F868080808101020C0>5 11 3 -15 11]39 dc[<00800100 020004000C00080018003000300030006000600060006000E000E000E000E000E000E000E000E0 00E000E0006000600060006000300030003000180008000C000400020001000080>9 38 3 10 15]40 dc[<8000400020001000180008000C000600060006000300030003000300038003800380 038003800380038003800380038003000300030003000600060006000C00080018001000200040 008000>9 38 2 10 15]41 dc[<60F0F07010101020204080>4 11 3 7 11]44 dc[<60F0F060> 4 4 3 0 11]46 dc[<0004000C00180018001800300030003000600060006000C000C000C00180 018001800300030003000600060006000C000C000C001800180018003000300030006000600060 00C000C000>14 37 2 9 19]47 dc[<078018603030303060186018E01CE01CE01CE01CE01CE0 1CE01CE01CE01CE01CE01CE01C601860187038303018600780>14 24 2 0 19]48 dc[<030007 00FF00070007000700070007000700070007000700070007000700070007000700070007000700 07000700FFF0>12 24 3 0 19]49 dc[<0F80106020304038803CC01CE01C401C003C00380038 0070006000C001800100020004040804100430083FF87FF8FFF8>14 24 2 0 19]50 dc[<0F80 10E02070607870382038007800700070006000C00F8000E000700038003C003CE03CE03CC03C40 38407030E00F80>14 24 2 0 19]51 dc[<00300030007000F000F001700370027004700C7008 701070307020704070C070FFFF00700070007000700070007007FF>16 24 1 0 19]52 dc[<30 183FF03FE03FC02000200020002000200027C03860203000380018001C001C401CE01CE01C8018 4038403030E00F80>14 24 2 0 19]53 dc[<01E006100C1818383038300070006000E000E7C0 E860F030F018E018E01CE01CE01C601C601C701830183030186007C0>14 24 2 0 19]54 dc[< FFFF000E01C00E00E00E00700E00780E00780E00780E00780E00780E00F00E00E00E03C00FFF80 0E01E00E00700E00780E003C0E003C0E003C0E003C0E003C0E00380E00780E00F00E01E0FFFF80 >22 26 2 0 27]66 dc[24 26 2 0 29]68 dc[20 26 2 0 25]70 dc[19 26 2 0 24]76 dc[30 26 2 0 35] 77 dc[24 26 2 0 29]78 dc[21 26 2 0 26]80 dc[<0FC21836200E6006C006C002C0 02C002E00070007E003FE01FF807FC003E000E00070003800380038003C002C006E004D81887E0 >16 26 2 0 21]83 dc[<7FFFFF00701C0700401C0100401C0100C01C0180801C0080801C0080 801C0080001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C00 00001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C000003FFE000>25 26 1 0 28]84 dc[24 26 2 0 29]85 dc[7 37 3 9 11]91 dc[7 37 0 9 11]93 dc[<3F8070 C070E020700070007007F01C7030707070E070E071E071E0F171FB1E3C>16 16 2 0 19]97 dc[ 18 26 1 0 21]98 dc[<07F80C1C381C30087000E000E000E000E000E000E0007000300438 080C1807E0>14 16 1 0 17]99 dc[<007E00000E00000E00000E00000E00000E00000E00000E 00000E00000E0003CE000C3E00380E00300E00700E00E00E00E00E00E00E00E00E00E00E00E00E 00600E00700E00381E001C2E0007CFC0>18 26 1 0 21]100 dc[<07C01C3030187018600CE00C FFFCE000E000E000E0006000300438080C1807E0>14 16 1 0 17]101 dc[<01F0031807380E10 0E000E000E000E000E000E00FFC00E000E000E000E000E000E000E000E000E000E000E000E000E 000E007FE0>13 26 0 0 12]102 dc[<0FCE187330307038703870387038303018602FC0200060 0070003FF03FFC1FFE600FC003C003C003C0036006381C07E0>16 24 1 8 19]103 dc[18 26 1 0 21]104 dc[<18003C003C001800000000000000000000000000FC001C001C001C001C001C 001C001C001C001C001C001C001C001C001C00FF80>9 26 0 0 10]105 dc[18 26 1 0 20] 107 dc[9 26 0 0 10]108 dc[29 16 1 0 32]109 dc[18 16 1 0 21]110 dc[<07E01C38300C700E6006E007E007E007E007E007E0076006700E381C1C3807E0> 16 16 1 0 19]111 dc[18 23 1 7 21]112 dc[<03C2000C2600381E00300E00700E00E00E00E00E00E00E00E00E 00E00E00E00E00700E00700E00381E001C2E0007CE00000E00000E00000E00000E00000E00000E 00007FC0>18 23 1 7 20]113 dc[12 16 1 0 15]114 dc[<1F2060E04020C020C020F0007F003FC01FE000F0 80708030C030C020F0408F80>12 16 1 0 15]115 dc[<0400040004000C000C001C003C00FFC0 1C001C001C001C001C001C001C001C001C201C201C201C201C200E400380>11 23 1 0 15]116 dc[18 16 1 0 21]117 dc[17 16 1 0 20] 118 dc[25 16 1 0 28]119 dc [18 16 1 0 20]120 dc[17 23 1 7 20]121 dc[<7FF86070407040E041C041C003800700 07000E081C081C08381070107030FFF0>13 16 1 0 17]122 dc[18 1 0 -9 19]123 dc dfe /fu df[<07E00C301878307870306000E000E000E000E000E000E00060007004300418 080C3007C0>14 18 2 0 18]99 dc[20 18 1 0 23] 110 dc[<03F0000E1C00180600300300700380600180E001C0E001C0E001C0E001C0E001C0E001 C06001807003803003001806000E1C0003F000>18 18 1 0 21]111 dc[19 26 1 8 23]112 dc[<03C1000C3300180B00300F00700700700700E00700E00700E00700E00700E00700E0070060 0700700700300F00180F000C370007C70000070000070000070000070000070000070000070000 3FE0>19 26 2 8 22]113 dc[13 18 1 0 16]114 dc[20 18 1 0 23]117 dc dfe /fv df[<001F83E000F06E3001C078780380F8780300F030070070000700 70000700700007007000070070000700700007007000FFFFFF8007007000070070000700700007 007000070070000700700007007000070070000700700007007000070070000700700007007000 07007000070070000700700007007000070070007FE3FF00>29 32 0 0 27]11 dc[<003F0000 E0C001C0C00381E00701E00701E0070000070000070000070000070000070000FFFFE00700E007 00E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E007 00E00700E00700E00700E07FC3FE>23 32 0 0 25]12 dc[<003FE000E0E001C1E00381E00700 E00700E00700E00700E00700E00700E00700E00700E0FFFFE00700E00700E00700E00700E00700 E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700 E07FE7FE>23 32 0 0 25]13 dc[<001F81F80000F04F040001C07C06000380F80F000300F00F 000700F00F00070070000007007000000700700000070070000007007000000700700000FFFFFF FF0007007007000700700700070070070007007007000700700700070070070007007007000700 700700070070070007007007000700700700070070070007007007000700700700070070070007 00700700070070070007007007007FE3FE3FF0>36 32 0 0 38]14 dc[<0F0000301880003030 600060703001C0602C06C06013F980E0100300E0100300E0100600E0100C00E0100C00E0101800 6010300060203000702060003040C0001880C0000F018000000300E00003031000060608000606 04000C0C0400180C0400181C0200301C0200601C0200601C0200C01C0201801C0201801C020300 0C0406000C04060006040C00060818000310080000E0>31 37 3 3 38]37 dc[<70F8FCFC7404 0404080810102040>6 14 4 -18 13]39 dc[<0020004000800100020006000C000C0018001800 3000300030007000600060006000E000E000E000E000E000E000E000E000E000E000E000E00060 00600060007000300030003000180018000C000C00060002000100008000400020>11 46 3 12 18]40 dc[<800040002000100008000C00060006000300030001800180018001C000C000C000C0 00E000E000E000E000E000E000E000E000E000E000E000E000C000C000C001C001800180018003 000300060006000C0008001000200040008000>11 46 3 12 18]41 dc[<000600000006000000 060000000600000006000000060000000600000006000000060000000600000006000000060000 000600000006000000060000FFFFFFF0FFFFFFF000060000000600000006000000060000000600 000006000000060000000600000006000000060000000600000006000000060000000600000006 0000>28 32 3 5 35]43 dc[<70F8FCFC74040404080810102040>6 14 4 9 13]44 dc[10 2 1 -9 15]45 dc[<70F8F8F870>5 5 4 0 13]46 dc[<000100030003000600060006 000C000C000C00180018001800300030003000600060006000C000C000C0018001800180030003 0003000600060006000C000C000C00180018001800300030003000600060006000C000C000C000 >16 45 3 11 23]47 dc[<03F0000E1C001C0E00180600380700700380700380700380700380F0 03C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C070 03807003807003807807803807001806001C0E000E1C0003F000>18 31 2 1 23]48 dc[<0180 03800F80F380038003800380038003800380038003800380038003800380038003800380038003 80038003800380038003800380038007C0FFFE>15 30 4 0 23]49 dc[<03F0000C1C00100E00 200700400780800780F007C0F803C0F803C0F803C02007C00007C0000780000780000F00000E00 001C0000380000700000600000C0000180000300000600400C00401800401000803FFF807FFF80 FFFF80>18 30 2 0 23]50 dc[<03F0000C1C00100E00200F00780F80780780780780380F8000 0F80000F00000F00000E00001C0000380003F000003C00000E00000F000007800007800007C020 07C0F807C0F807C0F807C0F00780400780400F00200E001C3C0003F000>18 31 2 1 23]51 dc[ <000600000600000E00000E00001E00002E00002E00004E00008E00008E00010E00020E00020E 00040E00080E00080E00100E00200E00200E00400E00C00E00FFFFF0000E00000E00000E00000E 00000E00000E00000E0000FFE0>20 30 1 0 23]52 dc[<1803001FFE001FFC001FF8001FE000 10000010000010000010000010000010000011F000161C00180E00100700100780000380000380 0003C00003C00003C07003C0F003C0F003C0E00380400380400700200600100E000C380003E000 >18 31 2 1 23]53 dc[<007C000182000701000E03800C07801C078038030038000078000070 0000700000F1F000F21C00F40600F80700F80380F80380F003C0F003C0F003C0F003C0F003C070 03C07003C07003803803803807001807000C0E00061C0001F000>18 31 2 1 23]54 dc[<4000 007FFFC07FFF807FFF804001008002008002008004000008000008000010000020000020000040 0000400000C00000C00001C0000180000380000380000380000380000780000780000780000780 00078000078000078000030000>18 31 3 1 23]55 dc[<03F0000C0C00100600300300200180 6001806001806001807001807803003E03003F06001FC8000FF00003F80007FC000C7E00103F00 300F806003804001C0C001C0C000C0C000C0C000C0C000806001802001001002000C0C0003F000 >18 31 2 1 23]56 dc[<03F0000E18001C0C00380600380700700700700380F00380F00380F0 03C0F003C0F003C0F003C0F003C07007C07007C03807C0180BC00E13C003E3C000038000038000 0380000700300700780600780E00700C002018001070000FC000>18 31 2 1 23]57 dc[<70F8 F8F8700000000000000000000070F8F8F870>5 20 4 0 13]58 dc[<70F8F8F870000000000000 0000000070F0F8F878080808101010202040>5 29 4 9 13]59 dc[<7FFFFFE0FFFFFFF0000000 0000000000000000000000000000000000000000000000000000000000FFFFFFF07FFFFFE0>28 12 3 -5 35]61 dc[<000100000003800000038000000380000007C0000007C0000007C0000009 E0000009E0000009E0000010F0000010F0000010F00000207800002078000020780000403C0000 403C0000403C0000801E0000801E0000FFFE0001000F0001000F0001000F000200078002000780 02000780040003C00E0003C01F0007E0FFC03FFE>31 32 1 0 34]65 dc[ 26 31 2 0 32]66 dc[<000FC040007030C001C009C0038005C0070003C00E0001C01E0000C01C 0000C03C0000C07C0000407C00004078000040F8000000F8000000F8000000F8000000F8000000 F8000000F8000000F8000000F8000000780000007C0000407C0000403C0000401C0000401E0000 800E000080070001000380020001C0040000703800000FC000>26 33 3 1 33]67 dc[29 31 2 0 35]68 dc[27 31 2 0 31]69 dc[25 31 2 0 30]70 dc[29 31 2 0 34]72 dc[14 31 1 0 16]73 dc[23 31 2 0 28]76 dc[37 31 2 0 42]77 dc[29 31 2 0 34]78 dc[ <001F800000F0F00001C0380007801E000F000F000E0007001E0007803C0003C03C0003C07C00 03E0780001E0780001E0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F8 0001F0F80001F0780001E07C0003E07C0003E03C0003C03C0003C01E0007800E0007000F000F00 07801E0001C0380000F0F000001F8000>28 33 3 1 35]79 dc[25 31 2 0 31]80 dc[<001F800000F0F00001C0380007801E000F000F000E0007001E0007803C0003C03C00 03C07C0003E07C0003E0780001E0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F8 0001F0F80001F0F80001F0780001E0780001E07C0003E03C0003C03C0F03C01E1087800E204700 0F204F0007A03E0001E0380000F0F010001FB01000003010000038300000387000003FF000001F E000001FE000000FC000000780>28 41 3 9 35]81 dc[30 32 2 1 33]82 dc[<07E0800C1980100780300380600180600180E00180E00080E00080E00080F00000 F000007800007F00003FF0001FFC000FFE0003FF00001F800007800003C00003C00001C08001C0 8001C08001C08001C0C00180C00380E00300F00600CE0C0081F800>18 33 3 1 25]83 dc[<7F FFFFE0780F01E0600F0060400F0020400F0020C00F0030800F0010800F0010800F0010800F0010 000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F00 00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000001F 800007FFFE00>28 31 2 0 33]84 dc[29 32 2 1 34]85 dc[< FFF07FF81FF01F800FC007C00F00078003800F00078001000F0007C00100078007C00200078007 C00200078007C0020003C009E0040003C009E0040003C009E0040003E010F00C0001E010F00800 01E010F0080001F02078080000F02078100000F02078100000F0403C10000078403C2000007840 3C20000078C03E2000003C801E4000003C801E4000003C801E4000001F000F8000001F000F8000 001F000F8000001E00078000000E00070000000E00070000000C00030000000400020000>44 32 1 1 47]87 dc[7 45 4 11 13]91 dc[7 45 1 11 13]93 dc[<081020204040808080B8FCFC7C38>6 14 3 -18 13]96 dc[<1FE000303000781800781C00 300E00000E00000E00000E0000FE00078E001E0E00380E00780E00F00E10F00E10F00E10F01E10 781E103867200F83C0>20 20 2 0 23]97 dc[<0E0000FE00000E00000E00000E00000E00000E 00000E00000E00000E00000E00000E00000E3E000EC3800F01C00F00E00E00E00E00700E00700E 00780E00780E00780E00780E00780E00780E00700E00700E00E00F00E00D01C00CC300083E00> 21 32 1 0 25]98 dc[<03F80E0C1C1E381E380C70007000F000F000F000F000F000F000700070 00380138011C020E0C03F0>16 20 2 0 20]99 dc[<000380003F800003800003800003800003 8000038000038000038000038000038000038003E380061B801C07803803803803807003807003 80F00380F00380F00380F00380F00380F003807003807003803803803807801C07800E1B8003E3 F8>21 32 2 0 25]100 dc[<03F0000E1C001C0E00380700380700700700700380F00380F00380 FFFF80F00000F00000F000007000007000003800801800800C010007060001F800>17 20 1 0 20]101 dc[<007C00C6018F038F07060700070007000700070007000700FFF007000700070007 00070007000700070007000700070007000700070007000700070007007FF0>16 32 0 0 14] 102 dc[<0000E003E3300E3C301C1C30380E00780F00780F00780F00780F00780F00380E001C1C 001E380033E0002000002000003000003000003FFE001FFF800FFFC03001E0600070C00030C000 30C00030C000306000603000C01C038003FC00>20 31 1 10 23]103 dc[<0E0000FE00000E00 000E00000E00000E00000E00000E00000E00000E00000E00000E00000E3E000E43000E81800F01 C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 C00E01C00E01C0FFE7FC>22 32 1 0 25]104 dc[<1C001E003E001E001C000000000000000000 000000000E007E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E 000E00FFC0>10 31 0 0 12]105 dc[<00E001F001F001F000E000000000000000000000000000 7007F000F000700070007000700070007000700070007000700070007000700070007000700070 00700070007000706070F060F0C061803F00>12 40 -2 9 14]106 dc[<0E0000FE00000E0000 0E00000E00000E00000E00000E00000E00000E00000E00000E00000E0FF00E03C00E03000E0200 0E04000E08000E10000E30000E70000EF8000F38000E1C000E1E000E0E000E07000E07800E0380 0E03C00E03E0FFCFF8>21 32 1 0 24]107 dc[<0E00FE000E000E000E000E000E000E000E000E 000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 0E000E00FFE0>11 32 0 0 12]108 dc[<0E1F01F000FE618618000E81C81C000F00F00E000F00 F00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E 00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E00FFE7FE7FE0 >35 20 1 0 38]109 dc[<0E3E00FE43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E 01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC>22 20 1 0 25] 110 dc[<01F800070E001C03803801C03801C07000E07000E0F000F0F000F0F000F0F000F0F000 F0F000F07000E07000E03801C03801C01C0380070E0001F800>20 20 1 0 23]111 dc[<0E3E00 FEC3800F01C00F00E00E00E00E00F00E00700E00780E00780E00780E00780E00780E00780E0070 0E00F00E00E00F01E00F01C00EC3000E3E000E00000E00000E00000E00000E00000E00000E0000 0E0000FFE000>21 29 1 9 25]112 dc[<03E0800619801C05803C0780380380780380700380F0 0380F00380F00380F00380F00380F003807003807803803803803807801C0B800E138003E38000 0380000380000380000380000380000380000380000380003FF8>21 29 2 9 24]113 dc[<0E78 FE8C0F1E0F1E0F0C0E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE0> 15 20 1 0 18]114 dc[<1F9030704030C010C010C010E00078007F803FE00FF0007080388018 8018C018C018E030D0608F80>13 20 2 0 18]115 dc[<020002000200060006000E000E003E00 FFF80E000E000E000E000E000E000E000E000E000E000E000E080E080E080E080E080610031001 E0>13 28 1 0 18]116 dc[<0E01C0FE1FC00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E03C00603C0030DC001F1FC>22 20 1 0 25]117 dc[21 20 1 0 24]118 dc[30 20 1 0 33]119 dc[<7FC3FC0F01E00701C007018003810001C20000E40000EC00007800 003800003C00007C00004E000087000107000303800201C00601E01E01E0FF07FE>23 20 0 0 24]120 dc[21 29 1 9 24]121 dc[<3FFF380E200E201C4038407840 7000E001E001C00380078007010E011E011C0338027006700EFFFE>16 20 1 0 20]122 dc[22 1 0 -12 23]123 dc dfe end TeXDict begin @letter %%Page: 10 21 bop 0 50 a fn(CHAPTER)15 b(2.)35 b(TIMESHARING)16 b(AND)f(THE)g(MA)o(CH)g (SCHEDULER)564 b fv(10)-196 2471 y fi(')-196 2567 y 2 14 v 84 x(&)-16 2471 y ($)-16 2567 y 2 14 v 84 x(%)-262 b 14 2 v -180 x 14 2 v -150 2575 a fs(W)o (O)-196 371 y fi(')-196 467 y 2 14 v 84 x(&)-16 371 y($)-16 467 y 2 14 v 84 x (%)g 14 2 v -180 x 14 2 v -162 475 a fs(WSO)1904 371 y fi(')1904 467 y 2 14 v 84 x(&)2084 371 y($)2084 467 y 2 14 v 84 x(%)g 14 2 v -180 x 14 2 v 1962 475 a fs(SO)1726 630 y fh(\021)1685 658 y(\021)1643 685 y(\021)1621 700 y(\021)-42 b (+)1768 602 y(\021)1809 575 y(\021)1851 547 y(\021)1872 532 y(\021)g(3)1904 2471 y fi(')1904 2567 y 2 14 v 84 x(&)2084 2471 y($)2084 2567 y 2 14 v 84 x (%)-262 b 14 2 v -180 x 14 2 v 1959 2575 a fs(R)o(O)1872 2515 y fh(Q)1831 2487 y(Q)1789 2459 y(Q)1748 2432 y(Q)1706 2404 y(Q)1665 2376 y(Q)1623 2349 y(Q) 1621 2347 y(Q)-42 b(k)-106 1510 y 2 960 v -105 591 a(6)-106 2470 y 2 960 v 1 w (?)-15 2561 y 1920 2 v 1863 2560 a(-)1994 2470 y 2 1920 v 1 w(?)-15 461 y 1920 2 v 1863 460 a(-)104 2171 y fi(')104 2267 y 2 14 v 84 x(&)284 2171 y($)284 2267 y 2 14 v 84 x(%)-262 b 14 2 v -180 x 14 2 v 168 2275 a fs(W)86 2369 y fh (\000)44 2410 y(\000)3 2452 y(\000)-38 2492 y(\000)-42 b(\011)285 2261 y 1170 2 v 1413 2260 a(-)104 671 y fi(')104 767 y 2 14 v 84 x(&)284 671 y($)284 767 y 2 14 v 84 x(%)-262 b 14 2 v -180 x 14 2 v 156 775 a fs(WS)86 692 y fh(@)44 651 y(@)3 609 y(@)-38 569 y(@)-42 b(I)285 761 y 1170 2 v 1413 760 a(-)277 806 y (X)281 807 y(X)337 821 y(X)341 822 y(X)397 836 y(X)401 837 y(X)457 851 y(X) 461 852 y(X)517 866 y(X)521 867 y(X)577 881 y(X)581 882 y(X)637 896 y(X)641 897 y(X)697 911 y(X)701 912 y(X)757 926 y(X)761 927 y(X)803 974 y 2 45 v 60 x 2 45 v 60 x 2 45 v 60 x 2 45 v 60 x 2 45 v 60 x 2 45 v 60 x 2 45 v 60 x 2 45 v 804 1403 a(X)807 1404 y(X)864 1418 y(X)867 1419 y(X)924 1433 y(X)927 1434 y (X)984 1448 y(X)987 1449 y(X)1044 1463 y(X)1047 1464 y(X)1104 1478 y(X)1107 1479 y(X)1164 1493 y(X)1167 1494 y(X)1185 1499 y(X)j(X)d(z)1454 2171 y fi(') 1454 2267 y 2 14 v 84 x(&)1634 2171 y($)1634 2267 y 2 14 v 84 x(%)-262 b 14 2 v -180 x 14 2 v 1527 2260 a fs(R)1506 2290 y fu(runq)1454 671 y fi(')1454 767 y 2 14 v 84 x(&)1634 671 y($)1634 767 y 2 14 v 84 x(%)g 14 2 v -180 x 14 2 v 1530 775 a fs(S)1544 2170 y 2 1320 v 1 w fh(?)194 1510 y 2 660 v 195 891 a (6)194 2170 y 2 660 v 1 w(?)404 1871 y fi(')404 1967 y 2 14 v 84 x(&)584 1871 y($)584 1967 y 2 14 v 84 x(%)g 14 2 v -180 x 14 2 v 456 1960 a fs(R)-6 b(W) 456 1990 y fu(pro)q(c)386 2069 y fh(\000)344 2110 y(\000)303 2152 y(\000)262 2192 y(\000)-42 b(\011)404 971 y fi(')404 1067 y 2 14 v 84 x(&)584 971 y($) 584 1067 y 2 14 v 84 x(%)-262 b 14 2 v -180 x 14 2 v 438 1060 a fs(R)-6 b(WS) 456 1090 y fu(pro)q(c)386 992 y fh(@)344 951 y(@)303 909 y(@)262 869 y(@)-42 b (I)1004 1871 y fi(')1004 1967 y 2 14 v 84 x(&)1184 1871 y($)1184 1967 y 2 14 v 84 x(%)-262 b 14 2 v -180 x 14 2 v 1077 1960 a fs(R)1053 1990 y fu(pro)q(c) 1268 2125 y fh(Q)1226 2098 y(Q)1185 2070 y(Q)1162 2055 y(Q)-42 b(k)1309 2153 y (Q)1351 2181 y(Q)1393 2208 y(Q)1415 2223 y(Q)g(s)1004 971 y fi(')1004 1067 y 2 14 v 84 x(&)1184 971 y($)1184 1067 y 2 14 v 84 x(%)-262 b 14 2 v -180 x 14 2 v 1062 1060 a fs(RS)1056 1090 y fu(pro)q(c)1162 992 y fh(\021)1204 965 y(\021) 1246 937 y(\021)1287 909 y(\021)1329 882 y(\021)1370 854 y(\021)1412 826 y (\021)1415 824 y(\021)-42 b(3)494 1510 y 2 360 v 495 1191 a(6)494 1870 y 2 360 v 1 w(?)795 1961 y 210 2 v 963 1960 a(-)585 1961 y 210 2 v -1 x(\033)1094 1510 y 2 360 v 1095 1191 a(6)1094 1870 y 2 360 v 1 w(?)795 1061 y 210 2 v 963 1060 a(-)585 1061 y 210 2 v -1 x(\033)1229 1421 y fi(')1229 1517 y 2 14 v 84 x(&) 1409 1421 y($)1409 1517 y 2 14 v 84 x(%)-262 b 14 2 v -180 x 14 2 v 1290 1510 a fs(RS)1278 1540 y fu(runq)1248 1429 y fh(A)1227 1387 y(A)1207 1346 y(A)1186 1304 y(A)1165 1263 y(A)1144 1221 y(A)1128 1188 y(A)-21 b(K)1320 1420 y(\002) 1334 1378 y(\002)1348 1337 y(\002)1362 1295 y(\002)1375 1254 y(\002)1389 1212 y(\002)1403 1171 y(\002)1417 1129 y(\002)1431 1088 y(\002)1445 1046 y(\002) 1458 1005 y(\002)1472 963 y(\002)1486 922 y(\002)1497 888 y(\002)-14 b(\016) 1634 1421 y fi(')1634 1517 y 2 14 v 84 x(&)1814 1421 y($)1814 1517 y 2 14 v 84 x(%)-262 b 14 2 v -180 x 14 2 v 1674 1525 a fs(RSO)1410 1511 y 225 2 v -1 x fh (\033)1725 1420 y(\003)1735 1378 y(\003)1746 1337 y(\003)1756 1295 y(\003) 1767 1254 y(\003)1777 1212 y(\003)1787 1171 y(\003)1798 1129 y(\003)1808 1088 y(\003)1818 1046 y(\003)1829 1005 y(\003)1839 963 y(\003)1850 922 y(\003)1860 880 y(\003)1870 839 y(\003)1881 797 y(\003)1891 756 y(\003)1901 714 y(\003) 1912 673 y(\003)1922 631 y(\003)1933 590 y(\003)1935 579 y(\003)-10 b(\027) 1402 1886 y(B)1388 1845 y(B)1374 1803 y(B)1360 1762 y(B)1346 1720 y(B)1332 1679 y(B)1320 1642 y(B)c(M)1415 1928 y(B)1429 1969 y(B)1443 2011 y(B)1457 2052 y(B)1471 2094 y(B)1485 2135 y(B)1497 2173 y(B)g(N)1825 2041 y(C)1815 1999 y (C)1804 1958 y(C)1794 1916 y(C)1784 1875 y(C)1773 1833 y(C)1763 1792 y(C)1752 1750 y(C)1742 1709 y(C)1732 1667 y(C)1725 1642 y(C)k(O)1835 2082 y(C)1846 2124 y(C)1856 2165 y(C)1867 2207 y(C)1877 2248 y(C)1887 2290 y(C)1898 2331 y(C) 1908 2373 y(C)1918 2414 y(C)1929 2456 y(C)1935 2482 y(C)g(W)-90 610 y ft(hold) 105 910 y(hold)510 1210 y(hold)424 b(hold)1350 1645 y(hold)334 b(hold)0 550 y (sw)o(ap)q(out)1695 535 y(sw)o(ap)q(out)0 2500 y(sw)o(ap)q(out)75 595 y fi (i)61 610 y ft(N)75 2440 y fi(i)61 2455 y ft(N)1305 685 y fi(i)1291 700 y ft (N)1455 880 y fi(i)1441 895 y ft(N)-90 2380 y(release)210 2080 y(release)510 1840 y(release)325 b(release)1560 2140 y(release)1365 2125 y(release)2010 2440 y(release)1800 2410 y(release)240 925 y(blo)r(c)o(k)300 2200 y(blo)r(c)o(k) 1314 2224 y(blo)r(c)o(k)1290 835 y(blo)r(c)o(k)1635 445 y(w)o(ak)o(eup/clear) 1185 745 y(w)o(ak)o(eup/clear)840 1045 y(w)o(ak)o(eup)855 1105 y(clear)840 1945 y(w)o(ak)o(eup)855 2005 y(clear)1185 2305 y(w)o(ak)o(eup/clear)1635 2545 y(w)o(ak)o(eup/clear)645 880 y(w)o(ak)o(eup)660 940 y(clear)1170 1210 y(c)o (ho)r(ose)1215 2050 y(c)o(ho)r(ose)615 1045 y(assert)615 1945 y(assert)1656 715 y(sw)o(apin)1419 1495 y(sw)o(apin)1656 2335 y(sw)o(apin)1794 640 y(do)o (w)o(ait)1350 940 y(do)o(w)o(ait)608 2658 y fv(Figure)16 b(2.1:)j(Sc)o(hedule\ r)e(State)d(Diagram)p eop %%Page: 11 22 bop 0 50 a fn(CHAPTER)15 b(2.)35 b(TIMESHARING)16 b(AND)f(THE)g(MA)o(CH)g (SCHEDULER)564 b fv(11)231 378 y 1485 2 v 230 434 a 2 57 v 256 417 a(State) 515 434 y 2 57 v 541 417 a(Description)1715 434 y 2 57 v 231 436 a 1485 2 v 10 x 1485 2 v 230 502 a 2 57 v 256 486 a fs(R-pro)r(c)515 502 y 2 57 v 541 486 a fv(Running)17 b(on)e(a)g(pro)q(cessor.)1715 502 y 2 57 v 231 504 a 1485 2 v 230 561 a 2 57 v 256 544 a fs(RS-pro)r(c)515 561 y 2 57 v 541 544 a fv(Runnin\ g)i(on)e(a)g(pro)q(cessor,)g(susp)q(end)h(p)r(ending.)1715 561 y 2 57 v 231 562 a 1485 2 v 230 619 a 2 57 v 256 602 a fs(R)-6 b(W-pro)r(c)515 619 y 2 57 v 541 602 a fv(Running)17 b(on)e(a)g(pro)q(cessor,)g(ev)o(en)o(t)g(w)n(ait)g (p)r(ending.)1715 619 y 2 57 v 231 620 a 1485 2 v 230 677 a 2 57 v 256 660 a fs(R)-6 b(WS-pro)r(c)515 677 y 2 57 v 541 660 a fv(Running)17 b(on)e(a)g(pro) q(cessor,)g(susp)q(end)h(and)g(ev)o(en)o(t)f(w)n(ait)g(p)r(ending.)1715 677 y 2 57 v 231 678 a 1485 2 v 230 735 a 2 57 v 256 718 a fs(R-runq)515 735 y 2 57 v 541 718 a fv(Queued)i(to)d(run.)1715 735 y 2 57 v 231 737 a 1485 2 v 230 793 a 2 57 v 256 776 a fs(RS-runq)515 793 y 2 57 v 541 776 a fv(Queued)j(to)d(run\ ,)h(susp)r(end)h(p)q(ending.)1715 793 y 2 57 v 231 795 a 1485 2 v 230 851 a 2 57 v 256 834 a fs(S)515 851 y 2 57 v 541 834 a fv(Susp)r(ended.)1715 851 y 2 57 v 231 853 a 1485 2 v 230 909 a 2 57 v 256 892 a fs(W)515 909 y 2 57 v 541 892 a fv(W)l(aiting)g(for)e(an)i(ev)o(en)o(t.)1715 909 y 2 57 v 231 911 a 1485 2 v 230 967 a 2 57 v 256 950 a fs(WS)515 967 y 2 57 v 541 950 a fv(W)l(aiting) g(for)e(an)i(ev)o(en)o(t)f(and)g(susp)r(ended)h(if)g(in)o(terruptible.)1715 967 y 2 57 v 230 1024 a 2 57 v 285 w 2 57 v 631 1007 a(W)l(aiting)g(with)g (susp)q(end)g(p)r(ending)g(if)g(not)f(in)o(terruptible.)1715 1024 y 2 57 v 231 1026 a 1485 2 v 230 1082 a 2 57 v 256 1065 a fs(R)o(O)515 1082 y 2 57 v 541 1065 a fv(Sw)o(app)q(ed)h(out)f(with)g(p)r(ending)h(sw)o(apin.)1715 1082 y 2 57 v 231 1084 a 1485 2 v 230 1140 a 2 57 v 256 1123 a fs(RSO)515 1140 y 2 57 v 541 1123 a fv(Sw)o(app)q(ed)g(out)f(with)g(p)r(ending)h(susp)r(end)g(and)f (sw)o(apin.)1715 1140 y 2 57 v 231 1142 a 1485 2 v 230 1198 a 2 57 v 256 1181 a fs(SO)515 1198 y 2 57 v 541 1181 a fv(Susp)r(ended)h(and)g(sw)n(app)r(ed)f (out.)1715 1198 y 2 57 v 231 1200 a 1485 2 v 230 1256 a 2 57 v 256 1239 a fs (W)o(O)515 1256 y 2 57 v 541 1239 a fv(W)l(aiting)h(and)f(sw)o(app)q(ed)h(out\ .)1715 1256 y 2 57 v 231 1258 a 1485 2 v 230 1314 a 2 57 v 256 1298 a fs(WSO) 515 1314 y 2 57 v 541 1298 a fv(W)l(aiting,)g(susp)q(ended,)g(and)f(sw)o(app) q(ed)h(out.)1715 1314 y 2 57 v 231 1316 a 1485 2 v 702 1393 a(T)l(able)g(2.1:) j(Sc)o(heduler)e(States)88 1874 y 1772 2 v 87 1930 a 2 57 v 113 1913 a(Lab)q (el)301 1930 y 2 57 v 327 1913 a(Routine)707 1930 y 2 57 v 733 1913 a(Descrip\ tion)1858 1930 y 2 57 v 88 1932 a 1772 2 v 10 x 1772 2 v 87 1998 a 2 57 v 113 1981 a(assert)301 1998 y 2 57 v 327 1981 a fs(assert)r 16 2 v 16 w(w)n(ait) 707 1998 y 2 57 v 733 1981 a fv(Declare)f(ev)o(en)o(t)f(to)f(b)r(e)h(w)o(aite\ d)g(for)1858 1998 y 2 57 v 88 2000 a 1772 2 v 87 2056 a 2 57 v 113 2039 a(w)n (ak)o(eup)301 2056 y 2 57 v 327 2039 a fs(thread)s 16 2 v 16 w(w)n(ak)o(eup) 707 2056 y 2 57 v 733 2039 a fv(W)l(ak)o(eup)g(threads)g(w)o(aiting)h(for)e (an)h(ev)o(ent)1858 2056 y 2 57 v 88 2058 a 1772 2 v 87 2114 a 2 57 v 113 2097 a(clear)301 2114 y 2 57 v 327 2097 a fs(clear)t 16 2 v 15 w(w)o(ait)707 2114 y 2 57 v 733 2097 a fv(W)l(ak)o(eup)g(a)g(sp)r(eci\014c)h(thread)1858 2114 y 2 57 v 88 2116 a 1772 2 v 87 2172 a 2 57 v 113 2156 a(hold)301 2172 y 2 57 v 327 2156 a fs(thread)s 16 2 v 16 w(hold)707 2172 y 2 57 v 733 2156 a fv(Hold)g (thread)f(in)h(susp)r(ended)g(state)1858 2172 y 2 57 v 88 2174 a 1772 2 v 87 2231 a 2 57 v 113 2214 a(release)301 2231 y 2 57 v 327 2214 a fs(thread)s 16 2 v 16 w(release)707 2231 y 2 57 v 733 2214 a fv(Release)h(one)e(hold)h(on)f (thread)1858 2231 y 2 57 v 88 2232 a 1772 2 v 87 2289 a 2 57 v 113 2272 a(do) n(w)o(ait)301 2289 y 2 57 v 327 2272 a fs(thread)s 16 2 v 16 w(do)o(w)n(ait) 707 2289 y 2 57 v 733 2272 a fv(Synchronize)h(with)f(p)r(ending)h(susp)r(end) 1858 2289 y 2 57 v 88 2290 a 1772 2 v 87 2347 a 2 57 v 113 2330 a(blo)r(c)o (k)301 2347 y 2 57 v 327 2330 a fs(thread)s 16 2 v 16 w(blo)r(c)o(k)707 2347 y 2 57 v 733 2330 a fv(Con)o(text)e(switc)o(h,)h(p)r(ending)h(susp)r(ends)g(and) f(w)o(aits)g(tak)n(e)g(e\013ect)1858 2347 y 2 57 v 88 2348 a 1772 2 v 87 2405 a 2 57 v 113 2388 a(c)o(ho)q(ose)301 2405 y 2 57 v 327 2388 a fs(c)o(ho)q(ose) s 16 2 v 16 w(thread)707 2405 y 2 57 v 733 2388 a fv(Select)h(new)g(thread)f (to)g(run)1858 2405 y 2 57 v 88 2407 a 1772 2 v 87 2463 a 2 57 v 113 2446 a (sw)n(ap)q(out)301 2463 y 2 57 v 327 2446 a fs(thread)s 16 2 v 16 w(sw)n(ap)r (out)707 2463 y 2 57 v 733 2446 a fv(Mak)n(e)h(k)n(ernel)h(stac)n(k)e(eligibl\ e)j(for)d(pageout)1858 2463 y 2 57 v 88 2465 a 1772 2 v 87 2521 a 2 57 v 113 2504 a(sw)n(apin)301 2521 y 2 57 v 327 2504 a fs(thread)s 16 2 v 16 w(sw)n (apin)707 2521 y 2 57 v 733 2504 a fv(Mak)n(e)h(k)n(ernel)h(stac)n(k)e(inelig\ ibl)q(e)j(for)d(pageout)1858 2521 y 2 57 v 88 2523 a 1772 2 v 652 2600 a(T)l (able)h(2.2:)j(Sc)o(heduler)e(T)l(ransitions)p eop %%Page: 12 23 bop 0 50 a fn(CHAPTER)15 b(2.)35 b(TIMESHARING)16 b(AND)f(THE)g(MA)o(CH)g (SCHEDULER)564 b fv(12)0 195 y(\014rst\).)18 b(There)13 b(ma)n(y)f(b)r(e)g (m)o(ultiple)i(o)o(v)n(erlapping)g(reasons)e(to)g(prev)o(en)o(t)g(a)g(thread) g(from)f(executing,)j(so)e(this)g(mec)o(h-)0 252 y(anism)j(emplo)o(ys)g(a)f (susp)r(end)h(coun)o(t;)f fs(thread)s 16 2 v 16 w(hold)h fv(\(`hold'\))f(incr\ ements)g(the)h(coun)o(t,)f(and)h fs(thread)s 16 2 v 16 w(release)0 308 y fv (\(`release'\))h(decrements)h(it.)26 b(The)17 b(`hold')g(transitions)h(in)g (the)f(\014gure)g(o)q(ccur)h(when)f(the)g(count)f(b)r(ecomes)h(one,)0 364 y (and)c(the)g(release)g(transitions)g(o)q(ccur)g(when)g(it)g(b)r(ecomes)f(zero\ .)19 b(Other)13 b(holds)h(and)f(releases)g(do)f(not)h(cause)g(state)0 421 y (c)o(hanges)f(b)q(ecause)h(only)g(the)f(v)m(alue)h(of)e(the)h(count)f(c)o(han\ ges.)19 b fs(thread)s 16 2 v 16 w(blo)r(c)o(k)12 b fv(\(`blo)q(c)o(k'\))f(cau\ ses)h(the)g(susp)r(ension)0 477 y(to)j(tak)n(e)h(e\013ect.)22 b(If)16 b(one)g (thread)g(is)g(susp)r(ending)h(another,)e fs(thread)s 16 2 v 16 w(do)o(w)n (ait)i fv(\(`do)n(w)o(ait'\))e(is)h(used)h(to)e(sync)o(hro-)0 534 y(nize)22 b (the)e(susp)r(ension.)36 b fs(thread)t 16 2 v 15 w(do)o(w)n(ait)22 b fv(attem\ pts)d(to)h(optimize)h(this)g(sync)o(hronization)h(b)o(y)e(remo)n(ving)h(a)0 590 y(susp)r(ended)14 b(but)g(runnable)h(thread)f(from)e(its)i(run)g(queue,)g (if)h(p)q(ossible)g(\(RS-runq)f fg(\))g fv(S,)g(sw)n(app)r(ed)g(out)f(threads) 0 647 y(undergo)g(the)g(corresp)q(onding)h(RSO)g fg(\))f fv(SO)g(transition\)\ ;)g(if)h(this)f(cannot)f(b)r(e)h(done,)g(it)g(w)o(aits)g(for)f(the)h(thread)f (to)0 703 y(call)19 b fs(thread)s 16 2 v 16 w(blo)r(c)o(k)p fv(.)26 b(The)17 b (corresp)q(onding)i(primitives)e(exp)r(orted)g(b)o(y)g(the)h(k)o(ernel,)g fs (thread)t 16 2 v 15 w(susp)q(end)g fv(and)0 760 y fs(thread)s 16 2 v 16 w(res\ ume)p fv(,)e(op)q(erate)g(on)h(separate)f(thread)h(susp)r(end)g(counts,)f(cal\ led)i(user)f(susp)r(end)h(coun)o(ts,)e(to)g(pre-)0 816 y(v)o(en)o(t)c(user)i (actions)f(from)f(in)o(terfering)i(with)f(the)g(k)o(ernel.)20 b(The)13 b(inte\ rnal)g(susp)q(end)h(coun)o(t)f(is)g(incremented)g(when)0 873 y(the)j(user)h (coun)o(t)f(is)h(incremented)g(to)f(one;)g(corresp)q(ondingly)n(,)g(the)h(int\ ernal)f(susp)r(end)h(coun)o(t)f(is)h(decremented)0 929 y(when)i(the)f(user)g (susp)r(end)h(coun)o(t)f(b)q(ecomes)h(zero.)28 b(Other)19 b(user)f(susp)r(end\ s)h(and)f(resumes)g(do)g(not)g(a\013ect)g(the)0 985 y(internal)d(susp)q(end)h (coun)o(t.)j(Threads)c(are)f(initially)k(created)c(in)i(the)f(susp)q(ended)h (state)e(and)h(m)n(ust)g(b)q(e)g(resumed)0 1042 y(in)h(order)f(to)g(execute.) 71 1098 y(Horizon)o(tal)f(transitions)h(in)h(Figure)f(2.1)e(inv)o(olv)o(e)i (the)g(ev)n(ent)f(w)o(ait)g(mec)o(hanism.)21 b(This)15 b(is)g(used)g(b)o(y)g (threads)0 1155 y(that)h(need)h(to)e(w)o(ait)h(for)g(sp)q(eci\014c)i(ev)o(en) o(ts)e(in)h(the)f(k)o(ernel,)h(and)f(is)h(alw)o(a)o(ys)f(in)o(v)o(ok)o(ed)g (b)o(y)g(the)h(thread)f(itself;)h(an)o(y)0 1211 y(thread)k(can)g(only)g(w)o (ait)f(for)h(one)g(ev)n(ent)f(at)g(a)h(time.)37 b(The)21 b(w)o(ait)f(mec)o (hanism)i(uses)f(three)g(primitives;)i fs(as-)0 1268 y(sert)s 16 2 v 15 w(w)o (ait)15 b fv(\(`assert'\),)d fs(thread)t 16 2 v 16 w(blo)r(c)o(k)i fv(\(`blo) q(c)o(k'\),)f(and)i fs(thread)t 16 2 v 15 w(w)n(ak)o(eup)g fv(\(`w)m(ak)o(eup\ '\).)20 b(A)14 b(thread)h(uses)f fs(as-)0 1324 y(sert)s 16 2 v 15 w(w)o(ait)f fv(to)e(declare)i(the)f(ev)n(ent)f(it)h(w)o(an)n(ts)g(to)f(w)o(ait)g(on,)i (and)f fs(thread)s 16 2 v 16 w(blo)r(c)o(k)f fv(to)g(actually)i(w)n(ait)f(for) f(it.)19 b(When)0 1381 y(the)13 b(ev)o(en)o(t)g(o)q(ccurs,)h(it)f(is)h(signal\ led)h(b)o(y)e fs(thread)s 16 2 v 16 w(w)n(ak)o(eup)g fv(\(`w)n(ak)n(eup\).)20 b(An)13 b(alternativ)o(e)g(to)g fs(thread)s 16 2 v 16 w(w)n(ak)o(eup)0 1437 y fv(is)19 b fs(clear)s 16 2 v 16 w(w)n(ait)h fv(\(`clear'\))d(which)h(is)h(bas\ ed)f(on)g(the)g(identit)o(y)g(of)g(the)g(thread)g(that)f(is)i(w)o(aiting)f (for)g(the)g(ev)o(en)o(t)0 1494 y(rather)f(than)h(the)f(ev)o(en)o(t)h(itself;) h(this)f(can)g(b)q(e)g(useful)h(if)f(a)f(k)o(ernel)i(subsystem)e(\(e.g.,)g (IPC\))g(internally)i(stores)0 1550 y(the)14 b(identities)h(of)e(threads)h (w)o(aiting)g(for)g(ev)o(en)o(ts)f(that)g(it)i(manages.)k(The)14 b(use)g(of)g (three)g(primitives)g(\(instead)g(of)0 1606 y(the)i(usual)g(t)o(w)n(o\))f(all\ ows)g(this)h(ev)o(ent)f(mec)o(hanism)h(to)f(b)r(e)h(incorp)r(orated)f(into)g (other)g(sync)o(hronization)i(mec)o(ha-)0 1663 y(nisms;)d(b)q(et)o(w)o(een)f (the)g fs(assert)s 16 2 v 16 w(w)n(ait)h fv(and)f(the)g fs(thread)t 16 2 v 15 w(blo)s(c)n(k)p fv(,)g(arbitrary)f(state)g(cleanup)i(ma)n(y)f(b)q(e)h(p)q(erf\ ormed)0 1719 y(\(e.g.,)19 b(unlo)r(c)o(k)i(lo)q(c)o(ks\).)36 b(If)21 b(the)g (ev)o(en)o(t)f(should)i(o)q(ccur)f(while)h(this)f(cleanup)g(is)g(in)h(progres\ s)e(\(e.g.,)f(a)h(lo)r(c)o(k)g(is)0 1776 y(unlo)r(c)o(k)o(ed,)g(allo)o(wing)g (another)f(pro)q(cessor)g(to)f(manipulate)i(the)g(corresp)q(onding)g(data)e (structure)h(and)h(cause)0 1832 y(the)14 b(ev)o(ent\),)f(the)i(thread)f(trans\ itions)g(to)g(a)g(state)g(without)g(a)g(W)g(so)g(that)g fs(thread)s 16 2 v 16 w(blo)r(c)o(k)g fv(has)g(no)g(e\013ect)g(with)0 1889 y(resp)q(ect)i(to)e(the) i(ev)n(ent)e(w)o(ait)h(mec)o(hanism.)71 1945 y(The)22 b(ev)n(ent)f(w)o(ait)g (mec)o(hanism)i(also)e(supp)r(orts)g(cleanup)h(of)g(state)e(after)h(the)h(o)q (ccurrence)h(of)e(an)h(ev)o(en)o(t)0 2002 y(\(e.g.,)12 b(a)i(thread)f(in)i (a)e(device)j(driv)o(er)e(ma)n(y)g(ha)n(v)o(e)g(to)f(restart)g(the)h(device)h (after)e(the)h(completion)h(ev)o(en)o(t)e(o)q(ccurs\).)0 2058 y(An)o(y)18 b (thread)g(w)o(aiting)g(for)g(an)g(ev)o(en)o(t)g(that)f(requires)i(suc)o(h)f (cleanup)h(is)f(mark)n(ed)h(as)f(not)f(interruptible)i(when)0 2115 y fs(asser\ t)s 16 2 v 15 w(w)o(ait)i fv(is)g(called.)36 b(In)21 b(the)f(\014gure,)h(this) g(disables)h(the)e(transitions)g(mark)n(ed)h(with)g(a)e(circled)j(N)f(and)0 2171 y(enables)15 b(the)g(transition)g(sho)n(wn)g(with)f(a)g(dashed)h(line.) 21 b(These)15 b(c)o(hanges)f(implemen)q(t)g(t)o(w)n(o)g(features)g(of)g(threa\ ds)0 2227 y(w)o(aiting)h(for)g(non-interruptible)h(ev)o(ents:)56 2311 y(1.)22 b(The)15 b(thread)g(cannot)g(b)r(e)g(interrupted)g(while)i(w)n(aiting)f(for)e (the)i(ev)o(en)o(t.)56 2401 y(2.)22 b(The)15 b(thread)g(will)i(run)e(when)h (the)f(ev)o(ent)f(o)q(ccurs.)0 2484 y(The)e(\014rst)f(e\013ect)h(is)g(impleme\ n)q(ted)g(b)o(y)f(indicating)j(whether)e(eac)o(h)g fs(clear)s 16 2 v 16 w(w)n (ait)h fv(action)f(is)h(an)e(ev)o(en)o(t)h(completion)0 2540 y(or)h(an)h(inte\ rruption)g(\()p fs(thread)s 16 2 v 16 w(w)n(ak)o(eup)g fv(actions)g(are)f(alw) o(a)n(ys)h(ev)o(en)o(t)g(completions\),)g(and)h(ignoring)f(interrup-)0 2597 y (tions)j(for)g(non-interruptible)h(threads.)25 b(This)18 b(means)f(that)f(a)h (non-interruptible)h(ev)o(en)o(t)f(m)n(ust)g(o)q(ccur)h(if)f(it)g(is)0 2653 y (w)o(aited)c(for,)g(otherwise)h(the)f(thread)h(that)e(w)o(aited)i(for)f(it)g (will)i(b)r(e)f(stuc)n(k)g(forev)n(er.)19 b(The)14 b(second)g(e\013ect)f(is)h (imple-)0 2710 y(men)o(ted)g(b)o(y)g(making)g(such)g(threads)g(ineligible)j (for)d(sw)n(ap)r(out,)f(and)h(b)o(y)g(c)o(hanging)h(ho)o(w)f(the)g(w)n(ait)g (and)h(susp)q(end)0 2766 y(mec)o(hanisms)g(in)o(teract)f(for)f(suc)o(h)i(thre\ ads.)k(Susp)r(ending)c(a)f(w)o(aiting)h(thread)f(\(W)f fg(\))i fv(WS\))e(norm\ ally)i(causes)g(it)0 2823 y(to)g(en)o(ter)h(the)g(S)g(state)f(when)h(its)g (ev)o(en)o(t)g(is)g(signalled;)h(if)g(the)f(thread)f(is)i(not)e(interruptible\ ,)i(it)f(instead)g(en)o(ters)p eop %%Page: 13 24 bop 0 50 a fn(CHAPTER)15 b(2.)35 b(TIMESHARING)16 b(AND)f(THE)g(MA)o(CH)g (SCHEDULER)564 b fv(13)0 195 y(the)14 b(RS-runq)h(state)e(\(dashed)h(line\).) 21 b(The)14 b(do)n(w)o(ait)g(transition)g(from)f(that)g(state)g(is)h(also)g (disabled,)i(forcing)e(the)0 252 y(thread)j(to)f(run;)h(its)g(next)f(transiti\ on)h(m)o(ust)g(b)q(e)g(to)f(RS-pro)r(c.)24 b(This)18 b(also)e(c)o(hanges)h (the)g(meaning)g(of)f(the)h(WS)0 308 y(state)c(for)g(non-interruptible)i(thre\ ads;)f(for)f(interruptible)i(threads)f(it)g(means)g(`w)n(aiting)h(and)f(susp) q(ended',)h(but)0 364 y(for)f(non-interruptible)j(threads)e(it)g(means)g(`w)n (aiting)h(with)f(p)r(ending)h(susp)r(end')f(b)q(ecause)h(the)f(thread)g(will) i(run)0 421 y(again)e(when)g(the)f(ev)o(en)o(t)h(w)n(ait)g(completes.)20 b (An)o(y)15 b(running)g(thread)g(that)f(is)h(not)f(in)h(the)g(pro)q(cess)g(of) f(w)n(aiting)h(for)0 477 y(an)j(ev)o(en)o(t)g(\(states)f(R-pro)r(c)h(and)h (RS-pro)q(c\))f(is)h(alw)o(a)o(ys)f(in)o(terruptible;)j fs(c)o(ho)q(ose)s 16 2 v 16 w(thread)d fv(marks)g(all)h(threads)0 534 y(en)o(tering)d(those)g(states) f(as)g(interruptible.)23 b(The)16 b(o)n(v)o(erall)g(e\013ect)g(of)f(these)h (c)o(hanges)g(is)g(that)f(non-interruptible)0 590 y(threads)k(ma)n(y)h(only)g (exist)f(in)i(one)e(of)g(six)h(states)e(in)i(three)g(classes;)h(running)g(\(R) -5 b(W-pro)q(c)19 b(and)h(R)-5 b(WS-pro)q(c\),)0 647 y(w)o(aiting)17 b(\(W)g (and)g(WS\),)f(and)h(queued)h(to)f(run)g(\(R-runq)h(and)f(RS-runq\).)26 b(Thr\ eads)17 b(in)h(an)n(y)f(other)g(state)f(are)0 703 y(alw)o(a)n(ys)f(interrupti\ ble.)71 760 y(T)l(ransitions)21 b(among)e(the)i(three)g(squares)f(of)g(states) g(in)h(Figure)g(2.1)f(in)o(v)o(olv)o(e)h(c)o(hanges)f(in)i(the)e(thread's)0 816 y(execution)12 b(state.)17 b(Threads)11 b(mo)n(v)o(e)g(from)f(the)h(inner) h(square)e(to)g(the)h(middle)i(square)d(b)o(y)h(calling)i fs(thread)s 16 2 v 16 w(blo)r(c)o(k)p fv(;)0 873 y(this)j(has)f(t)n(w)o(o)g(e\013ects:)56 956 y (1.)22 b(Causes)15 b(p)q(ending)i(susp)q(ends)f(and)f(ev)o(ent)f(w)o(aits)h (to)g(tak)n(e)g(e\013ect.)56 1046 y(2.)22 b(Resc)o(hedules)12 b(the)e(pro)q (cessor)g(b)o(y)g(c)o(ho)q(osing)h(another)f(thread)g(to)f(run)h(on)h(the)f (pro)q(cessor)g(\()p fs(c)n(ho)r(ose)s 16 2 v 15 w(thread)p fv(,)114 1102 y (or)j(`c)o(ho)q(ose'\);)g(this)h(thread)g(mo)n(v)o(es)g(from)f(a)h(state)f (on)g(the)h(middle)i(square)e(to)f(a)g(state)g(on)h(the)g(inner)h(one.)0 1186 y(If)g(there)f(is)h(no)g(p)q(ending)h(susp)r(end)f(or)f(w)n(ait,)h fs(thread) s 16 2 v 16 w(blo)r(c)o(k)f fv(decides)i(whether)e(to)g(resc)o(hedule)i(the)f (pro)q(cessor)0 1242 y(based)j(on)g(the)g(priorities)h(of)e(the)h(running)h (and)f(queued)h(threads;)g(if)f(a)f(higher)i(priorit)o(y)f(thread)g(is)g(queu\ ed,)0 1298 y(a)f(con)o(text)h(switc)o(h)g(o)q(ccurs)g(to)f(run)h(it.)27 b(Thr\ eads)18 b(mo)n(v)o(e)g(from)f(the)h(middle)h(square)f(to)f(the)h(outer)f(squa\ re)h(b)o(y)0 1355 y(b)r(eing)d(sw)n(app)r(ed)f(out.)20 b(When)14 b(physical)h (memory)f(is)h(in)g(short)f(supply)m(,)g(the)h(k)o(ernel)g(scans)f(all)i(thre\ ads)e(lo)r(oking)0 1411 y(for)i(sw)n(ap)q(out)g(candidates;)i(a)d(thread)i (is)f(a)g(sw)o(ap)q(out)g(candidate)h(if)g(it)f(has)h(b)q(een)g(susp)r(ended) g(and/or)f(w)n(aiting)0 1468 y(for)f(at)h(least)g(ten)g(seconds.)23 b(These) 17 b(threads)f(are)f(sw)o(app)q(ed)i(out)f(b)o(y)g fr(unwiring)f fv(their)i (k)o(ernel)g(stac)n(ks,)f(allo)o(wing)0 1524 y(the)i(pageout)g(daemon)h(to)e (page)h(out)g(the)h(underlying)h(memory)e(if)g(needed;)j(the)e(stac)n(ks)f (are)g(not)g(explicitly)0 1581 y(forced)e(out)g(of)g(memory)l(,)g(but)h(are)f (instead)h(en)o(tered)g(in)o(to)f(the)g(normal)h(page)f(reclaim)i(mec)o(hanis\ ms)e(used)h(for)0 1637 y(all)f(ph)o(ysical)h(memory)-5 b(.)71 1694 y(Thread) 15 b(sw)n(apping)h(is)g(more)f(complicated)h(than)f(indicated)i(in)f(Figure)g (2.1.)j(Both)c(sw)n(ap)q(out)g(and)h(sw)n(apin)0 1750 y(are)c(p)q(oten)o(tial\ ly)i(complex)f(actions)f(that)g(cannot)g(b)q(e)h(done)f(atomically)h(\(in)g (particular,)g(sw)o(apping)g(in)g(a)f(thread)0 1807 y(ma)n(y)17 b(ha)o(v)n (e)g(to)f(w)o(ait)h(for)f(ph)o(ysical)i(memory)e(to)g(b)q(ecome)h(a)o(v)m(ail\ able)i(to)d(hold)h(its)g(k)o(ernel)g(stac)o(k\).)24 b(As)16 b(a)h(result,)0 1863 y(a)h(thread)g(is)h(mark)n(ed)g(as)f(sw)o(app)q(ed)h(out)f(\(in)h(a)f (state)f(con)o(taining)i(an)g(O\))f(from)g(the)g(b)r(eginning)i(of)d(sw)o(ap) q(out)0 1919 y(to)f(the)g(end)h(of)f(sw)n(apin.)24 b(Hence,)17 b(threads)f (in)i(an)n(y)f(sw)n(app)r(ed)f(out)g(\(O\))g(state)g(ma)n(y)g(ha)o(v)o(e)g (sw)n(ap)r(out)g(actions)g(in)0 1976 y(progress,)h(and)h(threads)f(in)h(the)g (R)o(O,)f(RSO,)i(and)e(SO)h(states)f(ma)n(y)h(also)f(ha)o(v)o(e)g(sw)o(apin)h (actions)g(in)g(progress.)0 2032 y(The)12 b(thread)g(sw)n(app)r(er)f(uses)i (an)e(internal)h(state)f(mac)n(hine)j(\(for)c(eac)o(h)i(thread\))g(to)f(k)o (eep)h(trac)n(k)g(of)f(the)h(exact)g(state)0 2089 y(of)h(a)h(thread)f(with)h (resp)q(ect)g(to)f(the)h(sw)n(app)r(er)f(\(in)i(particular,)f(an)f(extra)g (state)g(is)h(needed)h(to)e(trac)n(k)h(threads)f(for)0 2145 y(which)i(sw)o (apin)h(is)f(requested)h(while)h(sw)n(ap)q(out)e(is)h(in)g(progress)e(to)h (a)n(v)o(oid)h(o)n(v)o(erlapping)h(the)e(t)n(w)o(o)g(actions\).)71 2202 y(The) 20 b(sc)o(heduling)i(state)d(of)g(a)h(thread)f(is)i(recorded)f(in)h(the)f(sta\ te)f(\014eld)i(of)e(the)h(thread)g(data)f(structure.)0 2258 y(Separate)k(bits) h(in)g(the)f(\014eld)h(represent)f(the)g(R)h(\(TH)r 14 2 v 14 w(R)o(UN\),)e (W)h(\(TH)s 14 2 v 13 w(W)-5 b(AIT\),)23 b(S)g(\(TH)r 14 2 v 14 w(SUSP\),)g (and)h(O)0 2315 y(\(TH)r 14 2 v 14 w(SW)-5 b(APPED\))17 b(comp)q(onen)o(ts)g (of)h(the)f(state)g(name.)27 b(The)18 b fs(pro)q(c)g fv(v)o(ersus)f fs(runq)g fv(disam)o(biguation)i(needed)0 2371 y(for)14 b(the)h(R)g(and)g(RS)g(states)f (is)h(indicated)h(b)o(y)f(the)f(con)o(ten)o(ts)g(of)h(the)f(runq)h(\014eld)h (of)e(the)h(thread)f(data)g(structure;)0 2428 y(this)f(\014eld)g(con)o(tains) g(a)e(p)r(oin)o(ter)h(to)g(the)g(runq)h(if)f(and)h(only)g(if)f(the)h(thread)f (is)h(on)f(a)g(runq)g(\(the)g(-runq)h(states\),)e(oth-)0 2484 y(erwise)k(it)g (is)g(n)o(ull)h(\(the)e(-pro)r(c)g(states\).)19 b(This)c(p)q(ointer)f(is)h (needed)h(to)e(determine)i(whic)o(h)f(runq)g(m)n(ust)g(b)q(e)g(lo)r(c)o(k)n (ed)0 2540 y(when)f(remo)o(ving)g(the)f(thread)h(from)f(the)h(runq)g(\(e.g.,) e(the)h(RS-runq)i fg(\))f fv(S)g(do)o(w)n(ait)g(transition\).)19 b(An)14 b (additional)0 2597 y(bit)i(in)h(the)f(state)f(\014eld,)j(TH)r 14 2 v 14 w(IDL\ E,)e(indicates)h(whether)f(the)g(thread)g(is)h(an)f(idle)h(thread.)22 b(Idle) c(threads)d(exist)0 2653 y(only)g(in)g(the)f(R-pro)r(c)h(state)e(to)h(absorb) g(pro)q(cessor)g(time)g(that)g(no)g(other)g(thread)g(can)h(use.)20 b(Earlier) 15 b(v)o(ersions)f(of)0 2710 y(Mac)n(h)g(queued)h(idle)g(threads)e(on)h(the)f (run)h(queues)g(at)f(the)h(lo)o(w)n(est)g(p)q(ossible)h(priorit)o(y)l(,)f(but) g(the)f(curren)o(t)h(v)n(ersion)0 2766 y(sa)n(v)o(es)j(their)h(identities)g (in)g(pro)q(cessor)e(data)h(structures)g(from)f(which)h(it)g(is)h(retriev)o (ed)f(\(b)o(y)g fs(c)o(ho)q(ose)s 16 2 v 16 w(thread)p fv(\))0 2823 y(when)f (there)f(is)h(nothing)f(else)h(to)f(run)g(on)h(a)e(pro)r(cessor.)p eop %%Page: 14 25 bop 0 50 a fn(CHAPTER)15 b(2.)35 b(TIMESHARING)16 b(AND)f(THE)g(MA)o(CH)g (SCHEDULER)564 b fv(14)523 1014 y 360 2 v -1 x 2 781 v -89 x 360 2 v -90 x 360 2 v -90 x 720 2 v -90 x 720 2 v -150 x 720 2 v -90 x 720 2 v -90 x 720 2 v -90 x 720 2 v 883 1013 a 2 360 v -510 x 2 270 v 1243 743 a 2 510 v 283 983 a(Hint) 316 b(2)283 893 y(Coun)o(t)282 b(3)283 803 y(Lo)r(c)o(k)d(free)223 713 y(Queu\ e)17 b(31)283 593 y(.)8 b(.)f(.)223 473 y(Queue)17 b(2)223 383 y(Queue)g(1) 223 293 y(Queue)g(0)1423 669 y fi(\013)1423 703 y 2 11 v 26 x(\012)1723 669 y (\010)1723 703 y 2 11 v 26 x(\011)-325 b 251 2 v -60 x 251 2 v 1498 713 a fv (Thread)1423 429 y fi(\013)1423 463 y 2 11 v 26 x(\012)1723 429 y(\010)1723 463 y 2 11 v 26 x(\011)g 251 2 v -60 x 251 2 v 1498 473 a fv(Thread)1423 249 y fi(\013)1423 283 y 2 11 v 26 x(\012)1723 249 y(\010)1723 283 y 2 11 v 26 x (\011)g 251 2 v -60 x 251 2 v 1498 293 a fv(Thread)1573 428 y 2 120 v fh(?) 1063 459 y 360 2 v -1 x(\033)1063 699 y 360 2 v -1 x(\033)703 458 y(\020)745 445 y(\020)786 431 y(\020)828 417 y(\020)869 403 y(\020)911 389 y(\020)953 375 y(\020)994 362 y(\020)1036 348 y(\020)1077 334 y(\020)1119 320 y(\020)1160 306 y(\020)1202 292 y(\020)1208 290 y(\020)1243 279 y 181 2 v 1382 278 a(-)703 698 y(\000)745 657 y(\000)752 650 y(\000)793 609 y 570 2 v 1363 650 a(@)1388 674 y (@)-42 b(R)581 1111 y fv(Figure)15 b(2.2:)k(Mac)n(h)d(Run)g(Queue)g(Structure) 0 1295 y fq(2.2.2)55 b(Data)19 b(Structures)0 1380 y fv(The)i(primary)h(data) e(structure)h(used)h(b)o(y)f(the)g(Mac)n(h)h(sc)o(heduler)g(is)g(the)f fr(run) h(queue)p fv(,)h(a)e(priorit)o(y)g(queue)h(of)0 1437 y(runnable)d(threads)f (implemented)g(b)o(y)g(an)g(arra)n(y)g(of)f(doubly-link)r(ed)h(queues.)28 b (Thirt)o(y-t)o(w)o(o)17 b(queues)i(are)e(used)0 1493 y(in)j(Mac)n(h,)h(so)e (four)f(priorities)j(from)e(the)g(Unix)h(range)f(of)g(0{127)f(map)h(to)g(eac) o(h)g(queue)1565 1477 y fk(2)1586 1493 y fv(.)32 b(Lo)o(w)n(er)20 b(prioritie\ s)0 1550 y(corresp)q(ond)f(to)g(higher)h(n)o(um)o(b)q(ers)f(and)g(vice-versa.) 32 b(A)19 b(hint)f(is)i(main)o(tained)g(that)e(indicates)j(the)e(probable)0 1606 y(lo)r(cation)d(of)f(the)h(highest)g(priorit)o(y)g(thread.)22 b(The)16 b (highest)g(priorit)o(y)g(thread)f(cannot)h(b)r(e)f(at)h(a)f(higher)i(priorit) o(y)0 1663 y(than)c(the)h(hin)o(t,)f(but)h(ma)n(y)f(b)r(e)g(at)g(a)g(lo)o(w)o (er)g(priorit)o(y)l(.)20 b(This)13 b(allows)g(the)g(searc)o(h)g(for)g(the)h (highest)f(priority)g(thread)0 1719 y(to)18 b(start)f(from)g(the)i(hint)f(ins\ tead)g(of)g(the)h(highest)g(priorit)o(y)f(queue,)i(and)e(can)h(a)n(v)o(oid)g (searc)n(hing)g(a)f(dozen)h(or)0 1776 y(more)c(queues)h(b)q(ecause)g(the)g (highest)g(p)q(ossible)h(priorit)o(y)e(for)g(most)f(user)i(threads)f(is)h(50) e(\(to)h(matc)n(h)g(Unix\).)21 b(In)0 1832 y(addition)16 b(to)d(the)i(arra)n (y)f(of)g(queues,)h(the)g(run)g(queue)g(structure)f(also)h(con)o(tains)g(a)f (m)n(utual)h(exclusion)i(lo)q(c)o(k)e(and)0 1888 y(a)k(coun)o(t)g(of)g(thread\ s)h(curren)o(tly)g(enqueued.)34 b(The)20 b(coun)o(t)f(is)h(used)g(to)f(optimi\ ze)h(testing)g(for)f(emptiness)h(b)o(y)0 1945 y(replacing)15 b(a)e(scan)h(of) f(the)g(individual)k(queues)d(with)g(a)f(comparison)h(of)f(the)h(coun)o(ter)f (to)g(zero.)19 b(This)14 b(eliminates)0 2001 y(the)j(need)h(to)f(hold)h(the)f (run)h(queue)g(lo)q(c)o(k)f(when)h(the)f(run)h(queue)g(is)f(empt)o(y)l(,)g (reducing)i(p)q(oten)o(tial)f(con)o(ten)o(tion)0 2058 y(for)f(this)g(imp)r (ortan)n(t)g(lo)r(c)n(k.)26 b(The)18 b(use)f(of)g(a)g(single)h(lo)r(c)o(k)f (assumes)g(that)f(clo)r(c)o(k)h(interrupts)g(on)g(the)g(pro)q(cessors)0 2114 y (of)j(a)g(m)o(ultipro)r(cessor)g(are)g(not)h(sync)o(hronized)g(b)r(ecause)g (signi\014cant)f(con)o(ten)o(tion)h(can)g(b)q(e)g(exp)q(ected)g(in)h(the)0 2171 y(sync)o(hronized)d(case,)e(and)g(the)g(use)h(of)f(a)f(shared)i(global)f (run)h(queue)g(ma)n(y)f(not)g(b)q(e)h(appropriate.)25 b(Figure)18 b(2.2)0 2227 y(sho)o(ws)e(an)g(example)h(of)f(a)h(run)f(queue)h(with)g(3)f(threads.)24 b (The)16 b(queues)i(con)n(taining)g(the)e(threads)h(are)f(doubly-)0 2284 y(lin\ ked,)e(but)g(only)g(the)f(forw)n(ard)h(links)h(are)e(sho)o(wn)g(for)g(clarit) o(y)m(.)19 b(The)14 b(hin)o(t)g(is)g(2,)f(indicating)i(that)e(queues)h(0)g (and)0 2340 y(1)h(are)g(empt)o(y)g(and)g(can)g(b)r(e)g(skipp)s(ed)g(in)h(a)f (searc)o(h)g(for)g(the)g(highest)h(priorit)o(y)f(thread.)71 2397 y(Eac)n(h)f (pro)q(cessor)f(consults)h(the)f(appropriate)g(run)h(queues)g(when)g(a)e(new) i(thread)f(is)h(needed)g(for)f(execution.)0 2453 y(The)h(k)o(ernel)g(maintain\ s)g(a)f fr(lo)n(c)m(al)i(run)g(queue)f fv(for)f(eac)o(h)h(pro)q(cessor)g(and) f(a)h(shared)g fr(glob)m(al)h(run)g(queue)p fv(.)20 b(The)14 b(lo)q(cal)0 2509 y(run)e(queue)g(is)g(used)g(b)o(y)g(threads)f(that)g(ha)o(v)o(e)g(b)r(een)h (temp)q(orarily)g(b)r(ound)g(to)e(a)i(sp)q(eci\014c)h(pro)q(cessor)e(for)g (one)h(of)f(t)o(w)n(o)0 2566 y(reasons.)21 b(Some)16 b(of)f(the)h(Unix)g(comp\ atibilit)q(y)f(co)r(de)h(in)g(curren)o(t)g(Mac)n(h)g(k)o(ernels)g(has)g(not)f (b)r(een)h(con)o(v)o(erted)f(for)0 2622 y(parallel)i(execution)349 2606 y fk (3)386 2622 y fv(so)e(threads)g(executing)i(in)f(the)g(unparallelized)j(p)q (ortion)d(of)f(this)h(co)q(de)g(are)f(temp)r(orarily)0 2670 y 779 2 v 52 2727 a fj(2)69 2743 y ft(More)e(recent)g(Mac)o(h)g(k)o(ernels)h(use)g(a)f(priorit) q(y)g(range)g(of)g(0{31)h(so)f(that)g(queues)h(and)g(priorities)h(corresp)r (ond.)52 2803 y fj(3)69 2819 y ft(Most)e(of)g(this)h(co)q(de)g(has)f(b)q(een) h(parallelized)q(,)h(see)e([32])g(for)g(details.)p eop %%Page: 15 26 bop 0 50 a fn(CHAPTER)15 b(2.)35 b(TIMESHARING)16 b(AND)f(THE)g(MA)o(CH)g (SCHEDULER)564 b fv(15)0 195 y(b)r(ound)13 b(to)g(a)g(single,)i(designated)f fr(master)h(pr)n(o)n(c)m(essor)p fv(.)k(In)o(terrupts)13 b(that)g(in)o(v)o (ok)o(e)g(Unix)h(compatibilit)q(y)f(co)q(de)h(are)0 252 y(also)i(restricted)g (to)f(this)i(pro)q(cessor.)k(The)16 b(second)h(use)f(of)f(the)h(lo)r(cal)g (run)g(queues)h(is)f(made)g(b)o(y)g(the)g(pro)q(cessor)0 308 y(allo)r(cation) g(co)q(de)g(describ)r(ed)g(in)h(Chapter)e(6.)20 b(Mac)n(h)c(is)g(self-schedul\ ing)i(in)e(that)f(pro)q(cessors)g(consult)h(the)g(run)0 364 y(queues)f(indivi\ duall)q(y)i(when)d(they)g(need)h(a)f(new)g(thread)g(to)f(run)i(instead)f(of)g (ha)n(ving)h(a)f(cen)o(tralized)h(dispatcher)0 421 y(assign)h(threads)g(to)g (pro)q(cessors.)23 b(The)16 b(lo)r(cal)h(run)f(queue)h(is)g(examined)h(\014rs\ t)d(to)h(giv)o(e)h(absolute)f(preference)h(to)0 477 y(b)r(ound)h(threads)f (o)o(v)n(er)h(un)o(b)r(ound)g(threads.)28 b(This)18 b(a)n(v)o(oids)g(b)r(ottl\ enec)o(ks)g(b)o(y)g(maximizing)h(throughput)e(of)h(the)0 534 y(unparallelized) h(Unix)e(compatibility)f(co)q(de)770 517 y fk(4)790 534 y fv(,)g(and)f(impro) o(v)o(es)h(the)g(p)q(erformance)f(of)h(pro)q(cessor)f(allo)r(cation)h(b)o(y)0 590 y(causing)g(it)f(to)f(preempt)h(other)f(op)r(erations.)19 b(If)d(the)e (lo)r(cal)h(run)h(queue)f(is)h(empt)n(y)m(,)e(then)h(the)g(global)h(run)f(que\ ue)0 647 y(is)e(examined.)20 b(In)14 b(b)q(oth)e(cases,)h(the)g(highest)g(pri\ ority)f(thread)h(found)g(is)g(dequeued)h(and)f(run)g(b)o(y)g(the)f(pro)q(cess\ or.)0 703 y(If)j(b)r(oth)g(run)g(queues)h(are)f(empt)o(y)l(,)g(the)g(pro)q (cessor)g(b)r(ecomes)g(idle.)71 760 y(Sp)q(ecial)i(mec)o(hanisms)f(are)f(used) h(for)f(idle)i(pro)q(cessors.)j(Most)14 b(unipro)r(cessor)h(systems)g(b)r(orr\ o)m(w)h(the)f(k)o(ernel)0 816 y(stac)n(k)20 b(of)f(the)g(thread)g(or)g(pro)q (cess)h(that)f(ran)g(most)f(recently)i(to)e(execute)i(the)g(idle)h(lo)r(op.) 32 b(On)20 b(a)f(m)o(ultipro-)0 873 y(cessor)h(this)g(can)h(b)q(e)f(disastrou\ s)g(if)h(the)f(thread)g(resumes)g(execution)h(on)f(another)g(pro)q(cessor)g (b)q(ecause)h(the)0 929 y(t)n(w)o(o)16 b(pro)q(cessors)g(will)i(corrupt)e(the) h(thread's)f(k)n(ernel)i(stac)n(k.)24 b(Mac)n(h)16 b(a)o(v)o(oids)h(this)f (stac)o(k)g(corruption)h(b)o(y)f(using)0 985 y(a)j(dedicated)i fr(id)r(le)f (thr)n(e)m(ad)g fv(for)f(eac)o(h)g(pro)q(cessor.)32 b(Idle)21 b(pro)q(cessors) e(are)g(dispatc)o(hed)h(b)o(y)g(a)f(mec)o(hanism)h(that)0 1042 y(b)o(ypasses) 14 b(the)h(run)f(queues.)21 b(The)15 b(k)n(ernel)h(main)o(tains)e(an)h(in)o (ternal)g fr(id)s(le)g(queue)g fv(of)e(pro)r(cessors.)19 b(A)14 b(thread)h (that)0 1098 y(b)r(ecomes)f(runnable)i(dequeues)g(a)e(pro)q(cessor)h(from)f (that)f(queue)j(and)f(en)o(ters)f(its)h(identit)o(y)f(in)i(that)d(pro)r(cesso\ r's)0 1155 y(data)k(structure.)26 b(The)18 b(idle)h(thread)e(on)h(that)e(pro) q(cessor)h(picks)h(up)g(the)f(new)h(thread)f(and)h(con)o(text)e(switc)o(hes)0 1211 y(directly)i(to)e(it,)g(gaining)i(p)q(erformance)e(b)o(y)h(b)o(ypassing) g(the)f(run)h(queues.)24 b(This)17 b(mec)o(hanism)g(is)g(one)g(example)0 1268 y(of)h(a)g(general)h(tec)o(hnique)h(called)g(Hando\013)f(Sc)o(heduling)h(that) e(con)o(text)g(switc)o(hes)h(directly)h(to)e(a)g(new)h(thread)0 1324 y(withou\ t)c(searc)o(hing)h(for)e(it)i(on)f(a)g(run)g(queue.)71 1381 y(A)e(recent)g (pap)q(er)h(b)o(y)f(Anderson,)h(et)g(al[1)o(])f(explores)i(data)e(structure)g (alternativ)o(es)h(for)e(a)i(user-level)g(thread)0 1437 y(pac)o(k)m(age;)19 b (their)g(results)g(pro)n(vide)h(some)e(guidance)h(for)f(the)g(design)h(of)f (a)g(m)o(ultipro)r(cessor)g(sc)o(heduler.)31 b(They)0 1494 y(considered)17 b (three)e(alternativ)o(es)g(for)g(the)g(run)h(queue)g(and)f(idle)i(pro)q(cesso\ r)e(managemen)n(t)g(data)g(structures:)56 1584 y(1.)22 b(A)15 b(global)h(run) f(queue.)56 1677 y(2.)22 b(A)15 b(global)h(run)f(queue)h(plus)g(a)f(queue)h (of)f(idle)i(pro)q(cessors.)56 1770 y(3.)22 b(A)15 b(run)g(queue)h(p)r(er)f (pro)q(cessor:)168 1862 y fg(\017)23 b fv(Newly)16 b(runnable)g(threads)f(are) g(assigned)h(to)e(random)h(run)h(queues.)168 1934 y fg(\017)23 b fv(Processor\ s)15 b(searc)o(h)g(queues)h(in)g(cyclic)h(order)e(starting)g(with)g(their)h (o)n(wn.)0 2027 y(The)21 b(ev)n(aluation)g(used)g(a)f(program)g(that)g(create\ d)h(and)f(destro)o(y)o(ed)h(one)f(million)j(\014ne)f(grained)f(threads)f(to)0 2083 y(obtain)j(sp)q(eedup)g(and)g(latency)g(results.)41 b(The)23 b(sp)q(eedu\ p)h(results)e(are)g(not)g(directly)i(applicable)h(to)c(Mac)o(h)0 2140 y(b)r (ecause)13 b(thread)g(creation)h(should)g(not)f(b)r(e)g(a)g(ma)r(jor)g(p)r (erformance)f(b)r(ottlenec)o(k;)i(applications)h(using)f(medium)0 2196 y(to)g (\014ne)h(grain)f(parallelism)j(can)d(b)r(e)g(exp)r(ected)h(to)f(cac)o(he)g (and)h(reuse)g(op)q(erating)f(system)g(threads)h(or)e(pro)q(cesses)0 2253 y (\(as)20 b(their)h(b)q(enc)o(hmark)f(do)r(es\))g(to)g(a)n(v)o(oid)h(the)f(exp) r(ense)h(of)f(creating)g(and)h(destro)n(ying)g(them.)36 b(The)20 b(latency)0 2309 y(results)h(are)g(applicable,)j(as)c(they)h(should)h(b)r(e)f(indicative) g(of)g(the)g(sc)o(heduling)i(o)n(v)o(erhead)e(of)f(blo)r(c)o(king)i(and)0 2365 y(resuming)13 b(threads;)h(these)f(are)f(imp)r(ortan)n(t)h(op)q(erations)g (in)g(an)o(y)g(op)q(erating)g(system,)f(and)h(particularly)h(for)f(one)0 2422 y(like)i(Mac)o(h)g(that)g(supp)r(orts)f(message)h(passing)g(as)g(a)g(primary) g(means)g(of)g(interaction)g(among)f(threads.)71 2478 y(The)i(results)g(from) f(this)i(study)f(suggest)f(that)g(the)h(data)g(structures)f(used)i(in)g(Mac)n (h)f(are)g(the)g(b)q(est)g(c)o(hoice)0 2535 y(among)h(the)h(alternativ)o(es.) 28 b(Compared)18 b(to)f(the)h(base)g(case)g(of)f(a)h(single)h(global)f(run)h (queue,)g(adding)f(an)g(idle)0 2591 y(queue)e(signi\014cantly)g(impro)o(v)n (ed)g(p)r(erformance)e(when)i(the)f(n)o(um)o(b)q(er)h(of)e(runnable)j(threads) e(w)n(as)g(less)h(than)f(the)0 2648 y(n)o(um)o(b)q(er)h(of)f(pro)q(cessors,)h (but)g(imp)r(osed)f(a)h(slight)f(p)r(enalt)o(y)g(when)i(there)f(are)f(more)g (threads)h(than)f(pro)r(cessors.)0 2704 y(In)h(the)g(former)f(case,)g(threads) g(are)g(a)h(scarce)f(resource,)h(and)f(it)h(is)g(more)f(e\016cient)g(to)g(ha) o(v)o(e)h(them)f(lo)r(oking)g(for)0 2750 y 779 2 v 52 2807 a fj(4)69 2823 y ft (See)e([55])g(for)g(an)g(extensiv)q(e)g(study)g(of)g(this)h(area.)p eop %%Page: 16 27 bop 0 50 a fn(CHAPTER)15 b(2.)35 b(TIMESHARING)16 b(AND)f(THE)g(MA)o(CH)g (SCHEDULER)564 b fv(16)0 195 y(pro)q(cessors)14 b(than)g(vice)h(v)o(ersa.)k (In)c(the)f(latter)g(case,)g(there)h(is)f(a)g(slight)g(o)o(v)n(erhead)h(for)f (c)o(hec)o(king)h(the)f(idle)i(queue)0 252 y(to)11 b(discov)n(er)h(that)f(it) i(is)f(empt)o(y)l(.)19 b(The)12 b(run)g(queue)h(p)q(er)f(pro)q(cessor)g(alter\ nativ)o(e)g(made)g(no)f(di\013erence)i(for)f(small)g(or)0 308 y(large)j(n)o (um)n(b)r(ers)f(of)g(threads,)g(but)h(had)g(a)f(signi\014cant)g(negativ)o(e)h (impact)g(if)g(the)f(n)o(um)o(b)r(er)g(of)g(threads)h(w)n(as)f(close)0 364 y (to)g(the)g(n)o(um)o(b)r(er)g(of)g(pro)q(cessors)h(b)q(ecause)g(eac)o(h)g(pro) q(cessor)f(w)o(ould)h(searc)o(h)f(more)g(run)h(queues)g(in)h(lo)q(oking)f(for) f(a)0 421 y(thread.)24 b(Recen)q(t)16 b(w)n(ork)h(on)f(the)h(p)r(erformance)f (b)r(ene\014ts)h(of)f(limiting)j(the)e(parallel)h(execution)g(demanded)g(b)o (y)0 477 y(applications)e(to)d(the)h(a)o(v)m(ailable)i(hardw)o(are)e(parallel\ ism)i(suggests)d(that)g(a)h(m)o(ultipro)r(cessor)g(op)q(erating)g(system)0 534 y(like)f(Mac)n(h)g(can)g(exp)r(ect)g(to)f(sp)r(end)h(m)o(uc)o(h)g(of)g(its)g (time)g(in)h(a)e(condition)i(where)f(the)g(n)o(um)o(b)r(er)g(of)f(threads)h (and)g(the)0 590 y(n)o(um)o(b)q(er)f(of)g(pro)q(cessors)f(roughly)h(corresp)q (ond)g([51,)f(54)o(].)19 b(This)12 b(mak)n(es)g(the)g(p)r(erformance)f(of)h (the)g(run)g(queue)g(p)r(er)0 647 y(pro)q(cessor)j(solution)i(unacceptable)g (for)e(a)g(m)n(ultipro)s(cessor)g(op)q(erating)h(system.)k(This)c(and)g(the)g (p)q(erformance)0 703 y(b)r(ene\014ts)i(of)g(the)g(idle)i(pro)q(cessor)e(queu\ e)h(\(when)f(there)g(are)g(few)o(er)g(threads)g(than)g(pro)q(cessors\))f(sugg\ est)h(that)0 760 y(the)d(global)h(run)g(queue)g(plus)g(idle)h(queue)f(alterna\ tiv)o(e)f(used)h(b)o(y)f(Mac)n(h)h(is)g(the)f(b)q(est)g(c)o(hoice.)0 881 y fq (2.2.3)55 b(Priorit)n(y)18 b(Calculations)0 967 y fv(Threads)12 b(are)g(c)o (hosen)g(for)g(execution)h(based)f(on)g(their)h(priorities,)h(and)e(the)g(sc) o(heduler)i(adjusts)d(these)i(priorities)0 1024 y(to)j(balance)h(pro)q(cessor) f(usage)g(among)f(comp)r(eting)h(threads.)23 b(Thread)17 b(priorities)g(consi\ st)g(of)e(a)h(base)h(priorit)o(y)0 1080 y(plus)f(an)e(o\013set)f(derived)i (from)f(recen)o(t)g(pro)q(cessor)g(usage.)20 b(The)15 b(base)f(priorit)o(y)h (is)g(set)f(to)g(allo)o(w)h(in)o(ternal)g(k)o(ernel)0 1137 y(threads)h(to)f (run)h(at)f(higher)i(priorities)g(than)f(user)g(threads)g(b)q(ecause)g(the)g (internal)g(threads)g(p)q(erform)f(critical)0 1193 y(k)o(ernel)i(functions)g (suc)o(h)g(as)f(pageout.)22 b(The)17 b(o\013set)e(derived)h(from)g(usage)g (is)h(w)n(eighted)f(b)o(y)g(the)h(load)f(factor)f(to)0 1249 y(preserv)o(e)h (system)g(resp)r(onsiv)o(eness)h(under)g(load.)24 b(If)16 b(an)g(adequate)h (hardw)n(are)f(source)h(of)f(timestamps)g(exists,)0 1306 y(suc)o(h)d(as)g(a)g (32-bit)g(microsecond)g(counter,)f(the)h(sc)o(heduler)i(can)e(b)q(e)h(con\014\ gured)f(to)g(base)g(usage)f(calculations)j(on)0 1362 y(timestamps)d(from)f (this)h(coun)o(ter.)18 b(This)13 b(eliminates)g(the)f(inaccuracies)i(and)d (distortions)h(caused)h(b)o(y)e(statistical)0 1419 y(usage)k(calculations)i (\(see)e([55)o(])g(for)f(details\).)71 1475 y(Mac)n(h)22 b(uses)f(the)h(o)o (v)n(erload)g(factor)f(tec)n(hnique)i(for)e(pro)q(cessor)h(usage)f(aging.)39 b (The)22 b(aging)f(o)o(v)n(erhead)h(is)0 1532 y(distributed)13 b(b)o(y)e(makin\ g)g(eac)o(h)g(thread)g(resp)q(onsible)i(for)d(aging)i(of)e(its)i(o)n(wn)f(pro) q(cessor)g(usage.)18 b(Clo)r(c)o(k)11 b(in)o(terrupts)0 1588 y(and)j(ev)o(en) o(ts)f(that)f(unblo)q(c)o(k)i(a)f(thread)g(cause)h(it)f(to)g(c)o(hec)o(k)h (its)f(lo)r(cal)h(cop)o(y)f(of)g(a)g(coun)o(ter)g(against)g(a)h(global)g(v)m (alue)0 1645 y(that)i(is)i(incremented)f(once)g(a)g(second.)26 b(If)17 b(thes\ e)g(v)n(alues)h(di\013er,)f(the)g(thread)g(ages)g(its)g(usage)g(b)o(y)g(a)f (factor)g(of)0 1701 y(5)p fo(=)p fv(8)g(for)h(eac)o(h)g(unit)i(of)d(di\013ere\ nce.)28 b(This)18 b(results)f(in)h(eac)o(h)g(thread's)e(accum)o(ulated)i(usag\ e)g(b)q(eing)g(m)o(ultiplied)0 1758 y(b)o(y)f(5)p fo(=)p fv(8)f(once)i(a)e (second.)26 b(5)p fo(=)p fv(8)16 b(w)o(as)h(c)n(hosen)h(for)e(e\016ciency)j (\(m)n(ultiplication)h(b)o(y)d(it)g(can)g(b)r(e)g(implemen)q(ted)g(b)o(y)0 1814 y(t)n(w)o(o)d(shifts)g(and)g(an)h(add\),)e(and)i(to)e(pro)q(duce)i(b)r (eha)o(vior)f(similar)h(to)f(other)f(timesharing)i(systems)1691 1798 y fk(5) 1710 1814 y fv(.)20 b(Mac)n(h)15 b(uses)0 1870 y(an)h(o)n(v)o(erload)g(factor) f(of)h(the)g(n)o(um)o(b)q(er)g(of)f(runnable)j(threads)d(divided)k(b)o(y)c (the)h(n)o(um)o(b)r(er)g(of)f(pro)q(cessors)h(with)g(a)0 1927 y(minimum)e(of) g(1.)19 b(This)c(factor)e(is)i(calculated)h(as)d(an)i(exp)q(onen)o(tial)g(a)o (v)n(erage)f(to)g(smo)q(oth)f(the)i(impact)f(of)g(abrupt)0 1983 y(load)h(c)o (hanges.)71 2040 y(This)f(sc)o(heduling)i(algorithm)e(requires)g(that)f(all)i (threads)f(c)o(hec)o(k)g(their)g(cop)o(y)g(of)f(the)h(coun)o(ter)g(on)f(a)h (regular)0 2096 y(basis.)25 b(The)17 b(clo)r(c)o(k)g(interrupt)f(handler)i (p)r(erforms)e(this)h(c)o(hec)o(k)g(for)f(running)i(threads,)f(and)g(threads) g(that)f(are)0 2153 y(not)c(running)i(defer)f(this)g(c)o(hec)o(k)g(un)o(til)g (they)g(b)q(ecome)g(runnable.)20 b(Runnable)15 b(threads)d(with)h(lo)o(w)g (priorities)h(ma)n(y)0 2209 y(sp)q(end)i(long)f(p)q(erio)r(ds)g(of)f(time)h (on)f(a)h(run)f(queue)i(while)g(higher)f(priority)f(threads)h(monop)q(olize)h (the)e(pro)q(cessor.)0 2266 y(Suc)o(h)g(threads)g(w)n(ould)h(run)f(if)g(they) f(could)i(c)o(hec)o(k)f(their)g(cop)o(y)g(of)f(the)h(coun)o(ter)f(and)h(age)f (their)h(usage,)g(but)f(their)0 2322 y(lo)o(w)g(priorit)o(y)h(p)q(ositions)g (on)f(the)g(run)h(queue)g(prev)o(en)o(t)f(them)g(from)g(running)h(to)f(p)q (erform)g(this)h(c)o(hec)o(k.)19 b(T)l(o)13 b(a)o(v)n(oid)0 2379 y(the)i(resu\ lting)i(starv)l(ation,)e(an)h(in)o(ternal)g(k)o(ernel)g(thread)f(scans)h(the) f(run)h(queues)g(once)f(ev)o(ery)h(t)n(w)o(o)f(seconds)g(to)0 2435 y(p)r(erfo\ rm)d(the)h(aging)g(and)g(resulting)h(priorit)o(y)f(elev)n(ation)g(for)g(an)n (y)g(threads)g(in)h(this)f(situation.)20 b(The)13 b(t)n(w)o(o)f(second)0 2491 y(p)r(erio)q(d)i(w)o(as)f(c)o(hosen)i(to)e(pro)q(duce)i(acceptable)g(b)q(eha) o(vior)f(based)g(on)g(exp)r(erience)h(with)g(v)n(ersions)g(of)e(the)h(system) 0 2548 y(that)f(exhibited)i(this)f(starv)m(ation.)19 b(Similar)c(starv)m(atio\ n)e(has)h(b)q(een)g(observ)o(ed)g(in)g(the)g(ESCHED)f(sc)o(heduler)i(due)0 2604 y(to)d(pro)q(cesses)i(failing)g(to)f(cause)g(a)g(su\016cient)g(rate)f (of)h(priorit)o(y-elev)n(ating)g(ev)o(ents.)18 b(A)13 b(similar)i(solution)e (of)g(using)0 2661 y(a)i(p)q(erio)r(dic)h(scan)g(of)e(the)i(run)f(queue)h(to) f(b)q(o)q(ost)g(priorities)h(of)f(suc)o(h)g(pro)q(cesses)h(is)g(describ)r(ed) g(b)o(y)f(Essic)o(k[15)o(].)0 2711 y 779 2 v 52 2768 a fj(5)69 2784 y ft(The) e(n)o(um)o(b)q(er)g(used)g(b)o(y)g(4.3BSD)g(Unix)h(dep)q(ends)g(on)e(load.)18 b(F)m(or)13 b(the)f(range)i(from)e(0)p ff(:)p ft(5)g(to)h(1)p ff(:)p ft(0,)f (it)h(v)n(aries)g(from)g(1)p ff(=)p ft(2)f(to)h(2)p ff(=)p ft(3[34)q(].)p eop %%Page: 17 28 bop 0 50 a fn(CHAPTER)15 b(2.)35 b(TIMESHARING)16 b(AND)f(THE)g(MA)o(CH)g (SCHEDULER)564 b fv(17)511 205 y 926 2 v 510 262 a 2 57 v 536 245 a(Expansion) 766 262 y 2 57 v 792 245 a(Appro)o(ximation)1116 262 y 2 57 v 1141 245 a(Resu\ lt)1435 262 y 2 57 v 511 263 a 926 2 v 10 x 926 2 v 510 330 a 2 57 v 576 313 a (0.1000)766 330 y 2 57 v 844 313 a(2)867 296 y fe(\000)p fk(2)924 313 y fv (+)11 b(2)993 296 y fe(\000)p fk(2)1116 330 y 2 57 v 1141 313 a fv(Exact)1435 330 y 2 57 v 511 331 a 926 2 v 510 388 a 2 57 v 576 371 a(0.1001)766 388 y 2 57 v 844 371 a(2)867 354 y fe(\000)p fk(1)924 371 y fv(+)g(2)993 354 y fe(\ \000)p fk(4)1116 388 y 2 57 v 1141 371 a fv(Exact)1435 388 y 2 57 v 511 389 a 926 2 v 510 446 a 2 57 v 576 429 a(0.1010)766 446 y 2 57 v 844 429 a(2)867 412 y fe(\000)p fk(1)924 429 y fv(+)g(2)993 412 y fe(\000)p fk(3)1116 446 y 2 57 v 1141 429 a fv(Exact)1435 446 y 2 57 v 511 447 a 926 2 v 510 504 a 2 57 v 576 487 a(0.1011)766 504 y 2 57 v 844 487 a(2)867 471 y fe(\000)p fk(1)924 487 y fv(+)g(2)993 471 y fe(\000)p fk(3)1116 504 y 2 57 v 1141 487 a fv(Error)k(of) f(9.1%)1435 504 y 2 57 v 511 506 a 926 2 v 510 562 a 2 57 v 576 545 a(0.1100) 766 562 y 2 57 v 844 545 a(2)867 529 y fe(\000)p fk(1)924 545 y fv(+)d(2)993 529 y fe(\000)p fk(2)1116 562 y 2 57 v 1141 545 a fv(Exact)1435 562 y 2 57 v 511 564 a 926 2 v 510 620 a 2 57 v 576 603 a(0.1101)766 620 y 2 57 v 844 603 a (2)867 587 y fe(\000)p fk(1)924 603 y fv(+)g(2)993 587 y fe(\000)p fk(2)1116 620 y 2 57 v 1141 603 a fv(Error)k(of)f(7.7%)1435 620 y 2 57 v 511 622 a 926 2 v 510 678 a 2 57 v 576 661 a(0.1110)766 678 y 2 57 v 858 661 a(2)881 645 y fk (0)910 661 y fg(\000)d fv(2)979 645 y fe(\000)p fk(3)1116 678 y 2 57 v 1141 661 a fv(Exact)1435 678 y 2 57 v 511 680 a 926 2 v 510 736 a 2 57 v 576 719 a (0.1111)766 736 y 2 57 v 858 719 a(2)881 703 y fk(0)910 719 y fg(\000)g fv (2)979 703 y fe(\000)p fk(4)1116 736 y 2 57 v 1141 719 a fv(Exact)1435 736 y 2 57 v 511 738 a 926 2 v 533 815 a(T)l(able)16 b(2.3:)j(Binary)d(F)l(ractional) f(Appro)o(ximation)71 998 y(A)20 b(general)g(tec)o(hnique)i(in)o(v)o(olving)f (t)o(w)n(o)f(shifts)g(and)h(an)f(add)g(or)g(subtract)f(is)i(used)g(to)e(appro) o(ximate)h(all)0 1054 y(fractional)h(m)n(ultiplications)i(in)e(the)g(sc)o(hed\ uler.)37 b(Multiplication)22 b(b)o(y)f(5)p fo(=)p fv(8)e(is)i(implemen)q(ted) f(exactly)h(\(shift)0 1111 y(righ)o(t)12 b(1,)h(shift)g(righ)o(t)f(3,)h(add\)\ .)19 b(The)13 b(w)n(orst)f(p)q(ossible)i(error)e(of)h(this)g(appro)n(ximation) g(is)g(9.1%)f(and)h(the)g(exp)q(ected)0 1167 y(\(a)n(v)o(erage\))j(error)f (is)i(less)h(than)e(3%)g(with)h(the)f(o)o(v)o(erall)h(error)f(distribution)i (b)r(eing)f(un)o(biased)h(\(i.e.,)e(symmetric)0 1224 y(around)22 b(0\).)39 b (This)22 b(accuracy)g(is)g(more)f(than)h(su\016cient)f(for)g(sc)o(heduling)j (purp)r(oses,)f(esp)q(ecially)h(since)f(the)0 1280 y(most)12 b(common)h(op)q (eration,)g(m)n(ultiplication)j(b)o(y)d(5)p fo(=)p fv(8,)f(is)i(implemented)f (exactly)m(.)19 b(The)13 b(remaining)h(op)q(erations,)0 1337 y(m)o(ultiplicat\ ions)i(b)o(y)d(p)r(o)n(w)o(ers)g(of)g(5)p fo(=)p fv(8,)g(are)g(appro)o(ximate\ d.)19 b(The)14 b(accuracy)f(of)g(this)h(appro)o(ximation)g(is)g(deriv)o(ed)0 1393 y(from)j(its)g(abilit)q(y)g(to)g(matc)n(h)h(the)f(\014rst)g(four)g(digit\ s)h(of)f(the)h(binary)g(expansion)g(of)f(a)g(fraction)h(in)g(75%)f(of)g(the)0 1449 y(cases.)38 b(This)22 b(is)g(sho)o(wn)f(in)h(T)l(able)g(2.3)f(for)g(the) g(expansions)h(b)r(et)n(w)o(een)g(0)p fo(:)p fv(5)e(and)i(1.)38 b(F)l(or)20 b (other)h(fractions,)0 1506 y(the)e(\014rst)g(three)g(or)f(four)h(digits)h(are) f(matc)n(hed)h(in)g(a)e(similar)j(fashion.)31 b(The)20 b(3%)e(error)h(b)q(oun\ d)h(is)f(obtained)0 1562 y(b)o(y)f(extending)i(the)e(expansions)i(that)d(are) h(matc)o(hed)h(exactly)f(to)g(one)h(or)f(t)n(w)o(o)g(additional)i(places)f (and)f(then)0 1619 y(p)r(erforming)f(piecewise)j(in)o(tegration)d(of)g(the)h (resulting)h(error)d(function;)k(the)d(result)h(is)g(an)g(upp)r(er)f(b)r(ound) h(on)0 1675 y(the)d(a)o(v)n(erage)g(case)h(error)e(and)h(is)h(less)g(than)f (3%.)0 1797 y fq(2.2.4)55 b(Priorities)17 b(and)i(Usage)0 1883 y fv(An)g(imp) r(ortan)n(t)g(c)o(haracteristic)g(of)f(a)h(timesharing)g(sc)o(heduler)i(is)e (ho)o(w)g(priorities)h(a\013ect)e(the)h(usage)f(of)h(pro-)0 1939 y(cessors,)h (in)g(particular,)g(ho)o(w)f(pro)q(cessor)g(time)h(is)g(divided)h(among)e(thr\ eads)g(at)f(di\013erent)h(priorities.)33 b(This)0 1996 y(problem)16 b(is)g (addressed)f(here)h(under)g(t)n(w)o(o)f(simplifying)i(assumptions:)56 2088 y (1.)22 b(The)15 b(threads)g(inv)n(olv)o(ed)h(are)f(en)o(tirely)h(compute-b)r (ound.)56 2182 y(2.)22 b(A)15 b(con)o(tin)o(uous)g(appro)o(ximation)h(is)f (used)h(to)f(obtain)g(steady-state)f(results.)0 2275 y(These)f(results)f(are) g(indicativ)q(e)g(of)g(ho)o(w)g(threads)g(share)g(the)g(pro)q(cessors,)g(but) g(do)g(not)g(pro)o(vide)h(an)o(y)f(insight)g(in)o(to)0 2331 y(transien)o(t)h (b)r(eha)o(vior)g(of)g(the)h(sc)n(heduler)h(or)e(ho)o(w)g(threads)g(that)g (blo)r(c)o(k)g(on)g(a)h(regular)f(basis)h(will)h(b)q(eha)o(v)o(e.)k(These)0 2388 y(results)c(also)h(do)f(not)f(address)h(the)h(question)f(of)g(whether)g (the)g(sc)o(heduler)i(will)g(con)o(v)n(erge)e(to)g(the)g(steady)g(state)0 2444 y(solution)j(\(in)f(practice)g(it)g(seems)g(to)f(alw)o(a)o(ys)g(do)h(so\),)f (but)h(pro)o(vide)h(some)e(information)h(on)g(the)g(con)o(v)n(ergence)0 2501 y (rate.)71 2557 y(A)i(fundamental)g(constan)n(t)h(that)e(factors)h(in)o(to)g (all)i(of)e(the)g(problems)h(considered)h(here)f(is)g(the)g(priorit)o(y)0 2614 y(drop)e(caused)g(b)o(y)f(the)h(accum)o(ulation)h(of)e(one)h(second)g(of)f (usage,)h fo(P)6 b fv(.)27 b(F)l(or)18 b(a)f(priorit)o(y)h(range)f(of)g(0{31,) g(usage)0 2670 y(times)e(computed)h(in)g(microseconds)g(are)f(shifted)h(righ) o(t)f(18)g(bits)g(b)r(efore)g(b)q(eing)h(added)g(to)f(the)g(corresp)q(onding) 0 2727 y(priorities.)21 b(Th)o(us:)760 2808 y fo(P)789 2815 y fk(32)839 2808 y fv(=)892 2777 y(10)938 2761 y fk(6)892 2798 y 66 2 v 895 2839 a fv(2)918 2826 y fk(18)975 2808 y fv(=)13 b(3)p fo(:)p fv(8147)p fo(:::)p eop %%Page: 18 29 bop 0 50 a fn(CHAPTER)15 b(2.)35 b(TIMESHARING)16 b(AND)f(THE)g(MA)o(CH)g (SCHEDULER)564 b fv(18)0 195 y(F)l(or)15 b(a)f(priority)h(range)g(of)f(0{127,) g(the)h(shift)h(is)f(16)g(bits)h(instead)f(of)g(18)g(bits,)g(so:)740 318 y fo (P)769 325 y fk(128)837 318 y fv(=)890 287 y(10)936 270 y fk(6)890 307 y 66 2 v 892 349 a fv(2)915 336 y fk(16)972 318 y fv(=)e(15)p fo(:)p fv(2587)p fo (:::)0 426 y fv(Due)f(to)e(the)i(appro)n(ximations)g(in)g(the)g(sc)o(heduler,) h(the)e(v)n(alues)h(of)f fo(P)18 b fv(are)11 b(not)g(signi\014cant)g(b)r(ey)n (ond)h(a)f(few)g(decimal)0 482 y(places.)25 b(This)17 b(quan)o(tit)o(y)f(is)h (carried)g(through)f(the)h(analysis)g(as)f(the)h(sym)n(b)r(ol)g fo(P)23 b fv (to)16 b(sho)n(w)h(the)f(dep)r(endence)i(of)0 538 y(these)11 b(results)g(on)f (it.)19 b(The)10 b(use)h(of)f(accurate)g(timestamp)h(sources)f(that)g(are)g (not)g(denominated)i(in)f(microseconds)0 595 y(requires)16 b(c)o(hanges)f(to) g fo(P)21 b fv(as)15 b(describ)s(ed)g(in)h(the)g(next)f(c)o(hapter.)71 651 y (W)-5 b(e)15 b(no)o(w)g(consider)g(ho)o(w)f(pro)q(cessors)h(are)f(shared)h (b)o(y)f(compute)h(b)r(ound)g(threads)f(at)g(the)h(same)g(priorit)o(y)f(to)0 708 y(sho)o(w)i(that)h(the)g(steady-state)f(sc)o(heduler)i(b)r(eha)o(vior)f (is)g(inv)m(arian)o(t)g(with)g(resp)r(ect)g(to)f(the)h(n)o(um)o(b)r(er)f(of)h (threads)0 764 y(and)k(n)o(um)o(b)r(er)g(of)g(pro)q(cessors.)37 b(F)l(or)20 b (a)h(single)i(thread)e(at)f(priorit)o(y)i fo(p)p fv(,)g(accum)o(ulated)f(usag\ e)g(will)i(cause)f(its)0 821 y(steady-state)13 b(priorit)o(y)h(to)f(b)q(e)h (lo)o(w)o(er)g(than)f fo(p)h fv(\(i.e.,)f(a)g(larger)h(n)o(um)o(b)q(er\))g (b)o(y)f(a)h(quan)o(tit)o(y)f(w)o(e)h(denote)g(b)o(y)f fo(d)p fv(.)19 b(Since) 0 877 y(the)c(thread's)g(usage)g(is)h(m)n(ultiplied)j(b)o(y)c(5)p fo(=)p fv (8)f(once)i(a)e(second,)i(these)f(quan)o(tities)h(are)f(related)h(b)o(y:)845 963 y(5)845 983 y 23 2 v 42 x(8)873 994 y(\()p fo(d)9 b fv(+)i fo(P)6 b fv (\))12 b(=)h fo(d)897 1130 y(d)f fv(=)986 1099 y(5)986 1120 y 23 2 v 41 x(3) 1014 1130 y fo(P)0 1222 y fv(If)h(more)f(than)g(one)h(thread)g(is)g(in)o(v)o (olv)o(ed,)g(then)g(eac)o(h)g(thread)f(only)h(gets)f(a)h(fraction)f(of)g(the) h(pro)q(cessor)f(time.)20 b(W)l(e)0 1278 y(use)d(the)f(notation)g fo(f)364 1285 y fd(i)395 1278 y fv(for)g(the)h(fraction)f(of)g(time)h(obtained)g(b)o (y)f(thread)h fo(i)p fv(.)23 b(If)17 b(there)f(are)g fo(n)h fv(threads)f(inv) o(olv)o(ed,)0 1335 y(then)g(the)f(ab)q(o)o(v)n(e)h(equation)f(b)r(ecomes:)805 1377 y(5)805 1397 y 23 2 v 42 x(8)833 1408 y(\()p fo(d)875 1415 y fd(i)899 1408 y fv(+)10 b fo(P)d(f)1002 1415 y fd(i)1016 1408 y fo(l)p fv(\))13 b(=)g fo(d)1133 1415 y fd(i)0 1499 y fv(where)i(the)f fo(l)h fv(is)g(the)f(o)o(v)n (erload)h(factor,)e(which)h(is)h fo(n)g fv(in)g(this)g(case.)k(If)c(all)g(of) f(the)h(base)f(priorities,)h fo(p)1713 1506 y fd(i)1727 1499 y fv(,)f(are)g (equal,)0 1556 y(then)i(the)f fo(f)204 1563 y fd(i)233 1556 y fv(m)o(ust)g (all)h(b)r(e)f(1)p fo(=n)g fv(in)h(steady)f(state,)f(so)h(this)g(reduces)h (to)f(the)g(previous)h(case:)774 1672 y fo(d)798 1679 y fd(i)824 1672 y fv (=)877 1641 y(5)877 1662 y 23 2 v 41 x(3)905 1672 y fo(P)q(;)k(i)13 b fv(=)g (1)p fo(;)7 b(:::;)f(n)0 1780 y fv(If)19 b fo(m)f fv(pro)q(cessors)h(are)f (inv)n(olv)o(ed,)i(there)f(are)f(t)n(w)o(o)g(p)r(ossible)i(cases.)30 b(F)l (or)18 b fo(m)g fg(\025)h fo(n)p fv(,)g(eac)o(h)g(thread)f(has)h(its)f(o)o (wn)0 1836 y(pro)q(cessor)i(and)f(this)i(reduces)f(to)f(the)h(single)h(thread) f(case)g(for)f(eac)o(h)h(thread.)33 b(F)l(or)19 b fo(m)h(<)h(n)p fv(,)g(the)e (o)o(v)o(erload)0 1893 y(factor,)14 b fo(l)p fv(,)h(is)h fo(n=m)p fv(,)e(so)h (w)o(e)g(ha)o(v)o(e:)788 1938 y(5)788 1958 y 23 2 v 42 x(8)815 1968 y(\()p fo (d)857 1975 y fd(i)881 1968 y fv(+)10 b fo(P)d(f)984 1975 y fd(i)1010 1938 y fo(n)1003 1958 y 40 2 v 42 x(m)1048 1968 y fv(\))12 b(=)h fo(d)1150 1975 y fd (i)0 2062 y fv(F)l(or)j(equal)i(priorities,)g(the)e fo(f)513 2069 y fd(i)544 2062 y fv(m)o(ust)h(b)q(e)g fo(m=n)g fv(in)g(steady)g(state,)f(so)g(this)h (reduces)h(to)e(the)h(previous)g(m)o(ultiple)0 2119 y(thread)i(result.)32 b (Hence)20 b(the)f(depressions,)i fo(d)805 2126 y fd(i)818 2119 y fv(,)f(are)f (alw)o(a)n(ys)1085 2101 y fk(5)1085 2108 y 18 2 v 27 x(3)1108 2119 y fo(P)6 b fv(,)20 b(indep)s(endent)e(of)h(the)g(n)o(um)o(b)q(er)g(of)g(threads)0 2175 y (and)14 b(pro)q(cessors)g(inv)o(olv)o(ed.)20 b(F)-5 b(or)14 b fo(P)19 b fv (=)13 b(3)p fo(:)p fv(8,)g(this)i(means)f(that)f(a)h(compute-b)r(ound)g(threa\ d)g(in)h(an)g(en)o(vironmen)o(t)0 2232 y(consisting)j(only)f(of)f(compute-b)r (ound)h(threads)g(can)g(exp)r(ect)f(to)h(see)g(its)g(priorit)o(y)g(depressed) g(b)o(y)g(a)g(total)f(of)g(6)0 2288 y(\(actually)g(6.3)e(b)q(efore)h(rounding\ \).)71 2345 y(The)c(general)h(problem)f(inv)o(olv)o(es)g(sharing)g(of)g(pro)q (cessors)g(b)o(y)g(threads)g(at)f(di\013erent)h(priorities.)19 b(If)12 b fo (n)f fv(threads)0 2401 y(are)16 b(at)f(priorities)i fo(p)349 2408 y fd(i)363 2401 y fv(,)f(w)o(e)g(are)f(interested)h(in)h(solving)f(for)g(the)g(corresp)q (onding)h(usage)f(fractions)f fo(f)1729 2408 y fd(i)1744 2401 y fv(.)22 b(Wit\ hout)0 2458 y(loss)16 b(of)g(generalit)o(y)l(,)g(assume)g(that)f(thread)h fo (n)g fv(has)g(the)g(lo)o(w)o(est)g(priorit)o(y)l(,)g(and)g(let)g fo(e)1453 2465 y fd(i)1482 2458 y fv(=)e fo(p)1554 2465 y fd(i)1578 2458 y fg(\000)d fo (p)1647 2465 y fd(n)1687 2458 y fv(represen)o(t)16 b(the)0 2514 y(elev)n(atio\ ns)c(in)h(priority)f(for)f(the)h(other)g(threads.)19 b(On)12 b(a)g(m)o(ultipr\ o)r(cessor)g(w)n(e)g(still)i(ha)o(v)n(e)f(the)f(steady-state)f(usage)0 2571 y (equation)16 b(for)e(eac)o(h)h(thread:)788 2613 y(5)788 2633 y 23 2 v 42 x (8)815 2644 y(\()p fo(d)857 2651 y fd(i)881 2644 y fv(+)10 b fo(P)d(f)984 2651 y fd(i)1010 2613 y fo(n)1003 2633 y 40 2 v 42 x(m)1048 2644 y fv(\))12 b(=)h fo(d)1150 2651 y fd(i)0 2735 y fv(Solving)j(for)f fo(d)254 2742 y fd(i)268 2735 y fv(,)f(w)o(e)h(obtain:)847 2808 y fo(d)871 2815 y fd(i)897 2808 y fv (=)950 2777 y(5)950 2798 y 23 2 v 41 x(3)978 2808 y fo(P)7 b(f)1036 2815 y fd (i)1061 2777 y fo(n)1055 2798 y 40 2 v 41 x(m)p eop %%Page: 19 30 bop 0 50 a fn(CHAPTER)15 b(2.)35 b(TIMESHARING)16 b(AND)f(THE)g(MA)o(CH)g (SCHEDULER)564 b fv(19)0 195 y(The)16 b(elev)n(ations)f(and)h(depressions)g (are)f(related)h(b)r(ecause)f(a)g(thread)h(m)n(ust)f(drop)h(in)g(priorit)o (y)g(b)o(y)f(its)g(elev)o(ation)0 252 y(to)f(b)q(e)g(treated)g(the)g(same)g (as)g(thread)g fo(n)p fv(,)g(hence)h fo(d)862 259 y fd(i)889 252 y fv(=)e fo (d)961 259 y fd(n)992 252 y fv(+)8 b fo(e)1056 259 y fd(i)1070 252 y fv(.)20 b (Substituting)15 b(this)g(and)f(the)g(previous)h(identit)o(y)0 308 y(for)g fo (d)94 315 y fd(n)117 308 y fv(,)f(w)o(e)h(can)h(solv)o(e)f(for)g fo(f)498 315 y fd(i)527 308 y fv(in)h(terms)f(of)g fo(f)781 315 y fd(n)804 308 y fv(:)744 394 y(5)744 414 y 23 2 v 41 x(3)771 424 y fo(P)7 b(f)829 431 y fd(n)864 394 y fo(n)858 414 y 40 2 v 41 x(m)913 424 y fv(+)j fo(e)979 431 y fd(i)1006 424 y fv(=)1059 394 y(5)1059 414 y 23 2 v 41 x(3)1087 424 y fo(P)c(f)1144 431 y fd (i)1170 394 y fo(n)1163 414 y 40 2 v 41 x(m)815 563 y(f)837 570 y fd(n)871 563 y fv(+)922 532 y(3)922 552 y 23 2 v 42 x(5)954 532 y fo(e)975 539 y fd(i)990 532 y fo(m)954 552 y 76 2 v 961 594 a(nP)1047 563 y fv(=)13 b fo(f)1117 570 y fd(i)0 656 y fv(This)18 b(form)n(ula)h(indicates)g(ho)o(w)f(the)f(fractions)h (of)g(pro)q(cessor)f(time)h(for)g(t)n(w)o(o)f(threads)h(whose)f(priority)h (di\013ers)0 712 y(b)o(y)f fo(e)86 719 y fd(i)117 712 y fv(will)i(di\013er.) 25 b(T)l(o)17 b(solv)o(e)g(for)f(the)h(actual)h(fractions,)e(w)o(e)h(note)g (that)f(they)h(m)o(ust)g(sum)g(to)f(the)h(n)o(um)o(b)q(er)g(of)0 769 y(pro)q (cessors,)e(and)g(obtain:)775 800 y fd(n)755 812 y fc(X)757 904 y fd(i)p fk (=1)823 793 y fc(\022)854 853 y fo(f)876 860 y fd(n)909 853 y fv(+)960 822 y (3)960 842 y 23 2 v 42 x(5)1006 822 y fo(e)1027 829 y fd(i)993 842 y 63 2 v 42 x fo(nP)1060 793 y fc(\023)1103 853 y fv(=)e fo(m)755 1009 y(f)777 1016 y fd (n)813 1009 y fv(=)866 978 y fo(m)866 998 y 40 2 v 872 1040 a(n)921 1009 y fg (\000)993 978 y fv(3)p fo(m)972 998 y 106 2 v 42 x fv(5)p fo(n)1022 1027 y fk (2)1041 1040 y fo(P)1109 956 y fd(n)1089 969 y fc(X)1091 1060 y fd(i)p fk(=1) 1157 1009 y fo(e)1178 1016 y fd(i)0 1125 y fv(This)18 b(solution)g(has)f(made) g(the)g(implicit)j(assumption)d(that)g(all)h(threads)f(are)f(executing.)27 b (T)l(o)17 b(c)o(hec)o(k)h(this)f(w)o(e)0 1182 y(imp)r(ose)c(the)f(b)r(oundary) h(condition)h(that)e(the)g(low)n(est)h(priorit)o(y)g(thread,)f fo(n)p fv(,)h (m)o(ust)g(obtain)g(some)f(pro)q(cessor)g(time)0 1238 y(and)j(derive)g(a)g (necessary)h(and)f(su\016cient)g(condition)h(on)g(the)f(priorit)o(y)g(elev)o (ations:)771 1335 y fo(m)771 1355 y 40 2 v 778 1397 a(n)826 1366 y fg(\000) 898 1335 y fv(3)p fo(m)877 1355 y 106 2 v 42 x fv(5)p fo(n)927 1384 y fk(2) 946 1397 y fo(P)1014 1313 y fd(n)994 1325 y fc(X)996 1417 y fd(i)p fk(=1)1062 1366 y fo(e)1083 1373 y fd(i)1110 1366 y fo(>)e fv(0)849 1509 y(5)849 1529 y 23 2 v 42 x(3)877 1539 y fo(nP)19 b(>)1019 1487 y fd(n)1000 1499 y fc(X)1002 1590 y fd(i)p fk(=1)1068 1539 y fo(e)1089 1546 y fd(i)0 1656 y fv(If)e(this)g (condition)h(is)g(violated,)f(one)g(or)g(more)f(of)g(the)h(lo)o(w)o(est)g(pri\ orit)o(y)g(threads)f(do)h(not)f(execute.)26 b(Solutions)0 1712 y(to)16 b(sp)r (eci\014c)i(cases)f(can)g(b)q(e)g(found)h(b)o(y)e(substituting)i(actual)f(v)n (alues.)25 b(F)l(or)17 b(t)n(w)n(o)g(threads)g(\()p fo(n)e fv(=)h(2\))g(di\ \013ering)i(in)0 1769 y(priorit)o(y)e(b)o(y)h(1)e(\()p fo(e)307 1776 y fk(1) 341 1769 y fv(=)g(1)p fo(;)21 b(e)469 1776 y fk(2)503 1769 y fv(=)15 b(0\))g (on)i(a)e(unipro)s(cessor)h(\()p fo(m)d fv(=)i(1\))h(with)g(the)g(Mac)o(h)g (sc)o(heduler)i(\()p fo(P)i fv(=)15 b(3)p fo(:)p fv(8\),)g(the)0 1825 y(resul\ ting)j fo(f)211 1832 y fd(i)242 1825 y fv(di\013er)g(b)o(y)f(ab)q(out)g(8%,)f (so)h(the)g(higher)h(priorit)o(y)f(thread)g(can)g(exp)r(ect)g(an)g(additional) i(8%)d(of)h(the)0 1882 y(pro)q(cessor)e(compared)g(to)g(the)g(lo)o(w)o(er)g (priorit)o(y)g(thread.)0 2003 y fq(2.2.5)55 b(Priorit)n(y)18 b(In)n(terface)0 2089 y fv(Mac)n(h)13 b(exp)q(orts)e(an)h(interface)g(that)f(allows)g(the)h (priorities)i(of)d(threads)h(to)g(b)q(e)g(con)o(trolled)h(b)o(y)f(application\ s.)21 b(The)0 2145 y(priorit)o(y)11 b(exp)r(orted)g(b)o(y)g(this)g(interface) f(is)i(the)f(base)g(priorit)o(y)g(for)g(the)g(calculations)h(discussed)h(prev\ iously)n(.)18 b(Eac)o(h)0 2202 y(thread)e(has)g(b)r(oth)g(a)f(priority)h(and) g(a)g(maxim)o(um)g(priority)l(.)23 b(The)16 b(priorit)o(y)g(m)o(ust)g(nev)o (er)g(b)r(e)g(greater)g(than)g(the)0 2258 y(maxim)o(um)f(priorit)o(y)l(,)g (and)g(the)g(maxim)o(um)g(priorit)o(y)g(can)g(only)g(b)r(e)g(decreased)g(b)o (y)g(unprivileged)j(applications.)0 2315 y(T)l(asks)e(also)g(ha)o(v)n(e)h(pri\ orities,)g(which)f(are)g(used)g(to)g(initialize)j(the)e(priorities)g(of)f(new\ ly)h(created)f(threads,)g(but)0 2371 y(the)e(interface)f(routine)i(that)e(c)o (hanges)h(a)g(task)g(priorit)o(y)g(includes)i(the)e(option)h(of)e(c)o(hanging) i(the)f(priorit)o(y)g(of)g(all)0 2428 y(threads)f(curren)o(tly)g(in)g(that)f (task.)19 b(A)13 b(newly)g(created)g(thread)g(inherits)h(its)f(initial)i(prio\ rit)o(y)e(from)f(its)g(task,)h(and)0 2484 y(its)18 b(initial)i(maxim)o(um)e (priorit)o(y)g(is)g(set)g(b)o(y)f(the)h(system.)28 b(T)l(asks)17 b(in)i(turn) f(inherit)h(their)f(priorit)o(y)g(from)f(their)0 2540 y(paren)o(ts)f(at)g(cre\ ation)h(time.)24 b(The)17 b(default)g(maxim)o(um)f(priority)g(for)g(threads)g (and)h(the)g(priorit)o(y)g(for)f(the)g(\014rst)0 2597 y(task)11 b(\(which)h (all)h(other)f(tasks)f(will)j(inherit)g(in)e(the)h(absence)g(of)e(c)o(hanges\ \))h(are)g(curren)o(tly)g(set)g(to)g(50)f(\(the)h(default)0 2653 y(priorit)o (y)17 b(v)m(alue)g(used)g(b)o(y)g(Unix\).)24 b(This)17 b(interface)f(is)h(des\ crib)r(ed)g(in)g(Section)h(6.3)d(and)i(App)r(endix)g(B,)g(b)q(ecause)0 2710 y (it)d(interacts)f(with)h(and)h(dep)r(ends)f(up)r(on)g(the)g(k)o(ernel)h(inter\ face)e(for)h(pro)q(cessor)g(allo)q(cation.)20 b(This)15 b(allo)o(ws)f(a)g(use\ r)0 2766 y(who)j(has)g(allo)q(cated)g(dedicated)i(pro)q(cessors)d(to)h(exerci\ se)h(complete)f(con)o(trol)g(o)o(v)n(er)g(the)g(sc)o(heduling)i(on)e(those)0 2823 y(pro)q(cessors)e(for)f(the)i(duration)f(of)g(the)g(allo)r(cation.)p eop %%Page: 20 31 bop 0 50 a fn(CHAPTER)15 b(2.)35 b(TIMESHARING)16 b(AND)f(THE)g(MA)o(CH)g (SCHEDULER)564 b fv(20)0 195 y fq(2.2.6)55 b(Managing)19 b(Con)o(text)f(Switc) n(hes)0 281 y fv(The)e(sc)n(heduler)h(utilizes)h(time)d(quan)o(ta)g(to)g(mini\ mize)i(the)f(n)o(um)n(b)r(er)f(of)g(con)o(text)g(switc)o(hes)g(it)h(causes.)k (When)c(a)0 337 y(pro)q(cessor)d(b)q(egins)h(to)e(run)h(a)f(thread,)h(that)f (thread)h(is)g(assigned)h(a)e(time)h(quan)o(tum.)19 b(P)o(erio)q(dic)14 b(clo) r(c)o(k)f(in)o(terrupts)0 394 y(decrement)h(this)i(quan)o(tum,)e(and)h(a)g (resc)n(heduling)i(c)o(heck)e(o)q(ccurs)g(when)g(the)g(quan)o(tum)g(expires)h (if)f(the)g(thread)0 450 y(do)q(es)20 b(not)f(stop)g(or)g(blo)r(c)o(k)g(b)r (efore)g(then.)33 b(This)21 b(resc)n(heduling)h(c)o(heck)d(causes)h(a)f(con)o (text)g(switc)o(h)h(if)g(there)f(is)0 507 y(another)d(thread)g(to)f(run)i(of) f(equal)h(or)e(higher)i(priority)l(,)f(otherwise)g(the)h(original)g(thread)f (con)o(tin)o(ues)h(running)0 563 y(with)g(a)g(new)g(quan)o(tum.)25 b(The)17 b (con)o(text)f(switc)o(h)h(mec)o(hanism)h(uses)f(an)g(AST)g(\(Async)o(hronous) g(System)f(T)l(rap\))0 620 y(to)c(a)o(v)o(oid)h(con)o(text)g(switc)o(hes)g (in)h(interrupt)e(service)i(routines.)20 b(An)13 b(AST)h(is)f(a)g(general)h (mec)o(hanism)f(that)g(allo)o(ws)0 676 y(an)19 b(in)o(terrupt)g(service)g(rou\ tine)h(to)e(force)g(the)h(curren)o(t)g(thread)g(to)f(trap)g(in)o(to)h(the)f (k)o(ernel)i(from)e(user)h(mo)q(de.)0 733 y(AST's)14 b(ma)n(y)h(b)q(e)g(direc\ tly)h(supp)r(orted)e(in)h(hardw)o(are,)f(implemented)h(en)o(tirely)g(in)h(sof\ t)n(w)n(are,)e(or)g(a)g(com)o(bination)0 789 y(of)e(the)h(t)o(w)n(o.)19 b(Pri\ orit)o(y)13 b(reductions)g(due)h(to)e(pro)q(cessor)g(usage)h(accum)o(ulated)g (during)h(a)f(thread's)f(\014rst)g(quan)o(tum)0 845 y(do)17 b(not)f(cause)h (con)o(text)g(switc)o(hes.)25 b(This)17 b(feature)g(reduces)g(the)g(n)o(um)o (b)r(er)f(of)h(con)o(text)f(switc)o(hes)h(for)g(load)g(and)0 902 y(usage)e (balancing)i(b)o(y)e(extending)h(the)f(time)h(p)q(erio)r(d)f(b)r(et)n(w)o(een) h(con)o(text)e(switc)o(hes.)71 958 y(An)k(additional)h(reduction)g(in)g(the)e (n)o(um)o(b)r(er)h(of)f(con)o(text)g(switc)o(hes)i(is)f(ac)o(hiev)o(ed)h(on)f (m)n(ultipro)r(cessors)g(b)o(y)0 1015 y(lengthening)k(the)e(quan)o(ta)f(when) i(the)f(n)o(um)o(b)q(er)g(of)g(runnable)h(threads)f(is)h(less)g(than)e(t)o (wice)i(the)f(n)o(um)o(b)q(er)g(of)0 1071 y(pro)q(cessors.)42 b(With)23 b(a)f (minimum)h(quan)o(tum)g(of)f(100)g(milliseconds,)27 b(eac)o(h)22 b(pro)q(cess\ or)h(on)g(a)f(10)g(pro)q(cessor)0 1128 y(mac)o(hine)16 b(with)g(11)f(runnable) i(threads)f(will)h(con)o(text)e(switc)o(h)h(10)f(times)h(a)f(second.)21 b(F)l (or)15 b(threads,)g(this)h(results)0 1184 y(in)h(10ms)f(t)o(ypical)i(duration) f(on)f(the)h(run)g(queue,)g(which)g(is)g(m)o(uc)o(h)g(smaller)g(than)g(the)f (corresp)q(onding)i(100ms)0 1241 y(v)m(alue)e(for)e(a)g(unipro)s(cessor)g(in) i(the)f(corresp)q(onding)g(situation)g(\(t)n(w)o(o)f(runnable)j(threads\).)i (Similar)d(reductions)0 1297 y(in)i(dw)o(ell)h(times)f(on)f(the)h(run)g(queue) g(o)q(ccur)g(in)h(an)n(y)f(situation)g(where)g(the)f(n)o(um)o(b)r(er)g(of)g (runnable)i(threads)e(is)0 1354 y(less)g(than)g(t)n(wice)h(the)e(n)o(um)o(b)r (er)g(of)g(pro)r(cessors;)g(for)g(more)g(threads,)h(the)f(maxim)o(um)h(con)o (text)f(switc)o(h)h(rate)f(on)0 1410 y(all)h(pro)q(cessors)g(yields)h(dw)n (ell)g(times)f(of)f(the)h(minimum)f(quan)o(tum)g(or)g(more.)24 b(Mac)n(h)17 b (reduces)g(the)f(n)o(um)o(b)r(er)g(of)0 1466 y(con)o(text)i(switc)o(hes)g(in) h(suc)o(h)g(cases)f(b)o(y)g(extending)i(quan)o(ta)d(so)h(that)g(the)g(exp)r (ected)g(time)h(on)f(the)g(run)h(queue)0 1523 y(is)f(the)g(minimum)g(quan)o (tum.)27 b(In)18 b(the)g(10)f(pro)q(cessors)g(and)h(11)f(threads)g(example,)i (a)e(quan)o(tum)h(of)f(1)g(second)0 1579 y(w)o(ould)c(b)r(e)g(used)g(to)g(ac) n(hieve)g(an)g(exp)r(ected)g(time)g(on)g(the)g(run)g(queue)h(of)e(100ms;)h (this)g(cuts)g(the)g(n)o(um)o(b)q(er)g(of)g(load)0 1636 y(balancing)j(con)o (text)f(switc)o(hes)g(b)o(y)g(a)g(factor)f(of)g(10.)19 b(Care)c(m)n(ust)g(b)r (e)g(tak)n(en)g(in)h(assigning)g(these)f(longer)h(quan)n(ta)0 1692 y(to)i(a)n (v)o(oid)h(bunching)g(of)f(the)g(pro)r(cessors.)29 b(In)19 b(this)g(example,) g(it)g(w)o(ould)g(b)r(e)f(p)r(ossible)h(to)f(assign)h(one)f(second)0 1749 y (quan)o(ta)d(to)f(all)j(of)d(the)i(pro)q(cessors)f(within)h(one)g(clo)r(c)o (k)f(p)q(erio)r(d)h(of)f(eac)n(h)h(other,)f(resulting)h(in)g(an)f(unacceptabl\ e)0 1805 y(w)o(ait)f(of)f(nearly)i(one)f(second)g(on)g(the)h(run)f(queue)h (for)e(at)h(least)g(one)g(thread.)19 b(The)14 b(sc)o(heduler)i(assigns)e(frac\ tions)0 1862 y(of)h(the)g(extended)h(quan)o(ta)f(\(instead)g(of)g(the)g(en)o (tire)h(quan)o(ta\),)e(as)h(needed)h(to)f(prev)o(en)o(t)g(this)g(b)r(eha)o (vior.)71 1918 y(Con)n(text)f(switc)o(hes)h(are)g(also)g(used)g(to)f(implemen) q(t)g(preemption)i(of)e(lo)o(w)o(er)g(priority)g(threads)h(when)g(higher)0 1975 y(priorit)o(y)20 b(threads)g(b)r(ecome)g(runnable.)35 b(Preemption)21 b (o)q(ccurs)f(immediately)i(on)e(a)g(unipro)r(cessor)g(where)g(an)0 2031 y(AST) d(is)g(requested)g(as)f(part)g(of)g(making)h(the)g(higher)g(priority)f(thread) h(runnable,)h(but)e(it)h(ma)o(y)f(tak)n(e)h(up)g(to)f(a)0 2087 y(clo)r(c)o (k)d(in)o(terrupt)g(p)q(erio)r(d)g(on)f(a)h(m)o(ultipro)r(cessor)f(if)i(anoth\ er)e(pro)q(cessor)h(m)n(ust)g(notice)g(the)g(presence)h(of)f(a)f(higher)0 2144 y(priorit)o(y)g(thread)g(on)g(a)f(run)h(queue.)20 b(Mac)n(h)12 b(do)q(es)g (not)g(use)g(interprocessor)g(interrupts)f(for)g(preemption)i(b)q(ecause)0 2200 y(they)j(ha)o(v)o(en't)f(b)r(een)h(necessary)h(to)e(ac)o(hiev)o(e)h(acce\ ptable)h(timesharing)g(b)r(eha)o(vior.)22 b(A)16 b(consequence)h(of)f(this)g (is)0 2257 y(that)e(the)h(sc)o(heduler)i(do)q(es)e(not)g(main)o(tain)g(data)f (structures)h(that)f(w)o(ould)i(p)q(ermit)f(the)g(e\016cient)g(identi\014cati\ on)0 2313 y(of)i(the)g(lo)o(w)o(est)g(priorit)o(y)h(pro)q(cessor)f(when)h(pre\ emption)g(is)g(needed.)27 b(The)18 b(use)f(of)g(interpro)q(cessor)g(in)o(terr\ upts)0 2370 y(for)e(preemption)h(is)g(exp)q(ected)g(to)f(b)q(e)h(added)g(in)g (the)f(future)h(as)e(Mac)o(h)h(ev)o(olv)o(es)h(to)e(include)k(supp)r(ort)c (for)h(some)0 2426 y(real-time)h(applications.)p eop %%Page: 21 32 bop 0 506 a fm(Chapter)34 b(3)0 714 y fp(Accurate)39 b(Usage)i(Timing)0 936 y fv(Accurate)13 b(usage)f(measuremen)o(ts)g(are)g(imp)r(ortan)n(t)g(to)g(b)q (oth)h(the)f(managemen)o(t)g(and)g(use)h(of)f(unipro)r(cessors)h(and)0 993 y (m)o(ultipro)r(cessors,)i(but)h(curren)o(t)g(statistical)g(measuremen)o(t)f (tec)o(hniques)j(pro)q(duce)e(inaccurate)h(and)f(distorted)0 1049 y(results.) k(The)14 b(Mac)o(h)g(timesharing)h(sc)n(heduler)h(uses)e(these)h(measuremen)o (ts)e(to)h(adjust)g(priorities)h(for)e(load)i(and)0 1106 y(usage)j(balancing;) i(inaccuracies)g(and)e(distortions)g(in)h(these)f(measuremen)o(ts)f(can)h(res\ ult)h(in)f(bad)g(balancing)0 1162 y(decisions.)34 b(Timing)20 b(information)f (is)h(also)f(of)g(vital)h(imp)r(ortance)f(for)g(measuring)g(the)g(p)r(erforma\ nce)g(of)g(ap-)0 1219 y(plication)g(programs)d(including)k(measures)d(suc)o (h)g(as)g(e\016ciency)h(and)g(sp)q(eedup.)27 b(Curren)o(t)17 b(statistical)g (timing)0 1275 y(tec)o(hniques)d(often)e(su\013er)f(from)h(accuracy)g(problem\ s)h(for)f(short)g(in)o(terv)m(als)h(and)f(exhibit)i(consistent)e(distortions) 0 1332 y(in)j(their)g(results.)20 b(These)14 b(problems)h(are)f(caused)g(b)o (y)g(the)h(use)f(of)g(clo)r(c)o(k)g(in)o(terrupts)g(to)g(collect)h(the)f(samp\ les)h(on)0 1388 y(which)g(the)g(measuremen)o(ts)g(are)g(based.)20 b(Impro)o (ving)c(these)f(measuremen)o(ts)g(requires)h(a)f(di\013eren)o(t)g(tec)o(hniqu\ e.)71 1445 y(This)d(c)o(hapter)f(describ)s(es)g(a)h(new)f(timestamp-based)h (tec)o(hnique)h(for)e(accurate)g(measuremen)o(t)h(of)f(execution)0 1501 y(tim\ e)17 b(that)f(has)h(b)r(een)g(dev)o(elop)r(ed)h(for)e(Mac)n(h.)25 b(The)18 b (resulting)g(measuremen)o(ts)e(are)h(far)f(more)g(accurate)h(than)0 1557 y (those)d(deriv)o(ed)h(from)e(statistical)i(timing)g(and)f(are)g(free)g(of)g (the)g(asso)q(ciated)g(distortions.)20 b(On)15 b(the)f(other)g(hand,)0 1614 y (there)e(is)g(an)f(additional)i(cost)e(in)h(o)o(v)o(erhead,)g(but)f(it)h(can) g(b)q(e)g(reduced)h(to)d(an)i(acceptable)g(level)g(b)o(y)g(careful)g(design)0 1670 y(and)g(implemen)q(tation.)18 b(An)12 b(imp)r(ortan)n(t)g(comp)q(onen)o (t)g(of)f(this)h(design)h(is)f(the)g(use)g(of)g(algorithms)g(for)f(concurren) o(t)0 1727 y(reading)i(and)g(writing)g(without)f(m)o(utual)h(exclusion)h(dev) o(elop)r(ed)f(b)o(y)f(Lamp)r(ort)g([30)o(,)g(31)o(].)19 b(Measuremen)o(ts)12 b (of)g(the)0 1783 y(Multimax)i(implementation)f(quan)o(tify)h(the)f(o)o(v)o (erhead)g(increase)i(caused)f(b)o(y)f(these)g(measurement)g(tec)n(hniques)0 1840 y(and)i(sho)o(w)g(that)f(it)i(is)g(small.)0 1983 y fl(3.1)70 b(Statistic\ al)20 b(Usage)j(Timing)0 2084 y fv(Statistical)16 b(timing)h(is)f(based)f(on) h(sampling)h(the)e(use)h(of)f(eac)o(h)h(pro)q(cessor)f(and)h(assuming)g(that) f(the)g(sample)h(is)0 2141 y(represen)o(tativ)o(e.)23 b(This)16 b(is)h(the)f (most)g(common)f(tec)o(hnique)j(for)d(measuring)i(pro)q(cessor)f(usage,)f(and) i(is)f(usually)0 2197 y(implemen)q(ted)g(b)o(y)f(a)h(clo)r(c)o(k)f(that)g(gen\ erates)h(in)o(terrupts)g(at)f(a)h(kno)n(wn)g(rate)f(\(100Hz)g(is)h(often)g (used\).)22 b(Co)q(de)16 b(in)0 2254 y(the)i(in)o(terrupt)f(handler)i(determi\ nes)f(what)f(w)n(as)h(in)o(terrupted)g(\(e.g.,)d(which)j(thread,)f(user)h(or) f(k)n(ernel)i(mo)q(de\))0 2310 y(and)c(c)o(harges)f(it)h(with)g(one)g(tic)o (k)g(of)f(usage)g(\(the)h(p)q(erio)r(d)g(since)h(the)e(last)h(in)o(terrupt,)f (10ms)g(for)g(a)h(100Hz)f(clo)r(c)o(k\).)0 2367 y(In)g(the)g(statistical)g (sense,)g(the)g(use)f(of)h(the)f(pro)q(cessor)h(is)g(sampled)g(b)o(y)g(eac)o (h)f(clo)r(c)o(k)h(in)o(terrupt;)g(o)n(v)o(er)f(reasonable)0 2423 y(p)r(erio) q(ds)k(of)g(time)g(the)g(samples)h(should)g(pro)n(vide)g(a)f(go)q(o)q(d)g(app\ ro)n(ximation)h(to)e(actual)h(usage)g(in)h(the)f(absence)0 2480 y(of)d(sampli\ ng)i(anomalies.)k(This)c(is)f(adequate)g(for)f(sc)o(heduling)j(purp)q(oses;)e (impro)o(v)n(ements)f(could)i(b)q(e)f(obtained)0 2536 y(from)h(more)h(accurat\ e)g(information,)g(but)g(a)g(large)g(n)o(um)o(b)q(er)g(of)g(successful)h(time\ sharing)g(systems)f(are)g(based)0 2593 y(on)e(this)h(tec)o(hnique.)71 2649 y (There)g(are)f(a)g(n)o(um)o(b)r(er)g(of)h(dra)n(wbac)o(ks)g(to)f(statistical) h(timing.)22 b(It)16 b(is)g(designed)h(for)e(measuring)h(long)g(term)0 2705 y (a)n(v)o(erages,)e(so)f(its)h(precision)i(for)d(short)g(term)g(measurements)g (is)h(limited)i(b)o(y)e(the)g(clo)r(c)o(k)g(in)o(terrupt)g(rate.)k(Man)o(y)0 2762 y(systems)13 b(ha)o(v)n(e)h(b)r(een)g(reducing)h(this)f(clo)r(c)n(k)g (interrupt)f(rate)g(to)g(reduce)h(o)n(v)o(erhead.)20 b(One)14 b(example)h(is) f(the)f(Mac)o(h)0 2818 y(implemen)q(tation)i(on)i(the)f(Encore)g(Multimax)h (whic)o(h)g(uses)f(a)g(clo)r(c)o(k)g(in)o(terrupt)g(rate)g(of)f(10Hz)h(instea\ d)h(of)f(the)951 2927 y(21)p eop %%Page: 22 33 bop 0 50 a fn(CHAPTER)15 b(3.)35 b(A)o(CCURA)l(TE)15 b(USA)o(GE)g(TIMING)960 b fv(22)0 195 y(usual)18 b(Unix)g(rate)f(of)f(100Hz.)26 b(Suc)o(h)18 b(reduct\ ions)g(cause)f(a)g(loss)g(of)g(precision)i(in)f(timing)g(measuremen)o(ts)f (and)0 252 y(lengthen)f(the)f(p)q(erio)r(d)g(o)n(v)o(er)g(whic)o(h)g(they)g (m)n(ust)g(b)r(e)f(a)o(v)o(eraged)g(to)g(attain)h(a)f(giv)o(en)h(degree)g(of) f(accuracy)m(.)19 b(These)0 308 y(measuremen)o(ts)g(are)h(of)f(no)h(use)g(in) h(measuring)f(times)g(that)f(are)g(on)h(the)g(order)g(of)f(a)g(few)h(seconds) g(or)g(less,)0 364 y(but)g(suc)o(h)g(measuremen)o(ts)f(are)h(of)f(great)g(imp) r(ortance)g(in)i(a)e(m)o(ultipro)r(cessor)g(b)r(ecause)h(it)g(ma)n(y)g(b)q (e)g(di\016cult)0 421 y(or)c(imp)r(ossible)i(to)e(reliably)i(repro)q(duce)g (short-term)d(sync)o(hronization)j(b)q(eha)o(vior)f(that)f(has)g(a)g(ma)s(jor) g(impact)0 477 y(on)g(p)r(erformance.)22 b(Statistical)17 b(timing)g(also)f (su\013ers)g(from)f(a)h(distortion)g(problem,)h(in)g(that)e(the)i(o)n(v)o(erh\ ead)f(of)0 534 y(the)j(clo)r(c)o(k)f(interrupt)g(routine)h(and)g(an)o(y)f(act\ ivities)i(synchronized)f(to)g(it)f(\(e.g.,)g(net)n(w)o(ork)g(proto)q(col)h (timeout)0 590 y(pro)q(cessing\))e(are)f(in)o(visible.)25 b(Such)16 b(activit\ ies)h(usually)h(complete)f(b)q(efore)f(the)g(next)h(clo)q(c)o(k)f(interrupt)g (and)g(are)0 647 y(therefore)k(nev)o(er)h(interrupted)f(and)h(sampled.)37 b (As)20 b(a)g(result,)i(the)f(time)g(consumed)g(b)o(y)g(suc)o(h)g(activities)g (is)0 703 y(hidden)c(in)f(the)g(time)g(c)o(harged)f(to)g(other)g(uses)h(of)f (the)g(pro)q(cessor,)g(resulting)h(in)h(a)e(consisten)o(t)g(o)o(v)o(erestimat\ ion)0 760 y(of)f(usage)h(times)g(b)o(y)f(sev)o(eral)h(p)r(ercen)o(t.)20 b(Thi\ s)15 b(e\013ect)f(can)h(b)r(e)g(aggra)m(v)n(ated)f(b)o(y)h(usage)f(patterns)h (that)f(happ)q(en)h(to)0 816 y(sync)o(hronize)d(with)f(the)f(clo)r(c)o(k)h (in)o(terrupt)f(frequency;)j(in)e(the)g(w)o(orst)e(cases,)i(the)g(resulting)h (usage)e(measuremen)o(ts)0 873 y(ma)n(y)18 b(b)q(ear)g(no)f(resem)o(blance)i (to)e(the)h(actual)g(usage)f(pattern)g([55)o(].)27 b(F)l(or)17 b(an)h(extreme) g(example)g(rep)r(orted)f(b)o(y)0 929 y(W)l(endorf)e([55)o(],)g(the)g(usage)g (times)h(measured)f(for)g(a)g(sp)q(ecially)j(constructed)d(pair)h(of)e(progra\ ms)g(di\013ered)j(from)0 985 y(the)e(actual)h(times)f(b)o(y)g(factors)f(of)h (more)g(than)g(20.)0 1129 y fl(3.2)70 b(Timestamp-Based)20 b(Usage)j(Timing)0 1230 y fv(Timestamp-based)13 b(timing)h(trac)n(ks)f(what)g(eac)o(h)g(pro)q (cessor)g(executes)g(and)g(accum)o(ulates)h(time)f(measuremen)o(ts)0 1287 y (accordingly)m(.)26 b(This)17 b(increases)h(b)r(oth)f(the)g(the)g(precision)i (and)e(accuracy)g(of)g(the)g(measuremen)o(ts,)f(in)i(part)f(b)o(y)0 1343 y (a)n(v)o(oiding)f(the)f(distortions)g(of)f(statistical)h(timing.)21 b(Timesta\ mp-based)15 b(timing)g(is)h(based)f(on)f(the)h(abstraction)0 1400 y(of)c(a)h fr(timer)p fv(,)g(which)g(is)g(similar)h(to)e(a)g(stop)o(w)n(atc)n(h.)19 b (A)12 b(timer)g(can)g(b)q(e)g(started)f(or)g(stopp)q(ed,)i(but)f(can)g(b)q (e)g(reset)g(after)0 1456 y(its)i(initialization.)22 b(T)m(o)13 b(accoun)o (t)h(for)f(all)i(pro)q(cessor)e(time,)i(the)f(timing)g(system)g(ensures)g(tha\ t)f(ev)o(ery)h(pro)q(cessor)0 1512 y(is)i(alw)o(a)n(ys)g(accum)o(ulating)g (time)g(on)f(exactly)h(one)g(timer.)k(Eac)o(h)c(thread)f(in)h(the)g(system)f (has)g(t)o(w)n(o)g(timers,)h(one)0 1569 y(for)i(user)g(mo)q(de)h(execution)g (and)g(one)f(for)g(system)g(mode)h(execution.)30 b(In)19 b(addition,)h(eac)o (h)f(pro)q(cessor)f(in)h(the)0 1625 y(system)h(has)g(at)f(least)h(one)h(timer) f(for)f(execution)j(that)d(do)q(es)h(not)g(o)q(ccur)h(in)g(a)e(thread)h(con)o (text)g(\(in)o(terrupt)0 1682 y(routines\);)d(more)f(than)g(one)h(of)f(these) g fr(kernel)h(timers)f fv(can)h(b)q(e)g(used)g(to)f(distinguish)i(among)e(the\ se)h(activities)0 1738 y(\(e.g.,)i(di\013eren)o(t)g(interrupts\).)31 b(Op)r (erating)20 b(system)f(co)q(de)g(is)h(resp)r(onsible)h(for)d(switc)o(hing)i (among)f(timers)g(to)0 1795 y(mak)n(e)d(sure)f(that)f(the)h(correct)g(timer)g (is)h(accum)o(ulating)g(time)f(for)g(eac)o(h)g(pro)q(cessor.)20 b(There)15 b (are)g(\014v)o(e)g(lo)r(cations)0 1851 y(in)h(the)f(op)r(erating)g(system)f (where)i(suc)o(h)f(switc)o(hes)h(m)o(ust)f(b)q(e)g(made:)56 1945 y(1.)22 b (In)17 b(resp)r(onse)g(to)f(a)h(trap,)f(fault,)i(or)e(system)h(call)h(from)e (user)h(mo)q(de:)24 b(switc)o(h)17 b(to)g(the)g(system)f(timer)h(for)114 2001 y(the)e(thread.)56 2095 y(2.)22 b(As)14 b(part)f(of)h(returning)g(to)g(user)g (mo)q(de)g(from)g(a)g(trap,)f(fault,)h(or)f(system)h(call:)21 b(switc)o(h)14 b (to)f(the)h(user)h(timer)114 2152 y(for)f(the)h(thread.)56 2246 y(3.)22 b(In) 15 b(resp)r(onse)g(to)g(an)g(in)o(terrupt:)20 b(switc)o(h)15 b(to)g(the)g(k)o (ernel)h(timer)g(for)e(the)h(interrupt.)56 2339 y(4.)22 b(As)13 b(part)h(of)f (returning)h(from)f(an)h(interrupt:)k(switc)o(h)c(bac)o(k)g(to)f(the)h(timer) g(that)f(w)n(as)h(running)h(b)q(efore)f(the)114 2396 y(in)o(terrupt.)56 2490 y (5.)22 b(As)15 b(part)f(of)h(a)g(con)o(text)g(switc)o(h:)20 b(switc)o(h)15 b (to)g(the)g(system)g(timer)g(for)g(the)g(new)g(thread.)0 2583 y(These)20 b (switc)o(hes)g(ensure)g(that)e(user)i(timers)f(accum)o(ulate)h(execution)h (time)f(in)g(user)f(mo)q(de,)i(system)e(timers)0 2640 y(accum)o(ulate)g(execu\ tion)g(time)f(in)h(system)f(mo)q(de,)h(and)f(k)o(ernel)h(timers)g(accum)o(ula\ te)f(k)o(ernel)h(o)o(v)n(erhead)g(time.)0 2696 y(Idle)e(time)e(is)h(accum)o (ulated)g(b)o(y)f(system)g(timers)g(for)g(the)g(idle)i(threads.)71 2753 y(The\ re)i(are)f(sev)o(eral)h(problems)h(that)e(ha)o(v)o(e)h(limited)i(the)e(use)g (of)f(timestamp-based)i(timing.)31 b(The)20 b(most)0 2809 y(serious)e(problem) h(is)g(that)e(man)o(y)g(hardw)o(are)h(implementations)g(do)g(not)g(pro)n(vide) h(a)f(source)g(of)f(timestamps.)p eop %%Page: 23 34 bop 0 50 a fn(CHAPTER)15 b(3.)35 b(A)o(CCURA)l(TE)15 b(USA)o(GE)g(TIMING)960 b fv(23)0 195 y(This)18 b(is)g(a)g(simple)h(omission)f(that)f(should)i(b)q (e)f(corrected)g(in)g(the)g(hardw)o(are,)f(as)h(it)g(is)g(relativ)o(ely)h(c)o (heap)f(and)0 252 y(easy)f(to)h(pro)n(vide)h(a)e(coun)o(ter)h(that)f(runs)g (at)g(some)h(kno)o(wn)f(clo)r(c)o(k)h(rate.)26 b(This)19 b(coun)o(ter)e(shoul\ d)i(b)q(e)f(pro)o(vided)0 308 y(in)h(a)f(page)g(of)f(memory)h(that)f(can)i (b)q(e)g(mapp)q(ed)f(into)g(applications)h(to)f(allo)o(w)g(them)g(to)g(obtain) g(timestamps)0 364 y(e\016ciently)189 348 y fk(1)209 364 y fv(.)32 b(Ev)o(en) 20 b(if)g(the)f(appropriate)g(hardw)o(are)g(supp)r(ort)g(is)g(present,)g(the) h(increased)g(accuracy)g(of)f(the)0 421 y(resulting)14 b(measuremen)o(ts)f (mak)n(es)g(them)g(more)g(complicated)i(to)d(manage.)19 b(Statistical)13 b (usage)g(timing)h(can)f(use)0 477 y(a)j(single)h(w)o(ord)e(of)h(memory)f(to)h (hold)h(the)f(accum)o(ulated)h(tic)o(k)f(coun)o(t,)f(and)i(can)f(rely)g(on)g (memory)g(subsystem)0 534 y(hardw)o(are)j(to)g(synchronize)h(accesses)h(from) e(m)n(ultiple)j(pro)r(cessors.)33 b(The)20 b(additional)i(precision)f(presen) o(t)f(in)0 590 y(timestamp-based)i(measuremen)o(ts)f(requires)h(that)f(more)g (than)g(one)h(w)n(ord)f(of)g(memory)g(b)r(e)g(used)h(to)f(hold)0 647 y(accum) o(ulated)15 b(time,)g(and)g(therefore)f(requires)h(soft)n(w)o(are)f(protocols) h(to)f(manage)g(concurrent)g(accesses)g(to)g(this)0 703 y(memory)l(.)34 b(The) 21 b(problem)g(is)f(comp)r(ounded)h(b)o(y)f(the)g(fact)g(that)f(co)q(de)i(to) e(up)r(date)h(timestamp-based)h(times)0 760 y(o)q(ccurs)g(in)g(critical)h(pat\ hs)e(of)g(the)g(k)o(ernel)h(suc)o(h)g(as)f(trap,)h(in)o(terrupt,)g(and)g(syst\ em)f(call)h(pro)q(cessing.)36 b(This)0 816 y(mak)n(es)17 b(p)r(erformance)f (a)g(paramoun)o(t)g(concern,)i(and)e(the)h(use)g(of)g(m)n(utual)h(exclusion)g (lo)r(c)o(king)f(\(e.g.,)e(test)i(and)0 873 y(set\))e(undesirable.)0 1016 y fl (3.3)70 b(The)22 b(Mac)n(h)h(Timing)e(F)-6 b(acilit)n(y)0 1117 y fv(The)21 b (Mac)n(h)g(op)q(erating)f(system)g(has)g(b)r(een)h(mo)q(di\014ed)h(to)d(incor\ p)s(orate)g(a)h(timestamp-based)h(usage)f(timing)0 1174 y(facility)e(for)f (the)h(reasons)f(noted)h(ab)q(o)o(v)o(e.)27 b(The)18 b(soft)n(w)o(are)f(probl\ ems)i(that)e(ha)o(v)n(e)h(limited)i(past)d(usage)h(of)f(this)0 1230 y(tec)o (hnique)i(ha)o(v)o(e)f(b)q(een)h(o)n(v)o(ercome)f(b)o(y)g(careful)h(design)g (and)f(implementation.)28 b(The)18 b(resulting)i(facility)e(uses)0 1287 y(no) f(m)o(ultipro)r(cessor)g(in)o(terlo)r(c)o(k)g(instructions)h(to)e(con)o(trol) h(access)h(to)e(its)i(stored)e(times,)i(and)f(is)h(optimized)g(to)0 1343 y (yield)h(short)d(co)q(de)i(paths)f(for)f(the)i(common)e(critical)j(op)q(erati\ ons.)26 b(Appropriate)17 b(hardw)o(are)g(supp)q(ort)g(is)g(still)0 1400 y(a)e (requirement.)21 b(The)16 b(initial)i(implementation)e(of)f(this)h(facility)g (w)n(as)f(done)h(for)f(the)h(Encore)g(Multimax,)g(and)0 1456 y(used)g(its)f (32-bit)g(free)h(running)g(microsecond)g(coun)o(ter)f(as)g(a)g(timestamp)g (source.)0 1578 y fq(3.3.1)55 b(Design)0 1664 y fv(The)19 b(design)h(of)f(Mac) n(h's)g(timestamp-based)g(timing)g(facilit)q(y)f(inv)o(olv)o(es)h(one)g(data) f(structure)h(with)g(four)g(op-)0 1720 y(erations,)e(the)h fr(timer)p fv(.)27 b(This)18 b(can)f(b)r(e)g(though)o(t)g(of)g(as)g(a)g(stop)o(w)n(atc)n(h;)i (at)e(an)n(y)h(time)f(it)h(is)g(either)g(running)h(and)0 1776 y(accum)o(ulati\ ng)12 b(time)g(or)f(stopp)q(ed.)19 b(When)12 b(restarted,)f(it)g(con)o(tinues) g(from)g(the)h(p)q(oin)o(t)f(at)g(which)g(it)h(w)o(as)f(stopp)q(ed.)0 1833 y (Eac)o(h)18 b(thread)h(has)g(a)f(timer)h(for)f(user)g(and)h(system)g(time,)g (and)g(in)g(addition,)i(the)d(k)o(ernel)i(has)e(one)h(or)f(more)0 1889 y(time\ rs)i(for)g(in)o(terrupt-related)g(activities.)36 b(A)o(t)20 b(an)n(y)g(time)h (there)f(is)g(exactly)h(one)f(timer)g(running)h(for)f(eac)o(h)0 1946 y(pro)q (cessor)14 b(in)i(the)f(system;)f(a)g(user)h(timer)f(if)h(the)g(pro)q(cessor) g(is)g(executing)g(a)g(thread)f(in)i(user)e(mo)q(de,)h(a)f(system)0 2002 y (timer)k(if)h(the)f(pro)q(cessor)g(is)h(executing)g(a)f(thread)g(in)h(k)o(ern\ el)g(mo)q(de,)g(or)f(a)g(k)o(ernel)h(timer)f(if)h(the)f(pro)q(cessor)g(is)0 2059 y(executing)e(an)e(interrupt)g(handler.)21 b(Idle)16 b(pro)q(cessors)f (accum)o(ulate)g(time)g(on)g(the)g(system)f(timer)h(for)f(their)h(idle)0 2115 y(thread.)35 b(A)20 b(timer)h(consists)f(of)g(t)o(w)n(o)g(w)o(ords)g(of)g(mem\ ory)f(to)h(hold)h(the)f(accum)o(ulated)h(time,)h(a)e(c)o(hec)o(k)h(\014eld)0 2172 y(used)16 b(to)e(a)n(v)o(oid)i(access)f(con\015icts,)g(and)g(a)g(timesta\ mp)g(\014eld)h(to)e(hold)i(the)f(timestamp)g(that)f(started)h(the)g(timer)0 2228 y(running.)25 b(Tw)n(o)16 b(w)o(ords)g(of)g(memory)f(are)i(needed)g(to)f (hold)h(the)g(accum)o(ulated)g(time)f(in)i(a)e(timer)g(b)r(ecause)h(one)0 2285 y(w)o(ord)e(o)o(v)o(er\015o)n(ws)h(to)q(o)f(quickly)m(.)22 b(F)l(or)16 b(a)f (common)h(case)g(of)g(microsecond)h(timestamps)e(and)h(32-bit)h(w)n(ords,)f (the)0 2341 y(o)n(v)o(er\015o)o(w)f(p)q(erio)r(d)g(for)g(one)g(w)o(ord)g(is)h (ab)q(out)f(70)f(minutes.)71 2397 y(There)h(are)g(four)g(basic)h(op)q(eration\ s)f(on)g(timers:)56 2491 y(1.)22 b fs(Start)p fv(.)e(Start)14 b(a)h(timer)h (running.)56 2585 y(2.)22 b fs(Up)q(date)p fv(.)f(Stop)15 b(a)g(timer)g(and)h (up)q(date)f(the)h(time)f(it)h(con)o(tains.)56 2679 y(3.)22 b fs(Normalize)p fv(.)e(Normalize)c(the)g(accum)o(ulated)f(time)h(v)m(alues.)0 2718 y 779 2 v 52 2775 a fj(1)69 2791 y ft(Mach's)c fb(devic)m(e)h(p)n(ager)f ft(can)h(b)q (e)g(use)h(to)f(implemen)q(t)f(this)i(mapping.)p eop %%Page: 24 35 bop 0 50 a fn(CHAPTER)15 b(3.)35 b(A)o(CCURA)l(TE)15 b(USA)o(GE)g(TIMING)960 b fv(24)56 195 y(4.)22 b fs(Read)p fv(.)e(Read)c(the)f(v)n(alue)h(in)g(a)e (timer.)0 282 y(The)h fs(Start)g fv(op)q(eration)f(is)h(used)g(during)h(the)e (b)r(o)q(ot)g(sequence)h(to)f(start)f(the)i(initial)h(timer)f(for)f(eac)o(h)g (pro)q(cessor.)0 339 y(Thereafter,)21 b(eac)o(h)f(trap,)h(trap)e(return,)i (interrupt,)g(in)o(terrupt)f(return,)h(and)g(con)o(text)e(switc)o(h)i(p)q(erf\ orms)f(an)0 395 y fs(Up)r(date)i fv(op)q(eration)g(on)f(the)h(curren)o(t)g (timer)f(and)h(a)g fs(Start)g fv(op)q(eration)g(on)f(a)g(new)h(one)g(using)g (the)g(same)0 452 y(timestamp.)j(This)17 b(com)o(bination)h(of)e fs(Up)r(date) h fv(and)g fs(Start)h fv(with)f(the)g(same)f(timestamp)h(is)g(called)i fs(Swi\ tc)o(h)p fv(.)0 508 y(T)l(raps)g(and)g(trap)g(returns)g(that)g(pro)q(ceed)h (from)e(system)h(mo)q(de)g(to)g(system)g(mo)q(de)g(a)o(v)n(oid)h(these)g(op)q (erations)0 565 y(b)r(ecause)11 b(they)h(do)f(not)g(c)o(hange)g(the)h(running) g(timer.)19 b(Interrupts)10 b(m)o(ust)h(b)r(e)g(disabled)i(when)f(switc)o(hin\ g)h(b)q(et)o(w)n(een)0 621 y(timers)18 b(to)f(mak)n(e)h(the)g fs(Switch)f fv (op)r(erations)g(atomic)h(so)f(that)h(the)f(inv)m(arian)o(t)h(of)f(one)h(time\ r)g(running)h(at)e(an)o(y)0 677 y(time)c(on)g(eac)o(h)g(pro)q(cessor)g(can)g (b)q(e)g(maintained.)19 b(The)14 b fs(Normalize)f fv(op)q(eration)g(mo)o(v)n (es)g(time)h(within)g(the)f(timer)0 734 y(b)r(et)n(w)o(een)j(\014elds)g(denom\ inated)g(in)g(di\013erent)f(time)g(units)h(\(e.g.,)e(seconds,)h(microseconds\ \))h(to)f(a)n(v)o(oid)g(o)o(v)o(er\015o)n(w.)0 790 y(It)i(is)g(inv)n(ok)o(ed) g(as)f(needed)j(b)o(y)d fs(Switch)g fv(op)r(erations.)24 b fs(Read)18 b fv (op)q(erations)e(are)h(used)g(in)h(user-inv)o(ok)n(ed)f(system)0 847 y(calls) f(to)f(read)g(the)g(v)m(alue)h(of)f(a)g(timer.)20 b(The)15 b(sc)o(heduler)i (uses)e(an)g(optimized)i(v)n(ersion)f(of)f fs(Read)p fv(,)g(called)i fs(Delta) 0 903 y fv(to)e(main)o(tain)g(the)g(usage)g(information)h(that)e(drives)h(the) g(sc)o(heduling)i(algorithm.)71 960 y(Times)f(are)f(stored)g(in)i(a)e(non-nor\ malized)j(format)c(using)i(units)h(appropriate)e(to)g(the)h(timestamp)g(sourc\ e)0 1016 y(to)i(mak)o(e)h(the)g fs(Switch)g fv(op)q(eration)g(as)g(fast)f(as) h(p)q(ossible.)33 b(The)20 b(non-normalized)g(format)e(p)r(ermits)h(the)g(lo) o(w)0 1073 y(order)e(w)o(ord)g(of)g(accum)o(ulated)h(time)g(to)f(hold)h(more) f(than)h(one)f(of)g(the)h(units)g(of)f(the)h(high)g(order)f(w)o(ord.)26 b(F)l (or)0 1129 y(example,)15 b(if)h(the)f(units)g(for)f(the)h(lo)o(w)g(and)g(high) h(order)e(w)o(ords)g(are)h(microseconds)g(and)g(seconds,)g(resp)r(ectiv)o(ely) m(,)0 1186 y(then)i(the)g(microsecond)g(w)o(ord)f(ma)n(y)h(hold)h(more)e(than) g(one)h(million)i(microseconds.)25 b(The)17 b(units)g(for)f(the)h(lo)o(w)0 1242 y(order)h(w)o(ord)g(are)h(c)o(hosen)g(to)f(matc)n(h)h(the)g(timestamp)f (source,)h(so)g(an)f fs(Up)r(date)h fv(inv)o(olv)o(es)f(a)h(subtraction)f(to) 0 1298 y(calculate)e(the)e(elapsed)h(time)g(and)g(an)f(addition)h(to)f(add)h (it)f(to)g(the)g(lo)o(w)g(order)h(w)n(ord)f(accum)o(ulated)h(time)g(\014eld;) 0 1355 y(no)h(con)o(v)n(ersion)h(or)e(normalization)h(op)r(erations)f(are)h (required.)23 b(Units)16 b(are)f(con)o(v)o(erted)h(if)g(needed)h(\(e.g.,)d (if)j(the)0 1411 y(timestamps)i(come)f(from)g(an)h(8MHz)g(clo)q(c)o(k,)h(divi\ sion)g(b)o(y)f(8)g(is)g(necessary\))g(b)o(y)f fs(Read)i fv(op)q(erations)f (b)q(ecause)0 1468 y(they)c(are)f(less)h(frequent)f(and)h(do)f(not)h(o)q(ccur) g(in)g(critical)h(paths.)k(The)15 b(sp)q(ecial)h fs(Delta)g fv(op)q(eration)f (used)g(b)o(y)g(the)0 1524 y(sc)o(heduler)f(do)r(es)f(not)f(p)r(erform)g(unit) i(con)o(v)o(ersion;)f(instead)h(the)f(sc)o(heduler)i(k)n(eeps)f(its)f(interna\ l)g(statistics)g(in)h(the)0 1581 y(same)j(units)h(as)f(the)h(hardw)n(are)f (timestamps.)27 b(Con)n(v)o(ersion)18 b(from)f(these)g(mac)o(hine)h(dep)r(end\ ent)f(units)h(o)q(ccurs)0 1637 y(in)f(the)g(sc)n(heduler's)h(priorit)o(y)e (up)r(date)g(calculations)i(via)f(shift)f(and)h(add)f(op)r(erations.)23 b(Up) 16 b(to)g(t)n(w)o(o)g(shifts)h(and)0 1694 y(an)g(add)g(can)g(b)q(e)g(con\014g\ ured)g(to)g(implement)g(an)n(y)g(desired)h(con)o(v)o(ersion)f(factor.)24 b (Normalization)17 b(o)n(v)o(erhead)g(is)0 1750 y(reduced)h(b)o(y)f(delaying)h (normalization)g(un)o(til)g(the)f(lo)o(w)g(order)g(w)o(ord)f(of)h(the)g(accum) o(ulated)h(time)g(exceeds)g(2)1910 1734 y fk(31)0 1807 y fv(\(for)12 b(32-bit) i(w)n(ords\);)f(this)h(is)g(ab)q(out)f(35)g(min)o(utes)h(of)f(accum)o(ulated) h(time)f(for)g(microsecond)h(timestamps.)19 b(This)0 1863 y(o)n(v)o(er\015o)o (w)g(is)g(c)o(hec)o(k)o(ed)g(b)o(y)g(eac)o(h)g fs(Up)q(date)h fv(op)q(eration\ ,)f(except)h(that)e(an)h fs(Up)q(date)h fv(caused)f(b)o(y)g(an)g(in)o(terrupt) 0 1919 y(defers)e(this)h(o)n(v)o(er\015o)o(w)f(c)o(hec)o(k)g(un)o(til)h(the)f (corresp)q(onding)h(interrupt)f(return)g(to)f(pro)o(vide)i(an)f(impro)o(v)n (ement)f(to)0 1976 y(interrupt)e(resp)r(onse)h(time.)71 2032 y(Con\015icting) g(write)f(accesses)g(to)f(timers)h(are)g(eliminated)i(b)o(y)e(restricting)g (write)g(op)r(erations)g(\()p fs(Switc)o(h)g fv(and)0 2089 y fs(Normalize)p fv (\))20 b(to)e(a)h(single)i(writer)e(for)f(eac)o(h)h(timer.)32 b(F)l(or)19 b (a)g(usage)g(timer)g(asso)q(ciated)h(with)f(a)g(thread,)h(the)0 2145 y(writer) c(is)h(that)e(thread.)23 b(F)l(or)16 b(k)o(ernel)h(timers,)f(this)h(is)g(ac)n (hieved)g(b)o(y)f(asso)q(ciating)h(eac)o(h)f(timer)g(with)h(a)f(sp)q(eci\014c) 0 2202 y(pro)q(cessor.)21 b(As)15 b(a)g(result,)h(k)o(ernel)g(timers)g(are)f (group)q(ed)h(in)g(arra)n(ys)g(with)g(one)f(timer)h(for)f(eac)o(h)g(pro)q(ces\ sor)h(on)f(a)0 2258 y(m)o(ultipro)r(cessor.)26 b(Curren)o(tly)m(,)17 b(a)h (single)h(set)e(of)g(k)o(ernel)h(o)o(v)n(erhead)g(timers)g(is)g(used,)g(but)g (di\013eren)o(t)g(sets)f(could)0 2315 y(b)r(e)g(associated)h(with)f(di\013ere\ nt)g(in)o(terrupts.)25 b(This)18 b(w)n(ould)g(yield)h(information)e(on)g(ho)o (w)g(m)n(uc)o(h)h(time)f(is)h(sp)q(en)o(t)0 2371 y(servicing)f(eac)n(h)f(in)o (terrupt)f(source)g(and)h(ho)o(w)f(that)f(time)i(is)f(distributed)i(among)d (the)i(pro)q(cessors.)71 2428 y(Read/write)h(con\015icts)h(are)f(simpli\014ed) j(b)o(y)d(de\014ning)h(the)g fs(Read)f fv(op)r(eration)g(so)f(that)h(most)f (con\015icts)i(are)0 2484 y(resolv)o(ed)f(b)o(y)g(hardw)o(are.)25 b(The)17 b fs(Read)h fv(op)q(eration)f(is)g(de\014ned)i(to)d(only)i(return)e(time)i(from) e(the)h(accum)o(ulated)0 2540 y(time)e(\014elds;)g(time)g(since)h(the)f(last) f fs(Start)h fv(op)q(eration)g(for)f(a)g(running)i(timer)e(is)h(ignored.)21 b (The)14 b(clo)r(c)o(k)h(in)o(terrupt)0 2597 y(rate)d(limits)h(the)g(resulting) g(inaccuracy;)h(for)d(a)h(100Hz)g(clo)r(c)o(k)g(rate,)g(no)g(more)g(than)g (10)g(milliseconds)j(will)f(elapse)0 2653 y(b)r(efore)i(the)h(next)h(ev)o(en) o(t)e(that)h(up)r(dates)f(a)h(running)h(timer)f(\(con)o(text)g(switc)o(h,)g (trap,)f(trap)h(return,)g(interrupt,)0 2710 y(interrupt)k(return\).)37 b(More) 21 b(accurate)g(v)m(alues)h(can)g(b)q(e)g(obtained)g(b)o(y)f(stopping)h(the)f (timer)g(\(e.g.,)h(susp)q(end)0 2766 y(the)d(corresp)r(onding)h(thread\))f (or)f(causing)i(an)g(ev)o(en)o(t)f(to)f(o)q(ccur)i(\(e.g.,)f(interprocessor)g (interrupt\))g(if)h(this)f(is)0 2823 y(imp)r(ortan)n(t.)j(This)17 b(de\014nit\ ion)h(of)e(the)g fs(Read)h fv(op)q(eration)f(mak)n(es)g(the)h(timestamp)f(\ \014eld)h(of)f(the)g(timer)g(priv)n(ate)p eop %%Page: 25 36 bop 0 50 a fn(CHAPTER)15 b(3.)35 b(A)o(CCURA)l(TE)15 b(USA)o(GE)g(TIMING)960 b fv(25)0 195 y(to)15 b(the)i fs(Start)f fv(op)q(eration,)g(remo)o(ving)g(it) h(from)e(participation)i(in)g(read/write)f(con\015icts.)23 b(The)16 b(v)n(ast) f(ma)r(jorit)o(y)0 252 y(of)j(read/write)g(con\015icts)h(are)g(with)f(an)h fs (Up)q(date)g fv(op)r(eration)f(on)g(the)h(write)f(side,)i(and)f(hence)g(only) g(inv)o(olv)o(e)0 308 y(the)e(lo)o(w)g(order)g(accum)o(ulated)h(time)f(\014el\ d.)27 b(The)17 b(memory)g(hardw)n(are)g(resolv)o(es)g(these)h(con\015icts)f (b)o(y)g(ordering)0 364 y(accesses)g(to)g(this)h(\014eld.)27 b(In)18 b(b)q (oth)f(cases,)g(the)g fs(Read)h fv(op)q(eration)f(returns)h(v)m(alid)g(data)f (b)q(ecause)h(the)f(order)g(of)0 421 y(the)e(accesses)h(determines)g(whether) f(the)h fs(Read)f fv(app)r(ears)g(to)f(ha)o(v)o(e)h(o)q(ccurred)h(b)q(efore)f (or)g(after)f(the)i fs(Up)q(date)p fv(.)71 477 y(Con\015icts)22 b(with)h(the) f fs(Normalize)h fv(op)q(eration)f(are)g(resolv)o(ed)h(b)o(y)f(a)g(bac)o(k)n (out)g(proto)q(col.)41 b(Because)23 b(the)0 534 y fs(Normalize)12 b fv(op)q (eration)g(writes)f(b)r(oth)g(accum)o(ulated)h(time)f(\014elds,)i(it)f(is)g (p)q(ossible)h(for)e(a)g(naiv)o(e)h fs(Read)g fv(op)q(eration)0 590 y(to)j (obtain)h(one)g(pre-normalization)g(v)n(alue)g(and)g(one)g(p)q(ost-normalizat\ ion)g(v)n(alue.)21 b(This)c(is)f(a)n(v)o(oided)h(b)o(y)e(using)0 647 y(the)k (c)o(hec)o(k)f(\014eld)i(to)e(implemen)q(t)g(a)g(bac)o(k)o(out)g(protocol)h (that)f(com)o(bines)h(features)f(of)g(Lamp)r(ort's)f(Tw)o(o-Digit)0 703 y(mon\ otonic)k(clo)r(c)o(k)g(algorithm[31)o(])g(and)h(his)f(solution)h(to)f(the)g (single)i(writer)e(case)g(of)g(the)g(readers/writers)0 760 y(problem[30].)26 b (The)17 b(c)o(heck)g(\014eld)i(holds)f(a)f(cop)o(y)g(of)g(the)h(high)g(order) f(accum)o(ulated)h(time)g(\014eld)h(of)e(the)g(timer.)0 816 y fs(Normalize)12 b fv(op)q(erations)f(write)h(the)f(normalized)i(accum)o(ulated)f(v)m(alues)g (in)g(the)f(order)g(c)o(heck-lo)o(w-high.)19 b fs(Read)0 873 y fv(op)q(eratio\ ns)14 b(read)f(the)h(\014elds)h(in)f(the)g(rev)o(erse)f(order,)h(high-low-c)o (hec)o(k,)g(and)g(test)f(to)g(see)g(if)i(the)e(high)i(and)f(c)n(heck)0 929 y (\014elds)19 b(matc)o(h.)28 b(No)18 b fs(Normalize)h fv(op)q(eration)g(could) g(ha)n(v)o(e)f(b)r(een)h(in)g(progress)e(if)i(they)f(matc)n(h)1667 913 y fk (2)1687 929 y fv(,)h(so)e(the)h(data)0 985 y(read)f(from)g(the)g(timer)g(is)h (v)m(alid.)27 b(If)18 b(the)f(high)h(and)f(c)o(heck)g(v)m(alues)h(don't)f(mat\ c)n(h,)h(the)f(v)m(alues)h(read)f(from)g(the)0 1042 y(timer)g(ha)o(v)o(e)g (b)q(een)h(corrupted)f(b)o(y)g(the)g fs(Normalize)h fv(\(the)f(lo)o(w)g(v)n (alue)g(corresp)r(onds)g(to)f(one)h(of)g(the)g(t)o(w)n(o)g(high)0 1098 y(v)m (alues,)g(but)f(it's)g(imp)r(ossible)h(to)e(tell)i(which)f(one\),)g(so)f(the) h fs(Read)h fv(op)q(eration)f(is)g(retried.)23 b(This)16 b(retry)g(alw)n(a)o (ys)0 1155 y(succeeds)g(b)r(ecause)g fs(Normalize)f fv(op)r(erations)g(are)g (infrequent.)71 1211 y(Figure)j(3.1)g(sho)n(ws)g(pseudo-co)r(de)h(for)f(the)g (ma)s(jor)f(timer)i(op)q(erations.)30 b(F)-5 b(or)18 b(simplicit)r(y)l(,)h (the)f(timestamp)0 1268 y(units)c(are)f(assumed)g(to)f(b)r(e)h(microseconds)h (\(the)f(base)g(unit)h(of)e(the)i fs(Read)f fv(op)q(eration\);)h(if)f(this)h (is)f(not)g(the)g(case,)0 1324 y(the)20 b fs(Read)h fv(co)q(de)f(w)o(ould)h (con)n(tain)g(additional)g(con)o(v)o(ersion)f(co)q(de)h(to)e(c)o(hange)h(unit\ s.)35 b(This)21 b(example)g(k)n(eeps)0 1381 y(the)d(high)s 14 2 v 14 w(bits)g (\014eld)h(of)e(the)h(timer)f(in)i(seconds)f(for)f(con)o(v)n(enience;)k fs (Normalize)d fv(op)q(erations)g(are)f(infrequent)0 1437 y(enough)d(that)f(c)o (ho)q(osing)h(the)g(unit)g(for)f(the)h(con)o(v)o(enience)h(of)e fs(Read)i fv (mak)n(es)f(sense.)20 b(The)13 b(actual)h(interface)f(used)0 1494 y(within)j (the)g(k)n(ernel)h(to)d(access)i(and)f(manipulate)h(the)g(timers)f(is)h(do)q (cumen)o(ted)g(in)g(App)r(endix)g(E.)71 1550 y(The)j(sc)o(heduler's)i fs(Delt\ a)f fv(op)r(eration)f(\(optimized)h fs(Read)p fv(\))g(uses)g(a)f(cop)o(y)g (or)g fr(snapshot)g fv(of)g(the)h(timer)f(to)0 1606 y(return)h(elapsed)g(time\ .)34 b(The)19 b(op)r(eration)g(compares)g(this)h(snapshot)g(to)f(the)g(curren\ t)g(timer)g(v)n(alue,)i(returns)0 1663 y(the)15 b(elapsed)h(time,)f(and)g(up) r(dates)g(the)g(snapshot.)k(An)c(e\016cien)q(t)f(implemen)q(tation)g(is)i(obt\ ained)f(b)o(y)g(observing)0 1719 y(that)g(the)h(high)g(order)g(\014eld)g(of)g (the)f(snapshot)h(will)h(usually)g(matc)n(h)f(the)g(timer;)g(only)g(the)f(low) g(order)g(\014elds)i(of)0 1776 y(the)h(timer)g(and)g(snapshot)g(are)g(in)o (v)o(olv)o(ed)h(in)f(most)g(instances.)29 b(The)18 b(implementation)g(reads)g (the)g(lo)o(w)g(\014eld,)0 1832 y(and)h(then)g(compares)g(the)g(high)g(\014el\ d)h(of)f(the)g(snapshot)f(with)h(the)g(c)o(heck)g(\014eld)h(of)e(the)h(timer.) 31 b(This)19 b(is)h(the)0 1889 y(high-low-c)o(hec)o(k)15 b(order)g(of)f(acces\ ses)h(used)g(b)o(y)g(a)f fs(Read)i fv(op)q(eration)e(except)i(that)e(the)g (high)i(v)m(alue)g(comes)f(from)0 1945 y(the)j(last)g(snapshot)f(instead)i (of)e(the)h(curren)o(t)g(op)q(eration.)28 b(If)18 b(the)g(high)h(v)m(alues)g (matc)n(h,)f(then)h(the)f(di\013erence)0 2002 y(in)f(low)f(v)m(alues)i(is)f (the)g(elapsed)g(time)g(and)g(the)g(new)g(snapshot)f(is)h(obtained)h(from)e (the)g(old)i(b)o(y)e(up)r(dating)h(the)0 2058 y(lo)o(w)d(\014eld.)21 b(If)14 b (the)g(high)g(v)n(alues)h(don't)e(matc)n(h,)h(a)g fs(Read)g fv(op)q(eration)g (is)h(p)q(erformed)f(to)f(obtain)h(a)g(new)g(snapshot)0 2115 y(from)k(which)h (the)h(elapsed)g(time)g(is)f(then)h(calculated.)33 b(This)20 b fs(Read)f fv (op)r(eration)g(is)g(o)o(v)o(erkill)i(in)f(the)f(curren)o(t)0 2171 y(system)e (b)r(ecause)h fs(Delta)h fv(op)q(erations)f(are)f(only)h(executed)h(b)o(y)f (the)f(thread)h(on)g(its)f(o)o(wn)h(timers)f(or)h(b)n(y)g(some)0 2227 y(other) 13 b(thread)f(when)i(the)f(target)f(is)h(kno)o(wn)g(not)f(to)h(b)q(e)g(runnin\ g;)i(in)e(b)r(oth)f(cases,)h fs(Normalize)h fv(op)q(erations)f(are)0 2284 y (implicitly)21 b(excluded.)28 b(The)18 b(p)r(erformance)f(impact)h(of)f(these) g fs(Read)h fv(op)r(erations)f(is)h(minimal)h(b)r(ecause)f(they)0 2340 y(only) 13 b(o)q(ccur)g(after)f fs(Normalize)h fv(op)q(erations,)g(whic)o(h)g(are)f (rare.)19 b(The)13 b(resulting)g(implemen)q(tation)f(is)h(extensible)0 2397 y (to)i(sc)n(hedulers)i(that)e(do)g(need)h(to)e(read)h(elapsed)i(times)e(from)g (running)h(threads.)0 2517 y fq(3.3.2)55 b(Relationship)18 b(to)g(Lamport)h (Clo)q(c)o(ks)0 2603 y fv(The)c(algorithms)f(used)h(in)g(Mac)n(h's)g(timing)g (facility)f(are)g(based)h(on)f(algorithms)g(develop)r(ed)h(b)o(y)f(Lamp)q(ort\ ,)g(but)0 2659 y(there)19 b(are)g(sev)o(eral)g(di\013erences)i(and)e(extensio\ ns.)33 b(Lamp)q(ort's)18 b(t)o(w)n(o-digit)i(monotonic)f(clo)r(c)o(k)g(algori\ thm[31)o(])0 2704 y 779 2 v 52 2761 a fj(2)69 2777 y ft(This)12 b(assumes)h (that)e(p)r(erformance)h(of)f(write)h(op)q(erations)h(cannot)f(b)r(e)f(reorde\ red)i(b)o(y)e(hardware.)17 b(F)l(or)12 b(hardw)o(are)g(that)g(violates)0 2823 y(this)g(assumption)i(\(e.g.,)d(PLUS[6]\),)g(fence)g(op)r(erations)i(m)o(ust) e(b)r(e)g(inserted)i(b)q(et)o(w)o(een)f(the)f(writes)h(p)q(erformed)g(b)o(y)g (the)g fa(Normalize)p ft(.)p eop %%Trailer eos end TeXDict begin bos 300 @start /fa df[<00000004000000000200000000020000 0000010000000000800000000040FFFFFFFFF8FFFFFFFFF8000000004000000000800000000100 000000020000000002000000000400>37 14 2 -3 42]33 dc dfe /fb df[<70F8F8F8F8F8F8 F8F8F8F8F8F8F8F8F8F870000000000070F8F8F870>5 28 9 0 24]33 dc[<030600078F00078F 00078F00078F00078F00078F007FFFC0FFFFE0FFFFE07FFFC00F1E000F1E000F1E000F1E000F1E 000F1E007FFFC0FFFFE0FFFFE07FFFC01E3C001E3C001E3C001E3C001E3C001E3C000C1800>19 28 2 0 24]35 dc[<3803007C07807C0780EE0F80EE0F00EE0F00EE1F00EE1E00EE1E00EE3E00 7C3C007C3C00387C0000780000780000F80000F00001F00001E00001E00003E00003C00003C000 07C0000783800787C00F87C00F0EE00F0EE01F0EE01E0EE01E0EE03E0EE03C07C03C07C0180380 >19 36 2 4 24]37 dc[<007000F001E003C007800F001E001C00380038007000700070007000 E000E000E000E000E000E000E000E0007000700070007000380038001C001E000F00078003C001 F000F00070>12 36 7 4 24]40 dc[<6000F00078003C001E000F000780038001C001C000E000 E000E000E00070007000700070007000700070007000E000E000E000E001C001C0038007800F00 1E003C007800F0006000>12 36 4 4 24]41 dc[<01C00001C00001C00001C000C1C180F1C780 F9CF807FFF001FFC0007F00007F0001FFC007FFF00F9CF80F1C780C1C18001C00001C00001C000 01C000>17 20 3 -4 24]42 dc[<00600000F00000F00000F00000F00000F00000F00000F0007F FFC0FFFFE0FFFFE07FFFC000F00000F00000F00000F00000F00000F00000F000006000>19 20 2 -4 24]43 dc[<1C3E7E7F3F1F070E1E7CF860>8 12 8 6 24]44 dc[<7FFF00FFFF80FFFF807F FF00>17 4 3 -12 24]45 dc[<000300000780000780000F80000F00001F00001E00001E00003E 00003C00007C0000780000780000F80000F00001F00001E00003E00003C00003C00007C0000780 000F80000F00000F00001F00001E00003E00003C00003C00007C0000780000F80000F00000F000 00600000>17 36 3 4 24]47 dc[<01F00007FC000FFE001F1F001C07003803807803C07001C0 7001C0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07001C0 7803C03803801C07001F1F000FFE0007FC0001F000>19 28 2 0 24]48 dc[<01800380038007 800F803F80FF80FB80438003800380038003800380038003800380038003800380038003800380 038003807FFCFFFE7FFC>15 28 5 0 24]49 dc[<183C7E7E3C180000000000000000183C7E7E 3E1E0E1C3C78F060>7 26 8 6 24]59 dc[<7FFFC0FFFFE0FFFFE0FFFFE0000000000000000000 000000FFFFE0FFFFE0FFFFE07FFFC0>19 12 2 -8 24]61 dc[<600000F00000FC00007E00003F 00001FC00007E00003F00001FC00007E00003F00001F80001F80003F00007E0001FC0003F00007 E0001FC0003F00007E0000FC0000F00000600000>17 24 3 -2 24]62 dc[21 28 1 0 24]69 dc[<01F1C003FDC00FFFC01F0FC01C03C03803C03801C07001C07001C0700000 E00000E00000E00000E00000E00000E00FF0E01FF0E00FF07001C07001C07003C03803C03803C0 1C07C01F0FC00FFFC003FDC001F1C0>20 28 2 0 24]71 dc[<7F07F0FF8FF87F07F01C01C01C 01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01FFFC01FFFC01FFFC01C01C01C01C01C 01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C07F07F0FF8FF87F07F0>21 28 1 0 24] 72 dc[<7FFF00FFFF807FFF0001C00001C00001C00001C00001C00001C00001C00001C00001C0 0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0 007FFF00FFFF807FFF00>17 28 3 0 24]73 dc[21 28 1 0 24]77 dc[<7E 07F0FF0FF87F07F01D81C01D81C01D81C01DC1C01CC1C01CC1C01CE1C01CE1C01CE1C01C61C01C 71C01C71C01C31C01C39C01C39C01C39C01C19C01C19C01C1DC01C0DC01C0DC01C0DC07F07C0FF 87C07F03C0>21 28 1 0 24]78 dc[<7FF800FFFE007FFF001C0F801C03801C03C01C01C01C01 C01C01C01C03C01C03801C0F801FFF001FFE001FFE001C0F001C07001C03801C03801C03801C03 801C03801C039C1C039C1C039C7F01F8FF81F87F00F0>22 28 1 0 24]82 dc[<03F3801FFF80 3FFF807C0F80700780E00380E00380E00380E000007000007800003F00001FF00007FE0000FF00 000F800003C00001C00000E00000E06000E0E000E0E001E0F001C0F80780FFFF80FFFE00E7F800 >19 28 2 0 24]83 dc[<7FFFF8FFFFF8FFFFF8E07038E07038E07038E0703800700000700000 700000700000700000700000700000700000700000700000700000700000700000700000700000 700000700000700007FF0007FF0007FF00>21 28 1 0 24]84 dc[23 28 0 0 24]85 dc[<7FFF00FFFF80FFFF807FFF00>17 4 3 4 24]95 dc[<1FE0003FF8007FFC00781E00 300E0000070000070000FF0007FF001FFF007F0700780700E00700E00700E00700F00F00781F00 3FFFF01FFBF007E1F0>20 20 3 0 24]97 dc[<7E0000FE00007E00000E00000E00000E00000E 00000E00000E3E000EFF800FFFC00FC1E00F80E00F00700E00700E00380E00380E00380E00380E 00380E00380F00700F00700F80E00FC1E00FFFC00EFF80063E00>21 28 0 0 24]98 dc[<01FE 0007FF001FFF803E0780380300700000700000E00000E00000E00000E00000E00000E000007000 007001C03801C03E03C01FFF8007FF0001FC00>18 20 3 0 24]99 dc[<001F80003F80001F80 00038000038000038000038000038003E3800FFB801FFF803C1F80380F80700780700380E00380 E00380E00380E00380E00380E00380700780700780380F803C1F801FFFF00FFBF803E3F0>21 28 2 0 24]100 dc[<01F00007FC001FFE003E0F00380780700380700380E001C0E001C0FFFFC0FF FFC0FFFFC0E000007000007001C03801C03E03C01FFF8007FF0001FC00>18 20 3 0 24]101 dc [<001F80007FC000FFE000E1E001C0C001C00001C00001C0007FFFC0FFFFC0FFFFC001C00001C0 0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0007FFF 007FFF007FFF00>19 28 1 0 24]102 dc[<01E1F007FFF80FFFF81E1E301C0E00380700380700 3807003807003807001C0E001E1E001FFC001FF80039E0003800001C00001FFE001FFFC03FFFE0 7801F0700070E00038E00038E00038E000387800F07E03F01FFFC00FFF8001FC00>21 31 1 11 24]103 dc[<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E000EFF800FFFC0 0FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0 0E00E07FC3FCFFE7FE7FC3FC>23 28 0 0 24]104 dc[<03800007C00007C00007C00003800000 00000000000000000000007FC000FFC0007FC00001C00001C00001C00001C00001C00001C00001 C00001C00001C00001C00001C00001C00001C00001C000FFFF00FFFF80FFFF00>17 29 4 0 24] 105 dc[21 28 1 0 24]107 dc[<7FE000FFE0007FE00000E00000E00000E000 00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000 00E00000E00000E00000E00000E00000E0007FFFC0FFFFE07FFFC0>19 28 2 0 24]108 dc[<7C E0E000FFFBF8007FFFF8001F1F1C001E1E1C001E1E1C001C1C1C001C1C1C001C1C1C001C1C1C00 1C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C007F1F1F00FFBFBF807F1F1F 00>25 20 -1 0 24]109 dc[<7E3E00FEFF807FFFC00FC1C00F80E00F00E00E00E00E00E00E00 E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC>23 20 0 0 24]110 dc[<01F0000FFE001FFF003E0F803803807001C07001C0E000E0E000E0E000E0E000E0 E000E0F001E07001C07803C03C07803E0F801FFF000FFE0001F000>19 20 2 0 24]111 dc[<7E 3E00FEFF807FFFC00FC1E00F80E00F00700E00700E00380E00380E00380E00380E00380E00380F 00700F00700F80E00FC1E00FFFC00EFF800E3E000E00000E00000E00000E00000E00000E00000E 00007FC000FFE0007FC000>21 30 0 10 24]112 dc[<7F87E0FF9FF07FBFF803F87803F03003 E00003C00003C0000380000380000380000380000380000380000380000380000380007FFE00FF FF007FFE00>21 20 1 0 24]114 dc[<07F7003FFF007FFF00780F00E00700E00700E007007C00 007FE0001FFC0003FE00001F00600780E00380E00380F00380F80F00FFFF00FFFC00E7F000>17 20 3 0 24]115 dc[<0180000380000380000380000380007FFFC0FFFFC0FFFFC0038000038000 0380000380000380000380000380000380000380000380400380E00380E00380E001C1C001FFC0 00FF80003E00>19 25 1 0 24]116 dc[<7E07E0FE0FE07E07E00E00E00E00E00E00E00E00E00E 00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E01E00F03E007FFFC03FFFE01FCFC> 23 20 0 0 24]117 dc[<7F8FF0FF8FF87F8FF01E03C00E03800E03800E038007070007070007 0700038E00038E00038E00038E0001DC0001DC0001DC0000F80000F800007000>21 20 1 0 24] 118 dc[21 20 1 0 24]119 dc[<3FFFF0 7FFFF07FFFF07001E07003C0700780000F00001E00003C0000F80001F00003C0000780000F0070 1E00703C0070780070FFFFF0FFFFF0FFFFF0>20 20 1 0 24]122 dc[<0007E0001FE0007FE000 780000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00001E0007F C000FF8000FF80007FC00001E00000E00000E00000E00000E00000E00000E00000E00000E00000 E00000E00000E000007800007FE0001FE00007E0>19 36 2 4 24]123 dc[<7C0000FF0000FFC0 0003C00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000F0 00007FC0003FE0003FE0007FC000F00000E00000E00000E00000E00000E00000E00000E00000E0 0000E00000E00000E00003C000FFC000FF00007C0000>19 36 2 4 24]125 dc dfe /fc df[< 000200000006000000060000000600000006000000060000000600000006000000060000000600 000006000000060000000600000006000000060000FFFFFFF0FFFFFFF000060000000600000006 000000060000000600000006000000060000000600000006000000060000000600000006000000 060000FFFFFFF0FFFFFFF0>28 32 3 1 35]6 dc[<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFF FFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003C0>16 18 3 -2 23]15 dc[26 36 4 7 35]21 dc[<0000020000000003000000 000300000000018000000000C000000000C00000000060007FFFFFF000FFFFFFFC000000000E00 000000038000000001F0000000007C00000000F000000003C000000007000000000C00FFFFFFF8 007FFFFFF0000000006000000000C0000000018000000001800000000300000000030000000002 0000>38 26 3 2 45]41 dc dfe /fd df[<0000000000200000000000600000000000C0000000 000180000000000300000000000600000000000C00000000001800000000003000000000006000 00000000C0000000000180000000000300000000000600000000000C0000000000180000000000 300000000000600000000000C0000000000180000000000300000000000600000000000C000000 0000180000000000300000000000600000000000C0000000000180000000000300000000000600 000000000C0000000000180000000000300000000000600000000000C000000000018000000000 0300000000000600000000000C0000000000180000000000300000000000600000000000C00000 000000800000000000>43 44 0 1 42]0 dc[<00000200000600000C00000C0000180000180000 300000300000600000600000C00000C0000180000180000300000300000600000600000C00000C 0000180000180000300000300000600000600000C00000C0000180000180000300000300000600 000600000C00000C0000180000180000300000300000600000600000C00000400000>23 44 -1 1 21]1 dc[<00010003000600060006000C000C000C0018001800180030003000300060006000 6000C000C000C00180018001800300030003000600060006000C000C000C001800180018003000 30003000600060006000C000C0004000>16 44 -1 1 14]2 dc[<0002001E007E01FE0FFEFFFE FFFE0FFE01FE007E001E0002>15 12 2 6 42]27 dc[<8000F000FC00FF00FFE0FFFEFFFEFFE0 FF00FC00F0008000>15 12 25 6 42]45 dc[<06000600060006000F000F000F001F801F803FC0 3FC07FE07FE07FE0FFF0>12 15 -6 -25 42]54 dc[12 15 -6 -2 42]63 dc[<800000000000C000000000006000 000000003000000000001800000000000C00000000000600000000000300000000000180000000 0000C000000000006000000000003000000000001800000000000C000000000006000000000003 000000000001800000000000C000000000006000000000003000000000001800000000000C0000 00000006000000000003000000000001800000000000C000000000006000000000003000000000 001800000000000C000000000006000000000003000000000001800000000000C0000000000060 00000000003000000000001800000000000C000000000006000000000003000000000001800000 000000C0000000000060000000000020>43 44 0 1 42]64 dc[<400000C00000600000600000 3000003000001800001800000C00000C000006000006000003000003000001800001800000C000 00C000006000006000003000003000001800001800000C00000C00000600000600000300000300 0001800001800000C00000C000006000006000003000003000001800001800000C00000C000006 000002>23 44 -1 1 21]65 dc[<4000C000C0006000600060003000300030001800180018000C 000C000C0006000600060003000300030001800180018000C000C000C000600060006000300030 0030001800180018000C000C000C00060006000600030001>16 44 -1 1 14]66 dc dfe /fe df[43 43 -41 41 83]16 dc[<00 000000006000000000006000000000006000000000006000000000006000000000006000000000 00600000000000C00000000000C00000000000C00000000000C00000000000C000000000018000 000000018000000000018000000000030000000000030000000000030000000000060000000000 0600000000000C00000000000C0000000000180000000000180000000000300000000000600000 000000600000000000C0000000000180000000000300000000000600000000000C000000000018 0000000000700000000000E0000000000380000000000F00000000003C0000000001F000000000 0FC000000001FE00000000FFF000000000FE0000000000>43 43 -41 0 83]17 dc[43 43 0 0 83]18 dc[<000000000FE00000 0000FFE000000007F0000000003F0000000000F80000000003C0000000000F00000000001C0000 000000300000000000E00000000001C0000000000300000000000600000000000C000000000018 0000000000300000000000600000000000600000000000C0000000000180000000000300000000 000300000000000600000000000600000000000C00000000000C00000000001800000000001800 000000001800000000003000000000003000000000003000000000006000000000006000000000 00600000000000600000000000C00000000000C00000000000C00000000000C00000000000C000 00000000C00000000000C00000000000>43 43 0 41 83]19 dc[76 76 -74 74 149]32 dc[<00000000000000000030000000000000000000 300000000000000000003000000000000000000030000000000000000000300000000000000000 003000000000000000000030000000000000000000300000000000000000003000000000000000 000060000000000000000000600000000000000000006000000000000000000060000000000000 0000006000000000000000000060000000000000000000C0000000000000000000C00000000000 00000000C0000000000000000000C0000000000000000000C00000000000000000018000000000 000000000180000000000000000001800000000000000000030000000000000000000300000000 000000000003000000000000000000060000000000000000000600000000000000000006000000 0000000000000C0000000000000000000C00000000000000000018000000000000000000180000 000000000000003000000000000000000030000000000000000000600000000000000000006000 0000000000000000C0000000000000000000C00000000000000000018000000000000000000300 000000000000000003000000000000000000060000000000000000000C0000000000000000000C 000000000000000000180000000000000000003000000000000000000060000000000000000000 60000000000000000000C000000000000000000180000000000000000003000000000000000000 060000000000000000000C00000000000000000018000000000000000000300000000000000000 0060000000000000000001C0000000000000000003800000000000000000060000000000000000 001C00000000000000000038000000000000000000E0000000000000000001C000000000000000 00070000000000000000001E00000000000000000078000000000000000001E000000000000000 00078000000000000000003E000000000000000001F800000000000000000FC000000000000000 01FE00000000000000007FF000000000000000FFFE0000000000000000FF800000000000000000 >76 76 -74 0 149]33 dc[76 76 0 0 149] 34 dc[<00000000000000001FF00000000000000007FFF0000000000000007FE0000000000000 0003F800000000000000001F800000000000000000FC000000000000000003E000000000000000 000F0000000000000000003C000000000000000000F0000000000000000003C000000000000000 00070000000000000000001C00000000000000000038000000000000000000E000000000000000 0001C00000000000000000030000000000000000000E0000000000000000001C00000000000000 00003000000000000000000060000000000000000000C000000000000000000180000000000000 000003000000000000000000060000000000000000000C00000000000000000018000000000000 000000300000000000000000006000000000000000000060000000000000000000C00000000000 000000018000000000000000000300000000000000000003000000000000000000060000000000 000000000C0000000000000000000C000000000000000000180000000000000000003000000000 0000000000300000000000000000006000000000000000000060000000000000000000C0000000 000000000000C00000000000000000018000000000000000000180000000000000000003000000 000000000000030000000000000000000600000000000000000006000000000000000000060000 000000000000000C0000000000000000000C0000000000000000000C0000000000000000001800 000000000000000018000000000000000000180000000000000000003000000000000000000030 000000000000000000300000000000000000003000000000000000000060000000000000000000 600000000000000000006000000000000000000060000000000000000000600000000000000000 0060000000000000000000C0000000000000000000C0000000000000000000C000000000000000 0000C0000000000000000000C0000000000000000000C0000000000000000000C0000000000000 000000C0000000000000000000C0000000000000000000>76 76 0 74 149]35 dc[84 85 -82 83 166]36 dc[<0000000000000000000010000000000000000000003000000000000000000000 300000000000000000000030000000000000000000003000000000000000000000300000000000 000000000030000000000000000000003000000000000000000000300000000000000000000030 000000000000000000006000000000000000000000600000000000000000000060000000000000 000000006000000000000000000000600000000000000000000060000000000000000000006000 000000000000000000C000000000000000000000C000000000000000000000C000000000000000 000000C00000000000000000000180000000000000000000018000000000000000000001800000 000000000000000180000000000000000000030000000000000000000003000000000000000000 000300000000000000000000060000000000000000000006000000000000000000000600000000 0000000000000C000000000000000000000C000000000000000000001800000000000000000000 180000000000000000000018000000000000000000003000000000000000000000300000000000 000000000060000000000000000000006000000000000000000000C000000000000000000000C0 000000000000000000018000000000000000000003000000000000000000000300000000000000 000000060000000000000000000006000000000000000000000C00000000000000000000180000 000000000000000030000000000000000000003000000000000000000000600000000000000000 0000C0000000000000000000018000000000000000000001800000000000000000000300000000 00000000000006000000000000000000000C000000000000000000001800000000000000000000 30000000000000000000006000000000000000000000C000000000000000000001800000000000 0000000003000000000000000000000E000000000000000000001C000000000000000000003000 000000000000000000E000000000000000000001C0000000000000000000030000000000000000 00000E000000000000000000003C000000000000000000007000000000000000000001C0000000 00000000000007800000000000000000001E00000000000000000000F800000000000000000003 E00000000000000000001F00000000000000000000FC0000000000000000000FE0000000000000 000000FF0000000000000000007FF00000000000000000FFFF000000000000000000FF80000000 000000000000>84 85 -82 0 166]37 dc[<4000000000000000000000C0000000000000000000 00C000000000000000000000C000000000000000000000C000000000000000000000C000000000 000000000000C000000000000000000000C000000000000000000000C000000000000000000000 C00000000000000000000060000000000000000000006000000000000000000000600000000000 000000000060000000000000000000006000000000000000000000600000000000000000000030 000000000000000000003000000000000000000000300000000000000000000030000000000000 000000003000000000000000000000180000000000000000000018000000000000000000001800 0000000000000000000C000000000000000000000C000000000000000000000C00000000000000 000000060000000000000000000006000000000000000000000600000000000000000000030000 000000000000000003000000000000000000000180000000000000000000018000000000000000 0000018000000000000000000000C000000000000000000000C000000000000000000000600000 000000000000000060000000000000000000003000000000000000000000180000000000000000 000018000000000000000000000C000000000000000000000C0000000000000000000006000000 000000000000000300000000000000000000030000000000000000000001800000000000000000 0000C000000000000000000000C000000000000000000000600000000000000000000030000000 00000000000000180000000000000000000018000000000000000000000C000000000000000000 0006000000000000000000000300000000000000000000018000000000000000000000C0000000 000000000000006000000000000000000000300000000000000000000018000000000000000000 000C000000000000000000000600000000000000000000038000000000000000000001C0000000 00000000000000600000000000000000000038000000000000000000001C000000000000000000 000700000000000000000000038000000000000000000000E00000000000000000000078000000 000000000000001C00000000000000000000070000000000000000000003C00000000000000000 0000F8000000000000000000003E0000000000000000000007C000000000000000000001F80000 00000000000000003F0000000000000000000007F800000000000000000000FFE0000000000000 00000007FFF80000000000000000001FF8>85 85 0 0 166]38 dc[<0000000000000000001FF8 000000000000000007FFF80000000000000000FFE0000000000000000007F80000000000000000 003F00000000000000000001F800000000000000000007C00000000000000000003E0000000000 0000000000F800000000000000000003C000000000000000000007000000000000000000001C00 0000000000000000007800000000000000000000E0000000000000000000038000000000000000 000007000000000000000000001C00000000000000000000380000000000000000000060000000 00000000000001C000000000000000000003800000000000000000000600000000000000000000 0C0000000000000000000018000000000000000000003000000000000000000000600000000000 0000000000C0000000000000000000018000000000000000000003000000000000000000000600 0000000000000000000C0000000000000000000018000000000000000000001800000000000000 00000030000000000000000000006000000000000000000000C000000000000000000000C00000 000000000000000180000000000000000000030000000000000000000003000000000000000000 0006000000000000000000000C000000000000000000000C000000000000000000001800000000 000000000000180000000000000000000030000000000000000000006000000000000000000000 6000000000000000000000C000000000000000000000C000000000000000000001800000000000 000000000180000000000000000000018000000000000000000003000000000000000000000300 000000000000000000060000000000000000000006000000000000000000000600000000000000 0000000C000000000000000000000C000000000000000000000C00000000000000000000180000 000000000000000018000000000000000000001800000000000000000000300000000000000000 000030000000000000000000003000000000000000000000300000000000000000000030000000 000000000000006000000000000000000000600000000000000000000060000000000000000000 00600000000000000000000060000000000000000000006000000000000000000000C000000000 000000000000C000000000000000000000C000000000000000000000C000000000000000000000 C000000000000000000000C000000000000000000000C000000000000000000000C00000000000 0000000000C0000000000000000000004000000000000000000000>85 85 0 83 166]39 dc[< 01E00007F8001FFE003FFF007FFF807FFF80FFFFC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC07FFF80 7FFF803FFF001FFE0007F80001E000>18 18 -9 9 17]115 dc dfe /ff df[<0C003C00CC000C 000C000C000C000C000C000C000C000C000C000C000C00FF80>9 16 2 0 15]49 dc[<1F006180 40C08060C0600060006000C00180030006000C00102020207FC0FFC0>11 16 1 0 15]50 dc[< 1F00218060C060C000C0008001800F00008000400060C060C060804060801F00>11 16 1 0 15] 51 dc[<0300030007000F000B001300330023004300C300FFE003000300030003001FE0>11 16 1 0 15]52 dc dfe /fg df[<03000700FF000700070007000700070007000700070007000700 07000700070007000700070007007FF0>12 21 2 0 18]49 dc[<0F8030E040708030C038E038 4038003800700070006000C00180030006000C08080810183FF07FF0FFF0>13 21 2 0 18]50 dc[<0FE030306018701C701C001C00180038006007E000300018000C000E000EE00EE00EC00C40 1830300FE0>15 21 1 0 18]51 dc[<00300030007000F001F001700270047008701870107020 704070C070FFFE0070007000700070007003FE>15 21 1 0 18]52 dc dfe /fh df[<0001FF81 FE00001FFFEFFF80007F80FF87C000FC00FE0FE001F801FE0FE003F801FC0FE007F001FC0FE007 F001FC07C007F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC 000007F001FC0000FFFFFFFFF800FFFFFFFFF800FFFFFFFFF80007F001FC000007F001FC000007 F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC 000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007 F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC00007FFF1FFF E0007FFF1FFFE0007FFF1FFFE000>43 42 1 0 40]11 dc[<0001FF803FE000001FFFE3FFF800 007F80FFF01E0000FE007F801F0001F800FF003F0003F801FF007F8007F001FE007F8007F001FE 007F8007F001FE007F8007F000FE003F0007F000FE001E0007F000FE00000007F000FE00000007 F000FE00000007F000FE000000FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF8007F000FE00 3F8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F0 00FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F 8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F000 FE003F8007F000FE003F8007F000FE003F8007F000FE003F807FFF0FFFE3FFF87FFF0FFFE3FFF8 7FFF0FFFE3FFF8>53 42 1 0 57]14 dc[<1C003E007F00FF80FF80FF807F003E001C00>9 9 5 0 19]46 dc[<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE00 00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00 00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE007FFFFE 7FFFFE7FFFFE>23 39 5 0 34]49 dc[<00FF800003FFF0000FFFFC001F03FE003800FF007C00 7F80FE003FC0FF003FC0FF003FE0FF001FE0FF001FE07E001FE03C003FE000003FE000003FC000 003FC000007F8000007F000000FE000000FC000001F8000003F0000003E00000078000000F0000 001E0000003C00E0007000E000E000E001C001C0038001C0070001C00FFFFFC01FFFFFC03FFFFF C07FFFFFC0FFFFFF80FFFFFF80FFFFFF80>27 39 3 0 34]50 dc[<007F800003FFF00007FFFC 000F81FE001F00FF003F80FF003F807F803F807F803F807F801F807F800F007F800000FF000000 FF000000FE000001FC000001F8000007F00000FFC00000FFF0000001FC0000007E0000007F0000 007F8000003FC000003FC000003FE000003FE03C003FE07E003FE0FF003FE0FF003FE0FF003FC0 FF007FC07E007F807C007F003F01FE001FFFFC0007FFF00000FF8000>27 39 3 0 34]51 dc[< 00000E0000001E0000003E0000007E000000FE000000FE000001FE000003FE0000077E00000E7E 00000E7E00001C7E0000387E0000707E0000E07E0000E07E0001C07E0003807E0007007E000E00 7E000E007E001C007E0038007E0070007E00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE0000 00FE000000FE000000FE000000FE000000FE000000FE000000FE00007FFFF8007FFFF8007FFFF8 >29 39 2 0 34]52 dc[<0C0003000F803F000FFFFE000FFFFC000FFFF8000FFFF0000FFFE000 0FFFC0000FFE00000E0000000E0000000E0000000E0000000E0000000E0000000E7FC0000FFFF8 000F80FC000E003E000C003F0000001F8000001FC000001FC000001FE000001FE018001FE07C00 1FE0FE001FE0FE001FE0FE001FE0FE001FC0FC001FC078003F8078003F803C007F001F01FE000F FFF80003FFF00000FF8000>27 39 3 0 34]53 dc[<0007F000003FFC0000FFFE0001FC0F0003 F01F8007E03F800FC03F801FC03F801F803F803F801F003F8000007F0000007F0000007F000000 FF000000FF0FC000FF3FF800FF707C00FFC03E00FFC03F00FF801F80FF801FC0FF001FC0FF001F E0FF001FE0FF001FE07F001FE07F001FE07F001FE07F001FE03F001FE03F001FC01F801FC01F80 3F800FC03F0007E07E0003FFFC0000FFF000003FC000>27 39 3 0 34]54 dc[<000003800000 000007C00000000007C0000000000FE0000000000FE0000000000FE0000000001FF0000000001F F0000000003FF8000000003FF8000000003FF80000000073FC0000000073FC00000000F3FE0000 0000E1FE00000000E1FE00000001C0FF00000001C0FF00000003C0FF80000003807F8000000780 7FC0000007003FC0000007003FC000000E003FE000000E001FE000001E001FF000001C000FF000 001FFFFFF000003FFFFFF800003FFFFFF80000780007FC0000700003FC0000700003FC0000E000 01FE0000E00001FE0001E00001FF0001C00000FF0001C00000FF00FFFE001FFFFEFFFE001FFFFE FFFE001FFFFE>47 41 2 0 52]65 dc[<00003FF001800003FFFE0380000FFFFF8780003FF007 DF8000FF8001FF8001FE00007F8003FC00003F8007F000001F800FF000000F801FE0000007801F E0000007803FC0000007803FC0000003807FC0000003807F80000003807F8000000000FF800000 0000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF 8000000000FF80000000007F80000000007F80000000007FC0000003803FC0000003803FC00000 03801FE0000003801FE0000007000FF00000070007F000000E0003FC00001E0001FE00003C0000 FF8000F800003FF007E000000FFFFFC0000003FFFF000000003FF80000>41 41 4 0 50]67 dc[ 45 41 3 0 53]68 dc[36 41 3 0 43]70 dc[47 41 3 0 54]72 dc[58 41 3 0 65]77 dc[<0000FFE000000007FFFC0000003FC07F8000007F001FC0 0001FC0007F00003F80003F80007F00001FC000FF00001FE001FE00000FF001FE00000FF003FC0 00007F803FC000007F807FC000007FC07F8000003FC07F8000003FC07F8000003FC0FF8000003F E0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF80 00003FE0FF8000003FE0FF8000003FE07F8000003FC07FC000007FC07FC000007FC03FC000007F 803FC000007F801FE00000FF001FE00000FF000FF00001FE0007F00001FC0003F80003F80001FC 0007F00000FF001FE000003FC07F8000000FFFFE00000000FFE00000>43 41 4 0 52]79 dc[< FFFFFFF800FFFFFFFF00FFFFFFFFC003FC003FE003FC000FF003FC0007F803FC0007FC03FC0003 FC03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC00 03FC03FC0007FC03FC0007F803FC000FF003FC003FE003FFFFFF8003FFFFFE0003FC00000003FC 00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003 FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000FFFFF00000 FFFFF00000FFFFF00000>39 41 3 0 47]80 dc[48 41 3 0 52]82 dc[<007F806003FFF0E007FFF9E00F807FE01F001FE03E0007E07C0003E07C0001E0FC00 01E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFE00007FFFE0003FFFFC001F FFFE000FFFFF8007FFFFC003FFFFE000FFFFE00007FFF000007FF000000FF8000007F8000003F8 600001F8E00001F8E00001F8E00001F8F00001F0F00001F0F80003F0FC0003E0FF0007C0FFE01F 80F3FFFF00E0FFFE00C01FF000>29 41 4 0 38]83 dc[<7FFFFFFFFFC07FFFFFFFFFC07FFFFF FFFFC07F803FC03FC07E003FC007C078003FC003C078003FC003C070003FC001C0F0003FC001E0 F0003FC001E0E0003FC000E0E0003FC000E0E0003FC000E0E0003FC000E0E0003FC000E000003F C0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC00000 00003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003F C0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC00000 00003FC0000000003FC00000007FFFFFE000007FFFFFE000007FFFFFE000>43 40 2 0 48]84 dc[68 41 1 0 71]87 dc[<01FF800007FFF000 0F81F8001FC07E001FC07E001FC03F000F803F8007003F8000003F8000003F8000003F80000FFF 8000FFFF8007FC3F800FE03F803F803F803F003F807F003F80FE003F80FE003F80FE003F80FE00 3F807E007F807F00DF803F839FFC0FFF0FFC01FC03FC>30 27 2 0 33]97 dc[33 42 2 0 38]98 dc[<001FF80000FFFE0003F01F0007E03F800FC03F 801F803F803F801F007F800E007F0000007F000000FF000000FF000000FF000000FF000000FF00 0000FF000000FF0000007F0000007F0000007F8000003F8001C01F8001C00FC0038007E0070003 F01E0000FFFC00001FE000>26 27 2 0 31]99 dc[<00003FF80000003FF80000003FF8000000 03F800000003F800000003F800000003F800000003F800000003F800000003F800000003F80000 0003F800000003F800000003F800000003F800001FE3F80000FFFBF80003F03FF80007E00FF800 0FC007F8001F8003F8003F8003F8007F0003F8007F0003F8007F0003F800FF0003F800FF0003F8 00FF0003F800FF0003F800FF0003F800FF0003F800FF0003F8007F0003F8007F0003F8007F0003 F8003F8003F8001F8003F8000F8007F80007C00FF80003F03BFF8000FFF3FF80003FC3FF80>33 42 2 0 38]100 dc[<003FE00001FFF80003F07E0007C01F000F801F801F800F803F800FC07F00 0FC07F0007C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF000000FF000000FF0000007F 0000007F0000007F0000003F8000E01F8000E00FC001C007E0038003F81F0000FFFE00001FF000 >27 27 2 0 32]101 dc[<0007F0003FFC00FE3E01F87F03F87F03F07F07F07F07F03E07F00007 F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F00007F00007F00007 F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007 F00007F00007F00007F0007FFF807FFF807FFF80>24 42 2 0 21]102 dc[<00FF81F003FFE7F8 0FC1FE7C1F80FC7C1F007C383F007E107F007F007F007F007F007F007F007F007F007F007F007F 003F007E001F007C001F80FC000FC1F8001FFFE00018FF800038000000380000003C0000003E00 00003FFFF8001FFFFF001FFFFF800FFFFFC007FFFFE01FFFFFF03E0007F07C0001F8F80000F8F8 0000F8F80000F8F80000F87C0001F03C0001E01F0007C00FC01F8003FFFE00007FF000>30 40 2 13 34]103 dc[33 42 3 0 38]104 dc[<07000FC01FE0 3FE03FE03FE01FE00FC007000000000000000000000000000000FFE0FFE0FFE00FE00FE00FE00F E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFE FFFE>15 43 3 0 20]105 dc[31 42 2 0 36]107 dc[15 42 3 0 20]108 dc[53 27 3 0 58]109 dc[33 27 3 0 38]110 dc[<003FE00001FFFC0003F07E000FC01F801F800FC03F800FE03F0007E07F00 07F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF 0007F87F0007F07F0007F03F800FE03F800FE01F800FC00FC01F8007F07F0001FFFC00003FE000 >29 27 2 0 34]111 dc[<001FC0380000FFF0780003F838F80007E00DF8000FC007F8001FC007 F8003F8003F8007F8003F8007F8003F8007F0003F800FF0003F800FF0003F800FF0003F800FF00 03F800FF0003F800FF0003F800FF0003F8007F0003F8007F0003F8007F8003F8003F8003F8001F 8007F8000FC007F80007E01FF80003F07BF80000FFF3F800003FC3F800000003F800000003F800 000003F800000003F800000003F800000003F800000003F800000003F800000003F80000003FFF 8000003FFF8000003FFF80>33 39 2 12 36]113 dc[24 27 2 0 28]114 dc[<03FE 300FFFF01E03F03800F0700070F00070F00070F80070FC0000FFE0007FFE007FFF803FFFE01FFF F007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F80038FC0070FF01E0F7FFC0C1FF 00>22 27 2 0 27]115 dc[<00700000700000700000700000F00000F00000F00001F00003F000 03F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007F00007F00007F00007F000 07F00007F00007F00007F00007F00007F03807F03807F03807F03807F03807F03803F03803F870 01F86000FFC0001F80>21 38 1 0 27]116 dc[ 33 27 3 0 38]117 dc[33 27 1 0 36]118 dc [47 27 1 0 50]119 dc[33 39 1 12 36]121 dc dfe /fi df[<00000007 C0000000000FC0000000000FC0000000001FC0000000003FC0000000007FC000000000FFC00000 0000FFC000000001FFC000000003FFC000000007FFC00000000FFFC00000000FFFC00000001EFF C00000003CFFC00000007CFFC0000000F8FFC0000000F0FFC0000001E0FFC0000003C0FFC00000 07C0FFC000000F80FFC000000F00FFC000001E00FFC000003C00FFC000007C00FFC00000F800FF C00000F000FFC00001E000FFC00003C000FFC00007C000FFC0000F8000FFC0000F0000FFC0001E 0000FFC0003C0000FFC0007C0000FFC000F80000FFC000FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFF FFC0FFFFFFFFFFC0000001FFC000000001FFC000000001FFC000000001FFC000000001FFC00000 0001FFC000000001FFC000000001FFC000000001FFC000000001FFC0000007FFFFFFC00007FFFF FFC00007FFFFFFC00007FFFFFFC0>42 55 3 0 49]52 dc[<04000000C00F800007C00FF8007F C00FFFFFFF800FFFFFFF000FFFFFFE000FFFFFFC000FFFFFF8000FFFFFF0000FFFFFE0000FFFFF 80000FFFFE00000FFFF800000F800000000F800000000F800000000F800000000F800000000F80 0000000F800000000F800000000F81FF00000F8FFFE0000FBFFFF8000FFE03FE000FF000FF000F C000FF800F80007FC00F00007FE00700007FF00000003FF00000003FF80000003FF80000003FF8 0000003FFC0000003FFC0600003FFC1F80003FFC3FC0003FFC7FE0003FFCFFE0003FFCFFF0003F FCFFF0003FFCFFF0003FF8FFE0003FF8FFE0003FF87FC0007FF07F00007FF03C00007FE03E0000 FFC01F0000FF800FC003FF0007F00FFE0003FFFFFC0001FFFFF000007FFFC000000FFC0000>38 57 5 1 49]53 dc[<00000FF80000007FFF000003FFFF80000FFC07C0001FE001E0003FC001F0 007F0007F000FF000FF001FE001FF803FC003FF807FC003FF80FFC003FF80FF8003FF81FF8001F F01FF8000FE03FF80007C03FF00000003FF00000007FF00000007FF00000007FF00000007FF07F F000FFF0FFFE00FFF1F7FF00FFF3807F80FFF6003FE0FFFE001FF0FFFC001FF0FFFC000FF8FFF8 000FFCFFF8000FFCFFF8000FFEFFF8000FFEFFF0000FFEFFF0000FFFFFF0000FFFFFF0000FFF7F F0000FFF7FF0000FFF7FF0000FFF7FF0000FFF7FF0000FFF3FF0000FFF3FF0000FFE3FF0000FFE 1FF0000FFE1FF8000FFC0FF8000FFC0FF8001FF807FC001FF003FC001FF001FE003FE000FF80FF C0007FFFFF00001FFFFE000007FFF8000000FFC000>40 57 4 1 49]54 dc[<0000001FFF0000 30000001FFFFE000F000000FFFFFFC01F000007FFFFFFE03F00001FFFE007F87F00003FFE0000F CFF0000FFF000003FFF0001FFC000001FFF0003FF80000007FF0007FF00000003FF000FFC00000 003FF001FFC00000001FF003FF800000000FF007FF000000000FF00FFF0000000007F00FFE0000 000007F01FFE0000000003F01FFE0000000003F03FFC0000000003F03FFC0000000001F03FFC00 00000001F07FFC0000000001F07FF80000000001F07FF80000000000007FF8000000000000FFF8 000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FF F8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000 FFF80000000000007FF80000000000007FF80000000000007FF80000000000007FFC0000000000 F03FFC0000000000F03FFC0000000000F03FFC0000000000F01FFE0000000000F01FFE00000000 01E00FFE0000000001E00FFF0000000001E007FF0000000003C003FF8000000003C001FFC00000 00078000FFE00000000F00007FF00000001F00003FF80000003E00001FFC0000007C00000FFF00 0001F8000003FFE00007F0000001FFFE003FC00000007FFFFFFF000000000FFFFFFC0000000001 FFFFF000000000001FFF000000>60 61 5 1 71]67 dc[<001FFF00000001FFFFF0000003FFFF FC000007F007FE00000FF801FF00001FFC00FF80001FFC007FC0001FFC007FE0001FFC003FE000 0FF8003FF0000FF8003FF00007F0003FF00001C0003FF0000000003FF0000000003FF000000000 3FF0000000FFFFF000000FFFFFF000007FF83FF00001FF803FF00007FE003FF0000FF8003FF000 1FF0003FF0003FE0003FF0007FE0003FF0007FE0003FF000FFC0003FF000FFC0003FF000FFC000 3FF000FFC0003FF000FFC0007FF0007FE0007FF0007FE000DFF0003FF0039FF8001FFC0F0FFFF0 07FFFE0FFFF001FFFC07FFF0003FE000FFF0>44 38 3 0 48]97 dc[<0001FFC000000FFFF800 003FFFFE0000FF80FF0001FE003F8007FC001FC00FF8000FE00FF8000FF01FF00007F03FF00007 F83FF00007F87FE00007F87FE00003FC7FE00003FC7FE00003FCFFE00003FCFFFFFFFFFCFFFFFF FFFCFFFFFFFFFCFFE0000000FFE0000000FFE0000000FFE00000007FE00000007FE00000007FE0 0000003FE00000003FF000003C1FF000003C1FF000003C0FF800007807FC0000F803FE0001F001 FF0007E000FFC03FC0003FFFFF000007FFFC000000FFE000>38 38 3 0 45]101 dc[<00FF0000 0000FFFF00000000FFFF00000000FFFF00000000FFFF0000000007FF0000000003FF0000000003 FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000 000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003 FF0000000003FF0000000003FF007FC00003FF01FFF80003FF07FFFC0003FF0F03FE0003FF1C01 FF0003FF3001FF8003FF6000FF8003FFE000FFC003FFC000FFC003FF8000FFC003FF8000FFC003 FF8000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000 FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003 FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000 FFC003FF0000FFC003FF0000FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFFFFFFFFFC3FFFFFFF FFFC3FFFFF>48 60 4 0 55]104 dc[<00FF01FF8000FFFF0FFFF000FFFF3FFFFC00FFFFFE03FF 00FFFFF000FF8003FFC0007FC003FF80003FE003FF00003FF003FF00001FF803FF00001FFC03FF 00000FFC03FF00000FFE03FF00000FFE03FF000007FE03FF000007FF03FF000007FF03FF000007 FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF 000007FE03FF000007FE03FF00000FFE03FF00000FFC03FF00000FFC03FF00001FF803FF00001F F803FF00003FF003FF80003FE003FFC0007FC003FFF001FF8003FFFC07FF0003FF3FFFFC0003FF 0FFFF00003FF01FF000003FF0000000003FF0000000003FF0000000003FF0000000003FF000000 0003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF 0000000003FF00000000FFFFFC000000FFFFFC000000FFFFFC000000FFFFFC000000>48 55 3 17 55]112 dc[<00FE03F000FFFE0FFE00FFFE1FFF00FFFE3C3F80FFFE707FC007FE60FFE003FE E0FFE003FEC0FFE003FFC0FFE003FF807FC003FF807FC003FF803F8003FF800E0003FF00000003 FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF000000 03FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF0000 0003FF00000003FF00000003FF00000003FF000000FFFFFE0000FFFFFE0000FFFFFE0000FFFFFE 0000>35 38 3 0 41]114 dc[<0007800000078000000780000007800000078000000F8000000F 8000000F8000000F8000001F8000001F8000003F8000003F8000007F800000FF800001FF800007 FF80001FFFFFF0FFFFFFF0FFFFFFF0FFFFFFF001FF800001FF800001FF800001FF800001FF8000 01FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF80 0001FF800001FF800001FF800001FF800001FF803C01FF803C01FF803C01FF803C01FF803C01FF 803C01FF803C01FF803C00FF807800FFC078007FC070003FE0E0001FFFC00007FF800001FF00> 30 55 2 0 38]116 dc dfe /fj df[<3078F87870>5 5 4 0 13]46 dc[<007F000183C00201 E00400F00700F00F00F00F01F00F01F00001E00001E00003C0000380000700000E0000F800000E 000007000007800007C00003C00007C03007C07807C0F807C0F807C0F00780800F00400E00201C 0018780007E000>20 31 3 1 23]51 dc[<0000600000600000E00001C00003C00005C0000DC0 0009C00011C000238000438000C380008380010380020380040700080700180700100700200700 400700FFFFF0000E00000E00000E00000E00000E00001C00001E0001FFE0>20 30 2 0 23]52 dc[<01803001FFE003FFC003FF0003FC00020000020000020000040000040000040000047C0005 87000603800C01800801C00001C00001E00001E00001E00001E07003C0F803C0F003C0E0038080 0780400700400E00201C0018700007C000>20 31 3 1 23]53 dc[<000F8000704000C0200180 E00301E00701E00E00C01E00001C00003C000038000078F800790E007A07007C0300F80380F803 80F003C0F003C0F003C0F003C0F00780E00780E00780E00700E00F00600E00701C003018001870 0007C000>19 31 4 1 23]54 dc[<000010000000180000003800000038000000780000007800 0000FC000001BC0000013C0000033C0000023C0000063C0000043E0000081E0000081E0000101E 0000101E0000201E0000200F0000400F0000400F0000FFFF0000800F0001000F80010007800200 07800200078004000780040007800C0007C03E0007C0FF807FFC>30 32 2 0 34]65 dc[<0001 F808000E061800380138007000F801E0007803C0007007800030078000300F0000301F0000301E 0000303E0000203C0000007C0000007C0000007C0000007C000000F8000000F8000000F8000000 F8000000F80000007800004078000080780000803C0000803C0001001C0002000E00020006000C 000300100001C0E000003F0000>29 33 5 1 33]67 dc[<07FFFF00007C01E0003C00F0003C00 780078003C0078003C0078001E0078001E0078001E0078001F00F0001F00F0001F00F0001F00F0 001F00F0001F00F0001F01E0001E01E0003E01E0003E01E0003E01E0003C01E0007C03C0007803 C000F003C000F003C001E003C003C003C0078007800F0007803C00FFFFE000>32 31 2 0 35] 68 dc[<07FFFFF8007C0078003C0038003C001800780018007800080078000800780008007800 080078080800F0100000F0100000F0100000F0300000FFF00000F0700001E0200001E0200001E0 200001E0200001E0000801E0001003C0001003C0001003C0002003C0002003C0006003C000C007 8001C0078007C0FFFFFF80>29 31 2 0 31]69 dc[<07FFFFF8007C0078003C0038003C001800 780018007800080078000800780008007800080078000800F0100000F0100000F0100000F03000 00F0700000FFF00001E0600001E0200001E0200001E0200001E0200001E0000003C0000003C000 0003C0000003C0000003C0000003C000000780000007C00000FFFE0000>29 31 2 0 30]70 dc[ <0001FC04000F030C003C009C0070007C00E0003C01C0003803800018078000180F0000181F00 00181E0000183E0000103C0000007C0000007C0000007C0000007C000000F8000000F8000000F8 007FFCF80003E0780001E0780001E0780003C0780003C03C0003C03C0003C01C0003C00E0007C0 07000B800380118001E06080003F8000>30 33 5 1 36]71 dc[<07FFC7FFC0007C00F800003C 007800003C007800007800F000007800F000007800F000007800F000007800F000007800F00000 F001E00000F001E00000F001E00000F001E00000FFFFE00000F001E00001E003C00001E003C000 01E003C00001E003C00001E003C00001E003C00003C007800003C007800003C007800003C00780 0003C007800003C007800007800F000007C00F8000FFF8FFF800>34 31 2 0 34]72 dc[<07FF E0007C00003C00003C0000780000780000780000780000780000780000F00000F00000F00000F0 0000F00000F00001E00001E00001E00001E00001E00001E00003C00003C00003C00003C00003C0 0003C00007800007C000FFFC00>19 31 1 0 16]73 dc[<07FFF000007E0000003C0000003C00 0000780000007800000078000000780000007800000078000000F0000000F0000000F0000000F0 000000F0000000F0000001E0000001E0000001E0000001E0000001E0008001E0010003C0010003 C0010003C0030003C0020003C0060003C0060007801E0007807C00FFFFFC00>25 31 2 0 28] 76 dc[<07FC0000FFC0007C0000F800003C00017800003C00017800004E0002F000004E0002F0 00004E0004F000004E0004F000004E0008F000004E0008F00000870011E00000870011E0000087 0021E00000870021E00000870041E00000838041E00001038083C00001038083C00001038103C0 0001038203C0000101C203C0000101C403C0000201C40780000201C80780000201C80780000201 D00780000200F00780000600E00780000600E00F00000F00C00F8000FFE0C1FFF800>42 31 2 0 42]77 dc[<07FC01FFC0003E003E00003E001800003E001800004F001000004F00100000478010 0000478010000043C010000043C010000083C020000081E020000081E020000080F020000080F0 20000080782000010078400001007C400001003C400001003C400001001E400001001E40000200 0F800002000F800002000F800002000780000200078000060003800006000300000F00010000FF E0010000>34 31 2 0 34]78 dc[<0003F800001E0E000038070000E0038001C001C003C001E0 078000E00F0000F00F0000F01E0000F01E0000F83E0000F83C0000F87C0000F87C0000F87C0000 F87C0000F8F80001F0F80001F0F80001F0F80001F0F80003E0780003E0780003C0780007C07C00 07803C000F003C001E001E001C000E0038000700F00003C3C00000FE0000>29 33 5 1 35]79 dc[<07FFFF00007C03C0003C01E0003C00F0007800F0007800F8007800F8007800F8007800F800 7800F000F001F000F001E000F003C000F0078000F00F0000FFF80001E0000001E0000001E00000 01E0000001E0000001E0000003C0000003C0000003C0000003C0000003C0000003C00000078000 0007C00000FFFC0000>29 31 2 0 31]80 dc[<07FFFC00007C0700003C03C0003C01E0007801 E0007801F0007801F0007801F0007801F0007801E000F003E000F003C000F0078000F00F0000F0 3C0000FFF00001E0300001E0380001E01C0001E01C0001E01C0001E01E0003C03E0003C03E0003 C03E0003C03E0003C03E0003C03E0207803E0407C01F04FFFC0F18000003E0>31 32 2 1 33] 82 dc[<003F040060CC01803C03801C03001C0700180600080E00080E00080E00080E00000F00 000F80000FE00007FE0003FF8001FFC0007FE00007E00001E00000E00000F00000F04000E04000 E04000E04000E06000C0600180E00380F80300C60C0081F800>22 33 3 1 25]83 dc[<3FFFFF F03C0780F03007803060078030400F0010400F0010C00F0010800F0010800F0010800F0010001E 0000001E0000001E0000001E0000001E0000001E0000003C0000003C0000003C0000003C000000 3C0000003C000000780000007800000078000000780000007800000078000000F0000001F80000 7FFFE000>28 31 6 0 33]84 dc[29 32 7 1 34]85 dc[32 31 6 0 34]89 dc dfe /fk df[<000001C00000078000001E00000078000001 E00000078000000E00000038000000F0000003C000000F0000003C000000F0000000F00000003C 0000000F00000003C0000000F0000000380000000E0000000780000001E0000000780000001E00 00000780000001C0>26 26 4 2 35]60 dc[26 26 4 2 35]62 dc dfe /fl df[<0000000003E000000000000000000007F0 00000000000000000007F00000000000000000000FF80000000000000000000FF8000000000000 0000000FF80000000000000000001FFC0000000000000000001FFC0000000000000000003FFE00 00000000000000003FFE0000000000000000007FFF0000000000000000007FFF00000000000000 00007FFF000000000000000000FFFF800000000000000000FFFF800000000000000001FFFFC000 00000000000001FFFFC00000000000000001FFFFC00000000000000003FFFFE000000000000000 03EFFFE00000000000000007EFFFF00000000000000007CFFFF00000000000000007C7FFF00000 00000000000FC7FFF8000000000000000F83FFF8000000000000001F83FFFC000000000000001F 03FFFC000000000000001F01FFFC000000000000003F01FFFE000000000000003E00FFFE000000 000000007E00FFFF000000000000007C007FFF00000000000000FC007FFF80000000000000F800 7FFF80000000000000F8003FFF80000000000001F8003FFFC0000000000001F0001FFFC0000000 000003F0001FFFE0000000000003E0001FFFE0000000000003E0000FFFE0000000000007E0000F FFF0000000000007C00007FFF000000000000FC00007FFF800000000000F800007FFF800000000 000F800003FFF800000000001F800003FFFC00000000001F000001FFFC00000000003FFFFFFFFF FE00000000003FFFFFFFFFFE00000000007FFFFFFFFFFF00000000007FFFFFFFFFFF0000000000 7FFFFFFFFFFF0000000000FC0000007FFF8000000000F80000003FFF8000000001F80000003FFF C000000001F00000003FFFC000000001F00000001FFFC000000003F00000001FFFE000000003E0 0000000FFFE000000007E00000000FFFF000000007C00000000FFFF000000007C000000007FFF0 0000000FC000000007FFF80000000F8000000003FFF80000001F8000000003FFFC0000001F0000 000003FFFC0000007FC000000001FFFC0000FFFFFFC00007FFFFFFFF80FFFFFFC00007FFFFFFFF 80FFFFFFC00007FFFFFFFF80FFFFFFC00007FFFFFFFF80FFFFFFC00007FFFFFFFF80>81 72 4 0 90]65 dc[<000000003FFE00000E0000000FFFFFC0001E0000007FFFFFF8003E000003FFFFFFFE 00FE00000FFFFFFFFF81FE00003FFFF800FFC3FE0000FFFF80000FF7FE0001FFFC000003FFFE00 07FFF0000001FFFE000FFFC00000007FFE001FFF800000003FFE003FFF000000001FFE007FFE00 0000000FFE00FFFC0000000007FE01FFF80000000007FE03FFF00000000003FE03FFF000000000 01FE07FFE00000000001FE07FFE00000000000FE0FFFC00000000000FE0FFFC000000000007E1F FFC000000000007E1FFF8000000000007E3FFF8000000000007E3FFF8000000000003E3FFF8000 000000003E7FFF8000000000003E7FFF0000000000003E7FFF000000000000007FFF0000000000 0000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FF FF00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF0000 0000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF0000000000 00007FFF000000000000007FFF000000000000007FFF000000000000007FFF8000000000003E3F FF8000000000003E3FFF8000000000003E3FFF8000000000003E1FFF8000000000003E1FFFC000 000000003E0FFFC000000000007C0FFFC000000000007C07FFE000000000007C07FFE000000000 00F803FFF00000000000F803FFF00000000001F801FFF80000000001F000FFFC0000000003E000 7FFE0000000007E0003FFF000000000FC0001FFF800000001F80000FFFC00000003F000007FFF0 000000FE000001FFFC000001FC000000FFFF80000FF80000003FFFF8007FF00000000FFFFFFFFF C000000003FFFFFFFF00000000007FFFFFFC00000000000FFFFFE00000000000003FFE000000> 71 73 7 1 86]67 dc[104 71 4 0 113]77 dc[69 71 4 0 81]80 dc[<00007FF0 0007000007FFFF000F00001FFFFFC01F00007FFFFFF03F0000FFFFFFFC7F0003FFC00FFEFF0007 FE0000FFFF0007FC00003FFF000FF000001FFF001FF0000007FF001FE0000003FF003FE0000001 FF003FC0000001FF007FC0000000FF007FC00000007F007FC00000007F00FFC00000003F00FFC0 0000003F00FFC00000003F00FFE00000003F00FFE00000001F00FFF00000001F00FFF80000001F 00FFFC0000001F00FFFF00000000007FFFC0000000007FFFFE000000007FFFFFE00000003FFFFF FF0000003FFFFFFFF000001FFFFFFFFC00001FFFFFFFFF00000FFFFFFFFFC00007FFFFFFFFE000 07FFFFFFFFF00003FFFFFFFFF80000FFFFFFFFFC00007FFFFFFFFE00003FFFFFFFFE00000FFFFF FFFF000001FFFFFFFF0000003FFFFFFF80000001FFFFFF800000000FFFFFC000000000FFFFC000 0000001FFFC0000000000FFFE00000000007FFE00000000003FFE07800000001FFE0F800000000 FFE0F800000000FFE0F8000000007FE0F8000000007FE0F8000000007FE0FC000000007FE0FC00 0000007FC0FC000000007FC0FE000000007FC0FE000000007F80FF00000000FF80FF80000000FF 80FFC0000000FF00FFE0000001FE00FFF8000003FE00FFFE000007FC00FFFF80000FF800FFFFFC 007FF000FE3FFFFFFFE000FC0FFFFFFF8000F803FFFFFF0000F0007FFFF80000E00003FFC00000 >51 73 7 1 66]83 dc[<0007FFFC000000007FFFFFC0000001FFFFFFF8000003FFFFFFFE0000 07FE001FFF000007FF0003FFC0000FFF8001FFE0000FFF8000FFF0000FFF80007FF0000FFF8000 7FF8000FFF80007FF80007FF00003FFC0007FF00003FFC0003FE00003FFC0000F800003FFC0000 0000003FFC00000000003FFC00000000003FFC00000000003FFC00000007FFFFFC000000FFFFFF FC000007FFFFFFFC00003FFFE03FFC0000FFFE003FFC0003FFF0003FFC0007FFC0003FFC000FFF 00003FFC001FFE00003FFC003FFC00003FFC007FF800003FFC007FF800003FFC00FFF000003FFC 00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000007FFC007FF800 00FFFC007FF80001EFFC003FFC0003EFFC003FFF0007CFFF000FFFC03F8FFFF807FFFFFF07FFFC 01FFFFFC03FFFC007FFFF001FFFC0003FF80007FF8>54 46 3 0 58]97 dc[<00001FFFC00000 00FFFFF8000007FFFFFE00001FFFFFFF80007FFC00FFC000FFE001FFC001FFC003FFE003FF8003 FFE007FF0003FFE00FFE0003FFE00FFE0003FFE01FFC0001FFC01FFC0001FFC03FFC0000FF803F FC00003E007FF8000000007FF8000000007FF800000000FFF800000000FFF800000000FFF80000 0000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FF F8000000007FF8000000007FF8000000007FFC000000003FFC000000003FFC000000001FFC0000 00F81FFE000000F80FFE000000F80FFF000001F007FF800003F003FFC00007E001FFE0000FC000 FFF0001F80007FFE00FF00001FFFFFFE000007FFFFF8000000FFFFE00000001FFE0000>45 46 4 0 53]99 dc[<00000000007FC00000000000FFFFC00000000000FFFFC00000000000FFFFC00000 000000FFFFC00000000000FFFFC0000000000003FFC0000000000001FFC0000000000001FFC000 0000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0 000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FF C0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001 FFC0000000000001FFC0000000000001FFC00000000FFC01FFC0000000FFFF81FFC0000007FFFF E1FFC000001FFFFFF9FFC000007FFC03FFFFC00000FFF0007FFFC00001FFC0001FFFC00003FF80 000FFFC00007FF000007FFC0000FFE000003FFC0000FFE000003FFC0001FFC000003FFC0001FFC 000003FFC0003FFC000003FFC0003FFC000003FFC0007FF8000003FFC0007FF8000003FFC0007F F8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000 FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC0 00FFF8000003FFC0007FF8000003FFC0007FF8000003FFC0007FF8000003FFC0003FF8000003FF C0003FFC000003FFC0003FFC000003FFC0001FFC000003FFC0001FFC000003FFC0000FFE000007 FFC00007FF00000FFFC00003FF00001FFFC00001FFC0003FFFC00000FFE000FFFFE000007FF807 FBFFFF80001FFFFFF3FFFF800007FFFFC3FFFF800001FFFF03FFFF8000001FF803FFFF80>57 72 4 0 66]100 dc[<00001FFE00000001FFFFE0000007FFFFF800001FFFFFFE00007FFC07FF0000 FFE001FF8001FFC0007FC003FF80003FE007FF00003FF00FFE00001FF01FFE00000FF81FFC0000 0FF83FFC00000FFC3FFC000007FC7FFC000007FC7FF8000007FC7FF8000007FE7FF8000007FEFF F8000007FEFFF8000007FEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFCFFF80000 0000FFF800000000FFF800000000FFF8000000007FF8000000007FF8000000007FFC000000003F FC000000003FFC000000003FFC0000001C1FFE0000003E0FFE0000003E07FF0000007E07FF0000 00FC03FF800001F801FFC00003F0007FF0001FE0003FFE00FFC0001FFFFFFF800007FFFFFE0000 00FFFFF80000000FFF8000>47 46 3 0 54]101 dc[<000000FFC000000007FFF80000003FFFFC 000000FFFFFF000001FFC1FF000007FF03FF80000FFC03FF80000FF807FFC0001FF807FFC0003F F007FFC0003FF007FFC0003FE003FF80007FE003FF80007FE001FF00007FE000FE00007FE00038 00007FE0000000007FE0000000007FE0000000007FE0000000007FE0000000007FE0000000007F E0000000007FE0000000007FE0000000007FE0000000FFFFFFFE0000FFFFFFFE0000FFFFFFFE00 00FFFFFFFE0000FFFFFFFE0000007FF0000000007FF0000000007FF0000000007FF0000000007F F0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF00000 00007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007F F0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF00000 00007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007F F0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF00000003FFFFFF800 003FFFFFF800003FFFFFF800003FFFFFF800003FFFFFF80000>42 72 3 0 36]102 dc[<000000 00001F8000007FF000FFE00007FFFF03FFF0001FFFFFC7FFF0007FFFFFFFC7F800FFE03FFE0FF8 01FF800FFC0FF803FF0007FE0FF807FE0003FF07F007FE0003FF07F00FFC0001FF81C00FFC0001 FF80000FFC0001FF80001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001F FC0001FFC0001FFC0001FFC0000FFC0001FF80000FFC0001FF80000FFC0001FF800007FE0003FF 000007FE0003FF000003FF0007FE000001FF800FFC000000FFE03FF8000001FFFFFFF0000001DF FFFFC0000003C7FFFF00000003C07FF000000007C0000000000007C0000000000007C000000000 0007C0000000000007E0000000000007F0000000000007F8000000000007FFFFFFF0000007FFFF FFFF000003FFFFFFFFE00003FFFFFFFFF80001FFFFFFFFFE0001FFFFFFFFFF0000FFFFFFFFFF80 007FFFFFFFFF8003FFFFFFFFFFC00FFFFFFFFFFFC01FF800001FFFE03FE0000001FFE07FC00000 007FF07FC00000003FF0FF800000001FF0FF800000001FF0FF800000001FF0FF800000001FF0FF 800000001FF07FC00000003FE07FC00000003FE03FE00000007FC03FF0000000FFC01FFC000003 FF800FFF00000FFF0003FFF000FFFC0000FFFFFFFFF000003FFFFFFFC0000007FFFFFE00000000 3FFFC00000>53 68 3 21 59]103 dc[<007FC00000000000FFFFC00000000000FFFFC0000000 0000FFFFC00000000000FFFFC00000000000FFFFC0000000000003FFC0000000000001FFC00000 00000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000 0000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0 000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FF C0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC001FFC0000001 FFC00FFFF8000001FFC03FFFFE000001FFC0FFFFFF000001FFC1FC07FF800001FFC3E003FFC000 01FFC7C001FFC00001FFCF0001FFE00001FFDE0000FFE00001FFDC0000FFE00001FFFC0000FFF0 0001FFF80000FFF00001FFF00000FFF00001FFF00000FFF00001FFF00000FFF00001FFE00000FF F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000 FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE000 00FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE0 0000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001 FFE00000FFF000FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0 FFFFFFC07FFFFFE0>59 72 4 0 66]104 dc[<00FC0001FF0003FF8007FFC00FFFC01FFFE01FFF E01FFFE01FFFE01FFFE01FFFE00FFFC007FFC003FF8001FF0000FC000000000000000000000000 00000000000000000000000000000000000000000000007FC0FFFFC0FFFFC0FFFFC0FFFFC0FFFF C003FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF C001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF C001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0FFFFFFFFFFFFFFFFFFFFFF FFFFFFFF>24 73 4 0 32]105 dc[<007FC000FFFFC000FFFFC000FFFFC000FFFFC000FFFFC000 03FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001 FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF C00001FFC00001FFC000FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF80>25 72 4 0 32]108 dc[<007FC001FFC00000FFE00000FFFFC00FFFF80007FFFC0000FFFFC03FFFFE001FFFFF0000FF FFC0FFFFFF007FFFFF8000FFFFC1FC07FF80FE03FFC000FFFFC3E003FFC1F001FFE00003FFC7C0 01FFC3E000FFE00001FFCF0001FFE78000FFF00001FFDE0000FFEF00007FF00001FFDC0000FFEE 00007FF00001FFFC0000FFFE00007FF80001FFF80000FFFC00007FF80001FFF00000FFF800007F F80001FFF00000FFF800007FF80001FFF00000FFF800007FF80001FFE00000FFF000007FF80001 FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE000 00FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF0 00007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007F F80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001 FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE000 00FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF0 00007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007F F80001FFE00000FFF000007FF80001FFE00000FFF000007FF800FFFFFFC07FFFFFE03FFFFFF0FF FFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0FFFFFFC0 7FFFFFE03FFFFFF0>92 46 4 0 99]109 dc[<007FC001FFC00000FFFFC00FFFF80000FFFFC03F FFFE0000FFFFC0FFFFFF0000FFFFC1FC07FF8000FFFFC3E003FFC00003FFC7C001FFC00001FFCF 0001FFE00001FFDE0000FFE00001FFDC0000FFE00001FFFC0000FFF00001FFF80000FFF00001FF F00000FFF00001FFF00000FFF00001FFF00000FFF00001FFE00000FFF00001FFE00000FFF00001 FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000 01FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF0 0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000 FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000FFFFFFC0 7FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0>59 46 4 0 66]110 dc[<00000FFF0000000000FFFFF000000007FFFFFE0000001FFFFFFF8000003FFC 03FFC00000FFE0007FF00001FF80001FF80003FF00000FFC0007FE000007FE000FFE000007FF00 0FFC000003FF001FFC000003FF803FFC000003FFC03FF8000001FFC03FF8000001FFC07FF80000 01FFE07FF8000001FFE07FF8000001FFE0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FF F8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001 FFF0FFF8000001FFF07FF8000001FFE07FF8000001FFE07FF8000001FFE07FF8000001FFE03FFC 000003FFC03FFC000003FFC01FFC000003FF801FFE000007FF800FFE000007FF0007FF00000FFE 0003FF80001FFC0001FFC0003FF80000FFE0007FF000007FFC03FFE000001FFFFFFF80000007FF FFFE00000000FFFFF0000000000FFF000000>52 46 3 0 59]111 dc[<007FC00FFC000000FFFF C07FFFC00000FFFFC3FFFFF00000FFFFCFFFFFFC0000FFFFDFF01FFF0000FFFFFF8007FF800003 FFFE0001FFC00001FFF80000FFE00001FFF00000FFF00001FFE000007FF80001FFE000003FFC00 01FFE000003FFC0001FFE000003FFE0001FFE000001FFE0001FFE000001FFF0001FFE000001FFF 0001FFE000001FFF0001FFE000000FFF0001FFE000000FFF8001FFE000000FFF8001FFE000000F FF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE00000 0FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF0001FFE000001FFF0001FFE000 001FFF0001FFE000001FFE0001FFE000001FFE0001FFE000003FFC0001FFE000003FFC0001FFE0 00007FF80001FFF000007FF80001FFF80000FFF00001FFFC0001FFE00001FFFE0003FFC00001FF FF0007FF800001FFFFE03FFE000001FFEFFFFFFC000001FFE3FFFFF0000001FFE0FFFF80000001 FFE01FF800000001FFE0000000000001FFE0000000000001FFE0000000000001FFE00000000000 01FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000000001FFE000000000 0001FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000 000001FFE00000000000FFFFFFC000000000FFFFFFC000000000FFFFFFC000000000FFFFFFC000 000000FFFFFFC000000000>57 66 4 20 66]112 dc[<00FF803F8000FFFF80FFF000FFFF83FF FC00FFFF87FFFE00FFFF8FC3FF00FFFF8F07FF0003FF9E0FFF8001FFBC0FFF8001FFB80FFF8001 FFF80FFF8001FFF00FFF8001FFF007FF0001FFF007FF0001FFE003FE0001FFE000F80001FFE000 000001FFE000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001 FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000 000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001 FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0000000FFFFFFE0 0000FFFFFFE00000FFFFFFE00000FFFFFFE00000FFFFFFE00000>41 46 4 0 49]114 dc[<000F FF00E0007FFFF3E001FFFFFFE007FFFFFFE00FF800FFE01FC0001FE03F80000FE03F000007E07F 000003E07F000003E0FF000003E0FF000003E0FF800003E0FFC0000000FFF0000000FFFE000000 FFFFF800007FFFFFC0007FFFFFF0003FFFFFFC001FFFFFFF000FFFFFFF8007FFFFFFC003FFFFFF E000FFFFFFF0003FFFFFF00003FFFFF800001FFFF8000000FFFC0000001FFC7800000FFCF80000 07FCF8000003FCFC000003FCFC000003FCFE000003F8FE000003F8FF000003F8FF800007F0FFC0 000FF0FFF0001FE0FFFC00FFC0FFFFFFFF80FC7FFFFE00F81FFFF800E003FF8000>38 46 4 0 47]115 dc[<0001F000000001F000000001F000000001F000000001F000000001F000000003F0 00000003F000000003F000000007F000000007F000000007F00000000FF00000000FF00000001F F00000003FF00000003FF00000007FF0000001FFF0000003FFF000000FFFFFFFC0FFFFFFFFC0FF FFFFFFC0FFFFFFFFC0FFFFFFFFC000FFF0000000FFF0000000FFF0000000FFF0000000FFF00000 00FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF000 0000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0 000000FFF0000000FFF0000000FFF001F000FFF001F000FFF001F000FFF001F000FFF001F000FF F001F000FFF001F000FFF001F000FFF001F0007FF001E0007FF803E0003FF803E0003FFC07C000 1FFE0F80000FFFFF800007FFFE000001FFFC0000001FF000>36 66 2 0 46]116 dc[<007FE000 003FF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE0 007FFFF00003FFE00001FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001 FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000 01FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF0 0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00001FFF00001FFE00001 FFF00001FFE00001FFF00001FFE00003FFF00000FFE00007FFF00000FFE0000F7FF000007FE000 1F7FF000007FF0003E7FF800003FFC00FC7FFFE0001FFFFFF87FFFE00007FFFFE07FFFE00001FF FF807FFFE000003FFE007FFFE0>59 46 4 0 66]117 dc[<7FFFFFC000FFFF807FFFFFC000FFFF 807FFFFFC000FFFF807FFFFFC000FFFF807FFFFFC000FFFF8000FFF000000FE00000FFF800000F C00000FFF800000FC000007FFC00000F8000007FFC00001F8000003FFC00001F0000003FFE0000 3F0000001FFE00003E0000001FFF00007E0000000FFF00007C0000000FFF8000FC00000007FF80 00F800000007FFC001F800000003FFC001F000000003FFE003F000000003FFE003F000000001FF F003E000000001FFF007E000000000FFF007C000000000FFF80FC0000000007FF80F8000000000 7FFC1F80000000003FFC1F00000000003FFE3F00000000001FFE3E00000000001FFF7E00000000 000FFF7C00000000000FFFFC00000000000FFFFC000000000007FFF8000000000007FFF8000000 000003FFF0000000000003FFF0000000000001FFE0000000000001FFE0000000000000FFC00000 00000000FFC00000000000007F800000000000007F800000000000003F000000000000003F0000 00000000003F000000000000003E000000000000007E000000000000007C00000000000000FC00 0000001F8000F8000000003FC001F8000000007FE001F000000000FFF003F000000000FFF003E0 00000000FFF007E000000000FFF00FC000000000FFF01F8000000000FFF03F80000000007FE07F 00000000007F43FE00000000003FFFF800000000001FFFF0000000000007FFC0000000000001FE 000000000000>57 66 2 20 63]121 dc dfe /fm df[<387CFEFEFE7C38>7 7 4 0 16]46 dc[ <00180000780001F800FFF800FFF80001F80001F80001F80001F80001F80001F80001F80001F8 0001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8 0001F80001F80001F80001F8007FFFE07FFFE0>19 32 4 0 28]49 dc[<03FC000FFF003C1FC0 7007E07C07F0FE03F0FE03F8FE03F8FE01F87C01F83803F80003F80003F00003F00007E00007C0 000F80001F00003E0000380000700000E01801C0180380180700180E00380FFFF01FFFF03FFFF0 7FFFF0FFFFF0FFFFF0>21 32 3 0 28]50 dc[<00FE0007FFC00F07E01E03F03F03F03F81F83F 81F83F81F81F03F81F03F00003F00003E00007C0001F8001FE0001FF000007C00001F00001F800 00FC0000FC3C00FE7E00FEFF00FEFF00FEFF00FEFF00FC7E01FC7801F81E07F00FFFC001FE00> 23 32 2 0 28]51 dc[<0000E00001E00003E00003E00007E0000FE0001FE0001FE00037E00077 E000E7E001C7E00187E00307E00707E00E07E00C07E01807E03807E07007E0E007E0FFFFFEFFFF FE0007E00007E00007E00007E00007E00007E00007E000FFFE00FFFE>23 32 2 0 28]52 dc[< 001F8000FFE003F07007C0F00F01F81F01F83E01F83E01F87E00F07C00007C0000FC0800FC7FC0 FCFFE0FD80F0FF00F8FE007CFE007CFC007EFC007EFC007EFC007E7C007E7C007E7C007E3C007C 3E007C1E00F80F00F00783E003FFC000FF00>23 32 2 0 28]54 dc[<00007000000000700000 0000F800000000F800000000F800000001FC00000001FC00000003FE00000003FE00000003FE00 000006FF000000067F0000000E7F8000000C3F8000000C3F800000183FC00000181FC00000381F E00000300FE00000300FE00000600FF000006007F00000E007F80000FFFFF80000FFFFF8000180 01FC00018001FC00038001FE00030000FE00030000FE000600007F000600007F00FFE00FFFF8FF E00FFFF8>37 34 2 0 42]65 dc[37 34 2 0 43]68 dc[ <0003FE0040001FFFC0C0007F00F1C001F8003FC003F0000FC007C00007C00FC00003C01F8000 03C03F000001C03F000001C07F000000C07E000000C07E000000C0FE00000000FE00000000FE00 000000FE00000000FE00000000FE00000000FE00000000FE000FFFFC7E000FFFFC7F00001FC07F 00001FC03F00001FC03F00001FC01F80001FC00FC0001FC007E0001FC003F0001FC001FC003FC0 007F80E7C0001FFFC3C00003FF00C0>38 34 3 0 44]71 dc[19 34 1 0 21]73 dc[32 34 2 0 38]80 dc[<01FC0407FF8C1F03FC3C007C7C003C78001C78001CF8000CF800 0CFC000CFC0000FF0000FFE0007FFF007FFFC03FFFF01FFFF80FFFFC03FFFE003FFE0003FF0000 7F00003F00003FC0001FC0001FC0001FE0001EE0001EF0003CFC003CFF00F8C7FFE080FF80>24 34 3 0 31]83 dc[<07FC001FFF803F07C03F03E03F01E03F01F01E01F00001F00001F0003FF0 03FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF87F07E03F>24 22 2 0 27]97 dc[<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000FC0000FC0000FC00 00FC0000FC0000FC00007C00007E00007E00003E00301F00600FC0E007FF8000FE00>20 22 2 0 25]99 dc[<0001FE000001FE0000003E0000003E0000003E0000003E0000003E0000003E000000 3E0000003E0000003E0000003E0000003E0001FC3E0007FFBE000F81FE001F007E003E003E007E 003E007C003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00 7C003E007C003E003E007E001E00FE000F83BE0007FF3FC001FC3FC0>26 35 2 0 31]100 dc[< 00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000 FC00007C00007C00007E00003E00181F00300FC07003FFC000FF00>21 22 2 0 26]101 dc[<00 3F8000FFC001E3E003C7E007C7E00F87E00F83C00F80000F80000F80000F80000F80000F8000FF FC00FFFC000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F 80000F80000F80000F80000F80000F80000F80007FF8007FF800>19 35 1 0 17]102 dc[<03FC 1E0FFF7F1F0F8F3E07CF3C03C07C03E07C03E07C03E07C03E07C03E03C03C03E07C01F0F801FFF 0013FC003000003000003800003FFF801FFFF00FFFF81FFFFC3800FC70003EF0001EF0001EF000 1EF0001E78003C7C007C3F01F80FFFE001FF00>24 33 2 11 28]103 dc[26 35 2 0 31]104 dc[<1C003F007F007F007F003F001C 000000000000000000000000000000FF00FF001F001F001F001F001F001F001F001F001F001F00 1F001F001F001F001F001F001F001F00FFE0FFE0>11 36 2 0 16]105 dc[11 35 2 0 16]108 dc[43 22 2 0 48]109 dc[26 22 2 0 31] 110 dc[<00FE0007FFC00F83E01E00F03E00F87C007C7C007C7C007CFC007EFC007EFC007EFC00 7EFC007EFC007EFC007E7C007C7C007C3E00F81F01F00F83E007FFC000FE00>23 22 2 0 28] 111 dc[26 32 2 10 31]112 dc[19 22 2 0 23]114 dc[<0FF3003FFF00781F00600700E0 0300E00300F00300FC00007FE0007FF8003FFE000FFF0001FF00000F80C00780C00380E00380E0 0380F00700FC0E00EFFC00C7F000>17 22 2 0 22]115 dc[<0180000180000180000180000380 000380000780000780000F80003F8000FFFF00FFFF000F80000F80000F80000F80000F80000F80 000F80000F80000F80000F80000F80000F81800F81800F81800F81800F81800F830007C30003FE 0000F800>17 32 1 0 22]116 dc[26 22 2 0 31]117 dc[27 22 1 0 30]118 dc dfe /fn df[<0000FE0200078186001C004C003800 3C0060003C00C0001C01C0001803800018070000180F0000181E0000101E0000103C0000003C00 000078000000780000007800000078000000F0000000F0000000F0000000F0000000F000008070 00008070000080700001003800010038000200180004000C001800060020000381C00000FE0000 >31 33 6 1 33]67 dc[<7FFC1FF807C003C00780010007800100078001000F0002000F000200 0F0002000F0002001E0004001E0004001E0004001E0004003C0008003C0008003C0008003C0008 0078001000780010007800100078001000F0002000F0002000F0002000F0004000F00040007000 80007001000030020000380400000C18000007E00000>29 32 9 1 34]85 dc[<00F1800389C0 0707800E03801C03803C0380380700780700780700780700F00E00F00E00F00E00F00E20F01C40 F01C40703C40705C40308C800F0700>19 20 4 0 23]97 dc[<07803F8007000700070007000E 000E000E000E001C001C001CF01D0C3A0E3C0E380F380F700F700F700F700FE01EE01EE01EE01C E03CE038607060E031C01F00>16 32 5 0 21]98 dc[<007E0001C1000300800E07801E07801C 07003C0200780000780000780000F00000F00000F00000F00000F0000070010070020030040018 380007C000>17 20 4 0 21]99 dc[<0000780003F80000700000700000700000700000E00000 E00000E00000E00001C00001C000F1C00389C00707800E03801C03803C03803807007807007807 00780700F00E00F00E00F00E00F00E20F01C40F01C40703C40705C40308C800F0700>21 32 4 0 23]100 dc[<007C01C207010E011C013C013802780C7BF07C00F000F000F000F0007000700170 023804183807C0>16 20 4 0 21]101 dc[<00007800019C00033C00033C000718000700000700 000E00000E00000E00000E00000E0001FFE0001C00001C00001C00001C00003800003800003800 00380000380000700000700000700000700000700000700000E00000E00000E00000E00000C000 01C00001C0000180003180007B0000F300006600003C0000>22 41 -2 9 14]102 dc[<003C60 00E27001C1E00380E00700E00F00E00E01C01E01C01E01C01E01C03C03803C03803C03803C0380 3C07003C07001C0F001C17000C2E0003CE00000E00000E00001C00001C00301C00783800F07000 60E0003F8000>20 29 2 9 21]103 dc[<01E0000FE00001C00001C00001C00001C00003800003 8000038000038000070000070000071E000763000E81800F01C00E01C00E01C01C03801C03801C 03801C0380380700380700380700380E10700E20700C20701C20700C40E00CC0600700>20 32 3 0 23]104 dc[<00C001E001E001C000000000000000000000000000000E003300230043804300 470087000E000E000E001C001C001C003840388030807080310033001C00>11 31 4 0 14]105 dc[<03C01FC0038003800380038007000700070007000E000E000E000E001C001C001C001C0038 003800380038007000700070007100E200E200E200E20064003800>10 32 4 0 12]108 dc[<1C 0F80F0002630C318004740640C004780680E004700700E004700700E008E00E01C000E00E01C00 0E00E01C000E00E01C001C01C038001C01C038001C01C038001C01C07080380380710038038061 00380380E100380380620070070066003003003800>33 20 4 0 37]109 dc[<1C0F802630C047 40604780604700704700708E00E00E00E00E00E00E00E01C01C01C01C01C01C01C038438038838 03083807083803107003303001C0>22 20 4 0 26]110 dc[<007C0001C3000301800E01C01E01 C01C01E03C01E07801E07801E07801E0F003C0F003C0F003C0F00780F00700700F00700E003018 0018700007C000>19 20 4 0 23]111 dc[<01C1E002621804741C04781C04701E04701E08E01E 00E01E00E01E00E01E01C03C01C03C01C03C01C0380380780380700380E003C1C0072380071E00 0700000700000E00000E00000E00000E00001C00001C0000FFC000>23 29 0 9 23]112 dc[<1C 1E002661004783804787804707804703008E00000E00000E00000E00001C00001C00001C00001C 0000380000380000380000380000700000300000>17 20 4 0 19]114 dc[<00FC030206010C03 0C070C060C000F800FF007F803FC003E000E700EF00CF00CE008401020601F80>16 20 3 0 19] 115 dc[<018001C0038003800380038007000700FFF007000E000E000E000E001C001C001C001C 003800380038003820704070407080708031001E00>12 28 4 0 15]116 dc[<0E00C03300E023 01C04381C04301C04701C08703800E03800E03800E03801C07001C07001C07001C07101C0E2018 0E20180E201C1E200C264007C380>20 20 4 0 24]117 dc[<0E03803307802307C04383C04301 C04700C08700800E00800E00800E00801C01001C01001C01001C02001C02001C04001C04001C08 000E300003C000>18 20 4 0 21]118 dc[<0E00C03300E02301C04381C04301C04701C0870380 0E03800E03800E03801C07001C07001C07001C07001C0E00180E00180E001C1E000C3C0007DC00 001C00001C00003800F03800F07000E06000C0C0004380003E0000>19 29 4 9 22]121 dc dfe /fo df[<000FF07F00007FF9FF8000F83FC7C001E07F8FC003E07F0FC007C07F0FC007C03F0780 07C01F000007C01F000007C01F000007C01F000007C01F0000FFFFFFF800FFFFFFF80007C01F00 0007C01F000007C01F000007C01F000007C01F000007C01F000007C01F000007C01F000007C01F 000007C01F000007C01F000007C01F000007C01F000007C01F000007C01F000007C01F00003FF8 FFF0003FF8FFF000>34 32 0 0 31]11 dc[<387CFEFEFE7C38000000000000387CFEFEFE7C38> 7 20 4 0 15]58 dc[<0000E000000000E000000001F000000001F000000001F000000003F800 000003F800000006FC00000006FC0000000EFE0000000C7E0000000C7E000000183F000000183F 000000303F800000301F800000701FC00000600FC00000600FC00000C007E00000FFFFE00001FF FFF000018003F000018003F000030001F800030001F800060001FC00060000FC000E0000FE00FF E00FFFE0FFE00FFFE0>35 31 2 0 40]65 dc[34 31 2 0 40]68 dc[36 31 2 0 41]72 dc[ 36 31 2 0 41]75 dc[36 31 2 0 41]78 dc[<03FC080FFF381E03F83800F8700078700038 F00038F00018F00018F80000FC00007FC0007FFE003FFF801FFFE00FFFF007FFF000FFF80007F8 0000FC00007C00003CC0003CC0003CC0003CE00038E00078F80070FE01E0E7FFC081FF00>22 31 3 0 29]83 dc[<07FC001FFF003F0F803F07C03F03E03F03E00C03E00003E0007FE007FBE01F03 E03C03E07C03E0F803E0F803E0F803E0FC05E07E0DE03FF8FE0FE07E>23 20 1 0 25]97 dc[< 01FE0007FF801F0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000FC0000FC0000FC0000 7C00007E00003E00603F00C01F81C007FF0001FC00>19 20 2 0 23]99 dc[<0007F80007F800 00F80000F80000F80000F80000F80000F80000F80000F80000F80000F801F8F80FFEF81F83F83E 01F87E00F87C00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00F87C00F87E00F83E 01F81F07F80FFEFF03F8FF>24 32 2 0 29]100 dc[<01FE0007FF800F83C01E01E03E00F07C00 F07C00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00003E00181E00180F807007FF E000FF80>21 20 1 0 24]101 dc[<01FC3C07FFFE0F079E1E03DE3E03E03E03E03E03E03E03E0 3E03E01E03C00F07800FFF0009FC001800001800001C00001FFF800FFFF007FFF81FFFFC3C007C 70003EF0001EF0001EF0001E78003C78003C3F01F80FFFE001FF00>23 30 1 10 26]103 dc[< FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0FC0 1F3FE01F61F01FC0F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8 1F00F81F00F81F00F81F00F8FFE3FFFFE3FF>24 32 3 0 29]104 dc[<1C003E003F007F003F00 3E001C00000000000000000000000000FF00FF001F001F001F001F001F001F001F001F001F001F 001F001F001F001F001F001F00FFE0FFE0>11 33 2 0 14]105 dc[24 32 2 0 28]107 dc[11 32 2 0 14]108 dc[39 20 3 0 44]109 dc[24 20 3 0 29]110 dc[<01FF0007FFC01F83F03E00F83E00F87C007C7C007CFC007EFC007EFC007EFC007EFC007EFC 007E7C007C7C007C3E00F83E00F81F83F007FFC001FF00>23 20 1 0 26]111 dc[24 29 2 9 29]112 dc[18 20 2 0 22]114 dc[<0FE63FFE701E600EE006E006F800FFC07FF83FFC1FFE03FE001FC007C007E0 07F006F81EFFFCC7F0>16 20 2 0 21]115 dc[<01800180018003800380038007800F803F80FF FCFFFC0F800F800F800F800F800F800F800F800F800F800F860F860F860F860F8607CC03F801F0 >15 29 1 0 20]116 dc[24 20 3 0 29] 117 dc[25 20 1 0 28]118 dc[35 20 1 0 38]119 dc[<3FFFE03FFFE03C07C0380F80701F80603F00603E00607C0000F80001 F80003F00003E06007C0600F80601F80E03F00C03E01C07C03C0FFFFC0FFFFC0>19 20 1 0 23] 122 dc dfe /fp df[<60F0F07010101020204080>4 11 3 7 11]44 dc[<60F0F060>4 4 3 0 11]46 dc[<078018603030303060186018E01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01C E01C601860187038303018600780>14 24 2 0 19]48 dc[<0F8010E020706078703820380078 00700070006000C00F8000E000700038003C003CE03CE03CC03C4038407030E00F80>14 24 2 0 19]51 dc[<00300030007000F000F001700370027004700C7008701070307020704070C070FFFF 00700070007000700070007007FF>16 24 1 0 19]52 dc[<30183FF03FE03FC0200020002000 2000200027C03860203000380018001C001C401CE01CE01C80184038403030E00F80>14 24 2 0 19]53 dc[<01E006100C1818383038300070006000E000E7C0E860F030F018E018E01CE01CE01C 601C601C701830183030186007C0>14 24 2 0 19]54 dc[<0780186030302018601860186018 70103C303E600F8007C019F030F86038401CC00CC00CC00CC00C6008201018600FC0>14 24 2 0 19]56 dc[<000C0000000C0000000C0000001E0000001E0000003F000000270000002700000043 800000438000004380000081C0000081C0000081C0000100E0000100E00001FFE0000200700002 00700006007800040038000400380008001C0008001C001C001E00FF00FFC0>26 26 1 0 29] 65 dc[<003F0201C0C603002E0E001E1C000E1C0006380006780002700002700002F00000F000 00F00000F00000F00000F000007000027000027800023800041C00041C00080E000803003001C0 C0003F00>23 26 2 0 28]67 dc[<003F020001C0C60003002E000E001E001C000E001C000600 38000600780002007000020070000200F0000000F0000000F0000000F0000000F0000000F001FF C070000E0070000E0078000E0038000E001C000E001C000E000E000E000300160001C06600003F 8200>26 26 2 0 30]71 dc[11 26 1 0 14]73 dc[<0FC2 1836200E6006C006C002C002C002E00070007E003FE01FF807FC003E000E000700038003800380 03C002C006E004D81887E0>16 26 2 0 21]83 dc[<7FFFFF00701C0700401C0100401C0100C0 1C0180801C0080801C0080801C0080001C0000001C0000001C0000001C0000001C0000001C0000 001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C00 00001C000003FFE000>25 26 1 0 28]84 dc[24 26 2 0 29]85 dc[7 37 3 9 11]91 dc[< FEFE060606060606060606060606060606060606060606060606060606060606060606FEFE>7 37 0 9 11]93 dc[<3F8070C070E020700070007007F01C7030707070E070E071E071E0F171FB 1E3C>16 16 2 0 19]97 dc[18 26 1 0 21]98 dc[<07F80C1C381C30087000E000E000E0 00E000E000E0007000300438080C1807E0>14 16 1 0 17]99 dc[<007E00000E00000E00000E 00000E00000E00000E00000E00000E00000E0003CE000C3E00380E00300E00700E00E00E00E00E 00E00E00E00E00E00E00E00E00600E00700E00381E001C2E0007CFC0>18 26 1 0 21]100 dc[< 07C01C3030187018600CE00CFFFCE000E000E000E0006000300438080C1807E0>14 16 1 0 17] 101 dc[<01F0031807380E100E000E000E000E000E000E00FFC00E000E000E000E000E000E000E 000E000E000E000E000E000E000E007FE0>13 26 0 0 12]102 dc[<0FCE187330307038703870 387038303018602FC02000600070003FF03FFC1FFE600FC003C003C003C0036006381C07E0>16 24 1 8 19]103 dc[18 26 1 0 21]104 dc[<18003C003C0018000000000000000000000000 00FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80>9 26 0 0 10 ]105 dc[18 26 1 0 20]107 dc[9 26 0 0 10]108 dc[ 29 16 1 0 32]109 dc[18 16 1 0 21]110 dc[<07E01C38300C700E6006E007E007E007E007E007E0 076006700E381C1C3807E0>16 16 1 0 19]111 dc[18 23 1 7 21]112 dc[<03C2000C2600381E00300E00700E00 E00E00E00E00E00E00E00E00E00E00E00E00700E00700E00381E001C2E0007CE00000E00000E00 000E00000E00000E00000E00007FC0>18 23 1 7 20]113 dc[12 16 1 0 15]114 dc[<1F2060E04020C020C0 20F0007F003FC01FE000F080708030C030C020F0408F80>12 16 1 0 15]115 dc[<0400040004 000C000C001C003C00FFC01C001C001C001C001C001C001C001C001C201C201C201C201C200E40 0380>11 23 1 0 15]116 dc[18 16 1 0 21]117 dc[17 16 1 0 20]118 dc[18 16 1 0 20]120 dc[17 23 1 7 20]121 dc[<7FF860 70407040E041C041C00380070007000E081C081C08381070107030FFF0>13 16 1 0 17]122 dc dfe /fq df[<030007003F00C70007000700070007000700070007000700070007000700070007 000700070007000700070007000700070007000F80FFF8>13 28 4 0 21]49 dc[<1FC0003070 00783800781C00301C00001C00001C0001FC000F1C00381C00701C00601C00E01C40E01C40E01C 40603C40304E801F8700>18 18 2 0 21]97 dc[33 18 1 0 36]109 dc[20 18 1 0 23]110 dc[<03F0000E1C0018 0600300300700380600180E001C0E001C0E001C0E001C0E001C0E001C060018070038030030018 06000E1C0003F000>18 18 1 0 21]111 dc[13 18 1 0 16]114 dc[19 26 1 8 22]121 dc dfe /fr df[<001F83E000F06E3001C078780380F8780300F030070070000700700007007000070070 00070070000700700007007000FFFFFF8007007000070070000700700007007000070070000700 700007007000070070000700700007007000070070000700700007007000070070000700700007 00700007007000070070007FE3FF00>29 32 0 0 27]11 dc[<003F0000E0C001C0C00381E007 01E00701E0070000070000070000070000070000070000FFFFE00700E00700E00700E00700E007 00E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E007 00E07FC3FE>23 32 0 0 25]12 dc[<003FE000E0E001C1E00381E00700E00700E00700E00700 E00700E00700E00700E00700E0FFFFE00700E00700E00700E00700E00700E00700E00700E00700 E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E07FE7FE>23 32 0 0 25]13 dc[<001F81F80000F04F040001C07C06000380F80F000300F00F000700F00F0007007000 0007007000000700700000070070000007007000000700700000FFFFFFFF000700700700070070 070007007007000700700700070070070007007007000700700700070070070007007007000700 700700070070070007007007000700700700070070070007007007000700700700070070070007 007007007FE3FE3FF0>36 32 0 0 38]14 dc[<001F81FF0000F06F070001C07C0F000380F80F 000300F00700070070070007007007000700700700070070070007007007000700700700070070 0700FFFFFFFF000700700700070070070007007007000700700700070070070007007007000700 700700070070070007007007000700700700070070070007007007000700700700070070070007 007007000700700700070070070007007007007FE3FE3FF0>36 32 0 0 38]15 dc[<0F000030 1880003030600060703001C0602C06C06013F980E0100300E0100300E0100600E0100C00E0100C 00E01018006010300060203000702060003040C0001880C0000F018000000300E0000303100006 060800060604000C0C0400180C0400181C0200301C0200601C0200601C0200C01C0201801C0201 801C0203000C0406000C04060006040C00060818000310080000E0>31 37 3 3 38]37 dc[<70 F8FCFC74040404080810102040>6 14 4 -18 13]39 dc[<0020004000800100020006000C000C 00180018003000300030007000600060006000E000E000E000E000E000E000E000E000E000E000 E000E0006000600060007000300030003000180018000C000C00060002000100008000400020> 11 46 3 12 18]40 dc[<800040002000100008000C00060006000300030001800180018001C0 00C000C000C000E000E000E000E000E000E000E000E000E000E000E000E000C000C000C001C001 800180018003000300060006000C0008001000200040008000>11 46 3 12 18]41 dc[<018001 80018001800180C183F18F399C0FF003C003C00FF0399CF18FC18301800180018001800180>16 20 3 -14 23]42 dc[<0006000000060000000600000006000000060000000600000006000000 06000000060000000600000006000000060000000600000006000000060000FFFFFFF0FFFFFFF0 000600000006000000060000000600000006000000060000000600000006000000060000000600 000006000000060000000600000006000000060000>28 32 3 5 35]43 dc[<70F8FCFC740404 04080810102040>6 14 4 9 13]44 dc[10 2 1 -9 15]45 dc[<70F8F8F870>5 5 4 0 13]46 dc[<000100030003000600060006000C000C000C0018001800180030003000300060 0060006000C000C000C00180018001800300030003000600060006000C000C000C001800180018 00300030003000600060006000C000C000C000>16 45 3 11 23]47 dc[<03F0000E1C001C0E00 180600380700700380700380700380700380F003C0F003C0F003C0F003C0F003C0F003C0F003C0 F003C0F003C0F003C0F003C0F003C0F003C07003807003807003807807803807001806001C0E00 0E1C0003F000>18 31 2 1 23]48 dc[<018003800F80F3800380038003800380038003800380 0380038003800380038003800380038003800380038003800380038003800380038007C0FFFE> 15 30 4 0 23]49 dc[<03F0000C1C00100E00200700400780800780F007C0F803C0F803C0F803 C02007C00007C0000780000780000F00000E00001C0000380000700000600000C0000180000300 000600400C00401800401000803FFF807FFF80FFFF80>18 30 2 0 23]50 dc[<03F0000C1C00 100E00200F00780F80780780780780380F80000F80000F00000F00000E00001C0000380003F000 003C00000E00000F000007800007800007C02007C0F807C0F807C0F807C0F00780400780400F00 200E001C3C0003F000>18 31 2 1 23]51 dc[<000600000600000E00000E00001E00002E0000 2E00004E00008E00008E00010E00020E00020E00040E00080E00080E00100E00200E00200E0040 0E00C00E00FFFFF0000E00000E00000E00000E00000E00000E00000E0000FFE0>20 30 1 0 23] 52 dc[<1803001FFE001FFC001FF8001FE00010000010000010000010000010000010000011F0 00161C00180E001007001007800003800003800003C00003C00003C07003C0F003C0F003C0E003 80400380400700200600100E000C380003E000>18 31 2 1 23]53 dc[<007C00018200070100 0E03800C07801C0780380300380000780000700000700000F1F000F21C00F40600F80700F80380 F80380F003C0F003C0F003C0F003C0F003C07003C07003C07003803803803807001807000C0E00 061C0001F000>18 31 2 1 23]54 dc[<4000007FFFC07FFF807FFF8040010080020080020080 040000080000080000100000200000200000400000400000C00000C00001C00001800003800003 8000038000038000078000078000078000078000078000078000078000030000>18 31 3 1 23] 55 dc[<03F0000C0C001006003003002001806001806001806001807001807803003E03003F06 001FC8000FF00003F80007FC000C7E00103F00300F806003804001C0C001C0C000C0C000C0C000 C0C000806001802001001002000C0C0003F000>18 31 2 1 23]56 dc[<03F0000E18001C0C00 380600380700700700700380F00380F00380F003C0F003C0F003C0F003C0F003C07007C07007C0 3807C0180BC00E13C003E3C0000380000380000380000700300700780600780E00700C00201800 1070000FC000>18 31 2 1 23]57 dc[<70F8F8F8700000000000000000000070F8F8F870>5 20 4 0 13]58 dc[<70F8F8F8700000000000000000000070F0F8F878080808101010202040>5 29 4 9 13]59 dc[<70F8F8F8700000000000202020202070707070707070707070F8F8F8F8F8F8F8 70>5 33 4 10 13]60 dc[<7FFFFFE0FFFFFFF000000000000000000000000000000000000000 00000000000000000000000000FFFFFFF07FFFFFE0>28 12 3 -5 35]61 dc[<07000F800F800F 800700000000000000000000000200020002000200020002000600060004000C001C0038007800 7000F018F03CF03CF01CF008701838200FC0>14 32 3 9 21]62 dc[<0FC0307040384038E03C F03CF03C603C0038007000E000C001800180010003000200020002000200020002000000000000 000000000007000F800F800F800700>14 32 3 0 21]63 dc[<00010000000380000003800000 0380000007C0000007C0000007C0000009E0000009E0000009E0000010F0000010F0000010F000 00207800002078000020780000403C0000403C0000403C0000801E0000801E0000FFFE0001000F 0001000F0001000F00020007800200078002000780040003C00E0003C01F0007E0FFC03FFE>31 32 1 0 34]65 dc[26 31 2 0 32]66 dc[<000FC040007030C001C009C0 038005C0070003C00E0001C01E0000C01C0000C03C0000C07C0000407C00004078000040F80000 00F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000780000007C00 00407C0000403C0000401C0000401E0000800E000080070001000380020001C004000070380000 0FC000>26 33 3 1 33]67 dc[29 31 2 0 35]68 dc[27 31 2 0 31]69 dc[25 31 2 0 30]70 dc[<000FE0200078186000E0 04E0038002E0070001E00F0000E01E0000601E0000603C0000603C0000207C00002078000020F8 000000F8000000F8000000F8000000F8000000F8000000F8000000F8007FFCF80003E0780001E0 7C0001E03C0001E03C0001E01E0001E01E0001E00F0001E0070001E0038002E000E00460007818 20000FE000>30 33 3 1 36]71 dc[29 31 2 0 34]72 dc[14 31 1 0 16]73 dc[<0FFFC0007C00003C0000 3C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C0000 3C00003C00003C00003C00003C00003C00003C00203C00F83C00F83C00F83C00F0380040780040 700030E0000F8000>18 32 2 1 23]74 dc[30 31 2 0 35]75 dc[23 31 2 0 28]76 dc[37 31 2 0 42]77 dc[29 31 2 0 34]78 dc[<001F800000F0F00001C0380007801E000F000F000E0007001E00 07803C0003C03C0003C07C0003E0780001E0780001E0F80001F0F80001F0F80001F0F80001F0F8 0001F0F80001F0F80001F0F80001F0F80001F0780001E07C0003E07C0003E03C0003C03C0003C0 1E0007800E0007000F000F0007801E0001C0380000F0F000001F8000>28 33 3 1 35]79 dc[< FFFFE0000F80780007801C0007801E0007800F0007800F8007800F8007800F8007800F8007800F 8007800F8007800F0007801E0007801C000780780007FFE0000780000007800000078000000780 00000780000007800000078000000780000007800000078000000780000007800000078000000F C00000FFFC0000>25 31 2 0 31]80 dc[30 32 2 1 33]82 dc[ <07E0800C1980100780300380600180600180E00180E00080E00080E00080F00000F000007800 007F00003FF0001FFC000FFE0003FF00001F800007800003C00003C00001C08001C08001C08001 C08001C0C00180C00380E00300F00600CE0C0081F800>18 33 3 1 25]83 dc[<7FFFFFE0780F 01E0600F0060400F0020400F0020C00F0030800F0010800F0010800F0010800F0010000F000000 0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000 000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000001F800007FFFE 00>28 31 2 0 33]84 dc[29 32 2 1 34]85 dc[31 32 1 1 34]86 dc[44 32 1 1 47]87 dc[<7FF83FF80FE00FC007C0070003C0 020001E0040001F00C0000F0080000781000007C1000003C2000003E4000001E4000000F800000 0F8000000780000003C0000007E0000005E0000009F0000018F8000010780000207C0000603C00 00401E0000801F0001800F0001000780020007C0070003C01F8007E0FFE01FFE>31 31 1 0 34] 88 dc[32 31 1 0 34]89 dc[<7FFFF87C00F87000F06001E04001E0C003 C0C003C0800780800F80800F00001E00001E00003C00003C0000780000F80000F00001E00001E0 0003C00403C0040780040F80040F000C1E000C1E00083C00183C0018780038F801F8FFFFF8>22 31 3 0 28]90 dc[7 45 4 11 13]91 dc[7 45 1 11 13] 93 dc[<081020204040808080B8FCFC7C38>6 14 3 -18 13]96 dc[<1FE00030300078180078 1C00300E00000E00000E00000E0000FE00078E001E0E00380E00780E00F00E10F00E10F00E10F0 1E10781E103867200F83C0>20 20 2 0 23]97 dc[<0E0000FE00000E00000E00000E00000E00 000E00000E00000E00000E00000E00000E00000E3E000EC3800F01C00F00E00E00E00E00700E00 700E00780E00780E00780E00780E00780E00780E00700E00700E00E00F00E00D01C00CC300083E 00>21 32 1 0 25]98 dc[<03F80E0C1C1E381E380C70007000F000F000F000F000F000F00070 007000380138011C020E0C03F0>16 20 2 0 20]99 dc[<000380003F80000380000380000380 00038000038000038000038000038000038000038003E380061B801C0780380380380380700380 700380F00380F00380F00380F00380F00380F003807003807003803803803807801C07800E1B80 03E3F8>21 32 2 0 25]100 dc[<03F0000E1C001C0E00380700380700700700700380F00380F0 0380FFFF80F00000F00000F000007000007000003800801800800C010007060001F800>17 20 1 0 20]101 dc[<007C00C6018F038F07060700070007000700070007000700FFF0070007000700 0700070007000700070007000700070007000700070007000700070007007FF0>16 32 0 0 14] 102 dc[<0000E003E3300E3C301C1C30380E00780F00780F00780F00780F00780F00380E001C1C 001E380033E0002000002000003000003000003FFE001FFF800FFFC03001E0600070C00030C000 30C00030C000306000603000C01C038003FC00>20 31 1 10 23]103 dc[<0E0000FE00000E00 000E00000E00000E00000E00000E00000E00000E00000E00000E00000E3E000E43000E81800F01 C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 C00E01C00E01C0FFE7FC>22 32 1 0 25]104 dc[<1C001E003E001E001C000000000000000000 000000000E007E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E 000E00FFC0>10 31 0 0 12]105 dc[<00E001F001F001F000E000000000000000000000000000 7007F000F000700070007000700070007000700070007000700070007000700070007000700070 00700070007000706070F060F0C061803F00>12 40 -2 9 14]106 dc[<0E0000FE00000E0000 0E00000E00000E00000E00000E00000E00000E00000E00000E00000E0FF00E03C00E03000E0200 0E04000E08000E10000E30000E70000EF8000F38000E1C000E1E000E0E000E07000E07800E0380 0E03C00E03E0FFCFF8>21 32 1 0 24]107 dc[<0E00FE000E000E000E000E000E000E000E000E 000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 0E000E00FFE0>11 32 0 0 12]108 dc[<0E1F01F000FE618618000E81C81C000F00F00E000F00 F00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E 00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E00FFE7FE7FE0 >35 20 1 0 38]109 dc[<0E3E00FE43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E 01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC>22 20 1 0 25] 110 dc[<01F800070E001C03803801C03801C07000E07000E0F000F0F000F0F000F0F000F0F000 F0F000F07000E07000E03801C03801C01C0380070E0001F800>20 20 1 0 23]111 dc[<0E3E00 FEC3800F01C00F00E00E00E00E00F00E00700E00780E00780E00780E00780E00780E00780E0070 0E00F00E00E00F01E00F01C00EC3000E3E000E00000E00000E00000E00000E00000E00000E0000 0E0000FFE000>21 29 1 9 25]112 dc[<03E0800619801C05803C0780380380780380700380F0 0380F00380F00380F00380F00380F003807003807803803803803807801C0B800E138003E38000 0380000380000380000380000380000380000380000380003FF8>21 29 2 9 24]113 dc[<0E78 FE8C0F1E0F1E0F0C0E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE0> 15 20 1 0 18]114 dc[<1F9030704030C010C010C010E00078007F803FE00FF0007080388018 8018C018C018E030D0608F80>13 20 2 0 18]115 dc[<020002000200060006000E000E003E00 FFF80E000E000E000E000E000E000E000E000E000E000E000E080E080E080E080E080610031001 E0>13 28 1 0 18]116 dc[<0E01C0FE1FC00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E03C00603C0030DC001F1FC>22 20 1 0 25]117 dc[21 20 1 0 24]118 dc[30 20 1 0 33]119 dc[<7FC3FC0F01E00701C007018003810001C20000E40000EC00007800 003800003C00007C00004E000087000107000303800201C00601E01E01E0FF07FE>23 20 0 0 24]120 dc[21 29 1 9 24]121 dc[<3FFF380E200E201C4038407840 7000E001E001C00380078007010E011E011C0338027006700EFFFE>16 20 1 0 20]122 dc[22 1 0 -12 23]123 dc[44 1 0 -12 45]124 dc dfe end TeXDict begin @letter %%Page: 26 37 bop 0 50 a fj(CHAPTER)15 b(3.)35 b(A)o(CCURA)l(TE)15 b(USA)o(GE)g(TIMING)960 b fr(26)0 235 y fb(struct)23 b(timer)g({)191 291 y(unsigned)g(low_bits;)191 348 y(unsigned)g(high_bits;)191 404 y(unsigned)g(high_bits_check;)191 461 y (unsigned)g(tstamp;)0 517 y(})h(*timer_t;)0 630 y(#define)f(TIMER_HIGH_UNIT)f (1000000)0 743 y(Start\(timer,)g(timestamp\))0 800 y(timer_t)h(timer;)0 856 y (unsigned)g(timestamp;)0 912 y({)167 b(timer->tstamp)22 b(=)i(timestamp;)e (})0 1025 y(Update\(timer,timestamp\))0 1082 y(timer_t)h(timer;)0 1138 y(unsi\ gned)g(timestamp;)0 1195 y({)167 b(timer->low_bits)22 b(+=)h(timestamp)g(-)h (timer->tstamp;)e(})0 1308 y(Normalize\(timer\))0 1364 y(timer_t)h(timer;)0 1421 y({)191 1477 y(unsigned)166 b(high_increment;)191 1590 y(high_increment) 22 b(=)i(timer->low_bits/TIMER_H)o(IGH_UNI)o(T;)191 1646 y(timer->high_bits_c\ heck)d(+=)i(high_increment;)191 1703 y(timer->low_bits)f(%=)h(TIMER_HIGH_UNIT\ ;)191 1759 y(timer->high_bits)f(+=)h(high_increment;)0 1816 y(})0 1929 y(Read\ \(timer,)f(seconds,)h(microseconds\))0 1985 y(timer_t)g(timer;)0 2042 y(unsig\ ned)g(*seconds;)0 2098 y(unsigned)g(*microseconds;)0 2154 y({)191 2211 y(unsi\ gned)g(save_high,)f(save_low;)191 2324 y(do)h({)382 2380 y(save_high)f(=)i (timer->high_bits;)382 2437 y(save_low)f(=)g(timer->low_bits)191 2493 y(})h (while)f(\(save_high)f(!=)i(timer->high_bits_check\);)191 2606 y(*microsecond\ s)e(=)i(save_low%TIMER_HIGH_UNIT)o(;)191 2663 y(*seconds)f(=)g(save_high)g (+)h(save_low/TIMER_HIGH_UNIT)o(;)0 2719 y(})679 2867 y fr(Figure)15 b(3.1:)k (Timer)c(Op)r(erations)p eop %%Page: 27 38 bop 0 50 a fj(CHAPTER)15 b(3.)35 b(A)o(CCURA)l(TE)15 b(USA)o(GE)g(TIMING)960 b fr(27)0 195 y(main)o(tains)13 b(a)f(clo)r(c)o(k)g(in)h(normalized)h(format,) d(and)i(uses)f(this)h(to)f(allo)o(w)h(the)f(reader)g(to)g(infer)h(a)f(v)n(ali\ d)h(clo)r(c)o(k)g(v)m(alue)0 252 y(if)f(a)f(read)g(and)h(a)f(write)g(should)i (o)n(v)o(erlap.)19 b(Mac)n(h)12 b(delib)s(erately)g(uses)f(a)g(non-normalized) i(format)d(to)h(fa)n(v)o(or)g(writes)0 308 y(o)n(v)o(er)16 b(reads)f(b)o(y)g (limiting)j(the)d(e\013ect)h(of)f(write)g(op)r(erations.)20 b(The)c(cost)f (of)g(not)g(using)h(a)f(normalized)i(format)d(is)0 364 y(that)h(it)i(is)f(no) g(longer)h(p)q(ossible)h(to)d(infer)i(a)f(v)m(alid)h(clo)r(c)o(k)f(v)n(alue)g (if)h(a)f(read)g(op)q(eration)g(detects)g(an)g(o)o(v)n(erlapping)0 421 y(writ\ e)g(\(which)g(m)n(ust)g(b)r(e)g(a)g fo(Normalize)p fr(\).)23 b(Instead)17 b (the)f(read)g(m)n(ust)g(b)r(e)g(retried,)h(as)e(p)r(er)h(Lamp)q(ort's)f(gener\ al)0 477 y(readers/writers)c(solution[30].)19 b(The)12 b(rarit)n(y)g(of)g(nor\ malization)g(op)r(erations)f(in)i(this)f(case)g(guaran)o(tees)g(that)f(the)0 534 y(retry)16 b(will)i(succeed.)25 b(In)17 b(addition,)g(the)g(application)h (of)e(this)h(tec)n(hnology)g(to)f(usage)g(timing)h(is)g(new)g(b)q(ecause)0 590 y(the)e(motiv)m(ating)g(application)h(for)e(Lamp)q(ort's)g(w)n(ork)g(w)o(as)g (the)h(di\016culties)h(encountered)f(in)g(sharing)g(m)o(ultiple)0 647 y(w)o (ord)i(time)i(of)f(da)o(y)g(clo)q(c)o(ks)g(b)r(et)o(w)n(een)h(applications)h (and)e(the)g(op)r(erating)g(system.)28 b(The)19 b(use)f(of)g(a)g(lo)q(c)o(k)h (that)0 703 y(can)d(b)q(e)g(held)h(b)o(y)f(applications)h(or)f(the)g(k)n(erne\ l)h(is)f(clearly)h(unacceptable)h(b)q(ecause)e(it)g(puts)g(the)g(k)o(ernel)h (at)e(the)0 760 y(mercy)f(of)g(a)g(malicious)i(application.)21 b(W)l(ork)14 b (is)h(in)g(progress)f(to)f(use)i(Lamp)q(ort's)e(monotonic)i(clo)r(c)o(k)f(alg\ orithm)0 816 y(to)h(implement)g(this)h(feature)f(\(time)g(of)g(da)n(y)g(clo)r (c)o(k)g(in)h(shared)g(memory\))e(for)h(Mac)n(h.)0 938 y fm(3.3.3)55 b(Implem\ e)o(n)l(tation)0 1024 y fr(There)20 b(are)g(sev)o(eral)h(options)f(for)g(time\ stamp)g(sources.)35 b(The)20 b(Multimax)h(implementation)f(uses)h(a)f(shared) 0 1080 y(free)f(running)h(32-bit)e(microsecond)i(coun)o(ter)e(as)h(the)f(time\ stamp)h(source;)h(reading)f(this)g(counter)f(b)o(ypasses)0 1137 y(the)k(pro)q (cessor)f(cac)o(hes)h(and)g(tak)n(es)g(2.5)f(microseconds)h(\(slo)o(w)n(er)g (than)g(a)f(memory)g(access)h(that)f(misses)h(in)0 1193 y(cac)o(he\).)e(All)c (accesses)f(to)f(this)h(coun)o(ter)g(are)f(serialized)j(b)o(y)e(the)g(bus)g (proto)q(col,)g(so)f(it)h(is)g(a)g(p)q(oten)o(tial)g(source)g(of)0 1249 y(m)o (ultipro)r(cessor)f(con)o(ten)n(tion.)20 b(An)15 b(alternativ)o(e)f(hardw)n (are)g(design)h(is)g(to)e(pro)o(vide)i(a)f(single)h(timestamp)f(source)0 1306 y(for)k(eac)o(h)h(pro)q(cessor)f(in)i(a)e(m)o(ultipro)r(cessor.)30 b(Since)21 b(timestamps)d(are)g(only)i(compared)e(to)h(others)f(from)g(the)0 1362 y(same) h(pro)q(cessor,)h(it)g(is)g(not)g(necessary)f(to)g(sync)o(hronize)i(these)f (sources.)33 b(In)20 b(other)f(w)o(ords,)h(implemen)q(ting)0 1419 y(a)c(distr\ ibuted)h(timestamp)f(source)g(for)f(the)h(Mac)n(h)g(timing)h(facility)f(do)q (es)g(not)g(require)g(sync)o(hronized)i(clo)q(c)o(ks.)0 1475 y(Coun)o(ters)10 b(that)h(roll)h(o)n(v)o(er)f(at)f(v)n(alues)h(other)g(than)g(2)876 1459 y fg (32)924 1475 y fr(can)g(b)r(e)g(used;)h(the)g(rollo)o(v)o(er)f(p)q(erio)r(d)g (m)o(ust)f(b)r(e)h(long)g(enough)0 1532 y(that)j(it)h(can)h(b)q(e)f(detected) h(reliably)n(.)j(The)d(detection)f(mec)o(hanism)h(notices)f(that)g(the)g(di\ \013erence)h(b)q(et)o(w)o(een)f(t)o(w)n(o)0 1588 y(timestamps)h(is)h(negativ) n(e,)g(infers)f(that)g(exactly)g(one)h(rollo)o(v)o(er)f(has)g(o)q(ccurred,)g (and)h(comp)q(ensates)f(b)o(y)g(adding)0 1645 y(the)11 b(rollov)n(er)h(p)q (erio)r(d.)19 b(A)11 b(useful)h(practical)g(criterion)h(for)d(reliable)k(dete\ ction)e(is)f(that)g(eac)o(h)g(pro)q(cessor's)g(coun)o(ter)0 1701 y(sampling) 18 b(rate)f(\(for)g(timestamps\))g(should)h(b)r(e)g(at)e(least)i(t)n(wice)h (the)e(rollov)n(er)h(rate.)26 b(A)18 b(p)q(erio)r(dic)g(coun)o(tdo)o(wn)0 1758 y(coun)o(ter)k(that)f(generates)h(an)g(interrupt)g(on)g(rollo)o(v)o(er)g(is)g (not)g(su\016cient)g(without)g(an)g(additional)i(rollo)o(v)o(er)0 1814 y(dete\ ction)15 b(mec)o(hanism)g(\(e.g.,)e(a)g(bit)i(set)f(b)o(y)g(hardw)o(are)f(whe\ n)i(the)f(rollov)n(er)g(o)q(ccurs\).)20 b(In)15 b(the)f(absence)h(of)e(such)0 1870 y(a)j(mec)o(hanism,)h(delays)f(in)h(accepting)g(clo)r(c)o(k)f(interrupts) g(ma)n(y)g(cause)h(the)f(timing)i(facility)e(to)g(miss)g(rollov)n(ers.)0 1927 y(This)f(happ)r(ens)f(when)h(a)f(rollo)o(v)o(er)g(interrupt)g(is)h(dela)o(y)o (ed)g(to)e(the)i(exten)o(t)f(that)f(its)i(in)o(terrupt)f(en)o(try)g(timestamp) 0 1983 y(is)g(greater)e(than)h(the)h(in)o(terrupt)f(exit)h(timestamp)f(of)g (the)h(previous)g(in)o(terrupt's)f(service)h(routine.)20 b(Generating)0 2040 y (an)13 b(additional)h(interrupt)f(at)f(the)h(midp)s(oin)o(t)g(of)f(the)h(coun) o(ter's)g(rollo)o(v)o(er)g(p)q(erio)r(d)g(is)h(another)e(w)o(a)n(y)h(to)g(a)n (v)o(oid)g(this)0 2096 y(problem.)71 2153 y(The)d(Multimax)h(implemen)q(tatio\ n)f(uses)h(inline)i(assem)n(bly)f(language)f(for)e(the)i(timing)g(op)r(eratio\ ns)f(in)h(critical)0 2209 y(paths.)22 b(This)16 b(uses)g(appro)o(ximately)g (one)g(third)g(few)o(er)g(instructions)h(than)e(a)h(previous)g(implemen)q(tat\ ion)g(that)0 2266 y(used)e(C)f(routines)h(to)f(manipulate)i(the)e(timers.)20 b (The)14 b(ma)r(jor)f(sa)n(vings)h(in)g(instruction)h(coun)o(t)e(for)g(the)h (assem)n(bly)0 2322 y(language)d(v)o(ersion)h(come)f(from)f(a)n(v)o(oiding)i (the)g(instructions)g(that)e(implemen)q(t)g(pro)q(cedure)i(call)h(\(three)d (on)h(entry)-5 b(,)0 2379 y(three)16 b(on)f(exit\).)21 b(An)16 b(additional)h (sa)o(vings)f(is)g(realized)h(in)f(the)g(trap)f(cases)g(b)o(y)h(optimizing)h (the)f(protocol)g(used)0 2435 y(to)i(disable)j(interrupts.)31 b(The)19 b(Mult\ imax)h(enables)g(and)f(disables)i(in)o(terrupts)e(via)g(an)g(o\013-c)o(hip)h (ICU,)f(but)g(a)0 2491 y(c)o(hip)c(bug)f(requires)h(that)e(the)h(pro)q(cessor) f(internally)i(disable)g(interrupts)e(b)r(efore)g(manipulating)j(the)d(ICU)i (and)0 2548 y(re-enable)g(them)e(afterw)n(ards.)19 b(This)14 b(results)g(in)h (three)e(instructions)i(for)e(eac)o(h)h(enable)g(and)g(disable,)h(or)e(a)g (total)0 2604 y(of)i(6)h(instructions)h(p)q(er)f(timing)h(op)q(eration.)22 b (The)16 b(timing)g(co)r(de)g(for)f(traps)g(reduces)i(this)f(to)f(t)o(w)n(o)h (instructions)0 2661 y(p)r(er)i(op)q(eration)g(b)o(y)g(disabling)i(in)o(terru\ pts)e(on)g(the)g(pro)q(cessor;)h(this)f(tec)o(hnique)i(has)e(to)f(b)r(e)h(use\ d)g(with)h(great)0 2717 y(care)d(b)q(ecause)g(non-mask)n(able)g(interrupts)f (are)h(also)f(routed)h(through)f(the)h(ICU,)g(so)f(disabling)j(interrupts)d (on)0 2774 y(the)g(pro)q(cessor)g(also)g(disables)i(non-mask)n(able)e(interru\ pts.)p eop %%Page: 28 39 bop 0 50 a fj(CHAPTER)15 b(3.)35 b(A)o(CCURA)l(TE)15 b(USA)o(GE)g(TIMING)960 b fr(28)310 205 y 1326 2 v 57 x 2 57 v 335 245 a(Op)r(eration)671 262 y 2 57 v 697 245 a(Instructions)958 262 y 2 57 v 985 245 a(Min)1088 262 y 2 57 v 1114 245 a(Max)1226 262 y 2 57 v 1252 245 a(Av)o(erage)1437 262 y 2 57 v 1462 245 a (T)o(ypical)1636 262 y 2 57 v 310 263 a 1326 2 v 10 x 1326 2 v 57 x 2 57 v 335 313 a(T)l(rap)15 b(En)o(try)671 330 y 2 57 v 792 313 a(15)958 330 y 2 57 v 983 313 a(13.5)1088 330 y 2 57 v 1122 313 a(27.5)1226 330 y 2 57 v 1332 313 a(14.\ 1)1437 330 y 2 57 v 1531 313 a(13.5)1636 330 y 2 57 v 310 331 a 1326 2 v 57 x 2 57 v 335 371 a(T)l(rap)g(Exit)671 388 y 2 57 v 792 371 a(15)958 388 y 2 57 v 983 371 a(12.5)1088 388 y 2 57 v 1122 371 a(26.5)1226 388 y 2 57 v 1332 371 a (13.2)1437 388 y 2 57 v 1531 371 a(12.5)1636 388 y 2 57 v 310 389 a 1326 2 v 57 x 2 57 v 335 429 a(Interrupt)g(En)o(try)671 446 y 2 57 v 792 429 a(12)958 446 y 2 57 v 983 429 a(10.5)1088 446 y 2 57 v 1122 429 a(21.5)1226 446 y 2 57 v 1332 429 a(10.7)1437 446 y 2 57 v 1531 429 a(10.5)1636 446 y 2 57 v 310 447 a 1326 2 v 57 x 2 57 v 335 487 a(Interrupt)g(Exit)671 504 y 2 57 v 792 487 a (15)958 504 y 2 57 v 983 487 a(13.5)1088 504 y 2 57 v 1122 487 a(28.5)1226 504 y 2 57 v 1332 487 a(14.0)1437 504 y 2 57 v 1531 487 a(13.5)1636 504 y 2 57 v 310 506 a 1326 2 v 56 x 2 57 v 335 545 a(Con)o(text)g(Switc)o(h)671 562 y 2 57 v 792 545 a(13)958 562 y 2 57 v 1006 545 a(9.5)1088 562 y 2 57 v 1122 545 a (24.5)1226 562 y 2 57 v 1332 545 a(11.9)1437 562 y 2 57 v 1531 545 a(10.5) 1636 562 y 2 57 v 310 564 a 1326 2 v 236 643 a(T)l(able)h(3.1:)j(Multimax)d (Timer)f(Switch)g(Costs)f(\(Instructions)i(and)f(Microseconds\))0 829 y fm (3.3.4)55 b(P)o(erformance)0 915 y fr(Timestamp-based)18 b(timing)g(can)g(ac) o(hieve)f(orders)h(of)f(magnitude)h(impro)o(v)o(emen)o(ts)f(in)i(timing)f(acc\ uracy)l(.)27 b(On)0 971 y(a)17 b(Multimax)h(with)g(a)g(10Hz)f(clo)r(c)o(k)h (in)o(terrupt)g(rate,)f(statistical)h(timing)g(is)h(of)e(little)i(use)f(for)f (p)q(erio)r(ds)h(of)f(less)0 1028 y(than)j(sev)o(eral)g(seconds;)i(at)d(one)h (second,)i(the)e(in)o(trinsic)h(measuremen)o(t)f(error)f(is)h(10%,)g(and)g (this)h(drops)e(to)0 1084 y(2%)d(at)g(\014v)o(e)g(seconds.)24 b(In)17 b(con)o (trast,)e(Mac)n(h's)i(timing)g(facility)f(can)h(time)f(p)r(erio)r(ds)g(of)g (less)h(than)f(one)h(h)o(undred)0 1141 y(microseconds)f(on)g(the)f(same)g(har\ dw)o(are)g(with)h(excellen)q(t)f(accuracy)h(and)f(rep)r(eatability)l(.)20 b (This)c(represents)f(an)0 1197 y(impro)o(v)o(emen)o(t)g(more)g(than)h(four)f (orders)g(of)g(magnitude)h(\(10)1067 1181 y fg(4)1086 1197 y fr(\))f(in)h(the) g(precision)h(of)e(the)g(timing)h(facilit)q(y)l(.)k(F)l(or)0 1254 y(a)15 b (more)h(common)f(100Hz)g(clo)r(c)o(k)g(rate,)g(the)h(corresp)q(onding)h(impro) o(v)n(ement)e(with)h(a)f(microsecond)i(timer)f(is)g(in)0 1310 y(excess)c(of)f (three)h(orders)f(of)g(magnitude.)19 b(Additional)14 b(impro)o(v)n(ements)d (in)h(accuracy)g(are)f(obtained)h(b)o(y)g(correctly)0 1367 y(excluding)19 b (k)o(ernel)e(o)o(v)o(erhead)g(from)f(user)h(timing)g(measuremen)o(ts.)24 b (These)17 b(impro)o(v)o(emen)o(ts)g(in)g(precision)i(and)0 1423 y(accuracy)c (ha)o(v)o(e)g(delivered)h(v)n(aluable)g(new)g(timing)g(capabilities)h(to)e (users)g(at)g(CMU)f(and)i(elsewhere.)71 1480 y(Timing)i(o)o(v)n(erhead)g(meas\ uremen)o(ts)g(w)n(ere)g(tak)n(en)g(on)g(the)g(Multimax)g(implementation)g(for) f(the)g fo(Switch)0 1536 y fr(op)q(erations)k(in)h(the)f(critical)h(paths)f (of)f(the)h(k)o(ernel.)38 b(Because)22 b(these)f(measuremen)o(ts)f(rely)i(on) f(the)g(shared)0 1592 y(coun)o(ter)h(to)f(compute)i(elapsed)g(times,)h(ev)o (ery)e(critical)i(path)e(accesses)g(the)g(coun)o(ter)g(three)h(times)f(during) 0 1649 y(these)17 b(tests,)f(causing)h(the)g(results)g(to)f(o)o(v)o(erstate)g (the)g(e\013ects)h(of)f(access)h(con)o(ten)o(tion)g(for)f(the)h(coun)o(ter.) 24 b(Eac)o(h)0 1705 y(op)q(eration)16 b(w)n(as)f(measured)h(2048)e(times)i (on)f(a)g(Multimax)h(with)g(ns32332)e(pro)q(cessors)h(\(ab)q(out)g(2)g(MIPS)h (eac)o(h\))0 1762 y(to)j(obtain)h(a)g(represen)o(tativ)o(e)g(time)g(distribut\ ion.)36 b(These)20 b(results)h(\(in)f(microseconds\))g(and)h(the)f(assem)n (bly)0 1818 y(language)i(instruction)h(coun)o(t)e(for)g(eac)o(h)h(op)q(eratio\ n)g(are)f(sho)o(wn)h(in)g(T)l(able)h(3.1.)38 b(The)22 b(T)o(ypical)h(times)f (are)0 1875 y(b)r(oth)16 b(the)h(median)h(and)f(mo)q(de)g(of)g(the)g(corresp) q(onding)h(distributions.)27 b(All)18 b(of)e(the)h(op)r(erations)g(in)g(the)g (table)0 1931 y(include)k(an)d(o)n(v)o(er\015o)o(w)f(c)o(heck,)h(except)h(tha\ t)e(the)i(o)n(v)o(er\015o)o(w)e(c)o(heck)h(for)f(Interrupt)h(En)o(try)f(is)i (p)q(ostp)q(oned)g(un)o(til)0 1988 y(the)c(corresp)q(onding)h(Interrupt)f(Exi\ t.)71 2044 y(The)h(results)h(of)g(these)f(exp)r(eriments)g(sho)o(w)g(that)g (lo)o(w)g(timing)i(o)n(v)o(erheads)f(can)f(b)r(e)h(ac)n(hieved)g(in)h(practic\ e.)0 2101 y(The)f(t)o(ypical)h(op)r(eration)f(times)g(of)g(10)g(to)f(15)h(mic\ roseconds)h(from)e(T)l(able)i(3.1)f(are)g(c)o(heap)g(in)h(comparison)f(to)0 2157 y(other)10 b(costs)h(in)g(the)g(system.)18 b(F)l(or)10 b(example,)j(the) d(fastest)g(con)o(text)h(switc)o(h)g(path)f(from)g(user)h(mo)q(de)g(to)g(user) g(mode)0 2213 y(tak)n(es)17 b(320)f(microseconds)i(on)f(this)g(mac)o(hine;)i (the)e(timing)h(co)q(de)f(accoun)o(ts)g(for)f(ab)r(out)g(36)h(microseconds,)g (or)0 2270 y(11.25%.)h(This)e(is)f(the)g(w)n(orst-case;)f(for)g(a)h(reasonabl\ e)g(system)g(op)q(eration)g(time)g(of)f(ab)q(out)h(1)f(millisecond,)k(the)0 2326 y(corresp)q(onding)i(o)o(v)o(erhead)g(is)f(ab)r(out)g(3.5%,)g(and)h(the) f(p)r(ercen)o(tage)g(decreases)h(as)f(user-mo)q(de)h(computation)0 2383 y(tim\ e)i(is)f(considered)i(\(e.g.,)e(for)g(a)g(t)n(ypical)i(user)e(computation)g (time)h(of)f(3)g(milliseconds)j(b)q(et)o(w)n(een)e(system)0 2439 y(op)q(erati\ ons,)c(the)g(o)n(v)o(erhead)g(is)g(less)h(than)e(1%\).)27 b(These)18 b(small) g(o)o(v)n(erheads)g(are)g(more)f(than)g(justi\014ed)i(b)o(y)f(the)0 2496 y (orders)d(of)g(magnitude)h(increase)h(in)f(accuracy)g(and)g(the)f(absence)h (of)g(distortion)f(in)i(the)e(results)h(pro)q(duced)h(b)o(y)0 2552 y(Mac)n (h's)e(timing)h(facility)433 2536 y fg(3)453 2552 y fr(.)71 2609 y(These)21 b (o)n(v)o(erhead)g(measuremen)o(ts)f(generalize)i(to)e(other)g(arc)o(hitecture\ s,)i(but)f(care)f(m)o(ust)g(b)r(e)g(exercised)0 2665 y(in)f(making)g(the)g (generalizations.)31 b(The)18 b(time)h(p)r(er)f(instruction)i(is)f(not)f(unif\ orm)h(b)q(ecause)g(it)g(tak)n(es)g(2.5)e(mi-)0 2713 y 779 2 v 52 2770 a ff (3)69 2786 y fp(See)c(App)r(endix)h(A)f(of)g([55])f(for)h(details)i(on)e(the) g(p)r(oten)o(tial)h(inaccuracies)i(and)e(distortion)h(of)e(statistical)i(timi\ ng.)p eop %%Page: 29 40 bop 0 50 a fj(CHAPTER)15 b(3.)35 b(A)o(CCURA)l(TE)15 b(USA)o(GE)g(TIMING)960 b fr(29)0 195 y(croseconds)14 b(to)g(obtain)g(a)g(timestamp.)20 b(F)-5 b(or) 14 b(example,)h(the)f(10.5)f(microsecond)i(t)n(ypical)h(time)f(for)e(the)h fo (Switch)0 252 y fr(op)q(eration)f(in)h(the)g(Con)n(text)f(Switc)o(h)h(path)f (consists)g(of)g(8)g(microseconds)h(to)e(execute)i(12)f(instructions)h(plus)g (2.5)0 308 y(microseconds)19 b(to)f(obtain)g(the)h(required)g(timestamp.)29 b (The)19 b(T)l(rap)f(En)o(try)g(and)g(T)l(rap)g(Exit)h(co)q(de)g(sequences)0 364 y(assume)d(that)g(the)g(trap)f(is)i(kno)o(wn)f(to)g(b)q(e)h(from)e(user)h (mo)q(de;)h(t)n(w)o(o)f(extra)f(instructions)j(are)d(needed)j(to)e(deter-)0 421 y(mine)g(this)f(when)h(it)f(is)h(not)f(kno)n(wn.)20 b(Similarly)d(the)e (Interrupt)g(En)n(try)g(and)g(Exit)g(sequences)i(assume)e(that)f(all)0 477 y (interrupts)f(are)h(blo)r(c)o(k)o(ed;)g(t)o(w)n(o)g(extra)f(instructions)i (w)o(ould)g(b)q(e)g(needed)g(if)g(this)f(is)h(not)f(the)g(case.)19 b(The)c (Con)n(text)0 534 y(Switc)o(h)j(co)q(de)g(uses)f(an)h(extra)e(instruction)j (that)d(references)i(memory)f(due)h(to)f(a)g(compiler)h(con)o(v)o(en)o(tion)g (that)0 590 y(imp)r(oses)d(a)g(limit)h(of)f(three)g(scratc)o(h)g(registers.)0 734 y fh(3.4)70 b(Conclusion)0 835 y fr(This)19 b(c)o(hapter)g(has)f(sho)o (wn)h(that)f(the)g(goals)h(of)f(lo)o(w)g(o)o(v)o(erhead)h(and)g(accuracy)f (for)g(a)h(pro)q(cessor)f(usage)h(tim-)0 891 y(ing)g(facility)f(are)f(not)h (m)o(utually)h(exclusive)g(when)f(a)g(minimal)h(level)g(of)e(hardw)o(are)h (supp)r(ort)f(is)h(present.)28 b(By)0 948 y(comparison)15 b(to)f(statistical) h(timing)g(tec)o(hniques,)h(the)f(Mac)n(h)g(timing)h(facility)e(ac)o(hieves)h (orders)f(of)g(magnitude)0 1004 y(impro)o(v)o(emen)o(ts)20 b(in)h(accuracy)f (and)h(all)g(but)f(eliminates)i(distortion)f(with)g(an)f(o)n(v)o(erhead)h(cos\ t)e(measured)i(in)0 1061 y(single)15 b(digit)f(p)r(ercen)o(tages)f(\(or)g(les\ s\).)19 b(Only)c(minimal)g(hardw)o(are)e(supp)r(ort)f(is)i(required;)h(a)e (single)i(free)f(running)0 1117 y(coun)o(ter)f(for)f(the)h(en)o(tire)g(mac)n (hine)h(is)g(su\016cient.)19 b(An)13 b(alternativ)o(e)g(that)f(a)n(v)o(oids)h (con)o(ten)o(tion)g(is)g(to)f(pro)o(vide)i(eac)o(h)0 1174 y(pro)q(cessor)19 b (with)h(its)g(o)n(wn)g(coun)o(ter;)h(the)f(facility)f(do)r(es)g(not)g(require) i(these)e(counters)g(to)g(b)q(e)h(sync)o(hronized.)0 1230 y(Hardw)n(are)14 b (designers)i(should)f(pro)n(vide)h(this)e(level)h(of)f(supp)r(ort,)f(as)h(the) g(resulting)i(accurate)e(timing)h(function-)0 1287 y(alit)o(y)20 b(is)g(of)g (great)f(b)q(ene\014t)h(to)g(b)q(oth)f(the)h(op)q(erating)g(system)g(and)f (users.)34 b(A)20 b(single)h(coun)o(ter)f(in)g(a)g(page)f(of)0 1343 y(ph)o (ysical)d(memory)d(that)h(can)g(b)r(e)g(mapp)r(ed)g(into)g(applications)i(\(b) n(y)f(soft)n(w)n(are\))f(is)h(desirable)h(b)q(ecause)f(it)f(mak)o(es)0 1400 y (lo)o(w)h(o)o(v)n(erhead)h(timestamps)f(a)n(v)n(ailable)i(to)d(applications)j (as)e(w)n(ell)i(as)e(the)g(op)q(erating)g(system.)p eop %%Page: 30 41 bop 0 506 a fi(Chapter)34 b(4)0 714 y fl(Concurren)m(t)40 b(and)f(P)m(aralle\ l)0 839 y(Programming)i(Mo)t(dels)0 1061 y fr(Requiremen)q(ts)13 b(for)f(sc)o (heduling)k(supp)r(ort)c(of)h(applications)i(are)e(hea)o(vily)i(dep)r(endent) e(on)g(the)h(applications)h(and)0 1117 y(their)c(programming)f(mo)q(dels.)20 b (These)11 b(requirements)f(directly)i(in\015uence)h(the)e(tec)o(hniques)h(and) f(metho)q(dologies)0 1174 y(used)16 b(to)e(sc)o(hedule)j(pro)q(cessors.)i(Sin\ gle-threaded)f(applications)e(can)f(b)r(e)g(adequately)h(sc)o(heduled)h(b)o (y)e(existing)0 1230 y(timesharing)i(sc)o(hedulers,)h(but)f(m)o(ultipro)r(ces\ sors)f(m)o(ust)g(supp)r(ort)g(more)g(adv)n(anced)h(\(m)n(ulti-threaded\))h (appli-)0 1287 y(cations)g(that)e(tak)o(e)h(adv)n(an)n(tage)g(of)g(parallelis\ m)j(and)d(concurrency)n(.)26 b(These)18 b(applications)h(exhibit)g(a)f(v)m (ariet)o(y)0 1343 y(of)c(sc)o(heduling)j(requirements,)d(ranging)h(from)f(no) h(need)h(for)e(additional)j(supp)r(ort)d(to)g(a)g(requirement)h(for)f(ded-)0 1400 y(icated)i(pro)q(cessors.)k(Insights)15 b(into)g(these)g(requirements)g (and)h(the)f(sc)o(heduling)j(assumptions)d(on)g(which)h(they)0 1456 y(are)h (based)g(can)h(b)q(e)g(gained)g(from)e(a)h(classi\014cation)i(of)d(programmin\ g)h(mo)q(dels)h(for)f(parallel)h(and)g(concurren)o(t)0 1513 y(programs.)71 1569 y(This)f(c)o(hapter)f(surv)o(eys)h(and)g(classi\014es)h(programming)e (models)i(for)e(parallel)i(and)f(concurrent)f(program-)0 1626 y(ming)h(to)f (determine)i(their)f(sc)o(heduling)i(requirements.)24 b(The)17 b(classi\014ca\ tion)h(is)g(based)f(on)f(where)h(additional)0 1682 y(concurrency)e(is)f(in)o (tro)q(duced)h(\(op)q(erating)e(system)g(and/or)h(application)h(levels\))f (and)f(ho)o(w)h(it)g(is)g(used.)20 b(The)14 b(re-)0 1738 y(sulting)g(classes) f(range)g(from)f fn(pur)n(e)i(p)n(ar)n(al)r(lelism)e fr(mo)q(dels)i(that)e (in)o(tro)q(duce)i(no)e(additional)j(concurrency)e(to)f fn(dual)0 1795 y(c)n (oncurr)n(ency)h fr(mo)q(dels)i(that)e(introduce)i(and)g(use)f(concurrency)h (at)e(b)r(oth)g(the)h(system)g(and)g(application)i(lev)o(els.)0 1851 y(Tw)n (o)f(areas)g(of)g(sc)n(heduling)j(requirements)d(for)f(op)q(erating)h(system) g(supp)r(ort)g(emerge)g(from)f(the)h(analysis:)56 1943 y(1.)22 b(Supp)r(ort) 14 b(for)h(sync)o(hronization)h(with)g(threads)f(that)f(are)h(not)g(curren)o (tly)g(executing.)56 2036 y(2.)22 b(Supp)r(ort)14 b(for)h(dedicating)i(pro)q (cessors)d(to)h(applications)i(or)d(p)r(ortions)h(thereof.)0 2127 y(The)g(\ \014rst)e(requirement)h(exists)h(only)g(in)g(those)f(mo)q(dels)h(that)e(use)i (more)f(threads)g(than)g(pro)q(cessors,)g(while)i(the)0 2183 y(second)g(is)f (present)g(to)f(some)h(degree)h(in)g(all)g(classes)f(of)g(mo)q(dels.)0 2326 y fh(4.1)70 b(Programming)22 b(Mo)s(dels)0 2428 y fr(Precisely)14 b(de\014nitio\ ns)f(of)f(concurrency)h(and)f(parallelism)i(are)e(a)g(prerequisite)i(to)d(the) h(desired)i(classi\014cation)f(of)0 2484 y(programming)g(mo)q(dels.)20 b(The) 14 b fn(applic)n(ation)h(p)n(ar)n(al)s(lelism)d fr(for)h(an)h(application)h (on)f(a)g(m)n(ultipro)s(cessor)f(is)h(de\014ned)0 2540 y(here)f(as)f(the)g (actual)h(degree)f(of)g(parallel)i(execution)f(ac)o(hieved.)19 b(The)13 b(cor\ resp)q(onding)g(de\014nition)h(of)e fn(applic)n(ation)0 2597 y(c)n(oncurr)n (ency)17 b fr(is)i(the)f(maxim)o(um)g(degree)g(of)g(parallel)i(execution)f (that)e(could)i(b)r(e)f(ac)o(hiev)o(ed)h(if)f(an)g(unlimited)0 2653 y(n)o(um) o(b)q(er)h(of)f(pro)q(cessors)h(w)n(ere)g(a)o(v)m(ailable.)32 b(F)l(or)19 b (example,)h(an)e(application)j(consisting)e(of)g(ten)f(indep)s(endent)0 2710 y (pro)q(cesses)e(running)g(on)g(a)f(six)g(pro)q(cessor)h(m)n(ultipro)r(cessor) g(has)f(an)g(application)i(parallelism)g(of)e(six)h(based)g(on)0 2766 y(the)d (six)h(pro)q(cessors,)f(and)h(an)f(application)i(concurrency)g(of)e(ten)g(b)r (ecause)h(it)f(could)i(use)e(up)h(to)f(ten)g(pro)r(cessors.)0 2823 y(Applicat\ ion)23 b(concurrency)g(b)q(ey)o(ond)f(the)f(hardw)o(are)g(parallelism)i(can)f (impro)o(v)n(e)g(hardw)n(are)g(utilization)h(b)o(y)951 2927 y(30)p eop %%Page: 31 42 bop 0 50 a fj(CHAPTER)15 b(4.)35 b(CONCURRENT)16 b(AND)f(P)l(ARALLEL)i(PR)o (OGRAMMING)f(MODELS)276 b fr(31)1018 203 y(Multiroutine)1048 275 y fd(A)1069 316 y(A)1090 358 y(A)1103 383 y(A)1238 275 y(\001)1217 316 y(\001)1196 358 y (\001)1183 383 y(\001)1112 443 y(@)1093 425 y(@)1153 443 y(\000)1172 425 y (\000)1093 384 y 31 2 v 90 w 31 2 v 1303 293 a fq(1)14 b fa(!)f fq(1)1348 338 y(or)1258 383 y(man)n(y)g fa(!)h fq(1)898 189 y 45 2 v 299 x 2 300 v 1 x 45 2 v 973 503 a fr(Virtual)i(pro)q(cessor)1048 575 y fd(A)1069 616 y(A)1090 658 y (A)1103 683 y(A)1238 575 y(\001)1217 616 y(\001)1196 658 y(\001)1183 683 y (\001)1112 743 y(@)1093 725 y(@)1153 743 y(\000)1172 725 y(\000)1093 684 y 31 2 v 90 w 31 2 v 1303 593 a fq(1)e fa(!)f fq(1)1348 638 y(or)1258 683 y(man)n (y)g fa(!)h fq(1)898 504 y 45 2 v 284 x 2 285 v 1 x 45 2 v 958 803 a fr(Ph)o (ysical)j(pro)q(cessor)568 353 y(Application)598 638 y(Op)r(erating)658 683 y (System)585 901 y(Figure)e(4.1:)k(Tw)o(o)14 b(Levels)i(of)e(Concurrency)548 1061 y 851 2 v 547 1118 a 2 57 v 615 1101 a(Relationship)930 1118 y 2 57 v 9 w 2 57 v 1107 1101 a(Mo)q(del)1398 1118 y 2 57 v 548 1119 a 851 2 v 10 x 851 2 v 547 1186 a 2 57 v 573 1169 a(MR)h(=)h(VP)f(=)g(PP)930 1186 y 2 57 v 9 w 2 57 v 964 1169 a(Pure)h(P)n(arallelism)1398 1186 y 2 57 v 548 1188 a 851 2 v 547 1244 a 2 57 v 573 1227 a(MR)f fc(\025)h fr(VP)f(=)g(PP)930 1244 y 2 57 v 9 w 2 57 v 964 1227 a(User)h(Concurrency)1398 1244 y 2 57 v 548 1246 a 851 2 v 547 1302 a 2 57 v 573 1285 a(MR)f(=)h(VP)f fc(\025)g fr(PP)930 1302 y 2 57 v 9 w 2 57 v 964 1285 a(System)g(Concurrency)1398 1302 y 2 57 v 548 1304 a 851 2 v 547 1360 a 2 57 v 573 1343 a(MR)g fc(\025)h fr(VP)f fc(\025)g fr(PP)930 1360 y 2 57 v 9 w 2 57 v 964 1343 a(Dual)h(Concurrency)1398 1360 y 2 57 v 548 1362 a 851 2 v 227 1439 a(T)l(able)g(4.1:)j(Programming)14 b(Mo)q(dels)i(for)e(P)o (arallel)j(and)e(Concurren)o(t)g(Programming)0 1622 y(allo)o(wing)g(other)e (p)r(ortions)g(of)h(the)g(application)h(to)e(pro)q(ceed)i(if)f(one)g(p)r(orti\ on)f(blo)r(c)o(ks)h(for)f(some)h(reason,)f(suc)o(h)h(as)0 1679 y(a)h(disk)g (or)g(net)o(w)n(ork)g(op)q(eration.)20 b(The)15 b(use)g(of)g(concurrency)g (can)g(also)g(simplify)i(programming)d(of)h(concurren)o(t)0 1735 y(applicatio\ ns)j(b)o(y)f(allowing)g(the)g(state)f(of)g(ongoing)h(interactions)f(to)h(b)q (e)g(captured)g(in)h(the)f(lo)r(cal)g(v)n(ariables)g(of)0 1792 y(executing)f (en)o(tities)g(instead)g(of)f(a)g(state)f(table.)71 1848 y(Programming)i(mo)q (dels)j(for)e(applications)i(can)f(in)o(tro)q(duce)g(concurrency)h(b)q(ey)o (ond)f(the)g(hardw)n(are)g(paral-)0 1905 y(lelism)i(at)e(t)o(w)n(o)h(lev)o (els)h(as)e(sho)n(wn)h(in)g(Figure)g(4.1.)29 b(An)19 b(op)q(erating)g(system) f(can)h(introduce)g(concurrency)h(b)o(y)0 1961 y(pro)o(viding)d(indep)s(enden\ tly)f(sc)o(hedulable)i(en)o(tities)f(suc)o(h)f(as)g(Unix)h(pro)q(cesses)f(or) f(Mac)o(h)h(threads)g(that)f(it)h(m)o(ul-)0 2017 y(tiplexes)h(on)n(to)e(the)g (hardw)o(are)f(pro)q(cessors.)20 b(The)15 b(term)g fn(virtual)h(pr)n(o)n(c)n (essor)f fr(or)f(VP)h(is)h(used)g(for)e(these)h(entities.)0 2074 y(A)j(user)h (lev)o(el)g(library)h(or)d(language)i(run)o(time)g(ma)n(y)f(c)o(ho)q(ose)g (to)g(introduce)h(further)g(concurrency)g(b)o(y)f(m)o(ulti-)0 2130 y(plexing) d(language)g(lev)o(el)g(en)o(tities)g(on)n(to)e(these)i(VPs.)k(These)14 b(en) o(tities)h(are)e(referred)h(to)g(as)f fn(multir)n(outines)p fr(;)h(they)0 2187 y(ma)n(y)j(b)r(e)g(though)n(t)g(of)f(as)h(m)n(ultipro)s(cessor)f(generalizati\ ons)j(of)d(coroutines.)25 b(Sp)r(ecial)18 b(cases)f(of)g(m)n(ultiroutines)0 2243 y(include)i(coroutines)d(\(only)h(one)f(VP\),)g(and)g(the)g(common)g(pro\ gramming)g(notion)g(of)g(m)o(ultiple)i(threads)e(\(one)0 2300 y(VP)d(p)r(er)g (m)o(ultiroutine\))h(as)f(found)h(in)g(the)g(Mac)n(h)g(Cthreads)e(library[12]\ .)19 b(Multiroutines)c(and)e(virtual)h(pro)q(ces-)0 2356 y(sors)i(can)h(b)r (e)g(identi\014ed)g(in)h(an)o(y)f(parallel)h(programming)e(language)h(impleme\ n)q(tation)f(or)h(en)o(vironmen)o(t.)25 b(An)0 2413 y(Ada)82 2396 y fg(1)117 2413 y fr(run)o(time)15 b(on)h(Unix)g(w)n(ould)g(employ)f(Unix)h(pro)q(cesses) f(as)g(its)g(virtual)h(pro)q(cessors)f(and)g(Ada)h(tasks)e(as)h(its)0 2469 y (m)o(ultiroutines.)21 b(The)14 b(Mac)n(h)h(Cthreads)e(library)i([12)o(])f(emp\ loys)f(Mac)o(h)h(threads)g(as)g(its)g(virtual)h(pro)q(cessors)f(and)0 2526 y (Cthreads)h(as)g(its)g(m)o(ultiroutines.)71 2582 y(Programming)h(mo)q(dels)i (for)e(parallel)j(and)e(concurren)o(t)g(programming)g(can)g(b)q(e)h(classi\ \014ed)g(based)g(on)f(the)0 2638 y(relationships)22 b(among)f(the)g(n)o(um)o (b)q(ers)g(of)f(m)o(ultiroutines)i(\(MR\),)e(virtual)i(pro)q(cessors)f(\(VP\)\ ,)e(and)j(ph)o(ysical)0 2695 y(pro)q(cessors)11 b(\(PP\))f(supp)r(orted)g(b)o (y)h(the)g(mo)q(del)h(\(T)l(able)f(4.1\).)17 b(F)l(or)11 b fn(pur)n(e)h(p)n (ar)n(al)s(lelism)d fr(mo)q(dels,)k(the)e(programmer's)0 2745 y 779 2 v 52 2802 a ff(1)69 2818 y fp(Ada)i(is)h(a)f(trademark)h(of)e(the)i(US)e(Gov)o(ern\ ment.)p eop %%Page: 32 43 bop 0 50 a fj(CHAPTER)15 b(4.)35 b(CONCURRENT)16 b(AND)f(P)l(ARALLEL)i(PR)o (OGRAMMING)f(MODELS)276 b fr(32)0 195 y(notion)13 b(of)f(concurrency)h(is)g (identical)g(to)f(the)g(hardw)o(are)g(parallelism.)21 b(Compiler)13 b(generat\ ed)g(co)q(de)g(for)e(parallel)0 252 y(execution)22 b(of)d(lo)r(op)h(b)r(o)q (dies)h(is)g(a)f(common)g(example.)37 b fn(User)20 b(c)n(oncurr)n(ency)g fr (mo)q(dels)h(introduce)g(additional)0 308 y(concurrency)g(at)e(the)h(user)g (level.)35 b(An)20 b(example)h(is)f(programs)f(based)h(on)g(a)g(queue)g(of)g (user-de\014ned)i(tasks)0 364 y(that)e(are)g(dequeued)i(and)e(executed)i(in)f (parallel)h(b)o(y)e(virtual)h(pro)q(cessors.)36 b(A)20 b fn(c)n(or)n(outine)g fr(mo)q(del)i(is)f(a)f(user)0 421 y(concurrency)11 b(mo)q(del)g(with)g(exactl\ y)f(one)h(ph)o(ysical)g(pro)q(cessor)f(and)h(hence,)h(one)e(virtual)h(pro)q (cessor.)18 b(The)10 b fn(system)0 477 y(c)n(oncurr)n(ency)j fr(mo)q(dels)h (introduce)h(additional)g(concurrency)g(only)f(at)f(the)h(system)f(level.)20 b (This)14 b(class)h(of)e(mo)q(del)0 534 y(is)k(used)g(b)o(y)g(most)e(m)o(ultit\ hreading)j(pac)o(k)n(ages)e(suc)o(h)h(as)f(parallel)i(language)e(runtime)g (systems)g(includin)q(g)j(the)0 590 y(Mac)n(h)11 b(Cthreads)f(library[12])g (and)g(the)h(T)l(opaz)f(system)g(dev)o(elop)r(ed)h(at)e(Digital)i(Equipmen)q (t's)e(System)h(Research)0 647 y(Cen)o(ter)15 b([4].)20 b(Finally)n(,)15 b (the)h(relatively)g(new)g(class)g(of)f fn(dual)i(c)n(oncurr)n(ency)e fr(mo)q (dels)h(intro)q(duces)g(concurrency)g(at)0 703 y(b)r(oth)e(the)h(system)f(and) i(user)f(lev)o(els.)21 b(One)15 b(example)h(of)e(this)i(is)f(the)g(P)o(ortabl\ e)g(Common)f(Runtime)h(for)f(Cedar)0 760 y(dev)o(elop)r(ed)21 b(at)e(Xero)n (x)h(P)l(ARC[54)o(].)33 b(The)20 b(Unix)h(implemen)q(tation)f(of)f(this)h(run) o(time)h(limits)g(the)f(n)o(um)o(b)q(er)g(of)0 816 y(activ)o(e)13 b(virtual)g (pro)q(cessors)g(while)h(allo)o(wing)f(large)g(n)o(um)o(b)r(ers)f(of)g(m)o (ultiroutines.)21 b(The)13 b(run)o(time)g(con)o(v)n(erts)g(most)0 873 y(blo)r (c)o(king)g(op)q(erating)g(system)f(op)r(erations)g(to)g(their)i(non-blo)r (c)o(king)f(equiv)o(alen)o(ts)f(and)h(blo)r(c)o(ks)g(the)g(m)n(ultiroutine)0 929 y(in)g(the)e(run)o(time)h(system.)19 b(Additional)13 b(virtual)f(pro)q (cessors)g(are)f(a)o(v)m(ailable)j(for)d(situations)h(in)g(which)g(op)q(erati\ ons)0 985 y(that)i(blo)r(c)o(k)h(in)h(the)g(op)q(erating)f(system)g(k)o(ernel) h(cannot)f(b)q(e)h(a)n(v)o(oided.)71 1042 y(The)k(programming)g(mo)q(del)i (for)e(an)g(application)j(dep)r(ends)e(b)q(oth)f(on)h(the)g(programming)f(lan\ guage)g(or)0 1098 y(library)13 b(and)f(ho)o(w)f(it)h(is)h(used.)19 b(F)l(or) 11 b(example,)i(pure)g(parallelism)h(applications)f(can)f(b)r(e)g(written)g (using)g(a)g(library)0 1155 y(or)18 b(language)g(with)g(a)g(system)g(concurre\ ncy)h(mo)q(del)g(b)o(y)f(creating)h(exactly)f(as)g(man)n(y)h(virtual)f(pro)q (cessors)g(as)0 1211 y(ph)o(ysical)d(pro)q(cessors.)k(If)13 b(m)o(ultiple)i (levels)f(of)f(languages)g(and)h(libraries)h(are)e(used,)h(it)f(is)h(p)r(ossi\ ble)g(to)f(in)o(tro)q(duce)0 1268 y(more)g(than)f(one)h(level)h(of)e(user)h (concurrency)m(.)19 b(The)14 b(ab)q(o)n(v)o(e)f(classi\014cation)h(do)r(es)f (not)f(distinguish)j(among)e(lev)o(els)0 1324 y(of)18 b(concurrency)h(at)f (the)g(user)h(lev)o(el,)h(so)e(suc)o(h)h(models)h(w)n(ould)f(b)r(e)f(classi\ \014ed)j(as)c(user)i(concurrency)g(or)f(dual)0 1381 y(concurrency)e(mo)q(dels) g(dep)r(ending)h(on)e(whether)g(they)g(use)h(system)f(concurrency)m(.)0 1524 y fh(4.2)70 b(Sc)n(heduling)21 b(Requiremen)n(ts)0 1625 y fr(Programming)14 b (mo)q(dels)i(that)e(do)h(not)g(use)g(system)g(concurrency)h(usually)g(require) g(dedicated)g(use)g(of)e(pro)q(ces-)0 1682 y(sors.)19 b(These)14 b(mo)q(dels) h(are)e(required)i(b)o(y)f(\014ne)g(grain)g(applications)h(where)f(the)g(t)o (ypical)h(length)f(of)g(computation)0 1738 y(b)r(et)n(w)o(een)20 b(interactio\ ns)g(with)g(other)f(m)o(ultiroutines)j(is)e(tens)g(to)f(h)o(undreds)i(of)f (instructions.)35 b(The)20 b(absence)0 1795 y(of)e(system)g(concurrency)h(mea\ ns)f(that)g(ev)o(ery)g(virtual)h(pro)q(cessor)g(is)f(alw)o(a)o(ys)g(executing\ .)31 b(This)19 b(assumption)0 1851 y(is)h(incorp)r(orated)f(into)g(the)g(desi\ gn)i(of)e(sync)o(hronization)h(primitiv)q(es)f(for)g(these)h(mo)q(dels)g(\(e.\ g.,)g(spin)g(lo)r(c)o(ks\);)0 1908 y(p)r(erformance)14 b(su\013ers)g(if)g(it) h(is)g(violated.)20 b(As)15 b(a)f(result,)h(programs)e(that)h(use)g(these)h (mo)q(dels)g(require)g(dedicated)0 1964 y(ph)o(ysical)i(pro)q(cessors.)23 b (The)16 b(only)g(exception)i(to)d(this)i(is)f(coroutine)h(models)g(b)r(ecause) g(they)f(use)g(at)f(most)h(one)0 2021 y(ph)o(ysical)f(pro)q(cessor.)k(The)c (ma)r(jor)e(disadv)n(an)o(tage)g(of)h(these)g(classes)g(of)g(mo)q(dels)h(is)f (that)f(they)h(handle)h(blo)r(c)o(king)0 2077 y(system)d(op)q(erations)g(and) g(page)g(faults)g(ine\016cien)q(tly)h(b)q(ecause)g(blo)r(c)n(king)g(a)f(virtu\ al)h(pro)q(cessor)f(in)g(the)h(op)q(erating)0 2133 y(system)j(also)h(blo)r (c)o(ks)g(a)g(ph)o(ysical)h(pro)q(cessor.)24 b(This)18 b(results)f(in)h(w)o (asted)e(time)h(when)h(the)f(ph)o(ysical)h(pro)q(cessor)0 2190 y(is)e(dedicat\ ed)g(to)f(the)g(application.)71 2246 y(The)c(remaining)g(classes)g(of)g(mo)q (dels)g(exhibit)i(di\013eren)o(t)d(sc)o(heduling)j(requirements.)18 b(These) 11 b(classes)g(of)g(mod-)0 2303 y(els)h(pro)n(vide)h(e\016cient)d(supp)r(ort) h(for)f(blo)r(c)o(king)i(op)q(erations,)f(but)h(p)q(oten)o(tially)g(large)f (sync)o(hronization)h(o)o(v)n(erheads)0 2359 y(mak)n(e)j(them)f(inappropriate) i(for)d(\014ne)i(grain)g(applications.)21 b(Blo)r(c)o(king)15 b(op)q(erations) f(are)g(e\016cient)g(b)r(ecause)h(sys-)0 2416 y(tem)e(concurrency)h(can)g(mak) n(e)f(an)h(additional)h(virtual)e(pro)r(cessor)g(a)n(v)n(ailable)i(to)d(utili\ ze)k(the)d(time)h(relinquished)0 2472 y(b)o(y)i(a)f(blo)r(c)o(k)o(ed)h(virtua\ l)g(pro)q(cessor.)21 b(The)16 b(blo)r(c)o(king)g(nature)g(of)f(sync)o(hroniza\ tion)i(in)f(languages)g(suc)o(h)g(as)f(Ada,)0 2529 y(and)e(programming)g(para\ digms)g(like)g(message)g(passing,)h(forces)f(the)g(use)g(of)g(mo)q(dels)h(fro\ m)e(these)i(classes.)20 b(The)0 2585 y(need)c(for)e(dedicated)j(pro)q(cessors) e(in)h(these)f(mo)q(dels)h(is)g(application-dep)s(endent)f(rather)g(than)f (b)r(eing)i(inherent)0 2642 y(in)i(the)e(mo)q(del.)26 b(Applications)19 b(for) d(which)h(parallel)h(execution)g(is)f(imp)r(ortan)n(t)f(ma)o(y)h(need)g(dedic\ ated)h(pro)q(ces-)0 2698 y(sors,)h(while)h(others)e(ma)o(y)g(not.)31 b(Comm)n (unication)20 b(or)e(sync)o(hronization)i(with)f(virtual)h(pro)q(cessors)e (that)g(are)0 2754 y(not)13 b(running)h(can)f(b)r(e)g(exp)r(ensiv)o(e)g(b)r (ecause)h(the)f(op)q(erating)g(system)g(ma)n(y)g(not)g(understand)g(which)g (virtual)h(pro-)0 2811 y(cessors)i(are)h(in)o(v)o(olv)o(ed.)25 b(Op)q(erating) 17 b(system)f(supp)r(ort)g(for)g(suc)o(h)h(sync)o(hronization)h(and)e(comm)o (unication)i(can)p eop %%Page: 33 44 bop 0 50 a fj(CHAPTER)15 b(4.)35 b(CONCURRENT)16 b(AND)f(P)l(ARALLEL)i(PR)o (OGRAMMING)f(MODELS)276 b fr(33)0 195 y(impro)o(v)o(e)14 b(p)r(erformance.)19 b(Ev)o(en)c(with)g(this)g(supp)r(ort,)e(sync)o(hronization)j(can)e(still)i (consume)f(tens)g(to)f(h)o(undreds)0 252 y(of)h(instructions,)h(making)f(thes\ e)g(mo)q(dels)h(inappropriate)g(for)f(\014ne)h(grain)f(parallel)i(application\ s.)0 395 y fh(4.3)70 b(Conclusion)0 496 y fr(In)11 b(summary)l(,)f(there)h (are)f(t)n(w)o(o)f(areas)h(of)g(sc)o(heduling)i(supp)r(ort)d(required)j(b)o (y)e(parallel)i(and)e(concurrent)f(programs:)56 590 y(1.)22 b(Dedicating)16 b (pro)q(cessors)f(for)f(the)i(sole)f(use)h(of)f(an)g(application.)56 684 y(2.) 22 b(Sc)o(heduling)16 b(supp)r(ort)e(for)f(comm)o(unication)j(and)e(sync)o (hronization)h(among)f(virtual)h(pro)q(cessors)f(for)g(ap-)114 740 y(plicatio\ ns)i(that)f(use)g(system)g(concurrency)m(.)0 834 y(The)d(following)g(c)o(hapt\ ers)g(tak)n(e)h(up)f(the)h(issues)g(in)o(v)o(olv)o(ed)g(in)g(pro)n(viding)h (this)e(supp)r(ort)g(and)g(describ)s(e)g(new)g(Mac)o(h)0 891 y(sc)o(heduling) 17 b(features)e(that)g(supp)q(ort)g(parallel)i(and)e(concurren)o(t)g(programs\ .)p eop %%Page: 34 45 bop 0 506 a fi(Chapter)34 b(5)0 714 y fl(Sc)m(heduling)42 b(Supp)s(ort)e(for) g(Concurrency)0 936 y fr(This)11 b(c)o(hapter)f(considers)i(ho)n(w)e(an)h(op) q(erating)f(system)g(sc)o(heduler)i(can)f(supp)r(ort)e(concurrent)h(programmi\ ng)g(and)0 993 y(introduces)16 b(new)f(features)f(of)g(the)h(Mac)n(h)g(sc)o (heduler)h(that)e(pro)o(vide)i(supp)r(ort)d(in)j(this)f(area.)k(F)l(or)14 b (a)h(concurren)o(t)0 1049 y(program)e(with)h(more)f(threads)g(than)h(pro)q (cessors,)f(comm)o(unication)i(or)e(sync)o(hronization)i(with)f(a)f(thread)h (that)0 1106 y(is)h(not)f(running)h(can)f(b)r(e)g(a)g(problem.)20 b(The)15 b (sc)o(heduler)g(m)o(ust)f(b)r(e)g(con)o(vinced)i(to)d(run)i(the)f(other)g(thr\ ead,)g(but)g(in)0 1162 y(man)o(y)h(cases)g(there)g(are)g(no)h(e\013ectiv)o (e)f(mec)o(hanisms)h(to)f(do)g(this.)20 b(New)c(mec)o(hanisms)f(are)g(present\ ed)g(that)g(can)0 1219 y(accomplish)d(the)f(desired)i(e\013ect,)e(Discouragem\ en)o(t)f(and)i(Hando\013)e(Sc)o(heduling.)21 b(Discouragemen)o(t)10 b(Schedul\ ing)0 1275 y(enables)18 b(an)g(application)h(to)e(inform)g(the)g(sc)o(heduler) i(that)e(a)g(thread)g(is)h(curren)o(tly)g(unable)g(to)f(mak)n(e)h(further)0 1332 y(progress,)h(allowing)g(the)h(sc)o(heduler)g(to)f(run)h(another)e(threa\ d.)32 b(Hando\013)19 b(Sc)o(heduling)j(goes)e(a)f(step)g(further)0 1388 y(b)o (y)d(naming)h(the)f(other)g(thread)g(that)g(should)h(b)r(e)f(run.)23 b(Initia\ l)c(results)d(indicate)i(that)e(these)g(tec)o(hniques)i(can)0 1445 y(impro)o (v)o(e)d(the)g(p)r(erformance)g(of)g(b)q(oth)g(sync)o(hronization)h(and)f(com\ m)o(unication)h(in)g(concurrent)f(programs.)0 1588 y fh(5.1)70 b(Ov)n(erview) 0 1689 y fr(Sc)o(heduling)22 b(supp)r(ort)c(for)h(comm)n(unication)i(and)f (sync)o(hronization)g(dep)r(ends)g(on)f(the)h(comm)n(unication)h(and)0 1746 y (sync)o(hronization)c(tec)n(hniques)g(to)e(b)r(e)h(supp)r(orted.)k(These)c (tec)o(hniques)h(can)f(b)r(e)f(divided)j(into)d(t)n(w)o(o)g(classes)h(de-)0 1802 y(p)r(ending)e(on)g(whether)f(they)h(are)f(implemen)q(ted)g(primarily)i (in)g(the)e(op)q(erating)h(system)f(k)o(ernel)h(or)f(applications)0 1859 y (\(with)18 b(supp)r(ort)e(from)h(the)h(op)q(erating)g(system\).)27 b(Sync)o (hronization)18 b(can)g(b)r(e)g(implemented)g(via)g(semaphores)0 1915 y(supp) r(orted)g(b)o(y)g(the)g(op)q(erating)g(system,)g(or)f(b)o(y)h(applications)i (in)f(shared)f(memory)g(with)g(op)q(erating)g(system)0 1972 y(supp)r(ort)c (for)h(blo)r(c)o(king)h(and)f(unblo)q(c)o(king)h(threads)f(as)g(needed.)22 b (Similarly)n(,)15 b(comm)o(unication)h(can)g(also)f(b)r(e)g(im-)0 2028 y(plem\ ented)j(b)o(y)f(message)g(passing)h(in)g(the)f(op)r(erating)g(system)g(or)g (b)o(y)g(a)g(shared)h(memory)f(mec)o(hanism.)27 b(An)o(y)0 2084 y(comm)n(unic\ ation)15 b(mec)o(hanism)f(that)f(can)h(blo)r(c)o(k)f(threads)h(w)n(aiting)g (for)f(comm)o(unication)h(ev)o(ents)f(subsumes)h(the)0 2141 y(functions)g(of) f(sync)o(hronization,)h(but)g(at)e(a)h(p)r(oten)n(tial)h(cost)f(in)h(e\016cie\ ncy)n(.)19 b(Mac)n(h)14 b(pro)n(vides)h(a)e(message)f(passing)0 2197 y(comm)n (unication)j(facilit)q(y)e(in)i(the)f(k)n(ernel,)h(but)f(exp)r(ects)f(that)g (the)h(primary)g(implementation)g(of)f(sync)o(hroniza-)0 2254 y(tion)i(for)g (applications)i(that)d(share)h(memory)g(will)i(b)q(e)f(in)g(the)f(application\ s)i(\(for)d(e\016ciency\).)71 2310 y(Applications)20 b(that)d(use)i(more)f (virtual)g(pro)r(cessors)f(than)h(physical)h(pro)q(cessors)f(can)g(encounter) g(p)q(erfor-)0 2367 y(mance)i(problems)g(when)g(synchronizing)h(with)f(a)f (virtual)i(pro)q(cessor)e(that)g(is)h(not)g(running)g(on)g(a)g(ph)o(ysical)0 2423 y(pro)q(cessor)d(at)f(that)g(time.)24 b(These)18 b(problems)f(are)f(caus\ ed)i(b)o(y)e(the)h(need)h(to)e(run)h(the)g(target)e(thread)i(to)f(com-)0 2480 y(plete)21 b(the)f(sync)o(hronization.)36 b(Curren)o(tly)20 b(a)o(v)m(ailable) i(to)q(ols)e(are)g(often)g(crude:)30 b(the)21 b(initiating)h(thread)e(ma)n (y)0 2536 y(spin,)e(spin)g(with)f(a)g(con)o(text)g(switc)o(h,)g(or)f(blo)r (c)o(k.)25 b(In)18 b(all)g(three)f(cases,)g(the)g(sc)o(heduler)i(do)q(es)e (not)f(kno)o(w)h(which)0 2593 y(thread)c(is)h(the)f(target)f(thread)h(and)g (ma)o(y)g(run)g(other)g(threads)g(instead.)20 b(The)13 b(goal)g(of)g(this)g (researc)o(h)g(is)h(to)e(mak)o(e)0 2649 y(information)j(a)o(v)m(ailable)i(to) e(the)g(sc)o(heduler)i(ab)q(out)e(whic)o(h)h(thread)f(or)g(threads)g(should)h (b)q(e)g(run.)951 2927 y(34)p eop %%Page: 35 46 bop 0 50 a fj(CHAPTER)15 b(5.)35 b(SCHEDULING)16 b(SUPPOR)m(T)f(F)n(OR)h(CON\ CURRENCY)551 b fr(35)0 195 y fh(5.2)70 b(Discouragemen)n(t)21 b(and)j(Hando\ \013)g(Sc)n(heduling)0 297 y fr(These)16 b(tec)n(hniques)h(for)e(impro)o(ving) g(synchronization)h(b)q(eha)o(vior)f(are)g(based)h(on)f(hints.)k(The)d(Mac)n (h)f(sc)o(heduler)0 353 y(is)20 b(implemen)q(ted)g(in)g(the)g(op)q(erating)g (system)f(k)o(ernel,)j(but)d(allows)g(users)h(to)f(pro)o(vide)h(hints)g(that) f(in\015uence)0 409 y(its)e(decisions.)26 b(These)17 b(hints)f(consist)h(of)f (lo)r(cal)h(information)g(inv)n(olving)h(the)f(thread)f(that)g(pro)o(vides)i (the)e(hint)0 466 y(and)22 b(p)r(ossibly)h(one)f(other)g(thread)g(so)g(that)f (users)h(can)g(a)o(v)n(oid)h(main)o(taining)g(information)f(on)h(the)f(o)n (v)o(erall)0 522 y(state)15 b(of)h(their)g(applications.)24 b(The)17 b(hints) e(are)h(based)g(on)g(t)o(w)n(o)g(pieces)h(of)f(sc)o(heduling)i(information)e (that)g(ma)n(y)0 579 y(b)r(e)h(a)n(v)n(ailable)i(when)f(a)f(thread)g(attempts) f(to)h(comm)n(unicate)h(or)f(sync)o(hronize)h(with)g(another)f(thread)g(that) f(is)0 635 y(not)f(running:)22 b(the)16 b(\014rst)f(thread)h(ma)n(y)g(b)r(e)f (unable)i(to)e(mak)o(e)h(further)f(progress)g(until)h(the)g(comm)n(unication) h(or)0 692 y(sync)o(hronization)c(is)g(complete,)h(and)e(it)h(ma)n(y)f(kno)o (w)g(the)h(identit)o(y)f(of)g(the)g(thread)h(it)f(is)h(trying)g(to)f(comm)n (unicate)0 748 y(or)g(sync)o(hronize)i(with.)19 b(F)l(or)12 b(example,)i(in)f (a)f(sync)o(hronization)i(based)f(on)f(a)g(message)g(exchange,)g(the)h(initia\ ting)0 805 y(thread)j(m)n(ust)g(blo)r(c)o(k)f(and)h(the)g(identit)o(y)g(of)f (the)h(thread)g(that)f(m)n(ust)h(complete)g(the)g(sync)o(hronization)h(is)f (often)0 861 y(kno)o(wn.)71 918 y(The)f(Mac)o(h)g(sc)o(heduler)i(has)e(b)r (een)h(enhanced)h(to)e(accept)g(and)h(use)g(hin)o(ts)f(that)g(pro)o(vide)h (this)g(information.)0 974 y(There)f(are)g(t)o(w)n(o)g(classes)h(of)f(hints:) 56 1068 y(1.)22 b fo(Discouragemen)n(t:)e fr(Hint)15 b(that)f(the)i(curren)o (t)f(thread)g(should)h(not)f(run.)20 b(There)15 b(are)g(three)h(lev)o(els:) 133 1162 y(\(a\))22 b(Mild:)f(Giv)o(e)15 b(up)h(the)f(pro)q(cessor)g(to)f(an) o(y)h(other)g(thread)g(if)h(p)q(ossible.)130 1235 y(\(b\))23 b(Strong:)c(Giv) o(e)c(up)h(the)f(pro)q(cessor)g(if)h(p)q(ossible)h(and)e(temp)q(orarily)h(dep\ ress)g(priorit)o(y)l(.)135 1308 y(\(c\))23 b(Absolute:)d(Blo)r(c)o(k)15 b(for) g(a)g(sp)q(eci\014ed)i(time)e(p)r(erio)r(d.)56 1402 y(2.)22 b fo(Hando\013:)d fr(Hint)c(that)f(a)h(sp)r(eci\014c)h(thread)f(should)i(run)e(instead)h(of)f (the)g(curren)o(t)g(one.)0 1495 y(A)f(new)h(primitive,)f fo(thread)t 16 2 v 15 w(switc)o(h)p fr(,)g(allows)g(hints)f(from)h(b)q(oth)g(classes)h(to)f(b)q(e)h (pro)n(vided)h(sim)o(ultaneously)m(.)k(It)0 1552 y(is)c(do)q(cumen)o(ted)g (in)g(App)r(endix)g(D.)71 1608 y(Discouragemen)o(t)e(hints)g(are)g(useful)i (for)e(optimizing)i(shared)f(memory)f(sync)o(hronization)i(in)f(applications) 0 1665 y(that)h(employ)g(system)h(concurrency)m(.)25 b(The)17 b(identit)o(y)g (of)f(the)h(lo)r(c)o(k)f(holder)i(is)g(not)e(recorded)h(b)o(y)g(the)g(common) 0 1721 y(`test-and-set')d(instructions)i(used)g(to)f(implement)g(shared)g(mem\ ory)g(lo)r(c)o(ks,)f(making)i(a)f(Hando\013)f(hint)h(imp)r(os-)0 1778 y(sible\ .)21 b(A)15 b(Discouragemen)o(t)g(hint)f(yields)j(the)e(pro)q(cessor)g(in)h (the)f(hop)q(e)g(that)f(the)i(holder)f(of)g(the)g(lo)q(c)o(k)g(will)i(run.)0 1834 y(This)f(can)f(cause)g(problems)h(if)g(more)e(than)h(one)g(thread)g(is)h (yielding)h(b)r(ecause)e(they)g(ma)o(y)g(yield)i(to)d(eac)o(h)h(other)0 1891 y (with)d(the)g(result)h(that)e(no)h(useful)h(computation)f(o)q(ccurs.)20 b(Thi\ s)12 b(can)g(b)r(e)g(caused)h(b)o(y)f(the)g(timesharing)g(sc)o(heduler)0 1947 y(giving)19 b(the)e(yielding)j(threads)e(higher)g(usage-based)g(priorities)h (than)e(the)h(thread\(s\))f(they)h(are)f(w)o(aiting)h(for.)0 2004 y(Absolute) f(Discouragemen)o(t)f(prev)o(en)o(ts)f(this)i(b)o(y)f(blo)r(c)o(king)g(the)h (threads,)e(but)i(the)f(a)n(v)n(ailable)i(time)e(resolution)0 2060 y(based)i (on)f(clo)r(c)o(k)g(interrupts)g(is)h(usually)h(to)q(o)e(coarse)g(for)g(mediu\ m)h(to)f(\014ne)h(grain)g(sync)o(hronization.)27 b(Strong)0 2116 y(Discourage\ men)o(t)18 b(is)g(a)g(compromise)g(that)f(a)n(v)o(oids)h(the)g(w)o(eaknesses) g(of)g(the)g(other)f(alternativ)o(es.)28 b(A)18 b(Strong)0 2173 y(Discouragem\ en)o(t)f(hint)g(causes)h(the)f(sc)o(heduler)i(to)e(fa)n(v)o(or)g(threads)g (doing)h(useful)h(w)o(ork)e(o)n(v)o(er)g(those)g(that)g(are)0 2229 y(unable)i (to)d(pro)q(ceed)i(without)g(the)f(o)n(v)o(erhead)h(of)f(actually)h(blo)q(c)o (king)g(the)g(latter)e(threads.)26 b(The)18 b(priorit)o(y)f(de-)0 2286 y(pres\ sion)h(caused)g(b)o(y)g(Strong)f(Discouragemen)o(t)g(is)h(canceled)h(when)f (the)f(thread)h(is)g(next)f(c)o(hosen)h(to)f(run)h(b)o(y)0 2342 y(the)f(sc)o (heduler,)i(or)e(b)o(y)h(expiration)g(of)f(a)g(timeout)g(supplied)j(with)e (the)f(hint)g(\(whic)o(hev)o(er)h(comes)f(\014rst\).)26 b(The)0 2399 y(use)16 b(of)e(timeouts)h(is)h(necessary)g(to)e(prev)o(en)o(t)h(starv)m(ation)g(e\013\ ects.)71 2455 y(Hando\013)20 b(Sc)o(heduling)i(`hands)f(o\013)r(')f(the)h(pro) q(cessor)f(directly)i(to)e(the)g(sp)r(eci\014ed)i(thread,)f(b)o(ypassing)g (the)0 2512 y(internal)c(sc)n(heduler)i(mec)o(hanisms.)25 b(Hando\013)16 b (sc)o(heduling)j(ma)n(y)e(designate)g(a)g(thread)f(within)i(the)f(same)g(task) 0 2568 y(or)i(a)f(di\013erent)h(task)f(on)h(the)g(same)g(host)f(to)h(run)g (next.)32 b(A)19 b(shared)g(memory)g(lo)q(c)o(k)g(based)h(on)f(a)f(`compare-) 0 2625 y(and-sw)o(ap')e(instruction)h(can)g(identify)g(the)f(target)g(thread,) g(or)g(it)h(ma)n(y)f(b)r(e)h(a)n(v)m(ailable)i(from)c(the)i(structure)f(of)0 2681 y(an)j(application.)34 b(F)l(or)18 b(example,)j(a)e(bu\013er)g(ma)n(y)g (b)r(e)g(empt)o(y)g(and)g(exactly)h(one)f(thread)g(p)r(erforms)f(the)i(task)0 2737 y(of)d(\014lling)j(it.)26 b(One)19 b(promising)f(use)g(of)f(this)g(tec)o (hnique)i(is)f(to)f(address)g(the)h(problem)g(of)f(`priorit)o(y)g(inv)o(ersio\ n')0 2794 y(where)c(a)g(low)g(priorit)o(y)g(thread)g(holds)h(a)f(lo)r(c)o(k)g (needed)h(b)o(y)f(a)g(high)h(priority)f(thread.)19 b(The)13 b(high)i(priorit) o(y)e(thread)p eop %%Page: 36 47 bop 0 50 a fj(CHAPTER)15 b(5.)35 b(SCHEDULING)16 b(SUPPOR)m(T)f(F)n(OR)h(CON\ CURRENCY)551 b fr(36)0 195 y(can)17 b(detect)g(this)g(situation)g(and)g(hand) g(o\013)f(the)h(pro)q(cessor)f(to)g(the)h(lo)o(w)g(priorit)o(y)f(thread)h(for) f(the)h(purp)r(ose)f(of)0 252 y(dropping)i(the)g(lo)q(c)o(k)354 235 y fg(1) 374 252 y fr(.)26 b(When)18 b(used)g(from)e(outside)i(the)g(k)o(ernel,)g(Hand\ o\013)f(Sc)o(heduling)j(causes)d(the)h(sp)q(eci\014ed)0 308 y(thread)13 b(to) f(b)q(e)h(remo)o(v)n(ed)g(from)f(its)h(run)g(queue)h(and)f(run,)g(a)o(v)n(oid\ ing)h(a)f(run)g(queue)g(searc)o(h.)19 b(Hando\013)12 b(Scheduling)0 364 y(is) i(also)g(extensiv)o(ely)h(used)f(b)o(y)g(Mac)n(h's)g(message)f(passing)h(subs\ ystem)f(inside)j(the)e(k)n(ernel)h(to)e(immediately)j(run)0 421 y(the)e(recip\ ien)q(t)f(of)g(a)g(message.)19 b(Uses)14 b(like)g(this)g(inside)h(the)f(k)o (ernel)g(gain)g(additional)h(p)r(erformance)e(b)r(ecause)h(the)0 477 y(newly) i(a)o(w)n(ak)o(ened)g(thread)f(can)g(b)r(e)g(run)g(immediately)i(without)e (ev)o(er)g(placing)i(it)e(on)h(a)e(run)i(queue.)0 621 y fh(5.3)70 b(P)n(erfor\ mance)0 722 y fr(This)18 b(section)f(presen)o(ts)g(results)g(from)f(t)o(w)n (o)h(exp)r(erimen)o(ts)g(that)f(demonstrate)g(the)h(p)r(erformance)f(b)r(ene\ \014ts)h(of)0 779 y(using)h(sc)o(heduling)h(hints.)26 b(These)17 b(exp)r(erim\ ents)g(w)n(ere)h(p)q(erformed)f(on)g(a)g(Encore)h(Multimax)f(with)h(NS32332)0 835 y(pro)q(cessors,)h(whic)o(h)g(ha)o(v)n(e)g(a)f(sp)r(eed)h(of)f(appro)n (ximately)i(2)e(MIPS.)g(Tw)o(o)g(exp)q(eriments)g(w)o(ere)g(run.)30 b(The)19 b (\014rst)0 891 y(exp)r(erimen)o(t)g(in)o(v)o(estigates)f(the)h(use)g(of)f(hin\ ts)g(for)g(sync)o(hronizing)i(with)f(a)g(thread)f(that)g(is)h(not)f(running.) 32 b(It)0 948 y(uses)19 b(a)f(m)n(ultithreaded)i(test)e(program)f(than)h(sync) o(hronizes)i(with)e(randomly)h(selected)g(threads.)29 b(A)19 b(shared)0 1004 y (v)m(ariable)j(con)o(tains)g(a)e(thread)h(n)o(um)o(b)r(er.)37 b(That)20 b(thr\ ead)h(replaces)h(it)g(with)f(some)g(other)f(randomly)i(c)o(hosen)0 1061 y(thr\ ead)16 b(n)o(um)o(b)r(er,)g(which)h(replaces)g(it)g(with)g(another)f(randomly) h(c)n(hosen)g(thread)g(n)o(um)o(b)q(er,)g(and)f(so)g(on.)24 b(This)0 1117 y (program)13 b(is)i(restricted)f(to)f(run)i(on)f(a)g(single)h(pro)q(cessor,)f (so)g(that)f(it)h(rep)r(eatedly)h(sync)o(hronizes)g(with)f(a)g(thread)0 1174 y (that)i(isn't)h(executing.)25 b(The)17 b(threads)f(that)g(are)h(not)f(the)h (target)e(of)h(the)h(sync)o(hronization)g(use)g(a)g(sc)o(heduling)0 1230 y (hint)e(to)f(encourage)i(the)f(op)q(erating)g(system)g(to)g(run)g(the)g(targe\ t.)71 1287 y(Figure)i(5.1)f(sho)n(ws)h(the)g(elapsed)h(time)f(p)r(er)g(sync)o (hronization)h(in)g(milliseconds)h(for)e(di\013eren)o(t)g(sc)o(heduling)0 1343 y(hints)e(and)h(n)o(um)n(b)r(ers)f(of)g(threads.)21 b(The)15 b(error)g(bars)g (are)g(invisible)j(b)q(ecause)e(the)g(standard)f(deviations)h(for)f(all)0 1400 y(of)g(the)h(results)g(are)f(less)h(than)g(2%)f(of)g(the)h(measured)g(v)m(alu\ e.)22 b(The)16 b(mild)h(discouragement)e(hint)g(exhibits)i(t)o(w)n(o)0 1456 y (di\013erent)d(b)r(eha)o(viors.)20 b(If)15 b(all)h(threads)f(are)g(at)f(the)h (same)g(usage-based)g(priorit)o(y)m(,)f(the)h(synchronization)g(o)q(ccurs)0 1512 y(relativ)o(ely)f(quickly)m(,)f(as)g(indicated)i(b)o(y)e(the)g(Mild-ok)h (curv)o(e)g(on)f(the)g(graph.)19 b(F)l(or)12 b(three)i(or)e(more)h(threads,)g (some)0 1569 y(of)19 b(the)g(threads)g(ma)o(y)g(b)q(e)h(at)f(di\013eren)o(t)g (priorities.)33 b(This)20 b(priority)f(in)o(v)o(ersion)h(causes)f(the)h(sync) o(hronization)0 1625 y(times)c(to)f(increase)i(b)q(ecause)f(m)o(ultiple)i(hig\ h)f(priorit)o(y)e(threads)h(ma)n(y)g(b)r(e)f(w)o(aiting)h(for)f(a)h(lo)o(w)f (priority)g(thread.)0 1682 y(T)l(able)i(5.1)f(sho)n(ws)h(the)f(resulting)i (time)e(ranges)g(\(Mild-bad\);)i(ranges)e(are)g(sho)o(wn)g(b)r(ecause)h(these) f(results)h(are)0 1738 y(sk)o(ew)n(ed)j(to)e(higher)i(frequencies)g(at)e(lo)o (w)o(er)h(v)m(alues.)32 b(Multiple)21 b(runs)e(of)f(the)h(same)g(test)f(cases) h(exhibit)i(b)q(oth)0 1795 y(b)r(eha)n(viors)13 b(unpredictably)n(.)19 b(Long\ er)13 b(test)f(runs)h(are)g(more)f(susceptible)j(to)d(priorit)o(y)h(in)o(v)o (ersion,)g(so)g(the)f(n)o(um)o(b)r(er)0 1851 y(of)g(synchronizations)h(p)r (er)g(run)g(w)n(as)g(reduced)h(for)e(runs)h(inv)n(olving)h(\014v)o(e)f(or)g (more)f(threads)h(to)f(ensure)i(that)e(b)q(oth)0 1908 y(b)r(eha)n(viors)17 b (w)o(ould)g(b)r(e)g(exhibited.)27 b(The)17 b(sync)o(hronization)g(times)g(fro\ m)f(some)h(of)f(the)h(\014v)o(e)g(thread)g(test)f(cases)0 1964 y(are)f(sligh) o(tly)h(b)q(etter)f(than)f(w)o(ould)i(b)q(e)f(exp)r(ected)g(\(based)g(on)g (the)g(other)f(results\).)20 b(This)c(is)f(most)f(likely)i(due)f(to)0 2021 y (the)e(n)o(um)o(b)q(er)g(of)f(threads)g(b)r(eing)h(a)f(divisor)i(of)e(the)h (10Hz)f(clo)r(c)o(k)g(frequency)i(that)d(drives)i(the)f(sc)o(heduler,)i(so)f (that)0 2077 y(stable)j(b)q(eha)o(vior)f(is)h(more)f(likely)m(.)20 b(Absolute) c(Discouragemen)o(t)f(w)n(as)g(not)g(tested)g(b)r(ecause)g(it)h(w)n(ould)g (result)g(in)0 2133 y(times)h(on)g(the)g(order)f(of)g(100ms)g(p)r(er)g(synchr\ onization)h(giv)o(en)g(the)g(hardw)o(are)f(clo)r(c)o(k)h(in)o(terrupt)g(frequ\ ency)g(of)0 2190 y(10Hz.)71 2246 y(These)k(results)h(demonstrate)e(the)h(b)r (ene\014ts)g(of)g(sc)o(heduling)i(hints.)37 b(Running)23 b(this)e(program)f (with)i(no)0 2303 y(sc)o(heduling)14 b(hints)e(yields)i(times)e(of)g(half)h (to)e(one)i(second)g(p)q(er)f(synchronization,)h(demonstrating)f(the)g(p)r (oten)n(tial)0 2359 y(p)r(erformance)21 b(p)r(enalties)j(for)d(ignoring)i(thi\ s)g(problem.)42 b(Con)o(text)21 b(switc)o(hing)j(\(Mild)f(Discouragemen)o(t\)) e(is)0 2416 y(e\013ectiv)o(e)16 b(if)g(there)g(are)f(only)h(t)o(w)n(o)f(threa\ ds)h(in)g(the)g(system,)f(or)g(if)h(all)h(the)e(threads)h(in)o(v)o(olv)o(ed)g (are)f(at)g(the)h(same)0 2472 y(usage-based)11 b(priorit)o(y)m(.)18 b(In)11 b (general,)h(p)r(o)q(or)e(and)h(unpredictable)i(results)f(can)f(b)q(e)g(exp)r (ected)g(from)f(this)h(tec)o(hnique)0 2529 y(b)r(ecause)h(the)f(timesharing)i (sc)n(heduler)h(is)e(con)o(tin)o(ually)h(c)o(hanging)f(thread)f(priorities.) 20 b(Strong)11 b(Discouragemen)o(t)0 2585 y(has)k(predictable)i(p)r(erformanc\ e,)d(but)i(is)f(slo)o(w)o(er)g(than)g(the)g(b)r(est)g(cases)g(of)g(Mild)h(Dis\ couragemen)o(t)f(due)h(to)f(the)0 2642 y(costs)k(of)f(the)i(timeouts)f(associ\ ated)h(with)g(the)f(priority)g(depressions.)33 b(These)19 b(costs)g(also)g (accoun)o(t)g(for)g(the)0 2698 y(increasing)12 b(di\013erence)g(b)q(et)o(w)o (een)f(the)g(`Strong')e(and)i(`Mild-ok')g(as)f(the)h(n)o(um)o(b)r(er)f(of)h (threads)f(increases.)19 b(Hando\013)0 2746 y 779 2 v 52 2803 a ff(1)69 2819 y fp(Such)13 b(detection)h(mec)o(hanisms)h(usually)g(require)g(supp)r(ort)e(fro\ m)g(the)g(implemen)q(tation)h(of)f(the)g(lo)r(c)o(king)h(proto)r(col.)p eop %%Page: 37 48 bop 0 50 a fj(CHAPTER)15 b(5.)35 b(SCHEDULING)16 b(SUPPOR)m(T)f(F)n(OR)h(CON\ CURRENCY)551 b fr(37)0 1598 y @beginspecial 117 @hoffset @setspecial %%BeginDocument: synchgraph.ps /MT {moveto} bind def /LT {lineto} bind def /sethsbcolor {setgray pop pop} bind def /x2sqrt3 2 sqrt 3 mul def /DoLText { gsave 3 1 roll translate rotate newpath 0 0 moveto show grestore } def /DoRText { gsave 3 1 roll translate rotate dup stringwidth pop neg 0 translate newpath 0 0 moveto show grestore } def /DoCText { gsave 3 1 roll translate rotate dup stringwidth pop 2 div neg 0 translate newpath 0 0 moveto show grestore } def /SymbolStart { gsave [] 0 setdash 3 1 roll translate dup dup scale 1 exch div setlinewidth newpath } def /SBox { SymbolStart -3 -3 moveto 3 -3 lineto 3 3 lineto -3 3 lineto closepath stroke grestore } def /SBullet { SymbolStart 0 0 3 0 360 arc fill grestore } def /SCircle { SymbolStart 0 0 3 0 360 arc stroke grestore } def /SCross { SymbolStart -3 -3 moveto 3 3 lineto stroke -3 3 moveto 3 -3 lineto stroke grestore } def /SCustom { pop pop pop } def /SDel { SymbolStart x2sqrt3 2 moveto x2sqrt3 neg 2 lineto 0 -4 lineto closepath stroke grestore } def /SPlus { SymbolStart -3 0 moveto 3 0 lineto stroke 0 -3 moveto 0 3 lineto stroke grestore } def /SDiamond { SymbolStart 45 rotate -3 -3 moveto 3 -3 lineto 3 3 lineto -3 3 lineto closepath stroke grestore } def /SEllipse { SymbolStart 2 1 scale 0 0 3 0 360 arc closepath stroke grestore } def /SNone { pop pop pop } def /SNumber { SymbolStart grestore } def /SSolidBox { SymbolStart -3 -3 moveto 3 -3 lineto 3 3 lineto -3 3 lineto closepath fill grestore } def /StarSide 6 36 cos div dup 36 sin mul sub 36 sin mul 36 cos div def /SStar { SymbolStart 0 3 translate -108 rotate 0 0 moveto 5 { StarSide 0 translate 0 0 lineto -72 rotate StarSide 0 translate 0 0 lineto 144 rotate } repeat closepath stroke grestore } def /STriangle { SymbolStart x2sqrt3 -2 moveto x2sqrt3 neg -2 lineto 0 4 lineto closepath stroke grestore } def /bar { gsave translate rotate exch 2 div exch % ci w/2 h newpath 2 copy pop 0 moveto 2 copy lineto 2 copy exch neg exch lineto 2 copy pop neg 0 lineto closepath stroke % ci w/2 h 3 -1 roll dup 0 ne { % w/2 h ci 3 copy pop moveto % w/2 h ci 3 copy add lineto 3 copy add exch neg exch lineto 3 copy pop exch neg exch lineto stroke 3 copy pop moveto % w/2 h ci 3 copy sub lineto 3 copy sub exch neg exch lineto 3 copy pop exch neg exch lineto stroke currentlinewidth 2 mul setlinewidth pop 2 copy moveto exch neg exch lineto stroke } {pop pop pop } ifelse grestore } def /linesfill { gsave clip initmatrix MFactor MFactor scale 0.5 setlinewidth rotate 1 dict begin /ksp 1000 MFactor div def ksp neg 5 ksp { % v newpath dup ksp exch moveto ksp neg exch lineto stroke } for end grestore newpath } def /lines2fill { gsave clip initmatrix MFactor MFactor scale 0.5 setlinewidth rotate 1 dict begin /ksp 1000 MFactor div def ksp neg 8 ksp { % v newpath dup ksp exch moveto dup ksp neg exch lineto stroke 2 add dup ksp exch moveto ksp neg exch lineto stroke } for end grestore newpath } def /lineswfill { gsave clip initmatrix MFactor MFactor scale 0.5 setlinewidth rotate 1 dict begin /ksp 1000 MFactor div def ksp neg 10 ksp { % v newpath dup ksp exch moveto ksp neg exch lineto stroke } for end grestore newpath } def /crosshatch { dup gsave linesfill grestore 90 add linesfill } def /fillbar { 2 dict begin /pg1 exch def /pg2 exch def 6 copy % save bar parameters gsave translate rotate exch 2 div exch % ci w/2 h 3 -1 roll % w/2 h ci newpath 3 copy pop pop neg 0 moveto 3 copy sub exch neg exch lineto 3 copy sub lineto 3 copy pop pop 0 lineto closepath pg1 3 copy sub exch neg exch moveto 3 copy add exch neg exch lineto 3 copy add lineto 3 copy sub lineto closepath pg2 grestore pop pop pop bar end } def save % Start Page save 0.0 0.0 translate 1.000000 1.000000 scale /MFactor 1.000000 def 1.000000 setlinewidth [2 4] 0 setdash newpath 57.7 47.1 MT 85.8 58.1 LT 113.9 70.4 LT 142.0 84.0 LT 170.1 95.6 LT 198.2 109.4 LT 226.3 118.5 LT 254.4 129.1 LT 282.5 135.7 LT stroke 1.000000 setlinewidth [] 0 setdash 57.7 47.1 0.7500 STriangle 85.8 58.1 0.7500 STriangle 113.9 70.4 0.7500 STriangle 142.0 84.0 0.7500 STriangle 170.1 95.6 0.7500 STriangle 198.2 109.4 0.7500 STriangle 226.3 118.5 0.7500 STriangle 254.4 129.1 0.7500 STriangle 282.5 135.7 0.7500 STriangle 1.000000 setlinewidth [] 0 setdash 57.7 66.2 MT 85.8 89.9 LT 113.9 113.5 LT 142.0 129.7 LT 170.1 158.6 LT 198.2 181.2 LT 226.3 208.3 LT 254.4 221.7 LT 282.5 252.0 LT stroke 1.000000 setlinewidth [] 0 setdash 57.7 66.2 0.7500 SCircle 85.8 89.9 0.7500 SCircle 113.9 113.5 0.7500 SCircle 142.0 129.7 0.7500 SCircle 170.1 158.6 0.7500 SCircle 198.2 181.2 0.7500 SCircle 226.3 208.3 0.7500 SCircle 254.4 221.7 0.7500 SCircle 282.5 252.0 0.7500 SCircle 1.000000 setlinewidth [] 0 setdash 57.7 53.4 MT 85.8 54.1 LT 113.9 54.5 LT 142.0 54.4 LT 170.1 54.7 LT 198.2 55.2 LT 226.3 55.2 LT 254.4 55.6 LT 282.5 56.0 LT stroke 1.000000 setlinewidth [] 0 setdash 57.7 53.4 0.7500 SBox 85.8 54.1 0.7500 SBox 113.9 54.5 0.7500 SBox 142.0 54.4 0.7500 SBox 170.1 54.7 0.7500 SBox 198.2 55.2 0.7500 SBox 226.3 55.2 0.7500 SBox 254.4 55.6 0.7500 SBox 282.5 56.0 0.7500 SBox 29.6 23.6 MT 282.5 23.6 LT stroke 57.7 23.6 MT 57.7 27.2 LT stroke 85.8 23.6 MT 85.8 27.2 LT stroke 113.9 23.6 MT 113.9 27.2 LT stroke 142.0 23.6 MT 142.0 27.2 LT stroke 170.1 23.6 MT 170.1 27.2 LT stroke 198.2 23.6 MT 198.2 27.2 LT stroke 226.3 23.6 MT 226.3 27.2 LT stroke 254.4 23.6 MT 254.4 27.2 LT stroke 282.5 23.6 MT 282.5 27.2 LT stroke /Times-Roman findfont 10 scalefont setfont (Number of Threads) 204.4 0.0 0 DoLText (2) 55.3 10.0 0 DoLText (3) 83.4 10.0 0 DoLText (4) 111.5 10.0 0 DoLText (5) 139.6 10.0 0 DoLText (6) 167.7 10.0 0 DoLText (7) 195.8 10.0 0 DoLText (8) 223.9 10.0 0 DoLText (9) 252.0 10.0 0 DoLText (10) 277.6 10.0 0 DoLText 29.6 23.6 MT 29.6 282.6 LT stroke 29.6 60.6 MT 33.2 60.6 LT stroke 29.6 97.6 MT 33.2 97.6 LT stroke 29.6 134.6 MT 33.2 134.6 LT stroke 29.6 171.6 MT 33.2 171.6 LT stroke 29.6 208.6 MT 33.2 208.6 LT stroke 29.6 245.6 MT 33.2 245.6 LT stroke 29.6 282.6 MT 33.2 282.6 LT stroke (Time \(Milliseconds\)) 10.0 200.9 90 DoLText (0.5) 13.6 55.6 0 DoLText (1.0) 13.6 92.6 0 DoLText (1.5) 13.6 129.6 0 DoLText (2.0) 13.6 166.6 0 DoLText (2.5) 13.6 203.6 0 DoLText (3.0) 13.6 240.6 0 DoLText (3.5) 13.6 277.6 0 DoLText (0.0) 13.6 18.6 0 DoLText (1) 27.2 10.0 0 DoLText 131.9 272.5 0.6500 STriangle (Mild-ok) 149.9 269.5 0 DoLText 131.9 259.5 0.6500 SCircle (Strong) 149.9 256.5 0 DoLText 131.9 246.5 0.6500 SBox (Handoff) 149.9 243.5 0 DoLText [] 0 setdash 1.000000 setlinewidth 113.9 236.4 MT 113.9 282.6 LT 186.7 282.6 LT 186.7 236.4 LT 113.9 236.4 LT stroke restore restore %%EndDocument @endspecial 494 1671 a(Figure)15 b(5.1:)k(Sync)o(hronization)d(Exp)r(erimen) o(t)f(Results)361 2253 y 1225 2 v 360 2310 a 2 57 v 386 2293 a(Threads)572 2310 y 2 57 v 8 w 2 57 v 635 2293 a(3)711 2310 y 2 57 v 766 2293 a(4)842 2310 y 2 57 v 896 2293 a(5)972 2310 y 2 57 v 1021 2293 a(6)1090 2310 y 2 57 v 1139 2293 a(7)1208 2310 y 2 57 v 1257 2293 a(8)1326 2310 y 2 57 v 1375 2293 a(9) 1444 2310 y 2 57 v 1493 2293 a(10)1585 2310 y 2 57 v 361 2311 a 1225 2 v 10 x 1225 2 v 360 2378 a 2 57 v 386 2361 a(Min)572 2378 y 2 57 v 8 w 2 57 v 606 2361 a(0.66)711 2378 y 2 57 v 737 2361 a(1.13)842 2378 y 2 57 v 867 2361 a (3.88)972 2378 y 2 57 v 1021 2361 a(8)1090 2378 y 2 57 v 1116 2361 a(138)1208 2378 y 2 57 v 1234 2361 a(264)1326 2378 y 2 57 v 1352 2361 a(223)1444 2378 y 2 57 v 1481 2361 a(625)1585 2378 y 2 57 v 361 2379 a 1225 2 v 360 2436 a 2 57 v 386 2419 a(Max)572 2436 y 2 57 v 8 w 2 57 v 606 2419 a(1.22)711 2436 y 2 57 v 737 2419 a(4.43)842 2436 y 2 57 v 867 2419 a(7.53)972 2436 y 2 57 v 998 2419 a (607)1090 2436 y 2 57 v 1116 2419 a(487)1208 2436 y 2 57 v 1234 2419 a(926) 1326 2436 y 2 57 v 1352 2419 a(572)1444 2436 y 2 57 v 1470 2419 a(1173)1585 2436 y 2 57 v 361 2437 a 1225 2 v 394 2517 a(T)l(able)h(5.1:)j(Mild-bad)e(Syn\ c)o(hronization)f(Times)g(\(Milliseconds\))p eop %%Page: 38 49 bop 0 50 a fj(CHAPTER)15 b(5.)35 b(SCHEDULING)16 b(SUPPOR)m(T)f(F)n(OR)h(CON\ CURRENCY)551 b fr(38)399 205 y 1149 2 v 398 262 a 2 57 v 424 245 a(Messages) 743 262 y 2 57 v 9 w 2 57 v 914 245 a(RPC)1172 262 y 2 57 v 1303 245 a(1-w)n (a)o(y)1547 262 y 2 57 v 399 263 a 1149 2 v 398 320 a 2 57 v 424 303 a(Idle) 17 b(pro)q(cessor?)743 320 y 2 57 v 9 w 2 57 v 835 303 a(No)973 320 y 2 57 v 1039 303 a(Y)l(es)1172 320 y 2 57 v 1244 303 a(No)1371 320 y 2 57 v 1425 303 a (Y)m(es)1547 320 y 2 57 v 399 321 a 1149 2 v 10 x 1149 2 v 398 388 a 2 57 v 424 371 a(No)e(Hando\013)743 388 y 2 57 v 9 w 2 57 v 777 371 a(1914)p fc(\006) p fr(11)973 388 y 2 57 v 999 371 a(1630)p fc(\006)p fr(6)1172 388 y 2 57 v 1209 371 a(857)p fc(\006)p fr(5)1371 388 y 2 57 v 1396 371 a(432)p fc(\006)p fr(3)1547 388 y 2 57 v 399 389 a 1149 2 v 398 446 a 2 57 v 424 429 a(Hando\ \013)743 446 y 2 57 v 9 w 2 57 v 789 429 a(1848)p fc(\006)p fr(8)973 446 y 2 57 v 999 429 a(1628)p fc(\006)p fr(7)1172 446 y 2 57 v 1198 429 a(861)p fc (\006)p fr(10)1371 446 y 2 57 v 1396 429 a(429)p fc(\006)p fr(4)1547 446 y 2 57 v 399 447 a 1149 2 v 536 525 a(T)l(able)h(5.2:)j(Message)14 b(P)o(assing)h (Hando\013)g(Results)0 708 y(Sc)o(heduling)e(pro)q(duces)f(the)f(b)q(est)g (p)q(erformance)g(and)g(is)g(signi\014cantly)g(faster)f(than)h(sending)h(a)e (message)h(b)q(ecause)0 764 y(no)j(time)h(is)g(sp)q(en)o(t)f(formatting)f(and) i(transp)q(orting)f(the)g(message,)g(or)f(blo)r(c)o(king)i(to)f(w)n(ait)g(for) g(it.)20 b(These)14 b(results)0 821 y(suggest)k(that)f(e\013ectiv)o(e)h(supp) r(ort)g(of)f(system)h(concurren)o(t)g(applications)i(requires)f(Strong)e(Disc\ ouragemen)o(t)0 877 y(supp)r(ort,)g(and)g(that)g(Hando\013)g(Sc)o(heduling)j (is)e(a)f(p)r(o)n(w)o(erful)h(optimization)g(if)g(the)g(information)f(it)h (requires)g(is)0 934 y(a)n(v)n(ailable.)k(These)15 b(are)g(w)o(orst)f(case)h (results,)g(but)h(are)e(indicativ)q(e)i(of)e(the)i(relativ)o(e)f(p)r(erforman\ ce)g(of)f(the)i(hints.)71 990 y(Results)i(rep)r(orted)f(b)o(y)h(Zahorjan,)f (et)g(al[59,)g(60)o(])h(con\014rm)f(the)h(need)h(for)e(mec)o(hanisms)h(to)f (impro)o(v)o(e)h(syn-)0 1047 y(c)o(hronization)13 b(with)f(non-running)h(thre\ ads.)19 b(This)12 b(researc)o(h)g(in)o(v)o(estigated)g(the)g(in)o(teraction)g (of)f(m)o(ultipro)r(cessor)0 1103 y(lo)r(c)o(ks)h(with)i(sc)o(heduling)h(disc\ iplines)h(for)d(applications)h(with)g(more)e(threads)h(than)g(pro)q(cessors.) 19 b(An)13 b(imp)r(ortan)n(t)0 1160 y(result)f(is)g(that)f(desc)o(heduling)j (a)d(thread)g(that)g(holds)h(a)g(lo)q(c)o(k)g(can)f(cause)h(signi\014cant)g (p)q(erformance)f(degradation,)0 1216 y(b)r(ecause)18 b(`other)e(threads)i (will)h(spin)g(for)d(a)i(sc)o(heduling)h(quan)o(tum,)f(a)f(considerable)i(p)r (erio)q(d)f(of)f(time'.)27 b(Mac)o(h)0 1272 y(and)20 b(similar)h(op)q(erating) f(systems)f(ha)o(v)o(e)h(no)f(kno)o(wledge)i(of)e(the)h(lo)r(c)n(ks)g(used)h (b)n(y)f(an)g(application,)i(and)e(will)0 1329 y(o)q(ccasionally)c(desc)o(hed\ ule)g(a)e(thread)g(that)g(holds)g(a)g(lo)r(c)o(k.)19 b(The)c(results)f(in)h (T)l(able)g(5.1)f(sho)n(w)g(that)g(Discourage-)0 1385 y(men)o(t)h(and)h(Hando\ \013)f(hints)g(are)g(e\013ectiv)o(e)h(remedies)g(for)f(this)h(situation,)f (in)i(part)e(b)q(ecause)h(they)g(can)f(b)r(e)g(used)0 1442 y(to)g(a)n(v)o(oid) h(ha)n(ving)g(threads)f(spin)h(for)f(an)g(en)o(tire)h(sc)n(heduling)i(quan)o (tum.)71 1498 y(The)f(second)g(exp)r(eriment)f(concerns)i(the)f(p)q(erformanc\ e)g(b)q(ene\014ts)h(of)e(using)i(Hando\013)f(Sc)o(heduling)i(in)f(the)0 1555 y (k)o(ernel.)i(It)14 b(uses)f(a)g(message)g(passing)h(exerciser)h(to)e(measure) g(the)h(p)q(erformance)f(impact)h(of)f(Hando\013)g(Sc)o(hedul-)0 1611 y(ing)k (in)g(the)f(Mac)o(h)g(IPC)h(system.)22 b(The)17 b(exp)q(eriment)f(inv)n(olv)o (es)h(exc)o(hanging)g(messages)f(b)q(et)o(w)n(een)h(t)n(w)o(o)f(threads)0 1668 y(in)k(a)f(task)g(on)g(b)r(oth)g(single)i(and)e(m)o(ultiple)j(pro)q(cessor)d (con\014gurations.)32 b(The)20 b(k)o(ey)f(di\013erence)i(b)r(et)n(w)o(een)f (the)0 1724 y(unipro)r(cessor)c(and)g(m)o(ultipro)r(cessor)g(exp)r(erimen)o (ts)g(is)g(the)h(a)n(v)m(ailabilit)r(y)f(of)f(an)h(idle)i(pro)q(cessor)e(to)f (run)i(the)f(re-)0 1781 y(cipien)q(t)e(thread.)20 b(Hence,)15 b(the)g(unipro) r(cessor)f(results)h(are)g(also)f(applicable)j(to)d(m)o(ultipro)r(cessors)g (when)i(no)e(idle)0 1837 y(pro)q(cessors)h(are)f(a)o(v)m(ailable.)22 b(T)l (able)15 b(5.2)f(sho)o(ws)g(the)h(results)g(in)h(microseconds)g(of)e(elapsed) i(time)f(p)r(er)g(exc)o(hange)0 1893 y(as)h(mean)g fc(\006)g fr(standard)g (deviation.)23 b(The)17 b(time)f(di\013erences)h(are)f(statistically)h(signi\ \014can)q(t)e(only)i(for)e(the)i(RPC)0 1950 y(case)i(without)f(idle)j(pro)q (cessors.)30 b(The)19 b(RPC)g(case)g(with)g(idle)h(pro)q(cessors)f(b)q(ene\ \014ts)g(from)f(a)h(hando\013)f(in)i(the)0 2006 y(dispatc)o(hing)e(co)q(de)g (discussed)g(in)g(Section)g(2.2.2.)24 b(This)18 b(hando\013)e(w)o(as)h(not)f (disabled)j(for)e(these)g(exp)r(erimen)o(ts)0 2063 y(b)r(ecause)i(it)f(is)i (not)e(sp)q(eci\014c)i(to)e(the)h(IPC)g(system,)f(and)h(b)r(ecause)g(disablin\ g)h(it)f(requires)h(sc)o(heduler)g(mo)q(di\014-)0 2119 y(cations)d(that)e(a\ \013ect)h(the)g(critical)i(con)o(text)e(switc)o(h)h(path.)23 b(Individual)d (messages)c(do)g(not)g(gain)h(p)q(erformance)0 2176 y(from)i(Hando\013)h(Sc)o (heduling)j(for)c(t)o(w)n(o)h(reasons:)29 b(in)21 b(its)g(absence)f(a)g(sende\ r)h(can)f(queue)h(m)o(ultiple)h(messages)0 2232 y(b)r(efore)15 b(con)o(text)h (switc)o(hing)h(to)e(the)i(receiv)o(er,)f(and)h(on)f(a)f(m)o(ultipro)r(cessor) h(the)g(sender)h(and)f(receiver)g(can)h(run)0 2289 y(in)f(parallel)h(with)e (complete)h(o)o(v)n(erlap.)71 2345 y(Based)i(on)g(these)h(results,)g(Mac)n (h)g(is)g(con\014gured)g(to)f(use)g(Hando\013)g(Sc)o(heduling)j(for)d(RPC)g (when)h(no)f(idle)0 2402 y(pro)q(cessor)c(is)h(a)n(v)n(ailable.)21 b(Curren)o (t)13 b(Mac)o(h)h(k)o(ernels)h(can)f(hando\013)g(only)h(once)f(p)r(er)g(RPC)g (b)r(ecause)g(the)h(send)f(half)0 2458 y(of)i(the)g(RPC)h(is)g(implemented)g (separately)f(from)g(the)g(receive.)23 b(This)17 b(results)g(in)g(the)g(sende\ r)g(handing)g(o\013)e(to)0 2514 y(the)j(receiver)f(b)r(efore)h(the)g(sender)g (is)g(queued)h(for)f(the)f(reply)n(.)27 b(When)18 b(the)g(reply)h(comes)f(bac) o(k,)g(no)g(thread)f(is)0 2571 y(queued)i(and)g(no)f(hando\013)g(tak)n(es)h (place.)30 b(The)19 b(Mac)n(h)f(IPC)h(system)f(is)h(b)q(eing)g(redesigned)h (to)e(incorp)r(orate)f(a)0 2627 y(bidirectional)22 b(message)c(primitiv)q(e)h (that)f(can)i(hando\013)e(in)i(b)r(oth)f(directions.)33 b(Similar)20 b(functi\ onality)g(exists)0 2684 y(in)e(other)f(systems,)g(suc)o(h)g(as)g(the)g(T)l (opaz)g(op)q(erating)h(system)e(dev)o(elop)s(ed)h(at)g(Digital)h(Equipment's) e(Systems)0 2740 y(Researc)o(h)g(Cen)o(ter)f(for)f(the)h(Fire\015y[48].)p eop %%Page: 39 50 bop 0 50 a fj(CHAPTER)15 b(5.)35 b(SCHEDULING)16 b(SUPPOR)m(T)f(F)n(OR)h(CON\ CURRENCY)551 b fr(39)0 195 y fh(5.4)70 b(Related)20 b(W)-6 b(ork)0 297 y fr (An)18 b(imp)r(ortan)n(t)g(design)h(decision)h(in)e(the)h(area)e(of)h(sc)n (heduling)j(supp)q(ort)d(for)f(sync)o(hronization)i(is)f(where)h(the)0 353 y (sc)o(heduler)c(and)f(synchronization)g(logic)h(are)f(implemented.)20 b(Mac)n (h)14 b(implemen)q(ts)f(the)h(sc)o(heduler)i(primarily)f(in)0 409 y(the)h(k)n (ernel)h(and)e(exp)r(ects)h(the)f(primary)h(implementation)f(of)h(sync)o(hron\ ization)g(logic)g(to)f(b)r(e)g(in)i(applications.)0 466 y(Alternativ)o(e)h (approac)o(hes)g(to)f(this)h(area)g(include)i(placing)f(b)q(oth)f(sc)o(heduli\ ng)i(and)e(sync)o(hronization)g(logic)h(in)0 522 y(the)c(application,)i(and)e (implemen)q(ting)g(b)r(oth)g(in)h(the)f(op)q(erating)g(system)g(k)o(ernel.)71 579 y(The)i(approac)o(h)g(of)g(implemen)q(ting)g(b)r(oth)g(the)g(sc)o(heduler) i(and)f(sync)o(hronization)g(logic)g(in)g(the)g(k)n(ernel)h(in-)0 635 y(v)o (olv)o(es)f(the)g(use)g(of)f(higher)i(lev)o(el)g(k)o(ernel)g(sync)o(hronizati\ on)f(primitiv)q(es,)g(suc)o(h)g(as)g(semaphores)f(or)h(condition)0 692 y(v)m (ariables.)23 b(The)16 b(adv)m(an)o(tages)f(of)g(this)h(approac)o(h)f(are)h (that)f(a)g(cleaner)i(in)o(terface)f(can)g(b)q(e)g(pro)o(vided)g(b)o(y)g(hidi\ ng)0 748 y(more)j(sc)o(heduler)h(details,)h(and)f(higher)g(lev)o(el)g(primiti\ v)q(es)f(can)g(simplify)i(the)f(implementation)f(of)g(a)g(library)0 805 y(or) h(language)h(run)o(time)f(that)g(uses)h(them.)35 b(The)21 b(corresp)q(onding) h(disadv)n(an)o(tages)d(are)h(that)g(languages)h(and)0 861 y(libraries)14 b (m)o(ust)f(use)g(these)g(primitives)g(to)f(in\015uence)j(the)e(sc)o(heduler,) h(and)f(the)g(primitives)g(ma)o(y)f(b)r(e)h(sp)q(ecialized)0 918 y(to)n(w)o (ards)18 b(some)g(languages)g(or)g(classes)h(of)e(applications.)31 b(This)19 b (can)f(a\013ect)g(p)q(erformance)g(if)h(the)g(primitives)0 974 y(are)f(not)h (a)f(go)q(o)q(d)h(matc)n(h)g(to)f(the)h(programming)f(language)h(or)f(mo)q (del.)32 b(The)19 b(T)l(opaz)f(system)h(uses)g(this)g(ap-)0 1030 y(proac)n (h,)d(but)g(sp)r(ecialization)i(is)e(not)g(an)g(issue)h(in)f(that)g(en)o(viro\ nmen)o(t)g(b)q(ecause)h(most)e(programming)g(is)h(done)0 1087 y(in)g(Mo)q(dul\ a-2+[48].)71 1143 y(The)h(alternativ)o(e)g(of)f(implemen)q(ting)h(b)r(oth)f (the)h(sc)o(heduler)i(and)e(sync)o(hronization)h(in)f(user)g(mo)q(de)h(is)f (t)n(yp-)0 1200 y(i\014ed)j(b)o(y)e(the)g fn(p)n(olicy)h(mo)n(dules)f fr(of)g (systems)f(like)i(Hydra)f([57)o(])g(and)g(StarOS)h([20)o(].)28 b(These)19 b (systems)f(exp)q(ected)0 1256 y(the)g(user)f(to)g(mak)n(e)h(all)h(sc)n(heduli\ ng)h(p)r(olicy)e(decisions,)i(and)d(implemen)q(ted)h(sc)o(hedulers)h(that)d (w)o(ould)i(consult)0 1313 y(application-mo)s(de)i(p)q(olicy)h(mo)q(dules)f (on)g(a)f(regular)g(basis.)34 b(Tw)n(o)19 b(problems)h(w)o(ere)f(encountered) h(with)f(this)0 1369 y(approac)n(h:)i(the)16 b(o)n(v)o(erhead)g(inv)n(olved)g (in)g(consulting)h(p)q(olicy)g(mo)q(dules,)f(and)g(the)g(complexity)f(of)g (p)r(olicy)i(mod-)0 1426 y(ules.)26 b(The)18 b(o)n(v)o(erhead)f(of)g(crossing) g(the)g(application-k)q(ernel)h(b)q(oundary)f(to)g(consult)g(a)g(p)q(olicy)i (module)g(made)0 1482 y(it)h(ine\016cien)q(t)f(to)g(consult)h(suc)o(h)f(mo)q (dules)i(for)e(ev)o(ery)g(sc)o(heduling)i(decision.)35 b(As)19 b(a)g(result,) i(the)e(k)o(ernel)i(w)n(as)0 1539 y(forced)e(to)g(implement)g(short-term)f (p)r(olicy)i(\(compromising)g(the)f(separation)g(of)g(p)q(olicy)i(and)e(mec)o (hanism\),)0 1595 y(and)14 b(w)o(as)f(still)j(p)q(oten)o(tially)f(sub)s(ject) f(to)f(the)h(basic)h(sync)o(hronization)g(problem)g(that)e(motiv)m(ated)h(thi\ s)g(c)o(hapter.)0 1651 y(The)k(complexity)f(of)g(p)q(olicy)i(mo)q(dules)f(res\ ulted)h(from)d(an)i(in)o(terface)f(that)g(exp)r(ected)g(the)h(p)q(olicy)h(mo) q(dule)f(to)0 1708 y(trac)n(k)i(the)g(execution)h(state)e(of)g(the)h(entire)g (application)h(and)f(indicate)i(which)e(virtual)g(pro)q(cessors)g(should)0 1764 y(b)r(e)e(running)i(at)e(which)g(priorities.)32 b(The)18 b(di\016cult)q (y)g(and)h(complexity)f(of)h(obtaining)g(and)g(main)o(taining)g(this)0 1821 y (information)h(resulted)g(in)h(most)d(p)r(olicy)j(modules)g(implemen)q(ting)f (simple)h(susp)q(end/resume)g(functionality)0 1877 y(that)14 b(did)j(not)e (tak)n(e)g(adv)n(an)n(tage)g(of)f(the)i(a)n(v)n(ailable)h(\015exibilit)q(y)l (.)71 1934 y(Mac)n(h)d(a)n(v)o(oids)g(the)f(problems)h(of)f(these)h(systems)f (b)o(y)h(using)g(a)f(di\013eren)o(t)h(design)g(philosophy)m(.)19 b(The)14 b (philoso-)0 1990 y(ph)o(y)f(of)g fn(p)n(olicy)h(me)n(chanism)g(sep)m(ar)n(ati\ on)f fr(that)g(guided)h(the)f(design)h(of)f(the)g(p)r(olicy)h(mo)q(dule)g(sys\ tems)f(holds)h(that)0 2047 y(the)k(k)n(ernel)h(cannot)e(p)r(ossibly)i(underst\ and)f(ho)n(w)g(complex)g(applications)h(synchronize,)f(and)g(that)f(therefore) 0 2103 y(the)e(applications)i(should)f(b)q(e)f(making)g(all)h(sc)o(heduling)h (decisions)g(for)d(themselves,)h(preempting)g(the)g(k)o(ernel's)0 2160 y(sc)o (heduling)k(functionality)e(to)f(prev)o(ent)g(problems.)26 b(Mac)n(h's)17 b (philosophy)g(is)g(that)g(the)g(basic)g(sc)o(heduler)h(do)r(es)0 2216 y(a)f (reasonable)g(job)f(m)o(uc)o(h)h(of)g(the)g(time)g(so)f(that)g(it)h(is)h(b)q (etter)f(to)f(detect)h(and)g(correct)f(mistak)o(es)h(rather)f(than)0 2272 y (prev)o(en)o(t)j(them.)30 b(This)20 b(is)f(supp)r(orted)g(b)o(y)f(the)h(obser\ v)n(ation)g(that)f(man)n(y)h(m)o(ulti-threaded)h(applications)h(run)0 2329 y (acceptably)f(without)f(an)o(y)g(sp)q(ecial)h(synchronization)f(supp)r(ort.) 31 b(Mac)n(h)20 b(a)n(v)o(oids)f(the)g(o)o(v)o(erhead)g(problem)h(b)o(y)0 2385 y(implemen)q(ting)e(the)g(basic)h(sc)o(heduler)g(entirely)g(in)f(the)h(k)n (ernel,)h(but)e(allo)o(wing)h(users)f(to)f(pro)o(vide)i(hints)f(that)0 2442 y (in\015uence)i(its)d(b)r(eha)o(vior.)27 b(The)18 b(complexity)f(problem)h(is) g(a)o(v)o(oided)g(b)o(y)g(designing)h(the)e(user)h(interface)f(to)g(the)0 2498 y(sc)o(heduler)g(to)d(use)h(hints)g(based)g(on)h(lo)q(cal)g(information)f(rat\ her)g(than)g(commands)g(based)g(on)g(global)h(informa-)0 2555 y(tion.)k(This) c(mak)n(es)g(it)f(m)o(uc)o(h)g(easier)h(for)f(applications)i(to)d(acquire)i (and)f(pro)o(vide)h(sc)o(heduling)i(information)d(b)o(y)0 2611 y(a)n(v)o(oidi\ ng)i(the)e(complexity)g(inv)n(olv)o(ed)h(in)g(main)o(taining)g(global)g(state) e(information.)71 2668 y(Zahorjan,)g(et)i(al.)23 b([59)o(])15 b(prop)r(ose)h (an)f(alternativ)o(e)i(approac)n(h)f(to)g(the)g(problem)g(of)g(desc)o(hedulin\ g)i(a)e(thread)0 2724 y(that)c(holds)i(a)f(lo)q(c)o(k.)19 b(They)13 b(prop)r (ose)g(using)g(a)g(\015ag)g(to)f(indicate)i(that)f(a)f(thread)h(is)h(holding) g(the)f(lo)r(c)o(k)g(to)f(prev)o(en)o(t)0 2781 y(this)h(desc)o(heduling,)i (but)d(recognize)h(that)f(this)g(has)g(t)o(w)n(o)g(problems.)20 b(First,)12 b (setting)g(and)h(clearing)g(this)g(\015ag)f(can)p eop %%Page: 40 51 bop 0 50 a fj(CHAPTER)15 b(5.)35 b(SCHEDULING)16 b(SUPPOR)m(T)f(F)n(OR)h(CON\ CURRENCY)551 b fr(40)0 195 y(double)18 b(the)f(length)h(of)f(the)g(co)q(de)g (sequences)i(that)d(acquire)i(and)f(release)g(lo)r(c)o(ks.)25 b(Second,)18 b (an)f(unscrupulous)0 252 y(user)d(could)i(lea)o(v)o(e)e(these)h(\015ags)f(set) g(to)g(obtain)g(b)r(etter)g(service)h(for)e(his)j(threads.)j(The)c(second)f (problem)h(mak)o(es)0 308 y(this)21 b(approac)n(h)f(inappropriate)i(for)d(a)h (k)o(ernel)h(sc)o(heduler)h(that)d(deals)i(with)g(m)n(ultiple)i(applications,) f(but)f(it)0 364 y(could)f(still)g(b)r(e)f(used)g(for)g(a)f(single)i(applicat\ ion)h(sc)o(heduler)f(\(e.g.,)f(a)f(user-mo)q(de)i(sc)o(heduler)g(that)e(sc)o (hedules)0 421 y(m)o(ultiroutines)j(on)n(to)e(virtual)i(pro)q(cessors\).)32 b (The)20 b(sc)o(heduling)h(hints)e(describ)s(ed)h(here)g(enable)g(the)g(use)g (of)f(a)0 477 y(detection)g(and)g(reco)n(v)o(ery)g(approac)n(h)g(instead)g (of)f(this)g(prev)o(ention)g(tec)o(hnique.)31 b(A)18 b(thread)h(that)e(spins) j(on)e(a)0 534 y(lo)r(c)o(k)13 b(for)h(too)g(long)g(can)h(infer)f(that)g(the) g(holder)g(has)g(b)r(een)g(descheduled)i(and)e(use)g(a)g(sc)o(heduling)i(hint) d(to)h(cause)0 590 y(it)g(to)g(b)q(e)g(resc)o(heduled.)22 b(The)14 b(e\016cie\ ncy)h(of)f(this)g(approac)o(h)g(is)h(comparable)f(to)f(prev)o(en)o(tion,)i (and)f(it)g(a)o(v)n(oids)h(the)0 647 y(o)n(v)o(erhead)h(and)f(unfair)h(servic\ e)g(problems)g(that)e(the)i(latter)e(ma)o(y)h(cause.)71 703 y(Hando\013)e(Sc) o(heduling)j(can)e(b)q(e)g(further)f(re\014ned)i(for)e(remote)g(pro)q(cedure) i(calls.)20 b(Logically)n(,)14 b(a)f(single)i(thread)0 760 y(of)i(con)o(trol) g(crosses)g(address)g(space)h(b)q(oundaries)g(to)f(mak)n(e)h(the)f(remote)g (pro)q(cedure)h(call)h(and)e(returns)g(when)0 816 y(it)k(is)g(complete.)38 b (Hando\013)20 b(Sc)o(heduling)j(implemen)q(ts)d(this)h(logical)h(single)g(thr\ ead)f(b)o(y)g(optimizing)h(con)o(trol)0 873 y(transfers)16 b(b)q(et)o(w)n(een) h(t)o(w)n(o)f(threads.)24 b(A)16 b(further)h(re\014nement)f(is)h(to)e(use)i (a)f(single)i(thread)e(of)g(con)o(trol)h(to)e(matc)o(h)0 929 y(the)h(logical) i(con)o(trol)e(\015o)n(w)g([3,)f(26].)22 b(This)17 b(thread)f(directly)i(exec\ utes)f(the)f(call)h(in)g(the)g(remote)e(address)i(space)0 985 y(and)h(returns) g(when)g(the)g(call)h(is)g(complete.)29 b(P)n(erformance)18 b(is)g(impro)o (v)o(ed)g(b)r(ecause)g(only)h(the)f(address)g(space)0 1042 y(is)g(c)o(hanged;) g(there)g(is)g(no)f(need)h(to)f(switc)o(h)h(threads)f(in)h(the)f(op)r(erating) g(system,)g(eliminating)j(the)d(o)o(v)n(erhead)0 1098 y(of)k(blo)r(c)o(king)h (and)f(w)o(aking)g(up)h(the)g(threads)f(in)o(v)o(olv)o(ed)h(in)g(the)g(hando\ \013)f([3)o(].)38 b(Hardw)n(are)22 b(supp)q(ort)f(for)g(the)0 1155 y(address) 16 b(space)g(c)o(hange)f(can)h(further)g(impro)o(v)o(e)f(p)r(erformance)g(of) h(this)g(mec)o(hanism)g(b)o(y)g(eliminating)i(the)d(trap)0 1211 y(into)e(and) h(return)g(from)f(the)h(op)r(erating)f(system)h(k)o(ernel)h([26)o(].)k(This) 14 b(tec)o(hnique)i(e\013ectiv)o(ely)f(separates)e(threads)0 1268 y(from)g (address)i(spaces,)f(and)g(thereb)o(y)g(introduces)h(some)f(pro)q(cess)h(con) o(trol)e(complications.)21 b(F)l(or)14 b(example,)h(the)0 1324 y(op)q(eration) f(of)g(terminating)h(an)f(address)g(space)h(m)n(ust)f(b)r(e)g(prepared)h(to)e (evict)i(threads)f(that)g(ha)n(v)o(e)g(transferred)0 1381 y(in)21 b(from)d (other)i(address)g(spaces)f(\(returning)h(an)g(error)f(indication\),)j(and)e (prev)o(en)o(t)f(the)h(return)g(of)f(threads)0 1437 y(that)13 b(ha)o(v)o(e)h (transferred)f(out)h([3)o(].)19 b(This)c(re\014nemen)o(t)f(promises)g(to)f (greatly)h(reduce)h(the)f(costs)f(of)h(cross-domain)0 1494 y(interactions,)i (but)g(further)g(exp)r(erience)h(is)g(needed)h(to)d(understand)i(the)f(conseq\ uences)i(of)e(its)g(separation)g(of)0 1550 y(threads)f(from)f(address)i(space\ s.)p eop %%Page: 41 52 bop 0 506 a fi(Chapter)34 b(6)0 714 y fl(Pro)t(cessor)40 b(Allo)5 b(cation) 41 b(and)e(Con)m(trol)0 936 y fr(A)17 b(pro)q(cessor)g(allo)r(cation)g(facili\ ty)g(is)g(an)g(imp)r(ortan)n(t)g(comp)q(onen)o(t)g(of)f(a)h(m)o(ultipro)r(ces\ sor)g(op)q(erating)g(system's)0 993 y(sc)o(heduler.)43 b(A)22 b(requirement)g (for)g(dedicated)i(pro)q(cessors)e(is)h(presen)o(t)f(\(to)g(di\013eren)o(t)g (degrees\))h(in)g(all)g(four)0 1049 y(classes)18 b(of)f(programming)g(mo)q (dels)h(surv)o(ey)o(ed)g(in)g(Chapter)f(4,)g(and)h(a)f(simple)i(pro)q(cessor) e(allo)r(cation)h(facility)l(,)0 1106 y fn(gang)f(sche)n(duling)p fr(,)f(is)h (supp)r(orted)f(on)h(man)o(y)f(m)o(ultipro)r(cessors.)24 b(A)17 b(gang)f(sc)o (heduler)i(guaran)n(tees)f(to)f(sc)o(hedule)0 1162 y(comp)q(onen)o(ts)j(of)g (an)h(application)h(sim)o(ultaneously)m(.)33 b(This)20 b(is)g(needed)g(b)o (y)g(\014ne)g(grain)f(parallel)i(applications)0 1219 y(b)r(ecause)d(their)h (p)q(erformance)f(is)h(sev)o(erely)g(impaired)g(when)g(an)o(y)f(part)g(of)f (the)i(application)h(is)e(not)g(running,)0 1275 y(but)h(it)g(is)g(also)f(usef\ ul)i(for)e(other)g(classes)h(of)f(parallel)i(programs.)29 b(The)19 b(o)n(v)o (erhead)g(inv)n(olved)g(in)g(assem)n(bling)0 1332 y(a)g(gang)f(of)h(pro)q(ces\ sors)g(for)f(an)h(application)i(can)e(b)q(e)h(signi\014cant,)f(so)g(the)g(pro) q(cessors)g(are)g(often)f(dedicated)0 1388 y(for)i(p)r(erio)q(ds)h(longer)g (than)g(the)g(t)o(ypical)h(timesharing)f(quan)o(tum)g(to)f(amortize)h(this)g (o)n(v)o(erhead.)37 b(Pro)q(cessor)0 1445 y(allo)r(cation)21 b(for)f(applicat\ ions)j(that)d(use)h(system)f(concurrency)i(in)o(v)o(olv)o(es)f(a)g(w)n(eak)o (er)g(guaran)n(tee)g(than)f(gang)0 1501 y(sc)o(heduling,)d(b)q(ecause)f(not)f (all)h(of)f(the)g(virtual)h(pro)q(cessors)f(can)g(b)r(e)g(run)g(simultaneousl\ y)m(.)0 1644 y fh(6.1)70 b(The)22 b(Mac)n(h)h(Pro)s(cessor)g(Allocation)g(F) -6 b(acilit)n(y)0 1746 y fr(This)17 b(c)o(hapter)g(describ)r(es)g(the)f(desig\ n)i(and)f(implementation)g(of)f(a)g(pro)q(cessor)g(allo)r(cation)h(facility)g (for)f(Mac)n(h.)0 1802 y(The)c(most)f(imp)r(ortan)n(t)g(asp)r(ect)g(of)h(this) g(design)h(is)f(the)g(division)i(of)d(the)h(facility)g(among)f(three)h(comp)q (onen)o(ts,)g(the)0 1859 y(k)o(ernel,)g(the)f(application,)i(and)e(a)f(privil\ eged)j(serv)o(er.)18 b(This)12 b(results)f(in)g(a)g(separation)f(of)h(p)q(oli\ cy)h(and)f(mec)o(hanism)0 1915 y(b)o(y)16 b(isolating)i(the)e(allo)r(cation)g (p)r(olicy)h(in)h(the)e(serv)o(er)g(so)g(that)g(only)h(the)f(allo)r(cation)h (mec)o(hanisms)f(ha)o(v)o(e)g(to)g(b)r(e)0 1972 y(implemen)q(ted)i(in)h(the)f (k)o(ernel.)30 b(This)18 b(frees)g(the)h(k)n(ernel)g(from)f(the)g(impact)h (of)e(p)r(olicy)i(c)o(hanges)f(and)g(isolates)0 2028 y(most)h(of)h(their)h (e\013ects)f(to)f(the)i(serv)n(er)f(which)g(is)h(m)o(uc)o(h)f(easier)h(to)f (replace,)i(mo)q(dify)m(,)f(main)o(tain,)g(etc.)f(than)0 2084 y(the)15 b(k)o (ernel.)22 b(Supp)r(ort)14 b(for)h(di\013erent)g(m)n(ultipro)r(cessor)h(arc)n (hitectures)g(is)g(primarily)h(the)e(resp)q(onsibilit)r(y)g(of)g(the)0 2141 y (serv)o(er)g(\(for)g(similar)i(reasons\).)j(The)c(k)o(ernel)g(interface)f(is) h(designed)i(around)d(an)h(abstraction)f(represen)o(ting)h(a)0 2197 y(p)r(o)q (ol)d(of)g(pro)q(cessors,)g(the)g fn(pr)n(o)n(c)n(essor)h(set)p fr(.)k(This)c (pro)o(vides)g(supp)r(ort)e(for)h(all)h(classes)f(of)g(applications,)i(includ\ ing)0 2254 y(b)r(oth)c(those)h(that)f(do)g(and)h(do)g(not)g(use)g(system)f (concurrency)m(,)h(and)g(isolates)g(the)g(serv)o(er)g(from)f(needing)i(to)e (kno)o(w)0 2310 y(ho)o(w)k(the)g(applications)i(are)e(structured.)21 b(Allo)r (cations)15 b(can)h(b)q(e)g(con\014gured)g(to)f(allo)o(w)g(applications)i(com\ plete)0 2367 y(con)o(trol)f(o)n(v)o(er)g(which)g(threads)g(execute)h(on)g(whi\ c)o(h)g(pro)q(cessors)f(at)f(an)o(y)h(time)h(without)f(imp)r(eding)h(the)g (ability)0 2423 y(of)e(the)g(system)g(to)f(remo)o(v)n(e)i(pro)q(cessors)f(fro\ m)f(a)h(runa)o(w)n(a)o(y)g(application.)71 2480 y(A)j(simple)i(batc)n(h-orien\ ted)e(gang)g(sc)o(heduling)j(serv)n(er)d(has)h(b)q(een)g(implemen)q(ted)f(to) g(v)m(alidate)h(the)g(design)0 2536 y(concepts)c(and)g(implementation)f(of)h (this)g(pro)q(cessor)f(allo)r(cation)h(facility)l(.)k(This)d(serv)n(er)f(impl\ ements)f(a)h(greedy)0 2593 y(F)n(CFS)h(p)r(olicy)h(for)e(gran)n(ting)h(pro)q (cessor)g(allo)r(cation)g(requests)g(sub)s(ject)g(to)f(\014xed)i(time)f(and)g (pro)q(cessor)g(limits.)0 2649 y(A)k(rollo)o(v)o(er)f(mo)q(de)h(for)f(allo)r (cations)g(allows)g(the)h(serv)n(er)g(to)f(timeslice)i(its)f(p)q(ortion)g(of) f(the)g(mac)o(hine)i(among)0 2705 y(comp)q(eting)c(applications)i(on)d(a)h (v)o(ery)f(coarse)h(basis)g(\(e.g.,)e(a)h(basic)i(time)f(slice)h(of)e(15)h (min)o(utes\).)24 b(The)17 b(serv)o(er)0 2762 y(uses)f(t)n(w)n(o)f(threads)g (that)g(comm)n(unicate)i(via)e(b)r(oth)f(shared)i(memory)e(and)i(messages,)e (and)i(has)f(b)q(een)h(success-)0 2818 y(fully)g(used)g(b)o(y)f(researc)n(her\ s)h(and)f(studen)o(ts)g(in)g(an)g(undergraduate)g(parallel)i(programming)d (course)h(at)g(CMU.)951 2927 y(41)p eop %%Page: 42 53 bop 0 50 a fj(CHAPTER)15 b(6.)35 b(PR)o(OCESSOR)17 b(ALLOCA)m(TION)f(AND)f (CONTR)o(OL)618 b fr(42)0 195 y(Man)n(y)14 b(extensions)h(to)e(this)i(serv)n (er's)f(p)q(olicy)h(are)f(p)r(ossible,)h(including)h(more)e(sophisticated)h (batc)o(h)f(sc)o(heduling)0 252 y(tec)o(hniques,)i(and)f(the)g(dynamic)h(adju\ stmen)n(t)f(of)f(the)h(n)o(um)o(b)r(er)f(of)h(pro)q(cessors)f(a)o(v)m(ailable) j(to)d(eac)o(h)h(application)0 308 y(based)20 b(on)g(system)g(load.)34 b(The) 20 b(latter)g(extension)g(w)o(orks)f(b)r(est)h(with)g(applications)h(that)f (can)g(adjust)f(their)0 364 y(internal)c(structure)g(to)g(matc)n(h)g(the)g (n)o(um)o(b)r(er)g(of)g(pro)q(cessors)g(a)n(v)n(ailable)i(to)d(them)h(at)g (an)o(y)g(time.)0 486 y fm(6.1.1)55 b(Design)0 572 y fr(The)17 b(design)g(of) f(Mac)n(h's)g(pro)q(cessor)g(allo)r(cation)h(facility)f(emphasizes)i(\015exib\ ilit)q(y)f(b)q(ecause)g(Mac)n(h)g(supp)r(orts)e(a)0 628 y(m)o(ultitude)j(of)e (applications,)i(languages,)f(and)f(programming)g(mo)q(dels)i(on)e(a)g(v)n (ariet)n(y)h(of)f(m)o(ultipro)r(cessor)g(ar-)0 685 y(c)o(hitectures.)k(There) 13 b(are)g(sev)o(eral)h(asp)q(ects)f(to)g(this)g(\015exibilit)r(y)l(.)19 b (It)14 b(should)g(b)q(e)g(p)q(ossible)h(to)d(allo)r(cate)h(pro)q(cessors)0 741 y(to)g(applications)j(written)e(in)h(di\013eren)o(t)f(languages)g(with)g(di\ \013erent)g(programming)f(mo)q(dels.)20 b(Binding)c(threads)0 798 y(to)j(indi\ vidual)j(pro)q(cessors)d(is)h(not)f(su\016cient)g(b)r(ecause)h(applications)h (that)d(use)i(system)f(concurrency)h(need)0 854 y(to)e(bind)i(a)f(p)q(o)q(ol) g(of)g(threads)f(to)g(a)h(p)q(o)q(ol)g(of)g(pro)q(cessors.)30 b(This)19 b(imp\ ro)o(v)o(es)g(their)g(p)r(erformance)f(b)o(y)h(allo)o(wing)0 911 y(an)o(y)e (thread)h(to)f(run)g(on)h(a)f(pro)q(cessor)h(v)m(acated)f(b)o(y)h(a)f(blo)r (c)o(k)o(ed)h(thread.)26 b(The)18 b(allo)r(cation)g(facility)g(should)g(b)r (e)0 967 y(adaptable)e(to)e(the)h(di\013erent)g(m)n(ultipro)r(cessor)g(arc)o (hitectures)h(that)e(can)h(run)h(Mac)n(h,)f(in)h(particular,)f(it)h(should)0 1024 y(b)r(e)f(able)h(to)f(supp)r(ort)g(UMA)g(and)h(NUMA)f(arc)n(hitectures)i (without)e(ma)r(jor)g(c)o(hanges)g(to)g(the)h(k)n(ernel)h(interface.)0 1080 y (The)e(facility)f(should)h(also)g(accommodate)f(the)h(di\013eren)o(t)f(admini\ strative)g(p)r(olicies)i(that)e(are)g(sure)g(to)g(exist)g(at)0 1137 y(v)m(ari\ ous)k(installations)h(concerning)g(who)e(can)h(allo)r(cate)g(ho)n(w)g(man)n (y)g(pro)q(cessors,)g(when,)g(and)g(for)f(ho)n(w)h(long.)0 1193 y(Changes)e (to)g(these)h(p)q(olicies)i(should)e(not)f(require)i(rebuilding)h(the)d(k)o (ernel.)25 b(Finally)n(,)16 b(it)h(is)g(desirable)h(to)e(o\013er)0 1249 y(app\ lications)22 b(complete)e(con)o(trol)g(o)n(v)o(er)g(which)g(threads)f(execute) i(on)f(which)g(pro)q(cessors,)g(but)g(applications)0 1306 y(that)14 b(do)i (not)e(w)o(an)o(t)h(this)g(degree)h(of)e(con)o(trol)h(should)i(not)d(b)r(e)h (forced)g(to)g(implemen)q(t)g(it.)71 1362 y(Mac)n(h's)c(pro)q(cessor)g(allo)r (cation)h(facility)f(meets)h(these)f(goals)h(b)o(y)f(dividing)j(the)d(resp)r (onsibilit)q(y)g(for)g(pro)q(cessor)0 1419 y(allo)r(cation)k(among)g(the)g (three)g(comp)r(onen)o(ts)g(sho)n(wn)h(in)g(Figure)f(6.1:)56 1513 y(1.)22 b (Kernel)16 b(|)g(Allo)r(cation)g(mec)o(hanisms)f(only)m(.)56 1606 y(2.)22 b (Serv)o(er)15 b(|)g(Implemen)q(ts)g(allo)r(cation)g(p)q(olicy)n(.)56 1700 y (3.)22 b(Application)h(|)f(Requests)h(pro)q(cessors)e(from)g(serv)o(er)g(and) h(uses)g(them.)39 b(Can)22 b(con)o(trol)f(their)h(use)g(if)114 1757 y(desired\ .)0 1851 y(The)15 b(serv)n(er)g(m)n(ust)g(b)q(e)g(privileged)h(to)e(gain)h (direct)g(con)o(trol)f(o)o(v)n(er)h(pro)q(cessors.)k(It)14 b(is)h(also)g(the) f(primary)h(comp)q(o-)0 1907 y(nen)o(t)g(a\013ected)f(b)o(y)g(c)o(hanges)h (in)g(usage)f(p)r(olicies)i(or)e(hardw)n(are)h(con\014guration,)f(and)h(is)g (m)n(uc)o(h)g(easier)g(to)f(replace)0 1963 y(or)19 b(recon\014gure)h(than)f (the)h(k)n(ernel.)34 b(This)20 b(design)g(assumes)g(that)e(pro)q(cessors)h (will)j(b)q(e)e(dedicated)g(to)f(appli-)0 2020 y(cations)e(for)g(time)g(p)r (erio)r(ds)g(of)g(seconds)g(or)g(more)g(rather)f(than)i(milliseconds)i(to)c (amortize)h(the)g(o)o(v)o(erhead)g(of)0 2076 y(crossing)i(the)g(b)q(oundaries) h(among)e(the)h(three)g(comp)q(onents)f(to)g(p)r(erform)g(allo)r(cation.)31 b (The)19 b(application)h(to)0 2133 y(serv)o(er)12 b(in)o(terface)g(is)h(not)e (sp)r(eci\014ed)j(b)q(ecause)f(it)f(can)g(b)r(e)g(exp)r(ected)g(to)g(c)o(hang\ e)g(with)g(b)r(oth)g(p)q(olicy)h(and)g(hardw)n(are)0 2189 y(arc)n(hitecture.) 28 b(Some)17 b(serv)o(ers)g(ma)n(y)h(require)g(applications)h(to)e(pro)n(vide) h(authentication)f(information)h(to)f(es-)0 2246 y(tablish)e(their)f(righ)o (t)f(to)g(use)h(certain)g(pro)q(cessors,)f(while)i(other)e(serv)o(ers)g(ma)n (y)h(require)g(information)g(describing)0 2302 y(the)k(lo)r(cation)g(of)g(the) g(requested)g(pro)q(cessors)g(in)h(a)f(NUMA)g(arc)n(hitecture.)29 b(The)19 b (k)n(ernel)g(interface)f(do)q(es)g(not)0 2359 y(c)o(hange)d(from)g(mac)n(hine) i(to)d(mac)o(hine,)i(but)f(some)g(calls)h(return)g(mac)n(hine-dep)t(enden)o (t)f(information.)71 2415 y(The)j(allo)r(cation)h(facility)g(adds)f(t)o(w)n (o)h(new)f(ob)s(jects)g(to)g(the)h(Mac)n(h)g(k)o(ernel)g(interface,)f(the)h fn (pr)n(o)n(c)n(essor)f fr(and)0 2472 y(the)c fn(pr)n(o)n(c)n(essor)h(set)p fr (.)k(Processor)14 b(ob)s(jects)g(corresp)q(ond)g(to)g(ph)o(ysical)h(pro)q(ces\ sors,)f(and)g(are)g(used)h(to)f(manipulate)0 2528 y(them.)41 b(Pro)q(cessor) 22 b(set)g(ob)s(jects)g(are)g(indep)s(endent)g(en)o(tities)h(to)f(whic)o(h)h (threads)f(and)h(pro)q(cessors)f(can)g(b)r(e)0 2584 y(assigned,)17 b(as)e(sho) o(wn)h(in)h(Figure)f(6.2.)22 b(Pro)q(cessors)16 b(only)g(execute)h(threads)f (assigned)h(to)e(the)h(same)g(pro)q(cessor)0 2641 y(set)21 b(and)g(vice-versa\ ,)h(and)f(ev)o(ery)g(pro)q(cessor)f(and)i(thread)f(is)g(alw)o(a)n(ys)g(assign\ ed)h(to)e(a)h(pro)q(cessor)g(set.)37 b(If)21 b(a)0 2697 y(pro)q(cessor)16 b (set)g(has)g(no)g(assigned)h(pro)q(cessors,)f(then)h(threads)f(assigned)h(to) e(it)i(are)f(susp)q(ended.)25 b(Assignmen)o(ts)0 2754 y(are)14 b(initialized) k(b)o(y)c(an)h(inheritance)h(mec)o(hanism.)k(Eac)o(h)14 b(task)g(is)h(also)g (assigned)g(to)e(a)i(pro)q(cessor)f(set,)g(but)g(this)0 2810 y(assignmen)o (t)i(is)g(only)h(used)f(to)g(initialize)j(the)d(assignmen)o(t)g(of)f(threads) h(created)g(in)h(that)e(task.)21 b(In)c(turn,)f(eac)o(h)p eop %%Page: 43 54 bop 0 50 a fj(CHAPTER)15 b(6.)35 b(PR)o(OCESSOR)17 b(ALLOCA)m(TION)f(AND)f (CONTR)o(OL)618 b fr(43)522 203 y 904 2 v 420 x 2 420 v 721 424 a(Op)r(eratin\ g)15 b(System)g(Kernel)1423 623 y 2 420 v 522 625 a 904 2 v 523 789 a fe(#) 523 864 y 2 1 v 75 x(")943 789 y( )943 864 y 2 1 v 75 x(!)-494 b 271 2 v -150 x 271 2 v 613 872 a fr(Application)1123 714 y fe(')1123 930 y 2 134 v 84 x (&)1423 714 y($)1423 930 y 2 134 v 84 x(%)-383 b 134 2 v -300 x 134 2 v 1213 872 a fr(Serv)o(er)733 713 y 2 91 v -48 x fd(6)733 788 y 2 75 v(?)1033 864 y 91 2 v 1082 863 a(-)943 864 y 91 2 v -1 x(\033)1273 668 y 2 45 v -3 x(6)1273 713 y 2 45 v(?)520 1111 y fr(Figure)16 b(6.1:)j(Processor)c(Allo)s(cation)g (Comp)q(onen)o(ts)0 1295 y(task's)d(initial)k(assignmen)o(t)e(is)g(inherited) h(from)e(its)h(paren)o(t)f(up)r(on)h(creation,)f(and)h(the)g(\014rst)f(task)g (in)i(the)e(system)0 1351 y(is)h(initially)j(assigned)d(to)f(the)h fn(default) h(pr)n(o)n(c)n(essor)f(set)p fr(.)19 b(Th)o(us,)14 b(in)g(the)g(absence)g(of) g(explicit)h(assignments,)e(ev)o(ery)0 1407 y(thread)j(and)g(task)g(in)g(the) h(system)e(will)j(inherit)g(the)e(\014rst)f(task's)g(assignment)g(to)h(the)g (default)h(pro)q(cessor)e(set.)0 1464 y(All)k(pro)q(cessors)e(are)g(initially) j(assigned)e(to)e(the)i(default)g(pro)q(cessor)f(set,)g(and)h(at)e(least)i (one)f(pro)q(cessor)g(m)o(ust)0 1520 y(alw)o(a)n(ys)f(b)r(e)g(assigned)h(to)e (it)h(so)g(that)f(internal)h(k)o(ernel)h(threads)f(and)g(imp)r(ortan)n(t)g (daemons)g(can)g(b)q(e)h(run.)22 b(This)0 1577 y(restriction)13 b(mak)n(es)f (it)h(easier)f(to)g(do)g(pro)q(cessor)g(allo)r(cation,)h(b)q(ecause)g(in)o (ternal)g(k)o(ernel)g(threads)f(and)g(imp)r(ortan)n(t)0 1633 y(serv)o(ers)17 b (alw)o(a)o(ys)g(ha)o(v)n(e)h(a)f(place)i(to)e(run.)27 b(The)18 b(alternativ)o (e)g(of)f(allo)o(wing)h(all)h(pro)q(cessors)e(to)g(b)r(e)h(dedicated)g(to)0 1690 y(an)c(application)h(w)o(ould)g(require)g(sp)q(ecial)g(supp)r(ort)e(for) h(sc)n(heduling)j(these)d(threads)f(and)i(daemons,)e(and)h(w)o(ould)0 1746 y (introduce)j(man)o(y)f(failure)i(modes)f(in)g(which)f(one)h(or)f(more)g(of)f (these)i(threads)f(and/or)g(daemons)g(w)o(as)g(unable)0 1803 y(to)f(run.)71 1859 y(The)f(allo)r(cation)g(and)h(use)f(of)g(dedicated)i(pro)q(cessors)d(inv) o(olv)o(es)h(the)g(application,)i(serv)o(er)e(and)g(k)o(ernel.)21 b(The)0 1916 y(division)g(of)e(resp)q(onsibilities)j(is:)28 b(the)19 b(serv)o(er)g(con)o (trols)f(the)h(assignment)f(of)h(pro)q(cessors)f(to)h(pro)q(cessor)g(sets,)0 1972 y(the)j(application)h(con)o(trols)e(the)h(assignmen)o(t)f(of)h(tasks)e (and)i(threads)g(to)f(pro)q(cessor)g(sets,)i(and)e(the)h(k)o(ernel)0 2028 y (do)q(es)d(whatev)n(er)g(the)f(application)i(and)f(serv)n(er)g(ask)f(it)h(to) e(do.)30 b(The)18 b(following)h(example)g(describ)r(es)g(ho)o(w)f(an)0 2085 y (application)f(migh)o(t)e(allo)r(cate)g(six)h(pro)q(cessors)e(for)h(its)g(use\ :)56 2179 y(1.)22 b fo(Application)d fc(\))f fo(Kernel)p fr(:)i(Create)15 b (pro)q(cessor)g(set.)56 2273 y(2.)22 b fo(Application)d fc(\))f fo(Serv)n(er) p fr(:)h(Request)d(six)g(pro)q(cessors)f(for)f(pro)q(cessor)h(set.)56 2366 y (3.)22 b fo(Application)d fc(\))f fo(Kernel)p fr(:)i(Assign)c(threads)f(to)f (pro)q(cessor)h(set.)56 2460 y(4.)22 b fo(Serv)m(er)17 b fc(\))h fo(Kernel)p fr(:)i(Assign)c(pro)q(cessors)f(to)f(pro)q(cessor)h(set.)56 2554 y(5.)22 b fo (Application)p fr(:)g(Use)15 b(pro)q(cessors.)56 2648 y(6.)22 b fo(Applicatio\ n)d fc(\))f fo(Serv)n(er)p fr(:)h(Finished)e(with)f(pro)q(cessors)f(\(Optiona\ l\).)56 2742 y(7.)22 b fo(Serv)m(er)17 b fc(\))h fo(Kernel)p fr(:)i(Reassign) c(pro)q(cessors.)p eop %%Page: 44 55 bop 0 50 a fj(CHAPTER)15 b(6.)35 b(PR)o(OCESSOR)17 b(ALLOCA)m(TION)f(AND)f (CONTR)o(OL)618 b fr(44)642 563 y 634 2 v 270 x 2 270 v 825 713 a(Processor) 15 b(Set)1273 833 y 2 270 v 642 835 a 634 2 v 493 1074 a fe(\023)493 1122 y 2 7 v 42 x(\022)823 1074 y(\020)823 1122 y 2 7 v 42 x(\021)-371 b 247 2 v -90 x 247 2 v 583 1133 a fr(Thread)1123 1074 y fe(\023)1123 1122 y 2 7 v 42 x(\022) 1453 1074 y(\020)1453 1122 y 2 7 v 42 x(\021)g 247 2 v -90 x 247 2 v 1213 1133 a fr(Thread)586 366 y fe(\022\021)586 283 y(\023\020)613 338 y fr(P)1246 366 y fe(\022\021)1246 283 y(\023\020)1273 338 y fr(P)690 563 y fd(B)676 522 y(B) 662 480 y(B)648 439 y(B)637 407 y(B)1213 563 y(\002)1227 522 y(\002)1241 480 y (\002)1255 439 y(\002)1266 407 y(\002)690 875 y(\002)676 916 y(\002)662 958 y (\002)648 999 y(\002)634 1041 y(\002)624 1072 y(\002)1213 875 y(B)1227 916 y (B)1241 958 y(B)1255 999 y(B)1269 1041 y(B)1279 1072 y(B)868 368 y fe(s)73 b (s)g(s)883 1148 y(s)g(s)g(s)660 1261 y fr(Figure)16 b(6.2:)j(Mac)n(h)d(Proces\ sor)f(Set)0 1445 y(This)k(example)h(illustrates)g(three)e(imp)r(ortan)n(t)h (features)f(of)g(the)h(allo)r(cation)g(facility)l(.)30 b(The)19 b(\014rst)g (is)g(that)f(the)0 1501 y(application)e(creates)f(the)g(pro)q(cessor)f(set)h (and)g(uses)g(it)g(as)f(the)h(basis)g(of)f(its)h(comm)o(unication)h(with)f (the)g(serv)n(er,)0 1557 y(freeing)g(the)f(serv)n(er)g(from)f(dep)r(endence)j (on)e(the)g(in)o(ternal)g(structure)g(of)f(the)h(application.)22 b(The)14 b (second)g(is)h(that)0 1614 y(only)i(one)h(pro)q(cessor)e(set)h(is)g(used.)26 b (The)17 b(Mac)o(h)g(sc)o(heduling)i(algorithms)e(describ)r(ed)h(in)f(Chapter) g(2)g(are)f(used)0 1670 y(within)i(eac)o(h)e(pro)q(cessor)h(set,)f(and)h(if)g (the)g(task)e(in)j(this)f(example)g(con)o(tains)g(six)g(or)f(few)o(er)g(threa\ ds)h(there)f(will)0 1727 y(b)r(e)i(no)g(con)o(text)g(switc)o(hes)g(to)g(sh)o (u\017e)g(the)g(threads)g(among)g(the)g(allo)r(cated)g(pro)q(cessors.)29 b (The)18 b(third)h(feature)0 1783 y(is)f(that)e(the)i(serv)n(er)g(do)q(es)f (not)g(need)h(the)f(application's)i(co)q(op)q(eration)f(to)e(remo)o(v)n(e)i (pro)q(cessors)f(from)f(it.)27 b(The)0 1840 y(serv)o(er)15 b(retains)g(comple\ te)h(con)o(trol)f(o)n(v)o(er)g(the)h(pro)q(cessors)e(at)h(all)h(times)g(b)q (ecause)g(it)f(retains)h(the)f(access)g(righ)o(ts)0 1896 y(to)j(the)g(pro)q (cessor)g(ob)s(jects.)29 b(Remo)o(ving)19 b(pro)q(cessors)f(without)g(the)h (application's)g(co)q(op)r(eration)f(should)h(not)0 1953 y(b)r(e)g(necessary) h(for)f(w)n(ell-b)s(eha)o(v)o(ed)h(applications,)i(but)e(it)f(can)h(b)q(e)g (useful)h(for)e(remo)n(ving)h(pro)q(cessors)f(from)g(a)0 2009 y(runa)o(w)n (a)o(y)c(application)i(that)d(has)h(exceeded)i(its)e(allo)r(cated)h(time.)71 2066 y(Protection)f(and)h(authen)o(tication)h(for)e(pro)q(cessor)h(allo)r(cat\ ion)g(is)g(implemen)q(ted)g(b)o(y)g(con)o(trolling)g(access)g(to)0 2122 y(the) d(p)q(orts)f(that)g(represen)o(t)g(the)h(ob)r(jects)g(in)o(v)o(olv)o(ed.)20 b (A)12 b(Mac)n(h)h(p)r(ort)e(is)j(a)e(k)n(ernel-protected)i(queue)g(of)e(messa\ ges,)0 2178 y(for)j(which)g(access)h(in)g(con)o(trolled)h(b)o(y)e(k)o(ernel-i\ mplemen)r(ted)h(capabilities,)h(or)e fn(p)n(ort)i(rights)p fr(.)k(A)16 b(task) f(that)f(do)r(es)0 2235 y(not)g(ha)o(v)n(e)h(a)f(p)q(ort)f(right)g(cannot)h (access)h(the)f(p)r(ort,)f(ev)o(en)h(if)h(the)f(task)g(kno)o(ws)g(ab)q(out)g (the)g(p)q(ort)g(via)g(some)g(other)0 2291 y(mec)o(hanism.)19 b(P)o(ort)10 b (righ)o(ts)h(can)g(b)r(e)g(passed)h(in)g(messages,)f(so)g(tasks)f(that)g(ha)o (v)o(e)h(righ)o(ts)g(can)g(gran)o(t)g(them)g(to)f(other)0 2348 y(tasks.)18 b (P)o(orts)10 b(are)i(used)g(to)f(represent)g(ob)s(jects)g(implemen)q(ted)h (b)o(y)g(the)g(k)n(ernel,)h(so)f(op)q(erations)g(on)f(these)h(ob)s(jects)0 2404 y(are)i(in)o(v)o(ok)o(ed)g(b)o(y)g(sending)h(messages)f(to)f(the)h(corre\ sp)q(onding)h(p)r(orts.)j(A)c(pro)r(cessor)f(set)h(is)h(represen)o(ted)f(b)o (y)g(t)o(w)n(o)0 2461 y(p)r(orts,)e(a)h fn(name)i(p)n(ort)f fr(and)g(a)f fn (c)n(ontr)m(ol)i(p)n(ort)p fr(.)20 b(The)14 b(name)f(p)r(ort)g(identi\014es)h (the)g(set)f(and)h(can)f(b)r(e)h(used)g(to)f(\014nd)h(out)0 2517 y(informatio\ n)k(ab)q(out)f(it,)h(but)f(all)i(op)q(erations)e(on)g(the)h(set)f(itself)h (\(e.g.,)e(assign)i(threads)f(or)g(pro)q(cessors)g(to)g(it\))0 2574 y(require) h(the)f(con)o(trol)f(p)r(ort.)24 b(The)17 b(con)o(trol)g(p)q(ort)f(is)i(giv)o (en)f(to)g(the)g(creator)f(of)g(a)h(pro)q(cessor)f(set.)25 b(A)17 b(pro)q(ces\ sor)0 2630 y(is)j(represented)f(b)o(y)h(a)f(single)i(p)r(ort)e(that)g(allo)o (ws)h(op)q(erations)g(to)f(b)q(e)h(inv)n(ok)o(ed)g(on)g(it.)33 b(These)20 b (p)r(orts)f(will)i(b)r(e)0 2687 y(retained)15 b(b)o(y)g(the)g(privileged)i (sc)n(heduling)g(serv)o(er)d(to)g(ensure)i(its)e(con)o(trol)h(o)n(v)o(er)g (the)f(pro)q(cessors.)20 b(Finally)m(,)15 b(eac)o(h)0 2743 y(host)g(is)g(repr\ esen)o(ted)g(b)o(y)g(a)g fn(host)h(p)n(ort)g fr(and)f(a)g fn(privile)m(ge)m (d)i(host)f(p)n(ort)p fr(.)k(As)15 b(in)h(the)f(pro)q(cessor)g(set)g(case,)f (the)h(host)0 2799 y(p)r(ort)e(names)i(the)g(host)f(and)h(can)f(b)r(e)h(used) g(to)f(\014nd)h(out)g(information)f(ab)r(out)g(it,)h(but)f(op)r(erations)g (that)g(con)o(trol)p eop %%Page: 45 56 bop 0 50 a fj(CHAPTER)15 b(6.)35 b(PR)o(OCESSOR)17 b(ALLOCA)m(TION)f(AND)f (CONTR)o(OL)618 b fr(45)0 195 y(ph)o(ysical)19 b(resources)f(on)f(the)h(host) g(\(e.g.,)e(pro)q(cessor)h(assignment\))g(require)h(the)g(privileged)i(host)d (p)r(ort.)27 b(The)0 252 y(privileged)15 b(host)c(p)r(ort)g(is)i(required)h (to)d(obtain)i(con)o(trol)f(p)q(orts)g(for)f(pro)r(cessors,)h(and)g(can)h(b)q (e)g(used)g(to)e(obtain)i(the)0 308 y(con)o(trol)h(p)q(ort)f(for)g(a)h(pro)q (cessor)f(set)h(from)f(its)h(name)g(p)r(ort.)k(The)c(privileged)i(host)e(p)q (ort)f(is)i(curren)o(tly)f(protected)0 364 y(b)o(y)j(a)f(Unix)i(authen)o(tica\ tion)g(mec)o(hanism)f(\(a)n(v)n(ailable)i(only)e(to)f(the)h(sup)r(er-user\).) 25 b(This)18 b(will)g(b)r(e)f(replaced)h(b)o(y)0 421 y(the)d(k)o(ernel)i(supp\ lying)g(this)f(p)q(ort)f(to)f(the)i(\014rst)f(task)g(on)g(the)g(system)g(whic\ h)h(can)f(then)h(implement)f(whatev)o(er)0 477 y(authen)o(tication)h(is)f(app\ ropriate.)71 534 y(There)g(are)g(t)o(w)n(o)g(di\013erent)g(t)n(yp)r(es)g(of)g (privileged)i(p)r(orts)d(in)i(the)g(pro)q(cessor)f(allo)r(cation)g(facilit)q (y)l(.)20 b(The)15 b(privi-)0 590 y(leged)i(host)e(p)q(ort)g(represents)g(the) h(privilege)i(to)d(con)o(trol)g(ph)o(ysical)i(resources)f(on)f(the)h(host.)21 b(A)16 b(task)f(that)g(has)0 647 y(this)h(privilege)i(\(as)e(evidenced)i(b)o (y)e(p)q(ossession)g(of)g(this)g(p)r(ort\))f(can)h(obtain)g(the)g(p)q(orts)f (to)h(con)o(trol)f(pro)r(cessors.)0 703 y(The)h(second)g(t)n(yp)r(e)f(of)g (privilege)i(is)f(con)o(trol)g(of)f(sc)n(heduling)j(in)e(a)f(pro)q(cessor)h (set,)e(represented)h(b)o(y)h(the)f(con)o(trol)0 760 y(p)r(ort)e(for)g(the)i (pro)q(cessor)e(set.)20 b(This)14 b(privilege)j(is)d(initially)j(giv)o(en)e (to)e(the)h(creator)g(of)f(a)h(pro)q(cessor)g(set.)19 b(F)l(or)14 b(the)0 816 y(default)i(pro)q(cessor)f(set,)g(this)h(is)g(part)f(of)g(the)g(privilege)i (to)e(con)o(trol)g(physical)h(resources)f(b)r(ecause)h(the)f(default)0 873 y (pro)q(cessor)i(set)f(alw)o(a)o(ys)g(con)o(tains)h(at)g(least)g(one)g(pro)q (cessor.)24 b(As)17 b(a)g(result,)g(the)g(con)o(trol)g(p)q(ort)f(for)g(the)h (default)0 929 y(pro)q(cessor)e(set)g(can)g(only)h(b)r(e)f(obtained)h(b)o(y)f (presen)o(ting)h(the)f(privileged)i(host)e(p)r(ort.)71 985 y(This)j(design)g (meets)f(its)h(\015exibilit)q(y)g(goals.)26 b(Di\013eren)o(t)17 b(programming) g(mo)q(dels)h(and)g(languages)f(are)g(sup-)0 1042 y(p)r(orted)e(b)o(y)h(the)g (ability)g(to)f(assign)h(pro)q(cessors)g(to)f(individual)k(pro)q(cessor)d(set\ s,)g(or)f(to)g(one)h(or)g(more)f(common)0 1098 y(sets)i(that)f(matc)n(h)h(the) g(application's)h(requirements.)25 b(An)17 b(assignmen)o(t)g(of)f(one)h(pro)q (cessor)g(to)f(eac)o(h)h(of)g(a)f(col-)0 1155 y(lection)21 b(of)f(pro)q(cesso\ r)g(sets)f(pro)o(vides)i(the)f(application)h(with)g(complete)f(con)o(trol)g (o)n(v)o(er)g(which)g(threads)g(run)0 1211 y(on)d(which)g(pro)q(cessors.)26 b (Isolating)18 b(sc)n(heduling)i(p)q(olicy)f(in)f(a)e(serv)o(er)h(mak)o(es)g (it)g(easy)g(to)g(c)o(hange)g(for)g(di\013eren)o(t)0 1268 y(hardw)o(are)i(arc) n(hitectures)i(and)f(site-sp)r(eci\014c)h(usage)e(p)q(olicies.)35 b(NUMA)20 b (mac)o(hines)g(can)g(use)g(this)g(pro)q(cessor)0 1324 y(allo)r(cation)e(facil\ ity)g(to)g(matc)n(h)g(pro)q(cessor)g(sets)g(to)f(clusters)i(of)e(pro)q(cessor\ s)h(with)g(identical)h(memory)f(access)0 1381 y(c)o(haracteristics.)36 b(This) 21 b(disables)h(the)f(k)o(ernel)g(sc)o(heduler's)h(load)f(balancing)h(b)q(et) o(w)n(een)g(clusters)f(whic)o(h)g(is)g(a)0 1437 y(minimum)14 b(requirement)f (for)g(sc)o(heduling)j(on)d(NUMA)h(mac)n(hines.)21 b(The)14 b(allo)r(cation)f (facilit)q(y)g(do)q(es)h(not)f(pro)o(vide)0 1494 y(a)i(replacement)g(for)g (the)g(disabled)i(load)f(balancing,)g(but)g(the)f(k)o(ernel)i(in)o(terface)e (has)g(b)r(een)h(designed)h(to)d(mak)o(e)0 1550 y(su\016cient)k(information)h (a)n(v)n(ailable)h(for)e(a)g(user-mo)r(de)g(implemen)q(tation)g(of)g(a)h(NUMA) f(load)h(balancer.)31 b(The)0 1606 y(k)o(ernel)15 b(interface)f(used)h(b)o (y)g(the)g(serv)n(er)g(and)f(application)j(to)d(p)q(erform)g(pro)q(cessor)g (allo)r(cation)h(and)g(con)o(trol)f(are)0 1663 y(do)q(cumented)h(in)h(App)r (endix)g(A.)0 1785 y fm(6.1.2)55 b(Impleme)o(n)l(tation)0 1870 y fr(The)20 b (k)o(ernel)h(implementation)f(of)f(pro)q(cessor)h(sets)f(is)i(an)f(extension) g(of)g(the)g(Mac)n(h)g(timesharing)g(sc)o(heduler)0 1927 y(describ)s(ed)g(in) g(Chapter)g(2.)33 b(The)20 b(same)f(sc)o(heduling)j(algorithms)e(are)f(used)i (within)g(eac)n(h)f(pro)q(cessor)g(set)f(to)0 1983 y(a)n(v)o(oid)d(unnecessar\ y)g(dep)r(endencies)h(on)e(ha)n(ving)h(dedicated)h(pro)q(cessors;)d(applicati\ ons)j(ma)n(y)e(still)i(b)q(eha)o(v)o(e)e(dif-)0 2040 y(feren)o(tly)k(when)g (assigned)g(to)f(dedicated)i(pro)q(cessors,)f(but)g(the)f(cause)h(of)f(this)i (b)q(eha)o(vior)f(is)g(to)f(b)q(e)h(found)g(in)0 2096 y(the)14 b(applications\ ,)h(not)e(the)h(sc)o(heduler.)21 b(The)14 b(data)f(structure)h(for)f(eac)o (h)h(pro)q(cessor)f(set)h(con)o(tains)g(a)f(run)h(queue)0 2153 y(that)k(is)i (used)g(as)e(the)i(global)f(run)h(queue)g(for)e(pro)q(cessors)h(assigned)h (to)e(it.)32 b(The)19 b(list)h(of)f(idle)h(pro)r(cessors)e(is)0 2209 y(also)c (main)o(tained)h(on)e(a)h(p)q(er)g(pro)q(cessor)g(set)g(basis)g(b)q(ecause)h (a)e(pro)q(cessor)h(can)g(only)g(b)r(e)g(dispatc)o(hed)h(to)e(threads)0 2266 y (that)i(are)g(assigned)h(to)f(its)h(curren)o(t)f(pro)q(cessor)g(set.)21 b(The) 16 b(pro)q(cessor)f(set)g(data)g(structure)g(is)h(also)g(the)f(head)h(of)0 2322 y(individual)21 b(linked)d(lists)h(that)e(are)g(linked)i(through)e(the)h (data)f(structures)g(of)h(assigned)g(tasks,)f(threads)h(and)0 2379 y(pro)q (cessors)c(so)f(that)g(these)h(en)o(tities)h(can)f(b)q(e)g(found)h(and)f(reas\ signed)g(when)g(the)g(pro)q(cessor)g(set)g(is)g(terminated.)0 2435 y(In)19 b (addition,)h(the)f(data)e(structure)i(con)o(tains)f(some)g(state)g(informatio\ n)h(required)g(to)f(run)h(the)f(timesharing)0 2491 y(sc)o(heduling)d(algorith\ m,)e(the)h(identities)f(of)g(the)g(p)r(orts)f(that)h(represen)o(t)g(the)g(set\ ,)g(and)g(a)g(m)o(utual)g(exclusion)i(lo)r(c)o(k)0 2548 y(to)g(con)n(trol)g (access)h(to)e(the)i(data)e(structure.)71 2604 y(Processor)19 b(sets)h(withou\ t)f(pro)q(cessors,)h(or)f(empt)n(y)h(pro)q(cessor)f(sets,)h(are)f(an)g(imp)r (ortan)n(t)g(feature)g(of)g(this)0 2661 y(design,)i(but)f(impair)g(the)f(impl\ emen)q(tation)g(of)g(the)h(assignmen)o(t)f(op)q(erations.)33 b(The)20 b(a)n (v)m(ailabilit)r(y)f(of)g(empt)o(y)0 2717 y(pro)q(cessor)f(sets)f(is)i(an)f (imp)r(ortan)n(t)f(con)o(tributor)h(to)f(isolating)i(the)f(application)i(stru\ cture)d(from)h(the)g(serv)n(er.)0 2774 y(In)f(the)f(allo)r(cation)g(example)h (ab)r(o)n(v)o(e,)f(the)g(application)i(assigns)e(its)h(threads)f(to)f(a)h(new) h(pro)q(cessor)f(set)g(b)q(efore)p eop %%Page: 46 57 bop 0 50 a fj(CHAPTER)15 b(6.)35 b(PR)o(OCESSOR)17 b(ALLOCA)m(TION)f(AND)f (CONTR)o(OL)618 b fr(46)612 205 y 723 2 v 611 262 a 2 57 v 751 245 a(Op)r(era\ tion)1090 262 y 2 57 v 1161 245 a(Time)1334 262 y 2 57 v 612 263 a 723 2 v 10 x 723 2 v 611 330 a 2 57 v 637 313 a(Create)15 b(Processor)g(Set)1090 330 y 2 57 v 1127 313 a(2250)p fc(\006)p fr(50)1334 330 y 2 57 v 612 331 a 723 2 v 611 388 a 2 57 v 637 371 a(Assign)h(Processor)1090 388 y 2 57 v 1116 371 a(4772)p fc(\006)p fr(128)1334 388 y 2 57 v 612 389 a 723 2 v 611 446 a 2 57 v 637 429 a(Assign)g(thread)f(\(self)t(\))1090 446 y 2 57 v 1127 429 a(1558)p fc(\006)p fr(25)1334 446 y 2 57 v 612 447 a 723 2 v 611 504 a 2 57 v 637 487 a(Assign)h (thread)f(\(other\))1090 504 y 2 57 v 1116 487 a(2624)p fc(\006)p fr(185)1334 504 y 2 57 v 612 506 a 723 2 v 419 583 a(T)l(able)h(6.1:)j(Multimax)c(Allo)r (cation)h(Op)r(eration)f(P)o(erformance)0 766 y(the)e(serv)o(er)g(assigns)h (pro)q(cessors.)19 b(Empt)n(y)14 b(pro)q(cessor)f(sets)g(also)g(allow)g(the)g (serv)o(er)h(to)e(do)i(coarse)f(timeslicing)i(of)0 822 y(pro)q(cessors)g(amon\ g)f(sev)o(eral)i(applications;)g(the)f(applications)i(without)e(pro)q(cessors) g(are)g(in)h(empt)o(y)f(pro)q(cessor)0 879 y(sets)i(a)o(w)n(aiting)i(their)f (turn)f(to)g(run.)28 b(Threads)17 b(assigned)h(to)f(empt)o(y)h(pro)q(cessor)f (sets)h(are)f(\014rst)g(susp)r(ended)h(to)0 935 y(ensure)i(that)f(this)h(do)q (es)g(not)f(happ)q(en)h(to)f(a)g(thread)h(in)g(a)f(non-interruptible)i(w)n (ait.)33 b(This)20 b(is)g(implemen)q(ted)0 992 y(b)o(y)d(susp)r(ending)h(the) g(target)e(thread)h(for)g(the)g(duration)h(of)f(the)g(assignmen)o(t)g(op)r (eration)g(and)g(releasing)i(it)e(at)0 1048 y(completion)e(if)f(the)g(target) e(pro)q(cessor)h(set)h(is)g(not)f(empt)o(y;)h(the)f(only)h(exception)h(is)f (the)g(\(p)q(oten)o(tially)h(common\))0 1105 y(case)g(of)f(a)h(thread)f(c)o (hanging)i(its)f(o)n(wn)g(assignmen)o(t,)f(in)i(which)f(case)f(it)i(will)g (susp)r(end)f(itself)h(at)e(the)h(end)g(of)g(the)0 1161 y(op)q(eration)k(if)g (the)g(target)e(pro)q(cessor)i(set)f(is)h(empt)o(y)l(.)30 b(This)19 b(susp)r (ension)h(also)e(forces)h(the)f(thread)h(to)f(c)o(hange)0 1218 y(pro)q(cessor\ s)h(if)h(the)f(target)g(pro)q(cessor)g(set)g(is)h(not)f(empt)o(y)l(,)h(as)f (it)h(can)f(only)h(run)g(on)f(pro)q(cessors)g(in)h(that)f(set)0 1274 y(after) d(the)h(assignment.)24 b(Pro)q(cessor)17 b(assignmen)o(t)g(op)q(erations)g (susp)q(end)h(all)g(the)f(threads)g(in)h(a)e(pro)q(cessor)h(set)0 1331 y(when) e(remo)o(ving)g(the)g(last)f(pro)q(cessor,)g(and)h(resume)g(them)g(when)g(add\ ing)g(the)g(\014rst)g(pro)q(cessor.)k(The)c(internal)0 1387 y(implemen)q(tati\ on)d(of)g(thread)h(assignmen)o(t)g(is)g(split)h(in)o(to)f(t)n(w)o(o)f(phases,) h(freezing)h(the)f(thread's)f(assignmen)o(t,)h(and)0 1443 y(actually)h(c)o (hanging)g(it.)20 b(This)14 b(allows)f(states)g(to)g(b)q(e)h(c)o(hec)o(k)o (ed)g(and)g(lo)r(c)n(ks)g(acquired)h(b)o(y)e(co)q(de)h(that)f(relies)i(on)f (the)0 1500 y(thread's)f(assignmen)o(t)g(not)g(c)o(hanging)h(\(e.g.,)e(to)h (lo)q(c)o(k)h(a)f(sp)q(eci\014c)i(thread's)e(pro)q(cessor)g(set,)g(it)h(is)g (necessary)g(that)0 1556 y(the)i(thread)g(remain)g(assigned)h(to)e(that)g(pro) q(cessor)h(set\).)21 b(It)16 b(should)h(b)r(e)f(emphasized)h(that)e(the)h(sus\ p)r(end)h(and)0 1613 y(resume)h(op)q(erations)g(discussed)h(in)g(this)f(parag\ raph)f(are)g(the)h(internal)g(hold)h(and)f(release)g(op)q(erations;)h(they)0 1669 y(do)c(not)g(interact)f(with)i(the)f(susp)q(end)h(and)g(resume)f(primiti\ ves)h(exp)q(orted)f(b)o(y)g(the)h(k)n(ernel.)71 1726 y(T)l(able)d(6.1)e(rep)q (orts)h(the)g(times)g(required)i(b)o(y)e(some)g(basic)g(op)r(erations)g(in)h (the)f(pro)q(cessor)g(allo)r(cation)g(system)0 1782 y(on)18 b(an)g(Encore)g (Multimax)h(with)f(ns32332)f(pro)q(cessors)h(\(appro)n(ximately)h(2)f(MIPS\).) g(The)g(times)g(are)g(sho)o(wn)0 1839 y(as)i(mean)f fc(\006)i fr(standard)e (deviation)i(in)g(microseconds.)35 b(The)20 b(self)g(and)g(other)g(cases)g (of)f(thread)h(assignmen)o(t)0 1895 y(corresp)q(ond)g(to)e(a)h(thread)g(assig\ ning)h(itself)h(and)e(a)g(thread)g(assigning)h(another)f(thread.)32 b(These) 20 b(times)f(are)0 1952 y(easily)h(amortized)f(b)o(y)g(the)g(exp)r(ected)g (assignment)f(durations)i(of)e(m)o(ultiple)j(seconds)e(to)g(m)n(ultiple)j(min) o(utes.)0 2008 y(F)l(urther)17 b(optimization)i(w)o(ork)e(could)h(impro)o(v)o (e)g(these)f(times)h(if)g(and)g(when)g(supp)r(ort)f(of)g(shorter)g(assignmen) o(t)0 2064 y(durations)e(b)r(ecomes)g(imp)r(ortan)n(t.)71 2121 y(Sp)q(ecial)k (tec)o(hniques)f(are)f(used)h(to)e(manage)h(the)g(pro)q(cessor)g(to)f(pro)r (cessor)g(set)h(assignments.)25 b(Co)q(de)17 b(in)h(a)0 2177 y(critical)c(pat\ h)e(of)h(the)f(sc)o(heduler)i(reads)f(the)f(assignment)g(as)g(part)g(of)g(\ \014nding)i(a)e(thread)h(to)f(run)h(on)f(a)g(pro)q(cessor.)0 2234 y(T)l(o)f (optimize)i(this)f(common)f(case)h(against)f(infrequent)h(c)n(hanges)g(in)h (assignmen)o(t,)e(eac)o(h)h(pro)q(cessor)f(is)h(restricted)0 2290 y(to)h(c)o (hanging)i(only)f(its)g(o)o(wn)g(assignmen)o(t.)19 b(This)14 b(eliminates)i (the)e(need)h(for)e(a)h(m)n(utual)h(exclusion)g(lo)r(c)o(k)f(b)q(ecause)0 2347 y(a)f(pro)q(cessor)h(lo)q(oking)g(for)f(a)g(new)h(thread)g(cannot)f(sim)o(ult\ aneously)i(c)o(hange)f(its)g(assignmen)o(t.)19 b(The)14 b(cost)f(to)g(the)0 2403 y(assignmen)o(t)18 b(op)r(eration)g(is)h(that)f(it)h(m)o(ust)f(temp)q (orarily)h(bind)h(a)e(thread)g(to)g(the)h(pro)q(cessor)f(while)i(c)o(hanging) 0 2460 y(the)f(assignmen)o(t.)31 b(An)19 b(in)o(ternal)h(k)n(ernel)g(thread,) f(the)g fn(action)h(thr)n(e)n(ad)p fr(,)g(is)f(used)g(for)g(this)g(purp)r(ose\ .)30 b(Curren)o(t)0 2516 y(k)o(ernels)13 b(use)f(only)h(one)f(action)g(thread\ ,)h(but)f(are)g(designed)h(to)f(accommodate)g(more)g(than)g(one.)19 b(The)12 b (pro)q(cessor)0 2573 y(assignmen)o(t)j(interface)f(allows)g(a)h(serv)o(er)g (to)f(a)n(v)o(oid)i(sync)o(hronizing)g(with)g(completion)g(of)e(eac)o(h)h(ass\ ignment)f(so)0 2629 y(that)g(a)h(serv)o(er)g(thread)g(can)h(exercise)g(the)f (parallelism)i(a)o(v)m(ailable)g(from)e(m)n(ultiple)j(action)d(threads.)71 2685 y(In)o(terpro)q(cessor)j(in)o(terrupts)g(are)g(used)h(for)f(assignmen)o (t)g(of)g(pro)q(cessors)g(and)h(running)h(threads.)29 b(Mac)n(h's)0 2742 y (interprocessor)19 b(interrupt)g(mec)o(hanism)h(is)g(designed)g(for)f(general\ ity)g(b)q(oth)g(in)h(deciding)i(when)d(to)g(send)h(an)0 2798 y(interprocessor) h(interrupt,)h(and)f(what)g(is)h(done)f(when)h(one)g(is)f(received.)39 b(In)o (terpro)q(cessor)21 b(in)o(terrupts)g(are)p eop %%Page: 47 58 bop 0 50 a fj(CHAPTER)15 b(6.)35 b(PR)o(OCESSOR)17 b(ALLOCA)m(TION)f(AND)f (CONTR)o(OL)618 b fr(47)0 195 y(sen)o(t)19 b(from)g(t)o(w)n(o)g(places)i(in)f (current)f(Mac)n(h)h(k)o(ernels.)34 b(The)19 b(\014rst)h(is)g(in)g(the)g(sc)o (heduler)h(co)q(de)f(that)f(queues)h(a)0 252 y(b)r(ound)f(thread)g(to)f(run)i (when)f(the)g(queuing)i(pro)q(cessor)e(is)g(not)g(the)g(pro)q(cessor)g(that)f (the)h(thread)g(is)h(b)q(ound)0 308 y(to)41 292 y fg(1)60 308 y fr(.)27 b(The) 17 b(second)h(is)g(thread)f(managemen)o(t)g(co)q(de)h(that)e(synchronizes)i (with)g(the)f(p)r(ending)h(susp)r(ension)g(of)f(a)0 364 y(thread)c(that)g(is) i(running)f(on)g(another)f(pro)q(cessor)h(\()p fo(thread)s 16 2 v 15 w(do)o (w)n(ait)p fr(\).)21 b(Processor)14 b(assignmen)o(t)f(can)h(cause)g(an)0 421 y (interprocessor)i(interrupt)f(to)h(b)q(e)g(sen)o(t)g(from)f(the)h(sc)o(hedule\ r)h(co)r(de)f(when)g(the)g(action)h(thread)e(binds)j(itself)e(to)0 477 y(the) e(target)e(pro)q(cessor,)h(and)h(thread)f(assignmen)o(t)h(can)f(cause)h(one)g (to)e(b)r(e)i(sen)o(t)f(from)g(the)g(thread)h(managemen)n(t)0 534 y(co)q(de)i (when)f(the)g(thread)g(is)g(susp)r(ended)h(as)e(a)h(prelude)i(to)d(c)o(hangin\ g)h(its)g(assignment.)k(In)d(all)g(cases,)e(the)h(same)0 590 y(interrupt)g (is)h(sen)o(t,)e(and)i(it)g(causes)f(the)h(in)o(v)o(o)q(cation)f(of)g(the)h fo (ast)s 16 2 v 16 w(c)o(hec)o(k)e fr(routine)i(on)g(the)f(target)f(pro)q(cesso\ r)h(to)0 647 y(c)o(hec)o(k)f(whether)h(an)f(AST)g(\(Async)o(hronous)g(System) g(T)l(rap\))f(is)i(needed)g(for)f(an)n(y)g(reason,)g(and)g(request)g(one)h (if)f(a)0 703 y(reason)i(is)h(found.)23 b(The)17 b(reasons)f(c)n(heck)o(ed)g (b)o(y)g(this)h(routine)g(include:)24 b(\(1\))16 b(a)g(thread)g(is)h(queued)g (on)f(the)h(lo)q(cal)0 760 y(run)e(queue)h(\(e.g.,)e(the)h(action)s 14 2 v 14 w(thread\),)f(\(2\))g(the)h(curren)o(t)g(thread)g(has)g(a)g(p)q(ending)i(susp) q(end)f(\(e.g.,)d(b)r(ecause)j(it)0 816 y(is)h(b)r(eing)h(assigned\),)f(and)g (\(3\))f(the)h(curren)o(t)g(thread)g(should)h(b)q(e)f(preempted)h(based)f(on) g(its)g(curren)o(t)g(priorit)o(y)l(.)0 873 y(The)f(third)g(reason)f(allows)g (this)h(mec)o(hanism)g(to)f(b)r(e)g(used)i(for)e(in)o(terpro)q(cessor)g(preem\ ption)i(if)f(and)g(when)g(the)0 929 y(Mac)n(h)g(sc)o(heduler)g(supp)r(orts)f (it.)0 1051 y fm(6.1.3)55 b(A)19 b(Gang)g(Sc)o(heduling)f(Serv)m(er)0 1136 y fr(T)l(o)g(demonstrate)f(the)h(utility)g(of)f(this)h(w)o(ork,)f(a)h(simple)h (pro)q(cessor)f(allo)r(cation)g(serv)o(er)f(for)h(gang)f(sc)o(heduling)0 1193 y(has)e(b)r(een)g(implemen)q(ted.)20 b(This)c(serv)o(er)f(is)h(a)f(batc)n(h)h (sc)o(heduler)g(for)f(pro)q(cessors)g(that)g(allo)r(cates)f(pro)r(cessors)g (to)0 1249 y(requests)f(\(sub)s(ject)g(to)g(limits)i(of)e(75%)f(of)h(the)h (total)f(pro)q(cessors)g(on)g(the)g(mac)o(hine)i(and)e(15)g(min)o(utes)h(maxi\ m)o(um)0 1306 y(request)g(length\).)20 b(These)14 b(n)o(um)o(b)q(ers)g(are)g (based)g(on)g(the)g(usage)f(environmen)o(t)h(at)f(CMU,)g(and)h(are)g(examples) g(of)0 1362 y(p)r(olicy)h(parameters)e(that)h(ma)n(y)h(v)m(ary)f(from)f(site) i(to)f(site.)20 b(The)14 b(serv)o(er)g(satis\014es)h(requests)f(in)h(a)f(gree\ dy)g(fashion)0 1419 y(with)k(strict)g(adherence)h(to)f(the)g(order)g(in)h(whi\ c)o(h)g(they)f(are)g(receiv)o(ed.)29 b(F)l(or)18 b(example,)h(if)g(the)f(serv) n(er)g(has)g(10)0 1475 y(pro)q(cessors)g(to)g(allo)r(cate)g(and)h(receiv)o (es)g(requests)f(for)g(4,)h(7,)f(and)h(2)f(pro)q(cessors,)g(it)h(will)h(satis\ fy)e(the)h(request)0 1532 y(for)f(4)g(\014rst,)g(and)h(then)f(the)h(requests) f(for)g(7)g(and)g(2)g(together.)29 b(The)18 b(request)g(for)g(2)g(pro)q(cesso\ rs)g(will)i(not)e(b)r(e)0 1588 y(mo)n(v)o(ed)d(ahead)f(of)f(the)h(request)g (for)g(7)g(ev)n(en)h(though)f(pro)q(cessors)g(are)f(a)o(v)m(ailable)j(for)d (the)h(former)g(request.)19 b(This)0 1644 y(algorithm)d(w)o(as)f(c)o(hosen)h (for)g(its)g(simplicit)q(y)g(and)g(lack)g(of)f(starv)m(ation;)h(more)g(sophis\ ticated)h(algorithms)f(that)0 1701 y(mak)n(e)g(b)q(etter)f(use)g(of)g(the)h (pro)q(cessors)e(b)o(y)i(satisfying)f(requests)g(out)g(of)g(order)g(could)h (b)q(e)g(used.)71 1757 y(The)21 b(serv)o(er)g(exp)q(orts)g(an)g(ob)r(ject-ori\ ented)g(remote)g(pro)q(cedure)h(call)g(interface)f(to)f(applications.)40 b (The)0 1814 y(interface)14 b(is)i(based)g(on)f(`request')f(ob)s(jects)h(whic) o(h)h(con)o(tain)f(t)o(w)n(o)g(comp)q(onents:)68 1906 y fc(\017)23 b fr(A)15 b (time)g(duration)h(for)e(the)i(allo)r(cation)f(request.)68 2000 y fc(\017)23 b fr(A)15 b(sequence)h(of)f fk(<)p fr(pro)q(cessor)g(set,)g(n)o(um)o(b)q(er)g (of)g(pro)q(cessors)p fk(>)h fr(pairs.)0 2093 y(A)i(request)h(is)g(satis\014e\ d)g(b)o(y)f(assigning)h(eac)o(h)f(pro)r(cessor)g(set)g(its)g(corresp)r(onding) h(n)o(um)o(b)q(er)f(of)g(pro)q(cessors)g(for)0 2149 y(the)j(time)g(duration)h (sp)q(eci\014ed.)39 b(An)21 b(application)i(ma)n(y)e(terminate)g(an)g(allo)r (cation)g(b)r(efore)f(the)h(end)h(of)f(its)0 2205 y(time)i(duration)g(if)g (it)f(has)h(no)f(further)g(need)i(for)e(the)g(pro)q(cessors.)42 b(An)22 b(app\ lication)j(in)o(teracts)d(with)h(the)0 2262 y(serv)o(er)c(b)o(y)g(creating)g (a)g(`request')g(ob)r(ject,)h(adding)g()g(request)h(pairs)0 2318 y(to)e(it,)i(and) f(activ)m(ating)g(the)g(request.)30 b(A)19 b(separate)f(interface)g(routine)i (destro)n(ys)f(the)g(request)f(and)h(releases)0 2375 y(an)o(y)j(associated)h (pro)q(cessors)f(for)f(reallo)r(cation)h(b)o(y)g(the)h(serv)n(er.)41 b(Additi\ onal)23 b(interface)f(routines)g(pro)o(vide)0 2431 y(information)15 b(ab)q (out)g(the)g(serv)o(er)g(and)g(individual)j(requests.)i(The)c(in)o(terface)f (also)g(supp)r(orts)f(sev)o(eral)h(optional)0 2488 y(services)d(implemen)q (ted)f(b)o(y)h(the)f(serv)o(er.)18 b(The)12 b(`destro)n(y')f(option)h(destro) n(ys)f(the)h(pro)q(cessor)f(sets)g(associated)h(with)0 2544 y(a)g(request)g (when)h(the)f(allo)r(cation)h(expires)g(or)f(is)h(terminated.)19 b(This)13 b (is)f(useful)i(for)d(no)o(vices)i(b)r(ecause)g(it)f(prev)o(en)o(ts)0 2601 y (their)19 b(programs)f(from)g(b)r(eing)h(susp)r(ended)h(when)f(an)g(allo)r (cation)g(is)h(exceeded;)h(the)e(programs)f(con)o(tin)o(ue)h(to)0 2657 y(run,) 14 b(but)h(in)g(the)f(default)h(pro)q(cessor)f(set.)19 b(The)c(`notify')e(opt\ ion)i(causes)f(the)g(serv)o(er)g(to)g(send)g(messages)g(to)g(the)0 2704 y 779 2 v 52 2761 a ff(1)69 2777 y fp(These)e(interrupts)g(are)g(not)g(sent)f(to)h (the)g(master)g(pro)q(cessor,)g(due)h(to)e(the)h(frequent)g(use)g(of)f(unpara\ llel)q(ized)k(Unix)e(co)q(de)f(b)r(ound)0 2823 y(to)h(it.)p eop %%Page: 48 59 bop 0 50 a fj(CHAPTER)15 b(6.)35 b(PR)o(OCESSOR)17 b(ALLOCA)m(TION)f(AND)f (CONTR)o(OL)618 b fr(48)0 195 y(application)15 b(after)d(allo)r(cating)i(pro) q(cessors)e(and)i(one)f(second)h(b)q(efore)f(deallo)s(cating)g(them.)19 b(Bec\ ause)14 b(pro)q(cessor)0 252 y(allo)r(cation)i(and)h(deallo)r(cation)f(b)o (y)h(the)f(serv)n(er)h(is)f(serial,)h(an)f(application)i(can)e(use)h(these)f (messages)g(to)g(cause)0 308 y(barrier)d(sync)o(hronizations)g(so)f(that)g (it)h(is)g(nev)o(er)g(running)h(with)f(less)g(than)f(its)h(full)h(complement) e(of)g(pro)r(cessors.)0 364 y(The)g(`rep)q(eat')e(option)i(causes)g(the)f(req\ uest)g(to)g(rep)r(eat,)g(allo)o(wing)h(the)g(serv)n(er)g(to)f(timeslice)i(the) e(mac)o(hine)i(among)0 421 y(applications)i(that)d(need)j(more)d(than)i(15)e (minutes)h(of)g(time)h(eac)n(h)g(\(using)g(15)e(minute)h(timeslices\).)21 b (Finally)15 b(the)0 477 y(`task')h(option)i(tells)h(the)f(serv)n(er)g(that)f (the)h(application)h(is)f(a)g(task)f(with)h(one)g(or)f(more)g(threads;)i(this) f(allo)o(ws)0 534 y(the)e(serv)o(er)f(to)h(optimize)h(remo)n(ving)f(pro)q(ces\ sors)g(from)f(the)h(application)i(b)n(y)e(p)r(erforming)g(a)f(task)r 14 2 v 14 w(susp)q(end)i(on)0 590 y(it)e(\014rst.)71 647 y(The)i(serv)n(er)g(is)g(imple\ men)q(ted)f(using)i(t)n(w)o(o)e(threads)h(that)f(comm)n(unicate)i(via)f(b)q (oth)g(shared)f(memory)h(and)0 703 y(message)c(passing.)20 b(One)15 b(thread) f(manages)f(comm)n(unication)j(with)e(the)g(application)h(clien)q(ts,)e(the)h (other)g(man-)0 760 y(ages)19 b(the)h(actual)g(allo)r(cation)g(and)f(deallo)s (cation)h(of)f(the)h(pro)q(cessors.)33 b(The)20 b(primary)f(interaction)h(b)q (et)o(w)n(een)0 816 y(these)d(threads)f(is)h(b)o(y)g(op)q(erations)g(on)f(sha\ red)h(data)f(structures)g(describing)j(the)d(requests,)h(but)g(the)f(interac-) 0 873 y(tion)f(thread)f(sends)h(a)g(message)f(to)g(the)h(pro)q(cessor)f(threa\ d)g(when)h(an)g(immediate)h(c)o(hange)e(to)g(the)h(assignmen)o(t)0 929 y(of)h (pro)q(cessors)h(is)g(needed.)27 b(One)17 b(suc)o(h)h(situation)f(is)g(the)g (activ)n(ation)g(of)f(an)h(allo)r(cation)g(request)g(that)f(can)h(b)r(e)0 985 y(immediately)g(satis\014ed.)71 1042 y(Library)g(routines)f(are)h(a)n(v)m(ail\ able)i(to)c(hide)j(the)f(serv)n(er)g(in)o(terfaces,)f(so)g(that)g(an)h(applic\ ation)h(can)e(mak)o(e)g(a)0 1098 y(single)i(call)f(indicating)i(ho)o(w)d(man) o(y)g(pro)q(cessors)g(it)h(w)o(an)n(ts)f(for)g(ho)o(w)g(man)o(y)g(seconds.)25 b(This)17 b(routine)g(con)o(tacts)0 1155 y(the)e(serv)o(er,)f(arranges)g(the) h(allo)r(cation,)g(and)g(returns)g(when)g(the)g(serv)o(er)g(has)f(b)r(egun)h (to)f(assign)h(the)g(requested)0 1211 y(pro)q(cessors.)30 b(Additional)20 b (routines)f(incorp)r(orate)e(some)i(of)f(the)g(other)g(options)h(a)o(v)m(aila\ ble)h(from)e(the)h(serv)n(er,)0 1268 y(suc)o(h)i(as)f(the)g(notify)h(option.) 35 b(The)21 b(total)f(time)g(tak)n(en)h(b)o(y)f(this)h(routine)g(is)g(ab)q (out)f(35ms)g(to)g(allo)r(cate)g(one)0 1324 y(pro)q(cessor)e(plus)h(the)f(pro) q(cessor)g(assignmen)o(t)g(time)g(of)g(ab)q(out)g(5ms)f(p)r(er)h(additional)h (pro)q(cessor)f(\(T)l(able)g(6.1\).)0 1381 y(This)g(o)o(v)n(erhead)g(is)g(acc\ eptable)h(giv)o(en)f(the)f(exp)r(ected)h(allo)r(cation)g(durations)f(of)g(ten\ s)h(of)f(seconds)h(to)f(tens)g(of)0 1437 y(min)o(utes.)27 b(Both)17 b(the)g (basic)h(serv)o(er)f(interface)g(and)h(the)f(library)h(routines)g(that)f(hide) h(it)g(are)f(do)q(cumented)g(in)0 1494 y(App)r(endix)f(C.)71 1550 y(The)g(cpu) t 14 2 v 13 w(serv)o(er)h(and)f(library)i(in)o(terfaces)f(ha)n(v)o(e)g(b)q (een)h(successfully)g(used)f(b)o(y)g(researc)n(hers)g(and)g(studen)o(ts)0 1606 y(in)22 b(an)e(undergraduate)h(parallel)i(programming)d(course)h(at)f(Carnegi\ e)h(Mellon)h(to)e(facilitate)i(p)q(erformance)0 1663 y(measuremen)o(ts)12 b (of)h(parallel)h(programs.)k(The)13 b(serv)n(er)g(remo)n(v)o(ed)g(almost)f (all)i(of)e(the)h(administrative)g(di\016culties)0 1719 y(usually)23 b(inv)o (olv)o(ed)f(in)h(obtaining)f(dedicated)i(mac)n(hine)f(time.)40 b(In)23 b(addi\ tion,)h(dev)o(elopment)e(of)f(the)h(serv)o(er)0 1776 y(rep)r(eatedly)f(demons\ trated)f(the)h(utility)g(of)f(implemen)q(ting)h(p)r(olicy)h(in)f(a)g(separate) f(serv)o(er)g(b)r(ecause)h(serv)o(er)0 1832 y(crashes)15 b(did)h(not)f(crash) g(the)h(op)q(erating)f(system.)71 1889 y(Man)n(y)c(extensions)g(and)g(c)o(han\ ges)f(to)g(the)h(p)q(olicy)h(implemen)q(ted)f(in)g(the)g fo(cpu)s 16 2 v 16 w (serv)m(er)f fr(are)g(p)r(ossible.)19 b(Since)13 b(it)0 1945 y(is)g(a)g(batc) n(h)g(sc)o(heduler)i(for)d(pro)q(cessors,)g(tec)o(hniques)j(originally)f(dev) o(elop)r(ed)g(for)e(batc)n(h)h(sc)o(heduling)i(of)e(memory)-5 b(,)0 2002 y (suc)o(h)17 b(as)f(assigning)h(higher)g(priorit)o(y)f(to)g(shorter)g(requests\ ,)g(are)g(applicable.)25 b(In)17 b(addition,)g(the)g(serv)o(er)f(could)0 2058 y(b)r(e)i(extended)h(to)f(allo)o(w)h(some)f(users)g(higher)h(or)f(absolute)h (priorit)o(y)f(in)h(allo)r(cating)g(pro)q(cessors,)f(or)g(to)g(allo)o(w)0 2115 y(more)h(pro)q(cessors)h(to)f(b)q(e)h(allo)r(cated)g(during)g(light)f(usage)h (p)q(erio)r(ds.)33 b(Finally)n(,)20 b(the)g(serv)o(er)f(can)h(b)r(e)g(replace\ d)0 2171 y(in)j(its)g(entiret)n(y)g(b)o(y)f(a)h(serv)n(er)g(that)f(implemen)q (ts)g(a)g(di\013erent)g(sc)o(heduling)j(p)q(olicy)n(.)42 b(One)23 b(promising) h(new)0 2227 y(p)r(olicy)18 b(is)g(to)f(v)m(ary)g(the)h(n)o(um)n(b)r(er)f(of) g(pro)q(cessors)g(a)o(v)m(ailable)i(to)e(applications)i(based)f(on)f(the)h (o)n(v)o(erall)g(demand)0 2284 y(for)h(pro)q(cessors.)31 b(A)19 b(serv)o(er)g (with)g(this)h(p)q(olicy)h(can)e(notify)g(applications)i(to)d(recon\014gure)i (when)f(it)h(c)o(hanges)0 2340 y(the)c(n)o(um)o(b)r(er)g(of)g(pro)q(cessors)g (a)n(v)n(ailable.)24 b(Researc)o(hers)17 b(at)e(Stanford)h(are)g(pursuing)h (this)g(approac)n(h)g(and)f(ha)o(v)o(e)0 2397 y(implemen)q(ted)11 b(a)h(serv) n(er)g(for)f(this)h(sc)o(heduling)i(p)q(olicy)f(under)f(Mac)o(h)f(with)h(go)q (o)q(d)g(initial)i(results[51)o(].)k(The)12 b(ma)r(jor)0 2453 y(b)r(ene\014t) 17 b(of)g(using)h(Mac)o(h's)f(pro)q(cessor)g(allo)r(cation)h(facility)f(for)g (this)h(p)q(olicy)h(is)e(that)g(it)h(protects)e(co)r(op)q(erativ)o(e)0 2510 y (applications)21 b(\(that)d(reduce)i(their)f(demand)h(for)e(pro)q(cessors)h (when)h(the)f(load)g(on)g(the)g(system)g(rises\),)h(from)0 2566 y(unco)r(op)q (erativ)o(e)12 b(applications)i(\(that)d(do)h(not\).)18 b(The)13 b(strict)f (division)i(of)e(pro)q(cessors)g(into)f(pro)q(cessor)h(sets)g(forces)0 2623 y (the)j(unco)r(op)q(erativ)o(e)g(applications)i(to)e(comp)q(ete)h(against)e (themselves)h(instead)h(of)f(co)q(op)q(erativ)o(e)h(applications.)0 2679 y (Zahorjan)j(and)h(McCann)g([61)o(])f(ha)o(v)n(e)h(conducted)h(sim)o(ulation)g (studies)g(of)e(related)h(sc)o(heduler)h(p)r(olicies)h(that)0 2736 y(could)16 b(b)r(e)f(implemen)q(ted)g(in)h(a)f(Mac)n(h)h(sc)o(heduling)h(serv)o(er.)p eop %%Page: 49 60 bop 0 50 a fj(CHAPTER)15 b(6.)35 b(PR)o(OCESSOR)17 b(ALLOCA)m(TION)f(AND)f (CONTR)o(OL)618 b fr(49)0 195 y fh(6.2)70 b(Scalabilit)m(y)0 297 y fr(The)13 b (scalability)g(of)e(Mac)o(h's)h(pro)q(cessor)g(allo)r(cation)g(and)h(con)o (trol)f(facility)g(is)h(an)f(imp)r(ortan)n(t)g(issue)h(b)r(ecause)g(it)f(is)0 353 y(intended)i(to)g(adapt)g(to)f(future)h(\(larger\))f(m)o(ultipro)r(cessor) h(arc)o(hitectures.)20 b(Scalabilit)q(y)14 b(is)g(of)g(interest)f(for)h(b)q (oth)0 409 y(the)19 b(o)n(v)o(erall)g(system,)g(and)g(its)f(individual)k(piec\ es)e(\(k)o(ernel)f(interface,)f(k)o(ernel)i(implementation,)f(cpu)t 14 2 v 13 w(serv)o(er)0 466 y(and)d(other)f(serv)n(ers\).)20 b(The)c(arc)o(hitecture)g (of)f(the)g(m)o(ultipro)r(cessor)g(b)r(eing)h(managed)f(is)h(of)f(k)o(ey)h (imp)r(ortance;)e(if)0 522 y(it)h(is)h(not)f(scalable,)h(p)r(ortions)f(of)f (the)i(system)e(that)h(dep)r(end)h(on)f(it)g(will)i(not)e(b)r(e)g(scalable)i (either.)j(The)c(o)n(v)o(erall)0 579 y(conclusion)h(of)e(this)h(discussion)h (is)f(that)f(the)h(basic)g(design)g(of)f(the)h(facility)f(\(including)j(the)e (k)n(ernel)h(in)o(terface\))0 635 y(is)d(scalable)h(although)f(p)r(ortions)f (of)h(the)g(curren)o(t)f(implemen)q(tation)g(are)h(not)f(to)h(the)f(extent)g (that)g(they)h(assume)0 692 y(a)h(non-scalable)i(uniform)e(memory)g(access)g (\(UMA\))g(m)n(ultipro)r(cessor)g(arc)o(hitecture.)71 748 y(A)k(scalable)h (soft)n(w)o(are)e(system)h(requires)h(an)f(underlying)i(scalable)f(hardw)o (are)e(arc)o(hitecture.)32 b(UMA)19 b(ar-)0 805 y(c)o(hitectures)i(are)e(not) g(scalable;)k(all)e(of)e(their)i(realizations)g(ha)n(v)o(e)f(limitations)h (in)g(terms)e(of)g(the)h(n)o(um)o(b)r(er)f(of)0 861 y(pro)q(cessors)13 b(that) g(can)h(share)f(a)h(memory)f(bus)h(and/or)f(the)g(n)o(um)o(b)r(er)g(of)g(p)r (orts)g(on)g(m)o(ultip)r(orted)h(memory)f(mod-)0 918 y(ules.)23 b(T)l(o)16 b (the)g(exten)o(t)f(that)h(larger)f(cac)o(hes)i(are)e(employ)n(ed)i(to)e(lever\ age)g(these)h(limited)i(resources,)e(the)g(UMA)0 974 y(arc)n(hitectures)21 b (ma)n(y)f(b)r(eha)o(v)n(e)g(like)g(NUMA)g(mac)n(hines)h(from)f(a)f(soft)n(w)o (are)g(standp)q(oint)g(\(see)h(Section)h(6.4)d(for)0 1030 y(further)d(discuss\ ion\).)23 b(In)16 b(con)o(trast,)e(most)g(NUMA)i(arc)n(hitectures)g(are)g(sca\ lable,)g(although)g(scaling)g(up)g(their)0 1087 y(size)i(also)g(scales)g(up)g (the)f(access)h(times)g(to)e(remote)h(memory)g(through)g(their)h(pro)q(cessor\ -memory)f(intercon-)0 1143 y(nects.)k(The)16 b(upshot)f(is)h(that)f(scalabili\ t)q(y)g(for)g(a)g(pro)q(cessor)g(allo)r(cation)h(and)g(con)o(trol)f(facility) h(requires)g(that)f(it)0 1200 y(b)r(e)g(capable)h(of)f(managing)g(a)g(NUMA)g (m)n(ultipro)s(cessor.)71 1256 y(The)e(o)n(v)o(erall)h(design)f(of)g(Mac)n (h's)g(pro)q(cessor)f(allo)r(cation)h(and)g(con)o(trol)g(facility)g(is)g(scal\ able,)h(but)f(p)r(ortions)f(of)0 1313 y(the)g(curren)o(t)g(implemen)q(tation) g(that)f(dep)r(end)i(on)f(a)f(UMA)h(m)o(ultipro)r(cessor)g(arc)o(hitecture)g (are)g(not.)19 b(The)12 b(k)o(ernel)0 1369 y(interface)18 b(is)h(scalable,)h (as)e(it)g(is)h(ob)s(ject)f(orien)o(ted)h(and)g(can)f(supp)r(ort)g(parallel)i (op)q(erations)e(on)g(indep)s(endent)0 1426 y(ob)s(jects.)25 b(The)18 b(curre\ n)o(t)f(k)o(ernel)h(implemen)q(tation)f(is)g(not)g(scalable,)i(but)e(can)h (b)q(e)g(made)f(scalable)i(with)e(some)0 1482 y(small)12 b(c)o(hanges.)19 b (In)13 b(addition)f(to)f(adding)i(more)e(action)h(threads)g(to)f(the)h(k)n (ernel,)h(data)e(structures)h(ma)n(y)g(need)g(to)0 1539 y(b)r(e)j(c)o(hanged) g(so)g(that)g(di\013eren)o(t)g(threads)g(manage)g(di\013erent)g(p)q(o)q(ols)h (of)e(pro)q(cessors)h(\(this)h(allo)o(ws)f(the)g(threads')0 1595 y(k)o(ernel) 20 b(stac)n(ks)f(to)g(b)q(e)g(b)r(ound)g(to)g(sp)q(eci\014c)i(cluster)f(memor\ ies)f(in)h(a)f(NUMA)g(arc)n(hitecture\);)j(these)d(c)o(hanges)0 1651 y(are)d (easy)g(to)f(mak)o(e.)23 b(Outside)17 b(the)g(k)n(ernel,)h(the)e(curren)o(t)g (cpu)s 14 2 v 14 w(serv)o(er)g(is)h(designed)g(for)f(and)g(assumes)g(a)g(UMA) 0 1708 y(arc)n(hitecture.)29 b(This)18 b(serv)o(er)f(is)i(not)e(scalable,)i (in)g(part)e(b)q(ecause)h(the)g(allo)r(cation)g(p)r(olicy)g(it)g(implemen)q (ts)f(\(all)0 1764 y(pro)q(cessors)e(treated)g(as)f(part)h(of)g(one)g(large)g (p)r(o)q(ol\))g(is)h(only)g(appropriate)f(for)f(UMA)h(arc)o(hitectures.)71 1821 y(An)j(alternativ)o(e)h(for)e(NUMA)h(arc)o(hitectures)h(is)f(to)g(implem\ en)q(t)g(the)g(pro)q(cessor)g(allo)r(cation)g(service)h(as)f(a)0 1877 y(colle\ ction)d(of)d(co)q(op)q(erating)h(serv)o(ers)g(to)f(decentralize)h(the)g(resou\ rce)g(managemen)o(t)f(and)h(obtain)g(a)f(structure)h(in)0 1934 y(which)f(serv) o(ers)g(run)g(in)h(pro)o(ximit)o(y)f(\(memory)g(access)g(delays\))f(to)h(the) g(pro)q(cessors)g(they)g(manage.)19 b(A)12 b(promising)0 1990 y(structure)i (for)f(suc)o(h)h(a)g(collection)h(of)f(serv)o(ers)f(is)i(presen)o(ted)f(b)o (y)g(F)l(eitelson)h(and)f(Rudolph)i([16)o(],)d(although)h(their)0 2047 y(prop) q(osal)h(to)f(use)i(dedicated)g(pro)q(cessors)f(for)f(the)h(serv)o(ers)f(is)i (questionable.)21 b(A)15 b(soft)n(w)n(are)g(implemen)q(tation)f(of)0 2103 y (their)19 b(serv)o(er)f(hierarch)o(y)g(and)h(algorithms)f(w)o(ould)h(b)r(e)g (a)f(b)r(etter)g(matc)n(h)h(to)f(the)g(small)i(o)n(v)o(erhead)f(of)f(curren)o (t)0 2160 y(and)d(prop)r(osed)g(pro)q(cessor)g(allo)r(cation)g(tec)o(hniques.) 0 2303 y fh(6.3)70 b(Sc)n(heduling)21 b(Priorities)g(and)i(P)n(olicies)0 2404 y fr(This)c(section)g(describ)s(es)f(the)h(Mac)n(h)g(system)f(op)q(erations)h (that)f(allo)o(w)h(applications)h(to)e(con)n(trol)h(sc)o(heduling)0 2461 y (priorities)c(and)f(p)r(olicies)h(for)e(threads.)20 b(These)14 b(op)q(eration\ s)g(are)f(based)h(on)g(the)g(pro)q(cessor)g(allo)r(cation)g(in)o(terface)0 2517 y(b)r(ecause)20 b(the)g(pro)q(cessor)g(set)g(con)o(trol)g(p)q(ort)g(repr\ esen)o(ts)g(the)g(privilege)i(to)d(exercise)i(absolute)g(con)o(trol)f(o)n(v)o (er)0 2574 y(the)e(sc)o(heduling)h(of)f(an)n(y)g(pro)q(cessors)f(assigned)h (to)f(that)g(set.)27 b(Safeguards)17 b(are)h(incorp)r(orated)f(in)h(the)g(thr\ ead)0 2630 y(assignmen)o(t)12 b(op)q(eration)g(to)f(protect)h(pro)q(cessor)f (sets)h(from)f(threads)h(assigned)g(from)g(other)f(pro)q(cessor)h(sets)f(with) 0 2687 y(di\013erent)j(sc)o(heduling)k(p)q(olicies)f(and)f(assumptions.)71 2743 y(Threads)d(ha)o(v)o(e)g(b)r(oth)g(a)h(priorit)o(y)f(and)h(a)g(maxim)n (um)g(priorit)o(y)g(as)f(describ)s(ed)h(in)g(Section)h(2.2.5.)j(A)13 b(thread\ 's)0 2799 y(priorit)o(y)19 b(is)g(nev)o(er)g(greater)e(than)i(the)g(maxim)o (um)f(priority)g(and)h(the)g(maxim)n(um)g(priorit)o(y)g(can)g(only)g(b)q(e)g (de-)p eop %%Page: 50 61 bop 0 50 a fj(CHAPTER)15 b(6.)35 b(PR)o(OCESSOR)17 b(ALLOCA)m(TION)f(AND)f (CONTR)o(OL)618 b fr(50)0 195 y(creased)14 b(b)o(y)f(the)h(normal)f(system)g (op)r(eration)g(that)g(sets)g(priorities.)21 b(The)13 b(maxim)o(um)h(priorit) o(y)f(can)h(b)r(e)f(reset)g(to)0 252 y(an)o(y)h(v)m(alue)h(b)o(y)g(presen)o (ting)g(the)f(con)o(trol)g(p)q(ort)g(for)g(the)g(thread's)g(pro)q(cessor)g (set.)19 b(Since)d(the)e(default)h(pro)q(cessor)0 308 y(set's)c(con)o(trol)h (p)r(ort)f(is)h(privileged,)j(ordinary)d(users)g(who)g(do)g(not)g(use)g(pro)q (cessor)g(allo)r(cation)g(cannot)g(raise)g(their)0 364 y(thread)j(priorities) h(ab)q(o)o(v)o(e)f(their)g(initial)i(maxim)o(um.)j(The)15 b(thread)g(inherits) i(its)e(initial)i(priorit)o(y)e(from)f(its)i(task)0 421 y(and)d(its)g(initial) i(maxim)o(um)e(priorit)o(y)g(from)f(its)i(initial)h(pro)q(cessor)d(set)h(\(th\ e)g(one)g(to)f(which)h(its)g(task)f(is)i(assigned\))0 477 y(when)h(the)g(thre\ ad)f(is)h(created.)20 b(T)l(asks,)14 b(in)h(turn,)g(inherit)h(their)f(priorit) o(y)f(from)g(their)h(paren)o(ts)f(on)h(creation.)20 b(A)0 534 y(pro)q(cessor) 15 b(set's)g(maxim)o(um)g(priority)g(serv)o(es)g(to)g(initialize)k(an)n(y)d (threads)f(created)h(in)g(the)f(pro)r(cessor)g(set,)g(and)0 590 y(to)j(defend) i(the)e(pro)q(cessor)h(set)f(against)g(an)o(y)h(threads)f(subsequently)h(assi\ gned)g(to)f(it;)j(if)e(an)n(y)g(suc)o(h)g(threads)0 647 y(ha)o(v)n(e)e(priori\ ties)g(greater)e(than)h(the)g(pro)q(cessor)g(set's)g(maxim)n(um)h(priorit)o (y)l(,)f(these)g(priorities)i(are)d(reset)h(to)g(the)0 703 y(maxim)o(um)h(pri\ orit)o(y)g(\(likewise)g(for)f(the)h(threads')g(maxim)o(um)g(priorities\).)26 b (The)17 b(initial)i(priorit)o(y)e(of)f(the)h(\014rst)0 760 y(task,)g(and)h (the)g(initial)h(maxim)o(um)f(priorit)o(y)g(of)f(an)o(y)g(newly)i(created)f (pro)q(cessor)f(set)g(\(including)k(the)c(default)0 816 y(pro)q(cessor)d(set) f(at)h(b)q(o)q(ot)f(time\))h(are)g(b)q(oth)g(set)f(to)h(12)f(to)g(corresp)q (ond)h(to)g(the)g(Unix)g(default)h(maxim)o(um)f(priorit)o(y)0 873 y(v)m(alue) i(of)f(50.)71 929 y(The)h(Mac)o(h)g(k)o(ernel)i(also)e(supp)r(orts)g(the)g (concept)h(of)f(a)g(p)r(er-thread)g(sc)o(heduling)j(p)q(olicy)n(.)k(Curren)o (tly)m(,)16 b(only)0 985 y(timesharing)e(and)g(\014xed)g(priorities)h(are)f (supp)q(orted,)g(but)f(the)h(interface)f(is)h(extensible)i(to)d(supp)r(ort)f (additional)0 1042 y(p)r(olicies)21 b(in)g(the)e(future)h(\(e.g.,)e(round-rob\ in)j(is)f(appropriate)g(in)h(some)e(circumstances\).)34 b(A)20 b(pro)q(cessor) f(set)0 1098 y(con)o(tains)14 b(a)g(mask)g(of)f(allow)n(ed)i(p)r(olicies,)g (but)g(this)f(mask)g(is)h(only)f(enforced)h(on)f(thread)g(creation,)g(assignm\ ent,)0 1155 y(or)d(p)q(olicy)i(c)o(hange.)19 b(This)12 b(allo)o(ws)f(a)g(n)o (um)o(b)r(er)g(of)g(\014xed)h(priorit)o(y)f(threads)h(to)e(b)r(e)h(created)h (b)o(y)f(an)g(application)j(that)0 1211 y(then)i(resets)g(this)g(mask)g(to)f (prev)o(en)o(t)h(the)g(creation)g(of)g(others.)22 b(The)16 b(mask)f(m)o(ust)h (alw)o(a)n(ys)g(allo)o(w)g(timesharing)0 1268 y(b)r(ecause)d(threads)g(whose) h(p)q(olicy)h(fails)f(the)f(mask)g(comparison)g(are)g(reset)g(to)g(timesharin\ g;)h(the)g(alternativ)o(e)f(of)0 1324 y(a)h(default)h(p)r(olicy)h(p)q(er)f (pro)q(cessor)f(set)g(is)i(more)e(complicated,)h(and)g(the)g(alternativ)o(e)g (of)f(setting)g(the)h(thread)f(to)0 1381 y(some)g(allow)n(ed)h(p)q(olicy)h (is)f(p)q(oten)o(tially)h(unpredictable.)21 b(The)15 b(interface)f(routines)h (that)e(manipulate)j(the)e(mask)0 1437 y(op)q(erate)h(b)o(y)g(enabling)i(or)e (disabling)i(one)e(p)r(olicy)h(at)e(a)h(time.)20 b(StarOS)c([25)o(])f(supp)q (orted)g(similar)i(functionality)0 1494 y(for)i(selecting)i(sc)o(heduling)h (p)r(olicies,)g(but)e(selected)h(them)f(on)f(a)h(p)q(er-pro)r(cessor)f(rather) g(than)h(a)f(p)r(er-thread)0 1550 y(basis)d(and)g(required)g(them)g(to)f(b)q (e)h(statically)g(con\014gured)g(when)g(the)g(system)f(is)h(initialized.)24 b (This)16 b(feature)f(of)0 1606 y(StarOS)g(w)o(as)f(not)h(used)g(m)o(uc)o(h.) 20 b(The)15 b(Mac)o(h)g(k)o(ernel)h(in)o(terface)f(routines)g(that)g(deal)g (with)h(p)q(olicy)g(and)g(priorit)o(y)0 1663 y(are)f(do)q(cumented)g(in)h(App) r(endix)g(B.)71 1719 y(The)f(\014xed)h(priority)f(p)r(olicy)h(supp)r(orts)f (\014xed)h(priorit)o(y)f(threads)h(b)o(y)f(suppressing)i(the)e(usage)g(adjust\ men)o(ts)0 1776 y(of)e(the)h(timesharing)g(sc)o(heduler.)21 b(Absolute)14 b (preemption)h(o)q(ccurs)e(b)r(et)o(w)n(een)h(priority)f(levels,)h(and)g(round\ -robin)0 1832 y(\(or)i(a)h(close)h(appro)o(ximation)g(thereto\))e(sc)o(heduli\ ng)j(o)q(ccurs)f(within)g(eac)o(h)g(priorit)o(y)f(level.)27 b(Preemption)18 b (ma)n(y)0 1889 y(b)r(e)c(delay)n(ed)h(b)o(y)g(up)g(to)e(a)h(clo)r(c)o(k)h(in) o(terrupt)f(p)r(erio)q(d)h(on)g(a)f(m)n(ultipro)r(cessor)h(b)q(ecause)g(inter\ processor)g(in)o(terrupts)0 1945 y(are)h(not)g(curren)o(tly)h(used)g(for)f (preemption.)24 b(The)17 b(\014xed)g(priorit)o(y)g(p)q(olicy)h(allo)o(ws)e (eac)o(h)h(thread)f(to)g(b)r(e)g(giv)o(en)h(a)0 2002 y(quan)o(tum)g(for)g(use) h(in)g(the)g(round-robin)g(sc)o(heduling)i(within)e(a)g(priorit)o(y)f(level.) 27 b(This)18 b(quan)o(tum)g(is)g(giv)o(en)f(to)0 2058 y(the)e(thread)f(ev)o (ery)h(time)g(it)g(b)q(egins)h(to)e(run,)g(including)k(resumption)d(after)f (preemption)h(b)o(y)g(a)f(higher)i(priorit)o(y)0 2115 y(thread.)k(The)15 b (curren)o(t)f(implemen)q(tation)h(of)f(the)h(\014xed)g(priority)f(p)r(olicy)i (imp)r(oses)e(some)h(additional)h(o)o(v)n(erhead)0 2171 y(b)r(ecause)h(it)g (m)o(ust)g(k)n(eep)h(the)f(run)h(queue)f(hint)g(up)g(to)g(date)g(in)h(order)e (to)h(determine)h(when)f(preemptions)h(are)0 2227 y(necessary)l(.)0 2371 y fh (6.4)70 b(A\016nit)n(y)0 2472 y fr(The)16 b(pro)q(cessor)f(allo)r(cation)h (w)o(ork)f(describ)r(ed)i(in)f(this)g(c)o(hapter)g(is)g(not)f(intended)h(to)f (address)h(the)g(problem)g(of)0 2529 y(a\016nit)o(y)l(.)27 b(The)18 b(area)f (of)h(a\016nit)o(y)f(is)h(driven)g(b)o(y)g(the)f(observ)n(ation)g(that)g(a)h (thread)f(executing)i(on)f(a)f(pro)q(cessor)0 2585 y(will)e(accum)o(ulate)e (a)g(footprint)f(of)h(w)n(orking)g(set)g(state)f(in)i(that)e(pro)q(cessor's)g (cac)o(he)i(\(and)e(translation)h(lo)r(ok)m(aside)0 2642 y(bu\013er,)i(dep)r (ending)h(on)g(the)f(arc)o(hitecture\).)20 b(If)c(that)f(thread)g(blo)r(c)o (ks)g(and)g(then)h(resumes,)f(resc)o(heduling)i(it)f(on)0 2698 y(a)d(pro)q (cessor)g(it)h(previously)h(ran)e(on)h(can)f(b)r(e)g(more)g(e\016cien)q(t)g (b)q(ecause)h(it)g(ma)n(y)g(a)n(v)o(oid)g(some)f(cac)o(he)h(misses.)20 b(The) 0 2754 y(thread)15 b(is)h(then)f(said)h(to)f(ha)n(v)o(e)g(an)g(a\016nit)o(y)h (for)e(that)h(pro)q(cessor.)71 2811 y(Squillan)q(te)i(and)h(Lazo)o(wsk)m(a[45) o(])f(ha)o(v)o(e)g(conducted)i(queuing)g(theory)e(analyses)h(to)f(inv)o(estig\ ate)g(including)p eop %%Page: 51 62 bop 0 50 a fj(CHAPTER)15 b(6.)35 b(PR)o(OCESSOR)17 b(ALLOCA)m(TION)f(AND)f (CONTR)o(OL)618 b fr(51)0 195 y(a\016nit)o(y)20 b(in)h(sc)o(heduling)h(p)q (olicy)n(.)34 b(They)20 b(consider)h(p)q(olicies)h(of)e(binding)i(threads)e (to)f(individual)k(pro)q(cessors)0 252 y(\(\014xed)17 b(pro)q(cessor)g(or)f (FP\),)f(preferring)i(the)g(last)g(pro)q(cessor)f(a)h(thread)f(ran)h(on)f(\(l\ ast)h(pro)q(cessor)f(or)g(LP\),)h(and)0 308 y(more)k(complex)h(p)r(olicies)h (that)e(attempt)g(to)g(maximize)h(a\016nit)o(y)g(in)g(c)o(ho)q(osing)g(thread\ s)f(to)g(execute.)40 b(The)0 364 y(FP)18 b(p)r(olicy)i(is)f(not)f(a)h(go)q (o)q(d)g(idea)g(for)f(a)h(timesharing)g(environmen)o(t)f(b)r(ecause)h(it)g (pro)q(duces)h(long-lived)g(load)0 421 y(im)o(balances,)c(an)f(asp)q(ect)h (not)f(considered)h(in)h(their)e(queuing)i(theory)e(analysis.)21 b(The)15 b (more)g(complex)h(p)r(olicies)0 477 y(imp)r(ose)i(additional)i(computational) e(burdens)h(on)g(the)f(sc)o(heduler)i(and)e(cause)h(fairness)f(problems)h(for) f(b)q(oth)0 534 y(load)d(and)f(usage)g(balancing.)21 b(The)15 b(LP)g(p)q(olic\ y)h(is)f(therefore)f(the)g(b)r(est)g(c)o(hoice)h(from)f(these)g(alternatives.) 19 b(This)0 590 y(p)r(olicy)d(has)g(t)n(w)o(o)f(comp)r(onen)o(ts;)g(\(1\))g (sc)n(heduling)j(a)e(thread)f(that)g(returns)h(from)f(a)g(blo)r(c)o(king)h (ev)o(en)o(t)f(on)h(its)g(last)0 647 y(pro)q(cessor)h(if)g(that)f(pro)q(cesso\ r)h(is)g(idle)i(\(thread)d(preference\),)i(and)f(\(2\))f(c)o(ho)q(osing)h(a)g (thread)f(that)g(last)h(ran)g(on)0 703 y(the)j(curren)o(t)g(pro)q(cessor)g (when)h(selecting)g(a)f(thread)g(to)g(run)g(from)g(among)f(threads)h(at)g(the) g(same)g(priorit)o(y)0 760 y(\(pro)q(cessor)15 b(preference\).)71 816 y(The)i (Last)h(Processor)g(a\016nit)o(y)f(p)r(olicy)h(is)h(easy)e(to)g(implemen)q (t)g(for)g(Mac)n(h.)27 b(The)18 b(Mac)o(h)f(k)o(ernel)i(con)o(tains)0 873 y (optional)g(co)q(de)g(to)f(implement)g(thread)g(preference)i(for)e(the)g(pro) q(cessor)g(it)h(last)f(executed)h(on,)g(lea)o(ving)g(only)0 929 y(the)j(pro)q (cessor)g(preference)h(feature)e(to)g(implemen)q(t.)40 b(The)22 b(thread)g (preference)g(co)r(de)g(sc)o(hedules)h(a)f(newly)0 985 y(runnable)f(\(e.g.,)e (un)o(blo)r(c)o(k)o(ed\))g(thread)g(on)h(the)f(pro)r(cessor)g(it)h(last)f(ran) g(on,)h(but)g(do)q(es)g(not)f(dela)o(y)h(execution)0 1042 y(to)f(w)n(ait)g (for)g(the)g(corresp)q(onding)h(pro)q(cessor)f(to)g(b)q(ecome)g(a)o(v)m(ailab\ le.)34 b(If)19 b(it)h(is)f(pro)q(ductive)g(to)g(w)n(ait)h(in)f(such)0 1098 y (a)e(situation,)h(then)f(the)h(mac)n(hine)h(should)f(b)q(e)g(treated)f(as)f (a)h(NUMA)h(from)e(a)h(sc)o(heduling)i(standp)r(oin)o(t)e(\(ev)n(en)0 1155 y (if)22 b(its)f(memory)g(arc)n(hitecture)h(is)g(uniform\).)38 b(The)22 b(state\ men)n(t)f(that)g(it)g(is)h(pro)q(ductive)f(to)g(w)n(ait)g(in)i(suc)o(h)e(a)0 1211 y(situation)15 b(implies)h(that)e(short)f(term)h(k)o(ernel)h(load)g(bala\ ncing)g(can)g(ha)o(v)n(e)g(signi\014cant)f(p)r(erformance)f(p)r(enalties,)0 1268 y(a)g(distinguishing)i(c)o(haracteristic)f(of)e(NUMA)h(mac)o(hines)h(fro\ m)e(an)h(op)r(erational)g(sc)o(heduling)i(standp)q(oint.)k(The)0 1324 y(pro)q (cessor)d(preference)i(co)q(de)f(w)o(ould)g(exercise)h(pro)q(cessor)f(prefere\ nce)g(for)f(threads)h(that)f(last)g(ran)h(on)f(it)h(only)0 1381 y(among)d(thr\ eads)h(at)g(the)g(same)g(\(highest\))g(priority)l(.)71 1437 y(There)j(are)g (sev)o(eral)h(topics)g(in)g(the)g(Squillan)q(te)f(pap)r(er)g([45)o(])g(that)g (are)g(not)g(appropriate)h(to)e(Mac)o(h.)30 b(The)0 1494 y(pap)q(er)15 b(anal\ yzes)g(Mac)n(h)f(as)g(if)h(the)f(sc)o(heduler)i(used)f(simple)h(round-robin)f (sc)o(heduler)h(queues,)e(and)h(mak)n(es)g(rec-)0 1550 y(ommendations)f(for)g (p)q(olicy)i(c)o(hanges)e(to)f(incorp)r(orate)h(a\016nit)o(y)l(.)19 b(Mac)o (h)14 b(uses)h(priorit)o(y-based)f(run)h(queues)g(\(see)0 1606 y(Section)g (2.2.2\),)e(making)h(this)h(analysis)g(not)f(directly)i(applicable.)22 b(In) 15 b(addition,)g(some)f(of)g(the)h(p)q(olicy)h(recom-)0 1663 y(mendations)f (are)f(questionable.)21 b(Their)15 b(recommendation)f(for)g(a)g(p)q(olicy)i (that)d(uses)i(the)f(lo)r(cal)h(run)f(queues)h(to)0 1719 y(ac)o(hiev)o(e)j (pro)q(cessor)e(binding)j(under)f(mo)q(derate)f(loads)g(\(e.g.,)f(4\))g(can)h (lead)h(to)e(sev)o(ere)h(load)g(imbalances,)h(and)0 1776 y(the)c(suggestion)g (that)g(this)g(can)g(b)r(e)g(ameliorated)h(b)o(y)f(cycling)h(all)g(threads)f (through)g(the)g(global)h(run)f(queue)h(on)0 1832 y(a)i(p)r(erio)q(dic)i(basi\ s)f(threatens)f(to)g(introduce)i(starv)l(ation)f(e\013ects.)27 b(The)18 b(o)n (v)o(erall)g(idea)h(of)e(taking)g(a\016nit)o(y)h(in)o(to)0 1889 y(accoun)o (t)12 b(is)i(sound,)f(but)g(this)g(particular)g(implemen)q(tation)f(prop)q (osal)h(is)g(not;)g(load)g(balancing)h(for)e(a)g(pro)q(cessor)0 1945 y(bindin\ g)20 b(p)q(olicy)f(should)g(b)q(e)f(done)g(directly)h(b)r(et)n(w)o(een)f(the) g(primary)g(run)g(queues)g(\(the)g(lo)q(cal)h(run)e(queues)i(in)0 2002 y(this) e(case\))f(to)g(a)n(v)o(oid)h(starv)m(ation.)24 b(A)16 b(randomized)h(p)r(eri\ o)r(dic)g(load)g(rebalancer)g(is)g(probably)g(a)f(b)r(etter)g(c)o(hoice)0 2058 y(than)f(forcing)g(all)h(threads)f(through)f(a)h(secondary)g(\(i.e.,)f(the)h (global\))g(run)h(queue.)k(The)15 b(pap)r(er)g(also)g(prop)q(oses)0 2115 y (pausing)k(pro)q(cessors)f(in)h(some)f(cases)h(where)f(w)o(ork)g(is)g(a)o(v)m (ailable)i(to)e(a)o(v)n(oid)h(large)g(cac)n(he)g(reload)g(costs.)29 b(The)0 2171 y(pause)18 b(time)g(calculation)h(is)f(based)f(on)h(an)f(estimate)h(of)f (the)g(reload)h(costs,)f(which)g(is)h(not)f(readily)i(a)o(v)m(ailable)0 2227 y (from)d(curren)o(t)h(m)n(ultipro)r(cessor)g(hardw)o(are.)24 b(Finally)m(,)17 b (the)g(pap)q(er)g(prop)q(oses)g(adding)h(an)e(a\016nit)o(y)h(measure)f(to)0 2284 y(priorit)o(y)j(calculations,)h(but)f(the)g(prop)q(osed)g(mec)o(hanism)g (requires)g(go)q(o)q(d)g(estimates)f(of)g(the)h(fo)q(otprin)o(t)f(sizes)0 2340 y({)f(these)h(estimates)f(are)g(also)h(not)f(readily)h(a)o(v)m(ailable)i(from) c(current)h(hardw)n(are.)27 b(The)17 b(latter)g(t)o(w)n(o)h(prop)q(osals)0 2397 y(should)f(b)r(e)f(considered)i(b)o(y)e(hardw)n(are)g(and)h(soft)n(w)n (are)f(designers)h(for)f(future)g(systems,)g(but)g(are)g(not)g(suitable)0 2453 y(for)f(incorp)r(oration)f(into)h(Mac)n(h)g(at)g(the)g(present)f(time.)0 2597 y fh(6.5)70 b(Heterogeneit)n(y)0 2698 y fr(Mac)n(h's)21 b(pro)q(cessor)f(allo) r(cation)h(facility)g(do)q(es)g(address)g(some)f(heterogeneity)g(problems.)38 b(By)20 b(a)h(heteroge-)0 2754 y(neous)14 b(m)o(ultipro)r(cessor,)f(w)o(e)h (mean)g(a)f(shared)h(memory)g(m)n(ultipro)r(cessor)g(with)g(pro)q(cessors)g (that)f(exhibit)i(some)0 2811 y(imp)r(ortan)n(t)j(incompatibilit)q(y)g(\(usua\ lly)h(di\013erent)f(instruction)h(sets\))e(among)g(themselves.)28 b(W)l(e)19 b (divide)g(such)p eop %%Page: 52 63 bop 0 50 a fj(CHAPTER)15 b(6.)35 b(PR)o(OCESSOR)17 b(ALLOCA)m(TION)f(AND)f (CONTR)o(OL)618 b fr(52)0 195 y(mac)o(hines)21 b(into)f(the)h(classes)g(of)f fn(inc)m(omp)o(atible)h(heter)n(o)n(geneity)f fr(and)h fn(c)m(omp)o(atible)g (heter)n(o)n(geneity)p fr(.)35 b(Mac)o(hines)0 252 y(exhibiting)16 b(incompat\ ible)f(heterogeneity)e(ha)o(v)o(e)h(more)f(than)g(one)h(class)g(of)f(pro)q (cessors,)h(but)f(eac)o(h)h(application)0 308 y(can)i(only)h(b)r(e)f(executed) h(on)f(pro)q(cessors)g(from)g(a)f(single)j(class)e(\(but)h(this)f(class)h(ma) n(y)f(di\013er)h(from)e(application)0 364 y(to)h(application\).)24 b(A)16 b (m)o(ultipro)r(cessor)g(consisting)h(of)f(i386)g(and)g(i860)h(pro)q(cessors) 1435 348 y fg(2)1470 364 y fr(is)g(an)f(example)h(of)f(incom-)0 421 y(patible) f(heterogeneit)o(y)e(b)r(ecause)h(these)f(t)o(w)n(o)h(pro)q(cessor)f(classes) h(ha)n(v)o(e)g(completely)g(incompatible)i(instruction)0 477 y(sets.)23 b(Mac) n(hines)18 b(exhibiting)g(compatible)g(heterogeneit)o(y)e(ha)o(v)o(e)g(some)g (applications)i(that)e(can)g(run)h(on)f(more)0 534 y(than)f(one)h(class)g(of) f(pro)q(cessors.)20 b(A)15 b(m)o(ultipro)r(cessor)g(consisting)i(of)e(i386)g (and)h(i486)f(pro)q(cessors)1683 517 y fg(3)1718 534 y fr(is)h(an)f(exam-)0 590 y(ple)k(of)f(compatible)i(heterogeneit)o(y)l(.)30 b(i386)18 b(application\ s)i(can)e(b)r(e)g(run)h(on)f(i486)g(pro)q(cessors,)h(but)f(some)g(i486)0 647 y (applications)g(cannot)e(b)q(e)h(run)f(on)h(i386)f(pro)q(cessors)g(b)q(ecause) h(the)f(i486)g(con)o(tains)h(instructions)g(that)e(are)h(not)0 703 y(found)i (in)h(the)g(i386.)28 b(It)18 b(is)h(p)q(ossible)h(to)d(mix)i(these)f(t)n(w)o (o)g(t)n(yp)r(es)g(of)g(heterogeneit)o(y)l(.)29 b(A)18 b(m)n(ultipro)s(cessor) g(that)0 760 y(con)o(tains)f(i386,)h(i486,)f(and)h(i860)f(pro)q(cessors)g(w)o (ould)h(exhibit)h(b)q(oth)e(compatible)i(and)e(incompatible)j(hetero-)0 816 y (geneit)o(y)m(.)f(The)14 b(pro)q(cessor)g(allo)r(cation)h(facility's)e(abilit) q(y)h(to)f(divide)j(a)e(m)n(ultipro)s(cessor)g(in)o(to)g(sets)f(of)h(pro)q (cessors)0 873 y(supp)r(orts)h(incompatible)j(heterogeneity)e(b)o(y)g(ensurin\ g)h(that)e(threads)h(which)g(can)g(only)h(run)f(on)g(a)g(particular)0 929 y (class)g(of)f(pro)q(cessor)g(do)h(only)g(run)g(on)f(pro)q(cessors)g(in)i(that) d(class.)22 b(On)16 b(the)f(other)g(hand,)h(it)g(do)q(es)g(not)f(supp)r(ort)0 985 y(compatible)i(heterogeneit)o(y)f(b)r(ecause)g(the)g(b)q(oundaries)h(in)g (this)f(case)g(are)g(somewhat)f(p)q(orous;)g(some)h(threads)0 1042 y(can)i (cross)g(them)h(while)g(others)f(cannot.)29 b(It)19 b(is)g(the)f(author's)f (view)i(that)f(compatible)h(heterogeneity)f(is)h(an)0 1098 y(orthogonal)13 b (issue)h(to)f(pro)q(cessor)g(allo)r(cation,)h(so)f(that)g(the)h(data)f(struct\ ures)g(that)g(supp)r(ort)f(it)i(w)o(ould)g(b)r(e)f(repli-)0 1155 y(cated)g (for)f(eac)o(h)i(pro)q(cessor)e(set.)19 b(It)13 b(will)i(tak)n(e)e(some)g(exp) r(erience)h(with)g(suc)o(h)f(systems)g(to)f(understand)i(whether)0 1211 y(thi\ s)h(is)h(the)f(righ)o(t)f(design)i(decision,)g(or)e(whether)h(something)h(aki\ n)f(to)f(the)h(searc)o(h)g(path)f(functionalit)q(y)g(of)h(the)0 1268 y(Allian) q(t)g(sc)n(heduler)i(\(discussed)g(in)f(the)f(next)g(section\))h(is)f(a)g(b)r (etter)f(c)o(hoice.)0 1411 y fh(6.6)70 b(Related)20 b(W)-6 b(ork)0 1512 y fr (Previous)22 b(w)n(ork)f(on)g fn(p)n(olicy)g(me)n(chanism)h(sep)m(ar)n(ation) f fr(has)g(prop)r(osed)g(separating)g(the)g(sc)o(heduler)i(into)d(t)o(w)n(o)0 1569 y(pieces:)32 b(mec)o(hanisms)21 b(implemented)g(in)g(the)g(op)q(erating) f(system,)h(and)g(p)r(olicy)g(decisions)h(made)f(b)o(y)f fn(p)n(olicy)0 1625 y (mo)n(dule)p fr(,)f(usually)g(placed)h(in)f(user)g(mode)g(as)f(part)g(of)g (the)g(application.)31 b(As)18 b(indicated)i(in)f(Chapter)f(5,)g(this)0 1682 y (w)o(ork)i(only)h(considered)i(the)e(problem)g(of)g(sc)o(heduling)i(within)f (an)f(application)i(and)e(encoun)o(tered)g(serious)0 1738 y(problems)h(in)g (the)f(areas)g(of)f(p)r(olicy)i(mo)q(dule)h(complexit)o(y)f(and)f(o)n(v)o(erh\ ead.)38 b(Mac)o(h's)21 b(pro)q(cessor)g(allo)r(cation)0 1795 y(system)15 b (uses)h(p)r(olicy)h(mec)o(hanism)f(separation)g(to)f(attac)n(k)h(a)f(di\013er\ ent)g(problem,)h(that)f(of)h(sc)o(heduling)i(among)0 1851 y(applications.)i (It)11 b(a)n(v)o(oids)h(the)e(problems)i(encountered)f(in)g(prior)g(uses)h (b)q(ecause)f(pro)q(cessor)g(allo)r(cation)g(decisions)0 1908 y(are)j(made)h (infrequently)g(enough)f(to)g(e\013ectiv)o(ely)i(amortize)e(the)g(o)o(v)o(erh\ ead)g(of)g(b)r(oundary)g(crossing)h(costs,)f(and)0 1964 y(b)r(ecause)d(the)g (complex)g(p)r(olicy)h(implemen)q(tation)e(resides)i(in)f(a)g(serv)o(er)f(tha\ t)g(is)i(implemented)f(once)h(for)e(a)g(system)0 2021 y(rather)k(than)g(a)g (module)i(that)d(m)o(ust)h(b)q(e)h(customized)g(to)e(eac)o(h)i(application.) 21 b(If)14 b(comm)o(unication)h(b)r(et)n(w)o(een)g(the)0 2077 y(serv)o(er)j (and)g(k)o(ernel)i(w)n(ere)f(more)f(frequen)o(t,)g(it)h(migh)o(t)f(ha)o(v)n (e)h(b)q(een)g(necessary)g(to)f(place)h(it)f(inside)j(the)d(k)o(ernel)0 2133 y (to)e(minimize)i(the)e(o)o(v)o(erhead)g(inv)o(olv)o(ed;)g(this)h(w)o(as)e(the) i(case)f(for)g(real-time)h(sc)o(heduling)h(p)q(olicy)g(mo)q(dules)f(in)g(a)0 2190 y(system)e(describ)r(ed)h(b)o(y)f(T)l(okuda,)g(et)g(al)g([50)o(].)71 2246 y(Another)i(b)q(o)q(dy)h(of)f(related)h(w)n(ork)f(concerns)h(the)f(area)g(of) g(cosc)o(heduling.)28 b fn(Cosche)m(duling)17 b fr(is)h(a)f(m)o(ultipro-)0 2303 y(cessor)d(sc)o(heduling)i(p)q(olicy)g(that)d(attempts)g(to)g(sc)o(hedul\ e)j(comp)q(onents)d(of)h(an)g(application)i(at)d(the)h(same)g(time,)0 2359 y (but)19 b(mak)n(es)h(no)f(guaran)n(tees)g(ab)q(out)g(its)g(success)g(in)h(doi\ ng)g(so.)31 b(This)19 b(p)r(olicy)h(w)o(as)e(originally)j(prop)q(osed)e(for)0 2416 y(medium)j(grain)f(parallel)h(message)e(passing)h(applications)i(\(h)n (undreds)f(to)e(thousands)h(of)f(instructions)i(b)r(e-)0 2472 y(t)n(w)o(een)c (in)o(teractions\))f(that)g(b)q(ene\014t)h(from)f(cosc)n(heduling)j(but)d(can) h(ac)n(hieve)f(reasonable)h(p)r(erformance)f(in)h(its)0 2529 y(absence.)i(The) 15 b(ma)r(jor)f(w)o(ork)g(on)g(cosc)o(heduling)j(w)n(as)e(done)g(for)e(the)i (Medusa)g(op)q(erating)f(system)h(on)f(Cm*[20)o(].)0 2585 y(The)h(implementat\ ion)f(inv)o(olv)o(ed)g(a)g(matrix)g(whose)h(columns)g(w)n(ere)g(indexed)h(b)o (y)e(pro)q(cessors)g(and)h(whose)f(ro)n(ws)0 2633 y 779 2 v 52 2690 a ff(2)69 2706 y fp(i386)g(and)g(i860)g(are)f(trademarks)h(of)f(In)o(tel)g(Corp.)52 2766 y ff(3)69 2782 y fp(i486)h(is)g(a)f(trademark)h(of)e(In)o(tel)i(Corp.)p eop %%Page: 53 64 bop 0 50 a fj(CHAPTER)15 b(6.)35 b(PR)o(OCESSOR)17 b(ALLOCA)m(TION)f(AND)f (CONTR)o(OL)618 b fr(53)0 195 y(w)o(ere)19 b(indexed)i(b)o(y)e(time;)i(eac)n (h)f(single-threaded)h(Medusa)e(task)f(o)q(ccupied)j(one)e(cell)i(in)f(the)f (matrix.)31 b(Eac)o(h)0 252 y(p)r(erio)q(dic)16 b(clo)r(c)o(k)f(interrupt)f (w)o(ould)i(cause)f(the)h(corresp)q(onding)g(pro)q(cessor)f(to)f(pro)q(ceed)i (to)f(the)g(next)g(cell)i(in)f(its)0 308 y(column;)g(if)f(that)g(cell)i(w)n (as)e(empt)o(y)l(,)g(it)h(w)n(ould)g(searc)o(h)f(other)g(cells)i(in)f(its)f (column)h(to)f(\014nd)h(a)f(task.)k(T)l(o)c(ac)o(hieve)0 364 y(e\013ectiv)o (e)20 b(cosc)o(heduling)i(in)e(this)g(system,)g(the)g(pro)q(cessors)f(m)o(ust) g(adv)n(ance)h(to)f(the)h(next)f(ro)o(w)g(in)i(the)e(table)0 421 y(almost)d (sim)o(ultaneously)m(.)23 b(Cm*)15 b(made)i(this)f(p)r(ossible)h(b)r(ecause)f (it)h(had)f(sync)o(hronized)h(clo)r(c)o(k)f(interrupts;)g(the)0 477 y(p)r(eri\ o)q(dic)k(clo)q(c)o(k)f(in)o(terrupts)f(for)g(eac)o(h)h(pro)q(cessor)f(w)o (ere)g(generated)h(b)o(y)f(an)g(interrupt)g(source)h(\(a)e(line)j(clo)r(c)o (k\))0 534 y(that)c(w)o(as)g(phase-lo)r(c)o(k)o(ed)h(to)f(the)h(60Hz)g(p)q (o)o(w)n(er)g(supplied)j(b)o(y)c(the)h(lo)r(cal)g(electric)i(compan)n(y)m(.) 24 b(Eac)o(h)17 b(pro)q(cessor)0 590 y(w)o(ould)j(therefore)g(tak)n(e)g(clo)r (c)o(k)g(in)o(terrupts)g(and)g(pro)q(ceed)h(to)e(the)h(next)g(ro)n(w)g(of)f (the)h(matrix)g(at)f(almost)h(the)0 647 y(same)13 b(time.)19 b(A)13 b(second) h(c)o(haracteristic)f(of)f(Cm*)h(that)f(this)h(w)o(ork)f(dep)r(ended)i(on)f (w)o(as)f(Cm*'s)g(limited-memory)0 703 y(NUMA)j(arc)o(hitecture)h(that)f(esse\ n)o(tially)h(precluded)i(load)d(balancing.)22 b(Because)16 b(pro)q(cessors)f (to)q(ok)g(in)o(terrupts)0 760 y(almost)i(sim)o(ultaneously)n(,)h(they)g(coul\ d)h(nev)o(er)f(lo)q(ok)g(at)f(other)g(columns)i(in)g(the)e(matrix)h(when)g (searc)o(hing)g(for)0 816 y(a)g(task)f(to)g(run,)i(and)f(giv)o(en)g(Cm*'s)f (arc)o(hitecture)i(there)f(w)n(as)g(no)g(reason)f(to)h(ev)o(er)f(do)h(so.)28 b (In)19 b(con)o(trast,)e(the)0 873 y(uniform)f(\(UMA\))f(shared)h(memory)f(mac) o(hines)i(that)e(are)g(our)h(primary)g(in)o(terest)f(do)h(need)h(and)f(b)q (ene\014t)h(from)0 929 y(short)c(term)h(load)g(balancing)i(among)d(their)h (pro)r(cessors.)19 b(They)14 b(do)g(not)g(ha)n(v)o(e)g(sync)o(hronized)i(clo) q(c)o(ks,)e(and)g(this)0 985 y(mak)n(es)k(the)g(load)h(balancing)g(easier)f (to)g(implement)g(b)o(y)g(allo)o(wing)g(a)g(shared)g(data)f(structure)h(\(e.g\ .,)f(the)h(run)0 1042 y(queue)e(discussed)h(in)f(Chapter)f(2\))f(to)h(b)q(e)h (used.)71 1098 y(The)f(Allian)q(t)g(Concentrix)534 1082 y fg(4)569 1098 y fr (sc)o(heduler)i(describ)s(ed)f(b)o(y)f(Jacobs[24])g(is)h(an)g(example)g(of)f (an)h(alternativ)o(e)g(ap-)0 1155 y(proac)n(h)h(to)f(pro)q(cessor)g(allo)r (cation)g(and)h(con)o(trol.)23 b(This)17 b(sc)o(heduler)h(supp)r(orts)d(a)h (\014xed)h(n)o(um)o(b)r(er)f(of)g(sc)o(heduling)0 1211 y(classes)e(and)h(uses) f(a)g fn(sche)m(duling)h(ve)m(ctor)g fr(for)e(eac)o(h)h(pro)q(cessor)g(to)f (indicate)j(whic)o(h)e(classes)h(should)g(b)q(e)g(searc)n(hed)0 1268 y(for)h (w)o(ork)h(in)h(what)e(order.)25 b(Eac)o(h)17 b(pro)q(cessor)g(cycles)h(throu\ gh)f(a)g(set)g(of)g(sc)n(heduling)j(v)n(ectors)d(based)g(on)g(time)0 1324 y (durations)i(associated)g(with)g(eac)o(h)g(v)n(ector,)g(t)n(ypically)h(fracti\ ons)f(of)f(a)g(second.)30 b(Pro)q(cesses)18 b(are)g(assigned)h(to)0 1381 y (sc)o(heduling)f(classes)f(b)o(y)g(their)g(c)n(haracteristics)g(or)f(a)g(syst\ em)g(call)i(a)n(v)n(ailable)g(to)e(privileged)i(users)f(and)f(appli-)0 1437 y (cations.)22 b(This)16 b(sc)o(heduler)i(is)e(orien)o(ted)g(to)n(w)o(ards)f (dividing)j(pro)r(cessors)d(among)g(statically)i(de\014ned)g(classes)f(of)0 1494 y(applications)d(o)o(v)o(er)f(short)f(p)q(erio)r(ds)h(of)f(time.)19 b (It)12 b(con)o(trasts)f(with)h(the)g(Mac)n(h)h(orien)o(tation)e(of)h(dedicati\ ng)h(pro)q(ces-)0 1550 y(sors)h(to)g(applications)j(o)n(v)o(er)d(longer)i(p)q (erio)r(ds)f(of)f(time.)20 b(Mac)n(h's)15 b(pro)q(cessor)f(sets)h(can)g(b)q (e)g(created)g(dynamically)0 1606 y(as)f(opp)r(osed)g(to)g(the)h(\014xed)g (n)o(um)o(b)r(er)f(of)h(sc)n(heduling)i(classes.)j(Scheduling)c(serv)o(ers)f (could)g(b)r(e)g(implemented)g(b)o(y)0 1663 y(reserving)g(some)f(sc)o(hedulin\ g)j(classes)e(for)f(their)h(exclusive)g(use,)g(but)g(the)f(static)h(class)f (and)h(v)o(ector)f(de\014nitions)0 1719 y(app)q(ear)i(to)g(restrict)f(the)i (\015exibilit)q(y)f(a)o(v)m(ailable)i(in)f(forming)f(sets)f(of)h(pro)q(cessor\ s.)22 b(The)16 b(Concen)o(trix)g(sc)o(heduler)0 1776 y(also)i(enforces)g(a)g (more)g(restrictiv)o(e)g(v)o(ersion)h(of)e(gang)h(sc)o(heduling)i(in)f(whic)o (h)g(a)e(blo)r(c)o(king)i(op)q(eration)f(b)o(y)g(an)o(y)0 1832 y(thread)g(blo) r(c)o(ks)f(the)h(entire)g(gang.)27 b(This)19 b(restricts)e(its)h(use)h(to)e (applications)i(that)e(do)h(not)g(use)g(system)g(con-)0 1889 y(currency)g(and) g(mak)n(es)g(parallel)h(handling)g(of)e(blo)r(c)o(king)h(op)q(erations)g(suc) o(h)g(as)f(I/O)h(and)f(page)h(faults)f(all)i(but)0 1945 y(imp)r(ossible.)71 2002 y(An)e(extended)h(v)o(ersion)f(of)g(Mac)n(h)h(dev)o(elop)r(ed)f(for)g (IBM's)g(exp)q(erimental)g(RP3)g(m)o(ultipro)r(cessor)g([40)o(])g(also)0 2058 y(supp)r(orts)i(pro)q(cessor)h(allo)r(cation.)34 b(RP3)20 b(is)g(a)g(NUMA)g (m)n(ultipro)r(cessor)g(with)g(a)g(cluster)g(size)h(of)f(one;)i(eac)o(h)0 2115 y(pro)q(cessor)d(has)f(a)h(\(fast\))e(lo)r(cal)i(memory)l(,)g(but)g(all)h(mem\ ories)f(are)f(accessible)j(to)d(all)i(pro)q(cessors)e(via)h(an)g(in-)0 2171 y (terconnection)g(net)n(w)o(ork.)27 b(The)19 b(cluster)f(size)h(of)e(one)h(lea\ d)h(the)f(implementors)f(of)h(RP3)g(Mac)n(h)g(to)f(adopt)h(an)0 2227 y(allo)r (cation)h(discipline)j(of)d(binding)h(threads)f(to)f(pro)q(cessors[10)o(].)30 b(The)19 b(k)o(ernel)h(in)o(terface)f(allo)o(ws)g(threads)f(to)0 2284 y(b)r (e)g(individual)q(ly)k(b)q(ound)d(to)f(\(unsp)r(eci\014ed\))i(dedicated)g(pro) q(cessors.)30 b(It)19 b(also)f(supp)r(orts)g(an)g(indirect)j(notion)0 2340 y (of)c(the)g(pro)q(cessor;)h(m)n(ultiple)i(threads)d(can)g(b)q(e)h(b)q(ound)g (to)e(a)h(single)i(pro)q(cessor)e(b)o(y)g(binding)i(the)e(\014rst)g(thread)0 2397 y(and)f(then)g(binding)i(the)e(remaining)h(threads)e(to)g(the)h(`same')f (pro)q(cessor.)22 b(Explicit)17 b(pro)q(cessor)f(identi\014ers)g(are)0 2453 y (a)n(v)o(oided)f(to)e(allo)o(w)h(applications)h(to)e(run)h(on)f(an)o(y)g(a)o (v)m(ailable)j(pro)q(cessors.)j(This)14 b(is)g(an)g(example)g(of)f(the)h(use) g(of)f(a)0 2510 y(pro)q(cessor)h(allo)r(cation)h(facility)g(to)f(disable)i (inter-cluster)f(load)g(balancing)h(on)f(a)f(NUMA)g(m)o(ultipro)r(cessor;)g (for)0 2566 y(larger)f(cluster)i(sizes,)f(the)g(binding)i(w)n(ould)f(b)q(e)f (to)f(the)h(cluster)g(rather)f(than)h(the)f(individual)k(pro)q(cessor)d(withi\ n)0 2623 y(the)h(cluster.)21 b(Mac)n(h's)15 b(pro)q(cessor)g(allo)r(cation)h (facility)f(also)g(supp)r(orts)f(this)i(functionality)m(,)e(and)i(a)f(serv)n (er)h(for)e(a)0 2679 y(mac)o(hine)i(like)f(RP3)h(could)g(implemen)q(t)e(RP3)i (Mac)n(h's)f(pro)q(cessor)g(allo)r(cation)g(interface.)0 2750 y 779 2 v 52 2807 a ff(4)69 2823 y fp(Concentrix)e(is)h(a)f(trademark)h(of)f(Allian)q(t)g (Computer)g(Systems.)p eop %%Trailer eos end TeXDict begin bos 300 @start /fa df[<081C1C3838383070706060C0C0>6 13 2 -1 9]48 dc dfe /fb df[11 3 0 -6 14]45 dc[33 23 2 0 38]77 dc[27 23 2 0 30]82 dc[<7FFFFF007FFFFF00783E0F00603E03 00E03E0380C03E0180C03E0180C03E0180003E0000003E0000003E0000003E0000003E0000003E 0000003E0000003E0000003E0000003E0000003E0000003E0000003E000007FFF00007FFF000> 25 23 1 0 28]84 dc[26 23 2 0 31]85 dc[<07F01C18 380C78067007F007F007FFFFF000F0007000780038031E0603FC>16 15 1 0 19]101 dc[<07F0 001C1C00380E00700700700700F00780F00780F00780F00780F00780700700700700380E001C1C 0007F000>17 15 1 0 20]111 dc[19 21 2 6 23]112 dc[13 15 2 0 17]114 dc[<0600060006000E000E001E003FE0FFE01E001E001E001E001E00 1E001E001E301E301E301E300E2007C0>12 21 1 0 16]116 dc dfe /fc df[37 26 2 0 42]77 dc[<7FFFFF807FFFFF80781F0780701F0380601F0180E0 1F01C0C01F00C0C01F00C0C01F00C0001F0000001F0000001F0000001F0000001F0000001F0000 001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F000007FFFC 0007FFFC00>26 26 2 0 31]84 dc[<03F0000E1C001C0E003C0700780700780780F80780F807 80FFFF80F80000F800007800007800003C01801C03000E060003FC00>17 17 1 0 20]101 dc[< FC78FC9C1D3E1D3E1E3E1E1C1E001E001E001E001E001E001E001E001E00FFC0FFC0>15 17 1 0 18]114 dc dfe /fd df[<0006000C001800300070006000C001C0018003800300070006000E00 0C001C001C0018003800380038003000700070007000700070007000E000E000E000E000E000E0 00E000E000E000E000E000E000E000E000E000E000E000E0007000700070007000700070003000 38003800380018001C001C000C000E000600070003000380018001C000C0006000700030001800 0C0006>15 74 8 72 25]16 dc[15 74 1 72 25]17 dc[<00001C00003C0000F80001E00003C0000780000F0000 0E00001E00003C00003C00003C0000780000780000780000780000780000780000780000780000 780000780000780000780000780000780000780000780000780000780000780000780000780000 780000780000780000780000780000780000780000780000780000780000780000780000780000 780000780000780000780000F00000F00000F00001E00001E00003C0000380000700000E00001C 0000780000E00000E000007800001C00000E000007000003800003C00001E00001E00000F00000 F00000F00000780000780000780000780000780000780000780000780000780000780000780000 780000780000780000780000780000780000780000780000780000780000780000780000780000 780000780000780000780000780000780000780000780000780000780000780000780000780000 7800003C00003C00003C00001E00000E00000F000007800003C00001E00000F800003C00001C> 22 124 5 122 33]40 dc[39 42 2 42 44]80 dc[30 42 2 42 35]83 dc[ 55 58 2 58 60]88 dc dfe /fe df[<60F0F070101020204040>4 10 3 6 10]59 dc[<000800 1800300030003000600060006000C000C000C0018001800180030003000600060006000C000C00 0C00180018001800300030003000600060006000C000C000>13 33 2 8 18]61 dc[<0000C000 00C00001C00001C00003C00005C00005E00008E00008E00010E00020E00020E00040E000C0E000 80E001FFF0010070020070040070040070080070180070FE03FE>23 23 1 0 26]65 dc[<07FF F800E00E00E00700E00300E00301C00301C00701C00701C00E03803C03FFF003FFF003803C0700 1C07000E07000E07000E0E001C0E001C0E00380E00701C01E0FFFF00>24 23 1 0 27]66 dc[< 001FC000707001C03803001C06000C0E000E1C000E18000E38000E30000E70000E70000E70000E 60001CE0001C60003860003870007070F0E03109C0190B800F0E0003F810000810000C30000C60 000FC0000FC0000700>23 29 1 6 28]81 dc[<003E1000C1A00100E00200600600600C00400C 00400E00000F000007E00007FC0001FE00003F0000078000038000038020018040030040030060 0600600400D8180087E000>20 23 2 0 21]83 dc[<071018F0307060706060C060C060C06080 C080C480C4C1C446C83870>14 14 2 0 19]97 dc[<7C00180018001800180030003000300030 00678068C070406060C060C060C060C06080C080C08180C10046003C00>11 23 2 0 15]98 dc[ <07C01C20301060106020FFC0C000C000C000C000C010402060C01F00>12 14 2 0 16]101 dc[ <0300038003000000000000000000000000001C002400460046008C000C001800180018003100 3100320032001C00>9 23 1 0 12]105 dc[<00180038001000000000000000000000000001C0 022004300430086000600060006000C000C000C000C001800180018001806300E300C6007800> 13 29 0 6 14]106 dc[<1C3C22462382230346030603060306030C060C060C0C0C081A3019E0 18001800300030003000FC00>16 20 0 6 18]112 dc[<38F04518463846308C000C000C000C00 180018001800180030003000>13 14 1 0 16]114 dc[<07C00C201870187038001E000FC003E0 00606060E060C0C0C1803F00>12 14 2 0 16]115 dc[<030003000600060006000600FFC00C00 0C000C001800180018001800300030803080310031001E00>10 20 1 0 13]116 dc[<1C04260E 4606460686040C040C040C0418081808181018100C600780>15 14 1 0 17]118 dc dfe /ff df[20 2 3 -7 27]0 dc[<060F0F0E1E1E1C3C383830707060E0C040>8 17 1 -1 10]48 dc[<01FF8007FF800E0000180000300000600000600000600000C00000C00000FFFF 80FFFF80C00000C000006000006000006000003000001800000E000007FF8001FF80>17 22 3 3 24]50 dc[<0003000300060006000C000C00180018003000300060006000C000C0018001800300 0300060006000C000C00180018003000300060006000C0004000>16 30 5 7 0]54 dc[<000018 00000038000000380000007800000078000000F8000000B8000001B80000013800000338000006 380000063800000C380000183C0000183C0000301C00006FFC00007FFC0000C01C0001801C0083 801E00C7001E00FE000F807C000F0038000000>25 25 1 1 28]65 dc dfe /fg df[26 2 4 -10 35]0 dc[<70F8F8F870>5 5 4 -9 13]1 dc[<400004C0000C60001830 00301800600C00C006018003030001860000CC0000780000300000300000780000CC0001860003 03000601800C00C0180060300030600018C0000C400004>22 24 6 1 35]2 dc[<03C00FF01FF8 3FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003C0>16 18 3 -2 23]15 dc[<000000C0000003C000000F0000003C000000F0000003C00000070000001C00000078000001 E00000078000001E00000078000000E0000000780000001E0000000780000001E0000000780000 001C0000000700000003C0000000F00000003C0000000F00000003C0000000C000000000000000 0000000000000000000000000000000000000000007FFFFF80FFFFFFC0>26 36 4 7 35]20 dc[ 26 36 4 7 35]21 dc[< 0001000000000300000000030000000006000000000C000000000C0000000018000000003FFFFF F800FFFFFFFC01C000000007000000003E00000000F8000000003C000000000F00000000038000 000000C0000000007FFFFFFC003FFFFFF80018000000000C000000000600000000060000000003 00000000030000000001000000>38 26 3 2 45]40 dc[<000002000000000300000000030000 0000018000000000C000000000C00000000060007FFFFFF000FFFFFFFC000000000E0000000003 8000000001F0000000007C00000000F000000003C000000007000000000C00FFFFFFF8007FFFFF F0000000006000000000C00000000180000000018000000003000000000300000000020000>38 26 3 2 45]41 dc[<003FF800FFF803C0000700000C0000180000300000300000600000600000 C00000C00000C00000FFFFF8FFFFF8C00000C00000C00000600000600000300000300000180000 0C000007000003C00000FFF8003FF8>21 28 4 3 30]50 dc[<00000C00000C00001800001800 00300000300000600000600000C00000C000018000018000018000030000030000060000060000 0C00000C0000180000180000300000300000600000600000C00000C00001800001800003000003 00000600000600000600000C00000C0000180000180000300000300000600000600000C0000040 0000>22 44 6 11 0]54 dc[<00000010000000003000000000F000000000F000000000F00000 0001F000000001F000000002F000000002F000000004F00000000CF000000008F000000018F000 000010F000000020F000000020F000000040F8000000C0F8000000807800000180780000030078 0000020078000006007800000DFFF800000FFFF800001800780000300078000060007C0040E000 7C00C0C0003C00E380003C00FF00003E00FE00003F80FE00001F007800000000>33 35 1 2 36] 65 dc[<000F0038006000E001C001C001C001C001C001C001C001C001C001C001C001C001C001 C001C0038007001E00F8001E000700038001C001C001C001C001C001C001C001C001C001C001C0 01C001C001C001C000E000600038000F>16 45 3 11 23]102 dc[16 45 3 11 23]103 dc dfe /fh df[<000000FFF000000000000FFFFF00000000003F000F C000000000F00000F000000003C000003C0000000F0000000F0000001C00000003800000300000 0000C000006000000000600000C000000000300001800000000018000300000000000C00060000 000000060006000000000006000C000000000003000C0000000000030018000000000001801800 00000000018030000000000000C030000000000000C06000000000000060600000000000006060 000000000000606000000000000060C000000000000030C000000000000030C000000000000030 C000000000000030C000000000000030C000000000000030C000000000000030C0000000000000 30C000000000000030C000000000000030C000000000000030C000000000000030600000000000 006060000000000000606000000000000060600000000000006030000000000000C03000000000 0000C0180000000000018018000000000001800C000000000003000C0000000000030006000000 0000060006000000000006000300000000000C00018000000000180000C0000000003000006000 0000006000003000000000C000001C000000038000000F0000000F00000003C000003C00000000 F00000F0000000003F000FC0000000000FFFFF000000000000FFF0000000>60 60 -30 30 58] 109 dc[<3C7EFFFFFFFF7E3C>8 8 -4 4 8]113 dc[<001FE000007FF80001FFFE0007FFFF800F FFFFC01FFFFFE01FFFFFE03FFFFFF03FFFFFF07FFFFFF87FFFFFF8FFFFFFFCFFFFFFFCFFFFFFFC FFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFC7FFFFFF87FFFFFF83FFFFFF03FFFFFF01FFFFF E01FFFFFE00FFFFFC007FFFF8001FFFE00007FF800001FE000>30 30 -15 15 29]118 dc dfe /fi df[<0C003C00CC000C000C000C000C000C000C000C000C000C000C000C000C00FF80>9 16 2 0 15]49 dc dfe /fj df[<0102040C1818303070606060E0E0E0E0E0E0E0E0E0E060606070 303018180C040201>8 34 3 9 14]40 dc[<8040203018180C0C0E060606070707070707070707 070606060E0C0C181830204080>8 34 2 9 14]41 dc[<03000700FF0007000700070007000700 0700070007000700070007000700070007000700070007007FF0>12 21 2 0 18]49 dc[<0F80 30E040708030C038E0384038003800700070006000C00180030006000C08080810183FF07FF0FF F0>13 21 2 0 18]50 dc[<0FE030306018701C701C001C00180038006007E000300018000C00 0E000EE00EE00EC00C401830300FE0>15 21 1 0 18]51 dc[22 10 2 -3 27]61 dc dfe /fk df[17 6 1 -11 23]45 dc[<1C003E007F00FF80FF80FF807F003E 001C00>9 9 5 0 19]46 dc[<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE 0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE 0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE 0000FE007FFFFE7FFFFE7FFFFE>23 39 5 0 34]49 dc[<00FF800003FFF0000FFFFC001F03FE 003800FF007C007F80FE003FC0FF003FC0FF003FE0FF001FE0FF001FE07E001FE03C003FE00000 3FE000003FC000003FC000007F8000007F000000FE000000FC000001F8000003F0000003E00000 078000000F0000001E0000003C00E0007000E000E000E001C001C0038001C0070001C00FFFFFC0 1FFFFFC03FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFFFF80>27 39 3 0 34]50 dc[<007F8000 03FFF00007FFFC000F81FE001F00FF003F80FF003F807F803F807F803F807F801F807F800F007F 800000FF000000FF000000FE000001FC000001F8000007F00000FFC00000FFF0000001FC000000 7E0000007F0000007F8000003FC000003FC000003FE000003FE03C003FE07E003FE0FF003FE0FF 003FE0FF003FC0FF007FC07E007F807C007F003F01FE001FFFFC0007FFF00000FF8000>27 39 3 0 34]51 dc[<00000E0000001E0000003E0000007E000000FE000000FE000001FE000003FE0000 077E00000E7E00000E7E00001C7E0000387E0000707E0000E07E0000E07E0001C07E0003807E00 07007E000E007E000E007E001C007E0038007E0070007E00E0007E00FFFFFFF8FFFFFFF8FFFFFF F80000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00007FFFF8007F FFF8007FFFF8>29 39 2 0 34]52 dc[<0C0003000F803F000FFFFE000FFFFC000FFFF8000FFF F0000FFFE0000FFFC0000FFE00000E0000000E0000000E0000000E0000000E0000000E0000000E 7FC0000FFFF8000F80FC000E003E000C003F0000001F8000001FC000001FC000001FE000001FE0 18001FE07C001FE0FE001FE0FE001FE0FE001FE0FE001FC0FC001FC078003F8078003F803C007F 001F01FE000FFFF80003FFF00000FF8000>27 39 3 0 34]53 dc[<0007F000003FFC0000FFFE 0001FC0F0003F01F8007E03F800FC03F801FC03F801F803F803F801F003F8000007F0000007F00 00007F000000FF000000FF0FC000FF3FF800FF707C00FFC03E00FFC03F00FF801F80FF801FC0FF 001FC0FF001FE0FF001FE0FF001FE07F001FE07F001FE07F001FE07F001FE03F001FE03F001FC0 1F801FC01F803F800FC03F0007E07E0003FFFC0000FFF000003FC000>27 39 3 0 34]54 dc[< 380000003E0000003FFFFFF03FFFFFF03FFFFFF07FFFFFE07FFFFFC07FFFFF807FFFFF0070000E 0070000E0070001C00E0003800E0007000E000E0000000E0000001C00000038000000780000007 8000000F0000000F0000001F0000001F0000003F0000003E0000003E0000007E0000007E000000 7E0000007E000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000 007C000000380000>28 41 4 0 34]55 dc[<003FC00001FFF00003FFFC0007C07E000F003F00 1E001F001E000F803E000F803E000F803F000F803F000F803FC00F003FF01F001FFC1E001FFE3C 000FFFF80007FFE00003FFF80001FFFC0001FFFE0007FFFF000F0FFF801E03FFC03C01FFC07C00 7FE078001FE0F80007E0F80007E0F80003E0F80003E0F80003E0F80003C07C0003C07C0007803F 000F001FC03E000FFFFC0003FFF800007FC000>27 39 3 0 34]56 dc[<000003800000000007 C00000000007C0000000000FE0000000000FE0000000000FE0000000001FF0000000001FF00000 00003FF8000000003FF8000000003FF80000000073FC0000000073FC00000000F3FE00000000E1 FE00000000E1FE00000001C0FF00000001C0FF00000003C0FF80000003807F80000007807FC000 0007003FC0000007003FC000000E003FE000000E001FE000001E001FF000001C000FF000001FFF FFF000003FFFFFF800003FFFFFF80000780007FC0000700003FC0000700003FC0000E00001FE00 00E00001FE0001E00001FF0001C00000FF0001C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE00 1FFFFE>47 41 2 0 52]65 dc[41 41 3 0 49]66 dc[<0000 3FF001800003FFFE0380000FFFFF8780003FF007DF8000FF8001FF8001FE00007F8003FC00003F 8007F000001F800FF000000F801FE0000007801FE0000007803FC0000007803FC0000003807FC0 000003807F80000003807F8000000000FF8000000000FF8000000000FF8000000000FF80000000 00FF8000000000FF8000000000FF8000000000FF8000000000FF80000000007F80000000007F80 000000007FC0000003803FC0000003803FC0000003801FE0000003801FE0000007000FF0000007 0007F000000E0003FC00001E0001FE00003C0000FF8000F800003FF007E000000FFFFFC0000003 FFFF000000003FF80000>41 41 4 0 50]67 dc[36 41 3 0 43] 70 dc[22 41 2 0 26]73 dc[34 41 3 0 41] 76 dc[58 41 3 0 65]77 dc[<0000FFE000000007 FFFC0000003FC07F8000007F001FC00001FC0007F00003F80003F80007F00001FC000FF00001FE 001FE00000FF001FE00000FF003FC000007F803FC000007F807FC000007FC07F8000003FC07F80 00003FC07F8000003FC0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003F E0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE07F8000003FC07FC0 00007FC07FC000007FC03FC000007F803FC000007F801FE00000FF001FE00000FF000FF00001FE 0007F00001FC0003F80003F80001FC0007F00000FF001FE000003FC07F8000000FFFFE00000000 FFE00000>43 41 4 0 52]79 dc[39 41 3 0 47]80 dc[48 41 3 0 52]82 dc[<007F806003FFF0E007FFF9E00F807FE01F001F E03E0007E07C0003E07C0001E0FC0001E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FFC0 00007FFE00007FFFE0003FFFFC001FFFFE000FFFFF8007FFFFC003FFFFE000FFFFE00007FFF000 007FF000000FF8000007F8000003F8600001F8E00001F8E00001F8E00001F8F00001F0F00001F0 F80003F0FC0003E0FF0007C0FFE01F80F3FFFF00E0FFFE00C01FF000>29 41 4 0 38]83 dc[< FFFFE07FFFF007FFF0FFFFE07FFFF007FFF0FFFFE07FFFF007FFF003FC0001FE00001C0003FC00 01FE00001C0001FE0001FF0000380001FE0000FF0000380001FF0000FF0000780000FF0000FF80 00700000FF0000FF8000700000FF8000FF8000F000007F8001FFC000E000007F8001FFC000E000 003FC003FFE001C000003FC0039FE001C000003FE0039FE003C000001FE0070FF0038000001FE0 070FF0038000001FF00F0FF0078000000FF00E07F8070000000FF00E07F80700000007F81E07FC 0E00000007F81C03FC0E00000007FC1C03FC1E00000003FC3801FE1C00000003FC3801FE1C0000 0001FE7801FF3800000001FE7000FF3800000001FE7000FF3800000000FFF000FFF000000000FF E0007FF000000000FFE0007FF0000000007FC0003FE0000000007FC0003FE0000000003FC0003F C0000000003F80001FC0000000003F80001FC0000000001F80001F80000000001F00000F800000 00001F00000F80000000000E000007000000>68 41 1 0 71]87 dc[<01FF800007FFF0000F81 F8001FC07E001FC07E001FC03F000F803F8007003F8000003F8000003F8000003F80000FFF8000 FFFF8007FC3F800FE03F803F803F803F003F807F003F80FE003F80FE003F80FE003F80FE003F80 7E007F807F00DF803F839FFC0FFF0FFC01FC03FC>30 27 2 0 33]97 dc[33 42 2 0 38]98 dc[<001FF80000FFFE0003F01F0007E03F800FC03F801F 803F803F801F007F800E007F0000007F000000FF000000FF000000FF000000FF000000FF000000 FF000000FF0000007F0000007F0000007F8000003F8001C01F8001C00FC0038007E0070003F01E 0000FFFC00001FE000>26 27 2 0 31]99 dc[<00003FF80000003FF80000003FF800000003F8 00000003F800000003F800000003F800000003F800000003F800000003F800000003F800000003 F800000003F800000003F800000003F800001FE3F80000FFFBF80003F03FF80007E00FF8000FC0 07F8001F8003F8003F8003F8007F0003F8007F0003F8007F0003F800FF0003F800FF0003F800FF 0003F800FF0003F800FF0003F800FF0003F800FF0003F8007F0003F8007F0003F8007F0003F800 3F8003F8001F8003F8000F8007F80007C00FF80003F03BFF8000FFF3FF80003FC3FF80>33 42 2 0 38]100 dc[<003FE00001FFF80003F07E0007C01F000F801F801F800F803F800FC07F000FC0 7F0007C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF000000FF000000FF0000007F0000 007F0000007F0000003F8000E01F8000E00FC001C007E0038003F81F0000FFFE00001FF000>27 27 2 0 32]101 dc[<0007F0003FFC00FE3E01F87F03F87F03F07F07F07F07F03E07F00007F000 07F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F00007F00007F00007F000 07F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F000 07F00007F00007F0007FFF807FFF807FFF80>24 42 2 0 21]102 dc[<00FF81F003FFE7F80FC1 FE7C1F80FC7C1F007C383F007E107F007F007F007F007F007F007F007F007F007F007F007F003F 007E001F007C001F80FC000FC1F8001FFFE00018FF800038000000380000003C0000003E000000 3FFFF8001FFFFF001FFFFF800FFFFFC007FFFFE01FFFFFF03E0007F07C0001F8F80000F8F80000 F8F80000F8F80000F87C0001F03C0001E01F0007C00FC01F8003FFFE00007FF000>30 40 2 13 34]103 dc[33 42 3 0 38]104 dc[<07000FC01FE03F E03FE03FE01FE00FC007000000000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE0 0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFF FE>15 43 3 0 20]105 dc[31 42 2 0 36]107 dc[15 42 3 0 20]108 dc[53 27 3 0 58]109 dc[33 27 3 0 38]110 dc[<003FE00001FFFC0003F07E000FC01F801F800FC03F800FE03F0007E07F0007 F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF00 07F87F0007F07F0007F03F800FE03F800FE01F800FC00FC01F8007F07F0001FFFC00003FE000> 29 27 2 0 34]111 dc[33 39 2 12 38]112 dc[24 27 2 0 28]114 dc[<03FE 300FFFF01E03F03800F0700070F00070F00070F80070FC0000FFE0007FFE007FFF803FFFE01FFF F007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F80038FC0070FF01E0F7FFC0C1FF 00>22 27 2 0 27]115 dc[<00700000700000700000700000F00000F00000F00001F00003F000 03F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007F00007F00007F00007F000 07F00007F00007F00007F00007F00007F03807F03807F03807F03807F03807F03803F03803F870 01F86000FFC0001F80>21 38 1 0 27]116 dc[ 33 27 3 0 38]117 dc[33 27 1 0 36]118 dc [47 27 1 0 50]119 dc[33 39 1 12 36]121 dc dfe /fl df[<1E000000 00001F00000000001FF0000000001FFFFFFFFFC01FFFFFFFFFC01FFFFFFFFFC03FFFFFFFFFC03F FFFFFFFF803FFFFFFFFF003FFFFFFFFE003FFFFFFFFC003FFFFFFFF8003FFFFFFFF0007FFFFFFF F0007C000007E0007C00000FC0007800001F80007800001F00007800003E0000F000007E0000F0 0000FC0000F00001F80000000003F00000000003E00000000007E0000000000FC0000000000F80 000000001F80000000003F80000000003F00000000007F00000000007F0000000000FF00000000 00FE0000000001FE0000000001FE0000000003FE0000000003FE0000000003FE0000000007FC00 00000007FC0000000007FC000000000FFC000000000FFC000000000FFC000000000FFC00000000 0FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC00 0000001FFC000000001FFC000000001FFC000000000FF80000000007F00000000003E0000000> 42 59 5 1 49]55 dc[<0001FF8000000FFFF800003FFFFE00007F00FF0000F8003F8001F0000F C003E0000FE007C00007F007C00007F00FC00003F80FC00003F81FC00003F81FC00003F81FE000 03F81FF00003F81FF80003F81FFC0007F01FFF0007F01FFFC007E00FFFF00FE00FFFFC1FC007FF FE3F8007FFFFFF0003FFFFFC0001FFFFF80000FFFFFE00007FFFFF00003FFFFF80003FFFFFE000 FFFFFFF001FDFFFFF007F07FFFF80FE01FFFFC1FC007FFFC3F8001FFFE3F8000FFFE7F00003FFF 7F00000FFFFE000003FFFE000001FFFE000000FFFE000000FFFE0000007FFE0000007FFE000000 7EFE0000007E7F0000007E7F000000FC3F800000FC3FC00001F81FE00003F00FF00007E007FE00 7FC003FFFFFF8000FFFFFE00003FFFF8000003FF8000>40 57 4 1 49]56 dc[<0000001FFF00 0030000001FFFFE000F000000FFFFFFC01F000007FFFFFFE03F00001FFFE007F87F00003FFE000 0FCFF0000FFF000003FFF0001FFC000001FFF0003FF80000007FF0007FF00000003FF000FFC000 00003FF001FFC00000001FF003FF800000000FF007FF000000000FF00FFF0000000007F00FFE00 00000007F01FFE0000000003F01FFE0000000003F03FFC0000000003F03FFC0000000001F03FFC 0000000001F07FFC0000000001F07FF80000000001F07FF80000000000007FF8000000000000FF F8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000 FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF80000000000 00FFF80000000000007FF80000000000007FF80000000000007FF80000000000007FFC00000000 00F03FFC0000000000F03FFC0000000000F03FFC0000000000F01FFE0000000000F01FFE000000 0001E00FFE0000000001E00FFF0000000001E007FF0000000003C003FF8000000003C001FFC000 0000078000FFE00000000F00007FF00000001F00003FF80000003E00001FFC0000007C00000FFF 000001F8000003FFE00007F0000001FFFE003FC00000007FFFFFFF000000000FFFFFFC00000000 01FFFFF000000000001FFF000000>60 61 5 1 71]67 dc[<001FFF00000001FFFFF0000003FF FFFC000007F007FE00000FF801FF00001FFC00FF80001FFC007FC0001FFC007FE0001FFC003FE0 000FF8003FF0000FF8003FF00007F0003FF00001C0003FF0000000003FF0000000003FF0000000 003FF0000000FFFFF000000FFFFFF000007FF83FF00001FF803FF00007FE003FF0000FF8003FF0 001FF0003FF0003FE0003FF0007FE0003FF0007FE0003FF000FFC0003FF000FFC0003FF000FFC0 003FF000FFC0003FF000FFC0007FF0007FE0007FF0007FE000DFF0003FF0039FF8001FFC0F0FFF F007FFFE0FFFF001FFFC07FFF0003FE000FFF0>44 38 3 0 48]97 dc[<0001FFC000000FFFF8 00003FFFFE0000FF80FF0001FE003F8007FC001FC00FF8000FE00FF8000FF01FF00007F03FF000 07F83FF00007F87FE00007F87FE00003FC7FE00003FC7FE00003FCFFE00003FCFFFFFFFFFCFFFF FFFFFCFFFFFFFFFCFFE0000000FFE0000000FFE0000000FFE00000007FE00000007FE00000007F E00000003FE00000003FF000003C1FF000003C1FF000003C0FF800007807FC0000F803FE0001F0 01FF0007E000FFC03FC0003FFFFF000007FFFC000000FFE000>38 38 3 0 45]101 dc[<00FF00 000000FFFF00000000FFFF00000000FFFF00000000FFFF0000000007FF0000000003FF00000000 03FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00 00000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00000000 03FF0000000003FF0000000003FF007FC00003FF01FFF80003FF07FFFC0003FF0F03FE0003FF1C 01FF0003FF3001FF8003FF6000FF8003FFE000FFC003FFC000FFC003FF8000FFC003FF8000FFC0 03FF8000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF00 00FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC0 03FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF00 00FFC003FF0000FFC003FF0000FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFFFFFFFFFC3FFFFF FFFFFC3FFFFF>48 60 4 0 55]104 dc[<00FF01FF8000FFFF0FFFF000FFFF3FFFFC00FFFFFE03 FF00FFFFF000FF8003FFC0007FC003FF80003FE003FF00003FF003FF00001FF803FF00001FFC03 FF00000FFC03FF00000FFE03FF00000FFE03FF000007FE03FF000007FF03FF000007FF03FF0000 07FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03 FF000007FE03FF000007FE03FF00000FFE03FF00000FFC03FF00000FFC03FF00001FF803FF0000 1FF803FF00003FF003FF80003FE003FFC0007FC003FFF001FF8003FFFC07FF0003FF3FFFFC0003 FF0FFFF00003FF01FF000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000 000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003 FF0000000003FF00000000FFFFFC000000FFFFFC000000FFFFFC000000FFFFFC000000>48 55 3 17 55]112 dc[<00FE03F000FFFE0FFE00FFFE1FFF00FFFE3C3F80FFFE707FC007FE60FFE003FE E0FFE003FEC0FFE003FFC0FFE003FF807FC003FF807FC003FF803F8003FF800E0003FF00000003 FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF000000 03FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF0000 0003FF00000003FF00000003FF00000003FF000000FFFFFE0000FFFFFE0000FFFFFE0000FFFFFE 0000>35 38 3 0 41]114 dc[<0007800000078000000780000007800000078000000F8000000F 8000000F8000000F8000001F8000001F8000003F8000003F8000007F800000FF800001FF800007 FF80001FFFFFF0FFFFFFF0FFFFFFF0FFFFFFF001FF800001FF800001FF800001FF800001FF8000 01FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF80 0001FF800001FF800001FF800001FF800001FF803C01FF803C01FF803C01FF803C01FF803C01FF 803C01FF803C01FF803C00FF807800FFC078007FC070003FE0E0001FFFC00007FF800001FF00> 30 55 2 0 38]116 dc dfe /fm df[<3078F87870>5 5 4 0 13]46 dc[<2000003FFFE07FFF C07FFF80400100C002008002008004000008000010000020000040000040000080000180000300 000300000700000600000E00000E00001E00001C00001C00003C00003C00003C00007800007800 00780000300000>19 31 7 1 23]55 dc[<003F0000C1C00100600200600400300C00300C0030 0C00300C00600E00600F80C00FC18007F60003FC0001FC0001FF00063F800C0F801007C03003C0 6001C06000C0C000C0C000C0C000C0C00080C0010060030030040018180007E000>20 31 3 1 23]56 dc[<0000100000001800000038000000380000007800000078000000FC000001BC000001 3C0000033C0000023C0000063C0000043E0000081E0000081E0000101E0000101E0000201E0000 200F0000400F0000400F0000FFFF0000800F0001000F8001000780020007800200078004000780 040007800C0007C03E0007C0FF807FFC>30 32 2 0 34]65 dc[<0001F808000E061800380138 007000F801E0007803C0007007800030078000300F0000301F0000301E0000303E0000203C0000 007C0000007C0000007C0000007C000000F8000000F8000000F8000000F8000000F80000007800 004078000080780000803C0000803C0001001C0002000E00020006000C000300100001C0E00000 3F0000>29 33 5 1 33]67 dc[<07FFFFF8007C0078003C0038003C0018007800180078000800 78000800780008007800080078080800F0100000F0100000F0100000F0300000FFF00000F07000 01E0200001E0200001E0200001E0200001E0000801E0001003C0001003C0001003C0002003C000 2003C0006003C000C0078001C0078007C0FFFFFF80>29 31 2 0 31]69 dc[<0001FC04000F03 0C003C009C0070007C00E0003C01C0003803800018078000180F0000181F0000181E0000183E00 00103C0000007C0000007C0000007C0000007C000000F8000000F8000000F8007FFCF80003E078 0001E0780001E0780003C0780003C03C0003C03C0003C01C0003C00E0007C007000B8003801180 01E06080003F8000>30 33 5 1 36]71 dc[<07FFC7FFC0007C00F800003C007800003C007800 007800F000007800F000007800F000007800F000007800F000007800F00000F001E00000F001E0 0000F001E00000F001E00000FFFFE00000F001E00001E003C00001E003C00001E003C00001E003 C00001E003C00001E003C00003C007800003C007800003C007800003C007800003C007800003C0 07800007800F000007C00F8000FFF8FFF800>34 31 2 0 34]72 dc[<07FFE0007C00003C0000 3C0000780000780000780000780000780000780000F00000F00000F00000F00000F00000F00001 E00001E00001E00001E00001E00001E00003C00003C00003C00003C00003C00003C00007800007 C000FFFC00>19 31 1 0 16]73 dc[<07FFF000007E0000003C0000003C000000780000007800 000078000000780000007800000078000000F0000000F0000000F0000000F0000000F0000000F0 000001E0000001E0000001E0000001E0000001E0008001E0010003C0010003C0010003C0030003 C0020003C0060003C0060007801E0007807C00FFFFFC00>25 31 2 0 28]76 dc[<07FC0000FF C0007C0000F800003C00017800003C00017800004E0002F000004E0002F000004E0004F000004E 0004F000004E0008F000004E0008F00000870011E00000870011E00000870021E00000870021E0 0000870041E00000838041E00001038083C00001038083C00001038103C00001038203C0000101 C203C0000101C403C0000201C40780000201C80780000201C80780000201D00780000200F00780 000600E00780000600E00F00000F00C00F8000FFE0C1FFF800>42 31 2 0 42]77 dc[<07FC01 FFC0003E003E00003E001800003E001800004F001000004F001000004780100000478010000043 C010000043C010000083C020000081E020000081E020000080F020000080F02000008078200001 0078400001007C400001003C400001003C400001001E400001001E400002000F800002000F8000 02000F800002000780000200078000060003800006000300000F00010000FFE0010000>34 31 2 0 34]78 dc[<0003F800001E0E000038070000E0038001C001C003C001E0078000E00F0000F00F 0000F01E0000F01E0000F83E0000F83C0000F87C0000F87C0000F87C0000F87C0000F8F80001F0 F80001F0F80001F0F80001F0F80003E0780003E0780003C0780007C07C0007803C000F003C001E 001E001C000E0038000700F00003C3C00000FE0000>29 33 5 1 35]79 dc[<07FFFF00007C03 C0003C01E0003C00F0007800F0007800F8007800F8007800F8007800F8007800F000F001F000F0 01E000F003C000F0078000F00F0000FFF80001E0000001E0000001E0000001E0000001E0000001 E0000003C0000003C0000003C0000003C0000003C0000003C000000780000007C00000FFFC0000 >29 31 2 0 31]80 dc[<07FFFC00007C0700003C03C0003C01E0007801E0007801F0007801F0 007801F0007801F0007801E000F003E000F003C000F0078000F00F0000F03C0000FFF00001E030 0001E0380001E01C0001E01C0001E01C0001E01E0003C03E0003C03E0003C03E0003C03E0003C0 3E0003C03E0207803E0407C01F04FFFC0F18000003E0>31 32 2 1 33]82 dc[<003F040060CC 01803C03801C03001C0700180600080E00080E00080E00080E00000F00000F80000FE00007FE00 03FF8001FFC0007FE00007E00001E00000E00000F00000F04000E04000E04000E04000E06000C0 600180E00380F80300C60C0081F800>22 33 3 1 25]83 dc[<3FFFFFF03C0780F03007803060 078030400F0010400F0010C00F0010800F0010800F0010800F0010001E0000001E0000001E0000 001E0000001E0000001E0000003C0000003C0000003C0000003C0000003C0000003C0000007800 00007800000078000000780000007800000078000000F0000001F800007FFFE000>28 31 6 0 33]84 dc[29 32 7 1 34]85 dc[ 31 32 6 1 34]86 dc[32 31 6 0 34]89 dc dfe /fn df[<001E00006100 00C08001808001800003800003000003800003800003C00001F00000F800007C0001FC00070E00 0E0E001E06001C06003C0600780600780600780600F00400F00400F00C00F00800F00800701800 7010003020001840000F8000>17 32 2 0 20]14 dc[<007FFE01FFFE07FFFE0F07801E03801C 01C03801C07001C07001C07001C0E00380E00380E00380E00700E00700E00E00600C0030180018 60000F8000>23 20 2 0 26]27 dc[<70F8FCFC74040404080810102040>6 14 4 9 13]59 dc[ <000001C00000078000001E00000078000001E00000078000000E00000038000000F0000003C0 00000F0000003C000000F0000000F00000003C0000000F00000003C0000000F000000038000000 0E0000000780000001E0000000780000001E0000000780000001C0>26 26 4 2 35]60 dc[<00 0100030003000600060006000C000C000C00180018001800300030003000600060006000C000C0 00C00180018001800300030003000600060006000C000C000C0018001800180030003000300060 0060006000C000C000C000>16 45 3 11 23]61 dc[26 26 4 2 35]62 dc[<000002000000060000000E0000000E0000001E 0000001F0000002F0000002F0000004F0000008F0000008F0000010F0000010F0000020F000004 0F0000040F0000080F8000080780001007800020078000200780007FFF80004007800080078001 8007800100078002000780020007C0040003C00C0003C01E0007C0FF807FFC>30 32 2 0 34] 65 dc[<00FFFFE0000F0078000F003C000F001C000F001E001E001E001E001E001E001E001E00 1E003C003C003C003C003C0078003C00F0007803C0007FFF80007803C0007801E000F000F000F0 00F000F000F000F0007001E000F001E000F001E000F001E000E003C001E003C003C003C0038003 C00F0007801E00FFFFF000>31 31 2 0 34]66 dc[<0000FE0200078186001C004C0038003C00 60003C00C0001C01C0001803800018070000180F0000181E0000101E0000103C0000003C000000 78000000780000007800000078000000F0000000F0000000F0000000F0000000F0000080700000 8070000080700001003800010038000200180004000C001800060020000381C00000FE0000>31 33 2 1 33]67 dc[<00007E0100038183000E00460038002E0070001E00E0000E01C0000C0380 000C0700000C0F00000C1E0000081E0000083C0000003C00000078000000780000007800000078 000000F0000000F0007FFCF00001E0F00001E0F00003C0700003C0700003C0700003C038000780 380007801C000F800C000B80060033000380C100007F0000>32 33 2 1 36]71 dc[<00FFF9FF F0000F801F00000F001E00000F001E00000F001E00001E003C00001E003C00001E003C00001E00 3C00003C007800003C007800003C007800003C007800007800F000007FFFF000007800F0000078 00F00000F001E00000F001E00000F001E00000F001E00001E003C00001E003C00001E003C00001 E003C00003C007800003C007800003C007800003C007800007C00F8000FFF8FFF800>36 31 2 0 38]72 dc[<00FFFFC0000F0070000F0038000F001C000F001E001E001E001E001E001E001E001E 001E003C003C003C003C003C0078003C0070007800E000780380007FFE000078000000F0000000 F0000000F0000000F0000001E0000001E0000001E0000001E0000003C0000003C0000003C00000 03C0000007C00000FFFC0000>31 31 2 0 29]80 dc[<0001FC0000070700001C01C0003000E0 00E000E001C000700380007007800078070000380F0000381E0000381E0000383C0000383C0000 7878000078780000787800007878000078F00000F0F00000F0F00000E0F00001E0F00001C0F000 03C070000380701C070070600F0038811E0038813C001C8170000E81E0000783808001FD008000 0101800001010000038300000386000003FE000003FC000001F8000000F000>29 41 2 9 36] 81 dc[<00FFFF80000F01E0000F0070000F0038000F003C001E003C001E003C001E003C001E00 3C003C0078003C0078003C00F0003C01E00078038000780F00007FF80000781C0000F00E0000F0 0F0000F0070000F0078001E00F0001E00F0001E00F0001E00F0003C01E0003C01E0203C01E0203 C01E0407C00E04FFFC0718000003E0>31 32 2 1 35]82 dc[<0007E0800018118000300B0000 60070000C0070001C0030001800200038002000380020003800200038000000380000003C00000 03F8000003FF800001FFC00000FFE000003FF0000003F0000000F0000000700000007000000070 002000700020007000200060006000E0006000C0006001C00070018000E8030000C60E000081F8 0000>25 33 3 1 28]83 dc[<0FFFFFFC1E03C0381803C0181003C0082003C008200780086007 80084007800840078008800F0010000F0000000F0000000F0000001E0000001E0000001E000000 1E0000003C0000003C0000003C0000003C00000078000000780000007800000078000000F00000 00F0000000F0000000F0000001F000007FFFC000>30 31 1 0 27]84 dc[<00F1800389C00707 800E03801C03803C0380380700780700780700780700F00E00F00E00F00E00F00E10F01C20F01C 20703C20705C40308C400F0780>20 20 2 0 24]97 dc[<07803F8007000700070007000E000E 000E000E001C001C001CF01D0C3A0E3C0E380F380F700F700F700F700FE01EE01EE01EE01CE03C E038607060E031C01F00>16 32 2 0 20]98 dc[<007C01C207010E0F1E0F1C0E3C0478007800 7800F000F000F000F000F00070017002300418380FC0>16 20 2 0 20]99 dc[<0000780003F8 0000700000700000700000700000E00000E00000E00000E00001C00001C000F1C00389C0070780 0E03801C03803C0380380700780700780700780700F00E00F00E00F00E00F00E10F01C20F01C20 703C20705C40308C400F0780>21 32 2 0 24]100 dc[<007C01C207010E011C013C013802780C 7BF07C00F000F000F000F0007000700170023004183807C0>16 20 2 0 21]101 dc[<00E001E0 01E000C000000000000000000000000000000E00130023804380438043808700070007000E000E 001C001C001C20384038403840388019000E00>11 31 2 0 16]105 dc[<0000C00001E00001E0 0001C0000000000000000000000000000000000000000000001E00006300004380008380010380 010380020700000700000700000700000E00000E00000E00000E00001C00001C00001C00001C00 00380000380000380000380000700000700030700078E000F1C0006380003E0000>19 40 -1 9 19]106 dc[<01E0000FE00001C00001C00001C00001C000038000038000038000038000070000 0700000701E00706100E08700E10F00E20F00E40601C80001D00001E00001FC000387000383800 383800381C20703840703840703840701880E01880600F00>20 32 2 0 24]107 dc[<03C01FC0 038003800380038007000700070007000E000E000E000E001C001C001C001C0038003800380038 007000700070007100E200E200E200E20064003800>10 32 2 0 14]108 dc[<1E07C07C002318 61860023A032030043C03403004380380380438038038087007007000700700700070070070007 007007000E00E00E000E00E00E000E00E00E000E00E01C101C01C01C201C01C038201C01C03840 1C01C0184038038018801801800F00>36 20 2 0 40]109 dc[<1E07802318C023A06043C07043 80704380708700E00700E00700E00700E00E01C00E01C00E01C00E03821C03841C07041C07081C 03083803101801E0>23 20 2 0 27]110 dc[<03C1E004621804741C08781C08701E08701E10E0 1E00E01E00E01E00E01E01C03C01C03C01C03C01C0380380780380700380E003C1C0072380071E 000700000700000E00000E00000E00000E00001C00001C0000FFC000>23 29 -1 9 23]112 dc[ <1E1E0023210023C38043C7804387804383008700000700000700000700000E00000E00000E00 000E00001C00001C00001C00001C0000380000180000>17 20 2 0 21]114 dc[<007C01820301 0603060706060E00078007F803FC01FE001F00077007F006F006E004400820301FC0>16 20 2 0 21]115 dc[<00C000E001C001C001C001C003800380FFF8038007000700070007000E000E000E 000E001C001C001C001C10382038203820384018800F00>13 28 1 0 16]116 dc[<0F01801183 C02183E021C1E041C0E04380608380400700400700400700400E00800E00800E00800E01000E01 000C02000E04000E040006180001E000>19 20 2 0 22]118 dc[<03C1C00C62201034701038F0 2038F020386040700000700000700000700000E00000E00000E00000E02061C040F1C040F1C080 E2C080446300383C00>20 20 2 0 26]120 dc dfe /fo df[<0000000003E000000000000000 000007F000000000000000000007F00000000000000000000FF80000000000000000000FF80000 000000000000000FF80000000000000000001FFC0000000000000000001FFC0000000000000000 003FFE0000000000000000003FFE0000000000000000007FFF0000000000000000007FFF000000 0000000000007FFF000000000000000000FFFF800000000000000000FFFF800000000000000001 FFFFC00000000000000001FFFFC00000000000000001FFFFC00000000000000003FFFFE0000000 0000000003EFFFE00000000000000007EFFFF00000000000000007CFFFF00000000000000007C7 FFF0000000000000000FC7FFF8000000000000000F83FFF8000000000000001F83FFFC00000000 0000001F03FFFC000000000000001F01FFFC000000000000003F01FFFE000000000000003E00FF FE000000000000007E00FFFF000000000000007C007FFF00000000000000FC007FFF8000000000 0000F8007FFF80000000000000F8003FFF80000000000001F8003FFFC0000000000001F0001FFF C0000000000003F0001FFFE0000000000003E0001FFFE0000000000003E0000FFFE00000000000 07E0000FFFF0000000000007C00007FFF000000000000FC00007FFF800000000000F800007FFF8 00000000000F800003FFF800000000001F800003FFFC00000000001F000001FFFC00000000003F FFFFFFFFFE00000000003FFFFFFFFFFE00000000007FFFFFFFFFFF00000000007FFFFFFFFFFF00 000000007FFFFFFFFFFF0000000000FC0000007FFF8000000000F80000003FFF8000000001F800 00003FFFC000000001F00000003FFFC000000001F00000001FFFC000000003F00000001FFFE000 000003E00000000FFFE000000007E00000000FFFF000000007C00000000FFFF000000007C00000 0007FFF00000000FC000000007FFF80000000F8000000003FFF80000001F8000000003FFFC0000 001F0000000003FFFC0000007FC000000001FFFC0000FFFFFFC00007FFFFFFFF80FFFFFFC00007 FFFFFFFF80FFFFFFC00007FFFFFFFF80FFFFFFC00007FFFFFFFF80FFFFFFC00007FFFFFFFF80> 81 72 4 0 90]65 dc[<000000003FFE00000E0000000FFFFFC0001E0000007FFFFFF8003E0000 03FFFFFFFE00FE00000FFFFFFFFF81FE00003FFFF800FFC3FE0000FFFF80000FF7FE0001FFFC00 0003FFFE0007FFF0000001FFFE000FFFC00000007FFE001FFF800000003FFE003FFF000000001F FE007FFE000000000FFE00FFFC0000000007FE01FFF80000000007FE03FFF00000000003FE03FF F00000000001FE07FFE00000000001FE07FFE00000000000FE0FFFC00000000000FE0FFFC00000 0000007E1FFFC000000000007E1FFF8000000000007E3FFF8000000000007E3FFF800000000000 3E3FFF8000000000003E7FFF8000000000003E7FFF0000000000003E7FFF000000000000007FFF 00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF000000 00000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF000000000000 00FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF 000000000000007FFF000000000000007FFF000000000000007FFF000000000000007FFF800000 0000003E3FFF8000000000003E3FFF8000000000003E3FFF8000000000003E1FFF800000000000 3E1FFFC000000000003E0FFFC000000000007C0FFFC000000000007C07FFE000000000007C07FF E00000000000F803FFF00000000000F803FFF00000000001F801FFF80000000001F000FFFC0000 000003E0007FFE0000000007E0003FFF000000000FC0001FFF800000001F80000FFFC00000003F 000007FFF0000000FE000001FFFC000001FC000000FFFF80000FF80000003FFFF8007FF0000000 0FFFFFFFFFC000000003FFFFFFFF00000000007FFFFFFC00000000000FFFFFE00000000000003F FE000000>71 73 7 1 86]67 dc[39 71 3 0 45]73 dc[104 71 4 0 113]77 dc[84 71 4 0 93]78 dc[82 72 4 1 91]85 dc[<0007FFFC000000007FFFFFC00000 01FFFFFFF8000003FFFFFFFE000007FE001FFF000007FF0003FFC0000FFF8001FFE0000FFF8000 FFF0000FFF80007FF0000FFF80007FF8000FFF80007FF80007FF00003FFC0007FF00003FFC0003 FE00003FFC0000F800003FFC00000000003FFC00000000003FFC00000000003FFC00000000003F FC00000007FFFFFC000000FFFFFFFC000007FFFFFFFC00003FFFE03FFC0000FFFE003FFC0003FF F0003FFC0007FFC0003FFC000FFF00003FFC001FFE00003FFC003FFC00003FFC007FF800003FFC 007FF800003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000 003FFC00FFF000007FFC007FF80000FFFC007FF80001EFFC003FFC0003EFFC003FFF0007CFFF00 0FFFC03F8FFFF807FFFFFF07FFFC01FFFFFC03FFFC007FFFF001FFFC0003FF80007FF8>54 46 3 0 58]97 dc[<00001FFE00000001FFFFE0000007FFFFF800001FFFFFFE00007FFC07FF0000FFE0 01FF8001FFC0007FC003FF80003FE007FF00003FF00FFE00001FF01FFE00000FF81FFC00000FF8 3FFC00000FFC3FFC000007FC7FFC000007FC7FF8000007FC7FF8000007FE7FF8000007FEFFF800 0007FEFFF8000007FEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFCFFF800000000 FFF800000000FFF800000000FFF8000000007FF8000000007FF8000000007FFC000000003FFC00 0000003FFC000000003FFC0000001C1FFE0000003E0FFE0000003E07FF0000007E07FF000000FC 03FF800001F801FFC00003F0007FF0001FE0003FFE00FFC0001FFFFFFF800007FFFFFE000000FF FFF80000000FFF8000>47 46 3 0 54]101 dc[<00000000001F8000007FF000FFE00007FFFF03 FFF0001FFFFFC7FFF0007FFFFFFFC7F800FFE03FFE0FF801FF800FFC0FF803FF0007FE0FF807FE 0003FF07F007FE0003FF07F00FFC0001FF81C00FFC0001FF80000FFC0001FF80001FFC0001FFC0 001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0000FFC00 01FF80000FFC0001FF80000FFC0001FF800007FE0003FF000007FE0003FF000003FF0007FE0000 01FF800FFC000000FFE03FF8000001FFFFFFF0000001DFFFFFC0000003C7FFFF00000003C07FF0 00000007C0000000000007C0000000000007C0000000000007C0000000000007E0000000000007 F0000000000007F8000000000007FFFFFFF0000007FFFFFFFF000003FFFFFFFFE00003FFFFFFFF F80001FFFFFFFFFE0001FFFFFFFFFF0000FFFFFFFFFF80007FFFFFFFFF8003FFFFFFFFFFC00FFF FFFFFFFFC01FF800001FFFE03FE0000001FFE07FC00000007FF07FC00000003FF0FF800000001F F0FF800000001FF0FF800000001FF0FF800000001FF0FF800000001FF07FC00000003FE07FC000 00003FE03FE00000007FC03FF0000000FFC01FFC000003FF800FFF00000FFF0003FFF000FFFC00 00FFFFFFFFF000003FFFFFFFC0000007FFFFFE000000003FFFC00000>53 68 3 21 59]103 dc[ <007FC00000000000FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC0000000 0000FFFFC0000000000003FFC0000000000001FFC0000000000001FFC0000000000001FFC00000 00000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000 0000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0 000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FF C0000000000001FFC0000000000001FFC001FFC0000001FFC00FFFF8000001FFC03FFFFE000001 FFC0FFFFFF000001FFC1FC07FF800001FFC3E003FFC00001FFC7C001FFC00001FFCF0001FFE000 01FFDE0000FFE00001FFDC0000FFE00001FFFC0000FFF00001FFF80000FFF00001FFF00000FFF0 0001FFF00000FFF00001FFF00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000 FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE000 00FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE0 0000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000FFFFFFC07FFFFFE0FF FFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0>59 72 4 0 66] 104 dc[<00FC0001FF0003FF8007FFC00FFFC01FFFE01FFFE01FFFE01FFFE01FFFE01FFFE00FFF C007FFC003FF8001FF0000FC000000000000000000000000000000000000000000000000000000 00000000000000007FC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC003FFC001FFC001FFC001FFC001FF C001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF C001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF C001FFC001FFC001FFC001FFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF>24 73 4 0 32]105 dc[< 007FC000FFFFC000FFFFC000FFFFC000FFFFC000FFFFC00003FFC00001FFC00001FFC00001FFC0 0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001 FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000FFFFFF80FF FFFF80FFFFFF80FFFFFF80FFFFFF80>25 72 4 0 32]108 dc[<007FC001FFC00000FFE00000FF FFC00FFFF80007FFFC0000FFFFC03FFFFE001FFFFF0000FFFFC0FFFFFF007FFFFF8000FFFFC1FC 07FF80FE03FFC000FFFFC3E003FFC1F001FFE00003FFC7C001FFC3E000FFE00001FFCF0001FFE7 8000FFF00001FFDE0000FFEF00007FF00001FFDC0000FFEE00007FF00001FFFC0000FFFE00007F F80001FFF80000FFFC00007FF80001FFF00000FFF800007FF80001FFF00000FFF800007FF80001 FFF00000FFF800007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE000 00FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF0 00007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007F F80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001 FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE000 00FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF0 00007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007F F80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001 FFE00000FFF000007FF800FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0FFFFFFC0 7FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0>92 46 4 0 99] 109 dc[<007FC001FFC00000FFFFC00FFFF80000FFFFC03FFFFE0000FFFFC0FFFFFF0000FFFFC1 FC07FF8000FFFFC3E003FFC00003FFC7C001FFC00001FFCF0001FFE00001FFDE0000FFE00001FF DC0000FFE00001FFFC0000FFF00001FFF80000FFF00001FFF00000FFF00001FFF00000FFF00001 FFF00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000 01FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF0 0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000 FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE000 00FFF00001FFE00000FFF00001FFE00000FFF000FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFF C07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0>59 46 4 0 66]110 dc[<00000FFF000000 0000FFFFF000000007FFFFFE0000001FFFFFFF8000003FFC03FFC00000FFE0007FF00001FF8000 1FF80003FF00000FFC0007FE000007FE000FFE000007FF000FFC000003FF001FFC000003FF803F FC000003FFC03FF8000001FFC03FF8000001FFC07FF8000001FFE07FF8000001FFE07FF8000001 FFE0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8 000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF07FF8000001FF E07FF8000001FFE07FF8000001FFE07FF8000001FFE03FFC000003FFC03FFC000003FFC01FFC00 0003FF801FFE000007FF800FFE000007FF0007FF00000FFE0003FF80001FFC0001FFC0003FF800 00FFE0007FF000007FFC03FFE000001FFFFFFF80000007FFFFFE00000000FFFFF0000000000FFF 000000>52 46 3 0 59]111 dc[<007FC00FFC000000FFFFC07FFFC00000FFFFC3FFFFF00000FF FFCFFFFFFC0000FFFFDFF01FFF0000FFFFFF8007FF800003FFFE0001FFC00001FFF80000FFE000 01FFF00000FFF00001FFE000007FF80001FFE000003FFC0001FFE000003FFC0001FFE000003FFE 0001FFE000001FFE0001FFE000001FFF0001FFE000001FFF0001FFE000001FFF0001FFE000000F FF0001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE00000 0FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000 000FFF8001FFE000000FFF0001FFE000001FFF0001FFE000001FFF0001FFE000001FFE0001FFE0 00001FFE0001FFE000003FFC0001FFE000003FFC0001FFE000007FF80001FFF000007FF80001FF F80000FFF00001FFFC0001FFE00001FFFE0003FFC00001FFFF0007FF800001FFFFE03FFE000001 FFEFFFFFFC000001FFE3FFFFF0000001FFE0FFFF80000001FFE01FF800000001FFE00000000000 01FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000000001FFE000000000 0001FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000 000001FFE0000000000001FFE0000000000001FFE0000000000001FFE00000000000FFFFFFC000 000000FFFFFFC000000000FFFFFFC000000000FFFFFFC000000000FFFFFFC000000000>57 66 4 20 66]112 dc[<00FF803F8000FFFF80FFF000FFFF83FFFC00FFFF87FFFE00FFFF8FC3FF00FFFF 8F07FF0003FF9E0FFF8001FFBC0FFF8001FFB80FFF8001FFF80FFF8001FFF00FFF8001FFF007FF 0001FFF007FF0001FFE003FE0001FFE000F80001FFE000000001FFE000000001FFC000000001FF C000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC00000 0001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FF C000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC00000 0001FFC000000001FFC000000001FFC0000000FFFFFFE00000FFFFFFE00000FFFFFFE00000FFFF FFE00000FFFFFFE00000>41 46 4 0 49]114 dc[<000FFF00E0007FFFF3E001FFFFFFE007FFFF FFE00FF800FFE01FC0001FE03F80000FE03F000007E07F000003E07F000003E0FF000003E0FF00 0003E0FF800003E0FFC0000000FFF0000000FFFE000000FFFFF800007FFFFFC0007FFFFFF0003F FFFFFC001FFFFFFF000FFFFFFF8007FFFFFFC003FFFFFFE000FFFFFFF0003FFFFFF00003FFFFF8 00001FFFF8000000FFFC0000001FFC7800000FFCF8000007FCF8000003FCFC000003FCFC000003 FCFE000003F8FE000003F8FF000003F8FF800007F0FFC0000FF0FFF0001FE0FFFC00FFC0FFFFFF FF80FC7FFFFE00F81FFFF800E003FF8000>38 46 4 0 47]115 dc[<0001F000000001F0000000 01F000000001F000000001F000000001F000000003F000000003F000000003F000000007F00000 0007F000000007F00000000FF00000000FF00000001FF00000003FF00000003FF00000007FF000 0001FFF0000003FFF000000FFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC000FFF0 000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FF F0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000 FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF001F0 00FFF001F000FFF001F000FFF001F000FFF001F000FFF001F000FFF001F000FFF001F000FFF001 F0007FF001E0007FF803E0003FF803E0003FFC07C0001FFE0F80000FFFFF800007FFFE000001FF FC0000001FF000>36 66 2 0 46]116 dc[56 46 3 0 63]118 dc[< 7FFFFFC000FFFF807FFFFFC000FFFF807FFFFFC000FFFF807FFFFFC000FFFF807FFFFFC000FFFF 8000FFF000000FE00000FFF800000FC00000FFF800000FC000007FFC00000F8000007FFC00001F 8000003FFC00001F0000003FFE00003F0000001FFE00003E0000001FFF00007E0000000FFF0000 7C0000000FFF8000FC00000007FF8000F800000007FFC001F800000003FFC001F000000003FFE0 03F000000003FFE003F000000001FFF003E000000001FFF007E000000000FFF007C000000000FF F80FC0000000007FF80F80000000007FFC1F80000000003FFC1F00000000003FFE3F0000000000 1FFE3E00000000001FFF7E00000000000FFF7C00000000000FFFFC00000000000FFFFC00000000 0007FFF8000000000007FFF8000000000003FFF0000000000003FFF0000000000001FFE0000000 000001FFE0000000000000FFC0000000000000FFC00000000000007F800000000000007F800000 000000003F000000000000003F000000000000003F000000000000003E000000000000007E0000 00000000007C00000000000000FC000000001F8000F8000000003FC001F8000000007FE001F000 000000FFF003F000000000FFF003E000000000FFF007E000000000FFF00FC000000000FFF01F80 00000000FFF03F80000000007FE07F00000000007F43FE00000000003FFFF800000000001FFFF0 000000000007FFC0000000000001FE000000000000>57 66 2 20 63]121 dc dfe /fp df[<38 7CFEFEFE7C38>7 7 4 0 16]46 dc[<00180000780001F800FFF800FFF80001F80001F80001F8 0001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8 0001F80001F80001F80001F80001F80001F80001F80001F80001F8007FFFE07FFFE0>19 32 4 0 28]49 dc[<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01F87C01F83803F800 03F80003F00003F00007E00007C0000F80001F00003E0000380000700000E01801C01803801807 00180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF0>21 32 3 0 28]50 dc[<00FE0007FF C00F07E01E03F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003E00007C0001F8001FE 0001FF000007C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00FEFF00FEFF00FC7E01 FC7801F81E07F00FFFC001FE00>23 32 2 0 28]51 dc[<0000E00001E00003E00003E00007E0 000FE0001FE0001FE00037E00077E000E7E001C7E00187E00307E00707E00E07E00C07E01807E0 3807E07007E0E007E0FFFFFEFFFFFE0007E00007E00007E00007E00007E00007E00007E000FFFE 00FFFE>23 32 2 0 28]52 dc[<1000201E01E01FFFC01FFF801FFF001FFE001FF8001BC00018 000018000018000018000019FC001FFF001E0FC01807E01803E00003F00003F00003F80003F838 03F87C03F8FE03F8FE03F8FC03F0FC03F07007E03007C01C1F800FFF0003F800>21 32 3 0 28] 53 dc[<6000007800007FFFFE7FFFFE7FFFFC7FFFF87FFFF87FFFF0E00060E000C0C00180C003 00C00300000600000C00001C0000180000380000780000780000F00000F00000F00001F00001F0 0001F00003F00003F00003F00003F00003F00003F00003F00001E000>23 34 3 0 28]55 dc[< 00FE0003FFC00703E00E00F01C00F01C00783C00783E00783F00783F80783FE0F01FF9E01FFFC0 0FFF8007FFC003FFE007FFF01E7FF83C1FFC7807FC7801FEF000FEF0003EF0001EF0001EF0001C F8001C7800383C00381F01F00FFFC001FF00>23 32 2 0 28]56 dc[<00007000000000700000 0000F800000000F800000000F800000001FC00000001FC00000003FE00000003FE00000003FE00 000006FF000000067F0000000E7F8000000C3F8000000C3F800000183FC00000181FC00000381F E00000300FE00000300FE00000600FF000006007F00000E007F80000FFFFF80000FFFFF8000180 01FC00018001FC00038001FE00030000FE00030000FE000600007F000600007F00FFE00FFFF8FF E00FFFF8>37 34 2 0 42]65 dc[34 34 2 0 40]66 dc[ <0003FE0080001FFF818000FF01E38001F8003F8003E0001F8007C0000F800F800007801F8000 07803F000003803F000003807F000001807E000001807E00000180FE00000000FE00000000FE00 000000FE00000000FE00000000FE00000000FE00000000FE000000007E000000007E000001807F 000001803F000001803F000003801F800003000F8000030007C000060003F0000C0001F8003800 00FF00F000001FFFC0000003FE0000>33 34 3 0 40]67 dc[37 34 2 0 43]68 dc[<0003FE0040001FFFC0C0007F00F1C001F8003FC003F0000FC007C0 0007C00FC00003C01F800003C03F000001C03F000001C07F000000C07E000000C07E000000C0FE 00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000FFFFC 7E000FFFFC7F00001FC07F00001FC03F00001FC03F00001FC01F80001FC00FC0001FC007E0001F C003F0001FC001FC003FC0007F80E7C0001FFFC3C00003FF00C0>38 34 3 0 44]71 dc[19 34 1 0 21]73 dc[29 34 2 0 34]76 dc[48 34 2 0 53]77 dc[39 34 2 0 44]78 dc[32 34 2 0 38]80 dc[39 34 2 0 42]82 dc[<01FC0407FF8C1F03FC3C007C7C003C78001C78001CF8000CF8000CFC000CFC0000 FF0000FFE0007FFF007FFFC03FFFF01FFFF80FFFFC03FFFE003FFE0003FF00007F00003F00003F C0001FC0001FC0001FE0001EE0001EF0003CFC003CFF00F8C7FFE080FF80>24 34 3 0 31]83 dc[<7FFFFFFF807FFFFFFF807E03F80F807803F807807003F803806003F80180E003F801C0E003 F801C0C003F800C0C003F800C0C003F800C0C003F800C00003F800000003F800000003F8000000 03F800000003F800000003F800000003F800000003F800000003F800000003F800000003F80000 0003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F800 000003F8000003FFFFF80003FFFFF800>34 34 2 0 39]84 dc[38 34 2 0 43]85 dc[39 34 1 0 42]86 dc[<07 FC001FFF803F07C03F03E03F01E03F01F01E01F00001F00001F0003FF003FDF01FC1F03F01F07E 01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF87F07E03F>24 22 2 0 27]97 dc[26 35 2 0 31]98 dc[<00FF8007FFE00F 83F01F03F03E03F07E03F07C01E07C0000FC0000FC0000FC0000FC0000FC0000FC00007C00007E 00007E00003E00301F00600FC0E007FF8000FE00>20 22 2 0 25]99 dc[<0001FE000001FE00 00003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E 0000003E0001FC3E0007FFBE000F81FE001F007E003E003E007E003E007C003E00FC003E00FC00 3E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E007C003E007C003E003E007E001E 00FE000F83BE0007FF3FC001FC3FC0>26 35 2 0 31]100 dc[<00FE0007FF800F87C01E01E03E 01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E 00181F00300FC07003FFC000FF00>21 22 2 0 26]101 dc[<003F8000FFC001E3E003C7E007C7 E00F87E00F83C00F80000F80000F80000F80000F80000F8000FFFC00FFFC000F80000F80000F80 000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80 000F80000F80007FF8007FF800>19 35 1 0 17]102 dc[<03FC1E0FFF7F1F0F8F3E07CF3C03C0 7C03E07C03E07C03E07C03E07C03E03C03C03E07C01F0F801FFF0013FC00300000300000380000 3FFF801FFFF00FFFF81FFFFC3800FC70003EF0001EF0001EF0001EF0001E78003C7C007C3F01F8 0FFFE001FF00>24 33 2 11 28]103 dc[26 35 2 0 31]104 dc[<1C003F007F007F007F003F001C00000000000000000000000000 0000FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F 001F00FFE0FFE0>11 36 2 0 16]105 dc[11 35 2 0 16]108 dc[43 22 2 0 48]109 dc[26 22 2 0 31]110 dc[<00FE0007FFC00F83E01E 00F03E00F87C007C7C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C 007C3E00F81F01F00F83E007FFC000FE00>23 22 2 0 28]111 dc[26 32 2 10 31]112 dc[19 22 2 0 23]114 dc[<0FF3003FFF00781F00600700E00300E00300F00300FC00007FE0007F F8003FFE000FFF0001FF00000F80C00780C00380E00380E00380F00700FC0E00EFFC00C7F000> 17 22 2 0 22]115 dc[<0180000180000180000180000380000380000780000780000F80003F 8000FFFF00FFFF000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F 80000F81800F81800F81800F81800F81800F830007C30003FE0000F800>17 32 1 0 22]116 dc [26 22 2 0 31]117 dc[37 22 1 0 40]119 dc[27 32 1 10 30]121 dc[<7FFFF07FFFF07C03E07007C0600FC0E01F80C01F00C03E00C07E0000FC 0000F80001F00003F03007E03007C0300F80701F80703F00603E00E07C03E0FFFFE0FFFFE0>20 22 2 0 25]122 dc dfe /fq df[<00003F03E00000C386700001878CF00003879CF000030318 60000700380000070038000007003800000E003800000E007000000E007000000E00700000FFFF FF80001C007000001C00E000001C00E000001C00E000001C00E000003800E000003801C0000038 01C000003801C000003801C000007001C000007003800000700380000070038000007003800000 6003800000E007000000E007000000E007000000E007000000C006000001C00E000001C00E0000 31860C0000798F180000F31E100000620C6000003C07C00000>36 41 -2 9 28]11 dc[<00003F E00000E01000018038000380780003007800070030000700000007000000070000000E0000000E 0000000E000000FFFFE0000E00E0001C01C0001C01C0001C01C0001C01C0001C03800038038000 380380003803800038070000380700007007000070071000700E2000700E2000700E2000E00E20 00E0064000E0038000E0000000C0000001C0000001C000003180000079800000F3000000620000 003C000000>29 41 -2 9 26]12 dc[<1C3C3C3C3C040408081020204080>6 14 3 9 14]44 dc [<7FF0FFE07FE0>12 3 3 -8 16]45 dc[<70F8F8F0E0>5 5 5 0 14]46 dc[<001F800060E000 80700100300200380420380420380410380420700460700380600000E00001C000030000FE0000 1C00000600000700000780000780000780300780780780780780F00F00800F00401E00401C0040 380020E0001F8000>21 31 4 1 23]51 dc[<070F1F1F0E0000000000000000000070F8F8F0E0> 8 20 5 0 14]58 dc[<00000200000006000000060000000E0000001E0000001E0000003F0000 002F0000004F0000004F0000008F0000010F0000010F0000020F0000020F0000040F00000C0F00 00080F0000100F0000100F0000200F80003FFF800040078000C007800080078001000780010007 800200078002000780060007801E000F80FF807FF8>29 32 2 0 34]65 dc[<01FFFFFC001E00 38001E0018001E0008001E0008003C0008003C0008003C0008003C000800780010007808000078 08000078080000F0100000F0300000FFF00000F0300001E0200001E0200001E0200001E0200003 C0000003C0000003C0000003C00000078000000780000007800000078000000F800000FFF80000 >30 31 3 0 30]70 dc[<01FFF0001F00001E00001E00001E00003C00003C00003C00003C0000 780000780000780000780000F00000F00000F00000F00001E00001E00001E00001E00003C00003 C00003C00003C0000780000780000780000780000F8000FFF800>20 31 3 0 18]73 dc[<01FF F800001F0000001E0000001E0000001E0000003C0000003C0000003C0000003C00000078000000 780000007800000078000000F0000000F0000000F0000000F0000001E0000001E0000001E00000 01E0008003C0010003C0010003C0030003C00200078006000780060007800C0007801C000F0078 00FFFFF800>25 31 3 0 29]76 dc[<0007E040001C18C0003005800060038000C0038001C001 80018001000380010003800100038001000380000003C0000003C0000003F8000001FF800001FF E000007FF000001FF0000001F80000007800000078000000380000003800200038002000380020 00300060007000600060006000E0007000C000E8038000C606000081F80000>26 33 3 1 26] 83 dc[<0FFFFFF01E0780E0180780201007802020078020200F0020600F0020400F0020400F00 20801E0040001E0000001E0000001E0000003C0000003C0000003C0000003C0000007800000078 0000007800000078000000F0000000F0000000F0000000F0000001E0000001E0000001E0000001 E0000003E00000FFFF0000>28 31 8 0 33]84 dc[<7FFC1FF807C003C0078001000780010007 8001000F0002000F0002000F0002000F0002001E0004001E0004001E0004001E0004003C000800 3C0008003C0008003C00080078001000780010007800100078001000F0002000F0002000F00020 00F0004000F0004000700080007001000030020000380400000C18000007E00000>29 32 9 1 34]85 dc[<00F1800389C00707800E03801C03803C0380380700780700780700780700F00E00F0 0E00F00E00F00E20F01C40F01C40703C40705C40308C800F0700>19 20 4 0 23]97 dc[<0780 3F8007000700070007000E000E000E000E001C001C001CF01D0C3A0E3C0E380F380F700F700F70 0F700FE01EE01EE01EE01CE03CE038607060E031C01F00>16 32 5 0 21]98 dc[<007E0001C1 000300800E07801E07801C07003C0200780000780000780000F00000F00000F00000F00000F000 0070010070020030040018380007C000>17 20 4 0 21]99 dc[<0000780003F8000070000070 0000700000700000E00000E00000E00000E00001C00001C000F1C00389C00707800E03801C0380 3C0380380700780700780700780700F00E00F00E00F00E00F00E20F01C40F01C40703C40705C40 308C800F0700>21 32 4 0 23]100 dc[<007C01C207010E011C013C013802780C7BF07C00F000 F000F000F0007000700170023804183807C0>16 20 4 0 21]101 dc[<00007800019C00033C00 033C000718000700000700000E00000E00000E00000E00000E0001FFE0001C00001C00001C0000 1C0000380000380000380000380000380000700000700000700000700000700000700000E00000 E00000E00000E00000C00001C00001C0000180003180007B0000F300006600003C0000>22 41 -2 9 14]102 dc[<003C6000E27001C1E00380E00700E00F00E00E01C01E01C01E01C01E01C03C 03803C03803C03803C03803C07003C07001C0F001C17000C2E0003CE00000E00000E00001C0000 1C00301C00783800F0700060E0003F8000>20 29 2 9 21]103 dc[<01E0000FE00001C00001C0 0001C00001C000038000038000038000038000070000070000071E000763000E81800F01C00E01 C00E01C01C03801C03801C03801C0380380700380700380700380E10700E20700C20701C20700C 40E00CC0600700>20 32 3 0 23]104 dc[<00C001E001E001C000000000000000000000000000 000E003300230043804300470087000E000E000E001C001C001C00384038803080708031003300 1C00>11 31 4 0 14]105 dc[<03C01FC0038003800380038007000700070007000E000E000E00 0E001C001C001C001C0038003800380038007000700070007100E200E200E200E20064003800> 10 32 4 0 12]108 dc[<1C0F80F0002630C318004740640C004780680E004700700E00470070 0E008E00E01C000E00E01C000E00E01C000E00E01C001C01C038001C01C038001C01C038001C01 C0708038038071003803806100380380E100380380620070070066003003003800>33 20 4 0 37]109 dc[<1C0F802630C04740604780604700704700708E00E00E00E00E00E00E00E01C01C0 1C01C01C01C01C03843803883803083807083803107003303001C0>22 20 4 0 26]110 dc[<00 7C0001C3000301800E01C01E01C01C01E03C01E07801E07801E07801E0F003C0F003C0F003C0F0 0780F00700700F00700E0030180018700007C000>19 20 4 0 23]111 dc[<01C1E00262180474 1C04781C04701E04701E08E01E00E01E00E01E00E01E01C03C01C03C01C03C01C0380380780380 700380E003C1C0072380071E000700000700000E00000E00000E00000E00001C00001C0000FFC0 00>23 29 0 9 23]112 dc[<00F0400388C00705800E03801C03803C0380380700780700780700 780700F00E00F00E00F00E00F00E00F01C00F01C00703C00705C0030B8000F3800003800003800 00700000700000700000700000E00000E0000FFE00>18 29 4 9 21]113 dc[<1C1E0026610047 83804787804707804703008E00000E00000E00000E00001C00001C00001C00001C000038000038 0000380000380000700000300000>17 20 4 0 19]114 dc[<00FC030206010C030C070C060C00 0F800FF007F803FC003E000E700EF00CF00CE008401020601F80>16 20 3 0 19]115 dc[<0180 01C0038003800380038007000700FFF007000E000E000E000E001C001C001C001C003800380038 003820704070407080708031001E00>12 28 4 0 15]116 dc[<0E00C03300E02301C04381C043 01C04701C08703800E03800E03800E03801C07001C07001C07001C07101C0E20180E20180E201C 1E200C264007C380>20 20 4 0 24]117 dc[<0E03803307802307C04383C04301C04700C08700 800E00800E00800E00801C01001C01001C01001C02001C02001C04001C04001C08000E300003C0 00>18 20 4 0 21]118 dc[<0E00C1C03300E3C02301C3E04381C1E04301C0E04701C060870380 400E0380400E0380400E0380401C0700801C0700801C0700801C0701001C0701001C0602001C0F 02000C0F04000E13080003E1F000>27 20 4 0 30]119 dc[<0383800CC4401068E01071E02071 E02070C040E00000E00000E00000E00001C00001C00001C00001C040638080F38080F38100E581 0084C600787800>19 20 3 0 21]120 dc[<0E00C03300E02301C04381C04301C04701C0870380 0E03800E03800E03801C07001C07001C07001C07001C0E00180E00180E001C1E000C3C0007DC00 001C00001C00003800F03800F07000E06000C0C0004380003E0000>19 29 4 9 22]121 dc dfe /fr df[12 4 1 -8 17]45 dc[<387CFEFEFE7C38>7 7 4 0 15]46 dc[< 00E00001E0000FE000FFE000F3E00003E00003E00003E00003E00003E00003E00003E00003E000 03E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E000 03E000FFFF80FFFF80>17 29 4 0 26]49 dc[<07F0001FFE00383F007C1F80FE0FC0FE0FC0FE 0FE0FE07E07C07E03807E0000FE0000FC0000FC0001F80001F00003E0000780000F00000E00001 C0000380600700600E00601C00E01FFFC03FFFC07FFFC0FFFFC0FFFFC0>19 29 3 0 26]50 dc[ <01FC0007FF000E0F801E0FC03F07E03F07E03F07E03F07E01E0FC0000FC0000F80001F0001FC 0001FC00000F800007C00003E00003F00003F83803F87C03F8FE03F8FE03F8FE03F0FC03F07807 E03C0FC01FFF8003FC00>21 29 2 0 26]51 dc[<0001C00003C00007C00007C0000FC0001FC0 003BC00073C00063C000C3C00183C00383C00703C00E03C00C03C01803C03803C07003C0E003C0 FFFFFEFFFFFE0007C00007C00007C00007C00007C00007C000FFFE00FFFE>23 29 1 0 26]52 dc[<3803803FFF803FFF003FFE003FFC003FF0003F800030000030000030000030000033F80037 FE003C1F00380F801007C00007C00007E00007E07807E0FC07E0FC07E0FC07E0FC07C0780FC060 0F80381F001FFC0007F000>19 29 3 0 26]53 dc[<387CFEFEFE7C38000000000000387CFEFE FE7C38>7 20 4 0 15]58 dc[<0000E000000000E000000001F000000001F000000001F0000000 03F800000003F800000006FC00000006FC0000000EFE0000000C7E0000000C7E000000183F0000 00183F000000303F800000301F800000701FC00000600FC00000600FC00000C007E00000FFFFE0 0001FFFFF000018003F000018003F000030001F800030001F800060001FC00060000FC000E0000 FE00FFE00FFFE0FFE00FFFE0>35 31 2 0 40]65 dc[<0007FC02003FFF0E00FE03DE03F000FE 07E0003E0FC0001E1F80001E3F00000E3F00000E7F0000067E0000067E000006FE000000FE0000 00FE000000FE000000FE000000FE000000FE0000007E0000007E0000067F0000063F0000063F00 000C1F80000C0FC0001807E0003803F0007000FE01C0003FFF800007FC00>31 31 3 0 38]67 dc[34 31 2 0 40]68 dc[30 31 2 0 34]69 dc[26 31 2 0 31]76 dc[45 31 2 0 50]77 dc[30 31 2 0 36]80 dc[<001FF80000FFFF0001F8 1F8007E007E00FC003F01F8001F81F8001F83F0000FC7F0000FE7F0000FE7E00007EFE00007FFE 00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007F7E00007E7E00007E 7F0000FE3F0000FC3F87C1FC1F8FE1F80FD833F007F81FE001F81F8000FFFF00001FFE0300000E 0300000F0700000FFF000007FF000007FE000007FE000003FC000001F8000000F0>32 40 3 9 39]81 dc[36 31 2 0 39]82 dc[<7FFFFFFC7FFFFFFC7C07E07C7007E01C6007E00C6007E00C E007E00EC007E006C007E006C007E006C007E0060007E0000007E0000007E0000007E0000007E0 000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007 E0000007E0000007E00003FFFFC003FFFFC0>31 30 2 0 36]84 dc[35 31 2 0 40]85 dc[< 07FC001FFF003F0F803F07C03F03E03F03E00C03E00003E0007FE007FBE01F03E03C03E07C03E0 F803E0F803E0F803E0FC05E07E0DE03FF8FE0FE07E>23 20 1 0 25]97 dc[<01FE0007FF801F 0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000FC0000FC0000FC00007C00007E00003E 00603F00C01F81C007FF0001FC00>19 20 2 0 23]99 dc[<01FE0007FF800F83C01E01E03E00 F07C00F07C00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00003E00181E00180F80 7007FFE000FF80>21 20 1 0 24]101 dc[<001F8000FFC001F3E003E7E003C7E007C7E007C3C0 07C00007C00007C00007C00007C000FFFC00FFFC0007C00007C00007C00007C00007C00007C000 07C00007C00007C00007C00007C00007C00007C00007C00007C00007C0003FFC003FFC00>19 32 1 0 16]102 dc[<01FC3C07FFFE0F079E1E03DE3E03E03E03E03E03E03E03E03E03E01E03C00F 07800FFF0009FC001800001800001C00001FFF800FFFF007FFF81FFFFC3C007C70003EF0001EF0 001EF0001E78003C78003C3F01F80FFFE001FF00>23 30 1 10 26]103 dc[24 32 3 0 29]104 dc[<1C003E003F007F003F003E001C00000000 000000000000000000FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F00 1F001F001F00FFE0FFE0>11 33 2 0 14]105 dc[<0038007C00FE00FE00FE007C003800000000 000000000000000001FE01FE003E003E003E003E003E003E003E003E003E003E003E003E003E00 3E003E003E003E003E003E003E303E783EFC3CFC7C78783FF01FC0>15 42 -3 9 16]106 dc[< FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F 001F001F001F001F001F001F001F001F001F001F00FFE0FFE0>11 32 2 0 14]108 dc[39 20 3 0 44]109 dc[24 20 3 0 29]110 dc[<01FF0007FFC01F83F03E00F83E00F87C 007C7C007CFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F83E00F81F83F007 FFC001FF00>23 20 1 0 26]111 dc[24 29 2 9 29]112 dc[18 20 2 0 22]114 dc[<01800180018003800380 038007800F803F80FFFCFFFC0F800F800F800F800F800F800F800F800F800F800F860F860F860F 860F8607CC03F801F0>15 29 1 0 20]116 dc[24 20 3 0 29]117 dc dfe /fs df[10 2 0 -7 13]45 dc[<60F0F060>4 4 3 0 11]46 dc[<0004000C00180018001800300030003000600060006000C000C000C001800180 01800300030003000600060006000C000C000C00180018001800300030003000600060006000C0 00C000>14 37 2 9 19]47 dc[<01E006100C1818383038300070006000E000E7C0E860F030F0 18E018E01CE01CE01C601C601C701830183030186007C0>14 24 2 0 19]54 dc[<60F0F06000 0000000000000060F0F07010101020204080>4 23 3 7 11]59 dc[19 26 2 0 24]76 dc[< FFFF000E03C00E00E00E00700E00700E00780E00780E00780E00780E00700E00700E00E00E03C0 0FFF000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000FFE000 >21 26 2 0 26]80 dc[25 26 2 0 28]82 dc[<0FC21836200E6006C006C002C002C002E00070007E003FE01FF807FC003E 000E00070003800380038003C002C006E004D81887E0>16 26 2 0 21]83 dc[<7FFFFF00701C 0700401C0100401C0100C01C0180801C0080801C0080801C0080001C0000001C0000001C000000 1C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000 001C0000001C0000001C0000001C000003FFE000>25 26 1 0 28]84 dc[24 26 2 0 29] 85 dc[7 37 3 9 11]91 dc[7 37 0 9 11]93 dc[<3F8070C070E020700070007007F01C70307070 70E070E071E071E0F171FB1E3C>16 16 2 0 19]97 dc[18 26 1 0 21]98 dc[<07F80C1C 381C30087000E000E000E000E000E000E0007000300438080C1807E0>14 16 1 0 17]99 dc[< 007E00000E00000E00000E00000E00000E00000E00000E00000E00000E0003CE000C3E00380E00 300E00700E00E00E00E00E00E00E00E00E00E00E00E00E00600E00700E00381E001C2E0007CFC0 >18 26 1 0 21]100 dc[<07C01C3030187018600CE00CFFFCE000E000E000E000600030043808 0C1807E0>14 16 1 0 17]101 dc[<01F0031807380E100E000E000E000E000E000E00FFC00E00 0E000E000E000E000E000E000E000E000E000E000E000E000E007FE0>13 26 0 0 12]102 dc[< 0FCE187330307038703870387038303018602FC02000600070003FF03FFC1FFE600FC003C003C0 03C0036006381C07E0>16 24 1 8 19]103 dc[18 26 1 0 21]104 dc[<18003C003C001800 000000000000000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C 001C00FF80>9 26 0 0 10]105 dc[9 26 0 0 10]108 dc[ 29 16 1 0 32]109 dc[18 16 1 0 21]110 dc[<07E01C38300C700E6006E007E007E007E007E007E0 076006700E381C1C3807E0>16 16 1 0 19]111 dc[18 23 1 7 21]112 dc[12 16 1 0 15]114 dc[<1F2060E04020C020C020F0 007F003FC01FE000F080708030C030C020F0408F80>12 16 1 0 15]115 dc[<0400040004000C 000C001C003C00FFC01C001C001C001C001C001C001C001C001C201C201C201C201C200E400380 >11 23 1 0 15]116 dc[18 16 1 0 21]117 dc[17 16 1 0 20]118 dc[18 16 1 0 20]120 dc[17 23 1 7 20]121 dc dfe /ft df[ <00008000000001C000000001C000000003E000000003E000000005F000000004F000000008F8 0000000878000000107C000000103C000000203E000000201E000000401F000000400F00000080 0F80000080078000010007C000010003C000020003E000020001E000040001F000040000F00008 0000F80008000078001000007C001000003C002000003E002000001E007FFFFFFF007FFFFFFF00 FFFFFFFF80>33 32 2 0 38]1 dc[<07FFF800003F0000001E0000001E0000001E0000001E0000 007F800003DEF0000F1E3C001E1E1E003C1E0F007C1E0F80781E0780F81E07C0F81E07C0F81E07 C0F81E07C0F81E07C0781E07807C1E0F803C1E0F001E1E1E000F1E3C0003DEF000007F8000001E 0000001E0000001E0000001E0000003F000007FFF800>26 31 3 0 33]8 dc[<001F83E000F06E 3001C078780380F8780300F0300700700007007000070070000700700007007000070070000700 7000FFFFFF80070070000700700007007000070070000700700007007000070070000700700007 007000070070000700700007007000070070000700700007007000070070000700700007007000 7FE3FF00>29 32 0 0 27]11 dc[<003F0000E0C001C0C00381E00701E00701E0070000070000 070000070000070000070000FFFFE00700E00700E00700E00700E00700E00700E00700E00700E0 0700E00700E00700E00700E00700E00700E00700E00700E00700E00700E07FC3FE>23 32 0 0 25]12 dc[<003FE000E0E001C1E00381E00700E00700E00700E00700E00700E00700E00700E007 00E0FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E007 00E00700E00700E00700E00700E00700E00700E07FE7FE>23 32 0 0 25]13 dc[<001F81F800 00F04F040001C07C06000380F80F000300F00F000700F00F000700700000070070000007007000 00070070000007007000000700700000FFFFFFFF00070070070007007007000700700700070070 070007007007000700700700070070070007007007000700700700070070070007007007000700 7007000700700700070070070007007007000700700700070070070007007007007FE3FE3FF0> 36 32 0 0 38]14 dc[<7038F87CFC7EFC7E743A040204020402080408041008100820104020> 15 14 2 -18 23]34 dc[<70F8FCFC74040404080810102040>6 14 4 -18 13]39 dc[<002000 4000800100020006000C000C00180018003000300030007000600060006000E000E000E000E000 E000E000E000E000E000E000E000E0006000600060007000300030003000180018000C000C0006 0002000100008000400020>11 46 3 12 18]40 dc[<800040002000100008000C000600060003 00030001800180018001C000C000C000C000E000E000E000E000E000E000E000E000E000E000E0 00E000C000C000C001C001800180018003000300060006000C0008001000200040008000>11 46 3 12 18]41 dc[<00060000000600000006000000060000000600000006000000060000000600 0000060000000600000006000000060000000600000006000000060000FFFFFFF0FFFFFFF00006 000000060000000600000006000000060000000600000006000000060000000600000006000000 06000000060000000600000006000000060000>28 32 3 5 35]43 dc[<70F8FCFC7404040408 0810102040>6 14 4 9 13]44 dc[10 2 1 -9 15]45 dc[<70F8F8F870>5 5 4 0 13]46 dc[<000100030003000600060006000C000C000C00180018001800300030003000600060 006000C000C000C00180018001800300030003000600060006000C000C000C0018001800180030 0030003000600060006000C000C000C000>16 45 3 11 23]47 dc[<03F0000E1C001C0E001806 00380700700380700380700380700380F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003 C0F003C0F003C0F003C0F003C0F003C07003807003807003807807803807001806001C0E000E1C 0003F000>18 31 2 1 23]48 dc[<018003800F80F38003800380038003800380038003800380 038003800380038003800380038003800380038003800380038003800380038007C0FFFE>15 30 4 0 23]49 dc[<03F0000C1C00100E00200700400780800780F007C0F803C0F803C0F803C02007 C00007C0000780000780000F00000E00001C0000380000700000600000C0000180000300000600 400C00401800401000803FFF807FFF80FFFF80>18 30 2 0 23]50 dc[<03F0000C1C00100E00 200F00780F80780780780780380F80000F80000F00000F00000E00001C0000380003F000003C00 000E00000F000007800007800007C02007C0F807C0F807C0F807C0F00780400780400F00200E00 1C3C0003F000>18 31 2 1 23]51 dc[<000600000600000E00000E00001E00002E00002E0000 4E00008E00008E00010E00020E00020E00040E00080E00080E00100E00200E00200E00400E00C0 0E00FFFFF0000E00000E00000E00000E00000E00000E00000E0000FFE0>20 30 1 0 23]52 dc[ <1803001FFE001FFC001FF8001FE00010000010000010000010000010000010000011F000161C 00180E001007001007800003800003800003C00003C00003C07003C0F003C0F003C0E003804003 80400700200600100E000C380003E000>18 31 2 1 23]53 dc[<007C000182000701000E0380 0C07801C0780380300380000780000700000700000F1F000F21C00F40600F80700F80380F80380 F003C0F003C0F003C0F003C0F003C07003C07003C07003803803803807001807000C0E00061C00 01F000>18 31 2 1 23]54 dc[<4000007FFFC07FFF807FFF8040010080020080020080040000 080000080000100000200000200000400000400000C00000C00001C00001800003800003800003 8000038000078000078000078000078000078000078000078000030000>18 31 3 1 23]55 dc[ <03F0000C0C001006003003002001806001806001806001807001807803003E03003F06001FC8 000FF00003F80007FC000C7E00103F00300F806003804001C0C001C0C000C0C000C0C000C0C000 806001802001001002000C0C0003F000>18 31 2 1 23]56 dc[<03F0000E18001C0C00380600 380700700700700380F00380F00380F003C0F003C0F003C0F003C0F003C07007C07007C03807C0 180BC00E13C003E3C0000380000380000380000700300700780600780E00700C00201800107000 0FC000>18 31 2 1 23]57 dc[<70F8F8F8700000000000000000000070F8F8F870>5 20 4 0 13]58 dc[<70F8F8F8700000000000000000000070F0F8F878080808101010202040>5 29 4 9 13]59 dc[<7FFFFFE0FFFFFFF00000000000000000000000000000000000000000000000000000 000000000000FFFFFFF07FFFFFE0>28 12 3 -5 35]61 dc[<0FC0307040384038E03CF03CF03C 603C0038007000E000C00180018001000300020002000200020002000200000000000000000000 0007000F800F800F800700>14 32 3 0 21]63 dc[<0001000000038000000380000003800000 07C0000007C0000007C0000009E0000009E0000009E0000010F0000010F0000010F00000207800 002078000020780000403C0000403C0000403C0000801E0000801E0000FFFE0001000F0001000F 0001000F00020007800200078002000780040003C00E0003C01F0007E0FFC03FFE>31 32 1 0 34]65 dc[26 31 2 0 32]66 dc[<000FC040007030C001C009C0038005C0 070003C00E0001C01E0000C01C0000C03C0000C07C0000407C00004078000040F8000000F80000 00F8000000F8000000F8000000F8000000F8000000F8000000F8000000780000007C0000407C00 00403C0000401C0000401E0000800E000080070001000380020001C0040000703800000FC000> 26 33 3 1 33]67 dc[29 31 2 0 35]68 dc[27 31 2 0 31]69 dc[25 31 2 0 30]70 dc[<000FE0200078186000E004E0038002 E0070001E00F0000E01E0000601E0000603C0000603C0000207C00002078000020F8000000F800 0000F8000000F8000000F8000000F8000000F8000000F8007FFCF80003E0780001E07C0001E03C 0001E03C0001E01E0001E01E0001E00F0001E0070001E0038002E000E0046000781820000FE000 >30 33 3 1 36]71 dc[29 31 2 0 34]72 dc[14 31 1 0 16]73 dc[30 31 2 0 35] 75 dc[23 31 2 0 28]76 dc[37 31 2 0 42]77 dc[ 29 31 2 0 34]78 dc[<001F800000F0F00001C0380007801E000F000F00 0E0007001E0007803C0003C03C0003C07C0003E0780001E0780001E0F80001F0F80001F0F80001 F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0780001E07C0003E07C0003E03C00 03C03C0003C01E0007800E0007000F000F0007801E0001C0380000F0F000001F8000>28 33 3 1 35]79 dc[25 31 2 0 31]80 dc[30 32 2 1 33]82 dc[<07E0800C1980100780300380600180600180E00180E00080E00080E00080F00000F0 00007800007F00003FF0001FFC000FFE0003FF00001F800007800003C00003C00001C08001C080 01C08001C08001C0C00180C00380E00300F00600CE0C0081F800>18 33 3 1 25]83 dc[<7FFF FFE0780F01E0600F0060400F0020400F0020C00F0030800F0010800F0010800F0010800F001000 0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000 000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000001F80 0007FFFE00>28 31 2 0 33]84 dc[29 32 2 1 34]85 dc[31 32 1 1 34]86 dc[44 32 1 1 47]87 dc[32 31 1 0 34]89 dc[7 45 4 11 13]91 dc[<080410082010201040204020804080 408040B85CFC7EFC7E7C3E381C>15 14 5 -18 23]92 dc[7 45 1 11 13] 93 dc[<081020204040808080B8FCFC7C38>6 14 3 -18 13]96 dc[<1FE00030300078180078 1C00300E00000E00000E00000E0000FE00078E001E0E00380E00780E00F00E10F00E10F00E10F0 1E10781E103867200F83C0>20 20 2 0 23]97 dc[<0E0000FE00000E00000E00000E00000E00 000E00000E00000E00000E00000E00000E00000E3E000EC3800F01C00F00E00E00E00E00700E00 700E00780E00780E00780E00780E00780E00780E00700E00700E00E00F00E00D01C00CC300083E 00>21 32 1 0 25]98 dc[<03F80E0C1C1E381E380C70007000F000F000F000F000F000F00070 007000380138011C020E0C03F0>16 20 2 0 20]99 dc[<000380003F80000380000380000380 00038000038000038000038000038000038000038003E380061B801C0780380380380380700380 700380F00380F00380F00380F00380F00380F003807003807003803803803807801C07800E1B80 03E3F8>21 32 2 0 25]100 dc[<03F0000E1C001C0E00380700380700700700700380F00380F0 0380FFFF80F00000F00000F000007000007000003800801800800C010007060001F800>17 20 1 0 20]101 dc[<007C00C6018F038F07060700070007000700070007000700FFF0070007000700 0700070007000700070007000700070007000700070007000700070007007FF0>16 32 0 0 14] 102 dc[<0000E003E3300E3C301C1C30380E00780F00780F00780F00780F00780F00380E001C1C 001E380033E0002000002000003000003000003FFE001FFF800FFFC03001E0600070C00030C000 30C00030C000306000603000C01C038003FC00>20 31 1 10 23]103 dc[<0E0000FE00000E00 000E00000E00000E00000E00000E00000E00000E00000E00000E00000E3E000E43000E81800F01 C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 C00E01C00E01C0FFE7FC>22 32 1 0 25]104 dc[<1C001E003E001E001C000000000000000000 000000000E007E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E 000E00FFC0>10 31 0 0 12]105 dc[<00E001F001F001F000E000000000000000000000000000 7007F000F000700070007000700070007000700070007000700070007000700070007000700070 00700070007000706070F060F0C061803F00>12 40 -2 9 14]106 dc[<0E0000FE00000E0000 0E00000E00000E00000E00000E00000E00000E00000E00000E00000E0FF00E03C00E03000E0200 0E04000E08000E10000E30000E70000EF8000F38000E1C000E1E000E0E000E07000E07800E0380 0E03C00E03E0FFCFF8>21 32 1 0 24]107 dc[<0E00FE000E000E000E000E000E000E000E000E 000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 0E000E00FFE0>11 32 0 0 12]108 dc[<0E1F01F000FE618618000E81C81C000F00F00E000F00 F00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E 00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E00FFE7FE7FE0 >35 20 1 0 38]109 dc[<0E3E00FE43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E 01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC>22 20 1 0 25] 110 dc[<01F800070E001C03803801C03801C07000E07000E0F000F0F000F0F000F0F000F0F000 F0F000F07000E07000E03801C03801C01C0380070E0001F800>20 20 1 0 23]111 dc[<0E3E00 FEC3800F01C00F00E00E00E00E00F00E00700E00780E00780E00780E00780E00780E00780E0070 0E00F00E00E00F01E00F01C00EC3000E3E000E00000E00000E00000E00000E00000E00000E0000 0E0000FFE000>21 29 1 9 25]112 dc[<03E0800619801C05803C0780380380780380700380F0 0380F00380F00380F00380F00380F003807003807803803803803807801C0B800E138003E38000 0380000380000380000380000380000380000380000380003FF8>21 29 2 9 24]113 dc[<0E78 FE8C0F1E0F1E0F0C0E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE0> 15 20 1 0 18]114 dc[<1F9030704030C010C010C010E00078007F803FE00FF0007080388018 8018C018C018E030D0608F80>13 20 2 0 18]115 dc[<020002000200060006000E000E003E00 FFF80E000E000E000E000E000E000E000E000E000E000E000E080E080E080E080E080610031001 E0>13 28 1 0 18]116 dc[<0E01C0FE1FC00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E03C00603C0030DC001F1FC>22 20 1 0 25]117 dc[21 20 1 0 24]118 dc[30 20 1 0 33]119 dc[<7FC3FC0F01E00701C007018003810001C20000E40000EC00007800 003800003C00007C00004E000087000107000303800201C00601E01E01E0FF07FE>23 20 0 0 24]120 dc[21 29 1 9 24]121 dc[<3FFF380E200E201C4038407840 7000E001E001C00380078007010E011E011C0338027006700EFFFE>16 20 1 0 20]122 dc[22 1 0 -12 23]123 dc dfe /fu df[<000FE01000381C3000E0027003C00170078000F0 0F0000701E0000701E0000303C0000303C0000107C00001078000010F8000000F8000000F80000 00F8000000F8000000F8000000F8000000F8000000F8000000780000007C0000103C0000103C00 00101E0000201E0000200F0000200780004003C0008000E0030000380C00000FF000>28 33 4 1 36]67 dc dfe end TeXDict begin @letter %%Page: 54 65 bop 0 506 a fl(Chapter)34 b(7)0 714 y fo(Comp)s(etitiv)m(e)43 b(NUMA)c(Memor\ y)0 839 y(Managemen)m(t)h(Algorithms)0 1079 y fk(7.1)70 b(Ov)n(erview)0 1181 y ft(This)22 b(c)o(hapter)g(in)o(v)o(estigates)g(memory)f(managemen)n(t)h(for)f (shared)h(memory)f(m)n(ultipro)s(cessors)g(that)g(ph)o(ysi-)0 1237 y(cally)e (distribute)g(their)g(memory)e(among)g(a)h(n)o(um)n(b)r(er)g(of)f(memories)h (lo)r(cal)g(to)g(eac)o(h)g(pro)q(cessor)f(or)h(cluster)g(of)0 1294 y(pro)q (cessors.)25 b(These)18 b(are)e(non-uniform)i(memory)f(access,)g(or)g(NUMA,)f (m)o(ultipro)r(cessor)h(arc)n(hitectures.)27 b(The)0 1350 y(particular)17 b (issue)h(of)e(concern)h(is)g(deciding)i(which)e(lo)q(cal)g(memories)g(should) h(con)o(tain)f(whic)o(h)g(data)f(pages.)24 b(In)0 1407 y(the)17 b(migration)g (problem,)g(w)o(e)g(op)q(erate)f(under)i(the)e(constrain)o(t)h(that)f(a)g(pag\ e)h(m)n(ust)g(b)r(e)f(k)o(ept)h(in)h(exactly)f(one)0 1463 y(lo)r(cal)h(memory) l(.)27 b(In)19 b(the)f(replication)h(problem,)g(w)o(e)f(allo)o(w)g(a)f(page)h (to)f(b)r(e)h(k)n(ept)g(in)h(an)o(y)e(subset)h(of)g(the)g(lo)q(cal)0 1519 y (memories,)f(but)g(do)g(not)f(allow)g(a)h(lo)q(cal)h(memory)e(to)g(drop)h(a)f (page)h(once)g(it)g(has)g(it.)25 b(Theoretical)17 b(asp)q(ects)g(of)0 1576 y (these)i(problems)h(are)f(co)o(v)n(ered)h(here;)h(implemen)q(tation-related)e (issues)h(are)f(co)o(v)n(ered)h(in)g(the)f(next)g(c)o(hapter,)0 1632 y(and)c (p)r(erformance)g(measuremen)o(ts)g(are)f(rep)r(orted)h(in)h(a)f(separate)f (pap)r(er)h([7)o(].)71 1689 y(F)-5 b(or)12 b(interconnection)h(top)q(ologies) g(that)f(are)g(complete)h(graphs)f(or)g(trees,)h(e\016cient)f fq(on-line)j ft (algorithms)d(for)0 1745 y(these)17 b(problems)g(are)g(presen)o(ted.)25 b(The) 17 b(migration)f(algorithms)h(also)g(extend)g(to)f(interconnections)h(that)f (are)0 1802 y(pro)q(ducts)f(of)g(these)g(top)q(ologies)h(\(e.g.,)d(a)i(h)o (yp)q(ercub)r(e)h(is)f(a)g(pro)q(duct)g(of)g(simple)h(trees\).)k(An)15 b(on-l\ ine)i(algorithm)0 1858 y(decides)g(ho)o(w)f(to)f(pro)q(cess)h(eac)o(h)g(reque\ st)g(\(whic)o(h)g(is)h(a)e(read)h(or)f(write)h(request)g(from)f(a)h(pro)q(ces\ sor)g(to)f(a)g(page\))0 1915 y(without)20 b(kno)o(wing)g(future)g(requests.) 34 b(Our)20 b(algorithms)g(are)g(also)g(said)g(to)g(b)q(e)g fq(c)n(omp)n(etit\ ive)j ft(b)r(ecause)d(their)0 1971 y(p)r(erformance)14 b(is)h(within)i(a)d (small)i(constan)n(t)f(factor)f(of)g(that)g(of)h(an)n(y)g(other)g(algorithm,) f(including)k(algorithms)0 2028 y(that)c(mak)o(e)h(use)h(of)e(kno)o(wledge)i (of)f(future)g(requests.)71 2084 y(All)i(of)f(the)h(w)n(ork)f(presented)g(in) h(this)g(c)o(hapter)f(is)h(join)o(t)f(w)o(ork)g(with)h(Daniel)g(Sleator;)g (\014rst)f(p)q(erson)h(plural)0 2140 y(pronouns)e(\(w)o(e,)g(our\))f(are)h (used)h(to)e(re\015ect)i(and)f(ac)o(kno)o(wledge)h(this.)0 2284 y fk(7.2)70 b (In)n(tro)r(duction)0 2385 y ft(A)19 b(common)h(design)g(for)f(a)g(large,)h (shared)g(memory)f(m)n(ultipro)r(cessor)h(system)f(is)h(a)f(net)o(w)n(ork)g (of)g(pro)q(cessors)0 2442 y(for)f(whic)o(h)h(eac)o(h)f(pro)q(cessor)g(or)g (cluster)h(of)f(pro)q(cessors)g(has)g(its)g(o)o(wn)g(lo)r(cal)g(memory)g([14) o(,)g(40,)f(56].)29 b(In)18 b(such)0 2498 y(a)i(design,)i(a)e(virtual)g(memor\ y)g(system)g(supp)r(orts)f(a)h(programming)f(abstraction)h(of)f(memory)h(as)g (a)g(single)0 2555 y(address)e(space)g(without)f(restrictions)h(on)g(ho)o(w)f (the)h(pages)f(of)g(this)h(address)g(space)g(are)f(distributed)j(among)0 2611 y(the)d(lo)r(cal)g(memories.)26 b(A)17 b(page)g(of)g(this)h(abstract)e(memory) g(ma)o(y)h(b)q(e)h(stored)e(in)i(just)f(one)g(lo)r(cal)g(memory)l(,)g(or)0 2667 y(identical)e(copies)g(of)f(it)h(ma)n(y)f(b)r(e)g(replicated)i(in)f(man) o(y)f(lo)r(cal)h(memories.)k(When)c(a)f(pro)q(cessor)g fn(p)g ft(needs)h(to)f (read)0 2724 y(a)19 b(lo)q(cation)g fn(l)h ft(in)g(a)e(page)h fn(b)p ft(,)g (it)h(\014rst)e(lo)r(oks)g(to)h(see)g(if)g fn(b)g ft(is)g(in)h(its)f(o)o(wn)g (lo)r(cal)g(memory)l(.)31 b(If)19 b(it)h(is,)g(the)f(access)0 2780 y(is)f(acc\ omplished)g(lo)r(cally)m(.)26 b(If)17 b(it)g(is)h(not,)f(a)f(request)i(is)f (transmitted)g(o)n(v)o(er)g(the)g(net)o(w)o(ork)f(to)g(a)h(lo)r(cal)g(memory) 951 2927 y(54)p eop %%Page: 55 66 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(55)0 195 y(con)o(taining)16 b(the)f(desired)i (page,)d(and)i(the)f(con)o(ten)o(ts)g(of)f fn(l)i ft(are)f(transmitted)g(bac) o(k)g(to)f fn(p)p ft(.)71 252 y(T)l(o)j(clarify)h(the)f(trade-o\013s)f(inv)o (olv)o(ed,)i(it)f(is)h(helpful)h(to)e(consider)h(t)n(w)o(o)f(extreme)g(cases.) 26 b(Supp)r(ose)18 b(that)e(a)0 308 y(page)h fn(b)g ft(is)g(read)g(v)o(ery)g (often)g(b)o(y)g(all)h(of)e(the)i(pro)q(cessors,)f(but)g(is)g(never)g(written\ .)25 b(In)18 b(this)g(case,)f(the)g(net)o(w)n(ork)0 364 y(use)f(is)g(minimize\ d)i(b)o(y)e(replicating)h fn(b)e ft(in)h(all)h(of)e(the)g(cac)o(hes.)22 b(Onc\ e)16 b(this)g(initial)i(cost)d(is)h(incurred,)g(no)g(further)0 421 y(net)o (w)n(ork)j(comm)n(unication)h(is)f(needed.)32 b(On)19 b(the)g(other)f(hand,)i (if)f(a)g(page)f fn(b)g ft(is)h(rep)r(eatedly)g(written)g(b)o(y)g(one)0 477 y (pro)q(cessor)i fn(p)p ft(,)i(then)f(it)g(b)r(eho)q(o)o(v)n(es)g(the)g(system) f(to)g(ev)o(en)o(tually)i(migrate)e fn(b)g ft(to)g fn(p)p ft('s)g(cac)o(he,)i (after)e(which)h(no)0 534 y(net)o(w)n(ork)17 b(comm)n(unication)h(is)g(needed\ .)26 b(Since)18 b(comm)o(unication)g(bandwidth)g(is)f(frequently)g(a)f(b)r (ottlenec)o(k)h(in)0 590 y(suc)o(h)g(arc)o(hitectures,)h(w)n(e)f(ha)o(v)o(e)g (fo)q(cused)g(our)g(atten)n(tion)g(on)g(\014nding)i(residency)f(strategies)e (that)g(attempt)g(to)0 647 y(reduce)g(the)f(total)g(interconnection)h(bandwid\ th)g(used)g(in)g(pro)q(cessing)g(a)f(sequence)h(of)f(requests.)71 703 y(Most) d(m)n(ultipro)s(cessors)g(do)i(not)e(ha)o(v)o(e)h(broadcast,)g(in)o(v)n(alida\ te,)h(or)e(sno)q(oping)i(mec)o(hanisms)g(that)e(maintain)0 760 y(consistency) 23 b(among)e(m)o(ultiple)j(copies)f(of)f(a)f(page)h(when)h(writes)f(o)q(ccur) g(\(note)g(that)f(w)n(e)i(are)e(considering)0 816 y(m)o(ultiple)i(memory)e (copies,)i(as)e(distinct)i(from)d(m)o(ultiple)k(cac)o(he)d(copies)h(which)g (can)f(b)r(e)g(k)o(ept)g(consistent\).)0 873 y(As)e(a)f(result,)h(w)o(e)f(m)o (ust)g(restrict)h(writable)g(pages)f(to)g(a)g(single)i(cop)o(y)l(,)f(so)f(the) h(residency)h(problem)f(b)r(ecomes)0 929 y(one)d(of)g(deciding)i(whic)o(h)e (lo)r(cal)g(memory)g(should)h(con)n(tain)g(this)f(cop)o(y;)g(w)n(e)g(call)h (this)g(the)f fq(migr)n(ation)f ft(problem.)0 985 y(The)23 b(corresp)q(onding) g(problem)g(for)f(a)g(read-only)h(page)g(is)g(to)f(determine)h(which)f(of)g (the)h(lo)r(cal)g(memories)0 1042 y(should)c(con)o(tain)g(copies)g(of)f(the)g (page.)29 b(W)l(e)19 b(call)g(this)g(the)f fq(r)n(eplic)m(ation)h ft(problem) g(b)q(ecause)g(this)g(set)f(of)g(lo)q(cal)0 1098 y(memories)d(that)g(con)o (tains)g(copies)i(of)d(the)i(page)f(is)h(monotonically)g(non-decreasing.)21 b (W)l(e)16 b(separate)f(the)g(issue)0 1155 y(of)e(reclaiming)i(memory)d(used)i (in)g(this)g(fashion)g(b)q(ecause)g(there)f(are)g(other)g(comp)q(eting)h(uses) f(for)g(this)h(memory;)0 1211 y(this)k(is)g(co)n(v)o(ered)g(in)g(more)f(detai\ l)h(in)g(Chapter)f(8.)26 b(If)18 b(a)f(page)g(is)h(b)q(oth)f(read-only)h(and) g(writable)g(at)f(di\013eren)o(t)0 1268 y(times,)e(w)n(e)g(consider)h(eac)o (h)f(segmen)o(t)f(\(read-only)h(or)g(read/write\))f(of)g(the)h(page's)f(exist\ ence)i(to)e(b)r(e)h(a)f(separate)0 1324 y(instance)i(of)f(the)g(corresp)q(ond\ ing)h(problem.)71 1381 y(Karlin)h(et)e(al.[28)o(])h(considered)h(a)e(related) h(problem)h(of)e(cac)o(he)h(residency)h(on)f(bus-based)g(m)o(ultipro)r(cessor\ s)0 1437 y(with)e(coherent)f(cac)o(hes.)20 b(These)14 b(problems)h(are)f(gene\ ralizations)h(of)e(the)h(ones)g(w)o(e)g(consider)h(b)r(ecause)f(m)o(ultiple)0 1494 y(copies)d(of)f(writable)h(data)f(are)f(allow)n(ed)i(to)f(exist)g(\(and) h(are)e(k)o(ept)i(consisten)o(t\),)f(but)h(the)f(authors)g(only)g(considered) 0 1550 y(bus-based)15 b(in)o(terconnections.)21 b(This)14 b(corresp)q(onds)g (to)f(a)h(net)o(w)n(ork)g(in)g(which)g(the)g(distance)h(b)q(et)o(w)n(een)g (an)o(y)e(pair)0 1606 y(of)j(no)q(des)g(is)h(the)f(same,)g(that)g(is,)g(a)g (complete)h(graph)f(with)g(uniform)h(distances.)23 b(They)17 b(called)h(this) e(problem)0 1663 y fq(gener)m(al)h(sno)m(opy)h(c)n(aching)t ft(,)e(and)g(obta\ ined)i(an)e(algorithm)g(for)g(this)h(problem)g(whose)f(p)r(erformance)g(is)h (within)0 1719 y(a)e(factor)f(of)h(three)g(of)g(that)f(of)h(an)o(y)g(algorith\ m)g(for)g(an)n(y)h(sequence)g(of)f(requests.)71 1776 y(An)j(algorithm)g(is)h (said)g(to)e(b)r(e)h fq(on-line)f ft(if)i(mak)n(es)g(a)f(decision)i(ab)q(out) e(ho)n(w)g(to)g(pro)q(cess)g(a)g(request)h(based)0 1832 y(only)f(on)f(that)g (request)g(and)g(the)h(ones)f(b)r(efore)g(it.)26 b(Karlin)19 b(et)e(al.)g(des\ crib)s(e)g(a)g(general)h(framew)n(ork)f(in)h(which)0 1889 y(to)f(analyze)h (on-line)i(algorithms.)27 b(They)18 b(called)i(an)d(on-line)j(algorithm)e fn (A)f(c)p fq(-c)n(omp)n(etitive)k ft(if)d(there)g(exists)g(a)0 1945 y(constan) o(t)e fn(a)i ft(suc)o(h)f(that)g(for)f(ev)o(ery)h(sequence)i(of)d(requests)i fn(\033)q ft(,)f(and)h(ev)o(ery)f(algorithm)g fn(B)j ft(\(on-line)f(or)d(o\ \013)s(\))h(w)o(e)0 2002 y(ha)o(v)n(e:)746 2058 y fn(C)779 2065 y fe(A)807 2058 y ft(\()p fn(\033)q ft(\))12 b fg(\024)h fn(c)d fg(\001)g fn(C)1016 2065 y fe(B)1046 2058 y ft(\()p fn(\033)q ft(\))g(+)g fn(a;)0 2142 y ft(where)15 b fn(C)164 2149 y fe(A)192 2142 y ft(\()p fn(\033)r ft(\))g(is)g(the)h(cost)e (incurred)j(b)o(y)e(algorithm)g fn(A)g ft(on)g fn(\033)r ft(,)g(and)g fn(C) 1227 2149 y fe(B)1257 2142 y ft(\()p fn(\033)q ft(\))g(is)h(de\014ned)g(analo\ gously)m(.)71 2198 y(The)h(migration)g(problem)h(can)f(no)o(w)g(b)q(e)h(state\ d)e(simply)n(,)h(without)g(reference)h(to)e(the)h(motiv)n(ating)g(m)o(ulti-)0 2254 y(pro)q(cessor.)i(W)l(e)13 b(are)g(giv)o(en)h(a)f(net)o(w)n(ork)g(\(a)f (graph)h(in)h(which)g(eac)n(h)g(edge)f(has)g(a)g(length\).)20 b(A)o(t)13 b (an)n(y)g(time,)h(there)f(is)0 2311 y(exactly)f(one)g(no)r(de)g(of)f(the)h (net)o(w)o(ork)f(that)g(has)h(the)g(page.)19 b(A)12 b(sequence)h(of)e(accesse\ s)h(to)g(the)f(page)h(are)g(generated)0 2367 y(at)i(the)h(no)r(des)g(of)f(the) h(net)o(w)o(ork.)k(The)c(cost)g(of)f(an)h(access)g(is)g(the)g(distance)h(b)r (et)n(w)o(een)f(the)g(accessing)h(no)q(de)g(and)0 2424 y(the)h(no)r(de)g(with) h(the)f(page.)26 b(In)18 b(addition)g(to)f(pa)o(ying)g(for)g(a)g(request,)g (an)h(algorithm)f(is)h(also)f(allo)o(w)o(ed)h(at)e(an)o(y)0 2480 y(time)d(to) f(mo)n(v)o(e)h(the)g(page)f(from)g(where)h(it)g(is)h(to)e(another)g(no)q(de.) 20 b(The)13 b(cost)f(of)g(a)g(mo)o(v)o(e)g(is)i fn(m)e ft(times)h(the)g(dista\ nce)0 2537 y(b)r(et)n(w)o(een)j(the)f(starting)g(and)h(destination)g(no)q(des\ ,)g(where)f fn(m)h ft(is)f(a)h(constan)n(t)f(\(whic)o(h)h(roughly)g(corresp)q (onds)f(to)0 2593 y(the)g(size)h(of)f(the)g(page\).)71 2650 y(In)j(this)h(w)o (ork,)f(w)n(e)h(consider)g(on-line)h(algorithms)e(for)f(this)i(problem)g(with) f(lo)r(ok-ahead)g(zero.)29 b(Suc)o(h)19 b(an)0 2706 y(algorithm)h(m)n(ust)g (satisfy)f(a)g(new)h(request)g(in)g(the)g(curren)o(t)f(state,)h(and)f(after)g (satisfying)h(the)g(request)f(it)h(is)0 2763 y(allo)o(w)o(ed)14 b(to)f(c)o (hange)g(its)h(state)f(b)o(y)g(mo)o(ving)h(the)g(page.)19 b(\(This)14 b(is)g (in)g(con)o(trast)e(to)h(a)g(lo)r(ok-ahead)h(one)f(algorithm,)0 2819 y(which) k(w)n(ould)h(b)r(e)f(allo)o(w)o(ed)g(to)f(see)h(the)g(request,)g(mo)o(v)o(e)g (the)g(page,)f(and)i(\014nally)g(satisfy)f(the)g(request.)25 b(Lo)q(ok-)p eop %%Page: 56 67 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(56)0 195 y(ahead)19 b(zero)g(is)h(more)f(natur\ al)g(in)h(this)f(setting.)32 b(Section)20 b(7.5)e(discusses)i(lo)r(ok-ahead)f (one)g(v)o(ersions)g(of)g(our)0 252 y(algorithms.\))71 308 y(The)d(net)n(w)o (orks)f(that)g(w)o(e)g(consider)i(are)e(those)h(in)g(which)g(the)g(distances) g(are)g(symmetric)f(and)h(satisfy)g(the)0 364 y(triangle)k(inequality)m(.)31 b (If)19 b(the)g(actual)g(physical)h(net)o(w)n(ork)f(b)q(eing)h(analyzed)g(do)q (es)f(not)g(ha)n(v)o(e)g(a)g(link)i(b)q(et)o(w)n(een)0 421 y(ev)o(ery)e(pair) g(of)f(no)r(des,)h(then)h(the)f(distance)g(b)r(et)o(w)n(een)h(them)e(is)i(the) f(shortest)f(path)h(length)g(in)h(the)f(net)o(w)n(ork)0 477 y(b)r(et)n(w)o (een)d(the)f(t)n(w)o(o)g(no)q(des.)71 534 y(W)-5 b(e)14 b(ha)n(v)o(e)f(obtain\ ed)h(3-comp)q(etitive)f(algorithms)g(for)f(the)h(migration)g(problem)h(on)f (the)g(complete)h(net)o(w)n(ork)0 590 y(with)f(uniform)g(distances,)h(on)e (an)o(y)g(net)o(w)o(ork)g(whose)h(distance)g(metric)g(is)g(that)f(of)g(a)h (tree,)f(and)h(on)g(an)n(y)g(net)o(w)n(ork)0 647 y(that)19 b(is)i(the)g(pro)q (duct)f(of)g(trees)g(and/or)g(complete)g(graphs)g(\(e.g.,)f(a)h(h)o(yp)q(ercu\ b)r(e\).)35 b(A)20 b(result)h(obtained)g(b)o(y)0 703 y(Karlin)f(et)e(al.)g ([28)o(])g(sho)o(ws)g(that)g(these)g(algorithms)h(are)f fq(str)m(ongly)h(c)n (omp)n(etitive)i ft(in)f(the)e(sense)h(that)f(3)g(is)h(the)0 760 y(minimum)c (p)r(ossible)h(comp)r(etitiv)o(e)f(factor.)71 816 y(The)k(migration)f(problem) i(is)f(closely)h(related)f(to)f(the)h(problem)h(of)e(1-serv)o(er)g(with)h(exc\ ursions,)h(de\014ned)0 873 y(\(but)c(not)g(studied\))h(b)o(y)g(Manasse)f(et)g (al.[38)o(].)23 b(The)17 b(migration)f(problem)h(is)g(a)f(sp)q(ecial)i(case)f (of)f(1-serv)n(er)g(with)0 929 y(excursions)g(obtained)f(b)o(y)g(restricting) g(the)g(cost)f(of)h(a)f(mo)o(v)n(e)h(\(migration\))g(to)f(a)g(uniform)i(const\ an)n(t)f(\()p fn(m)p ft(\))f(times)0 985 y(the)19 b(cost)f(of)g(a)h(remote)f (access.)31 b(In)19 b(con)o(trast,)f(the)h(mo)n(v)o(e)g(cost)f(for)g(the)h (general)h(1-serv)n(er)f(with)g(excursions)0 1042 y(problem)12 b(can)g(b)q (e)g(arbitrary)l(.)18 b(Based)12 b(on)g(our)f(results,)h(w)o(e)f(conjecture)h (that)f(3-comp)q(etitive)h(on-line)h(algorithms)0 1098 y(exist)j(for)f(the)g (migration)g(problem)h(on)g(all)g(top)q(ologies)g(with)g(symmetric)f(distance) h(metrics)g(that)f(satisfy)g(the)0 1155 y(triangle)h(inequalit)q(y)l(.)71 1211 y(Section)j(7.4)e(con)o(tains)i(our)f(results)h(on)f(migration.)30 b(W)l(e)19 b(describ)r(e)g(algorithm)f(M,)g(a)g(3-comp)q(etitive)g(al-)0 1268 y(gorithm) f(for)g(migration)h(on)g(a)f(net)o(w)n(ork)g(of)h(uniform)g(distances)g(and)g (algorithm)g(M-T)l(ree,)g(a)f(3-comp)q(etitive)0 1324 y(algorithm)g(for)f(the) h(migration)g(problem)h(on)f(an)o(y)g(net)o(w)n(ork)g(with)g(the)g(distance)h (metric)f(of)g(a)g(tree.)25 b(W)l(e)17 b(also)0 1381 y(consider)h(a)e(sp)r (ecialized)j(v)o(ersion)e(of)f(algorithm)h(M-T)l(ree)g(\(called)h(M-UT)l(ree\ \))f(for)f(net)o(w)n(orks)g(whose)h(distance)0 1437 y(metric)e(is)g(that)e (of)h(a)h(tree)f(with)h(edges)f(of)g(length)h(1;)f(the)h(algorithm)f(uses)h (few)o(er)f(coun)o(ters)g(than)g(M-T)l(ree,)h(but)0 1494 y(is)h(only)f(4-comp) r(etitiv)o(e.)71 1550 y(W)-5 b(e)11 b(analyze)g(our)f(replication)h(algorithm\ s)f(slightly)h(di\013eren)o(tly)g(from)e(our)h(migration)g(algorithms.)18 b (Strictly)0 1606 y(sp)q(eaking,)d(the)f(trivial)h(algorithm)f(that)f(initiall\ y)k(replicates)e(the)f(page)g(to)f(all)i(of)f(the)g(no)q(des)g(is)h(0-comp)q (etitive)0 1663 y(for)e(the)g(problem,)h(since)g(w)o(e)g(can)f(put)g(all)i (of)d(the)i(cost)f(of)f(the)i(initial)h(page)e(mo)o(v)n(ement)g(in)o(to)g(the) g(constan)o(t)g fn(a)g ft(in)0 1719 y(the)g(de\014nition)i(of)d(comp)q(etitiv\ eness.)19 b(T)l(o)13 b(giv)o(e)g(meaningful)h(results)f(for)g(this)g(problem,) h(w)n(e)f(therefore)g(rede\014ne)0 1776 y fn(c)p ft(-comp)q(etitiveness)i(to) g(mean)g(satisfying)h(the)f(ab)q(o)o(v)n(e)h(inequality)g(with)f(an)g(additiv\ e)g(constan)o(t)g(of)g(zero.)71 1832 y(Section)h(7.3)e(con)o(tains)i(our)f (results)g(on)h(replication.)22 b(W)l(e)15 b(giv)o(e)h(2-comp)q(etitiv)o(e)g (algorithms)f(for)g(the)g(repli-)0 1889 y(cation)k(problem)h(on)e(uniform)i (net)o(w)n(orks,)f(and)g(net)o(w)o(orks)f(with)h(the)g(distance)h(metric)f (of)f(a)h(tree.)31 b(W)l(e)19 b(also)0 1945 y(giv)o(e)d(a)f(sp)q(ecialized)j (v)o(ersion)e(for)f(trees)g(in)h(which)g(eac)o(h)f(edge)h(has)f(length)i(one) e(that)g(uses)h(less)g(state)e(than)i(the)0 2002 y(general)f(tree)f(algorithm\ .)20 b(These)15 b(algorithms)f(are)g(strongly)g(comp)r(etitiv)o(e,)h(as)f(it) g(is)h(fairly)h(easy)e(to)g(sho)n(w)h(that)0 2058 y(the)g(lo)o(w)o(er)g(b)r (ound)g(on)g(the)h(comp)q(etitive)f(factor)f(for)h(this)g(problem)h(is)g(2.) 71 2115 y(In)d(Section)g(7.6)f(w)n(e)h(describ)s(e)f(in)i(more)e(detail)i(ho) n(w)f(our)f(idealized)j(mo)q(dels)f(for)e(migration)g(and)h(replication)0 2171 y(relate)i(to)g(real)g(m)o(ultipro)r(cessor)g(systems.)71 2227 y(W)-5 b(e)16 b (consider)g(t)n(w)o(o)f(top)q(ologies)g(for)g(our)g(algorithms:)0 2321 y fr (Complete:)23 b ft(A)c(complete)h(graph)f(in)h(which)g(ev)o(ery)f(pair)h(of)f (distinct)h(no)q(des)g(are)f(separated)g(b)o(y)h(the)f(same)114 2378 y(distan\ ce.)0 2472 y fr(T)l(ree:)j ft(A)14 b(tree)g(in)h(which)f(distance)h(is)g(addi\ tiv)o(e)g(\(i.e.,)e(there)i(is)f(a)g(unique)i(path)e(b)q(et)o(w)n(een)h(an)o (y)f(t)n(w)o(o)g(no)q(des)h(and)114 2528 y(the)g(access)g(cost)g(is)h(the)f (sum)g(of)g(the)g(access)h(costs)e(for)h(the)g(individual)j(edges)e(along)f (that)g(path\).)0 2622 y(W)l(e)d(also)f(consider)i(a)e(v)m(arian)o(t)g(of)h fr (T)l(ree)p ft(,)f fr(UT)l(ree)g ft(in)h(which)g(all)g(single)h(edge)f(access) g(costs)f(are)g(identical)h(\(i.e.)g(the)0 2678 y(cost)i(of)g(an)g(access)g (is)h(the)g(n)n(um)o(b)r(er)f(of)g(edges)h(m)n(ultiplied)j(b)o(y)c(a)g(\014xe\ d)h(constan)n(t)f fn(d)p ft(\);)g(simpler)h(algorithms)f(exist)0 2735 y(giv)o (en)j(this)f(cost)g(assumption.)23 b(Our)17 b(migration)f(algorithms)g(also)g (extend)h(to)e(pro)q(ducts)i(of)f(these)g(graphs)g(b)o(y)0 2791 y(emplo)o(yin\ g)g(an)e(indep)s(endent)g(instance)i(of)e(the)h(appropriate)g(algorithm)g(in) g(eac)o(h)g(dimension)h(of)f(the)f(pro)q(duct)p eop %%Page: 57 68 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(57)0 195 y(graph;)20 b(imp)r(ortan)n(t)f(examp\ les)g(of)g(suc)o(h)g(pro)q(ducts)g(are)g(h)o(yp)r(ercub)r(es)g(and)g(meshes,) h(whic)o(h)f(are)g(pro)q(ducts)g(of)0 252 y(linear)d(trees.)0 395 y fk(7.3)70 b(Replicati)o(on)0 496 y ft(W)l(e)18 b(can)h(no)n(w)g(giv)o(e)f(the)g(general) h(abstract)e(form)h(of)g(the)g(replication)i(problem.)30 b(A)18 b(set)g(of)g fn(n)g ft(no)r(des,)h(and)f(a)0 553 y(distance)e(metric)g fn(\016)339 560 y fe (ij)385 553 y ft(that)f(sp)q(eci\014es)i(the)e(distance)i(b)q(et)o(w)n(een)f (all)h(pairs)f(of)f(no)q(des)h fn(i)f ft(and)g fn(j)j ft(are)d(giv)o(en.)21 b (In)16 b(this)0 609 y(w)o(ork,)e(w)n(e)i(will)h(only)f(b)q(e)f(concerned)i (with)e(distance)h(metrics)g(that)e(are)h(symmetric)h(and)f(satisfy)g(the)g (triangle)0 666 y(inequalit)q(y)l(.)32 b(A)19 b(graph)g fn(G)g ft(with)h(leng\ ths)f(on)h(its)f(edges)g(is)h(said)g(to)e(satisfy)h(the)h(distance)g(metric)f fn(\016)1788 673 y fe(ij)1838 666 y ft(if)h(the)0 722 y(shortest)14 b(path)h (in)h fn(G)f ft(b)r(et)n(w)o(een)h fn(i)f ft(and)g fn(j)j ft(is)d fn(\016)779 729 y fe(ij)810 722 y ft(.)71 779 y(The)k(general)g(state)f(of)g(the)h(system) f(is)h(describ)s(ed)g(b)o(y)f(a)h(bit)g(v)o(ector)f(with)h(one)g(bit)g(p)r (er)f(no)r(de.)30 b(A)19 b(no)q(de)0 835 y(whose)f(bit)h(is)f(1)g(is)h(said)f (to)g(`ha)n(v)o(e)g(the)h(page'.)28 b(In)19 b(the)f(initial)i(state)d(of)h (the)g(system,)g(there)h(is)f(a)g(particular)0 891 y(single)i(no)q(de)g(\(whi\ c)o(h)f(w)n(e)g(will)i(alw)o(a)n(ys)e(call)h fn(s)p ft(\))f(that)f(has)g(the) h(page.)31 b(As)19 b(time)g(go)q(es)f(on,)i(the)f(bits)g(of)f(other)0 948 y (no)q(des)f(c)o(hange)f(to)f(1.)23 b(When)16 b(this)h(happ)q(ens)g(to)e(a)h (no)q(de,)h(it)f(is)h(said)f(to)g(ha)o(v)n(e)h(`replicated)g(the)f(page'.)22 b (Once)17 b(a)0 1004 y(no)q(de)f(has)f(a)g(cop)o(y)g(of)g(the)g(page,)g(it)g (retains)g(it.)71 1061 y(A)d(sequence)h(of)f(requests)g(to)g(no)q(des)h(is)f (to)g(b)q(e)h(satis\014ed.)19 b(The)13 b(cost)e(of)h(satisfying)h(a)f(request) g(is)h(the)f(distance)0 1117 y(from)k(the)g(requested)h(no)r(de)f(to)g(the)h (nearest)f(no)q(de)h(with)g(the)g(page.)23 b(The)17 b(cost)f(of)g(replicating) i(the)f(page)f(is)h fn(r)0 1174 y ft(times)e(the)h(distance)g(to)e(the)i(near\ est)f(no)q(de)g(with)h(the)f(page.)71 1230 y(The)g(replication)h(problem)g (is)f(to)g(decide)h(\(in)g(an)f(on-line)h(fashion\))f(which)g(no)r(des)g(shou\ ld)h(ha)n(v)o(e)f(the)g(page,)0 1287 y(and)22 b(to)g(do)g(this)h(in)g(a)f(w)n (a)o(y)g(that)f(has)h(lo)o(w)g(cost.)41 b(As)22 b(usual,)i(w)o(e)e(will)i(com\ pare)e(the)g(p)r(erformance)f(of)h(a)0 1343 y(prosp)q(ective)13 b(on-line)i (algorithm)e(to)g(that)f(of)h(the)g(o\013-line)i(optim)o(um)e(on)g(the)g(same) g(sequence)i(of)e(requests.)19 b(W)l(e)0 1400 y(will)d(assume)f(that)f(the)h (on-)g(and)g(o\013-line)h(algorithms)f(start)e(in)j(the)f(same)f(state,)g(the) h(one)g(in)g(which)g(the)g(page)0 1456 y(is)h(in)g(no)q(de)g fn(s)p ft(.)71 1512 y(It)k(is)h(easy)f(to)f(see)i(that)e(no)h(on-line)i(algorithm)e(\(for)g (an)n(y)h(non-trivial)g(v)o(ersion)g(of)e(this)i(problem\))g(can)0 1569 y(ac) o(hiev)o(e)15 b(a)g(cost)f(that)h(is)g(less)g(than)g(t)o(wice)g(the)g(optim)o (um)g(on)g(all)h(sequences)g(of)e(requests.)20 b(Let)15 b fn(s)g ft(and)g fn (t)g ft(b)r(e)g(the)0 1625 y(t)n(w)o(o)e(no)r(des.)19 b(Consider)c(the)e(sequ\ ence)i(of)e(requests)h(that)f(accesses)h fn(t)g ft(rep)q(eatedly)h(un)o(til)g (the)e(on-line)j(algorithm)0 1682 y(has)h(giv)o(en)h(no)q(de)g fn(t)g ft(the) g(page.)26 b(Let)18 b fn(k)g ft(b)r(e)f(the)h(n)o(um)o(b)q(er)g(of)f(requests) g(in)h(this)g(sequence.)28 b(The)18 b(cost)e(incurred)0 1738 y(b)o(y)g(the)g (on-line)i(algorithm)e(is)g(\()p fn(k)11 b ft(+)g fn(r)q ft(\))p fn(\016)706 1745 y fe(st)737 1738 y ft(.)22 b(If)16 b fn(k)f fg(\025)g fn(r)h ft(then)h (the)f(optim)o(um)g(o\013-line)h(algorithm)f(replicates)h(the)0 1795 y(page)h (immediately)h(and)f(incurs)g(a)g(cost)f(of)g fn(r)q(\016)830 1802 y fe(st) 861 1795 y ft(.)27 b(If)18 b fn(k)g(<)f(r)q ft(,)h(then)g(the)g(optim)o(um)f (o\013-line)i(algorithm)f(nev)o(er)0 1851 y(replicates)c(the)g(page)f(and)g (incurs)h(a)f(cost)g(of)g fn(k)q(\016)822 1858 y fe(st)853 1851 y ft(.)19 b (In)14 b(either)g(case,)f(the)g(o\013-line)i(algorithm)e(incurs)h(a)f(cost)g (that)0 1908 y(is,)i(at)g(most,)f(half)i(of)e(the)i(on-line)h(algorithm.)71 1964 y(Our)f(goal)h(is)g(th)n(us)g(to)f(\014nd)h(on-line)h(algorithms)f(that) e(ac)o(hieve)i(this)f(factor)g(of)g(t)n(w)o(o)g(for)g(v)m(arious)h(distance)0 2021 y(metrics.)i(W)l(e)14 b(ha)n(v)o(e)f(done)h(this)f(for)f(the)i(cases)e (in)i(which)f(the)g(metric)h(is)f(that)g(of)f(a)h(tree,)g(and)g(the)g(case)g (in)h(which)0 2077 y(all)i(distances)g(are)f(equal.)71 2133 y(It)d(is)g(p)r (ossible)h(to)e(pro)o(v)o(e)h(that)f(for)h(certain)g(other)g(metrics)g(\(for) f(example,)i(when)g(the)f(graph)g(corresp)q(onding)0 2190 y(to)i(the)h(metric) g(is)g(a)g(four-no)q(de)g(cycle\),)g(the)g(b)q(est)g(comp)q(etitive)g(factor) e(that)h(an)h(on-line)i(algorithm)d(can)h(hop)r(e)0 2246 y(for)g(is)g(5)p fn (=)p ft(2.)k(W)l(e)d(lea)o(v)o(e)f(these)g(questions)h(to)f(future)g(researc) n(h.)0 2368 y fp(7.3.1)55 b(Replication)17 b(for)i(Tw)o(o)g(No)q(des)0 2454 y ft(There)d(is)g(a)g(v)n(ery)g(simple)h(algorithm)f(to)f(ac)o(hieve)h(the)f (factor)g(of)h(t)n(w)o(o)f(when)h(there)g(are)f(just)h(t)n(w)o(o)f(no)r(des.) 22 b(It)15 b(is)0 2510 y(easy)f(to)f(derive)h(the)g(algorithm)g(\(which)g(w)o (e)g(call)h fr(C)p ft(\))f(from)f(the)h(lo)o(w)o(er)g(b)q(ound)h(pro)n(v)o (en)g(ab)q(o)n(v)o(e.)20 b(Let)14 b fn(s)g ft(and)h fn(t)f ft(b)r(e)0 2567 y (the)f(t)n(w)o(o)g(no)q(des.)19 b(Algorithm)14 b fr(C)e ft(k)o(eeps)i(a)e(cou\ n)o(t)h(of)g(the)g(n)o(um)o(b)q(er)g(of)f(requests)h(to)g fn(t)p ft(.)19 b (When)14 b(this)f(reac)o(hes)g fn(r)q ft(,)g(the)0 2623 y(page)j(is)g(replica\ ted)h(into)e fn(t)p ft(.)22 b(Like)16 b(the)g(lo)o(w)n(er)g(b)q(ound,)g(the)g (pro)q(of)g(that)f(this)h(algorithm)g(is)g(within)h(a)e(factor)g(of)0 2680 y (t)n(w)o(o)g(of)f(optim)o(um)i(breaks)f(in)o(to)g(t)n(w)o(o)f(cases.)20 b(Let) c fn(k)g ft(b)q(e)f(the)h(n)o(um)o(b)q(er)f(of)g(requests)g(in)h(the)f(sequen\ ce.)21 b(The)15 b(cost)0 2736 y(incurred)j(b)o(y)f(algorithm)f fr(C)h ft(is)g fn(k)q(\016)601 2743 y fe(st)649 2736 y ft(if)g fn(k)g(<)e(r)j ft(and)e(2)p fn (r)q(\016)976 2743 y fe(st)1024 2736 y ft(otherwise.)25 b(In)17 b(the)g(forme\ r)f(case,)g(the)h(algorithm's)p eop %%Page: 58 69 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(58)0 195 y(p)r(erformance)16 b(is)i(optim)o (um,)f(in)h(the)g(latter,)e(its)i(p)q(erformance)f(is)h(within)g(a)f(factor)f (of)h(t)n(w)o(o)g(of)f(the)i(minimum)0 252 y(cost,)c fn(r)q(\016)148 259 y fe (st)179 252 y ft(.)0 373 y fp(7.3.2)55 b(Replication)17 b(for)i(the)f(Uniform) f(Problem)0 459 y ft(It)e(is)g(v)o(ery)g(easy)f(to)h(generalize)h(algorithm)f fr(C)f ft(to)g(man)o(y)h(no)q(des)g(in)h(the)f(case)g(in)g(which)g(the)g(dist\ ance)h(b)q(et)o(w)n(een)0 516 y(ev)o(ery)f(pair)h(of)e(no)r(des)h(is)h(the)f (same.)114 622 y fr(Algorithm)k(R:)j ft(Main)o(tain)16 b(a)g(count)g(on)g(eac) o(h)g(no)q(de)h(other)f(than)g fn(s)p ft(.)24 b(The)16 b(coun)o(t)g(on)h(a)f (no)q(de)h(is)114 678 y(incremented)g(eac)o(h)h(time)f(that)g(no)q(de)h(is)g (accessed.)26 b(When)18 b(the)f(count)f(on)i(a)f(no)q(de)h fn(i)f ft(reac)n (hes)h fn(r)q ft(,)114 735 y(the)d(page)g(is)h(replicated)g(into)f fn(i)p ft (.)71 841 y(T)l(o)d(analyze)h(this)g(algorithm,)g(w)n(e)g(partition)g(the)f (cost)g(of)g(a)g(sequence)i(of)e(requests)h(in)o(to)f(the)h(costs)e(incurred) 0 897 y(b)o(y)g(the)g(requests)g(to)f(eac)o(h)h(v)o(ertex.)18 b(The)12 b(cost\ s)e(incurred)i(b)o(y)f(a)g(v)o(ertex)f(include)k(the)d(cost)f(of)h(the)g(acce\ sses)g(to)g(that)0 954 y(v)o(ertex,)j(and)i(the)f(cost)f(of)h(replicating)i (the)e(page)g(there.)20 b(Eac)n(h)c(v)n(ertex)f(represents)f(an)h(entirely)h (separate)e(t)o(w)n(o)0 1010 y(v)o(ertex)i(problem.)23 b(Algorithm)16 b fr (R)g ft(is)h(merely)f(running)h(algorithm)f fr(C)g ft(on)g(eac)o(h)g(of)g(the\ se)g(separate)g(problems.)0 1067 y(Therefore,)f(its)g(p)r(erformance)f(is)i (within)h(a)d(factor)h(of)f(t)o(w)n(o)h(of)g(optim)o(um.)71 1123 y(This)i(ana\ lysis)h(is)g(also)f(applicable)i(to)e fq(star-shap)n(e)n(d)h(gr)n(aphs)p ft (,)f(which)g(are)g(graphs)f(with)i(a)f(cen)o(tral)g(no)q(de)h fn(s)0 1180 y ft (suc)o(h)e(that)e(the)h(distance)h(from)f(an)n(y)h(no)q(de)f fn(i)g ft(to)g (an)n(y)h(other)e(no)r(de)h fn(j)j ft(is)d(not)g(less)h(than)f(the)g(distance) h(from)f fn(i)f ft(to)0 1236 y fn(s)p ft(.)20 b(Hence)c(Algorithm)g fr(R)f ft (is)h(also)f(within)h(a)f(factor)f(of)h(t)o(w)n(o)g(of)g(optim)o(um)g(for)g (suc)o(h)g(graphs.)0 1358 y fp(7.3.3)55 b(Replication)17 b(for)i(T)-5 b(rees) 0 1444 y ft(Another)15 b(easy)g(generalization)i(of)d(algorithm)i fn(C)i ft (is)d(to)g(the)g(case)g(in)h(which)f(the)h(distance)g(metric)f(is)h(a)f(tree.) 114 1550 y fr(Algorithm)j(R-T)m(ree:)j ft(The)c(algorithm)f(main)o(tains)g (a)g(count)f(\(initially)k(zero\))d(on)g(ev)o(ery)g(no)q(de.)114 1606 y(When) g(a)f(no)q(de)h fn(i)g ft(that)f(do)q(es)h(not)f(ha)o(v)n(e)h(the)g(page)g (is)g(accessed,)g(the)g(coun)o(t)f(of)g(ev)o(ery)h(no)q(de)g(along)114 1663 y (the)c(path)h(from)f fn(i)g ft(to)g(the)h(closest)g(no)q(de)g(with)g(the)g (page)g(is)g(incremented.)19 b(The)13 b(page)f(is)i(replicated)114 1719 y(to) j(all)i(no)q(des)g(whose)f(coun)o(ts)g(reac)n(h)h fn(r)g ft(after)e(the)h(acc\ ess.)29 b(\(Of)18 b(course,)h(it)f(is)h(not)e(necessary)i(to)114 1776 y(main) o(tain)c(coun)o(ts)f(on)g(no)r(des)g(that)g(ha)o(v)o(e)g(the)h(page.)k(W)l (e)c(ha)o(v)n(e)g(expressed)g(the)g(algorithm)f(in)i(this)114 1832 y(w)n(a)o (y)f(to)f(simplify)j(the)f(follo)o(wing)g(exp)q(osition.\))71 1939 y(This)g (algorithm)f(is)h(also)g(within)g(a)g(factor)e(of)h(t)o(w)n(o)g(of)g(the)h (optim)o(um)g(o\013-line)g(algorithm.)21 b(Before)15 b(w)o(e)h(can)0 1995 y (pro)o(v)n(e)j(this)g(w)n(e)g(need)g(the)g(follo)o(wing)g(observ)m(ation:)27 b (The)18 b(counts)g(on)g(the)g(no)r(des)g(of)g(a)h(path)f(from)g fn(s)g ft(to) g(an)o(y)0 2051 y(other)e(v)o(ertex)h(are)f(monotonically)i(non-increasing.) 26 b(This)17 b(fact)f(is)h(initially)j(true,)c(and)h(is)g(easy)g(to)f(pro)n (v)o(e)h(b)o(y)0 2108 y(induction.)24 b(It)16 b(is)h(also)f(easy)g(to)f(pro)n (v)o(e)h(that)g(after)f(an)h(access,)g(the)g(no)q(des)h(with)f(the)g(page)g (are)g(exactly)g(those)0 2164 y(with)g(coun)o(ts)e(of)h fn(r)h ft(or)f(more.) 71 2221 y(Consider)i(an)o(y)g(algorithm)g fn(A)g ft(\(o\013-line)h(or)e(on-li\ ne\))j(for)d(this)h(problem.)26 b(W)l(e)18 b(can)f(assume,)g(without)g(loss)0 2277 y(of)f(generality)l(,)h(that)f(if)h(algorithm)g fn(A)g ft(arranges)f(thi\ ngs)h(so)g(that)f(no)q(de)i fn(i)e ft(has)h(the)g(page,)f(then)i(all)f(the)g (no)q(des)0 2334 y(on)d(the)g(path)g(from)g fn(s)g ft(to)g fn(i)g ft(also)g (ha)o(v)n(e)h(the)f(page.)19 b(W)l(e)c(can)f(mak)n(e)h(this)f(assumption)h (b)q(ecause)g(if)g(the)f(algorithm)0 2390 y(do)q(es)i(not)f(do)g(this)h(repli\ cation,)h(then)f(it)g(can)g(b)q(e)g(mo)q(di\014ed)h(so)e(that)g(it)g(do)r(es) g(the)h(replication,)h(and)e(incurs)i(no)0 2447 y(more)12 b(cost.)19 b(Th)o (us,)13 b(for)f(an)o(y)g(algorithm)h fn(A)p ft(,)g(w)o(e)g(can)f(assume)h(tha\ t)f(the)h(no)q(des)g(with)g(the)g(page)g(are)f(a)h(connected)0 2503 y(comp)q (onen)o(t)i(in)h(the)g(tree.)71 2560 y(These)g(constrain)o(ts)f(allo)o(w)h (us)g(to)f(analyze)i(algorithm)e fr(R-T)m(ree)g ft(b)o(y)h(partitioning)h(the) f(costs)f(incurred)i(b)o(y)0 2616 y(it)f(and)g(b)o(y)f fn(A)h ft(into)f(parts) g(corresp)q(onding)h(to)f(the)h(edges)g(of)f(the)h(tree.)21 b(An)16 b(edge)g (incurs)h(a)e(cost)g(for)g(an)h(access)0 2672 y(op)q(eration)f(\(equal)g(to)g (the)g(length)g(of)g(the)g(edge\),)f(if)i(the)f(path)g(from)f(the)h(accessed) g(no)q(de)h(to)e(the)h(closest)g(no)q(de)0 2729 y(that)g(has)h(the)g(page)f (passes)h(through)f(the)h(edge.)22 b(Otherwise,)17 b(the)f(cost)f(incurred)i (b)o(y)f(the)g(edge)g(is)g(zero.)22 b(The)0 2785 y(edge)16 b(also)f(incurs)h (the)f(cost)g(of)g(a)g(replication)h(across)f(it.)p eop %%Page: 59 70 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(59)71 195 y(W)-5 b(e)13 b(can)f(view)h(the)f (b)r(eha)o(vior)g(of)g(algorithm)g fr(R-T)m(ree)g ft(and)g(an)o(y)g(other)g (algorithm)g fn(A)g ft(from)g(the)g(p)r(ersp)q(ective)0 252 y(of)18 b(a)g(par\ ticular)h(edge.)29 b(With)19 b(resp)q(ect)g(to)e(the)i(game)e(b)r(eing)i(pla) o(y)o(ed)g(on)f(this)h(edge,)g(algorithm)f fr(R-T)m(ree)f ft(is)0 308 y(doing) e(exactly)f(what)g(algorithm)g fr(C)g ft(w)o(ould)h(do:)k(when)c(the)f(coun)o (t)g(on)g(the)h(end)g(without)f(the)g(page)g(reac)o(hes)g fn(r)q ft(,)0 364 y (the)i(page)g(is)h(replicated)g(across)f(the)g(edge.)23 b(The)16 b(total)f (cost)h(incurred)h(b)o(y)g(an)f(algorithm)g(is)g(just)g(the)g(sum)g(of)0 421 y (the)g(costs)g(incurred)i(b)o(y)e(all)i(the)e(edges.)24 b(F)l(or)15 b(eac)o (h)i(edge,)g(algorithm)f fr(R-T)m(ree)f ft(is)i(within)h(a)e(factor)f(of)h (t)o(w)n(o)g(of)0 477 y(the)h(cost)f(of)g(an)o(y)g(other)g(algorithm)h(for)f (that)g(edge.)24 b(This)18 b(pro)n(v)o(es)f(that)e fr(R-T)m(ree)h ft(is)h(wit\ hin)h(a)e(factor)g(of)g(t)o(w)n(o)0 534 y(of)f(optim)o(um.)0 656 y fp(7.3.4) 55 b(Replication)17 b(for)i(Uniform)e(T)-5 b(rees)0 741 y ft(One)16 b(disadv) o(an)n(tage)f(of)h(algorithm)f fr(R-T)m(ree)g ft(is)h(that)f(it)h(m)o(ust)f (k)o(eep)h(state)f(for)g(ev)o(ery)h(no)q(de)g(in)g(the)g(tree,)f(ev)o(en)0 798 y(though)f(a)g(page)f(can)i(only)f(b)r(e)g(replicated)h(to)f(adjacen)o(t)f (no)r(des.)19 b(If)c(the)f(single)h(edge)g(distances)f(in)h(the)f(tree)g(are) 0 854 y(constan)o(t,)f(this)i(state)e(can)h(b)r(e)g(collapsed.)21 b(The)14 b (resulting)i(algorithm)e(still)h(inv)o(olv)o(es)f(coun)o(ters)g(for)f(eac)o (h)i(no)q(de,)0 911 y(but)j(the)g(counters)f(for)h(no)q(des)h(that)e(do)h(not) g(ha)n(v)o(e)g(the)h(page)f(and)g(are)g(not)g(adjacen)n(t)g(to)g(copies)h(are) f(alw)n(a)o(ys)0 967 y(zero.)24 b(This)18 b(means)e(that)g(coun)o(ters)h(need) g(only)h(b)q(e)f(main)o(tained)h(for)e(no)q(des)h(that)f(are)g(adjacen)o(t)h (to)f(copies)h(of)0 1024 y(the)e(page.)20 b(W)l(e)15 b(will)i(call)f(these)f (no)r(des)g fq(b)n(oundary)i(no)m(des)p ft(.)j(Since)c(w)o(e)f(are)g(starting) f(with)i(exactly)f(one)g(cop)o(y)g(of)0 1080 y(the)f(page,)g(there)h(is)g(alw) o(a)n(ys)f(a)g(unique)i(closest)f(b)r(oundary)f(no)q(de)h(to)f(an)n(y)h(non-b) r(oundary)f(no)q(de)h(that)f(do)q(es)g(not)0 1137 y(ha)o(v)n(e)i(the)f(page.) 20 b(Our)15 b(algorithm)h(to)e(implemen)q(t)h(replication)h(using)g fq(b)n (oundary)h(no)n(des)e ft(is:)182 1243 y fr(Algorithm)g(R-UT)m(ree:)j ft(Initi\ alize)e(the)e(coun)o(ters)f fn(c)1126 1250 y fe(i)1153 1243 y ft(to)f(zero.) 19 b(The)14 b(algorithm)f(pro)q(cesses)h(a)114 1299 y(request)f(from)g(a)g (no)r(de)h(that)f(do)q(es)h(not)f(ha)o(v)n(e)h(the)g(page)f(as)h(follo)o(ws:) 19 b(\014nd)14 b(the)g(path)f(to)g(the)h(closest)114 1356 y(cop)o(y)g(of)g (the)h(page,)f(and)h(add)g(the)g(length)g(of)f(the)h(path)f(to)g(the)h(coun)o (ter)g(for)f(the)g(b)r(oundary)h(no)q(de)114 1412 y(on)j(the)h(path.)30 b(If) 18 b(that)g(coun)o(ter)h(is)g fg(\025)f fn(r)q ft(,)h(replicate)h(the)f(page) f(into)g(the)g(b)r(oundary)g(no)r(de,)h(and)114 1469 y(zero)13 b(that)f(no)q (de's)i(coun)o(ter.)19 b(If)13 b(the)g(v)n(alue)h(b)q(efore)f(replication)i (w)o(as)d fn(>)h(r)q ft(,)g(set)g(the)h(coun)o(ter)f(for)f(the)114 1525 y(new) i(b)q(oundary)g(no)q(de)h(on)e(the)h(path)g(to)f(the)h(original)h(b)r(oundary) f(no)q(de's)g(coun)o(ter)f(v)n(alue)i(less)f fn(r)q ft(;)g(if)114 1582 y(this) g(v)n(alue)g(is)h fg(\025)e fn(r)q ft(,)h(the)g(algorithm)g(lo)q(ops)g(bac)o (k)g(to)g(replicate)h(the)f(page)g(into)f(the)h(new)h(b)q(oundary)114 1638 y (no)q(de.)20 b(If)13 b(the)g(request)h(originated)f(at)g(the)g(original)i(b)q (oundary)e(no)r(de,)g(then)h(the)f(original)h(counter)114 1694 y(w)n(as)h fn (r)c fg(\000)f ft(1)15 b(b)r(efore)g(the)g(request,)g(and)g(there)g(is)h(no)f (excess)h(v)m(alue)g(to)f(b)q(e)h(assigned.)71 1801 y(The)f(follo)o(wing)h (theorem)f(establishes)h(that)f(algorithm)g fr(R-UT)m(ree)f ft(is)i(strongly) f(comp)q(etitive.)0 1907 y fr(Theorem)i(1)23 b fq(F)l(or)e(any)g(se)m(quenc)m (e)g fn(\033)h fq(of)f(r)n(e)m(quests)g(for)g(the)f(tr)n(e)n(e)h(p)n(age)f (r)n(eplic)m(ation)h(pr)n(oblem)g(with)g(c)n(onstant)0 1963 y(single)15 b(e)m (dge)i(ac)m(c)n(ess)e(c)n(osts)h(and)g(any)g(on-line)g(or)g(o\013-line)g(algo\ rithm)h fg(A)723 2066 y fu(C)759 2073 y fb(R-UT)m(ree)915 2066 y ft(\()p fn (\033)r ft(\))12 b fg(\024)h ft(2)d fg(\001)f fu(C)1130 2073 y ff(A)1160 2066 y ft(\()p fn(\033)r ft(\))0 2168 y fq(under)15 b(the)f(assumption)h(that)g fg (A)f fq(and)g fr(R-UT)m(ree)g fq(start)h(in)e(the)i(same)f(state)h(with)f(a)h (single)e(c)m(opy)i(of)g(e)m(ach)g(p)n(age.)71 2274 y fr(Proof:)21 b ft(Assum\ e,)15 b(without)g(loss)h(of)f(generality)l(,)g(that)f(all)j(single)g(edge)e (distances)h(in)h(the)e(tree)g(are)h(1.)k(W)l(e)0 2330 y(merge)c(the)g(action\ s)g(tak)n(en)g(b)o(y)g(the)g(t)n(w)o(o)f(algorithms)h(into)f(a)h(single)h(seq\ uence)g(of)e(ev)o(en)o(ts)h(tagged)f(to)g(indicate)0 2387 y(the)20 b(algorith\ ms)f(in)o(v)o(olv)o(ed.)33 b(W)l(e)20 b(will)h(giv)o(e)e(a)h(non-negativ)o (e)f(\(initially)j(zero\))d(p)r(oten)n(tial)h(\010,)g(suc)o(h)g(that)f(the)0 2443 y(follo)o(wing)d(inequalit)q(y)f(is)g(satis\014ed)h(b)o(y)f(ev)o(ery)g (ev)o(ent:)659 2545 y(2)10 b fg(\001)g ft(\001)p fu(C)789 2552 y ff(A)829 2545 y fg(\000)g ft(\001)p fu(C)948 2552 y fb(R-UT)m(ree)1117 2545 y fg(\025)j ft (\001\010\()p fn(t)p ft(\))0 2648 y(where)i(the)g(\001)g(indicates)h(the)f (c)o(hange)g(in)h(the)f(v)m(alue)h(of)e(the)h(parameter)g(as)f(a)h(result)g (of)f(the)h(ev)o(ent.)k(Summing)0 2704 y(this)e(form)n(ula)g(o)o(v)n(er)g(all) g(ev)o(ents)f(and)h(using)g(the)g(fact)f(that)f(the)i(initial)i(p)q(oten)o (tial)e(is)g(no)g(more)f(than)g(the)h(\014nal)0 2760 y(p)r(oten)n(tial)f(yiel\ ds)h(the)e(theorem.)20 b(It)15 b(remains)g(to)g(sp)q(ecify)h(the)g(p)q(oten)o (tial)g(and)f(v)o(erify)g(the)h(ab)q(o)n(v)o(e)f(inequalit)q(y)l(.)p eop %%Page: 60 71 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(60)71 195 y(Let)16 b fn(S)j ft(b)r(e)d(the)h (set)f(of)g(no)q(des)h fn(i)f ft(suc)o(h)h(that)e(only)i fg(A)g ft(has)f(a)g (cop)o(y)h(of)f(the)g(page)g(in)i(no)q(de)f fn(i)p ft(.)23 b(W)l(e)16 b(de\ \014ne)i(the)0 252 y(p)r(oten)n(tial)e(function)g(as:)708 308 y(\010\()p fn (t)p ft(\))c(=)853 268 y fd(X)854 360 y fe(i)p ff(62)p fe(S)921 308 y fn(c) 941 315 y fe(i)964 308 y ft(+)1010 268 y fd(X)1010 359 y fe(i)p ff(2)p fe(S) 1070 308 y ft(\(2)p fn(r)e fg(\000)h fn(c)1208 315 y fe(i)1221 308 y ft(\))0 433 y(Ev)o(ery)k(step)g(in)h(either)g(algorithm)f(that)f(c)o(hanges)h(the)g (p)r(oten)n(tial)h(or)f(incurs)h(a)f(cost,)f(results)h(in)h(an)f(ev)o(en)o (t.)20 b(W)l(e)0 490 y(no)o(w)15 b(pro)q(ceed)h(to)e(establish)j(the)e(desire\ d)h(inequalit)q(y)f(for)g(all)h(p)q(ossible)h(ev)o(en)o(ts.)71 546 y(Consider) d(a)f(replication)i(action)e(p)r(erformed)g(b)o(y)g fg(A)p ft(.)20 b(Let)13 b fn(i)g ft(and)h fn(j)i ft(b)q(e)e(the)f(source)h(and)f(destination)i(no)q(des\ .)0 603 y(Since)g fn(i)e ft(and)h fn(j)i ft(are)e(adjacen)o(t,)f fn(\016)556 610 y fe(ij)599 603 y ft(=)g(1)g(b)o(y)h(assumption.)20 b(The)14 b(cost)f(of) g(the)h(replication)h(to)e fg(A)h ft(is)g(r,)g(so)f(w)o(e)g(m)o(ust)0 659 y (sho)o(w)k(that)g(\001\010)f fg(\024)h ft(2)p fn(r)p ft(.)27 b(There)18 b(are) f(t)n(w)o(o)g(cases)h(to)e(consider)j(based)f(on)f(whether)h fn(j)i ft(b)q (elongs)e(to)f fn(S)j ft(after)d(the)0 715 y(replication:)45 809 y fn(j)e fg (2)e fn(S)s ft(:)22 b(This)16 b(means)e(that)g fn(j)j ft(do)r(es)d(not)h(ha)n (v)o(e)g(a)g(cop)o(y)f(of)h(the)f(page)h(under)g fr(R-UT)m(ree)p ft(.)k fn (j)e ft(is)f(added)f(to)f fn(S)s ft(,)176 866 y(so)g(\001\010)f(=)g(\(2)p fn (r)d fg(\000)g fn(c)500 873 y fe(j)518 866 y ft(\))g fg(\000)h fn(c)612 873 y fe(j)642 866 y ft(=)i(2)p fn(r)e fg(\000)f ft(2)p fn(c)833 873 y fe(j)863 866 y fg(\024)j ft(2)p fn(r)j ft(b)r(ecause)f fn(c)1159 873 y fe(j)1190 866 y fg (\025)e ft(0.)45 960 y fn(j)i fg(62)e fn(S)s ft(:)22 b(This)15 b(means)e(that) g fn(j)j ft(already)e(has)g(a)g(cop)o(y)f(of)h(the)f(page)h(under)h fr(R-UT)l (ree)p ft(.)k(There)14 b(is)h(no)e(c)o(hange)176 1016 y(to)h fn(S)k ft(so)d (\001\010)d(=)h(0.)71 1110 y(Consider)k(a)f(replication)j(action)e(p)q(erform\ ed)g(b)o(y)g fr(R-UT)l(ree)p ft(.)25 b(This)17 b(action)g(m)n(ust)g(b)r(e)g (analyzed)g(in)h(com-)0 1166 y(bination)g(with)f(the)f(pair)h(of)f(actions)h (that)f(satisfy)g(the)h(request)f(for)g(b)r(oth)g(algorithms.)24 b(Let)17 b fn (i)f ft(and)h fn(j)h ft(b)r(e)f(the)0 1223 y(source)h(and)h(destination)g(no) q(des.)29 b(There)19 b(are)f(a)g(total)f(of)h(\014v)o(e)h(cases)f(dep)r(endin\ g)h(on)f(whether)h fn(j)h ft(and)f fn(e)f ft(are)0 1279 y(mem)o(b)q(ers)d(of) f fn(S)j ft(b)q(efore)d(the)h(replication)h(and)f(on)f(the)h(distance)g(of)f (the)g(access.)20 b(Let)15 b fn(d)f ft(b)r(e)g(the)h(path)f(length)h(of)0 1336 y(the)i(request;)h(the)f(t)o(w)n(o)g(simplest)i(cases)e(are)g(for)f fn(d)g ft (=)g(1.)26 b(In)18 b(this)f(case,)h fn(c)1301 1343 y fe(j)1334 1336 y ft(=)f fn(r)12 b fg(\000)g ft(1)17 b(b)q(efore)g(the)h(replication,)0 1392 y(and)f fn (c)110 1399 y fe(j)142 1392 y ft(=)e(0)h(afterw)n(ards.)24 b(\001)p fu(C)549 1399 y fb(R-UT)m(ree)720 1392 y ft(=)15 b fn(r)d ft(+)f(1)16 b(to)g(accoun)o (t)g(for)g(the)h(replication)h(and)e(initial)j(access.)24 b(The)0 1449 y(t)n (w)o(o)15 b fn(d)d ft(=)h(1)i(cases)g(are:)45 1542 y fn(j)g fg(62)e fn(S)s ft (:)22 b(\001)p fu(C)262 1549 y ff(A)305 1542 y ft(=)13 b(1,)d(so)g(w)o(e)h (m)n(ust)g(sho)n(w)f(\001\010)j fg(\024)g ft(2\(1\))o fg(\000)q ft(\()p fn (r)q ft(+)q(1\))f(=)h(1)q fg(\000)q fn(r)p ft(.)19 b(\001\010)12 b(=)h fn(c) 1418 1526 y ff(0)1418 1554 y fe(j)1437 1542 y fg(\000)q fn(c)1493 1549 y fe (j)1523 1542 y ft(=)g(0)q fg(\000)q ft(\()p fn(r)q fg(\000)q ft(1\))f(=)h(1)p fg(\000)q fn(r)q ft(.)45 1636 y fn(j)i fg(2)e fn(S)s ft(:)22 b(This)17 b(case) f(is)h(free)f(to)g fg(A)p ft(,)h(so)e(w)o(e)h(m)o(ust)g(sho)o(w)g(\001\010)e fg(\024)h ft(2\(0\))9 b fg(\000)j ft(\()p fn(r)f ft(+)g(1\))j(=)h fg(\000)p ft (\()p fn(r)c ft(+)g(1\).)23 b fn(j)17 b fg(62)d fn(S)19 b ft(after)188 1693 y (the)c(replication,)i(so)e(\001\010)d(=)h fn(c)711 1676 y ff(0)711 1705 y fe (j)739 1693 y fg(\000)e ft(\(2)p fn(r)f fg(\000)g fn(c)922 1700 y fe(j)940 1693 y ft(\))j(=)g(0)c fg(\000)i ft(\(2)p fn(r)f fg(\000)h ft(\()p fn(r)f fg (\000)h ft(1\)\))g(=)i fg(\000)p ft(\()p fn(r)e ft(+)g(1\).)0 1786 y(The)16 b (request)f(length,)h fn(d)p ft(,)f(is)h(greater)e(than)i(1)f(for)g(the)g(rema\ ining)i(cases.)j(Let)c fn(e)g ft(b)q(e)g(the)g(new)f(b)r(oundary)g(no)q(de)0 1843 y(\(after)h(replication\))i(for)e(the)h(request)g(that)f(caused)h(the)g (replication.)27 b(De\014ne)17 b fn(x)g ft(suc)o(h)g(that)f fn(c)1667 1850 y fe(j)1701 1843 y ft(=)f fn(r)d fg(\000)g fn(x)17 b ft(and)0 1899 y fn(c)20 1906 y fe(e)53 1899 y ft(=)e(0)h(b)r(efore)g(the)h(replication)h(where)f(1)d fg(\024)h fn(x)g fg(\024)g fn(d)p ft(.)24 b(Then)17 b fn(c)1098 1883 y ff(0) 1098 1911 y fe(j)1131 1899 y ft(=)e(0)h(and)h fn(c)1330 1883 y ff(0)1330 1911 y fe(e)1363 1899 y ft(=)e fn(d)10 b fg(\000)i fn(x)k ft(after)g(the)h(replica\ tion,)0 1956 y(and)f(\001)p fu(C)163 1963 y fb(R-UT)m(ree)332 1956 y ft(=)e fn (r)d ft(+)g fn(d)p ft(.)21 b(There)16 b(are)g(three)f(cases)h(dep)r(ending)h (on)f(whether)g fn(j)i ft(and)e fn(e)g ft(b)q(elong)g(to)f fn(S)k ft(b)q(efor\ e)0 2012 y(the)c(replication.)45 2106 y fn(j;)7 b(e)13 b fg(62)g fn(S)s ft (:)118 b fg(A)16 b ft(has)e(not)h(replicated)i(the)e(page)g(b)q(ey)o(ond)h fn (i)p ft(,)e(so)h(\001)p fu(C)1260 2113 y ff(A)1303 2106 y fg(\025)e fn(d)p ft (,)i(and)g(w)n(e)h(m)n(ust)f(sho)o(w)g(\001\010)d fg(\024)323 2162 y ft(2)p fn (d)r fg(\000)s ft(\()p fn(r)r ft(+)s fn(d)p ft(\))g(=)h fn(d)r fg(\000)s fn (r)p ft(.)19 b(But)11 b(\001\010)i(=)g(\()p fn(c)964 2146 y ff(0)964 2175 y fe (j)984 2162 y ft(+)r fn(c)1041 2146 y ff(0)1041 2174 y fe(e)1059 2162 y ft (\))r fg(\000)s ft(\()p fn(c)1155 2169 y fe(j)1175 2162 y ft(+)s fn(c)1233 2169 y fe(e)1251 2162 y ft(\))f(=)h(0)r(+)s(\()p fn(d)r fg(\000)r fn(x)p ft (\))r fg(\000)s ft(\()p fn(r)s fg(\000)r fn(x)p ft(\))r fg(\000)s ft(0)f(=)h fn(d)r fg(\000)s fn(r)q ft(.)45 2256 y fn(j)i fg(2)e fn(S;)18 b(e)12 b fg(62) h fn(S)s ft(:)22 b fg(A)16 b ft(has)g(replicated)h(the)f(page)f(to)g fn(j)s ft (,)g(but)h(not)f(b)r(ey)o(ond,)g(so)g(\001)p fu(C)1424 2263 y ff(A)1468 2256 y ft(=)f fn(d)c fg(\000)h ft(1,)k(and)h(w)n(e)g(m)o(ust)323 2313 y(sho)o(w)f (\001\010)e fg(\024)g ft(2\()p fn(d)c fg(\000)i ft(1\))e fg(\000)i ft(\()p fn (r)g ft(+)f fn(d)p ft(\))j(=)g fn(d)d fg(\000)g fn(r)h fg(\000)g ft(2.)20 b (\001\010)13 b(=)g(\()p fn(c)1365 2296 y ff(0)1365 2325 y fe(j)1393 2313 y ft (+)e fn(c)1459 2296 y ff(0)1459 2324 y fe(e)1477 2313 y ft(\))f fg(\000)g ft (\(\(2)p fn(r)g fg(\000)h fn(c)1706 2320 y fe(j)1724 2313 y ft(\))f(+)g fn (c)1817 2320 y fe(e)1835 2313 y ft(\))j(=)323 2369 y(0)g(+)g(\()p fn(d)f fg (\000)i fn(x)p ft(\))e fg(\000)h ft(\(2)p fn(r)g fg(\000)h ft(\()p fn(r)f fg (\000)g fn(x)p ft(\)\))g fg(\000)g ft(0)19 b(=)h fn(d)13 b fg(\000)g fn(x)g fg (\000)g ft(2)p fn(r)h ft(+)f fn(r)h fg(\000)f fn(x)20 b ft(=)g fn(d)12 b fg (\000)h fn(r)h fg(\000)f ft(2)p fn(x)p ft(.)32 b(Hence)323 2426 y(\001\010)12 b fg(\024)h fn(d)d fg(\000)h fn(r)g fg(\000)f ft(2)15 b(b)q(ecause)h fn(x)d fg (\025)g ft(1.)45 2519 y fn(j;)7 b(e)13 b fg(2)g fn(S)s ft(:)118 b fg(A)16 b ft (has)g(replicated)h(the)f(page)f(b)r(ey)o(ond)h fn(j)r ft(,)g(so)f(\001)p fu (C)1191 2526 y ff(A)1234 2519 y ft(=)f fn(d)c fg(\000)h fn(k)17 b ft(where)f (2)d fg(\024)h fn(k)h fg(\024)f fn(d)p ft(,)h(and)h(w)n(e)323 2576 y(m)o(ust) 11 b(sho)o(w)g(\001\010)h fg(\024)h ft(2\()p fn(d)q fg(\000)s fn(k)q ft(\))r fg(\000)s ft(\()p fn(r)s ft(+)r fn(d)p ft(\))f(=)h fn(d)r fg(\000)s fn(r)s fg (\000)s ft(2)p fn(k)q ft(.)18 b(\001\010)13 b(=)g(\()p fn(c)1415 2559 y ff (0)1415 2588 y fe(j)1435 2576 y ft(+)r(\(2)p fn(r)s fg(\000)s fn(c)1595 2559 y ff(0)1595 2587 y fe(e)1613 2576 y ft(\)\))q fg(\000)s ft(\(\(2)p fn(r)r fg (\000)s fn(c)1828 2583 y fe(j)1846 2576 y ft(\))r(+)323 2632 y(\(2)p fn(r)r fg (\000)s fn(c)445 2639 y fe(e)463 2632 y ft(\)\))f(=)h(0)q(+)s(\(2)p fn(r)r fg (\000)r ft(\()p fn(d)r fg(\000)r fn(x)p ft(\)\))q fg(\000)r ft(\(2)p fn(r)s fg (\000)r ft(\()p fn(r)r fg(\000)s fn(x)p ft(\)\))q fg(\000)r ft(\(2)p fn(r)r fg (\000)s ft(0\))f(=)h(2)p fn(r)r fg(\000)s fn(d)q ft(+)s fn(x)q fg(\000)s ft (2)p fn(r)r ft(+)s fn(r)r fg(\000)s fn(x)r fg(\000)r ft(2)p fn(r)g ft(=)323 2689 y fg(\000)p fn(r)e fg(\000)e fn(d)p ft(.)19 b(Since)e fn(k)c fg(\024)g fn (d)p ft(,)i(w)n(e)g(ha)o(v)n(e)g(\001\010)e(=)g fg(\000)p fn(r)d fg(\000)g fn (d)i ft(=)h fn(d)c fg(\000)g fn(r)h fg(\000)g ft(2)p fn(d)i fg(\024)h fn(d)c fg(\000)h fn(r)g fg(\000)f ft(2)p fn(k)16 b ft(as)e(w)o(as)g(to)323 2745 y (b)r(e)h(sho)o(wn.)p eop %%Page: 61 72 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(61)0 195 y(A)17 b(request)f(whose)g(length)i (is)f(greater)e(than)h(r)h(ma)n(y)f(cause)h(more)f(than)h(one)f(replication.) 26 b(Since)18 b(these)e(repli-)0 252 y(cations)g(o)q(ccur)h(in)g(sequence,)g (the)g(ab)q(o)o(v)n(e)g(analysis)g(can)f(b)r(e)g(applied)i(b)o(y)e(setting)h (the)f(request)g(length)h(\()p fn(d)p ft(\))e(for)0 308 y(subsequent)i(replic\ ations)h(to)f(the)g(previous)h(length)g(reduced)g(b)o(y)f(the)g(minimum)g(len\ gth)h(required)g(to)f(cause)0 364 y(the)e(previous)h(replication.)71 421 y (The)11 b(remaining)i(actions)f(inv)n(olv)o(e)g(satisfying)g(the)g(request.) 19 b(W)l(e)11 b(pair)h(o\013)f(the)h(corresp)q(onding)h(lo)q(cal)f(and/or)0 477 y(remote)17 b(supply)h(actions)f(for)g(a)g(single)i(request)e(and)g(deal) h(with)g(them)f(as)g(a)g(pair)g(pro)o(vided)h(that)f(they)g(w)o(ere)0 534 y (not)j(dealt)h(with)f(in)h(the)g(previous)g(case.)35 b(Let)20 b fn(r)h ft(and) g fn(s)f ft(resp)r(ectiv)o(ely)h(b)r(e)f(the)h(no)q(des)f(from)g(which)g fg (A)h ft(and)0 590 y fr(R-UT)m(ree)13 b ft(supply)h(the)g(lo)r(cation,)f(and)h (let)g fn(t)g ft(b)q(e)g(the)f(no)r(de)g(to)g(which)h(it)f(is)h(supplied.)22 b (When)14 b(needed,)h(let)f fn(e)f ft(b)r(e)0 647 y(the)i(b)r(oundary)g(no)q (de)h(for)e fr(R-UT)m(ree)h ft(and)g(this)h(request.)k(Then)15 b(there)h(are) f(three)g(cases)g(to)g(consider:)45 741 y fn(r)f ft(=)f fn(s)p ft(:)208 b(If) 19 b fn(r)g ft(=)g fn(s)g ft(=)g fn(t)p ft(,)h(then)f(there)g(are)f(no)h(cost) f(or)g(p)r(oten)n(tial)i(c)o(hanges.)30 b(Otherwise,)20 b(b)r(oth)370 797 y (algorithms)15 b(incur)h(costs)e(of)g fn(\016)893 804 y fe(st)924 797 y ft (,)h(so)f(w)o(e)h(m)n(ust)g(sho)n(w)g(that)f(\001\010)e fg(\024)h fn(\016) 1547 804 y fe(st)1578 797 y ft(.)20 b fn(c)1631 804 y fe(e)1664 797 y ft(incr\ eases)15 b(b)o(y)370 853 y fn(\016)390 860 y fe(st)422 853 y ft(.)k(Because)c (b)r(oth)f(algorithms)g(p)r(erformed)g(a)g(remote)g(supply)m(,)h fn(e)d fg (62)h fn(S)s ft(,)h(so)g(\001\010)e(=)h fn(\016)1857 860 y fe(st)1889 853 y ft (.)45 947 y fn(r)h fg(6)p ft(=)f fn(s;)k(\016)199 954 y fe(r)q(t)244 947 y fn (>)c(\016)312 954 y fe(st)343 947 y ft(:)23 b fg(A)17 b ft(incurs)h(a)f(cost) g(of)g fn(\016)778 954 y fe(r)q(t)809 947 y ft(,)h fr(R-UT)m(ree)e ft(incurs) i(a)f(cost)g(of)g fn(\016)1401 954 y fe(st)1432 947 y ft(,)g(so)g(w)o(e)g(m)n (ust)g(sho)o(w)g(that)370 1004 y(\001\010)k fg(\024)g ft(2)p fn(\016)561 1011 y fe(r)q(t)606 1004 y fg(\000)14 b fn(\016)675 1011 y fe(st)706 1004 y ft(.) 35 b(But)20 b(\001\010)h(=)g fn(\016)1017 1011 y fe(st)1048 1004 y ft(,)g(as) f(in)h(the)f(previous)h(case,)g(so)f(\001\010)h(=)g fn(\016)1814 1011 y fe (st)1866 1004 y ft(=)370 1060 y(2)p fn(\016)413 1067 y fe(st)454 1060 y fg (\000)11 b fn(\016)520 1067 y fe(st)564 1060 y fn(<)i ft(2)p fn(\016)655 1067 y fe(r)q(t)697 1060 y fg(\000)d fn(\016)762 1067 y fe(st)793 1060 y ft(.)45 1154 y fn(r)k fg(6)p ft(=)f fn(s;)k(\016)199 1161 y fe(r)q(t)244 1154 y fn (<)c(\016)312 1161 y fe(st)343 1154 y ft(:)23 b fg(A)17 b ft(incurs)h(a)f(cos\ t)g(of)g fn(\016)778 1161 y fe(r)q(t)809 1154 y ft(,)h fr(R-UT)m(ree)e ft(inc\ urs)i(a)f(cost)g(of)g fn(\016)1401 1161 y fe(st)1432 1154 y ft(,)g(so)g(w)o (e)g(m)n(ust)g(sho)o(w)g(that)370 1210 y(\001\010)i fg(\024)h ft(2)p fn(\016) 558 1217 y fe(r)q(t)603 1210 y fg(\000)13 b fn(\016)671 1217 y fe(st)722 1210 y ft(=)20 b fn(\016)797 1217 y fe(r)q(t)841 1210 y fg(\000)14 b fn(\016)910 1217 y fe(r)q(s)945 1210 y ft(.)32 b fn(c)1010 1217 y fe(e)1048 1210 y ft(inc\ reases)20 b(b)o(y)f fn(\016)1329 1217 y fe(st)1360 1210 y ft(.)32 b(Because) 20 b(the)g(distance)g(for)370 1267 y fr(R-UT)m(ree)14 b ft(\()p fn(\016)621 1274 y fe(st)652 1267 y ft(\))g(is)h(larger)g(than)f(the)h(distance)h(for)e fg (A)p ft(,)g(it)h(follo)o(ws)g(that)f fn(e)e fg(2)h fn(S)s ft(.)19 b(Hence)370 1323 y(\001\010)13 b(=)g fg(\000)p fn(\016)557 1330 y fe(st)601 1323 y fg(\ \024)g ft(2)p fn(\016)692 1330 y fe(r)q(t)734 1323 y fg(\000)d fn(\016)799 1330 y fe(st)830 1323 y ft(.)1790 1417 y fr(Q.E.D.)0 1560 y fk(7.4)70 b(Migra\ tion)0 1662 y ft(In)16 b(the)g(migration)f(problem,)h(w)o(e)f(m)o(ust)g(maint\ ain)g(exactly)h(one)g(cop)o(y)f(of)g(the)h(page)f(in)i(the)e(net)o(w)o(ork,)f (and)i(w)o(e)0 1718 y(m)o(ust)h(decide)j(on-line)f(where)f(to)f(k)o(eep)h(it.) 28 b(As)18 b(for)f(the)h(replication)h(problem,)g(let)f(the)g(cost)f(of)g(sat\ isfying)h(a)0 1775 y(request)d(from)e(a)i(no)q(de)g(that)f(do)q(es)h(not)f (ha)o(v)n(e)h(the)g(page)f(b)r(e)h(the)f(distance)i(b)q(et)o(w)n(een)g(the)e (requesting)h(no)r(de)g(and)0 1831 y(the)h(no)q(de)g(with)g(the)g(page.)22 b (If)16 b(these)g(no)q(des)g(are)g fn(i)f ft(and)h fn(j)r ft(,)g(then)g(this)g (distance)h(is)f(denoted)h(b)n(y)f fn(\016)1709 1838 y fe(ij)1740 1831 y ft (.)21 b(The)16 b(cost)0 1888 y(of)f(mo)n(ving)h(the)f(page)g(from)g fn(i)f ft (to)h fn(j)i ft(is)f(then)g(giv)o(en)f(b)o(y)h fn(m\016)1017 1895 y fe(ij) 1047 1888 y ft(.)71 1944 y(Before)d(presen)o(ting)h(our)g(algorithms,)f(w)o (e)g(sho)o(w)g(that)g(three)h(is)g(the)g(b)q(est)f(comp)r(etitiv)o(e)h(factor) f(that)f(can)i(b)r(e)0 2001 y(ac)o(hiev)o(ed)i(for)f(this)g(problem.)0 2122 y fp(7.4.1)55 b(Lo)n(w)o(er)18 b(Bound)0 2208 y ft(This)12 b(section)g(presen)o (ts)f(our)g(result)h(that)e(the)i(b)q(est)f(p)r(ossible)h(comp)q(etitive)f (factor)g(for)f(an)o(y)h(non-trivial)i(instance)0 2265 y(\(2)f(or)h(more)f (no)r(des\))h(of)f(the)h(migration)g(problem)h(is)g(3.)19 b(The)13 b(situatio\ n)g(surrounding)h(this)g(result)f(is)h(somewhat)0 2321 y(un)o(usual)j(b)r(eca\ use)g(it)f(has)g(b)r(een)h(pro)n(v)o(ed)f(in)i(a)e(previous)h(pap)q(er)f([28) o(],)g(although)h(it)f(is)h(not)f(stated)f(there.)24 b(The)0 2377 y(reason)17 b(for)h(this)g(is)g(that)f(the)h(pro)q(of)g(of)f(one)h(of)g(the)g(theorems)f (in)i(that)e(pap)q(er)h(establishes)h(a)f(more)f(general)0 2434 y(result)f (than)f(claimed)h(in)g(the)g(statemen)n(t)f(of)g(the)g(theorem.)71 2490 y(The) k(theorem)g(in)i(question)f(is)g(Theorem)f(3.3,)g(which)g(establishes)i(a)e (lo)o(w)o(er)g(b)r(ound)h(of)f(3)g(on)g(the)h(com-)0 2547 y(p)r(etitiv)o(e)h (factor)f(for)g(the)h("on-line)h(blo)r(c)o(k)e(reten)o(tion)h(problem)h(in)f (a)g(mo)q(del)g(allowing)g fq(Supplythr)n(ough)h ft(and)0 2603 y fq(Up)n(date\ thr)n(ough)p ft(")c(pro)n(vided)g(that)e(there)h(are)g("at)f(least)h(t)n(w)n (o)g(cac)o(hes".)25 b(This)17 b(problem)h(di\013ers)f(from)f(our)g(mi-)0 2660 y(gration)f(problem)g(in)h(that)e(the)h(page)g(\(cac)o(he)g(blo)r(c)o(k\))g (is)g(p)r(ermitted)g(to)f(b)r(e)h(in)h(more)e(than)h(one)h(place)f(at)g(once,) 0 2716 y(and)h(there)h(is)g(a)e(cost)h(to)g(satisfy)g(certain)g(requests)h (\(WRITE\))e(lo)r(cally)i(if)g(the)f(page)h(\(cac)n(he)g(blo)r(c)o(k\))e(exis\ ts)i(in)0 2773 y(more)e(than)g(one)g(place;)h(these)f(costs)g(represen)o(t)g (the)g(o)o(v)o(erhead)g(of)g(main)o(taining)h(cac)o(he)g(consistency)m(.)p eop %%Page: 62 73 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(62)71 195 y(The)20 b(theorem)g(is)h(pro)n(v)o (ed)g(b)o(y)f(considering)h(t)o(w)n(o)f(cac)o(hes)h(and)f(a)g(single)i(cac)o (he)e(blo)r(c)o(k.)35 b(There)20 b(are)g(four)0 252 y(p)r(ossible)14 b(states) e(for)g(the)i(blo)q(c)o(k;)g(in)g(neither)g(cac)n(he,)g(unique)h(to)d(the)h (\014rst)g(cac)o(he,)g(unique)i(to)d(the)h(second)h(cac)o(he,)0 308 y(and)19 b (in)g(b)q(oth)f(cac)o(hes.)30 b(F)-5 b(or)18 b(an)g(arbitrary)g(algorithm)g fn (A)p ft(,)h(the)g(pro)q(of)f(constructs)g(a)g(sequence)h fn(\033)h ft(consist\ ing)0 364 y(solely)c(of)f(WRITE)h(requests)f(for)g(the)h(cac)o(he)f(blo)r(c)o (k.)20 b(This)c(sequence)h(is)f(a)f("w)n(orst-p)q(ossible")h(sequence)h(for)e fn(A)0 421 y ft(b)r(ecause)h(ev)o(ery)g(access)g(is)h(costly)m(.)22 b(An)17 b (o\013-line)g(algorithm)f fn(H)k ft(is)c(then)h(describ)r(ed)g(which)f(uses)g (lo)r(ok)m(ahead)g(to)0 477 y(pro)q(cess)g fn(\033)h ft(more)e(e\016ciently)g (than)h fn(A)p ft(.)k(The)c(prop)q(erties)g(of)f fn(\033)i ft(and)f(the)f(des\ ign)i(of)e fn(H)j ft(p)r(ermit)e(it)f(to)g(b)r(e)g(sho)o(wn)0 534 y(that)f fn (H)t ft('s)h(total)f(cost)h(is)h(one)f(third)h(that)e(of)h fn(A)p ft('s)g(at) f(in\014nitely)k(man)o(y)d(p)q(oints)f(in)i(the)g(in\014nite)h(sequence)f fn (\033)r ft(.)71 590 y(The)f(result)h(can)f(b)r(e)g(generalized)i(b)r(ecause)f fn(H)i ft(only)e(uses)g(the)f(t)o(w)n(o)g(states)g(in)h(whic)o(h)g(the)f(blo) r(c)o(k)g(is)h(unique)0 647 y(to)k(a)g(single)i(cac)o(he.)36 b(The)21 b(t)n (w)o(o)f(no)q(de)h(migration)f(problem)i(can)e(b)r(e)g(obtained)h(from)f(the) h(t)n(w)o(o)f(no)q(de)h(blo)r(c)o(k)0 703 y(reten)o(tion)h(problem)h(b)o(y)f (restricting)h(the)f(class)h(of)e(algorithms)h(to)g(those)g(which)g(alw)o(a)n (ys)g(k)o(eep)h(the)f(blo)r(c)o(k)0 760 y(presen)o(t)17 b(in)h(exactly)f(one) g(cac)o(he)h(\(i.e.,)e(the)h(page)g(is)g(alw)o(a)o(ys)f(lo)r(cated)h(at)f(exa\ ctly)i(one)f(no)q(de\).)25 b(This)18 b(restricts)0 816 y(the)f(selection)h (of)e fn(A)h ft(to)f(a)h(sub)r(class)g(of)f(the)h(original)h(algorithms.)24 b fn(H)d ft(is)c(in)h(this)f(sub)q(class)h(\(it)e(only)i(uses)f(the)0 873 y(t)n (w)o(o)h(states)g(in)i(whic)o(h)f(the)g(blo)r(c)o(k)f(is)h(unique)h(to)e(a)h (single)h(cac)o(he\),)f(and)g(hence)g(the)g(theorem)f(holds)i(for)e(the)0 929 y(sub)r(class.)k(This)16 b(establishes)h(the)f(factor)e(of)i(3)f(lo)o(w)o(er) g(b)r(ound)h(on)g(the)f(comp)r(etitiv)o(e)h(factor)f(for)g(the)h(migration)0 985 y(problem.)21 b(The)15 b(theorem)g(can)g(b)r(e)g(formally)h(stated)e(as:) 0 1091 y fr(Theorem)j(2)23 b fq(L)m(et)15 b fg(A)h fq(b)n(e)f(any)g(on-line)f (p)n(age)i(migr)m(ation)g(algorithm)g(for)f(a)h(top)n(olo)n(gy)f(with)h(at)f (le)n(ast)g(two)h(no)m(des.)0 1148 y(Then)f(ther)o(e)h(is)g(an)g(in\014nite)e (se)n(quenc)m(e)i(of)h(r)m(e)n(quests)f fn(\033)i fq(such)e(that)h fu(C)1187 1155 y ff(A)1217 1148 y ft(\()p fn(\033)q ft(\()p fn(n)p ft(\)\))12 b fg(\025) h fn(n)p fq(,)k(and)708 1250 y fu(C)744 1257 y ff(A)774 1250 y ft(\()p fn(\ \033)r ft(\()p fn(n)p ft(\)\))12 b fg(\025)h ft(3)d fg(\001)f fu(C)1052 1257 y fb(opt)1113 1250 y ft(\()p fn(\033)q ft(\()p fn(n)p ft(\)\))0 1352 y fq(for) 17 b(in\014nitely)d(many)i(values)g(of)h fn(n)p fq(,)f(wher)n(e)h fn(\033)q ft (\()p fn(n)p ft(\))f fq(denotes)g(the)g(\014rst)g fn(n)h fq(r)m(e)n(quests)f (of)g fn(\033)r fq(.)71 1458 y ft(Karlin)g(et)g(al.[28)o(])f(also)g(pro)o(v)o (es)g(that)g(there)h(is)g(no)f(b)r(est)g(on-line)i(algorithm)f(for)f(this)h (cac)o(hing)g(problem;)g(a)0 1514 y(similar)g(theorem)f(can)h(b)q(e)f(pro)o (v)o(ed)g(for)g(the)g(migration)g(problem.)0 1636 y fp(7.4.2)55 b(Migration) 18 b(on)h(a)g(Complete)e(Graph)0 1721 y ft(Algorithm)f fr(M)g ft(solv)o(es)g (the)g(migration)g(problem)h(on)f(a)f(graph)h(in)h(which)f(the)g(access)g(cos\ t)f(b)r(et)o(w)n(een)i(an)o(y)e(pair)0 1778 y(of)20 b(no)q(des)g(is)g(one,)h (and)f(the)g(mo)o(v)o(e)g(cost)f(b)r(et)n(w)o(een)h(an)o(y)g(pair)g(of)g(no)q (des)g(is)h(an)f(in)o(teger)g fn(m)p ft(.)34 b(The)20 b(algorithm)0 1834 y (main)o(tains)f(an)f(in)o(tegral)g(coun)o(t)g(on)g(eac)o(h)g(no)r(de.)29 b (These)18 b(counts)f(are)h(initially)j(zero,)d(and)h(alw)o(a)n(ys)f(lie)i(in) f(the)0 1891 y(range)c([0)p fn(;)6 b ft(2)p fn(m)p ft(].)20 b(Let)15 b fn(c) 389 1898 y fe(i)418 1891 y ft(denote)g(the)h(coun)o(t)f(on)g(no)q(de)h fn(i)p ft(.)114 1997 y fr(Algorithm)21 b(M)p ft(:)d(Initialize)j(all)e(coun)o(ts)f fn (c)874 2004 y fe(i)906 1997 y ft(to)g(zero.)29 b(A)19 b(request)f(from)g(v)n (ertex)h fn(v)h ft(is)e(pro)r(cessed)114 2053 y(as)f(follo)o(ws:)24 b(If)18 b (v)n(ertex)g fn(v)h ft(has)e(the)g(page,)h(then)g(the)f(request)g(is)h(free)g (and)f(nothing)h(happ)r(ens.)27 b(If)114 2110 y(v)n(ertex)16 b fn(v)i ft(do)q (es)e(not)g(ha)o(v)o(e)g(the)g(page)g(and)g fn(c)878 2117 y fe(v)912 2110 y fn (<)f ft(2)p fn(m)p ft(,)g(then)i(increment)f fn(c)1390 2117 y fe(v)1426 2110 y ft(and)g(decrement)f(some)114 2166 y(other)g(non-zero)h(coun)o(t,)g(if)g(ther\ e)g(is)h(one.)22 b(If)16 b(v)o(ertex)f fn(v)j ft(do)q(es)e(not)g(ha)n(v)o(e)g (the)g(page)g(and)g fn(c)1675 2173 y fe(v)1709 2166 y ft(=)e(2)p fn(m)p ft (,)114 2223 y(then)h(mo)o(v)n(e)h(the)f(page)g(to)f(v)o(ertex)h fn(v)i ft(and) e(set)g fn(c)930 2230 y fe(v)966 2223 y ft(to)f(zero.)71 2329 y(The)h(follo)o (wing)h(lemma)f(establishes)i(an)e(imp)r(ortan)n(t)g(in)o(v)n(arian)o(t)g(sat\ is\014ed)g(b)o(y)g(algorithm)h fr(M)p ft(.)0 2435 y fr(Lemma)h(1)234 2402 y fd (P)278 2446 y fe(i)300 2435 y fn(c)320 2442 y fe(i)346 2435 y fg(\024)c ft (2)p fn(m)j fq(after)h(the)f(c)n(ompletion)g(of)g(e)n(ach)h(op)n(er)m(ation.) 71 2540 y fr(Proof:)26 b ft(By)18 b(induction.)31 b(All)19 b(the)g(coun)o(ts) f(are)f(initially)k(zero,)e(therefore)f(the)g(initial)i(sum)e(is)h(zero.)29 b (An)0 2597 y(op)q(eration)18 b(that)g(increments)f(a)h(coun)o(ter)g(increment\ s)f(the)i(total)e(sum)h(only)g(if)h(all)g(other)f(coun)o(ters)f(are)h(zero)0 2653 y(\(else)g(a)f(non-zero)g(coun)o(ter)g(is)g(decremented,)g(and)h(the)f (sum)g(is)h(unc)o(hanged\).)26 b(A)o(ttempting)17 b(to)f(increment)h(a)0 2710 y(coun)o(ter)d(whose)g(v)n(alue)h(is)f(2)p fn(m)g ft(resets)g(it)h(\(and)f (therefore)g(the)g(sum\))g(to)g(zero.)19 b(Hence)c(the)f(sum)h(m)n(ust)f(b)r (e)g fg(\024)f ft(2)p fn(m)0 2766 y ft(after)h(eac)o(h)i(op)q(eration.)1379 b fr(Q.E.D.)71 2823 y ft(This)15 b(Lemma)h(has)f(three)g(imp)r(ortan)n(t)g(coro\ llaries:)p eop %%Page: 63 74 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(63)56 195 y(1.)22 b(All)16 b(coun)o(ter)f(v)n (alues)g(are)g(b)r(ounded)h(b)o(y)f(0)g(and)g(2)p fn(m)p ft(.)56 289 y(2.)22 b (Before)14 b(the)h(page)f(is)h(mo)n(v)o(ed,)f(the)h(coun)o(ter)f(in)h(the)g (destination)g(v)o(ertex)f(is)h(2)p fn(m)p ft(,)f(and)h(all)g(other)f(coun)o (ters)114 345 y(are)h(zero.)56 439 y(3.)22 b(After)14 b(the)i(page)f(is)h(mo) n(v)o(ed,)f(all)h(of)f(the)g(coun)o(ters)g(are)g(zero.)71 533 y(The)g(follo)o (wing)h(theorem)f(establishes)h(that)f(algorithm)g fr(M)g ft(is)g(strongly)g (comp)r(etitiv)o(e.)0 639 y fr(Theorem)i(3)23 b fq(A)n(lgorithm)c fr(M)e fq (is)g(str)n(ongly)g(3-c)n(omp)o(etitive)g(for)h(the)h(migr)m(ation)f(pr)n(obl\ em.)26 b(In)17 b(p)n(articular,)i(for)0 696 y(any)d(se)m(quenc)n(e)g fn(\033) i fq(of)e(r)n(e)n(quests)f(and)i(any)f(on-line)f(or)i(o\013-line)e(algorithm) i fg(A)781 798 y fu(C)817 805 y fb(M)858 798 y ft(\()p fn(\033)q ft(\))12 b fg (\024)h ft(3)d fg(\001)g fu(C)1072 805 y ff(A)1103 798 y ft(\()p fn(\033)q ft (\))0 900 y fq(under)17 b(the)f(assumption)g(that)h fg(A)g fq(and)f fr(M)g fq (start)g(in)g(the)h(same)f(state.)71 1006 y fr(Proof:)j ft(In)14 b(analyzing) h(the)e(p)r(erformance)g(of)g(these)h(algorithms)f(during)h(a)g(sequence)g (of)f(requests,)h(w)n(e)g(can)0 1063 y(partition)h(the)g(things)h(that)e(happ) r(en)h(into)f(a)h(sequence)h(of)e fq(events)k ft(of)c(three)h(t)o(yp)q(es:)20 b(algorithm)15 b fr(M)g ft(mo)n(v)o(es)g(the)0 1119 y(page,)i(algorithm)g fg (A)h ft(mo)n(v)o(es)f(the)g(page,)h(and)f(a)g(request)g(is)h(satis\014ed)f (b)o(y)h(b)q(oth)f(algorithms.)26 b(W)l(e)17 b(will)i(giv)o(e)e(a)0 1176 y (non-negativ)o(e)e(\(initially)i(zero\))d(p)r(oten)n(tial)i(function)f(\010,) f(suc)o(h)h(that)f(the)h(follo)o(wing)g(inequalit)q(y)f(is)h(satis\014ed)g (for)0 1232 y(ev)o(ery)g(t)n(yp)r(e)g(of)g(ev)o(en)o(t:)743 1289 y(3)10 b fg (\001)g ft(\001)p fu(C)872 1296 y ff(A)913 1289 y fg(\000)g ft(\001)p fu(C) 1032 1296 y fb(M)1085 1289 y fg(\025)j ft(\001\010)0 1372 y(The)k(\001)f(indi\ cates)h(the)g(c)o(hange)f(in)h(the)g(v)m(alue)g(of)f(the)h(parameter)e(as)h (a)g(result)h(of)f(the)g(ev)o(en)o(t.)23 b(Summing)17 b(this)0 1428 y(form)n (ula)g(o)o(v)n(er)g(all)g(the)g(ev)n(ents,)f(and)g(using)h(the)g(fact)f(that) g(the)g(initial)j(p)q(oten)o(tial)e(is)g(no)f(more)g(than)g(the)h(\014nal)0 1485 y(p)r(oten)n(tial)f(giv)o(es)f(the)h(theorem.)j(It)c(remains)h(to)f(v)n (erify)h(the)f(ab)q(o)o(v)o(e)g(inequalit)q(y)l(.)71 1541 y(Let)f(the)f(lo)r (cation)h(of)f fr(M)p ft('s)g(page)h(b)q(e)g fn(s)p ft(,)g(and)g(the)g(lo)q (cation)g(of)g fg(A)p ft('s)f(page)h(b)q(e)g fn(t)p ft(.)20 b(The)14 b(p)r (oten)n(tial)h(function)f(w)o(e)0 1598 y(will)j(use)e(is:)605 1676 y(\010)d (=)698 1604 y fd(\()752 1647 y ft(2)783 1615 y fd(P)826 1658 y fe(i)848 1647 y fn(c)868 1654 y fe(i)1177 1647 y ft(if)j fn(s)e ft(=)g fn(t)752 1703 y ft(3)p fn(m)d fg(\000)g fn(c)890 1710 y fe(t)915 1703 y ft(+)965 1685 y fj(1)965 1692 y 18 2 v 27 x(2)996 1671 y fd(P)1039 1715 y fe(i)p ff(6)p fj(=)p fe(t)1101 1703 y fn(c)1121 1710 y fe(i)1177 1703 y ft(if)15 b fn(s)e fg(6)p ft(=)g fn (t)71 1793 y ft(Consider)k(the)h(ev)o(en)o(t)f(in)h(whic)o(h)g(algorithm)f fr (M)g ft(mo)n(v)o(es)g(the)h(page)f(from)f fn(s)i ft(to)e fn(s)1480 1776 y ff (0)1492 1793 y ft(.)26 b(The)17 b(cost)g(to)g fr(M)g ft(is)g fn(m)p ft(,)0 1849 y(and)i(the)f(cost)g(to)g fg(A)g ft(is)h(0,)g(so)f(w)o(e)g(need)h(to)f (sho)o(w)g(that)g(\001\010)f fg(\024)i(\000)p fn(m)p ft(.)30 b(The)18 b(corol\ laries)i(ab)q(o)n(v)o(e)f(simplify)h(the)0 1905 y(calculation)d(of)e(\001\010\ .)k(There)d(are)e(three)i(cases:)45 1999 y fn(s)66 1983 y ff(0)91 1999 y ft (=)d fn(t)p ft(:)64 b(\001\010)13 b(=)g(2)394 1967 y fd(P)445 1999 y ft(0)d fg (\000)h ft(\(3)p fn(m)e fg(\000)h ft(2)p fn(m)g ft(+)783 1981 y fj(1)783 1988 y 18 2 v 27 x(2)813 1967 y fd(P)864 1999 y ft(0\))i(=)h fg(\000)p fn(m)p ft (.)45 2093 y fn(s)g ft(=)g fn(t)p ft(:)76 b(\001\010)13 b(=)g(\(3)p fn(m)c fg (\000)h ft(0)g(+)583 2075 y fj(1)583 2082 y 18 2 v 27 x(2)613 2061 y fd(P)664 2093 y ft(0\))g fg(\000)g ft(2\(2)p fn(m)p ft(\))i(=)h fg(\000)p fn(m)p ft (.)45 2187 y fn(s;)8 b(s)108 2170 y ff(0)133 2187 y fg(6)p ft(=)13 b fn(t)p ft (:)22 b(\001\010)13 b(=)g(\(3)p fn(m)c fg(\000)h ft(0)g(+)583 2169 y fj(1)583 2176 y 18 2 v 27 x(2)613 2155 y fd(P)664 2187 y ft(0\))g fg(\000)g ft(\(3)p fn (m)g fg(\000)g ft(0)g(+)979 2169 y fj(1)979 2176 y 18 2 v 27 x(2)1002 2187 y ft(\(2)p fn(m)p ft(\)\))h(=)i fg(\000)p fn(m)p ft(.)71 2281 y(Consider)i(the) g(ev)o(en)o(t)g(in)g(which)g(algorithm)g fg(A)g ft(mo)o(v)n(es)g(the)g(page)g (from)f fn(t)i ft(to)e fn(t)1427 2264 y ff(0)1439 2281 y ft(.)20 b(The)15 b (cost)f(to)g fr(M)h ft(is)g(0,)g(and)0 2337 y(the)g(cost)g(to)g fg(A)g ft(is) h fn(m)p ft(,)e(so)h(w)o(e)g(need)h(to)f(sho)n(w)g(that)g(\001\010)d fg(\024) h ft(3)p fn(m)p ft(.)20 b(Again,)15 b(there)g(are)g(three)g(cases:)45 2436 y fn(t)61 2420 y ff(0)86 2436 y ft(=)e fn(s)p ft(:)59 b(\001\010)21 b(=)h(2)406 2404 y fd(P)450 2448 y fe(i)471 2436 y fn(c)491 2443 y fe(i)519 2436 y fg(\ \000)567 2389 y fd(\020)592 2436 y ft(3)p fn(m)10 b fg(\000)g fn(c)730 2443 y fe(t)755 2436 y ft(+)805 2418 y fj(1)805 2425 y 18 2 v 27 x(2)836 2404 y fd (P)879 2448 y fe(i)p ff(6)p fj(=)p fe(t)941 2436 y fn(c)961 2443 y fe(i)975 2389 y fd(\021)1021 2436 y ft(=)21 b(3)p fn(c)1120 2443 y fe(t)1148 2436 y ft (+)1202 2418 y fj(3)1202 2425 y 18 2 v 27 x(2)1232 2404 y fd(P)1276 2448 y fe (i)p ff(6)p fj(=)p fe(t)1338 2436 y fn(c)1358 2443 y fe(i)1385 2436 y fg(\000) 14 b ft(3)p fn(m)20 b fg(\024)i ft(6)p fn(m)13 b fg(\000)h ft(3)p fn(m)20 b fg (\024)i ft(3)p fn(m)227 2498 y ft(b)r(ecause)16 b(the)f(coun)o(ts)g(are)g(b)q (ounded)h(b)o(y)f(0)g(and)h(2)p fn(m)p ft(.)45 2597 y fn(t)d ft(=)g fn(s)p ft (:)71 b(\001\010)17 b(=)368 2550 y fd(\020)393 2597 y ft(3)p fn(m)10 b fg(\ \000)g fn(c)531 2605 y fe(t)544 2595 y fa(0)567 2597 y ft(+)617 2579 y fj(1) 617 2586 y 18 2 v 27 x(2)647 2565 y fd(P)691 2608 y fe(i)p ff(6)p fj(=)p fe (t)743 2599 y fa(0)764 2597 y fn(c)784 2604 y fe(i)798 2550 y fd(\021)835 2597 y fg(\000)i ft(2)912 2565 y fd(P)956 2608 y fe(i)978 2597 y fn(c)998 2604 y fe (i)1029 2597 y ft(=)17 b(3)p fn(m)12 b fg(\000)g ft(3)p fn(c)1246 2605 y fe (t)1259 2595 y fa(0)1284 2597 y fg(\000)1336 2579 y fj(3)1336 2586 y 18 2 v 27 x(2)1366 2565 y fd(P)1410 2608 y fe(i)p ff(6)p fj(=)p fe(t)1462 2599 y fa(0) 1483 2597 y fn(c)1503 2604 y fe(i)1534 2597 y fg(\024)18 b ft(3)p fn(m)f ft (b)r(ecause)h(the)227 2653 y(counts)c(are)h(non-negative.)45 2753 y fn(t;)8 b (t)98 2736 y ff(0)123 2753 y fg(6)p ft(=)13 b fn(s)p ft(:)22 b(\001\010)d(=) 371 2705 y fd(\020)396 2753 y ft(3)p fn(m)9 b fg(\000)i fn(c)534 2760 y fe (t)547 2751 y fa(0)569 2753 y ft(+)620 2735 y fj(1)620 2742 y 18 2 v 26 x(2) 650 2720 y fd(P)694 2764 y fe(i)p ff(6)p fj(=)p fe(t)746 2755 y fa(0)767 2753 y fn(c)787 2760 y fe(i)801 2705 y fd(\021)838 2753 y fg(\000)886 2705 y fd (\020)911 2753 y ft(3)p fn(m)e fg(\000)i fn(c)1049 2760 y fe(t)1073 2753 y ft (+)1124 2735 y fj(1)1124 2742 y 18 2 v 26 x(2)1154 2720 y fd(P)1198 2764 y fe (i)p ff(6)p fj(=)p fe(t)1260 2753 y fn(c)1280 2760 y fe(i)1294 2705 y fd(\021) 1337 2753 y ft(=)1396 2735 y fj(3)1396 2742 y 18 2 v 26 x(2)1419 2753 y ft (\()p fn(c)1457 2760 y fe(t)1483 2753 y fg(\000)i fn(c)1551 2760 y fe(t)1564 2751 y fa(0)1577 2753 y ft(\))18 b fg(\024)h ft(3)p fn(m)f ft(b)r(ecause)227 2814 y(the)e(coun)o(ts)f(are)f(b)r(ounded)i(b)o(y)f(0)g(and)g(2)p fn(m)p ft (.)p eop %%Page: 64 75 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(64)71 195 y(Consider)17 b(an)h(ev)o(en)o(t)f (that)f(is)i(an)g(access)f(op)q(eration.)27 b(Let)17 b fn(r)h ft(b)r(e)f(the) h(requested)f(v)o(ertex.)26 b(If)18 b fn(s)e ft(=)h fn(t)p ft(,)h(there)0 252 y(are)d(t)n(w)o(o)g(cases:)45 350 y fn(r)f ft(=)f fn(s)g ft(=)g fn(t)p ft(:) 23 b(There)15 b(is)h(no)f(cost,)f(and)h(no)h(c)o(hange)f(to)f(\010.)45 442 y fn(r)g fg(6)p ft(=)f fn(s)g ft(=)g fn(t)p ft(:)23 b(Both)12 b(algorithms)g (incur)i(a)e(cost)g(of)g(1,)g(so)h(w)n(e)g(m)n(ust)g(sho)n(w)g(\001\010)f fg (\024)h ft(2.)19 b(The)12 b(coun)o(ter)h(increment)262 499 y(alw)n(a)o(ys)j (adds)g(2)g(to)f(\010.)22 b(If)16 b(another)g(coun)o(ter)g(is)g(decremented,) g(2)f(is)i(subtracted)f(from)f(\010,)h(so)262 555 y(\001\010)c fg(2)h(f)p ft (0)p fn(;)6 b ft(2)p fg(g)p ft(.)71 654 y(If)15 b fn(s)e fg(6)p ft(=)g fn(t)j ft(there)f(are)g(three)g(cases:)45 742 y fn(r)f ft(=)f fn(s)p ft(:)59 b(The) 14 b(cost)g(to)f fg(A)i ft(is)f(1)g(and)g(the)h(cost)e(to)h fr(M)f ft(is)i (0,)f(so)f(w)o(e)h(m)o(ust)g(sho)n(w)g(\001\010)e fg(\024)h ft(3.)20 b(If)14 b (no)g(decrement)221 799 y(o)q(ccurs,)k(\001\010)e(=)h(0.)26 b(If)18 b(the)f (coun)o(ter)g fn(c)891 806 y fe(t)923 799 y ft(is)h(decremented,)f(\001\010)f (=)h(1.)26 b(Otherwise,)19 b(some)e(other)221 855 y(coun)o(ter)e(is)h(decreme\ nted,)e(and)i(\001\010)c(=)h fg(\000)966 837 y fj(1)966 844 y 18 2 v 27 x(2) 989 855 y ft(.)45 947 y fn(r)h ft(=)f fn(t)p ft(:)64 b(The)23 b(cost)f(to)g fg (A)h ft(is)h(0)e(and)h(the)g(cost)f(to)g fr(M)g ft(is)h(1,)h(so)f(w)n(e)g(m)o (ust)f(sho)o(w)g(\001\010)j fg(\024)h(\000)p ft(1.)42 b(The)221 1003 y(coun)o (ter)20 b(incremen)q(t)g(alw)o(a)n(ys)h(subtracts)f(1)g(from)g(\010.)35 b(If) 21 b(another)f(counter)g(is)h(decremented,)221 1060 y(then)16 b(\001\010)c (=)h fg(\000)496 1042 y fj(3)496 1049 y 18 2 v 27 x(2)519 1060 y ft(.)20 b (Otherwise,)15 b(\001\010)e(=)g fg(\000)p ft(1.)45 1152 y fn(r)h fg(6)p ft (=)f fn(s;)7 b(t)p ft(:)23 b(The)18 b(cost)e(to)h fg(A)g ft(is)h(1)f(and)g (the)h(cost)e(to)h fr(M)g ft(is)g(1,)g(so)g(w)o(e)g(m)o(ust)g(sho)n(w)g(\001\ \010)f fg(\024)h ft(2.)25 b(The)18 b(coun)o(ter)221 1208 y(increment)k(alw)o (a)o(ys)g(adds)710 1190 y fj(1)710 1197 y 18 2 v 27 x(2)755 1208 y ft(to)f (\010.)41 b(If)23 b(no)f(decrement)g(o)q(ccurs,)i(then)e(\001\010)i(=)1685 1190 y fj(1)1685 1197 y 18 2 v 27 x(2)1708 1208 y ft(.)41 b(If)22 b fn(c)1834 1215 y fe(t)1871 1208 y ft(is)221 1265 y(decremented,)15 b(then)g(\001\010)e (=)738 1247 y fj(3)738 1254 y 18 2 v 26 x(2)760 1265 y ft(.)20 b(Else,)15 b (some)g(other)g(coun)o(ter)g(is)h(decremented,)f(and)g(\001\010)d(=)h(0.)71 1353 y(This)i(completes)h(the)f(case)h(analysis.)1790 1409 y fr(Q.E.D.)0 1530 y fp(7.4.3)55 b(Migrations)18 b(on)h(an)g(Arbitrary)f(T)l(ree)0 1616 y ft(W)l (e)e(no)o(w)g(consider)h(the)f(migration)g(problem)h(when)g(the)f(distance)h (matrix)e(has)h(the)h(prop)q(ert)n(y)f(that)g(it)g(is)h(the)0 1672 y(metric)f (of)f(a)h(tree.)21 b(That)15 b(is,)h(the)f(access)h(cost)f(matrix)h fg(f)p fn (\016)1015 1679 y fe(ij)1045 1672 y fg(g)f ft(has)h(the)g(prop)q(ert)n(y)g (that)f(there)h(exists)g(a)f(tree)g fn(T)6 b ft(,)0 1729 y(with)16 b(lengths) f(on)g(its)h(edges)f(suc)o(h)h(that)e(the)h(distance)h(b)r(et)o(w)n(een)g fn (i)f ft(and)g fn(j)j ft(in)e fn(T)21 b ft(is)15 b fn(\016)1462 1736 y fe(ij) 1493 1729 y ft(.)k(W)l(e)d(also)f(let)h fn(m)f ft(denote)0 1785 y(the)g(ratio) g(of)g(the)g(mo)n(v)o(e)g(cost)g(to)g(the)g(access)g(cost)g(b)r(et)n(w)o(een) h(an)n(y)f(pair)h(of)f(no)q(des.)71 1842 y(Algorithm)e fr(M-T)l(ree)g ft(is)h (a)f(3-comp)q(etitive)h(algorithm)f(for)g(this)h(problem.)20 b(Lik)o(e)14 b (algorithm)f fr(M)p ft(,)g(this)h(algo-)0 1898 y(rithm)g(main)o(tains)f(a)g (coun)o(t)g fn(c)510 1905 y fe(i)537 1898 y ft(on)h(eac)n(h)g(v)o(ertex)f fn (i)p ft(,)g(and)g(the)h(v)n(ertices)g(comp)r(ete)f(for)g(the)g(page)g(b)o(y)g (incremen)q(ting)0 1955 y(and)k(decremen)o(ting)g(the)f(counts.)23 b(These)16 b(coun)o(ts)g(are)g(initially)k(zero,)c(and)g(alw)o(a)o(ys)g(lie)i(in)f(the)f (range)g([0)p fn(;)7 b ft(2)p fn(m)p ft(].)0 2011 y(Algorithm)16 b fr(M-T)l (ree)e ft(also)h(mak)o(es)g(use)h(of)e(the)i(underlying)h(tree)e fn(T)6 b ft (.)114 2110 y fr(Algorithm)15 b(M-T)l(ree:)j ft(Initialize)e(all)e(coun)o(ts) f fn(c)974 2117 y fe(i)1001 2110 y ft(to)f(zero.)19 b(Let)13 b fn(s)h ft(b)q (e)f(the)h(v)n(ertex)f(with)h(the)f(page.)114 2167 y(A)k(request)g(from)g(v)o (ertex)g fn(r)h ft(is)g(pro)q(cessed)g(as)f(follows:)24 b(If)17 b fn(r)g ft (=)g fn(s)p ft(,)h(then)f(the)h(access)f(is)h(free,)g(and)114 2223 y(the)h (algorithm)g(do)q(es)g(nothing.)33 b(Otherwise,)20 b(the)f(access)h(is)f(acco\ mplished,)j(some)d(coun)o(ts)f(are)114 2279 y(incremented,)d(some)g(are)f(dec\ remented,)h(and)h(\014nally)g(the)f(page)g(ma)o(y)g(b)q(e)h(mo)n(v)o(ed.)114 2353 y(Let)j fn(P)25 b ft(b)q(e)19 b(the)g(path)g(in)g fn(T)25 b ft(from)18 b fn(s)h ft(to)f fn(r)q ft(.)30 b(The)19 b(coun)o(ts)f(of)h(the)f(v)o(ertices)h (of)g fn(P)25 b ft(\(except)19 b fn(s)p ft(\))f(are)114 2410 y(incremented.) 28 b(A)18 b fq(p)n(eripher)n(al)h(p)m(ath)j ft(is)d(a)e(maximal)i(path)e(\(on\ e)h(that)f(can't)h(b)q(e)g(extended\))h(that)114 2466 y(starts)c(at)g fn(s)p ft(,)i(con)o(tin)o(ues)g(with)g(v)n(ertices)g(that)f(ha)o(v)n(e)h(non-zero)g (coun)o(ts)f(\(using)h(only)f(edges)h(of)f fn(T)6 b ft(\),)114 2523 y(and)15 b (deviates)g(from)f fn(P)22 b ft(as)14 b(so)q(on)h(as)f(it)i(can.)k(The)15 b (coun)o(ts)f(of)h(the)g(v)o(ertices)g(on)g(a)f(p)r(eripheral)i(path)114 2579 y (but)f(not)g(on)g fn(P)22 b ft(are)14 b(decremented.)114 2653 y(Finally)m(,)j (if)h(an)n(y)f(neighb)r(or)f(in)i fn(T)23 b ft(of)16 b(the)h(v)o(ertex)g(with) g(the)g(page)g(has)f(a)h(coun)o(t)g(of)f(2)p fn(m)p ft(,)h(then)g(the)114 2710 y(page)e(is)g(mo)o(v)n(ed)h(to)f(that)f(neighb)q(or,)h(and)g(the)g(count)f (on)i(the)f(new)g(page)g(lo)r(cation)g(is)h(set)f(to)g(zero.)114 2766 y(This) i(pro)q(cess)h(is)g(rep)q(eated)f(until)h(no)f(neighb)q(or)g(of)g(the)g(v)o (ertex)g(with)g(the)h(page)f(has)g(a)g(coun)o(t)g(of)114 2823 y(2)p fn(m)p ft (.)p eop %%Page: 65 76 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(65)71 195 y(It)15 b(will)i(b)r(e)f(con)o(v)n (enien)q(t)f(to)g(think)h(of)f(the)h(v)n(ertices)h(as)e(forming)g(a)g(ro)q (oted)h(tree,)f(with)h(the)f(lo)r(cation)h(of)f(the)0 252 y(page)h fn(s)g ft (b)q(eing)h(the)f(ro)q(ot.)21 b(This)c(de\014nes)g(the)f(c)o(hildren)h(and)g (paren)o(t)e(of)h(eac)n(h)h(no)q(de.)22 b(The)16 b(coun)o(ts)g(main)o(tained) 0 308 y(b)o(y)f(algorithm)g fr(M-T)l(ree)g ft(satisfy)g(the)g(following)g(inv) m(arian)o(ts:)68 402 y fg(\017)23 b ft(The)15 b(coun)o(ter)g(of)g(the)g(v)o (ertex)g(with)g(the)h(page)f(is)g(zero.)68 496 y fg(\017)23 b ft(The)15 b(sum) g(of)g(the)g(counters)f(adjacen)o(t)h(to)g fn(s)g ft(is)h(at)e(most)h(2)p fn (m)p ft(.)68 589 y fg(\017)23 b ft(A)n(t)15 b(a)g(v)o(ertex)g fn(v)i ft(other) e(than)g fn(s)p ft(,)g(the)g(sum)g(of)g(the)g(coun)o(ts)g(of)g(the)g(c)o(hild\ ren)i(of)e fn(v)i ft(is)f(at)e(most)h fn(c)1742 596 y fe(v)1762 589 y ft(.)0 683 y(The)g(pro)q(ofs)g(of)g(these)g(inv)m(arian)o(ts)g(are)g(similar)h(to)e (those)h(of)g(Lemma)g(1,)g(and)g(are)g(omitted.)20 b(These)15 b(inv)m(arian)o (ts)0 740 y(ha)o(v)n(e)h(sev)o(eral)f(corollaries:)68 834 y fg(\017)23 b ft (All)16 b(coun)o(ter)f(v)n(alues)g(are)g(b)r(ounded)h(b)o(y)f(0)g(and)g(2)p fn (m)p ft(.)68 927 y fg(\017)23 b ft(When)16 b(the)f(serv)o(er)h(is)g(ab)q(out) f(to)g(b)r(e)g(mo)o(v)n(ed)h(from)f fn(s)h ft(to)f fn(s)1117 911 y ff(0)1129 927 y ft(,)g fn(c)1177 935 y fe(s)1193 926 y fa(0)1220 927 y ft(=)f(2)p fn (m)p ft(,)h(and)g(the)h(coun)o(ts)f(on)h(all)g(v)o(ertices)114 984 y(in)j(the) f(tree)h(on)f(the)g fn(s)h ft(side)h(of)e(edge)g(\()p fn(s;)7 b(s)869 967 y ff (0)881 984 y ft(\))18 b(are)h(zero.)29 b(\(In)19 b(other)f(w)n(ords,)h(if)g (the)f(path)g(from)g fn(v)i ft(to)e fn(s)1935 967 y ff(0)114 1040 y ft(passes) d(through)g fn(s)p ft(,)g(then)g fn(c)595 1047 y fe(v)628 1040 y ft(=)e(0.\)) 71 1134 y(W)-5 b(e)16 b(no)o(w)f(pro)n(v)o(e)g(that)g(algorithm)g fr(M-T)l (ree)f ft(is)i(strongly)f(comp)q(etitive.)0 1240 y fr(Theorem)i(4)23 b fq(L)m (et)18 b fg(A)g fq(b)n(e)f(any)h(on-line)f(or)h(o\013-line)f(algorithm)i(for) f(the)g(migr)n(ation)g(pr)n(oblem)g(on)f(a)h(tr)n(e)n(e.)25 b(F)l(or)0 1297 y (any)16 b(se)m(quenc)n(e)g fn(\033)i fq(of)e(r)n(e)n(quests,)f(algorithm)i fr (M-T)l(ree)f fq(satis\014es:)735 1399 y fu(C)771 1406 y fb(M-T)m(ree)904 1399 y ft(\()p fn(\033)q ft(\))c fg(\024)h ft(3)d fg(\001)g fu(C)1119 1406 y ff (A)1149 1399 y ft(\()p fn(\033)q ft(\))0 1501 y fq(under)17 b(the)f(assumptio\ n)g(that)h fg(A)g fq(and)f fr(M-T)l(ree)g fq(start)g(in)g(the)h(same)f(state.) 71 1607 y fr(Proof:)24 b ft(W)l(e)17 b(again)g(partition)g(what)f(happ)r(ens) h(into)f(a)h(sequence)h(of)e(three)h(t)o(yp)q(es)g(of)g(ev)o(en)o(ts:)23 b (algorithm)0 1664 y fr(M-T)l(ree)18 b ft(mo)n(v)o(es)g(the)g(page)g(from)g (a)g(no)q(de)g(to)g(its)g(neighb)r(or,)g(algorithm)g fg(A)g ft(mo)o(v)n(es)h (the)f(page)g(from)f(a)h(no)q(de)0 1720 y(to)e(its)h(neighb)q(or,)g(and)f(a)h (request)g(is)g(satis\014ed)g(b)o(y)g(b)q(oth)g(algorithms.)24 b(Again,)17 b (w)o(e)g(will)h(giv)o(e)f(a)f(non-negative)0 1777 y(\(initially)h(zero\))c (p)r(oten)o(tial)h(function)i(\010,)d(suc)o(h)i(that)e(the)i(follo)o(wing)g (inequality)g(is)f(satis\014ed)h(for)f(ev)o(ery)g(t)n(yp)r(e)g(of)0 1833 y (ev)o(en)o(t.)697 1890 y(3)c fg(\001)f ft(\001)p fu(C)826 1897 y ff(A)866 1890 y fg(\000)i ft(\001)p fu(C)986 1897 y fb(M-T)m(ree)1131 1890 y fg(\025)i ft (\001\010)0 1973 y(Summing)k(this)g(form)n(ula)f(o)o(v)o(er)g(all)h(the)f(ev) o(en)o(ts,)g(and)g(using)h(the)g(fact)e(that)h(the)g(initial)i(p)r(oten)o(tia\ l)e(is)h(no)f(more)0 2029 y(than)f(the)g(\014nal)h(p)r(oten)n(tial)g(giv)o (es)g(the)f(theorem.)71 2086 y(Let)f(the)h(lo)r(cation)f(of)h fr(M-T)l(ree)p ft('s)e(page)i(b)q(e)g fn(s)g ft(and)f(the)h(lo)r(cation)g(of)f fg(A)p ft('s) g(page)g(b)r(e)h fn(t)p ft(.)20 b(Let)15 b(the)f(path)h(from)f fn(s)0 2142 y ft(to)i fn(t)h ft(b)q(e)g fn(Q)p ft(.)23 b(Let)17 b fn(\016)328 2149 y fe(ab) 381 2142 y ft(b)q(e)g(the)g(distance)g(b)q(et)o(w)o(een)g fn(a)f ft(and)h fn (b)f ft(in)h(the)g(tree,)f(and)h(let)f fn(p)p ft(\()p fn(v)r ft(\))g(denote)h (the)f(paren)o(t)g(of)0 2199 y(v)o(ertex)f fn(v)i ft(in)f(the)f(tree)g(ro)q (oted)g(at)f fn(s)p ft(.)20 b(The)c(p)q(oten)o(tial)g(function)g(w)n(e)g(will) h(use)e(is:)607 2312 y(\010)d(=)h(3)p fn(m\016)783 2319 y fe(st)824 2312 y ft (+)871 2271 y fd(X)870 2365 y fe(i)t(=)-22 b ff(2)o fe(Q)941 2312 y ft(2)p fn (c)984 2319 y fe(i)997 2312 y fn(\016)1017 2321 y fe(ip)p fj(\()p fe(i)p fj (\))1099 2312 y fg(\000)1146 2271 y fd(X)1144 2363 y fe(i)p ff(2)p fe(Q)1215 2312 y fn(c)1235 2319 y fe(i)1249 2312 y fn(\016)1269 2321 y fe(ip)p fj(\()p fe(i)p fj(\))71 2442 y ft(If)12 b(the)f(ev)o(ent)g(is)h(that)f fg(A)h ft(mo)o (v)n(es)g(its)g(page)g(from)f fn(t)h ft(to)f fn(t)984 2426 y ff(0)996 2442 y ft(,)h(then)g(there)g(are)g(t)n(w)n(o)g(cases,)g(dep)r(ending)h(on)f(whether) 0 2499 y(the)k(mo)o(v)o(e)g(is)h(to)n(w)o(ard)f(or)g(a)n(w)o(a)n(y)g(from)g fn (s)h ft(\()p fg(\))d fn(s)j ft(and)g fg(\()e fn(s)p ft(,)h(resp)r(ectiv)o(ely\ \).)24 b(Since)18 b(\001)p fn(C)1509 2506 y ff(A)1553 2499 y ft(=)d fn(m\016) 1663 2506 y fe(tt)1689 2497 y fa(0)1702 2499 y ft(,)h(w)o(e)g(need)h(to)0 2555 y(sho)o(w)e(that)f(\001\010)e fg(\024)h ft(3)p fn(m\016)425 2563 y fe(tt)451 2553 y fa(0)464 2555 y ft(.)45 2649 y fg(\()h fn(s)p ft(:)22 b(The)c(p)q(oten) o(tial)g(undergo)r(es)f(t)o(w)n(o)g(c)o(hanges:)25 b(the)18 b(co)q(e\016cient) f(of)g fn(c)1314 2656 y fe(t)1327 2647 y fa(0)1357 2649 y ft(c)o(hanges)h(fro\ m)e(2)p fn(\016)1680 2656 y fe(tt)1706 2647 y fa(0)1737 2649 y ft(to)g fg(\ \000)p fn(\016)1849 2656 y fe(tt)1875 2647 y fa(0)1889 2649 y ft(,)160 2705 y (and)g(3)p fn(m\016)332 2713 y fe(t)345 2703 y fa(0)355 2713 y fe(;t)395 2705 y ft(is)g(added.)21 b(The)15 b(net)h(c)n(hange)g(is)g(th)n(us)g(\()p fg(\000) p ft(3)p fn(c)1157 2713 y fe(t)1170 2703 y fa(0)1192 2705 y ft(+)11 b(3)p fn (m)p ft(\))p fn(\016)1339 2713 y fe(t)1352 2703 y fa(0)1362 2713 y fe(;t)1387 2705 y ft(.)20 b(\(Here)15 b(w)n(e)h(ha)o(v)n(e)g(made)f(use)160 2762 y(of)g (the)g(symmetry)g(of)g fn(\016)q ft(.\))20 b(Since)d fn(c)766 2769 y fe(t)779 2760 y fa(0)806 2762 y ft(is)f(non-negativ)o(e,)f(this)h(quan)o(tit)o(y)f(is) h(b)q(ounded)g(b)o(y)f(3)p fn(m\016)1780 2769 y fe(t)1793 2760 y fa(0)1804 2769 y fe(;t)1829 2762 y ft(.)p eop %%Page: 66 77 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(66)45 195 y fg(\))14 b fn(s)p ft(:)22 b(This) 16 b(is)g(the)g(rev)o(erse)f(of)h(that)e(ab)r(o)n(v)o(e,)h(and)h(the)g(c)n (hange)g(in)h(p)q(oten)o(tial)f(is)g(\(3)p fn(c)1505 202 y fe(t)1529 195 y fg (\000)11 b ft(3)p fn(m)p ft(\))p fn(\016)1676 203 y fe(t)1689 193 y fa(0)1699 203 y fe(t)1714 195 y ft(.)21 b(Since)c fn(c)1887 202 y fe(t)160 252 y ft(is) f(b)q(ounded)h(ab)q(o)n(v)o(e)e(b)o(y)g(2)p fn(m)p ft(,)g(this)g(c)o(hange)h (is)f(also)h(b)q(ounded)g(b)o(y)f(3)p fn(m\016)1381 259 y fe(t)1394 250 y fa (0)1405 259 y fe(;t)1430 252 y ft(.)71 345 y(If)i(the)h(ev)o(en)o(t)f(is)h (that)f fr(M-T)l(ree)g ft(mo)n(v)o(es)g(its)h(page)f(from)g fn(s)g ft(to)g fn (s)1194 329 y ff(0)1206 345 y ft(,)h(then)f(there)h(are)f(t)o(w)n(o)g(cases)h (dep)r(ending)0 402 y(on)e(whether)h(the)f(mo)o(v)n(e)h(is)g(to)n(w)n(ard)g (or)e(a)o(w)n(a)o(y)h(from)g fn(t)p ft(.)24 b(Since)17 b(\001)p fn(C)1161 412 y fc(M)p ff(\000)p fc(T)l(ree)1333 402 y ft(=)d fn(m\016)1442 409 y fe(ss) 1474 400 y fa(0)1488 402 y ft(,)j(w)n(e)g(need)g(to)f(sho)n(w)h(that)0 458 y (\001\010)12 b fg(\024)h(\000)p fn(m\016)226 466 y fe(ss)258 456 y fa(0)273 458 y ft(.)45 552 y fg(\()h fn(t)p ft(:)22 b(\010)13 b(undergo)r(es)g(three)g (c)o(hanges:)19 b fn(c)732 560 y fe(s)748 550 y fa(0)774 552 y ft(is)13 b(zer\ o)q(ed,)h(its)f(co)q(e\016cient)g(c)o(hanges)g(from)f(2)h(to)f fg(\000)p ft (1,)h(and)h(3)p fn(m\016)1856 560 y fe(ss)1888 550 y fa(0)155 609 y ft(is)g (added.)19 b(The)13 b(con)o(tribution)h(of)e fn(c)766 616 y fe(s)782 607 y fa (0)808 609 y ft(c)o(hanges)h(from)e(4)p fn(m\016)1161 616 y fe(ss)1193 607 y fa(0)1220 609 y ft(to)h(0,)g(so)h(the)g(net)f(c)o(hange)h(in)h(p)q(oten)o(tia\ l)155 665 y(is)i fg(\000)p fn(m\016)296 673 y fe(ss)328 663 y fa(0)342 665 y ft(.)45 759 y fg(\))e fn(t)p ft(:)22 b(Again,)14 b(\010)g(is)g(c)o(hanged)g (in)h(three)e(w)o(a)o(ys:)19 b fn(c)878 766 y fe(s)909 759 y ft(is)c(zero)q (ed,)f(its)g(co)q(e\016cient)f(c)o(hanges)h(from)f fg(\000)p ft(1)h(to)f(2,)g (and)155 815 y(3)p fn(m\016)238 823 y fe(ss)270 813 y fa(0)298 815 y ft(is)h (subtracted.)20 b(The)14 b(con)o(tribution)g(of)g fn(c)1005 822 y fe(s)1037 815 y ft(c)o(hanges)g(from)f fg(\000)p ft(2)p fn(m\016)1428 823 y fe(ss)1460 813 y fa(0)1488 815 y ft(to)g(0.)19 b(The)14 b(net)g(c)o(hange)155 872 y(in)i (p)r(oten)n(tial)g(is)g(again)f fg(\000)p fn(m\016)662 879 y fe(ss)694 870 y fa(0)709 872 y ft(.)71 966 y(The)h(most)g(complicated)h(part)f(of)g(the)g(ana\ lysis)h(deals)h(with)e(the)h(costs)e(of)h(satisfying)h(the)f(requests.)24 b (Let)0 1022 y fn(r)19 b ft(b)q(e)f(the)g(v)o(ertex)g(that)f(is)i(requested.) 28 b(Let)18 b fn(T)24 b ft(b)r(e)18 b(the)g(tree)f(ro)q(oted)h(at)f(v)o(ertex) h fn(s)p ft(,)g(and)g(let)h fn(x)f ft(b)q(e)g(the)g(lo)o(w)o(est)0 1078 y(com\ mon)f(ancestor)g(of)g fn(r)h ft(and)f fn(t)h ft(in)g fn(T)6 b ft(.)27 b(When) 17 b(the)h(request)f(is)h(satis\014ed,)g(a)f(cost)g(is)h(incurred)h(b)o(y)e (algorithm)0 1135 y fr(M-T)l(ree)12 b ft(and)i(also)e fg(A)p ft(.)20 b(W)l (e)13 b(will)i(associate)e(these)h(costs,)e(as)h(w)n(ell)i(as)d(the)h(c)o(han\ ge)g(in)h(p)r(oten)n(tial)g(that)e(o)q(ccurs)h(as)0 1191 y(a)h(result)h(of)f (the)g(op)q(eration,)g(to)g(the)g(v)o(ertices.)20 b(The)15 b(p)q(oten)o(tial) g(asso)q(ciated)g(with)f(a)g(v)o(ertex)g fn(i)g ft(is)h(either)g(2)p fn(c) 1842 1198 y fe(i)1855 1191 y fn(\016)1875 1201 y fe(ip)p fj(\()p fe(i)p fj (\))0 1248 y ft(or)f fg(\000)p fn(c)110 1255 y fe(i)124 1248 y fn(\016)144 1257 y fe(i;p)p fj(\()p fe(i)p fj(\))239 1248 y ft(dep)r(ending)h(on)f(whethe\ r)g fn(i)g ft(is)h(on)f(the)g(path)g(from)f fn(s)h ft(to)g fn(t)p ft(.)19 b (A)14 b(v)o(ertex)g fn(i)g ft(that)f(is)i(on)f(the)g(path)g(from)0 1304 y fn (r)19 b ft(to)e fn(s)i ft(\(but)f(is)g(not)g fn(s)p ft(\))g(gets)g(a)g(cost)f (of)h fn(\016)740 1314 y fe(i;p)p fj(\()p fe(i)p fj(\))839 1304 y ft(for)g (algorithm)g fr(M-T)l(ree)p ft(.)28 b(A)18 b(v)o(ertex)g fn(i)g ft(that)f(is) i(on)f(the)g(path)0 1361 y(from)13 b fn(r)i ft(to)f fn(t)g ft(gets)g(a)g(cost) f(of)h fn(\016)520 1370 y fe(i;p)p fj(\()p fe(i)p fj(\))616 1361 y ft(for)f fg (A)p ft(.)20 b(No)14 b(other)g(v)n(ertices)h(incur)g(cost.)k(All)d(the)e(cost\ s)g(incurred)h(b)o(y)f(either)0 1417 y(algorithm,)h(and)g(all)h(the)g(p)q(ote\ n)o(tial)g(c)n(hanges)g(are)f(partitioned)h(among)e(the)h(v)o(ertices)h(in)g (this)g(manner.)71 1474 y(Let)f fn(P)6 b(R)15 b ft(b)q(e)g(the)g(path)g(from) f fn(r)i ft(to)e fn(x)p ft(,)g(let)i fn(P)6 b(T)21 b ft(b)q(e)15 b(the)g(path) g(from)f fn(t)h ft(to)g fn(x)p ft(,)f(and)h(let)h fn(P)6 b(S)17 b ft(b)r(e)e (the)g(path)g(from)0 1530 y fn(x)h ft(to)g fn(s)p ft(.)23 b(F)l(urthermore,) 16 b(let)g fn(P)23 b ft(b)r(e)16 b(the)g(part)g(of)g(the)g(p)r(eripheral)h (path)f(that)g(is)h(disjoint)f(from)f(the)h(path)h(from)0 1587 y fn(r)f ft (to)e fn(s)p ft(.)20 b(W)l(e)15 b(will)h(examine)g(the)f(costs)f(and)h(p)r (oten)o(tial)g(c)o(hanges)g(incurred)h(b)o(y)f(eac)o(h)g(v)o(ertex,)f(and)h (sho)o(w)f(that)h(it)0 1643 y(satis\014es)g(the)f(inequalit)q(y)g(3)8 b fg (\001)g ft(\001)p fu(C)580 1650 y ff(A)618 1643 y fg(\000)h ft(\001)p fu(C) 736 1650 y fb(M-T)m(ree)881 1643 y fg(\025)k ft(\001\010.)20 b(There)14 b(are) g(sev)o(eral)h(cases)f(to)g(consider,)h(dep)r(ending)0 1699 y(on)g(where)h (our)f(test)f(v)o(ertex)h fn(i)g ft(is)g(with)h(resp)q(ect)g(to)e fn(P)7 b (R)p ft(,)14 b fn(P)7 b(S)r ft(,)15 b fn(P)7 b(T)e ft(,)15 b(and)h fn(P)6 b ft (.)45 1793 y fn(i)13 b fg(2)g fn(P)6 b(R)p ft(:)256 b fn(c)476 1800 y fe(i) 508 1793 y ft(is)19 b(incremented,)g(so)f(\001\010)f(=)h(2)p fn(\016)1073 1803 y fe(ip)p fj(\()p fe(i)p fj(\))1145 1793 y ft(.)29 b(F)l(urthermore,)18 b(\ \001)p fu(C)1540 1800 y ff(A)1588 1793 y ft(=)h(\001)p fu(C)1715 1800 y fb (M-T)m(ree)1866 1793 y ft(=)456 1850 y fn(\016)476 1859 y fe(ip)p fj(\()p fe (i)p fj(\))548 1850 y ft(.)h(This)15 b(v)o(eri\014es)h(the)g(inequality)l(.) 45 1944 y fn(i)d fg(2)g fn(P)6 b(S)s ft(:)260 b(Again,)17 b fn(c)623 1951 y fe (i)653 1944 y ft(is)g(incremen)q(ted,)f(but)h(this)g(time)g(the)f(co)q(e\016c\ ient)h(in)g(the)g(p)q(oten)o(tial)g(is)456 2000 y fg(\000)p ft(1,)f(so)g(\001\ \010)e(=)g fg(\000)p fn(\016)789 2009 y fe(ip)p fj(\()p fe(i)p fj(\))861 2000 y ft(.)23 b(F)l(urthermore,)15 b(\001)p fu(C)1248 2007 y ff(A)1292 2000 y ft (=)g(0)h(and)g(\001)p fu(C)1544 2007 y fb(M-T)m(ree)1691 2000 y ft(=)e fn(\ \016)1760 2009 y fe(ip)p fj(\()p fe(i)p fj(\))1832 2000 y ft(,)i(so)456 2056 y (the)g(inequality)f(is)h(v)o(eri\014ed.)45 2150 y fn(i)d fg(2)g fn(P)6 b(T)g ft(:)258 b(In)23 b(this)g(case,)g(\001)p fu(C)807 2157 y ff(A)861 2150 y ft (=)i fn(\016)941 2160 y fe(ip)p fj(\()p fe(i)p fj(\))1034 2150 y ft(and)d(\ \001)p fu(C)1203 2157 y fb(M-T)m(ree)1360 2150 y ft(=)j(0.)40 b(The)23 b(p)q (oten)o(tial)f(could)456 2207 y(increase)15 b(b)o(y)e(as)h(m)n(uc)o(h)g(as)f fn(\016)936 2216 y fe(ip)p fj(\()p fe(i)p fj(\))1022 2207 y ft(if)h fn(i)e fg (2)h fn(P)6 b ft(.)20 b(\(If)13 b fn(i)18 b(=)-29 b fg(2)13 b fn(P)20 b ft (then)14 b(the)g(p)r(oten)n(tial)g(will)i(not)456 2263 y(c)o(hange.\))k(The) 15 b(inequalit)q(y)g(is)h(certainly)g(true)f(in)h(this)g(case.)45 2357 y fn (i)i(=)-28 b fg(2)13 b fn(P)6 b(R)195 2325 y fd(S)237 2357 y fn(P)g(S)310 2325 y fd(S)353 2357 y fn(P)g(T)g ft(:)22 b(The)d(costs)f(incurred)i(b)o(y)e(b)r (oth)g(algorithms)h(are)f(zero.)30 b(The)18 b(p)r(oten)n(tial)i(will)g(de-) 456 2413 y(crease)14 b(b)o(y)h(2)p fn(\016)695 2423 y fe(ip)p fj(\()p fe(i)p fj(\))780 2413 y ft(if)g fn(i)d fg(2)h fn(P)6 b ft(,)14 b(otherwise,)h(the)f (p)q(oten)o(tial)h(will)h(not)e(c)o(hange)g(and)g(the)456 2470 y(inequalit)q (y)h(is)h(v)o(eri\014ed.)71 2564 y(It)i(remains)g(only)h(to)e(v)o(erify)h(tha\ t)g(the)g(p)q(oten)o(tial)g(cannot)g(b)r(e)g(negativ)o(e.)28 b(Those)18 b(v)o (ertices)h(on)f(that)f(path)0 2620 y(from)g fn(s)h ft(to)f fn(t)h ft(con)o (tribute)g(a)f(negativ)o(e)h(amoun)n(t)g(to)e(the)i(p)r(oten)n(tial.)28 b(The) 18 b(most)f(negativ)o(e)g(con)o(tribution)i(they)0 2677 y(could)c(mak)n(e)f (is)g fg(\000)p ft(2)p fn(m\016)399 2684 y fe(st)430 2677 y ft(.)20 b(The)14 b (initial)h(term)f(3)p fn(m\016)875 2684 y fe(st)919 2677 y ft(guaran)n(tees)g (that)f(the)h(p)q(oten)o(tial)g(can)g(nev)o(er)g(b)q(e)g(negativ)o(e.)1790 2733 y fr(Q.E.D.)p eop %%Page: 67 78 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(67)0 195 y fp(7.4.4)55 b(Migration)18 b(on)h (Uniform)e(T)l(rees)0 281 y ft(One)f(disadv)n(an)o(tage)e(of)h(algorithm)g fr (M-T)l(ree)g ft(is)g(that)g(it)g(m)o(ust)g(k)o(eep)g(state)g(for)f(ev)o(ery)h (no)q(de)h(of)f(the)g(tree,)f(ev)o(en)0 337 y(though)j(the)g(page)g(can)g(onl\ y)g(b)r(e)g(migrated)f(to)h(adjacen)o(t)f(no)q(des.)26 b(If)17 b(the)g(single) h(edge)g(distances)f(in)h(the)f(tree)0 394 y(are)g(constan)o(t,)g(w)o(e)h(can) g(collapse)h(this)f(state.)26 b(Unfortunately)m(,)18 b(this)g(collapsing)h (of)e(state)g(disturbs)i(the)e(cost)0 450 y(allo)r(cation)i(of)f(algorithm)h fr(M-T)l(ree)o ft(,)h(so)e(instead)h(of)g(the)g(strongly)f(comp)q(etitive)h (factor)e(of)i(3,)g(w)n(e)g(obtain)g(a)0 507 y(comp)q(etitive)d(factor)g(of)g (4)g(for)g(this)h(algorithm.)23 b(The)17 b(algorithm)f(still)i(inv)n(olv)o (es)f(coun)o(ters)f(for)g(ev)o(ery)g(no)q(de)h(of)0 563 y(the)e(tree,)g(but)g (the)g(coun)o(ters)g(for)f(no)q(des)i(that)e(are)h(not)g(adjacen)o(t)f(to)h (the)g(cop)o(y)g(of)f(the)h(page)g(are)g(alw)o(a)n(ys)g(zero.)0 620 y(F)l(or) h(a)g(tree)h(whose)f(no)q(des)h(ha)o(v)o(e)f(at)g(most)g fn(k)i ft(neigh)o (b)r(ors,)e(at)g(most)f fn(k)j ft(coun)o(ters)e(need)i(to)e(b)q(e)h(main)o (tained.)25 b(As)0 676 y(b)r(efore,)18 b(w)n(e)g(call)h(the)f(no)r(des)g(adja\ cen)o(t)f(to)h(the)g(page)g fq(b)m(oundary)i(no)m(des)p ft(.)28 b(W)l(e)18 b (also)g(assume,)g(without)g(loss)g(of)0 733 y(generality)l(,)g(that)f(all)i (single)g(edge)g(distances)f(in)h(the)f(tree)g(are)f(1.)28 b(Our)18 b(algorit\ hm)g(to)g(solv)o(e)g(the)g(migration)0 789 y(problem)e(using)g(b)q(oundary)g (no)q(des)f(is:)182 895 y fr(Algorithm)d(M-UT)m(ree:)17 b ft(F)l(or)10 b(eac) o(h)h(page)f fn(P)d ft(,)k(initialize)j(the)d(coun)o(ters)f fn(c)1457 902 y fe (i)1482 895 y ft(to)g(zero.)18 b(A)11 b(request)114 952 y(from)16 b(a)g(no)q (de)h(that)f(do)r(es)g(not)h(ha)n(v)o(e)g(the)g(page)f(is)i(pro)q(cessed)f (as)f(follows:)22 b(\014nd)c(the)e(path)h(to)f(the)114 1008 y(page,)g(and)h (add)g(its)g(length)g(to)f(the)h(coun)o(ter)f(for)h(the)f(b)r(oundary)g(no)r (de)h(on)f(the)h(path.)24 b(Subtract)114 1065 y(as)14 b(m)o(uc)o(h)h(of)f(thi\ s)h(path)g(length)h(as)e(p)q(ossible)i(from)f(the)f(counters)g(at)g(the)h(oth\ er)f(b)r(oundary)h(no)q(des)114 1121 y(without)k(making)h(an)o(y)f(of)h(them) f(negativ)o(e)h(\(i.e.,)f(the)h(total)f(of)g(the)h(decrements)f(to)g(the)h (other)114 1178 y(coun)o(ters)d(do)q(es)h(not)f(exceed)h(the)g(path)f(length,) h(and)g(is)g(as)f(large)g(as)g(p)r(ossible)i(without)e(making)114 1234 y(an)n (y)d(of)f(the)h(other)f(coun)o(ters)h(negativ)n(e\).)20 b(If)14 b(the)f(coun) o(ter)h(at)f(the)g(b)r(oundary)h(no)q(de)g(on)f(the)h(path)g(is)114 1290 y fg (\025)f ft(2)p fn(m)p ft(,)g(migrate)h(the)g(page)g(to)f(the)h(b)r(oundary)g (no)q(de)h(and)f(zero)g(its)g(coun)o(ter.)19 b(If)c(this)f(coun)o(ter)g(w)o (as)114 1347 y fn(>)h ft(2)p fn(m)p ft(,)i(set)f(the)h(coun)o(ter)g(at)f(the) h(new)g(b)q(oundary)g(no)q(de)h(for)e(the)h(path)f(to)h(the)f(original)i(coun\ ter)114 1403 y(v)m(alue)f(less)h(2)p fn(m)p ft(;)e(if)h(this)g(new)g(coun)o (ter)f(v)n(alue)h(is)g fg(\025)e ft(2)p fn(m)p ft(,)h(the)h(algorithm)f(lo)r (ops)g(bac)o(k)h(to)f(migrate)114 1460 y(the)j(page)h(to)f(this)h(new)f(b)r (oundary)g(no)r(de.)33 b(If)20 b(the)f(request)h(originated)g(at)f(the)h(old) g(b)q(oundary)114 1516 y(no)q(de,)e(then)g(the)g(original)g(counter)f(w)n(as) h(2)p fn(m)11 b fg(\000)h ft(1)17 b(b)r(efore)g(the)h(request)g(and)f(there)h (is)g(no)g(excess)114 1573 y(v)m(alue)e(to)f(b)q(e)g(assigned.)0 1679 y(Algor\ ithm)k fr(M-UT)l(ree)g ft(main)o(tains)g(the)g(inv)m(arian)o(t)f(that)h(the)g (sum)f(of)h(the)g(coun)o(ters)f(for)h(an)n(y)g(page)g(at)f(an)o(y)0 1735 y (no)q(de)e(is)g(b)q(ounded)g(b)o(y)f(0)g(and)h(2)p fn(m)p ft(.)71 1792 y(The) f(follo)o(wing)g(theorem)f(establishes)i(that)e(algorithm)h fr(M-UT)l(ree)f ft (is)i(comp)q(etitive)e(with)h(a)g(comp)q(etitive)0 1848 y(factor)f(of)h(4:)0 1955 y fr(Theorem)i(5)23 b fq(F)l(or)13 b(any)g(se)m(quenc)n(e)g fn(\033)h fq (of)f(r)n(e)n(quests)f(for)h(the)h(tr)n(e)m(e)f(p)n(age)g(migr)n(ation)g(pr)n (oblem)g(with)g(uniform)g(single)0 2011 y(e)n(dge)j(ac)n(c)m(ess)g(c)m(osts)g (and)g(any)g(on-line)g(or)g(o\013-line)g(algorithm)h fg(A)719 2113 y fu(C)755 2120 y fb(M-UT)m(ree)919 2113 y ft(\()p fn(\033)r ft(\))12 b fg(\024)h ft(4)d fg(\001)g fu(C)1134 2120 y ff(A)1165 2113 y ft(\()p fn(\033)q ft(\))0 2215 y fq(under)k(the)g(assumption)g(that)g fg(A)g fq(and)g fr(M-UT)l(ree)f fq(start) h(in)g(the)g(same)f(state)h(with)g(a)g(single)e(c)n(opy)i(of)g(e)n(ach)g(p)n (age.)71 2322 y fr(Proof:)20 b ft(Assume)15 b(without)f(loss)h(of)f(generalit\ y)g(that)g(all)h(single)h(edge)f(distances)g(in)h(the)e(tree)h(are)f(1)g(\(i.\ e.)g(if)0 2378 y fn(i)j ft(and)g fn(j)i ft(are)e(adjacen)o(t)g(no)q(des,)h (then)f fn(\016)691 2385 y fe(ij)738 2378 y ft(=)f(1\).)25 b(Merge)17 b(the)g (actions)g(tak)n(en)h(b)o(y)f(the)g(t)o(w)n(o)g(algorithms)g(into)f(a)0 2435 y (single)g(sequence)f(tagged)f(to)f(indicate)j(which)e(algorithms)g(p)r(erform\ ed)g(the)g(actions.)20 b(As)14 b(b)r(efore,)g(w)n(e)h(will)h(giv)o(e)0 2491 y (a)g(non-negative)g(\(initially)j(zero\))d(p)r(oten)n(tial)h(\010,)g(suc)o (h)g(that)e(the)i(follo)o(wing)g(inequalit)q(y)f(is)h(satis\014ed)g(b)o(y)g (ev)o(ery)0 2547 y(ev)o(en)o(t:)675 2604 y(4)10 b fg(\001)g ft(\001)p fu(C) 804 2611 y ff(A)845 2604 y fg(\000)g ft(\001)p fu(C)964 2611 y fb(M-UT)m(ree) 1141 2604 y fg(\025)j ft(\001\010)p fn(;)0 2687 y ft(where)19 b(\001)g(indica\ tes)i(the)e(c)o(hange)g(in)h(the)g(quan)o(tit)n(y)f(due)h(to)f(the)g(ev)o(en) o(t.)31 b(Summing)20 b(this)g(form)n(ula)g(o)n(v)o(er)f(all)0 2744 y(ev)o(en) o(ts)f(and)h(using)h(the)e(fact)h(that)f(the)g(initial)j(p)r(oten)n(tial)f (is)f(no)f(more)h(than)f(the)h(\014nal)g(p)r(oten)o(tial)g(giv)o(es)g(the)0 2800 y(theorem.)h(It)15 b(remains)g(to)g(v)o(erify)g(the)h(inequality)f(for)g (all)h(ev)o(en)o(ts.)p eop %%Page: 68 79 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(68)71 195 y(As)14 b(in)h(the)g(previous)g(pro) q(of,)f(let)h fn(s)g ft(b)q(e)g(the)f(lo)r(cation)h(of)f fr(M-UT)l(ree)o ft ('s)g(page)h(and)f fn(t)h ft(b)r(e)f(the)h(lo)q(cation)g(of)f fg(A)p ft('s)0 252 y(page.)23 b(Let)16 b fn(Q)g ft(b)r(e)g(the)g(path)g(from)g fn(s)g ft(to) g fn(t)p ft(.)23 b(Let)17 b fn(\016)868 259 y fe(ab)920 252 y ft(b)q(e)g(the) f(distance)h(b)q(et)o(w)o(een)f fn(a)h ft(and)f fn(b)g ft(in)h(the)f(tree)g (and)g(let)0 308 y fn(p)p ft(\()p fn(v)q ft(\))f(denote)h(the)f(paren)o(t)g (of)f(no)r(de)h fn(v)i ft(in)f(the)f(tree)g(ro)q(oted)g(at)g fn(s)p ft(.)20 b (The)15 b(p)r(oten)n(tial)h(function)g(w)o(e)f(will)i(use)f(is:)607 410 y(\ \010)c(=)h(3)p fn(m\016)783 417 y fe(st)824 410 y ft(+)871 370 y fd(X)870 464 y fe(i)t(=)-22 b ff(2)o fe(Q)941 410 y ft(2)p fn(c)984 417 y fe(i)997 410 y fn (\016)1017 419 y fe(ip)p fj(\()p fe(i)p fj(\))1099 410 y fg(\000)1146 370 y fd (X)1144 462 y fe(i)p ff(2)p fe(Q)1215 410 y fn(c)1235 417 y fe(i)1249 410 y fn (\016)1269 419 y fe(ip)p fj(\()p fe(i)p fj(\))0 556 y ft(W)l(e)15 b(no)o(w)g (pro)q(ceed)h(to)f(establish)h(the)f(desired)i(inequality)f(for)e(all)i(p)r (ossible)g(ev)o(en)o(ts:)71 612 y(If)f(the)h(ev)o(en)o(t)f(is)h(that)e fg(A)i ft(mo)n(v)o(es)f(its)h(page)f(from)g fn(t)g ft(to)g fn(t)1027 596 y ff(0)1039 612 y ft(,)g(then)h(there)f(are)g(four)g(p)r(ossible)h(cases)g(dep)r(ending)0 669 y(on)h(the)h(relativ)o(e)g(lo)r(cations)f(of)g(the)h(pages)f(and)h(whethe\ r)f(the)h(mo)n(v)o(e)f(is)h(to)n(w)o(ard)f(or)g(a)o(w)n(a)o(y)g(from)g fn(s)g ft(\()p fg(\))g fn(s)h ft(and)0 725 y fg(\()f fn(s)g ft(resp)r(ectiv)o(ely\).) 27 b(Since)19 b fn(t)f ft(and)f fn(t)651 709 y ff(0)681 725 y ft(are)g(adjace\ n)o(t,)g fn(\016)976 733 y fe(tt)1002 723 y fa(0)1031 725 y ft(=)g(1,)g(so)g (\001)p fu(C)1268 732 y ff(A)1314 725 y ft(=)g fn(m)g ft(and)h(w)n(e)g(need)g (to)f(sho)n(w)h(that)0 782 y(\001\010)12 b fg(\024)h ft(4)p fn(m)p ft(.)45 875 y fg(\()h fn(s;)20 b(s)13 b ft(=)g fn(t)p ft(:)71 b(The)20 b(co)q(e\016cien)q (t)g(of)f fn(c)732 883 y fe(t)745 874 y fa(0)778 875 y ft(c)o(hanges)i(from)e (2)h(to)g fg(\000)p ft(1.)36 b(In)21 b(addition,)h(3)p fn(m)e ft(is)h(added)g (to)f(\010)340 932 y(b)q(ecause)i(the)g(distance)h(b)q(et)o(w)n(een)g(the)e (pages)h(has)f(increased)i(b)o(y)f(1.)39 b(Hence,)24 b(\001\010)f(=)340 988 y (3)p fn(m)9 b fg(\000)i ft(3)p fn(c)501 996 y fe(t)514 987 y fa(0)539 988 y fg (\024)i ft(4)p fn(m)i ft(b)q(ecause)h(the)f(coun)o(ters)g(are)g(non-negativ)o (e.)45 1082 y fg(\))f fn(s;)20 b(s)13 b ft(=)g fn(t)256 1066 y ff(0)268 1082 y ft(:)59 b(The)22 b(co)r(e\016cient)g(of)g fn(c)739 1089 y fe(t)776 1082 y ft (c)o(hanges)h(from)f fg(\000)p ft(1)g(to)g(2.)42 b(In)23 b(addition,)i(3)p fn (m)d ft(is)h(subtracted)340 1139 y(from)c(\010)h(b)q(ecause)h(the)f(distance) h(b)q(et)o(w)n(een)g(the)f(pages)g(has)g(decreased)h(b)o(y)f(1.)34 b(Hence,) 340 1195 y(\001\010)12 b(=)h(3)p fn(c)514 1202 y fe(t)538 1195 y fg(\000)e ft (3)p fn(m)h fg(\024)h ft(4)p fn(m)i ft(b)q(ecause)h fn(c)973 1202 y fe(t)1000 1195 y fg(\024)d ft(2)p fn(m)p ft(.)45 1289 y fg(\))h fn(s;)20 b(s)13 b fg (6)p ft(=)g fn(t;)7 b(t)292 1272 y ff(0)304 1289 y ft(:)23 b(\001\010)12 b (=)h fg(\000)p ft(3)p fn(m)g fg(\024)g ft(4)p fn(m)p ft(.)45 1383 y fg(\()h fn (s;)20 b(s)13 b fg(6)p ft(=)g fn(t;)7 b(t)292 1366 y ff(0)304 1383 y ft(:)23 b (\001\010)12 b(=)h(3)p fn(m)f fg(\024)h ft(4)p fn(m)p ft(.)71 1477 y(If)19 b (the)h(ev)o(en)o(t)g(is)g(that)f fr(M-UT)l(ree)g ft(mo)n(v)o(es)h(its)f(page) h(from)f fn(s)h ft(to)f fn(s)1261 1460 y ff(0)1273 1477 y ft(,)h(then)g(there) f(are)h(three)g(cases.)33 b(Let)0 1533 y fn(e)18 b ft(b)q(e)g(the)g(new)f(b)r (oundary)g(no)r(de)h(for)f(the)g(request)h(that)f(caused)h fr(M-UT)l(ree)f ft (to)g(mo)n(v)o(e)h(its)f(page;)i(if)f(there)f(is)0 1589 y(no)i(suc)o(h)h(no)q (de,)h(then)e(let)h fn(c)499 1596 y fe(e)536 1589 y ft(b)r(e)f(zero.)33 b(F) -5 b(or)19 b(the)h(\014rst)f(t)n(w)o(o)g(cases,)h(\001)p fu(C)1290 1596 y fb (M-UT)m(ree)1474 1589 y ft(=)g fn(m)p ft(,)g(so)f(w)n(e)h(m)n(ust)f(sho)o(w)0 1646 y(\001\010)12 b fg(\024)h(\000)p fn(m)p ft(.)45 1740 y fg(\()h fn(t)p ft (:)189 b(2)p fn(m)14 b ft(is)g(subtracted)h(from)e(the)h(sum)h(of)e fn(c)1017 1747 y fe(s)1033 1738 y fa(0)1061 1740 y ft(and)h fn(c)1168 1747 y fe(e)1186 1740 y ft(.)20 b(Since)c(b)q(oth)e(ha)o(v)n(e)h(co)q(e\016cients)f(of)g(2)g (in)322 1796 y(\010,)g(this)h(subtracts)f(4)p fn(m)g ft(from)g(\010.)19 b(Sin\ ce)d(the)f(distance)g(b)r(et)n(w)o(een)g(the)g(pages)f(increases)h(b)o(y)322 1853 y(1,)f(3)p fn(m)h ft(is)h(added)g(to)e(\010,)h(so)g(the)g(net)g(e\013ect) g(is)h(\001\010)c(=)h fg(\000)p fn(m)p ft(.)45 1946 y fg(\))h fn(t;)20 b(s) 174 1930 y ff(0)198 1946 y fg(6)p ft(=)13 b fn(t)p ft(:)47 b(2)p fn(m)15 b ft (is)h(subtracted)f(from)g(the)g(sum)g(of)g fn(c)1025 1954 y fe(s)1041 1945 y fa(0)1070 1946 y ft(and)g fn(c)1178 1953 y fe(e)1197 1946 y ft(.)20 b(Since)d (b)q(oth)e(ha)o(v)o(e)g(co)q(e\016cients)g(of)g fg(\000)p ft(1)322 2003 y(in) i(\010,)g(this)g(adds)f(2)p fn(m)h ft(to)f(\010.)23 b(Since)18 b(the)f(distan\ ce)h(b)q(et)o(w)n(een)f(the)g(pages)g(decreases)g(b)o(y)f(1,)322 2059 y(3)p fn (m)f ft(is)g(subtracted)h(from)e(\010,)h(so)f(the)i(net)f(e\013ect)g(is)h(\ \001\010)c(=)h fg(\000)p fn(m)p ft(.)45 2153 y fg(\))h fn(t;)20 b(s)174 2137 y ff(0)198 2153 y ft(=)13 b fn(t)p ft(:)47 b(This)17 b(page)g(mo)n(v)o(e)f(m)o (ust)g(b)r(e)h(analyzed)g(in)g(com)o(bination)h(with)e(the)h(actions)g(that)f (satisfy)322 2210 y(the)f(request)g(that)g(caused)h fr(M-UT)l(ree)e ft(to)h (mo)n(v)o(e)g(its)h(page.)j(Let)d fn(d)f ft(b)q(e)g(the)h(length)g(of)e(the) 322 2266 y(path)19 b(for)f(this)i(request)f(to)f fn(s)p ft(,)i(then)f fn(d)g fg(\025)g ft(1.)31 b(Then,)20 b(\001)p fu(C)1353 2273 y ff(A)1403 2266 y ft (=)f fn(d)12 b fg(\000)h ft(1)19 b(b)q(ecause)h(it)f(m)o(ust)322 2322 y(p)q (erform)13 b(an)g(access)g(from)f fn(t)i ft(whic)o(h)g(is)f(closer)h(than)f fn (s)p ft(.)19 b(\001)p fu(C)1347 2329 y fb(M-UT)m(ree)1524 2322 y ft(=)13 b fn (m)5 b ft(+)i fn(d)12 b ft(to)h(accoun)o(t)322 2379 y(for)18 b(b)q(oth)g(mo)n (ving)h(the)g(page)f(and)g(the)h(access)f(from)g fn(s)p ft(.)29 b(Let)19 b fn (c)1447 2386 y fe(t)1479 2379 y ft(=)f(2)p fn(m)12 b fg(\000)g fn(x)19 b ft (b)q(efore)f(the)322 2435 y(mo)n(v)o(e)i(where)h(1)f fg(\024)h fn(x)g fg(\024) g fn(d)f ft(.)34 b(Then)21 b(after)e(the)h(mo)n(v)o(e,)h fn(c)1349 2442 y fe (e)1388 2435 y ft(=)g fn(d)13 b fg(\000)h fn(x)20 b ft(since)h fn(x)f ft(of)g (the)g fn(d)322 2492 y ft(distance)d(w)n(as)f(needed)h(to)e(cause)h(the)g(mo) n(v)o(e.)22 b fn(c)1154 2499 y fe(t)1184 2492 y ft(is)16 b(zero)r(ed)g(as)f (part)h(of)f(the)h(mo)n(v)o(e.)22 b(Since)322 2548 y(its)14 b(co)r(e\016cient) g(in)h(\010)f(is)g fg(\000)p ft(1)h(b)q(efore)f(the)h(mo)n(v)o(e,)f(this)h (adds)f(2)p fn(m)8 b fg(\000)g fn(x)15 b ft(to)e(\010.)20 b fn(c)1642 2555 y fe(e)1660 2548 y ft('s)13 b(co)r(e\016cient)322 2605 y(in)i(\010)g(is)g(2,)f (so)g(it)h(adds)g(2)p fn(d)8 b fg(\000)i ft(2)p fn(x)k ft(to)g(\010.)19 b(Fin\ ally)n(,)14 b(3)p fn(m)h ft(is)g(subtracted)f(from)g(\010)h(b)q(ecause)g(the) 322 2661 y(distance)j(b)q(et)o(w)n(een)g(the)f(pages)f(decreases)i(b)o(y)f (1.)24 b(Substituting)18 b(these)f(into)f(the)h(desired)322 2718 y(inequalit) q(y)l(,)e(w)n(e)h(ha)n(v)o(e)556 2820 y(4)10 b fg(\001)g ft(\001)p fu(C)686 2827 y ff(A)726 2820 y fg(\000)g ft(\001)p fu(C)845 2827 y fb(M-UT)m(ree)1051 2820 y fg(\025)42 b ft(\001\010)p eop %%Page: 69 80 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(69)639 195 y(4\()p fn(d)9 b fg(\000)i ft(1\))e fg(\000)i ft(\()p fn(m)f ft(+)g fn(d)p ft(\))41 b fg(\025)h ft(\(2)p fn(m)9 b fg(\000)i fn(x)p ft(\))e(+)i(\(2)p fn(d)e fg(\000)h ft(2)p fn(x)p ft(\))g fg (\000)g ft(3)p fn(m)789 264 y ft(3)p fn(d)g fg(\000)g fn(m)g fg(\000)h ft(4) 41 b fg(\025)h ft(2)p fn(d)9 b fg(\000)i ft(3)p fn(x)e fg(\000)i fn(m)881 333 y(d)f ft(+)h(3)p fn(x)41 b fg(\025)h ft(4)322 435 y(Since)24 b fn(d)f fg(\025) i ft(1)d(and)g fn(x)i fg(\025)g ft(1,)f(the)g(last)f(inequality)g(is)h(alw)o (a)n(ys)f(true,)i(and)e(the)g(desired)322 491 y(inequalit)q(y)15 b(is)h(estab\ lished)g(for)f(this)h(case.)71 585 y(This)e(lea)o(v)o(es)g(the)g(actions)g (that)g(satisfy)f(the)h(requests.)20 b(Let)14 b fn(r)h ft(b)q(e)g(the)f(no)q (de)g(that)g(originated)g(the)g(request.)0 642 y(There)j(are)f(three)h(cases) g(dep)r(ending)h(on)e(the)h(relationship)i(of)d(that)g(no)q(de)h(to)f(the)h (pages')f(p)r(ositions)h fn(s)g ft(and)g fn(t)p ft(.)0 698 y(Let)e fn(e)h ft (b)q(e)g(the)f(b)q(oundary)h(no)q(de)f(for)g(algorithm)g fr(M-UT)l(ree)g ft (in)h(all)g(cases.)45 792 y fn(s)d ft(=)g fn(t)p ft(:)80 b(Both)14 b(algorith\ ms)f(incur)i(costs)e(of)h fn(\016)867 799 y fe(r)q(s)915 792 y ft(=)f fn(\016) 983 799 y fe(r)q(t)1015 792 y ft(,)g(so)g(w)o(e)h(m)n(ust)g(sho)o(w)f(\001\ \010)f fg(\024)h ft(3)p fn(\016)1557 799 y fe(r)q(t)1589 792 y ft(.)19 b fn (\016)1641 799 y fe(r)q(s)1691 792 y ft(gets)13 b(added)236 848 y(to)18 b fn (c)315 855 y fe(e)333 848 y ft(.)31 b(Since)20 b fn(c)519 855 y fe(e)537 848 y ft('s)e(co)q(e\016cien)q(t)g(in)h(\010)g(is)g(2,)g(\001\010)f fg(\024)h ft (2)p fn(\016)1200 855 y fe(r)q(t)1250 848 y fg(\024)g ft(3)p fn(\016)1347 855 y fe(r)q(t)1397 848 y ft(b)r(ecause)g(an)o(y)f(subtractions)236 905 y(from)d (other)f(counters)g(decrease)i(\010.)45 999 y fn(\016)65 1006 y fe(r)q(s)114 999 y fn(>)d(\016)182 1006 y fe(r)q(t)213 999 y ft(:)23 b(\001)p fu(C)322 1006 y ff(A)370 999 y ft(=)18 b fn(\016)443 1006 y fe(r)q(t)475 999 y ft(,)g(\001) p fu(C)580 1006 y fb(M-UT)m(ree)761 999 y ft(=)g fn(\016)834 1006 y fe(r)q (s)887 999 y ft(=)f fn(\016)959 1006 y fe(r)q(t)1003 999 y ft(+)12 b fn(\016) 1070 1006 y fe(ts)1102 999 y ft(,)18 b(hence)h(w)o(e)f(m)o(ust)f(sho)o(w)h (\001\010)f fg(\024)g ft(3)p fn(\016)1746 1006 y fe(r)q(t)1790 999 y fg(\000) 12 b fn(\016)1857 1006 y fe(ts)1889 999 y ft(.)236 1055 y fn(\016)256 1062 y fe(r)q(s)307 1055 y ft(gets)i(added)i(to)f fn(c)610 1062 y fe(e)628 1055 y ft (;)f(since)j fn(e)e ft(is)h(either)f fn(t)h ft(or)f(b)q(et)o(w)n(een)h fn(s)f ft(and)h fn(t)p ft(,)f(its)g(co)q(e\016cient)g(in)h(\010)f(is)h fg(\000)p ft (1.)236 1112 y(Hence)f(\001\010)d fg(\024)h fn(\016)521 1119 y fe(r)q(s)569 1112 y ft(=)g fg(\000)p fn(\016)672 1119 y fe(r)q(t)711 1112 y fg(\000)7 b fn (\016)773 1119 y fe(ts)817 1112 y fg(\024)13 b ft(3)p fn(\016)908 1119 y fe (r)q(t)947 1112 y fg(\000)7 b fn(\016)1009 1119 y fe(ts)1054 1112 y ft(b)q (ecause)14 b(an)o(y)f(other)g(subtractions)h(decrease)g(\010.)45 1205 y fn (\016)65 1212 y fe(r)q(s)114 1205 y fn(<)f(\016)182 1212 y fe(r)q(t)213 1205 y ft(:)23 b(\001)p fu(C)322 1212 y fb(M-UT)m(ree)502 1205 y ft(=)15 b fn(\016) 572 1212 y fe(r)q(s)608 1205 y ft(,)h(\001)p fu(C)711 1212 y ff(A)756 1205 y ft(=)g fn(\016)827 1212 y fe(r)q(t)874 1205 y ft(=)f fn(\016)944 1212 y fe (r)q(s)991 1205 y ft(+)c fn(\016)1057 1212 y fe(st)1089 1205 y ft(,)16 b(henc\ e)i(w)o(e)e(m)o(ust)h(sho)n(w)g(\001\010)e fg(\024)g ft(3)p fn(\016)1722 1212 y fe(r)q(s)1768 1205 y ft(+)d(4)p fn(\016)1858 1212 y fe(st)1889 1205 y ft (.)236 1262 y fn(\016)256 1269 y fe(r)q(s)307 1262 y ft(is)j(added)h(to)e fn (c)561 1269 y fe(e)579 1262 y ft(;)h(since)h(its)f(co)r(e\016cient)f(in)i(\ \010)f(is)g(2,)g(this)g(adds)g(2)p fn(\016)1427 1269 y fe(r)q(s)1478 1262 y ft (to)f(\010.)19 b(A)d(further)e fn(\016)1820 1269 y fe(r)q(s)1871 1262 y ft (is)236 1318 y(added)f(to)f(\010)h(if)g(this)g(en)o(tire)g(amoun)o(t)f(is)h (subtracted)g(from)f fn(c)1270 1326 y fe(e)1286 1317 y fa(0)1311 1318 y ft (where)h fn(e)1461 1302 y ff(0)1486 1318 y ft(is)g(the)g(b)q(oundary)g(no)q (de)236 1375 y(on)h(the)g(path)g(from)f fn(s)i ft(to)e fn(t)p ft(.)20 b(Hence) 15 b(\001\010)d fg(\024)h ft(3)p fn(\016)1033 1382 y fe(r)q(s)1081 1375 y fg (\024)g ft(3)p fn(\016)1172 1382 y fe(r)q(s)1215 1375 y ft(+)8 b(4)p fn(\016) 1301 1382 y fe(st)1346 1375 y ft(since)15 b(an)o(y)f(other)f(subtractions)236 1431 y(decrease)j(\010.)71 1525 y(This)f(completes)h(the)f(analysis)h(of)f (all)h(p)r(ossible)g(actions,)f(and)h(therefore)f(pro)n(v)o(es)g(the)g(theore\ m.)31 b fr(Q.E.D.)71 1582 y ft(The)18 b(disturbance)i(to)e(the)h(cost)f(allo) r(cation)h(of)f fr(M-T)l(ree)g ft(that)g(pro)q(duces)h(the)g(comp)q(etitive)f (factor)g(of)g(4)0 1638 y(for)g fr(M-UT)l(ree)f ft(o)q(ccurs)i(in)g(the)f(\ \014nal)h(case)g(ab)q(o)n(v)o(e;)h(all)f(of)e(the)i(other)f(cases)g(can)g(b)r (e)g(carried)h(through)f(for)f(a)0 1694 y(comp)q(etitive)d(factor)g(of)g(3.) 19 b(This)c(disturbance)g(is)g(due)g(precisely)h(to)e(the)g(collapsing)i(of)e (the)g(counters)f(into)h(the)0 1751 y(b)r(oundary)i(no)q(de.)24 b(F)l(or)15 b fr(M-T)l(ree)p ft(,)h(the)h(decremen)o(t)f(to)g fn(c)993 1734 y ff(0)993 1762 y fe(e)1027 1751 y ft(w)o(ould)h(b)q(e)g(spread)f(out)g(along)h(the)f(path)g (from)g fn(s)g ft(to)0 1807 y fn(t)f ft(\(b)q(et)o(w)o(een)g(the)g(serv)o(ers\ \),)f(and)h(an)o(y)g(addition)h(to)e(the)h(p)q(oten)o(tial)g(w)o(ould)h(b)q (e)f(matc)n(hed)h(b)o(y)f(additional)h(cost)e(to)0 1864 y fg(A)p ft(,)j(but)g (for)f fr(M-UT)l(ree)h ft(it)g(is)g(p)r(ossible)h(to)e(subtract)g(more)g(than) h(this)g(distance.)26 b(This)17 b(subtraction)g(cannot)0 1920 y(b)r(e)e(o\013\ set)f(against)h fg(A)p ft('s)g(costs)g(and)g(hence)h(requires)g(a)f(larger)g (comp)q(etitive)g(factor.)0 2042 y fp(7.4.5)55 b(Decremen)l(tation)18 b(V)l (arian)n(ts)0 2128 y ft(The)e(p)r(olicies)h(for)f(decremen)o(ting)h(timers)f (can)g(b)q(e)g(c)o(hanged)g(without)g(a\013ecting)g(the)g(comp)r(etitiv)o(e)g (prop)q(erties)0 2184 y(of)g(the)g(algorithms.)22 b(The)17 b(decremen)o(ts)f (used)h(in)g(the)f(algorithms)g(as)g(stated)f(are)h(the)g(minimum)g(required) h(to)0 2241 y(obtain)f(the)f(comp)q(etitive)g(prop)r(erties;)g(at)g(most,)f (one)h(counter)g(is)g(decremented)h(after)e(a)h(coun)o(ter)g(incremen)q(t.)0 2297 y(More)20 b(aggressiv)n(e)h(decrementing)g(can)f(b)r(e)g(p)r(erformed)g (in)i(t)n(w)o(o)e(w)n(a)o(ys)g(without)h(a\013ecting)f(the)h(comp)q(etitive)0 2354 y(prop)q(erties:)56 2447 y(1.)h(Decremen)o(t)15 b(more)f(than)h(one)h (coun)o(ter.)56 2541 y(2.)22 b(Decremen)o(t)15 b(after)f(free)h(accesses)h (\(to)e(the)h(no)r(de)g(with)h(the)f(serv)o(er\).)0 2635 y(Both)h(of)g(these) h(v)n(arian)o(ts)f(tend)g(to)g(discourage)h(migration)g(b)o(y)f(subtracting)h (more)f(v)m(alue)i(from)d(the)i(coun)o(ters)0 2692 y(than)e(the)g(original)i (algorithms)e(w)n(ould.)71 2748 y(Decremen)o(ting)22 b(more)f(than)h(one)g (coun)o(ter)f(will)i(tend)g(to)e(a)n(v)o(oid)h(mo)n(ving)h(the)f(page)f(in)i (resp)q(onse)f(to)f(a)0 2804 y(random)15 b(access)h(pattern)g(b)o(y)g(increas\ ing)h(the)f(strength)f(of)g(accesses)h(required)h(to)f(cause)g(a)f(migration) h(in)h(the)p eop %%Page: 70 81 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(70)0 195 y(presence)16 b(of)f(an)h(o)n(v)o(era\ ll)g(random)f(access)h(pattern.)k(A)o(t)15 b(least)g(one)h(coun)o(ter)f(\(or) g(coun)o(ters)g(on)g(one)h(p)q(eripheral)0 252 y(path)21 b(for)g fr(M-T)l(ree) p ft(\))g(m)o(ust)g(b)q(e)h(decremented,)h(if)f(p)q(ossible,)i(to)d(preserv)o (e)h(the)f(comp)r(etitiv)o(e)h(prop)q(erties)g(of)0 308 y(these)c(algorithms,) h(but)f(up)h(to)e(all)i(of)f(the)g(eligible)j(counters)c(\(i.e.,)h(non-zero)g (and)h(not)e(incremen)q(ted\))h(ma)n(y)0 364 y(b)r(e)e(decremented)h(without) f(destro)o(ying)h(these)g(prop)q(erties.)25 b(No)16 b(coun)o(ter)g(ma)o(y)g (b)r(e)h(decremen)o(ted)g(t)n(wice.)25 b(F)l(or)0 421 y(algorithm)16 b fr(M-U\ T)l(ree)g ft(this)h(means)f(that,)f(at)h(most,)f(the)h(distance)h(of)f(the)g (access)g(can)h(b)q(e)f(subtracted)h(from)0 477 y(eac)o(h)d(coun)o(ter,)g(and) g(all)h(coun)o(ters)e(m)o(ust)h(b)q(e)g(non-negative)g(after)f(the)h(decremen\ ts.)19 b(F)-5 b(or)14 b(algorithm)g fr(M-T)l(ree)o ft(,)0 534 y(the)f(paren)o (t-c)n(hild)i(in)o(v)n(arian)o(t)d(\(at)g(a)g(v)o(ertex)g fn(v)j ft(other)d (than)g(the)h(lo)r(cation)f(of)h(the)f(serv)o(er,)h(the)f(sum)h(of)f(the)h (coun)o(ts)0 590 y(of)g(the)h(c)o(hildren)h(of)f fn(v)h ft(in)f(a)g(tree)f (ro)q(oted)g(at)g(the)h(serv)o(er)f(lo)r(cation)h(is)g(at)f(most)g fn(c)1365 597 y fe(v)1385 590 y ft(\))g(m)o(ust)g(b)r(e)h(main)o(tained)g(b)o(y)g(the)0 647 y(decrements;)h(an)g(easy)g(w)o(a)n(y)h(to)f(do)g(this)h(is)g(to)f(decrem\ ent)g(at)g(least)h(one)f(c)o(hild)j(coun)o(t)d(\(if)h(there)f(is)h(a)g(non-ze\ ro)0 703 y(one\))e(when)g(the)g(paren)o(t)f(is)h(decremented.)19 b(In)c(the)e (pro)q(ofs,)h(all)g(of)g(these)f(decrements)g(decrease)i(the)e(p)r(oten)o(tia\ l,)0 760 y(except)18 b(for)f(decrements)h(at)f(the)h(lo)q(cation)g(of)g(or)f (on)h(the)f(path)h(to)f fg(A)p ft('s)h(serv)o(er;)g(in)h(this)f(case,)g(the)g (p)r(oten)n(tial)0 816 y(increases)e(are)f(exactly)g(matc)o(hed)h(b)o(y)f(acc\ ess)g(costs)g(that)f fg(A)i ft(m)n(ust)f(incur.)71 873 y(Decremen)o(ting)i (after)f(lo)r(cal)h(\(free\))g(accesses)g(will)i(tend)e(to)g(lea)o(v)o(e)g (the)g(page)g(situated)g(at)g(a)f(no)r(de)h(that)f(is)0 929 y(strongly)f(acce\ ssing)i(it;)f(without)f(this)h(feature,)f(a)h(w)n(eak)g(access)g(pattern)f (from)g(some)g(other)g(no)r(de)h(can)g(cause)0 985 y(the)f(page)f(to)g(temp)q (orarily)h(migrate)f(a)n(w)o(a)n(y)g(from)g(a)g(no)q(de)h(that)f(is)h(accessi\ ng)g(it)g(strongly)l(.)k(It)c(is)g(not)f(necessary)0 1042 y(to)19 b(decrement) g(an)n(y)h(coun)o(ters)f(in)h(resp)r(onse)f(to)g(a)g(lo)r(cal)h(access,)g(but) g(up)g(to)e(all)j(of)e(the)g(non-zero)h(coun)o(ters)0 1098 y(ma)n(y)d(b)q(e)g (decremented)g(without)g(destro)n(ying)g(the)g(comp)q(etitive)g(prop)q(erties) g(of)f(the)h(algorithms.)24 b(As)17 b(b)q(efore,)0 1155 y(the)d(decrements)f (for)h(algorithm)g fr(M-T)l(ree)f ft(m)o(ust)h(main)o(tain)g(the)h(paren)o (t-c)n(hild)h(inv)m(arian)o(t)e(at)f(all)i(no)q(des)g(in)g(the)0 1211 y(tree.) 29 b(In)19 b(the)g(pro)q(ofs,)f(all)h(of)f(these)h(decrements)f(decrease)h (the)f(p)r(oten)n(tial,)i(except)f(for)e(decrements)h(at)g(the)0 1268 y(lo)r (cation)e(of)h(or)f(on)g(the)h(path)g(to)f fg(A)p ft('s)g(serv)o(er;)h(in)g (this)g(case,)g(the)g(p)q(oten)o(tial)g(increases)h(are)e(exactly)h(matc)n (hed)0 1324 y(b)o(y)e(access)g(costs)g(that)g fg(A)g ft(m)o(ust)g(incur.)0 1467 y fk(7.5)70 b(Lo)r(ok-Ahead)24 b(One)0 1569 y ft(All)14 b(of)e(the)h(alg\ orithms)g(presen)o(ted)g(in)h(this)f(c)o(hapter)g(are)f(lo)r(ok-ahead)h(zero) f(in)i(that)e(they)h(ma)n(y)g(not)f(lo)r(ok)h(at)f(the)0 1625 y(next)18 b(acc\ ess)g(when)h(making)f(replication)h(or)f(migration)g(decisions.)30 b(An)18 b (alternativ)o(e)g(mo)q(del)h(is)f(lo)r(ok-ahead)0 1682 y(one,)e(in)h(which)f (an)g(algorithm)h(ma)n(y)f(examine)h(the)g(next)f(access)g(but)g(delay)g(sati\ sfying)h(it)f(un)o(til)i(after)d(one)h(or)0 1738 y(more)f(replication)i(or)e (migration)h(actions)f(ha)o(v)o(e)h(b)q(een)g(p)r(erformed.)k(Lo)r(ok-ahead) 15 b(zero)h(is)g(a)f(b)q(etter)h(matc)n(h)f(to)0 1795 y(the)k(b)q(eha)o(vior) g(of)f(memory)g(accesses)h(in)h(hardw)o(are,)f(b)q(ecause)g(it)g(is)g(unreaso\ nable)h(or)e(imp)r(ossible)i(to)e(delay)0 1851 y(satisfying)13 b(a)f(memory)f (access)i(un)o(til)g(a)f(page)g(of)g(data)g(is)g(copied)i(b)q(et)o(w)o(een)f (lo)q(cal)g(memories.)19 b(In)13 b(con)o(trast,)e(some)0 1908 y(cac)o(hing)j (problems)g(\(e.g.,)e(General)i(Sno)r(op)o(y)f(Cac)o(hing)h(in)g([28)o(]\))f (are)g(inheren)q(tly)g(lo)r(ok-ahead)h(one)f(b)r(ecause)h(the)0 1964 y(algori\ thm)h(can)h(c)o(ho)q(ose)f(ho)o(w)g(to)g(satisfy)g(an)g(access)g(\(fetc)o(h)g (lo)r(cation)g(remotely)h(or)f(fetc)n(h)h(blo)r(c)o(k)f(from)f(remote)0 2021 y (cac)o(he\))h(after)g(seeing)h(it.)71 2077 y(Our)i(algorithms)f(and)h(results) g(carry)f(o)o(v)o(er)g(to)g(the)h(lo)r(ok-ahead)g(one)f(mo)q(del)i(with)f(min\ or)g(c)o(hanges.)27 b(F)l(or)0 2133 y(replication,)f(the)c(algorithms)h(remai\ n)f(strongly)h(comp)q(etitiv)o(e)g(with)g(a)f(comp)q(etitive)h(factor)e(of)h (t)n(w)o(o,)i(and)0 2190 y(replications)13 b(no)o(w)e(o)q(ccur)g(in)i(resp)q (onse)e(to)g(the)g(\014rst)g(access)h(after)e(a)h(no)r(de's)g(coun)o(ter)g (reac)o(hes)g fn(r)q ft(.)19 b(F)-5 b(or)11 b(migration,)0 2246 y(the)j(lo)o (w)o(er)g(b)r(ound)g(result)h(is)g(w)n(eak)o(ened;)g(w)n(e)g(can)f(only)h(est\ ablish)g(a)f(lo)o(w)o(er)g(b)r(ound)g(on)g(the)h(comp)q(etitiv)o(e)g(factor)0 2303 y(of)f(3\(1)7 b fg(\000)h ft(1)p fn(=m)p ft(\).)19 b fn(m)14 b ft(is)h (exp)q(ected)g(to)e(b)r(e)h(large,)g(at)g(least)g(sev)o(eral)h(thousand,)f (so)f(w)o(e)h(don't)g(consider)h(this)g(to)e(b)r(e)0 2359 y(an)k(imp)r(ortan) n(t)g(di\013erence)h(in)g(practice.)26 b(Mo)q(difying)18 b(the)f(algorithms)g (to)g(migrate)g(on)g(the)g(\014rst)f(access)i(to)e(a)0 2416 y(no)q(de)e(after) e(the)h(no)r(de's)g(coun)o(ter)g(reac)n(hes)h(2)p fn(m)f ft(\(if)g(it)g(is)h (not)f(decremen)o(ted)h(in)g(the)f(interim\))f(yields)j(lo)r(ok-ahead)0 2472 y (one)g(algorithms)g(with)h(the)f(same)g(comp)q(etitive)g(factors.)0 2615 y fk (7.6)70 b(Applications)21 b(of)i(the)f(Algorithms)0 2717 y ft(The)13 b(algori\ thms)g(w)o(e)g(ha)o(v)n(e)h(presen)o(ted)f(and)g(analyzed)h(are)f(applicable) i(to)e(a)f(signi\014can)q(t)g(collection)j(of)e(existing)0 2773 y(and)k(prop) q(osed)g(m)o(ultipro)r(cessors.)25 b(Eac)n(h)17 b(no)q(de)h(in)f(the)g(graphs) g(used)g(b)o(y)g(the)g(algorithms)g(corresp)q(onds)g(to)f(a)p eop %%Page: 71 82 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(71)0 195 y(pro)q(cessor-memory)14 b(cluster)i (in)g(a)f(m)n(ultipro)s(cessor)f(realization)j(of)d(that)h(graph's)f(intercon\ nection)h(top)q(ology)l(.)0 252 y(The)20 b(primary)g(hardw)o(are)f(requiremen\ t)h(for)f(use)h(of)g(these)g(tec)o(hniques)h(is)f(that)f(the)h(hardw)o(are)g (implement)0 308 y(a)d(shared)g(memory)f(mo)q(del)i(\(i.e.,)e(supp)r(ort)g (access)h(forw)n(arding\).)25 b(This)17 b(excludes)i(most)d(curren)o(t)h(impl\ emen-)0 364 y(tations)h(of)g(net)o(w)o(ork)g(shared)h(memory)f(on)g(lo)r(cal) h(area)f(net)o(w)n(orks;)i(in)f(this)g(case,)g(access)g(forw)n(arding)g(is)g (not)0 421 y(p)r(ossible)e(b)q(ecause)g(page)f(faults)g(m)o(ust)g(b)r(e)g(sat\ is\014ed)h(b)o(y)f(data)f(in)i(a)f(pro)q(cessor's)g(lo)q(cal)h(memory)l(.)22 b (This)17 b(is)g(also)0 477 y(the)e(case)f(for)g(most)g(curren)o(t)g(h)o(yp)r (ercub)r(es)g(and)h(related)g(mac)n(hines,)h(although)f(researc)n(h)g(has)f (b)r(een)h(conducted)0 534 y(into)f(similar)j(mac)n(hines)g(that)d(do)h(supp) r(ort)f(access)i(forw)n(arding)f([44)o(].)71 590 y(A)h(secondary)g(requiremen\ t)g(is)h(that)e(the)h(reference)h(coun)o(ting)g(information)f(needed)i(b)o (y)e(our)g(algorithms)0 647 y(b)r(e)f(a)n(v)n(ailable.)21 b(There)16 b(are)f (sev)o(eral)g(p)r(oten)n(tial)h(metho)q(ds)f(for)g(doing)h(this:)68 740 y fg (\017)23 b ft(Chapter)15 b(8)f(prop)r(oses)h(a)g(complete)g(hardw)o(are)g(imp\ lemen)q(tation)f(of)h(our)g(algorithms)g(for)g fr(Complete)p ft(.)68 833 y fg (\017)23 b ft(Hardw)n(are)17 b(reference)h(coun)o(ters)f(\(p)r(er)g(cluster)h fg(\002)g ft(p)q(er)g(page\))f(could)h(b)r(e)f(used)h(in)g(com)o(bination)g (with)g(a)114 889 y(p)q(erio)r(dic)e(soft)n(w)o(are)e(scan.)68 983 y fg(\017) 23 b ft(Holliday)10 b([23)o(])g(describ)s(es)g(exp)r(eriments)f(that)h(emplo) o(y)o(ed)h(soft)n(w)n(are-implemen)q(ted)f(usage)g(counters)g(based)114 1039 y (on)15 b(p)q(erio)r(dic)h(scans)f(of)g(page)g(table)h(reference)g(bits.)0 1132 y(In)g(b)q(oth)f(cases)g(inv)n(olving)h(exp)r(erimental)f(data,)f(mixed)i(res\ ults)g(ha)n(v)o(e)f(b)r(een)h(obtained)f(for)g(these)g(and)h(similar)0 1189 y ([23)o(])d(tec)n(hniques.)21 b(It)13 b(is)g(our)g(opinion)h(that)e(soft)n(w)o (are-implemented)h(counters)f(based)h(on)g(page)g(table)g(reference)0 1245 y (bits)18 b(are)f(su\016cient)g(for)g(replication,)j(but)d(not)g(for)g(all)i (cases)e(of)g(migration)h(\(in)g(particular,)g(they)g(are)f(likely)0 1302 y (to)k(fail)i(to)e(capture)h(cases)g(in)g(which)g(t)n(w)o(o)f(clusters)i(are)e (activ)o(ely)i(using)f(a)g(page,)h(but)f(the)f(usage)h(in)h(one)0 1358 y(clus\ ter)e(is)f(more)g(in)o(tensive)g(than)g(the)g(other\).)33 b(W)l(e)20 b(w)o (ould)h(recommend)f(that)f(m)o(ultipro)r(cessor)h(arc)n(hitects)0 1415 y(and) e(designers)h(consider)f(pro)o(viding)h(p)q(er-pro)r(cessor)e(reference)i(cou\ n)o(ters)e(for)g(some)h(p)q(ortion)g(of)f(the)h(shared)0 1471 y(memory)f(subs\ ystem;)i(this)f(w)o(ould)g(allow)f(implemen)q(tation)g(of)h(our)f(algorithms) h(and)g(mak)n(e)g(reference)g(data)0 1527 y(a)n(v)n(ailable)f(for)d(other)h (uses)h(\(e.g.,)d(hardw)o(are)i(p)q(erformance)g(analysis\).)71 1584 y(A)h (secondary)g(issue)h(that)e(comes)h(up)h(in)g(the)f(area)g(of)f(reference)i (coun)o(ters)f(is)h(ho)n(w)f(references)h(should)g(b)r(e)0 1640 y(coun)o(ted) f(on)g(mac)n(hines)h(with)f(cac)o(hes;)g(in)g(particular,)g(should)h(cac)o (he)f(hits)g(b)r(e)g(considered.)22 b(Remo)o(ving)17 b(cac)n(he)0 1697 y(hits) 11 b(from)g(the)g(reference)g(counts)f(remo)n(v)o(es)h(a)g(large)g(amoun)n (t)g(of)g(lo)q(cality)l(,)g(but)g(this)h(corresp)q(onds)f(exactly)g(to)g(the) 0 1753 y(function)i(of)f(a)h(cac)n(he;)h(taking)e(adv)n(an)o(tage)f(of)h(lo)r (cality)g(to)g(a)n(v)o(oid)h(loading)h(the)e(memory)g(subsystem.)19 b(Our)13 b (algo-)0 1810 y(rithms)f(apply)h(to)f(reference)g(streams)g(consisting)h(en)o (tirely)g(of)f(cac)n(he)h(misses)f(and)h(writebac)o(ks/writethroughs,)0 1866 y (so)i(an)h(implementation)g(that)e(counts)h(only)h(those)f(references)h(that) f(reac)o(h)h(memory)f(is)h(reasonable.)21 b(Despite)0 1923 y(this)16 b(there) f(are)g(t)n(w)o(o)g(p)q(oten)o(tial)h(reasons)e(to)h(coun)o(t)g(cac)o(he)g (references:)68 2015 y fg(\017)23 b ft(A)n(t)13 b(least)g(one)g(prop)q(osed)g (researc)o(h)g(mac)o(hine)h(exhibits)g(di\013erent)e(cac)o(he)i(b)q(eha)o(vio\ r)f(for)f(remote)h(and)g(lo)q(cal)114 2072 y(pages)i(\(remote)g(pages)g(are)g (uncachable\))h([5)o(].)21 b(An)15 b(implemen)q(tation)g(on)h(this)g(hardw)n (are)f(should)i(coun)o(t)114 2128 y(all)f(lo)q(cal)g(references)g(that)e(hit) i(in)g(cac)o(he)g(b)q(ecause)g(they)f(w)o(ould)h(miss)f(if)h(the)f(page)g(w)o (ere)g(remote.)68 2222 y fg(\017)23 b ft(Cac)n(he)d(hit)g(tra\016c)f(ma)n(y)h (b)q(e)g(a)f(go)q(o)q(d)h(predictor)g(of)f(cac)o(he)h(miss)g(tra\016c.)32 b (This)20 b(is)g(an)g(op)q(en)g(question)114 2278 y(requiring)c(further)f(stud\ y)l(.)0 2371 y(It)c(is)h(certainly)g(simpler)g(\(from)e(a)h(hardw)n(are)g(sta\ ndp)q(oint\))f(not)g(to)h(coun)o(t)g(cac)o(he)g(hits;)h(this)g(allo)o(ws)f (the)g(reference)0 2428 y(coun)o(ters)k(to)f(b)r(e)h(implemen)q(ted)g(in)h (the)g(memory)e(prop)r(er,)g(as)h(opp)r(osed)g(to)f(the)i(v)m(arious)f(cac)o (hes.)71 2484 y(There)g(are)f(man)o(y)h(existing)h(and)f(prop)q(osed)g(m)o (ultipro)r(cessors)g(exhibiting)i(the)e(the)g fr(Complete)g ft(top)q(ology)0 2540 y(that)h(are)h(amenable)h(to)f(our)g(algorithms)g(and)g(tec)o(hniques.) 28 b(These)17 b(mac)o(hines)h(include)i(net)o(w)n(ork-connected)0 2597 y(NUMA) g(m)n(ultipro)s(cessors)f(suc)o(h)h(as)f(the)h(the)g(BBN)g(Butter\015y)g([14) o(])g(and)g(IBM)g(RP3)g([40)o(],)g(as)f(w)o(ell)i(as)e(bus-)0 2653 y(based)c (mac)o(hines)h(suc)o(h)f(as)f(the)h(Encore)g(Gigamax)f([56)o(].)19 b(Numerous) c(prop)q(osed)g(mac)n(hines)h(suc)o(h)f(as)g(the)g(NYU)0 2710 y(Ultracomputer) j([21],)g(and)h(the)f(directory-based)i(cac)o(he)f(mac)n(hine)h(\(D)n(ASH\))f (at)f(Stanford)g([36)o(])g(w)n(ould)i(also)0 2766 y(supp)r(ort)15 b(our)i(alg\ orithms.)23 b(In)17 b(con)o(trast,)e(the)h fr(T)l(ree)g ft(and)h fr(U-T)l(ree) f ft(top)q(ologies)h(are)f(applicable)j(to)c(far)h(few)o(er)0 2823 y(mac)o (hines.)33 b(The)19 b(only)h(existing)g(mac)o(hine)g(that)f(comes)g(close)h (is)g(the)f(exp)r(erimen)o(tal)g(A)o(CE)g(m)o(ultipro)r(cessor)p eop %%Page: 72 83 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(72)0 195 y(dev)o(elop)r(ed)18 b(b)o(y)g(IBM's) f(researc)o(h)h(division)h([19)o(].)27 b(This)18 b(mac)o(hine)h(is)f(based)g (on)g(romp)f(micropro)q(cessors)g(with)0 252 y(small)23 b(lo)q(cal)g(memories) f(and)h(a)f(large)g(global)h(memory)-5 b(.)41 b(The)22 b(access)h(ratio)e(\(l\ o)q(cal:global:remote\))h(is)h(an)0 308 y(inv)n(erted)18 b(triangle)h(inequal\ ity)f(in)h(whic)o(h)f(the)g(third)g(side)h(is)f(longer)h(than)e(the)h(sum)g (of)f(the)h(other)f(t)o(w)n(o.)28 b(W)l(e)0 364 y(ha)o(v)n(e)19 b(not)f(thoro\ ughly)g(in)o(v)o(estigated)g(extensions)h(of)f(our)g(algorithms)g(to)g(this)g (case)g(or)g(to)g(the)g(case)g(of)g(tree)0 421 y(mac)o(hines)h(satisfying)g (a)f(triangle)g(inequalit)q(y)g(\(where)h(it)f(is)h(c)o(heap)r(er)f(to)f(cros\ s)h(a)g(no)q(de)h(than)f(to)g(stop)g(there)0 477 y(and)e(then)h(mo)n(v)o(e)f (on\);)g(in)h(b)q(oth)f(cases,)g(preliminary)i(w)o(ork)d(has)h(con)o(vinced)i (us)e(that)f(the)i(extensions)f(are)g(not)0 534 y(straigh)n(tforw)n(ard.)30 b (T)l(ree-based)19 b(mac)n(hines)h(using)f(an)f(arc)o(hitecture)h(suc)o(h)g (as)f(F)l(at-trees)g([35)o(])g(w)n(ould)i(also)e(b)r(e)0 590 y(amenable)e(to) f(our)g(tec)n(hniques.)71 647 y(Our)h(migration)h(algorithms)f(also)g(extend) h(to)f(pro)q(duct)h(topologies;)h(the)e(appropriate)g(algorithm)h(is)g(run)0 703 y(indep)s(endently)h(in)h(eac)o(h)f(dimension)i(of)d(the)i(resulting)g (top)q(ology)l(.)28 b(The)18 b(most)f(common)h(examples)h(of)e(such)0 760 y (top)q(ologies)e(are)f(h)o(yp)r(ercub)r(es)h(and)g(meshes,)f(which)h(are)f (pro)q(ducts)h(of)f(linear)i(trees;)e(our)h(algorithms)f(for)g fr(T)l(ree)0 816 y ft(and)19 b fr(U-T)m(ree)g ft(apply)h(to)e(suc)o(h)i(mac)n(hines.)33 b (Scheurich)19 b(and)g(Dub)r(ois)g(ha)o(v)o(e)g(indep)s(endently)g(discov)n (ered)h(our)0 873 y(migration)14 b(algorithm)g(for)f fr(U-T)l(ree)h ft(and)g (in)o(v)o(estigated)g(it)g(on)g(a)f(mesh)h(mac)o(hine;)h(they)f(w)n(ere)g(not) g(a)n(w)o(are)f(of)h(its)0 929 y(comp)q(etitive)h(prop)r(erties)g([44)o(].)71 985 y(Using)f(our)g(migration)f(tec)o(hniques)j(on)d(rings)h(and)h(pro)q(duct\ s)f(in)o(v)o(olving)h(rings)f(\(e.g.,)e(tori\))i(is)g(problematic)0 1042 y (due)22 b(to)e(cycling)j(and)e(pinning)i(e\013ects.)37 b(Bidirectional)23 b (e\013ects)e(exhibit)i(the)e(phenomenon)h(of)e fq(pinning)g ft(in)0 1098 y (which)15 b(accesses)g(in)h(b)q(oth)f(directions)h(from)e(the)h(far)g(side)h (of)e(the)h(ring)h(can)f(pin)h(a)e(page)h(in)h(place)g(and)f(prev)o(en)o(t)0 1155 y(it)h(from)f(mo)n(ving.)21 b(Unidirectional)d(rings)e(or)f(unidirection\ al)k(routing)c(structures)g(imp)r(osed)h(on)f(bidirectional)0 1211 y(rings)f (a)o(v)n(oid)h(pinning,)g(but)f(exhibit)h(the)f(related)g(phenomenon)h(of)f fq (cycling)e ft(in)j(whic)o(h)f(a)g(static)f(access)h(pattern)0 1268 y(distribu\ ted)i(o)n(v)o(er)e(the)g(ring)g(can)h(cause)f(a)g(page)g(to)f(cycle)i(around) f(the)g(ring)h(when)f(it)h(should)g(sta)n(y)f(put.)19 b(These)0 1324 y(e\013e\ cts)c(w)n(ould)h(cause)f(the)g(size)h(of)f(the)g(ring)g(to)g(en)o(ter)f(into) g(the)i(comp)q(etitiv)o(e)g(factor)d(for)i(the)g(straigh)n(tforw)n(ard)0 1381 y(extensions)h(of)f(our)g(algorithms)g(to)f(these)i(top)q(ologies;)f(a)g(more) g(sophisticated)h(approac)n(h)g(is)f(needed.)0 1524 y fk(7.7)70 b(F)-6 b(urth\ er)23 b(W)-6 b(ork)0 1625 y ft(The)16 b(primary)g(problem)h(of)e(interest)h (from)f(a)g(theoretical)i(standp)q(oint)e(is)i(the)f(migration)g(problem)h (\(1-serv)n(er)0 1682 y(with)e(excursions\).)21 b(This)15 b(is)h(the)f(\014rs\ t)g(w)n(ork)g(to)f(b)r(e)h(done)g(on)g(that)f(problem,)i(so)e(comp)r(etitiv)o (e)h(algorithms)g(for)0 1738 y(migration)h(on)g(other)f(top)q(ologies)h(is)h (an)f(op)q(en)g(area)f(for)h(researc)n(h.)22 b(The)16 b(authors)g(ha)n(v)o (e)g(used)h(the)f(tec)n(hniques)0 1795 y(dev)o(elop)r(ed)d(in)h([38)o(])e(to) g(inv)o(estigate)g(some)g(small)i(graphs)e(\(other)g(than)g(those)h(considere\ d)h(in)f(this)h(w)n(ork\))e(whose)0 1851 y(distance)k(metrics)f(satisfy)f(the) h(triangle)h(inequality)m(.)j(Our)c(results)h(indicate)g(that)e(3-comp)q(etit\ ive)h(algorithms)0 1908 y(exist)21 b(for)e(the)h(small)h(examples)g(inv)o(est\ igated.)35 b(Based)20 b(on)g(our)g(results)h(and)f(exp)r(erience,)j(w)n(e)d (b)r(elieve)h(the)0 1964 y(follo)o(wing)16 b(conjecture)f(to)g(b)r(e)g(true:) 71 2021 y fr(Conjecture:)j fq(Ther)m(e)c(exists)g(a)g(3-c)n(omp)n(etitive)g (algorithm)g(for)h(the)f(migr)n(ation)g(pr)n(oblem)g(for)g(any)g(top)n(olo)n (gy)0 2077 y(having)i(a)h(symmetric)f(distanc)m(e)g(matrix)h(that)g(satis\014\ es)e(the)h(triangle)g(ine)m(quality.)71 2133 y ft(Another)21 b(direction)j (for)d(extensions)i(of)e(this)h(w)o(ork)f(is)i(to)e(consider)i(randomized)g (algorithms)e(for)h(the)0 2190 y(migration)12 b(problems.)20 b(F)l(or)12 b (the)g(randomized)h(mo)q(del)h(of)e(comp)q(etitiv)o(eness,)i(the)e(on-line)i (algorithm)f(is)f(allow)n(ed)0 2246 y(to)k(mak)n(e)g(use)h(of)f(random)f(c)o (hoices.)24 b(The)17 b(cost)e(incurred)j(b)o(y)e(the)g(randomized)i(algorithm) e(on)g(a)g(sequence)h(of)0 2303 y(requests)g(is)g(de\014ned)i(to)d(b)q(e)h (the)g(a)o(v)o(erage)f(of)g(its)i(costs)e(o)n(v)o(er)h(all)h(of)e(the)h(p)r (ossible)h(series)f(of)g(random)f(c)o(hoices.)0 2359 y(Comp)q(etitiv)o(eness) k(is)f(de\014ned)i(as)d(b)r(efore,)h(but)g(it)g(uses)h(this)f(mo)q(di\014ed)h (de\014nition)h(of)e(cost.)31 b(F)-5 b(or)19 b(a)f(n)o(um)o(b)r(er)0 2416 y (of)d(di\013erent)h(problems,)g(it)g(has)g(b)q(een)h(sho)o(wn)f(that)f(the)h (comp)q(etitive)g(factor)f(can)h(b)q(e)g(reduced)h(b)o(y)f(the)g(use)g(of)0 2472 y(randomness)f([17)o(,)g(27)o(].)0 2615 y fk(7.8)70 b(Conclusion)0 2717 y ft(W)l(e)13 b(ha)n(v)o(e)g(presen)o(ted)g(and)f(analyzed)i(new)f(strongly)f (comp)q(etitive)h(algorithms)f(for)g(replication)i(and)f(migration)0 2773 y (problems)j(that)f(arise)h(in)h(the)e(managemen)o(t)g(of)g(distributed)j(shar\ ed)d(memory)g(for)g(m)o(ultipro)r(cessor)h(systems.)p eop %%Page: 73 84 bop 0 50 a fm(CHAPTER)15 b(7.)35 b(COMPETITIVE)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)f(ALGORITHMS)168 b ft(73)0 195 y(These)16 b(algorithms)f(are)g(appli\ cable)j(to)c(man)o(y)h(existing)h(and)g(prop)q(osed)f(m)o(ultipro)r(cessor)g (arc)o(hitectures.)21 b(The)0 252 y(pro)q(ofs)15 b(of)h(the)g(comp)q(etitive) g(prop)q(erties)g(of)g(the)g(algorithms)g(ha)o(v)n(e)g(also)g(serv)o(ed)g(to) f(establish)j(new)e(results)g(in)0 308 y(the)i(area)g(of)g(comp)q(etitiv)o (e)h(algorithm)f(analysis)h(for)e(serv)o(er)h(problems.)30 b(W)-5 b(e)19 b (ha)n(v)o(e)g(also)f(brie\015y)h(highligh)q(ted)0 364 y(some)c(of)g(the)g(iss\ ues)h(inv)n(olv)o(ed)g(in)g(actually)g(applying)h(these)e(algorithms)g(to)g (real)g(systems.)p eop %%Page: 74 85 bop 0 506 a fl(Chapter)34 b(8)0 714 y fo(Implemen)m(ting)43 b(NUMA)c(Memory) 0 839 y(Managemen)m(t)0 1079 y fk(8.1)70 b(Ov)n(erview)0 1181 y ft(This)23 b (c)o(hapter)g(considers)g(concerns)h(that)d(arise)i(in)h(implemen)q(ting)e (the)h(algorithms)g(for)f(managing)g(non-)0 1237 y(uniform)g(shared)g(memory) f(discussed)j(in)e(Chapter)g(7.)39 b(Both)22 b(hardw)n(are)g(and)g(soft)m(w)o (are)g(implementation)0 1294 y(concerns)13 b(are)e(co)o(v)o(ered.)19 b(A)12 b (case)g(study)g(of)g(the)g(Mac)n(h)g(op)r(erating)g(system)f(indicates)j(that) d(integration)g(of)h(these)0 1350 y(algorithms)18 b(into)f(op)q(erating)h(sys\ tems)g(do)q(es)g(not)g(p)r(ose)f(ma)s(jor)g(problems.)29 b(On)19 b(the)f(othe\ r)g(hand,)h(hardw)n(are)0 1407 y(supp)r(ort)14 b(is)i(required)g(to)f(obtain) g(the)h(full)g(functionality)g(of)e(the)i(algorithms.)71 1463 y(A)i(basic)i (arc)n(hitectural)g(mo)q(del)g(that)e(corresp)q(onds)h(to)g(a)f(n)o(um)o(b)r (er)g(of)h(actual)g(m)n(ultipro)s(cessors)f(is)i(used.)0 1519 y(This)i(mo)q (del)h(is)f(an)g(example)h(of)e(the)h fr(Uniform)g ft(topology)g(from)f(Chapt\ er)h(7,)g(and)g(is)g(used)h(to)e(ev)n(aluate)0 1576 y(algorithms)15 b fr(R)g ft(\(for)g(replication\))h(and)f fr(M)g ft(\(for)f(migration\).)20 b(The)15 b (mo)q(del)h(drives)f(b)r(oth)f(the)i(implementation)0 1632 y(analysis)g(for)f (Mac)n(h)g(and)h(studies)g(on)f(the)g(p)r(erformance)f(of)h(these)h(algorithm\ s)f(rep)q(orted)g(elsewhere)h([7].)0 1776 y fk(8.2)70 b(Pro)r(cessor-Memory) 23 b(Mo)r(del)0 1877 y ft(The)16 b(basic)h(arc)n(hitectural)h(model)f(used)g (for)e(the)i(ev)m(aluation)g(of)e(the)i(algorithms)f(assumes)f(an)h(idealized) j(ma-)0 1934 y(c)o(hine)g(comp)q(osed)f(of)g(pro)q(cessor-memory)f(clusters,) h(with)h(ph)o(ysical)g(memory)e(divided)j(en)o(tirely)f(among)e(the)0 1990 y (clusters)i(as)g(sho)n(wn)g(in)h(Figure)f(8.1.)29 b(A)19 b(pro)q(cessor-memor\ y)f(cluster)h(consists)g(of)g(one)g(or)f(more)g(pro)q(cessors)0 2046 y(with)e (lo)q(cal)g(memory)f(that)f(is)i(equally)h(accessible)g(\(in)f(terms)e(of)h (latency\))h(to)e(all)i(pro)r(cessors.)j(This)d(idealized)0 2103 y(mac)o(hine) g(has)e(t)n(w)o(o)g(distinct)i(memory)e(access)h(latencies;)h(the)f(latency)g (to)f(access)h(memory)f(in)i(the)e(same)h(clus-)0 2159 y(ter,)e(and)h(a)g(sig\ ni\014cantly)g(larger)g(latency)g(to)g(access)g(memory)f(in)i(another)e(clust\ er.)20 b(As)14 b(a)f(result,)i(all)f(memory)0 2216 y(within)22 b(a)e(single)i (cluster)f(is)g(equiv)o(alen)o(t,)h(and)e(all)i(pro)q(cessors)e(within)i(a)e (cluster)i(ha)n(v)o(e)f(identical)g(memory)0 2272 y(access)e(c)o(haracteristi\ cs)g(\(latency)g(in)g(terms)f(of)g(the)h(cluster)g(in)g(which)g(the)g(accesse\ d)g(memory)f(is)h(lo)r(cated\).)0 2329 y(Finally)n(,)c(all)i(memory)e(lo)q (cations)h(outside)g(the)g(cluster)g(ha)o(v)n(e)g(the)g(same)f(access)h(laten\ cy)g(from)f(an)o(y)g(pro)q(cessor)0 2385 y(in)h(the)f(cluster.)71 2442 y(This) f(basic)h(mo)q(del)g(sub)r(divides)h(memory)d(into)g(pages)h(and)h(pages)f (in)o(to)g(lo)q(cations.)20 b(P)o(ages)13 b(are)h(the)g(funda-)0 2498 y(men)o (tal)j(unit)h(of)f(memory)g(managemen)o(t;)g(lo)r(cations)g(are)g(the)h(funda\ men)o(tal)f(unit)i(of)d(memory)h(access.)27 b(The)0 2555 y(existence)17 b(of) e(virtual)h(memory)f(mapping)h(mec)o(hanisms)h(is)f(assumed,)f(and)h(therefor\ e)f(a)g(distinction)j(is)e(made)0 2611 y(b)r(et)n(w)o(een)d(virtual)h(pages)e (\(in)i(the)f(address)g(space)g(of)f(some)h(program)f(or)g(the)h(op)q(erating) g(system\))f(and)i(ph)o(ysical)0 2667 y(pages)i(\(actual)h(memory)e(in)j(the) e(clusters\).)24 b(Mapping)17 b(virtual)g(pages)g(to)e(physical)i(pages)f(is) h(among)f(the)h(re-)0 2724 y(sp)q(onsibilitie)q(s)g(of)e(a)f(memory)g(managem\ en)o(t)g(facility)m(.)19 b(Sharing)d(ma)n(y)f(result)g(in)h(more)e(than)h(one) g(virtual)g(page)0 2780 y(in)k(one)g(or)f(more)g(address)g(spaces)h(b)q(eing) g(mapp)r(ed)f(to)g(the)h(same)f(ph)o(ysical)h(page.)30 b(The)18 b(page)h(size) g(used)g(b)o(y)951 2927 y(74)p eop %%Page: 75 86 bop 0 50 a fm(CHAPTER)15 b(8.)35 b(IMPLEMENTING)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)459 b ft(75)283 293 y(P)298 278 y fh(m)298 428 y 2 120 v 583 293 a ft (P)598 278 y fh(m)598 428 y 2 120 v 298 429 a 300 2 v 492 518 a 304 2 v 120 x 2 120 v 561 589 a ft(Memory)793 638 y 2 120 v 492 640 a 304 2 v 448 579 a 45 2 v 149 x 2 300 v 1333 293 a(P)1348 278 y fh(m)1348 428 y 2 120 v 1633 293 a ft (P)1648 278 y fh(m)1648 428 y 2 120 v 1348 429 a 300 2 v 1542 518 a 304 2 v 120 x 2 120 v 1611 589 a ft(Memory)1843 638 y 2 120 v 1542 640 a 304 2 v 1498 579 a 45 2 v 149 x 2 300 v 388 278 a fh(q)52 b(q)g(q)922 b(q)52 b(q)g(q)973 578 y(v)121 b(v)g(v)297 728 y 1354 2 v 150 x 2 150 v 728 818 a ft(Interconnec\ tion)16 b(Net)n(w)o(ork)1648 878 y 2 150 v 297 880 a 1354 2 v 550 976 a(Figur\ e)g(8.1:)j(Clustered)d(NUMA)f(Arc)o(hitecture)0 1160 y(the)g(algorithms)g(can) h(b)q(e)g(no)f(smaller)h(than)f(the)g(hardw)o(are)g(page)g(size)h(if)g(mappin\ g)g(is)f(used,)h(but)f(it)h(ma)n(y)f(b)r(e)g(a)0 1216 y(m)o(ultiple)i(thereof\ .)71 1272 y(The)d(mo)q(del)h(is)f(normalized)h(b)o(y)f(assuming)h(that)e(the) h(di\013erence)h(in)g(cost)e(b)r(et)o(w)n(een)i(an)f(in-cluster)h(memory)0 1329 y(access)20 b(and)f(a)h(remote-cluster)f(memory)g(access)h(is)g(1;)h(thi\ s)f(cost)f(includes)j(the)e(e\013ects)f(b)q(oth)h(of)f(increased)0 1385 y(lat\ ency)c(and)g(use)g(of)g(in)o(terconnection)h(bandwidth.)21 b(This)15 b(cost)f (only)h(applies)i(to)d(accesses)h(that)f(actually)h(use)0 1442 y(the)e(interc\ onnection)h(net)o(w)o(ork.)k(In)c(addition,)h(read)e(and)h(write)f(costs)g (are)g(assumed)g(to)g(b)r(e)g(identical,)h(but)g(the)0 1498 y(results)i(gener\ alize)g(to)f(situations)g(in)h(which)g(this)f(is)h(not)f(the)g(case.)71 1555 y (This)20 b(mo)q(del)g(p)r(ermits)g(the)g(analysis)g(of)f(tec)o(hniques)i(for) e(managing)h(the)g(p)q(erformance)g(impact)g(of)f(dis-)0 1611 y(tribution)g (in)g(a)e(shared)i(memory)e(system.)28 b(Tw)n(o)18 b(tec)o(hniques)h(are)f (of)f(particular)i(interest,)e fq(r)n(eplic)n(ation)h ft(and)0 1668 y fq(migr) n(ation)f ft(of)h(virtual)g(memory)l(.)26 b(Replication)20 b(consists)e(of)f (making)h(a)f(cop)o(y)h(of)f(a)g(virtual)h(page)g(in)g(another)0 1724 y(clust\ er)h(and)g(up)r(dating)g(mappings)h(that)e(b)q(ene\014t)h(from)f(this)i(cop)o (y)e(\(in)i(reduced)f(access)g(time\).)31 b(Migration)0 1781 y(consists)17 b (of)g(mo)n(ving)h(a)e(virtual)i(page)f(from)f(one)h(cluster)h(to)e(another)h (and)g(up)r(dating)g(all)h(mappings)f(to)g(that)0 1837 y(page.)28 b(The)18 b (costs)f(of)h(replication)h(and)f(migration)g(are)g(formalized)h(as)e fn(r)i ft(and)f fn(m)g ft(resp)q(ectively)g(in)h(terms)e(of)0 1893 y(access)g(costs.) 23 b(These)17 b(costs)e(include)k(latency)e(and)g(o)n(v)o(erhead)g(comp)q(one\ n)o(ts,)f(but)h(do)f(not)g(include)j(the)e(addi-)0 1950 y(tional)g(costs)f (of)g(allo)r(cating)h(a)f(ph)o(ysical)i(page)e(in)h(a)g(cluster)g(with)g(a)f (page)g(shortage)g(\(i.e.,)f(causing)j(pageout\))0 2006 y(or)d(the)g(addition\ al)i(b)r(ene\014ts)e(of)g(freeing)h(a)f(ph)o(ysical)i(page)e(in)h(suc)o(h)g (a)f(cluster)h(\(i.e.,)e(a)o(v)o(oiding)i(pageout\).)k(The)0 2063 y(issues)i (inv)o(olv)o(ed)f(in)i(page)e(reclaim)h(are)g(separated)f(from)f(migration)i (and)f(replication)i(and)f(addressed)g(in)0 2119 y(Section)16 b(8.4.1.)71 2176 y(The)i(basic)h(mo)q(del)g(applies)h(to)e(an)n(y)g(mac)o(hine)h(that)f(can)g (implemen)q(t)g(NUMA)g(memory)l(.)29 b(This)19 b(includes)0 2232 y(NUMA)h(mac) n(hines)h(that)e(implemen)q(t)g(the)h(mo)q(del)g(directly)h(\(e.g.,)d(Butter\ \015y)i([14)o(]\),)g(NORMA)g(\(no)f(remote)0 2289 y(memory)13 b(access\))g (mac)o(hines)i(with)e(uniform)h(access)g(costs,)f(and)h(net)n(w)o(ork)f(share\ d)h(memory)f(implementations)0 2345 y(on)h(net)n(w)o(orks)f(with)h(uniform)g (comm)o(unication)h(costs.)j(F)l(or)13 b(the)h(last)g(t)n(w)o(o)f(classes)h (of)f(mac)o(hines,)i(it)f(is)g(essen)o(tial)0 2402 y(that)j(the)h(system)f (\(hardw)o(are)g(and/or)g(soft)n(w)o(are\))g(supp)r(ort)g(access)h(forw)n(ard\ ing)g(so)g(that)f(accesses)h(to)f(pages)0 2458 y(that)c(are)h(not)g(in)h(lo)q (cal)g(memory)e(can)i(b)q(e)f(satis\014ed)h(at)f(remote)f(memory)h fq(without) h ft(mo)n(ving)g(the)f(en)o(tire)h(page)e(to)0 2514 y(lo)r(cal)18 b(memory)f (\(an)h(exp)q(ensive)g(op)q(eration\).)28 b(Most)17 b(curren)o(t)g(NORMA)i (mac)n(hines)g(\(e.g.,)e(h)o(yp)q(ercub)r(es\))h(and)0 2571 y(net)o(w)n(ork)d (shared)g(memory)g(implemen)q(tations)f([11,)g(37,)h(58)o(])g(do)g(not)g(supp) r(ort)f(this)i(functionality)l(.)p eop %%Page: 76 87 bop 0 50 a fm(CHAPTER)15 b(8.)35 b(IMPLEMENTING)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)459 b ft(76)0 195 y fk(8.3)70 b(Basic)22 b(Problem)0 297 y ft(The)d (basic)h(problem)g(is)g(managemen)n(t)f(of)g(distributed)h(shared)f(memory)g (in)h(arc)n(hitectures)g(conforming)f(to)0 353 y(mo)q(del.)i(F)l(or)14 b(arc) o(hitectures)h(utilizing)j(a)d(single)h(cop)o(y)f(of)f(the)i(op)q(erating)f (system)f(\(NUMA)h(m)o(ultipro)r(cessors\),)0 409 y(this)j(includes)j(not)c (only)i(memory)e(shared)h(explicitly)o(,)g(but)g(also)g(memory)f(shared)h(imp\ licitl)q(y)i(via)f(cop)o(y-on-)0 466 y(write)f(tec)n(hniques.)28 b(Because)19 b(this)e(w)o(ork)g(relies)i(on)e(replication)i(and)f(migration)f(to)g(p)r(erf\ orm)f(this)i(manage-)0 522 y(men)o(t,)13 b(the)h(problem)g(can)f(b)r(e)g(rest\ ated)g(as)g(\\When)h(and)f(under)h(what)f(circumstances)h(should)h(\(virtual\ \))e(pages)0 579 y(b)r(e)i(replicated)i(in)o(to)e(or)f(migrated)h(to)g(memory) g(in)h(other)f(clusters?")71 635 y(There)c(is)g(a)g(signi\014cant)g(di\013ere\ nce)h(b)q(et)o(w)o(een)f(this)g(problem)h(and)f(the)g(related)h(problem)f(of) g(sno)q(op)o(y)g(cac)n(hing;)0 692 y(this)k(mo)q(del)h(and)f(most)f(of)h(its) g(realizations)h(do)f(not)f(ha)o(v)o(e)h(broadcast,)f(in)o(v)n(alidate,)h(or) g(sno)q(oping)g(mec)o(hanisms)0 748 y(that)h(can)i(main)o(tain)f(consistency) i(among)d(m)o(ultiple)j(copies)f(of)f(a)g(virtual)g(page)g(when)h(writes)f (o)q(ccur)1799 732 y fj(1)1819 748 y ft(.)26 b(This)0 805 y(prohibits)16 b (replication)h(of)e(writable)h(pages.)k(Because)c(the)g(issue)g(of)f(page)g (reclamation)h(has)f(b)r(een)g(separated,)0 861 y(migration)h(of)g(read-only) h(pages)f(mak)n(e)g(little)i(sense;)e(replication)i(is)f(less)f(costly)m(,)g (and)g(pro)o(vides)h(the)f(b)q(ene\014ts)0 918 y(of)21 b(lo)q(cal)h(access)f (to)f(t)n(w)o(o)h(clusters)g(instead)h(of)e(one.)38 b(As)20 b(a)h(result,)i (the)e(o)n(v)o(erall)h(problem)f(splits)h(into)e(t)o(w)n(o)0 974 y(sub-proble\ ms:)68 1068 y fg(\017)j ft(Replication)17 b(of)e(read-only)h(pages.)68 1161 y fg(\017)23 b ft(Migration)15 b(of)f(writable)i(pages.)0 1255 y(If)22 b(a)g (virtual)h(page)e(is)i(b)q(oth)f(read-only)h(and)f(writable)h(at)e(di\013eren) o(t)h(times)g(during)h(the)f(execution)h(of)f(an)0 1312 y(application,)e(eac) n(h)e(segmen)o(t)g(\(read-only)g(or)f(read/write\))g(of)g(the)h(page's)f(exis\ tence)i(is)g(considered)g(to)e(b)q(e)h(a)0 1368 y(separate)d(instance)h(of)e (the)i(corresp)q(onding)g(problem.)0 1511 y fk(8.4)70 b(Op)q(erating)23 b(Sys\ tems)f(Issues)0 1613 y ft(There)17 b(are)f(t)n(w)o(o)g(sets)g(of)g(op)q(erati\ ng)h(systems)f(issues)h(that)f(m)o(ust)g(b)q(e)h(addressed)g(in)g(implemen)q (ting)g(our)f(algo-)0 1669 y(rithms:)21 b(\(i\))15 b(ho)o(w)g(to)g(tak)n(e)h (into)e(account)h(the)g(limited)j(size)e(of)f(physical)h(memory;)f(and)h(\(ii\ \))g(the)f(interactions)0 1726 y(b)r(et)n(w)o(een)k(the)f(prop)r(osed)g(algor\ ithms)g(and)h(the)f(memory)g(managemen)o(t)g(p)q(ortion)h(of)f(an)g(op)q(erat\ ing)h(system.)0 1782 y(The)c(\014rst)f(issue)i(in)o(v)o(olv)o(es)f(interactio\ ns)f(among)g(the)h(v)m(arious)g(uses)g(of)f(memory)g(\(including)j(our)e(algo\ rithms\),)0 1839 y(and)h(in)h(particular,)f(ho)o(w)g(to)f(allo)r(cate)h(memor\ y)f(among)g(these)h(users)g(of)g(memory)-5 b(.)22 b(The)16 b(second)h(issue)g (arises)0 1895 y(primarily)i(if)f(the)g(algorithms)g(are)f(implemen)q(ted)h (in)g(the)g(op)q(erating)g(system)f(k)o(ernel;)j(this)e(is)g(an)g(attractiv)n (e)0 1951 y(c)o(hoice)d(b)q(oth)f(b)q(ecause)h(it)f(p)q(ermits)g(direct)h(acc\ ess)f(to)f(mapping)i(information)f(and)g(also)f(b)r(ecause)h(it)g(mak)o(es)g (the)0 2008 y(resulting)g(b)q(ene\014ts)g(a)n(v)n(ailable)g(to)f(all)h(applic\ ations)g(on)f(the)g(system,)f(instead)i(of)e(just)h(those)g(that)f(are)g(mo)q (di\014ed)0 2064 y(to)j(use)g(our)g(algorithms.)0 2186 y fp(8.4.1)55 b(Limite\ d)16 b(Ph)o(ysical)h(Memory)g(Size)0 2272 y ft(Since)i(there)f(are)g(man)o (y)g(other)f(demands)i(on)e(physical)i(memory)e(b)r(esides)i(those)e(generate\ d)h(b)o(y)g(replication)0 2328 y(and)f(migration)g(\(e.g.)f(memory)h(allo)r (cation,)g(\014le)h(mapping,)g(in)o(ternal)g(use)f(b)o(y)g(the)g(op)q(erating) g(system,)g(etc.\),)0 2385 y(extending)i(the)g(replication)h(and)e(migration) h(algorithms)f(to)g(con)n(trol)h(memory)e(usage)h(is)h(not)f(appropriate.)0 2441 y(The)g(op)q(erating)g(system)g(should)h(separate)f(reuse)g(of)g(ph)o (ysical)h(memory)e(\(pageout)g(or)h(page)g(reclaim\))h(from)0 2498 y(replicat\ ion)13 b(and)f(migration)g(issues.)19 b(Ev)o(en)12 b(the)g(fallbac)o(k)g(p)q (osition)h(of)e(dedicating)i(a)e(\014xed)i(amoun)n(t)e(of)h(ph)o(ysical)0 2554 y(memory)17 b(to)f(replication/migration)j(is)f(not)f(a)g(goo)q(d)h(idea;)g (this)g(prev)o(en)o(ts)f(reallo)r(cation)h(of)e(memory)h(to)g(the)0 2611 y (uses)e(for)g(which)g(it)h(is)f(in)h(greatest)e(demand.)0 2658 y 779 2 v 52 2716 a fi(1)69 2731 y fs(Researchers)g(hav)o(e)f(recently)h(b)r(egun)g(to)g (inv)o(estigate)h(systems)g(that)f(do)g(incorp)r(orate)h(page-level)f(consist\ ency)i(mec)o(hanisms;)0 2777 y(PLUS)d([6)o(])f(is)i(one)f(example.)18 b(The) 12 b(page)h(replication)q(/mig)q(ratio)q(n)i(problem)f(for)f(suc)o(h)g(system\ s)g(is)g(similar)i(to)d(the)h(cac)o(he)g(residency)0 2823 y(problem)h(for)f (sno)r(op)o(y)g(caches.)p eop %%Page: 77 88 bop 0 50 a fm(CHAPTER)15 b(8.)35 b(IMPLEMENTING)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)459 b ft(77)71 195 y(The)18 b(use)g(of)f(indep)s(endent)g(pageout)g (daemons)h(is)g(an)g(appropriate)g(tec)n(hnique)i(for)d(managing)g(the)h(v)n (ari-)0 252 y(ous)f(cluster)h(memory)e(p)q(o)q(ols.)26 b(These)17 b(daemons)g (can)h(resp)q(ond)f(appropriately)h(to)e(the)h(p)r(oten)n(tially)i(di\013eren) o(t)0 308 y(memory)c(demands)i(from)e(cluster)i(to)e(cluster.)23 b(Any)16 b (of)f(sev)o(eral)h(standard)g(paging)g(algorithms)g(can)h(b)q(e)f(used)0 364 y (to)f(implement)g(the)h(daemons)f([47)o(].)20 b(The)c(migration)f(and)h(repli\ cation)h(costs)e(can)g(b)r(e)g(dynamically)i(mo)q(di\014ed)0 421 y(to)j(feed) h(information)f(ab)q(out)g(page)h(a)n(v)n(ailabilit)q(y)f(bac)o(k)g(into)g (the)g(replication)i(and)f(migration)f(algorithms.)0 477 y(These)15 b(mo)q (di\014cations)h(should)f(b)r(e)g(restricted)g(to)f(increasing)h(costs)g(ab)q (o)n(v)o(e)g(their)g(basic)g(levels)g(to)f(re\015ect)h(page)0 534 y(shortages) g(and)h(hence)h(discourage)f(future)g(use)g(of)f(memory)g(in)i(clusters)f(wit\ h)g(page)g(shortages.)k(Decreasing)0 590 y(migration)12 b(costs)f(to)h(encour\ age)g(freeing)g(memory)g(in)g(clusters)h(with)f(shortages,)f(and)h(cost-based) g(reclamation)0 647 y(of)i(replicates)i(are)e(fraugh)o(t)g(with)h(p)q(oten)o (tial)g(danger;)f(this)h(is)h(b)q(ecause)f(not)f(all)i(system)e(comp)q(onen)o (ts)h(that)e(use)0 703 y(memory)g(are)g(or)f(can)i(b)q(e)f(sensitive)h(to)e (costs)h({)g(hence)h(these)g(cost-driv)o(en)f(alternativ)o(es)h(ma)n(y)f(resu\ lt)h(in)g(hea)o(vily)0 760 y(used)i(pages)f(b)q(eing)h(evicted)h(in)f(order)f (to)f(retain)i(ligh)o(tly)g(used)g(ones)f(for)g(cost-insensitive)g(comp)r(one\ n)o(ts.)0 878 y fp(8.4.2)55 b(Memory)17 b(Managemen)m(t)i(In)n(teractions)0 964 y ft(The)14 b(replication)h(and)f(migration)f(algorithms)h(can)g(b)q(e)g (incorp)r(orated)f(in)o(to)g(the)h(op)q(erating)g(system's)e(memory)0 1021 y (managemen)o(t)f(co)r(de)h(on)g(a)g(NUMA)g(m)o(ultipro)r(cessor.)19 b(Impleme\ nting)13 b(these)f(algorithms)g(inside)i(the)f(op)q(erating)0 1077 y(system) 18 b(allo)o(ws)g(their)h(b)q(ene\014ts)g(to)e(accrue)i(to)e(all)i(uses)f(of)g (the)g(mac)o(hine,)i(but)e(also)g(results)g(in)h(interactions)0 1133 y(with)c (other)f(memory)g(managemen)n(t)h(functions)g(that)f(m)n(ust)g(b)r(e)h(dealt) f(with)h(as)f(part)g(of)g(the)h(implemen)q(tation.)71 1190 y(The)h(virtual)g (memory)f(managemen)o(t)g(p)r(ortion)h(of)f(the)h(Mac)n(h)g(op)q(erating)g (system)g([41)o(])f(is)h(used)h(as)e(a)h(base)0 1246 y(for)d(a)h(case)g(study) g(of)g(these)g(interactions.)19 b(The)14 b(Mac)n(h)h(VM)e(implemen)q(tation)h (is)g(cleanly)i(split)f(in)o(to)f(mac)n(hine-)0 1303 y(dep)r(endent)f(and)h (mac)o(hine-indep)t(endent)g(p)q(ortions.)19 b(The)14 b(mac)o(hine-dep)s(ende\ nt)g(p)q(ortion)g(consists)g(of)f(a)h(single)0 1359 y(mo)q(dule,)24 b(the)e fq (pmap)h ft(mo)q(dule,)h(that)d(is)i(resp)q(onsible)h(for)d(all)i(ph)o(ysical) g(map)f(op)q(erations.)40 b(The)22 b(mac)n(hine-)0 1416 y(indep)s(endent)e (p)q(ortion)h(of)f(the)h(system)f(associates)h(a)g(pmap)f(with)h(eac)o(h)g (address)g(space)f(and)h(inv)o(ok)n(es)g(the)0 1472 y(pmap)h(module)h(as)e (needed)i(to)e(p)q(erform)g(mapping)h(op)r(erations.)38 b(Mac)n(h)22 b(supp)r (orts)f(parallel)i(execution)f(of)0 1529 y(m)o(ultiple)c(threads)d(within)j (a)d(single)i(task's)e(address)h(space;)g(this)g(parallel)i(execution)f(can)f (result)g(in)h(a)f(single)0 1585 y(pmap)f(b)r(eing)h(used)g(sim)o(ultaneously) g(b)o(y)f(more)g(than)g(one)g(pro)q(cessor.)71 1642 y(Mac)n(h)j(en)o(visions) h(supp)r(ort)e(for)h(non-uniform)h(ph)o(ysical)g(memory)e(b)o(y)h(adding)h (a)f(NUMA)g(la)o(y)o(er)g(b)q(et)o(w)n(een)0 1698 y(the)23 b(mac)n(hine-dep)t (enden)o(t)g(and)f(mac)o(hine-indep)t(endent)g(p)r(ortions)g(of)g(the)g(VM)h (system)f([47)o(].)41 b(This)23 b(la)o(y)o(er)0 1754 y(hides)f(the)e(non-unif\ ormity)g(of)g(the)g(memory)g(structure)g(b)o(y)h(translating)f fq(lo)m(gic)n (al)h(p)n(ages)e ft(\(manipulated)j(b)o(y)0 1811 y(the)16 b(mac)n(hine-indep) 5 b(endent)15 b(p)q(ortion)h(of)f(the)h(VM)f(system\))g(to)g(physical)h(pages) g(\(in)g(the)g(hardw)n(are\))g(in)g(order)0 1867 y(to)h(implemen)q(t)g(arc)n (hitecture-sp)s(eci\014c)i(memory)e(managemen)o(t)g(p)r(olicies)i(\(e.g.,)d (replication,)k(migration\).)27 b(A)0 1924 y(similar)18 b(translation)f(pro)q (cess)h(is)f(needed)h(for)f(pmaps)g(to)f(allow)g(replication)j(within)f(a)f (single)h(address)g(space)0 1980 y(if)j(its)g(threads)f(are)g(spread)h(across) f(m)n(ultiple)j(clusters;)h(in)d(this)g(case,)h(eac)o(h)e(cluster)h(w)o(ould) g(ha)o(v)o(e)g(its)f(o)o(wn)0 2037 y(ph)o(ysical)i(map,)g(but)f(the)g(collect\ ion)i(of)d(these)i(pmaps)e(w)o(ould)i(app)q(ear)f(as)f(a)h(single)h(logical)g (pmap)f(to)g(the)0 2093 y(mac)o(hine-indep)t(endent)c(p)q(ortion)g(of)g(the)g (VM)g(system.)25 b(This)18 b(adds)f(additional)i(complexity)e(to)g(the)g(NUMA) 0 2150 y(la)o(y)o(er)c(to)f(b)q(etter)g(supp)r(ort)g(m)o(ulti-threaded)i(appl\ ications,)h(and)e(ma)n(y)g(complicate)h(in)o(terfaces)f(that)f(allo)o(w)h(use\ rs)0 2206 y(to)f(mo)q(dify)i(replication)h(and)e(migration)g(b)r(eha)o(vior)g (b)q(ecause)h(an)f(address)g(space)g(no)g(longer)h(uniquely)h(sp)q(eci\014es) 0 2263 y(a)g(cluster.)71 2319 y(There)j(are)h(t)n(w)o(o)f(other)g(minor)h(int\ eractions)f(of)h(the)f(NUMA)h(la)o(y)o(er)f(with)h(the)g(remainder)g(of)g(the) f(Mac)o(h)0 2376 y(VM)d(system,)f(and)i(one)f(ma)r(jor)g(in)o(teraction.)20 b (The)15 b(t)o(w)n(o)g(minor)h(in)o(teractions)f(are:)68 2453 y fg(\017)23 b ft (P)n(ageout)17 b(functionality)g(m)o(ust)g(b)q(e)h(mo)n(v)o(ed)f(into)g(the)g (NUMA)g(la)o(y)o(er)g(and)g(redesigned)i(to)d(use)i(m)o(ultiple)114 2510 y (pageout)10 b(daemons)g(as)g(discussed)j(in)e(Section)g(8.4.1.)17 b(The)11 b (resulting)h(daemons)e(m)o(ust)g(cop)q(e)h(with)g(system-)114 2566 y(wide)16 b (\(logical\))f(page)h(shortages)e(as)g(w)o(ell)j(as)d(page)i(shortages)e(in)i (the)f(individual)j(clusters.)68 2653 y fg(\017)23 b ft(There)11 b(m)n(ust)g (b)q(e)g(a)g(ph)o(ysical)h(page)f(a)n(v)n(ailable)h(for)e(ev)o(ery)h(free)g (logical)h(page.)18 b(Therefore,)11 b(use)h(of)e(a)h(ph)o(ysical)114 2710 y (page)k(for)g(replication)j(ma)n(y)e(require)g(stealing)g(a)g(logical)h(page) e(from)g(the)h(resident)f(page)h(subsystem)f(to)114 2766 y(main)o(tain)f(this) h(in)o(v)n(arian)o(t.)k(F)l(reeing)14 b(of)g(suc)o(h)g(a)g(replicate)i(should) f(cause)f(the)g(stolen)h(logical)g(page)f(to)f(b)r(e)114 2823 y(returned)i (to)g(the)g(resident)g(page)g(subsystem's)g(free)g(list.)p eop %%Trailer eos end TeXDict begin bos 300 @start /fa df[<007000F001E003C007800F001E001C00 380038007000700070007000E000E000E000E000E000E000E000E0007000700070007000380038 001C001E000F00078003C001F000F00070>12 36 7 4 24]40 dc[<6000F00078003C001E000F 000780038001C001C000E000E000E000E00070007000700070007000700070007000E000E000E0 00E001C001C0038007800F001E003C007800F0006000>12 36 4 4 24]41 dc[<01C00001C000 01C00001C000C1C180F1C780F9CF807FFF001FFC0007F00007F0001FFC007FFF00F9CF80F1C780 C1C18001C00001C00001C00001C000>17 20 3 -4 24]42 dc[<1C3E7E7F3F1F070E1E7CF860> 8 12 8 6 24]44 dc[<3078FCFC7830>6 6 9 0 24]46 dc[<000300000780000780000F80000F 00001F00001E00001E00003E00003C00007C0000780000780000F80000F00001F00001E00003E0 0003C00003C00007C0000780000F80000F00000F00001F00001E00003E00003C00003C00007C00 00780000F80000F00000F00000600000>17 36 3 4 24]47 dc[<03F0000FFE003FFF007C0F80 7003C0E001C0F000E0F000E06000E00000E00000E00001C00001C00003C0000780000F00001E00 003C0000780000F00001E00007C0000F80001E00E03C00E07FFFE0FFFFE07FFFE0>19 28 2 0 24]50 dc[<183C7E7E3C180000000000000000183C7E7E3E1E0E1C3C78F060>7 26 8 6 24]59 dc[<000300000780001F80003F00007E0001FC0003F00007E0001FC0003F00007E0000FC0000FC 00007E00003F00001FC00007E00003F00001FC00007E00003F00001F80000780000300>17 24 3 -2 24]60 dc[<600000F00000FC00007E00003F00001FC00007E00003F00001FC00007E00003F 00001F80001F80003F00007E0001FC0003F00007E0001FC0003F00007E0000FC0000F000006000 00>17 24 3 -2 24]62 dc[<0FF0003FFC007FFF00700F00F00380F00380600780000F00003E00 007C0001F00001E00003C00003C00003C00003C00003C000038000000000000000000000000000 00000003800007C00007C00007C000038000>17 28 3 0 24]63 dc[<00700000F80000F80000 D80000D80001DC0001DC0001DC00018C00038E00038E00038E00038E0003060007070007070007 07000707000FFF800FFF800FFF800E03800E03801C01C01C01C07F07F0FF8FF87F07F0>21 28 1 0 24]65 dc[<00F8E003FEE007FFE00F07E01E03E03C01E03800E07000E07000E0700000E00000 E00000E00000E00000E00000E00000E00000E000007000007000E07000E03800E03C00E01E01C0 0F07C007FF8003FE0000F800>19 28 2 0 24]67 dc[<7FF800FFFE007FFF001C0F801C03C01C 03C01C01E01C00E01C00E01C00F01C00701C00701C00701C00701C00701C00701C00701C00701C 00F01C00E01C00E01C01E01C01C01C03C01C0F807FFF00FFFE007FF800>20 28 1 0 24]68 dc[ 21 28 1 0 24]69 dc[19 28 2 0 24]70 dc[<01F1C003 FDC00FFFC01F0FC01C03C03803C03801C07001C07001C0700000E00000E00000E00000E00000E0 0000E00FF0E01FF0E00FF07001C07001C07003C03803C03803C01C07C01F0FC00FFFC003FDC001 F1C0>20 28 2 0 24]71 dc[<7F07F0FF8FF87F07F01C01C01C01C01C01C01C01C01C01C01C01 C01C01C01C01C01C01C01FFFC01FFFC01FFFC01C01C01C01C01C01C01C01C01C01C01C01C01C01 C01C01C01C01C01C01C07F07F0FF8FF87F07F0>21 28 1 0 24]72 dc[<7FFF00FFFF807FFF00 01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000 01C00001C00001C00001C00001C00001C00001C00001C00001C0007FFF00FFFF807FFF00>17 28 3 0 24]73 dc[<01FFC003FFC001FFC0000E00000E00000E00000E00000E00000E00000E00000E 00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00F00E00F00E 00F03C007FFC003FF0000FC000>18 28 3 0 24]74 dc[<7FE000FFE0007FE0000E00000E0000 0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000 0E00000E00000E00700E00700E00700E00700E00707FFFF0FFFFF07FFFF0>20 28 1 0 24]76 dc[21 28 1 0 24]77 dc[<7E07F0FF0FF87F07F01D81C01D81C01D81C01DC1 C01CC1C01CC1C01CE1C01CE1C01CE1C01C61C01C71C01C71C01C31C01C39C01C39C01C39C01C19 C01C19C01C1DC01C0DC01C0DC01C0DC07F07C0FF87C07F03C0>21 28 1 0 24]78 dc[<0FF800 3FFE007FFF00780F00700700F00780E00380E00380E00380E00380E00380E00380E00380E00380 E00380E00380E00380E00380E00380E00380E00380E00380F00780700700780F007FFF003FFE00 0FF800>17 28 3 0 24]79 dc[20 28 1 0 24]80 dc[<7FF800FFFE007FFF 001C0F801C03801C03C01C01C01C01C01C01C01C03C01C03801C0F801FFF001FFE001FFE001C0F 001C07001C03801C03801C03801C03801C03801C039C1C039C1C039C7F01F8FF81F87F00F0>22 28 1 0 24]82 dc[<03F3801FFF803FFF807C0F80700780E00380E00380E00380E00000700000 7800003F00001FF00007FE0000FF00000F800003C00001C00000E00000E06000E0E000E0E001E0 F001C0F80780FFFF80FFFE00E7F800>19 28 2 0 24]83 dc[<7FFFF8FFFFF8FFFFF8E07038E0 7038E07038E0703800700000700000700000700000700000700000700000700000700000700000 700000700000700000700000700000700000700000700007FF0007FF0007FF00>21 28 1 0 24] 84 dc[23 28 0 0 24]85 dc[21 28 1 0 24]87 dc[<7F 8FE07F9FE07F8FE00E07000F0700070E00078E00039C0003DC0001F80001F80000F00000F00000 700000F00000F80001F80001DC00039E00038E00070F000707000E07800E03801E03C07F07F0FF 8FF87F07F0>21 28 1 0 24]88 dc[<7FFF00FFFF80FFFF807FFF00>17 4 3 4 24]95 dc[<1F E0003FF8007FFC00781E00300E0000070000070000FF0007FF001FFF007F0700780700E00700E0 0700E00700F00F00781F003FFFF01FFBF007E1F0>20 20 3 0 24]97 dc[<7E0000FE00007E00 000E00000E00000E00000E00000E00000E3E000EFF800FFFC00FC1E00F80E00F00700E00700E00 380E00380E00380E00380E00380E00380F00700F00700F80E00FC1E00FFFC00EFF80063E00>21 28 0 0 24]98 dc[<01FE0007FF001FFF803E0780380300700000700000E00000E00000E00000 E00000E00000E000007000007001C03801C03E03C01FFF8007FF0001FC00>18 20 3 0 24]99 dc[<001F80003F80001F8000038000038000038000038000038003E3800FFB801FFF803C1F8038 0F80700780700380E00380E00380E00380E00380E00380E00380700780700780380F803C1F801F FFF00FFBF803E3F0>21 28 2 0 24]100 dc[<01F00007FC001FFE003E0F003807807003807003 80E001C0E001C0FFFFC0FFFFC0FFFFC0E000007000007001C03801C03E03C01FFF8007FF0001FC 00>18 20 3 0 24]101 dc[<001F80007FC000FFE000E1E001C0C001C00001C00001C0007FFFC0 FFFFC0FFFFC001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000 01C00001C00001C0007FFF007FFF007FFF00>19 28 1 0 24]102 dc[<01E1F007FFF80FFFF81E 1E301C0E003807003807003807003807003807001C0E001E1E001FFC001FF80039E0003800001C 00001FFE001FFFC03FFFE07801F0700070E00038E00038E00038E000387800F07E03F01FFFC00F FF8001FC00>21 31 1 11 24]103 dc[<7E0000FE00007E00000E00000E00000E00000E00000E 00000E3E000EFF800FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E 00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC>23 28 0 0 24]104 dc[<03800007C0 0007C00007C0000380000000000000000000000000007FC000FFC0007FC00001C00001C00001C0 0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000FFFF00FFFF 80FFFF00>17 29 4 0 24]105 dc[21 28 1 0 24]107 dc[<7FE000FFE0007F E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000 E00000E00000E00000E00000E00000E00000E00000E00000E00000E0007FFFC0FFFFE07FFFC0> 19 28 2 0 24]108 dc[<7CE0E000FFFBF8007FFFF8001F1F1C001E1E1C001E1E1C001C1C1C00 1C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C 007F1F1F00FFBFBF807F1F1F00>25 20 -1 0 24]109 dc[<7E3E00FEFF807FFFC00FC1C00F80 E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E07FC3 FCFFE7FE7FC3FC>23 20 0 0 24]110 dc[<01F0000FFE001FFF003E0F803803807001C07001C0 E000E0E000E0E000E0E000E0E000E0F001E07001C07803C03C07803E0F801FFF000FFE0001F000 >19 20 2 0 24]111 dc[<7E3E00FEFF807FFFC00FC1E00F80E00F00700E00700E00380E00380E 00380E00380E00380E00380F00700F00700F80E00FC1E00FFFC00EFF800E3E000E00000E00000E 00000E00000E00000E00000E00007FC000FFE0007FC000>21 30 0 10 24]112 dc[<01E38007 FB801FFF803E1F80380F80700780700780E00380E00380E00380E00380E00380E0038070078070 0780380F803C1F801FFF800FFB8003E38000038000038000038000038000038000038000038000 3FF8003FF8003FF8>21 30 2 10 24]113 dc[<7F87E0FF9FF07FBFF803F87803F03003E00003 C00003C0000380000380000380000380000380000380000380000380000380007FFE00FFFF007F FE00>21 20 1 0 24]114 dc[<07F7003FFF007FFF00780F00E00700E00700E007007C00007FE0 001FFC0003FE00001F00600780E00380E00380F00380F80F00FFFF00FFFC00E7F000>17 20 3 0 24]115 dc[<0180000380000380000380000380007FFFC0FFFFC0FFFFC0038000038000038000 0380000380000380000380000380000380000380400380E00380E00380E001C1C001FFC000FF80 003E00>19 25 1 0 24]116 dc[<7E07E0FE0FE07E07E00E00E00E00E00E00E00E00E00E00E00E 00E00E00E00E00E00E00E00E00E00E00E00E00E00E01E00F03E007FFFC03FFFE01FCFC>23 20 0 0 24]117 dc[<7F8FF0FF8FF87F8FF01E03C00E03800E03800E0380070700070700070700038E 00038E00038E00038E0001DC0001DC0001DC0000F80000F800007000>21 20 1 0 24]118 dc[< FF8FF8FF8FF8FF8FF83800E03800E03800E01C01C01C01C01C71C01CF9C01CF9C01CD9C01CD9C0 0DDD800DDD800DDD800D8D800F8F800F8F80070700>21 20 1 0 24]119 dc[<7F8FF07F9FF07F 8FF0070700078E00039E0001DC0001F80000F80000700000F00000F80001DC00039E00038E0007 07000F07807F8FF0FF8FF87F8FF0>21 20 1 0 24]120 dc[<7F8FF0FF8FF87F8FF00E01C00E03 800E0380070380070700070700038700038600038E0001CE0001CE0000CC0000CC0000DC000078 0000780000780000700000700000700000F00000E00079E0007BC0007F80003F00001E0000>21 30 1 10 24]121 dc[<3FFFF07FFFF07FFFF07001E07003C0700780000F00001E00003C0000F8 0001F00003C0000780000F00701E00703C0070780070FFFFF0FFFFF0FFFFF0>20 20 1 0 24] 122 dc[<0007E0001FE0007FE000780000E00000E00000E00000E00000E00000E00000E00000E0 0000E00000E00000E00001E0007FC000FF8000FF80007FC00001E00000E00000E00000E00000E0 0000E00000E00000E00000E00000E00000E00000E000007800007FE0001FE00007E0>19 36 2 4 24]123 dc[<7C0000FF0000FFC00003C00000E00000E00000E00000E00000E00000E00000E000 00E00000E00000E00000E00000F000007FC0003FE0003FE0007FC000F00000E00000E00000E000 00E00000E00000E00000E00000E00000E00000E00000E00003C000FFC000FF00007C0000>19 36 2 4 24]125 dc dfe /fb df[<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFF7FFE 7FFE3FFC1FF80FF003C0>16 18 3 -2 23]15 dc dfe /fc df[<1F00618040C08060C0600060 006000C00180030006000C00102020207FC0FFC0>11 16 1 0 15]50 dc dfe /fd df[<0F8030 E040708030C038E0384038003800700070006000C00180030006000C08080810183FF07FF0FFF0 >13 21 2 0 18]50 dc dfe /fe df[<1C003E007F00FF80FF80FF807F003E001C00>9 9 5 0 19]46 dc[<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000 FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000 FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE007FFFFE7F FFFE7FFFFE>23 39 5 0 34]49 dc[<00FF800003FFF0000FFFFC001F03FE003800FF007C007F 80FE003FC0FF003FC0FF003FE0FF001FE0FF001FE07E001FE03C003FE000003FE000003FC00000 3FC000007F8000007F000000FE000000FC000001F8000003F0000003E00000078000000F000000 1E0000003C00E0007000E000E000E001C001C0038001C0070001C00FFFFFC01FFFFFC03FFFFFC0 7FFFFFC0FFFFFF80FFFFFF80FFFFFF80>27 39 3 0 34]50 dc[<007F800003FFF00007FFFC00 0F81FE001F00FF003F80FF003F807F803F807F803F807F801F807F800F007F800000FF000000FF 000000FE000001FC000001F8000007F00000FFC00000FFF0000001FC0000007E0000007F000000 7F8000003FC000003FC000003FE000003FE03C003FE07E003FE0FF003FE0FF003FE0FF003FC0FF 007FC07E007F807C007F003F01FE001FFFFC0007FFF00000FF8000>27 39 3 0 34]51 dc[<00 000E0000001E0000003E0000007E000000FE000000FE000001FE000003FE0000077E00000E7E00 000E7E00001C7E0000387E0000707E0000E07E0000E07E0001C07E0003807E0007007E000E007E 000E007E001C007E0038007E0070007E00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000 FE000000FE000000FE000000FE000000FE000000FE000000FE00007FFFF8007FFFF8007FFFF8> 29 39 2 0 34]52 dc[<0C0003000F803F000FFFFE000FFFFC000FFFF8000FFFF0000FFFE0000F FFC0000FFE00000E0000000E0000000E0000000E0000000E0000000E0000000E7FC0000FFFF800 0F80FC000E003E000C003F0000001F8000001FC000001FC000001FE000001FE018001FE07C001F E0FE001FE0FE001FE0FE001FE0FE001FC0FC001FC078003F8078003F803C007F001F01FE000FFF F80003FFF00000FF8000>27 39 3 0 34]53 dc[<0007F000003FFC0000FFFE0001FC0F0003F0 1F8007E03F800FC03F801FC03F801F803F803F801F003F8000007F0000007F0000007F000000FF 000000FF0FC000FF3FF800FF707C00FFC03E00FFC03F00FF801F80FF801FC0FF001FC0FF001FE0 FF001FE0FF001FE07F001FE07F001FE07F001FE07F001FE03F001FE03F001FC01F801FC01F803F 800FC03F0007E07E0003FFFC0000FFF000003FC000>27 39 3 0 34]54 dc[<380000003E0000 003FFFFFF03FFFFFF03FFFFFF07FFFFFE07FFFFFC07FFFFF807FFFFF0070000E0070000E007000 1C00E0003800E0007000E000E0000000E0000001C000000380000007800000078000000F000000 0F0000001F0000001F0000003F0000003E0000003E0000007E0000007E0000007E0000007E0000 00FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000007C0000003800 00>28 41 4 0 34]55 dc[<003FC00001FFF00003FFFC0007C07E000F003F001E001F001E000F 803E000F803E000F803F000F803F000F803FC00F003FF01F001FFC1E001FFE3C000FFFF80007FF E00003FFF80001FFFC0001FFFE0007FFFF000F0FFF801E03FFC03C01FFC07C007FE078001FE0F8 0007E0F80007E0F80003E0F80003E0F80003E0F80003C07C0003C07C0007803F000F001FC03E00 0FFFFC0003FFF800007FC000>27 39 3 0 34]56 dc[<007F800001FFF00007FFF8000FE0FC00 1F807E003F803F007F003F007F001F80FF001F80FF001FC0FF001FC0FF001FC0FF001FE0FF001F E0FF001FE0FF001FE07F001FE07F003FE03F003FE01F807FE00F807FE007C1DFE003FF9FE0007E 1FE000001FE000001FC000001FC000001FC000003F801F003F803F803F003F803F003F807E003F 807C001F01F8001E03F0000FFFE00007FF800001FE0000>27 39 3 0 34]57 dc[<0000038000 00000007C00000000007C0000000000FE0000000000FE0000000000FE0000000001FF000000000 1FF0000000003FF8000000003FF8000000003FF80000000073FC0000000073FC00000000F3FE00 000000E1FE00000000E1FE00000001C0FF00000001C0FF00000003C0FF80000003807F80000007 807FC0000007003FC0000007003FC000000E003FE000000E001FE000001E001FF000001C000FF0 00001FFFFFF000003FFFFFF800003FFFFFF80000780007FC0000700003FC0000700003FC0000E0 0001FE0000E00001FE0001E00001FF0001C00000FF0001C00000FF00FFFE001FFFFEFFFE001FFF FEFFFE001FFFFE>47 41 2 0 52]65 dc[41 41 3 0 49]66 dc[<00003FF001800003FFFE0380000FFFFF8780003FF007DF8000FF8001FF8001FE00007F8003 FC00003F8007F000001F800FF000000F801FE0000007801FE0000007803FC0000007803FC00000 03807FC0000003807F80000003807F8000000000FF8000000000FF8000000000FF8000000000FF 8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000007F800000 00007F80000000007FC0000003803FC0000003803FC0000003801FE0000003801FE0000007000F F00000070007F000000E0003FC00001E0001FE00003C0000FF8000F800003FF007E000000FFFFF C0000003FFFF000000003FF80000>41 41 4 0 50]67 dc[39 41 3 0 45]69 dc[36 41 3 0 43]70 dc[47 41 3 0 54]72 dc[22 41 2 0 26]73 dc[ 34 41 3 0 41]76 dc[58 41 3 0 65]77 dc[47 41 3 0 54]78 dc[<0000FFE000000007FFFC0000003FC07F8000 007F001FC00001FC0007F00003F80003F80007F00001FC000FF00001FE001FE00000FF001FE000 00FF003FC000007F803FC000007F807FC000007FC07F8000003FC07F8000003FC07F8000003FC0 FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000 003FE0FF8000003FE0FF8000003FE0FF8000003FE07F8000003FC07FC000007FC07FC000007FC0 3FC000007F803FC000007F801FE00000FF001FE00000FF000FF00001FE0007F00001FC0003F800 03F80001FC0007F00000FF001FE000003FC07F8000000FFFFE00000000FFE00000>43 41 4 0 52]79 dc[39 41 3 0 47]80 dc[ 48 41 3 0 52]82 dc[<007F806003FFF0E007FFF9E00F807FE01F001FE03E0007E07C0003E07C 0001E0FC0001E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFE00007FFFE000 3FFFFC001FFFFE000FFFFF8007FFFFC003FFFFE000FFFFE00007FFF000007FF000000FF8000007 F8000003F8600001F8E00001F8E00001F8E00001F8F00001F0F00001F0F80003F0FC0003E0FF00 07C0FFE01F80F3FFFF00E0FFFE00C01FF000>29 41 4 0 38]83 dc[<7FFFFFFFFFC07FFFFFFF FFC07FFFFFFFFFC07F803FC03FC07E003FC007C078003FC003C078003FC003C070003FC001C0F0 003FC001E0F0003FC001E0E0003FC000E0E0003FC000E0E0003FC000E0E0003FC000E0E0003FC0 00E000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000 003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0 000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000 003FC0000000003FC0000000003FC00000007FFFFFE000007FFFFFE000007FFFFFE000>43 40 2 0 48]84 dc[46 41 3 0 53]85 dc[68 41 1 0 71]87 dc[<01FF800007FFF0000F81F8001FC07E001FC07E00 1FC03F000F803F8007003F8000003F8000003F8000003F80000FFF8000FFFF8007FC3F800FE03F 803F803F803F003F807F003F80FE003F80FE003F80FE003F80FE003F807E007F807F00DF803F83 9FFC0FFF0FFC01FC03FC>30 27 2 0 33]97 dc[33 42 2 0 38]98 dc[<001FF80000FFFE0003F01F0007E03F800FC03F801F803F803F801F007F800E00 7F0000007F000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000007F0000 007F0000007F8000003F8001C01F8001C00FC0038007E0070003F01E0000FFFC00001FE000>26 27 2 0 31]99 dc[<00003FF80000003FF80000003FF800000003F800000003F800000003F800 000003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8 00000003F800001FE3F80000FFFBF80003F03FF80007E00FF8000FC007F8001F8003F8003F8003 F8007F0003F8007F0003F8007F0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF00 03F800FF0003F800FF0003F8007F0003F8007F0003F8007F0003F8003F8003F8001F8003F8000F 8007F80007C00FF80003F03BFF8000FFF3FF80003FC3FF80>33 42 2 0 38]100 dc[<003FE000 01FFF80003F07E0007C01F000F801F801F800F803F800FC07F000FC07F0007C07F0007E0FF0007 E0FF0007E0FFFFFFE0FFFFFFE0FF000000FF000000FF0000007F0000007F0000007F0000003F80 00E01F8000E00FC001C007E0038003F81F0000FFFE00001FF000>27 27 2 0 32]101 dc[<0007 F0003FFC00FE3E01F87F03F87F03F07F07F07F07F03E07F00007F00007F00007F00007F00007F0 0007F000FFFFC0FFFFC0FFFFC007F00007F00007F00007F00007F00007F00007F00007F00007F0 0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0007FFF 807FFF807FFF80>24 42 2 0 21]102 dc[<00FF81F003FFE7F80FC1FE7C1F80FC7C1F007C383F 007E107F007F007F007F007F007F007F007F007F007F007F007F003F007E001F007C001F80FC00 0FC1F8001FFFE00018FF800038000000380000003C0000003E0000003FFFF8001FFFFF001FFFFF 800FFFFFC007FFFFE01FFFFFF03E0007F07C0001F8F80000F8F80000F8F80000F8F80000F87C00 01F03C0001E01F0007C00FC01F8003FFFE00007FF000>30 40 2 13 34]103 dc[33 42 3 0 38]104 dc[<07000FC01FE03FE03FE03FE01FE00FC00700 0000000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE>15 43 3 0 20]105 dc [31 42 2 0 36]107 dc[15 42 3 0 20]108 dc[53 27 3 0 58]109 dc[33 27 3 0 38]110 dc[<003FE0 0001FFFC0003F07E000FC01F801F800FC03F800FE03F0007E07F0007F07F0007F07F0007F0FF00 07F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F0007F03F 800FE03F800FE01F800FC00FC01F8007F07F0001FFFC00003FE000>29 27 2 0 34]111 dc[ 33 39 2 12 38]112 dc[24 27 2 0 28]114 dc[<03FE300FFFF01E03F03800F07000 70F00070F00070F80070FC0000FFE0007FFE007FFF803FFFE01FFFF007FFF800FFF80003FC0000 FC60007CE0003CF0003CF00038F80038FC0070FF01E0F7FFC0C1FF00>22 27 2 0 27]115 dc[< 00700000700000700000700000F00000F00000F00001F00003F00003F00007F0001FFFF0FFFFF0 FFFFF007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F000 07F00007F03807F03807F03807F03807F03807F03803F03803F87001F86000FFC0001F80>21 38 1 0 27]116 dc[33 27 3 0 38]117 dc[33 27 1 0 36]118 dc[47 27 1 0 50]119 dc[33 27 1 0 36]120 dc[33 39 1 12 36]121 dc[<3FFFFF803FFFFF803F007F003C00FE003801FE007803FC007803F8007007F800 700FF000700FE000001FC000003FC000007F8000007F000000FF000001FE038001FC038003F803 8007F803800FF007800FE007801FE007003FC00F003F801F007F007F00FFFFFF00FFFFFF00>25 27 2 0 31]122 dc dfe /ff df[<0001FF8000001FFFF000007FFFFC0000FF81FE0001FE007F 0007FC003F800FF8003FC00FF8001FE01FF8001FF03FF0001FF03FF0000FF87FF0000FF87FF000 0FFCFFF0000FFCFFF0000FFCFFF0000FFEFFF0000FFEFFF0000FFEFFF0000FFEFFF0000FFEFFF0 000FFFFFF0000FFFFFF0000FFF7FF0000FFF7FF0001FFF7FF0001FFF3FF0001FFF3FF0001FFF1F F0003FFF0FF8003FFF07F8007FFF03FC006FFF01FE01CFFF00FFEF8FFF007FFF0FFF000FFE0FFE 0000000FFE0000000FFE0000000FFE0000000FFC0000000FFC03E0001FFC07F0001FF80FF8001F F81FFC001FF01FFC003FF01FFC003FE01FFC003FC01FF8007FC00FF000FF800FE001FF0007C003 FE0007F01FFC0003FFFFF00001FFFFC000007FFF0000000FF80000>40 57 4 1 49]57 dc[<00 000001F80000000000000001F80000000000000003FC0000000000000003FC0000000000000007 FE0000000000000007FE0000000000000007FE000000000000000FFF000000000000000FFF0000 00000000001FFF800000000000001FFF800000000000001FFF800000000000003FFFC000000000 00003FFFC00000000000007FFFE00000000000007DFFE00000000000007DFFE0000000000000FD FFF0000000000000F8FFF0000000000001F8FFF8000000000001F07FF8000000000001F07FF800 0000000003F07FFC000000000003E03FFC000000000007E03FFE000000000007C01FFE00000000 000FC01FFF00000000000F801FFF00000000000F800FFF00000000001F800FFF80000000001F00 07FF80000000003F0007FFC0000000003E0003FFC0000000003E0003FFC0000000007E0003FFE0 000000007C0001FFE000000000FC0001FFF000000000F80000FFF000000000F80000FFF0000000 01FFFFFFFFF800000001FFFFFFFFF800000003FFFFFFFFFC00000003FFFFFFFFFC00000003E000 003FFC00000007E000003FFE00000007C000001FFE0000000FC000001FFF0000000F8000000FFF 0000001F8000000FFF8000001F0000000FFF8000001F00000007FF8000003F00000007FFC00000 3E00000003FFC000007E00000003FFE00000FF00000001FFE000FFFFFC0001FFFFFFF0FFFFFC00 01FFFFFFF0FFFFFC0001FFFFFFF0FFFFFC0001FFFFFFF0>68 59 3 0 75]65 dc[ 60 59 4 0 70]66 dc[<0000001FFF000030000001FFFFE000F000000FFFFFFC01F000007FFFFF FE03F00001FFFE007F87F00003FFE0000FCFF0000FFF000003FFF0001FFC000001FFF0003FF800 00007FF0007FF00000003FF000FFC00000003FF001FFC00000001FF003FF800000000FF007FF00 0000000FF00FFF0000000007F00FFE0000000007F01FFE0000000003F01FFE0000000003F03FFC 0000000003F03FFC0000000001F03FFC0000000001F07FFC0000000001F07FF80000000001F07F F80000000000007FF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000 FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF80000000000 00FFF8000000000000FFF8000000000000FFF80000000000007FF80000000000007FF800000000 00007FF80000000000007FFC0000000000F03FFC0000000000F03FFC0000000000F03FFC000000 0000F01FFE0000000000F01FFE0000000001E00FFE0000000001E00FFF0000000001E007FF0000 000003C003FF8000000003C001FFC0000000078000FFE00000000F00007FF00000001F00003FF8 0000003E00001FFC0000007C00000FFF000001F8000003FFE00007F0000001FFFE003FC0000000 7FFFFFFF000000000FFFFFFC0000000001FFFFF000000000001FFF000000>60 61 5 1 71]67 dc[66 59 4 0 76]68 dc[57 59 4 0 65]69 dc[<001FFF00000001FFFFF0000003FFFFFC000007F007FE00000FF8 01FF00001FFC00FF80001FFC007FC0001FFC007FE0001FFC003FE0000FF8003FF0000FF8003FF0 0007F0003FF00001C0003FF0000000003FF0000000003FF0000000003FF0000000FFFFF000000F FFFFF000007FF83FF00001FF803FF00007FE003FF0000FF8003FF0001FF0003FF0003FE0003FF0 007FE0003FF0007FE0003FF000FFC0003FF000FFC0003FF000FFC0003FF000FFC0003FF000FFC0 007FF0007FE0007FF0007FE000DFF0003FF0039FF8001FFC0F0FFFF007FFFE0FFFF001FFFC07FF F0003FE000FFF0>44 38 3 0 48]97 dc[<000000003FC00000003FFFC00000003FFFC0000000 3FFFC00000003FFFC000000001FFC000000000FFC000000000FFC000000000FFC000000000FFC0 00000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC0000000 00FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC00000FFC0FFC0 000FFFF8FFC0003FFFFEFFC000FFE03FFFC001FF000FFFC003FE0003FFC007FC0001FFC00FF800 00FFC01FF00000FFC01FF00000FFC03FF00000FFC03FE00000FFC07FE00000FFC07FE00000FFC0 7FE00000FFC0FFE00000FFC0FFE00000FFC0FFE00000FFC0FFE00000FFC0FFE00000FFC0FFE000 00FFC0FFE00000FFC0FFE00000FFC0FFE00000FFC07FE00000FFC07FE00000FFC07FE00000FFC0 3FF00000FFC03FF00000FFC01FF00000FFC00FF80001FFC007F80003FFC003FC0007FFC001FE00 0FFFE000FFC07EFFFF003FFFFCFFFF000FFFF0FFFF0001FF80FFFF>48 60 3 0 55]100 dc[<00 01FFC000000FFFF800003FFFFE0000FF80FF0001FE003F8007FC001FC00FF8000FE00FF8000FF0 1FF00007F03FF00007F83FF00007F87FE00007F87FE00003FC7FE00003FC7FE00003FCFFE00003 FCFFFFFFFFFCFFFFFFFFFCFFFFFFFFFCFFE0000000FFE0000000FFE0000000FFE00000007FE000 00007FE00000007FE00000003FE00000003FF000003C1FF000003C1FF000003C0FF800007807FC 0000F803FE0001F001FF0007E000FFC03FC0003FFFFF000007FFFC000000FFE000>38 38 3 0 45]101 dc[<00FF00000000FFFF00000000FFFF00000000FFFF00000000FFFF0000000007FF00 00000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00000000 03FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00 00000003FF0000000003FF0000000003FF0000000003FF007FC00003FF01FFF80003FF07FFFC00 03FF0F03FE0003FF1C01FF0003FF3001FF8003FF6000FF8003FFE000FFC003FFC000FFC003FF80 00FFC003FF8000FFC003FF8000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC0 03FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF00 00FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC0 03FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC 3FFFFFFFFFFC3FFFFFFFFFFC3FFFFF>48 60 4 0 55]104 dc[<00F00003FC0007FE000FFE000F FF001FFF001FFF001FFF000FFF000FFE0007FE0003FC0000F00000000000000000000000000000 000000000000000000000000000000000000FF00FFFF00FFFF00FFFF00FFFF0007FF0003FF0003 FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003 FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003 FF00FFFFF8FFFFF8FFFFF8FFFFF8>21 61 3 0 27]105 dc[<00FE007FC000FFFE01FFF800FFFE 07FFFC00FFFE0F03FE00FFFE1C01FF0007FE3001FF8003FE6000FF8003FEE000FFC003FEC000FF C003FF8000FFC003FF8000FFC003FF8000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF 0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FF C003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF 0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC0FFFFFC3FFF FFFFFFFC3FFFFFFFFFFC3FFFFFFFFFFC3FFFFF>48 38 4 0 55]110 dc[<00FF01FF8000FFFF0F FFF000FFFF3FFFFC00FFFFFE03FF00FFFFF000FF8003FFC0007FC003FF80003FE003FF00003FF0 03FF00001FF803FF00001FFC03FF00000FFC03FF00000FFE03FF00000FFE03FF000007FE03FF00 0007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF 03FF000007FF03FF000007FF03FF000007FE03FF000007FE03FF00000FFE03FF00000FFC03FF00 000FFC03FF00001FF803FF00001FF803FF00003FF003FF80003FE003FFC0007FC003FFF001FF80 03FFFC07FF0003FF3FFFFC0003FF0FFFF00003FF01FF000003FF0000000003FF0000000003FF00 00000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00000000 03FF0000000003FF0000000003FF0000000003FF00000000FFFFFC000000FFFFFC000000FFFFFC 000000FFFFFC000000>48 55 3 17 55]112 dc[<00FE03F000FFFE0FFE00FFFE1FFF00FFFE3C 3F80FFFE707FC007FE60FFE003FEE0FFE003FEC0FFE003FFC0FFE003FF807FC003FF807FC003FF 803F8003FF800E0003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003 FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF000000 03FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF000000FFFFFE00 00FFFFFE0000FFFFFE0000FFFFFE0000>35 38 3 0 41]114 dc[<000780000007800000078000 0007800000078000000F8000000F8000000F8000000F8000001F8000001F8000003F8000003F80 00007F800000FF800001FF800007FF80001FFFFFF0FFFFFFF0FFFFFFF0FFFFFFF001FF800001FF 800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001 FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF803C01FF803C 01FF803C01FF803C01FF803C01FF803C01FF803C01FF803C00FF807800FFC078007FC070003FE0 E0001FFFC00007FF800001FF00>30 55 2 0 38]116 dc[47 38 2 0 52]120 dc dfe /fg df[<3078F878 70>5 5 4 0 13]46 dc[<003F0000C1C00100600200600400300C00300C00300C00300C00600E 00600F80C00FC18007F60003FC0001FC0001FF00063F800C0F801007C03003C06001C06000C0C0 00C0C000C0C000C0C00080C0010060030030040018180007E000>20 31 3 1 23]56 dc[<007E 0001C3000301800601C00E01C01C00C03C00E03C00E03C01E07801E07801E07801E07801E07803 E07803E03803C03807C01C0BC00C13C003E380000780000780000700000E00600E00F01C00F018 00E0300080600041C0003F0000>19 31 4 1 23]57 dc[<000010000000180000003800000038 0000007800000078000000FC000001BC0000013C0000033C0000023C0000063C0000043E000008 1E0000081E0000101E0000101E0000201E0000200F0000400F0000400F0000FFFF0000800F0001 000F8001000780020007800200078004000780040007800C0007C03E0007C0FF807FFC>30 32 2 0 34]65 dc[<07FFFF00007C01C0003C01E0003C00F0007800F8007800F8007800F8007800F800 7800F8007800F000F001F000F001E000F003C000F00F8000FFFE0000F00F0001E007C001E003C0 01E003E001E001E001E001E001E001E003C001E003C003E003C003E003C003C003C007C003C00F 8007800F0007803E00FFFFF000>29 31 2 0 32]66 dc[<0001F808000E061800380138007000 F801E0007803C0007007800030078000300F0000301F0000301E0000303E0000203C0000007C00 00007C0000007C0000007C000000F8000000F8000000F8000000F8000000F80000007800004078 000080780000803C0000803C0001001C0002000E00020006000C000300100001C0E000003F0000 >29 33 5 1 33]67 dc[<07FFFF00007C01E0003C00F0003C00780078003C0078003C0078001E 0078001E0078001E0078001F00F0001F00F0001F00F0001F00F0001F00F0001F00F0001F01E000 1E01E0003E01E0003E01E0003E01E0003C01E0007C03C0007803C000F003C000F003C001E003C0 03C003C0078007800F0007803C00FFFFE000>32 31 2 0 35]68 dc[<07FFFFF8007C0078003C 0038003C001800780018007800080078000800780008007800080078080800F0100000F0100000 F0100000F0300000FFF00000F0700001E0200001E0200001E0200001E0200001E0000801E00010 03C0001003C0001003C0002003C0002003C0006003C000C0078001C0078007C0FFFFFF80>29 31 2 0 31]69 dc[<07FFFFF8007C0078003C0038003C001800780018007800080078000800780008 007800080078000800F0100000F0100000F0100000F0300000F0700000FFF00001E0600001E020 0001E0200001E0200001E0200001E0000003C0000003C0000003C0000003C0000003C0000003C0 00000780000007C00000FFFE0000>29 31 2 0 30]70 dc[<0001FC04000F030C003C009C0070 007C00E0003C01C0003803800018078000180F0000181F0000181E0000183E0000103C0000007C 0000007C0000007C0000007C000000F8000000F8000000F8007FFCF80003E0780001E0780001E0 780003C0780003C03C0003C03C0003C01C0003C00E0007C007000B800380118001E06080003F80 00>30 33 5 1 36]71 dc[<07FFC7FFC0007C00F800003C007800003C007800007800F0000078 00F000007800F000007800F000007800F000007800F00000F001E00000F001E00000F001E00000 F001E00000FFFFE00000F001E00001E003C00001E003C00001E003C00001E003C00001E003C000 01E003C00003C007800003C007800003C007800003C007800003C007800003C007800007800F00 0007C00F8000FFF8FFF800>34 31 2 0 34]72 dc[<07FFE0007C00003C00003C000078000078 0000780000780000780000780000F00000F00000F00000F00000F00000F00001E00001E00001E0 0001E00001E00001E00003C00003C00003C00003C00003C00003C00007800007C000FFFC00>19 31 1 0 16]73 dc[<07FFF000007E0000003C0000003C00000078000000780000007800000078 0000007800000078000000F0000000F0000000F0000000F0000000F0000000F0000001E0000001 E0000001E0000001E0000001E0008001E0010003C0010003C0010003C0030003C0020003C00600 03C0060007801E0007807C00FFFFFC00>25 31 2 0 28]76 dc[<07FC0000FFC0007C0000F800 003C00017800003C00017800004E0002F000004E0002F000004E0004F000004E0004F000004E00 08F000004E0008F00000870011E00000870011E00000870021E00000870021E00000870041E000 00838041E00001038083C00001038083C00001038103C00001038203C0000101C203C0000101C4 03C0000201C40780000201C80780000201C80780000201D00780000200F00780000600E0078000 0600E00F00000F00C00F8000FFE0C1FFF800>42 31 2 0 42]77 dc[<07FC01FFC0003E003E00 003E001800003E001800004F001000004F001000004780100000478010000043C010000043C010 000083C020000081E020000081E020000080F020000080F020000080782000010078400001007C 400001003C400001003C400001001E400001001E400002000F800002000F800002000F80000200 0780000200078000060003800006000300000F00010000FFE0010000>34 31 2 0 34]78 dc[< 0003F800001E0E000038070000E0038001C001C003C001E0078000E00F0000F00F0000F01E0000 F01E0000F83E0000F83C0000F87C0000F87C0000F87C0000F87C0000F8F80001F0F80001F0F800 01F0F80001F0F80003E0780003E0780003C0780007C07C0007803C000F003C001E001E001C000E 0038000700F00003C3C00000FE0000>29 33 5 1 35]79 dc[<07FFFF00007C03C0003C01E000 3C00F0007800F0007800F8007800F8007800F8007800F8007800F000F001F000F001E000F003C0 00F0078000F00F0000FFF80001E0000001E0000001E0000001E0000001E0000001E0000003C000 0003C0000003C0000003C0000003C0000003C000000780000007C00000FFFC0000>29 31 2 0 31]80 dc[<07FFFC00007C0700003C03C0003C01E0007801E0007801F0007801F0007801F00078 01F0007801E000F003E000F003C000F0078000F00F0000F03C0000FFF00001E0300001E0380001 E01C0001E01C0001E01C0001E01E0003C03E0003C03E0003C03E0003C03E0003C03E0003C03E02 07803E0407C01F04FFFC0F18000003E0>31 32 2 1 33]82 dc[<003F040060CC01803C03801C 03001C0700180600080E00080E00080E00080E00000F00000F80000FE00007FE0003FF8001FFC0 007FE00007E00001E00000E00000F00000F04000E04000E04000E04000E06000C0600180E00380 F80300C60C0081F800>22 33 3 1 25]83 dc[<3FFFFFF03C0780F03007803060078030400F00 10400F0010C00F0010800F0010800F0010800F0010001E0000001E0000001E0000001E0000001E 0000001E0000003C0000003C0000003C0000003C0000003C0000003C0000007800000078000000 78000000780000007800000078000000F0000001F800007FFFE000>28 31 6 0 33]84 dc[29 32 7 1 34]85 dc[31 32 6 1 34] 86 dc[<03FFC0FFC0007F007E00003E003800001E003000001E002000000F004000000F008000 000F81000000078200000007C600000003C400000003E800000001F000000001F000000000F000 000000F800000000F8000000017C000000023C000000043C0000000C1E000000081E000000101F 000000200F000000400F800000C0078000008007C000010003C000070003E0001F8007E000FFE0 1FFE00>34 31 1 0 34]88 dc[32 31 6 0 34]89 dc dfe /fh df[<1E1E 0023210023C38043C7804387804383008700000700000700000700000E00000E00000E00000E00 001C00001C00001C00001C0000380000180000>17 20 2 0 21]114 dc dfe /fi df[<000000 0003E000000000000000000007F000000000000000000007F00000000000000000000FF8000000 0000000000000FF80000000000000000000FF80000000000000000001FFC000000000000000000 1FFC0000000000000000003FFE0000000000000000003FFE0000000000000000007FFF00000000 00000000007FFF0000000000000000007FFF000000000000000000FFFF800000000000000000FF FF800000000000000001FFFFC00000000000000001FFFFC00000000000000001FFFFC000000000 00000003FFFFE00000000000000003EFFFE00000000000000007EFFFF00000000000000007CFFF F00000000000000007C7FFF0000000000000000FC7FFF8000000000000000F83FFF80000000000 00001F83FFFC000000000000001F03FFFC000000000000001F01FFFC000000000000003F01FFFE 000000000000003E00FFFE000000000000007E00FFFF000000000000007C007FFF000000000000 00FC007FFF80000000000000F8007FFF80000000000000F8003FFF80000000000001F8003FFFC0 000000000001F0001FFFC0000000000003F0001FFFE0000000000003E0001FFFE0000000000003 E0000FFFE0000000000007E0000FFFF0000000000007C00007FFF000000000000FC00007FFF800 000000000F800007FFF800000000000F800003FFF800000000001F800003FFFC00000000001F00 0001FFFC00000000003FFFFFFFFFFE00000000003FFFFFFFFFFE00000000007FFFFFFFFFFF0000 0000007FFFFFFFFFFF00000000007FFFFFFFFFFF0000000000FC0000007FFF8000000000F80000 003FFF8000000001F80000003FFFC000000001F00000003FFFC000000001F00000001FFFC00000 0003F00000001FFFE000000003E00000000FFFE000000007E00000000FFFF000000007C0000000 0FFFF000000007C000000007FFF00000000FC000000007FFF80000000F8000000003FFF8000000 1F8000000003FFFC0000001F0000000003FFFC0000007FC000000001FFFC0000FFFFFFC00007FF FFFFFF80FFFFFFC00007FFFFFFFF80FFFFFFC00007FFFFFFFF80FFFFFFC00007FFFFFFFF80FFFF FFC00007FFFFFFFF80>81 72 4 0 90]65 dc[72 71 4 0 84]66 dc[<000000003FFE00000E0000000FFFFFC0001E0000007FFFFFF8003E000003FFFFFF FE00FE00000FFFFFFFFF81FE00003FFFF800FFC3FE0000FFFF80000FF7FE0001FFFC000003FFFE 0007FFF0000001FFFE000FFFC00000007FFE001FFF800000003FFE003FFF000000001FFE007FFE 000000000FFE00FFFC0000000007FE01FFF80000000007FE03FFF00000000003FE03FFF0000000 0001FE07FFE00000000001FE07FFE00000000000FE0FFFC00000000000FE0FFFC000000000007E 1FFFC000000000007E1FFF8000000000007E3FFF8000000000007E3FFF8000000000003E3FFF80 00000000003E7FFF8000000000003E7FFF0000000000003E7FFF000000000000007FFF00000000 000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000 FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00 000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000 0000007FFF000000000000007FFF000000000000007FFF000000000000007FFF8000000000003E 3FFF8000000000003E3FFF8000000000003E3FFF8000000000003E1FFF8000000000003E1FFFC0 00000000003E0FFFC000000000007C0FFFC000000000007C07FFE000000000007C07FFE0000000 0000F803FFF00000000000F803FFF00000000001F801FFF80000000001F000FFFC0000000003E0 007FFE0000000007E0003FFF000000000FC0001FFF800000001F80000FFFC00000003F000007FF F0000000FE000001FFFC000001FC000000FFFF80000FF80000003FFFF8007FF00000000FFFFFFF FFC000000003FFFFFFFF00000000007FFFFFFC00000000000FFFFFE00000000000003FFE000000 >71 73 7 1 86]67 dc[39 71 3 0 45]73 dc[104 71 4 0 113]77 dc[69 71 4 0 81]80 dc[<3FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFF FFFF003FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF003FFF0003FFF8003FFF007FF80003FFF8 0007FF807FE00003FFF80001FF807FC00003FFF80000FF807F800003FFF800007F807F000003FF F800003F807F000003FFF800003F807E000003FFF800001F807E000003FFF800001F807E000003 FFF800000F807C000003FFF800000F807C000003FFF800000F807C000003FFF800000F807C0000 03FFF800000F80FC000003FFF800000FC0F8000003FFF8000007C0F8000003FFF8000007C0F800 0003FFF8000007C0F8000003FFF8000007C0F8000003FFF8000007C000000003FFF80000000000 000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000 00000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8000000 0000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000 000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800 00000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8 0000000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FF F80000000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003 FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000000000 03FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8000000000000 0003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000000000 03FFFFFFFFFFF800000003FFFFFFFFFFF800000003FFFFFFFFFFF800000003FFFFFFFFFFF80000 0003FFFFFFFFFFF80000>74 70 4 0 83]84 dc[<0007FFFC000000007FFFFFC0000001FFFFFF F8000003FFFFFFFE000007FE001FFF000007FF0003FFC0000FFF8001FFE0000FFF8000FFF0000F FF80007FF0000FFF80007FF8000FFF80007FF80007FF00003FFC0007FF00003FFC0003FE00003F FC0000F800003FFC00000000003FFC00000000003FFC00000000003FFC00000000003FFC000000 07FFFFFC000000FFFFFFFC000007FFFFFFFC00003FFFE03FFC0000FFFE003FFC0003FFF0003FFC 0007FFC0003FFC000FFF00003FFC001FFE00003FFC003FFC00003FFC007FF800003FFC007FF800 003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00 FFF000007FFC007FF80000FFFC007FF80001EFFC003FFC0003EFFC003FFF0007CFFF000FFFC03F 8FFFF807FFFFFF07FFFC01FFFFFC03FFFC007FFFF001FFFC0003FF80007FF8>54 46 3 0 58] 97 dc[<007FC00000000000FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC0 0000000000FFFFC0000000000003FFC0000000000001FFC0000000000001FFC0000000000001FF C0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001 FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000000000 01FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000000000 0001FFC0000000000001FFC0000000000001FFC00FFC00000001FFC07FFFC0000001FFC3FFFFF0 000001FFCFFFFFFC000001FFDFF00FFF000001FFFF8003FF800001FFFE0001FFC00001FFF80000 7FE00001FFF000007FF00001FFE000003FF80001FFE000001FFC0001FFE000001FFC0001FFE000 001FFE0001FFE000001FFE0001FFE000000FFF0001FFE000000FFF0001FFE000000FFF0001FFE0 00000FFF0001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FF E000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001 FFE000000FFF8001FFE000000FFF0001FFE000000FFF0001FFE000000FFF0001FFE000001FFE00 01FFE000001FFE0001FFE000001FFC0001FFE000001FFC0001FFE000003FF80001FFF000003FF8 0001FFF800007FF00001FFFC0000FFE00001FFFE0001FFC00001FFBF0007FF800001FF1FE01FFE 000001FE0FFFFFFC000001FC03FFFFF0000001F800FFFF80000001F0001FF8000000>57 72 4 0 66]98 dc[<00001FFFC0000000FFFFF8000007FFFFFE00001FFFFFFF80007FFC00FFC000FFE001 FFC001FFC003FFE003FF8003FFE007FF0003FFE00FFE0003FFE00FFE0003FFE01FFC0001FFC01F FC0001FFC03FFC0000FF803FFC00003E007FF8000000007FF8000000007FF800000000FFF80000 0000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FF F800000000FFF800000000FFF8000000007FF8000000007FF8000000007FFC000000003FFC0000 00003FFC000000001FFC000000F81FFE000000F80FFE000000F80FFF000001F007FF800003F003 FFC00007E001FFE0000FC000FFF0001F80007FFE00FF00001FFFFFFE000007FFFFF8000000FFFF E00000001FFE0000>45 46 4 0 53]99 dc[<00000000007FC00000000000FFFFC00000000000 FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC0000000000003FFC000000000 0001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000 000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000 00000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000 0000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000000FFC01FFC0 000000FFFF81FFC0000007FFFFE1FFC000001FFFFFF9FFC000007FFC03FFFFC00000FFF0007FFF C00001FFC0001FFFC00003FF80000FFFC00007FF000007FFC0000FFE000003FFC0000FFE000003 FFC0001FFC000003FFC0001FFC000003FFC0003FFC000003FFC0003FFC000003FFC0007FF80000 03FFC0007FF8000003FFC0007FF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF800 0003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8 000003FFC000FFF8000003FFC000FFF8000003FFC0007FF8000003FFC0007FF8000003FFC0007F F8000003FFC0003FF8000003FFC0003FFC000003FFC0003FFC000003FFC0001FFC000003FFC000 1FFC000003FFC0000FFE000007FFC00007FF00000FFFC00003FF00001FFFC00001FFC0003FFFC0 0000FFE000FFFFE000007FF807FBFFFF80001FFFFFF3FFFF800007FFFFC3FFFF800001FFFF03FF FF8000001FF803FFFF80>57 72 4 0 66]100 dc[<00001FFE00000001FFFFE0000007FFFFF800 001FFFFFFE00007FFC07FF0000FFE001FF8001FFC0007FC003FF80003FE007FF00003FF00FFE00 001FF01FFE00000FF81FFC00000FF83FFC00000FFC3FFC000007FC7FFC000007FC7FF8000007FC 7FF8000007FE7FF8000007FEFFF8000007FEFFF8000007FEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFF FFFFFEFFFFFFFFFFFCFFF800000000FFF800000000FFF800000000FFF8000000007FF800000000 7FF8000000007FFC000000003FFC000000003FFC000000003FFC0000001C1FFE0000003E0FFE00 00003E07FF0000007E07FF000000FC03FF800001F801FFC00003F0007FF0001FE0003FFE00FFC0 001FFFFFFF800007FFFFFE000000FFFFF80000000FFF8000>47 46 3 0 54]101 dc[<000000FF C000000007FFF80000003FFFFC000000FFFFFF000001FFC1FF000007FF03FF80000FFC03FF8000 0FF807FFC0001FF807FFC0003FF007FFC0003FF007FFC0003FE003FF80007FE003FF80007FE001 FF00007FE000FE00007FE0003800007FE0000000007FE0000000007FE0000000007FE000000000 7FE0000000007FE0000000007FE0000000007FE0000000007FE0000000007FE0000000FFFFFFFE 0000FFFFFFFE0000FFFFFFFE0000FFFFFFFE0000FFFFFFFE0000007FF0000000007FF000000000 7FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF000 0000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF000000000 7FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF000 0000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF000000000 7FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF000 0000007FF00000003FFFFFF800003FFFFFF800003FFFFFF800003FFFFFF800003FFFFFF80000> 42 72 3 0 36]102 dc[<00000000001F8000007FF000FFE00007FFFF03FFF0001FFFFFC7FFF0 007FFFFFFFC7F800FFE03FFE0FF801FF800FFC0FF803FF0007FE0FF807FE0003FF07F007FE0003 FF07F00FFC0001FF81C00FFC0001FF80000FFC0001FF80001FFC0001FFC0001FFC0001FFC0001F FC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0000FFC0001FF80000FFC0001FF 80000FFC0001FF800007FE0003FF000007FE0003FF000003FF0007FE000001FF800FFC000000FF E03FF8000001FFFFFFF0000001DFFFFFC0000003C7FFFF00000003C07FF000000007C000000000 0007C0000000000007C0000000000007C0000000000007E0000000000007F0000000000007F800 0000000007FFFFFFF0000007FFFFFFFF000003FFFFFFFFE00003FFFFFFFFF80001FFFFFFFFFE00 01FFFFFFFFFF0000FFFFFFFFFF80007FFFFFFFFF8003FFFFFFFFFFC00FFFFFFFFFFFC01FF80000 1FFFE03FE0000001FFE07FC00000007FF07FC00000003FF0FF800000001FF0FF800000001FF0FF 800000001FF0FF800000001FF0FF800000001FF07FC00000003FE07FC00000003FE03FE0000000 7FC03FF0000000FFC01FFC000003FF800FFF00000FFF0003FFF000FFFC0000FFFFFFFFF000003F FFFFFFC0000007FFFFFE000000003FFFC00000>53 68 3 21 59]103 dc[<007FC00000000000 FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC000000000 0003FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000 000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000 00000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000 0000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0 000000000001FFC001FFC0000001FFC00FFFF8000001FFC03FFFFE000001FFC0FFFFFF000001FF C1FC07FF800001FFC3E003FFC00001FFC7C001FFC00001FFCF0001FFE00001FFDE0000FFE00001 FFDC0000FFE00001FFFC0000FFF00001FFF80000FFF00001FFF00000FFF00001FFF00000FFF000 01FFF00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF0 0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000 FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE000 00FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE0 0000FFF00001FFE00000FFF00001FFE00000FFF000FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFF FFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0>59 72 4 0 66]104 dc[<00FC0001FF00 03FF8007FFC00FFFC01FFFE01FFFE01FFFE01FFFE01FFFE01FFFE00FFFC007FFC003FF8001FF00 00FC00000000000000000000000000000000000000000000000000000000000000000000007FC0 FFFFC0FFFFC0FFFFC0FFFFC0FFFFC003FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0 01FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0 01FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0 01FFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF>24 73 4 0 32]105 dc[<007FC000FFFFC000FFFF C000FFFFC000FFFFC000FFFFC00003FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001 FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001 FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 01FFC00001FFC00001FFC00001FFC00001FFC00001FFC000FFFFFF80FFFFFF80FFFFFF80FFFFFF 80FFFFFF80>25 72 4 0 32]108 dc[<007FC001FFC00000FFE00000FFFFC00FFFF80007FFFC00 00FFFFC03FFFFE001FFFFF0000FFFFC0FFFFFF007FFFFF8000FFFFC1FC07FF80FE03FFC000FFFF C3E003FFC1F001FFE00003FFC7C001FFC3E000FFE00001FFCF0001FFE78000FFF00001FFDE0000 FFEF00007FF00001FFDC0000FFEE00007FF00001FFFC0000FFFE00007FF80001FFF80000FFFC00 007FF80001FFF00000FFF800007FF80001FFF00000FFF800007FF80001FFF00000FFF800007FF8 0001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FF E00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000 FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000 007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF8 0001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FF E00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000 FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000 007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF8 00FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0FFFF FFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0>92 46 4 0 99]109 dc[<007FC001FFC0 0000FFFFC00FFFF80000FFFFC03FFFFE0000FFFFC0FFFFFF0000FFFFC1FC07FF8000FFFFC3E003 FFC00003FFC7C001FFC00001FFCF0001FFE00001FFDE0000FFE00001FFDC0000FFE00001FFFC00 00FFF00001FFF80000FFF00001FFF00000FFF00001FFF00000FFF00001FFF00000FFF00001FFE0 0000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001 FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000 01FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF0 0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF F00001FFE00000FFF000FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07F FFFFE0FFFFFFC07FFFFFE0>59 46 4 0 66]110 dc[<00000FFF0000000000FFFFF000000007FF FFFE0000001FFFFFFF8000003FFC03FFC00000FFE0007FF00001FF80001FF80003FF00000FFC00 07FE000007FE000FFE000007FF000FFC000003FF001FFC000003FF803FFC000003FFC03FF80000 01FFC03FF8000001FFC07FF8000001FFE07FF8000001FFE07FF8000001FFE0FFF8000001FFF0FF F8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001 FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF07FF8000001FFE07FF8000001FFE07FF8 000001FFE07FF8000001FFE03FFC000003FFC03FFC000003FFC01FFC000003FF801FFE000007FF 800FFE000007FF0007FF00000FFE0003FF80001FFC0001FFC0003FF80000FFE0007FF000007FFC 03FFE000001FFFFFFF80000007FFFFFE00000000FFFFF0000000000FFF000000>52 46 3 0 59] 111 dc[<007FC00FFC000000FFFFC07FFFC00000FFFFC3FFFFF00000FFFFCFFFFFFC0000FFFFDF F01FFF0000FFFFFF8007FF800003FFFE0001FFC00001FFF80000FFE00001FFF00000FFF00001FF E000007FF80001FFE000003FFC0001FFE000003FFC0001FFE000003FFE0001FFE000001FFE0001 FFE000001FFF0001FFE000001FFF0001FFE000001FFF0001FFE000000FFF0001FFE000000FFF80 01FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF 8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000F FF0001FFE000001FFF0001FFE000001FFF0001FFE000001FFE0001FFE000001FFE0001FFE00000 3FFC0001FFE000003FFC0001FFE000007FF80001FFF000007FF80001FFF80000FFF00001FFFC00 01FFE00001FFFE0003FFC00001FFFF0007FF800001FFFFE03FFE000001FFEFFFFFFC000001FFE3 FFFFF0000001FFE0FFFF80000001FFE01FF800000001FFE0000000000001FFE0000000000001FF E0000000000001FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000000001 FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000000001FFE00000000000 01FFE0000000000001FFE0000000000001FFE00000000000FFFFFFC000000000FFFFFFC0000000 00FFFFFFC000000000FFFFFFC000000000FFFFFFC000000000>57 66 4 20 66]112 dc[<00FF 803F8000FFFF80FFF000FFFF83FFFC00FFFF87FFFE00FFFF8FC3FF00FFFF8F07FF0003FF9E0FFF 8001FFBC0FFF8001FFB80FFF8001FFF80FFF8001FFF00FFF8001FFF007FF0001FFF007FF0001FF E003FE0001FFE000F80001FFE000000001FFE000000001FFC000000001FFC000000001FFC00000 0001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FF C000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC00000 0001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FF C000000001FFC0000000FFFFFFE00000FFFFFFE00000FFFFFFE00000FFFFFFE00000FFFFFFE000 00>41 46 4 0 49]114 dc[<000FFF00E0007FFFF3E001FFFFFFE007FFFFFFE00FF800FFE01FC0 001FE03F80000FE03F000007E07F000003E07F000003E0FF000003E0FF000003E0FF800003E0FF C0000000FFF0000000FFFE000000FFFFF800007FFFFFC0007FFFFFF0003FFFFFFC001FFFFFFF00 0FFFFFFF8007FFFFFFC003FFFFFFE000FFFFFFF0003FFFFFF00003FFFFF800001FFFF8000000FF FC0000001FFC7800000FFCF8000007FCF8000003FCFC000003FCFC000003FCFE000003F8FE0000 03F8FF000003F8FF800007F0FFC0000FF0FFF0001FE0FFFC00FFC0FFFFFFFF80FC7FFFFE00F81F FFF800E003FF8000>38 46 4 0 47]115 dc[<0001F000000001F000000001F000000001F00000 0001F000000001F000000003F000000003F000000003F000000007F000000007F000000007F000 00000FF00000000FF00000001FF00000003FF00000003FF00000007FF0000001FFF0000003FFF0 00000FFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC000FFF0000000FFF0000000FF F0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000 FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF00000 00FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF001F000FFF001F000FFF001 F000FFF001F000FFF001F000FFF001F000FFF001F000FFF001F000FFF001F0007FF001E0007FF8 03E0003FF803E0003FFC07C0001FFE0F80000FFFFF800007FFFE000001FFFC0000001FF000>36 66 2 0 46]116 dc[<007FE000003FF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE0007FFF F000FFFFE0007FFFF000FFFFE0007FFFF00003FFE00001FFF00001FFE00000FFF00001FFE00000 FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE000 00FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE0 0000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001 FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000 01FFE00001FFF00001FFE00001FFF00001FFE00001FFF00001FFE00003FFF00000FFE00007FFF0 0000FFE0000F7FF000007FE0001F7FF000007FF0003E7FF800003FFC00FC7FFFE0001FFFFFF87F FFE00007FFFFE07FFFE00001FFFF807FFFE000003FFE007FFFE0>59 46 4 0 66]117 dc[56 46 3 0 63]118 dc[79 46 3 0 86]119 dc[<7FFFFFC000FFFF807FFFFFC000FFFF807F FFFFC000FFFF807FFFFFC000FFFF807FFFFFC000FFFF8000FFF000000FE00000FFF800000FC000 00FFF800000FC000007FFC00000F8000007FFC00001F8000003FFC00001F0000003FFE00003F00 00001FFE00003E0000001FFF00007E0000000FFF00007C0000000FFF8000FC00000007FF8000F8 00000007FFC001F800000003FFC001F000000003FFE003F000000003FFE003F000000001FFF003 E000000001FFF007E000000000FFF007C000000000FFF80FC0000000007FF80F80000000007FFC 1F80000000003FFC1F00000000003FFE3F00000000001FFE3E00000000001FFF7E00000000000F FF7C00000000000FFFFC00000000000FFFFC000000000007FFF8000000000007FFF80000000000 03FFF0000000000003FFF0000000000001FFE0000000000001FFE0000000000000FFC000000000 0000FFC00000000000007F800000000000007F800000000000003F000000000000003F00000000 0000003F000000000000003E000000000000007E000000000000007C00000000000000FC000000 001F8000F8000000003FC001F8000000007FE001F000000000FFF003F000000000FFF003E00000 0000FFF007E000000000FFF00FC000000000FFF01F8000000000FFF03F80000000007FE07F0000 0000007F43FE00000000003FFFF800000000001FFFF0000000000007FFC0000000000001FE0000 00000000>57 66 2 20 63]121 dc dfe /fj df[<000FF000007FFC0001F80E0003E01F0007C0 3F000F803F000F803F000F801E000F800C000F8000000F8000000F8000000F800000FFFFFF00FF FFFF000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F00 0F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F007FF0FF E07FF0FFE0>27 35 1 0 31]12 dc[14 4 1 -9 19]45 dc[<387CFEFEFE 7C38>7 7 4 0 16]46 dc[<00180000780001F800FFF800FFF80001F80001F80001F80001F800 01F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F800 01F80001F80001F80001F80001F80001F80001F80001F8007FFFE07FFFE0>19 32 4 0 28]49 dc[<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01F87C01F83803F80003F800 03F00003F00007E00007C0000F80001F00003E0000380000700000E01801C0180380180700180E 00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF0>21 32 3 0 28]50 dc[<00FE0007FFC00F07 E01E03F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003E00007C0001F8001FE0001FF 000007C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00FEFF00FEFF00FC7E01FC7801 F81E07F00FFFC001FE00>23 32 2 0 28]51 dc[<0000E00001E00003E00003E00007E0000FE0 001FE0001FE00037E00077E000E7E001C7E00187E00307E00707E00E07E00C07E01807E03807E0 7007E0E007E0FFFFFEFFFFFE0007E00007E00007E00007E00007E00007E00007E000FFFE00FFFE >23 32 2 0 28]52 dc[<1000201E01E01FFFC01FFF801FFF001FFE001FF8001BC00018000018 000018000018000019FC001FFF001E0FC01807E01803E00003F00003F00003F80003F83803F87C 03F8FE03F8FE03F8FC03F0FC03F07007E03007C01C1F800FFF0003F800>21 32 3 0 28]53 dc[ <001F8000FFE003F07007C0F00F01F81F01F83E01F83E01F87E00F07C00007C0000FC0800FC7F C0FCFFE0FD80F0FF00F8FE007CFE007CFC007EFC007EFC007EFC007E7C007E7C007E7C007E3C00 7C3E007C1E00F80F00F00783E003FFC000FF00>23 32 2 0 28]54 dc[<6000007800007FFFFE 7FFFFE7FFFFC7FFFF87FFFF87FFFF0E00060E000C0C00180C00300C00300000600000C00001C00 00180000380000780000780000F00000F00000F00001F00001F00001F00003F00003F00003F000 03F00003F00003F00003F00001E000>23 34 3 0 28]55 dc[<00FE0003FFC00703E00E00F01C 00F01C00783C00783E00783F00783F80783FE0F01FF9E01FFFC00FFF8007FFC003FFE007FFF01E 7FF83C1FFC7807FC7801FEF000FEF0003EF0001EF0001EF0001CF8001C7800383C00381F01F00F FFC001FF00>23 32 2 0 28]56 dc[<387CFEFEFE7C380000000000000000387CFEFEFE7C38>7 22 4 0 16]58 dc[<000070000000007000000000F800000000F800000000F800000001FC0000 0001FC00000003FE00000003FE00000003FE00000006FF000000067F0000000E7F8000000C3F80 00000C3F800000183FC00000181FC00000381FE00000300FE00000300FE00000600FF000006007 F00000E007F80000FFFFF80000FFFFF800018001FC00018001FC00038001FE00030000FE000300 00FE000600007F000600007F00FFE00FFFF8FFE00FFFF8>37 34 2 0 42]65 dc[34 34 2 0 40]66 dc[<0003FE0080001FFF818000FF01E38001F8003F 8003E0001F8007C0000F800F800007801F800007803F000003803F000003807F000001807E0000 01807E00000180FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00 000000FE000000007E000000007E000001807F000001803F000001803F000003801F800003000F 8000030007C000060003F0000C0001F800380000FF00F000001FFFC0000003FE0000>33 34 3 0 40]67 dc[37 34 2 0 43]68 dc[32 34 2 0 37]69 dc[30 34 2 0 35]70 dc[<0003FE0040001FFFC0C0007F00F1C001F8003FC003F0000FC007C0 0007C00FC00003C01F800003C03F000001C03F000001C07F000000C07E000000C07E000000C0FE 00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000FFFFC 7E000FFFFC7F00001FC07F00001FC03F00001FC03F00001FC01F80001FC00FC0001FC007E0001F C003F0001FC001FC003FC0007F80E7C0001FFFC3C00003FF00C0>38 34 3 0 44]71 dc[39 34 2 0 44]72 dc[19 34 1 0 21]73 dc[38 34 2 0 44]75 dc[29 34 2 0 34]76 dc[48 34 2 0 53]77 dc[39 34 2 0 44]78 dc[<0007FC0000003FFF800000FC07E00003F001F80007E000FC000FC0007E001F80003F001F80 003F003F00001F803F00001F807F00001FC07E00000FC07E00000FC0FE00000FE0FE00000FE0FE 00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE07E00000FC0 7F00001FC07F00001FC03F00001F803F80003F801F80003F000FC0007E0007E000FC0003F001F8 0000FC07E000003FFF80000007FC0000>35 34 3 0 42]79 dc[32 34 2 0 38]80 dc[39 34 2 0 42] 82 dc[<01FC0407FF8C1F03FC3C007C7C003C78001C78001CF8000CF8000CFC000CFC0000FF00 00FFE0007FFF007FFFC03FFFF01FFFF80FFFFC03FFFE003FFE0003FF00007F00003F00003FC000 1FC0001FC0001FE0001EE0001EF0003CFC003CFF00F8C7FFE080FF80>24 34 3 0 31]83 dc[< 7FFFFFFF807FFFFFFF807E03F80F807803F807807003F803806003F80180E003F801C0E003F801 C0C003F800C0C003F800C0C003F800C0C003F800C00003F800000003F800000003F800000003F8 00000003F800000003F800000003F800000003F800000003F800000003F800000003F800000003 F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8000000 03F8000003FFFFF80003FFFFF800>34 34 2 0 39]84 dc[38 34 2 0 43]85 dc[39 34 1 0 42]86 dc[<07FC00 1FFF803F07C03F03E03F01E03F01F01E01F00001F00001F0003FF003FDF01FC1F03F01F07E01F0 FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF87F07E03F>24 22 2 0 27]97 dc[26 35 2 0 31]98 dc[<00FF8007FFE00F83F0 1F03F03E03F07E03F07C01E07C0000FC0000FC0000FC0000FC0000FC0000FC00007C00007E0000 7E00003E00301F00600FC0E007FF8000FE00>20 22 2 0 25]99 dc[<0001FE000001FE000000 3E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000 003E0001FC3E0007FFBE000F81FE001F007E003E003E007E003E007C003E00FC003E00FC003E00 FC003E00FC003E00FC003E00FC003E00FC003E00FC003E007C003E007C003E003E007E001E00FE 000F83BE0007FF3FC001FC3FC0>26 35 2 0 31]100 dc[<00FE0007FF800F87C01E01E03E01F0 7C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E0018 1F00300FC07003FFC000FF00>21 22 2 0 26]101 dc[<003F8000FFC001E3E003C7E007C7E00F 87E00F83C00F80000F80000F80000F80000F80000F8000FFFC00FFFC000F80000F80000F80000F 80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F 80000F80007FF8007FF800>19 35 1 0 17]102 dc[<03FC1E0FFF7F1F0F8F3E07CF3C03C07C03 E07C03E07C03E07C03E07C03E03C03C03E07C01F0F801FFF0013FC003000003000003800003FFF 801FFFF00FFFF81FFFFC3800FC70003EF0001EF0001EF0001EF0001E78003C7C007C3F01F80FFF E001FF00>24 33 2 11 28]103 dc[26 35 2 0 31]104 dc[<1C003F007F007F007F003F001C000000000000000000000000000000 FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F 00FFE0FFE0>11 36 2 0 16]105 dc[<0038007C00FE00FE00FE007C0038000000000000000000 000000000003FE03FE003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E 003E003E003E003E003E003E003E003E783EFC3EFC3CFC7C78F87FE01F80>15 46 -3 10 17] 106 dc[26 35 2 0 30]107 dc[11 35 2 0 16]108 dc[43 22 2 0 48]109 dc[ 26 22 2 0 31]110 dc[<00FE0007FFC00F83E01E00F03E00F87C007C7C007C7C007CFC007EFC 007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F81F01F00F83E007FFC000FE00> 23 22 2 0 28]111 dc[26 32 2 10 31]112 dc[<00FE030007 FF87000FC1C7001F006F003F003F007E003F007E001F007C001F00FC001F00FC001F00FC001F00 FC001F00FC001F00FC001F00FC001F007E001F007E001F003E003F001F007F000FC1DF0007FF9F 0001FC1F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F000000 FFE00000FFE0>27 32 2 10 30]113 dc[19 22 2 0 23]114 dc[<0FF3003FFF00781F00600700E00300E00300F00300FC 00007FE0007FF8003FFE000FFF0001FF00000F80C00780C00380E00380E00380F00700FC0E00EF FC00C7F000>17 22 2 0 22]115 dc[<0180000180000180000180000380000380000780000780 000F80003F8000FFFF00FFFF000F80000F80000F80000F80000F80000F80000F80000F80000F80 000F80000F80000F81800F81800F81800F81800F81800F830007C30003FE0000F800>17 32 1 0 22]116 dc[26 22 2 0 31]117 dc[27 22 1 0 30]118 dc[37 22 1 0 40]119 dc[27 22 1 0 30]120 dc[27 32 1 10 30]121 dc[<7FFFF07FFFF07C03E07007C0600FC0E01F80C01F00 C03E00C07E0000FC0000F80001F00003F03007E03007C0300F80701F80703F00603E00E07C03E0 FFFFE0FFFFE0>20 22 2 0 25]122 dc dfe /fk df[<00003FCE0000E0EE000181FC000381FC 000300DC0007001C0007003800070038000E0038000E0038000E0070000E007000FFFFF0001E00 70001C00E0001C00E0001C00E0001C00E0001C01C0003801C0003801C0003801C0003803800038 0380007003800070038800700710007007100070071000E0071000E0032000E001C000E0000000 C0000001C0000001C000003180000079800000F3000000620000003C000000>31 41 -2 9 27] 13 dc[<0E1F3F3F1D0102020404081020C0>8 14 9 -18 14]39 dc[<00010002000400080010 0020006000C0018001800300070006000E000C001C0018003800380030007000700060006000E0 00E000C000C000C000C000C000C000C000C000C000C000C000C000C00040006000600020001000 10000800>16 46 7 12 19]40 dc[<001000000800000400000600000200000300000300000300 000100000180000180000180000180000180000180000180000380000380000380000300000300 000300000700000700000600000600000E00000C00000C00001C00001800003800003000007000 00600000E00000C0000180000100000300000600000C0000180000300000600000800000>17 46 0 12 19]41 dc[<0030000030000030000020000020003861C01C63800E4E0003580001E00001 E00006B0001C9C00718E00E18700010000010000030000030000030000>18 20 8 -14 23]42 dc[<1C3C3C3C3C040408081020204080>6 14 3 9 14]44 dc[<7FF0FFE07FE0>12 3 3 -8 16] 45 dc[<70F8F8F0E0>5 5 5 0 14]46 dc[<00000040000000C000000180000001800000030000 000300000006000000060000000C0000001800000018000000300000003000000060000000C000 0000C0000001800000018000000300000003000000060000000C0000000C000000180000001800 0000300000003000000060000000C0000000C00000018000000180000003000000030000000600 00000C0000000C0000001800000018000000300000003000000060000000C0000000C000000080 000000>26 45 1 11 23]47 dc[<000F800030E000E07001C0700380300380380700380F00780F 00780E00781E00781E00703C00F03C00F03C00F03C00F07801E07801E07801E07801C07003C0F0 03C0F00380F00780F00700700700700E00701C003038001870000FC000>21 31 4 1 23]48 dc[ <000200020006000E003C00DC031C001C0038003800380038007000700070007000E000E000E0 00E001C001C001C001C003800380038003800780FFF8>15 30 5 0 23]49 dc[<001F00006180 0080E00100E00200700220700420700410700820F00820F00820F00840E00881E00703C0000380 000700000C000018000060000080000300000400000800401000401000802001807E030047FF00 41FE0080FC00807800>20 31 4 1 23]50 dc[<001F800060E000807001003002003804203804 20380410380420700460700380600000E00001C000030000FE00001C0000060000070000078000 0780000780300780780780780780F00F00800F00401E00401C0040380020E0001F8000>21 31 4 1 23]51 dc[<0000600000E00000E00000E00001C00001C00001C0000380000380000300000700 000700000600000E00000C0000180000180000300000300000630000C700008700010700030700 060E00040E00080E003F8E00607C00801FC0001C00001C00003800003800003800003800007000 007000006000>19 39 2 9 23]52 dc[<00C06000FFC001FF8001FE0001000001000002000002 0000020000020000040000047800058C000606000C070008070000078000078000078000078000 0F00700F00F00F00F00E00E01E00801C0080380080300040600061C0001F0000>19 31 5 1 23] 53 dc[<0007C0001C200030200060E000C1E00181E00380C00700000F00000E00001E00001E78 001D84003E06003E07003C07007C0780780780780780780780700F00700F00F00F00F00E00F01E 00701C00601C0070380030700010C0000F8000>19 31 5 1 23]54 dc[<08E0100BF01017F020 1FF0603E19C0380E80200080600100400300800300000600000E00000C00001C00001C00003800 00380000700000700000F00000F00001E00001E00001E00003C00003C00003C00007C000078000 078000030000>20 31 7 1 23]55 dc[<001F000061800080C001006003006006006006006006 00600E00C00F00800F818007C30007E40003F80001F80003FC00047E00183F00300F0020070060 0700C00300C00300C00300800600800600C00C00C008004030003060001F8000>19 31 5 1 23] 56 dc[<001F0000718000C0C00180C00380E00700E00F00E00F01E01E01E01E01E01E01E01E01 C01C03C01C03C01C03C01C07C01C0F800C0F8006378003C700000F00000E00000E00001C00601C 00F03800F07000E0600080C0004380003E0000>19 31 5 1 23]57 dc[<070F1F1F0E00000000 00000000000070F8F8F0E0>8 20 5 0 14]58 dc[<00000200000006000000060000000E000000 1E0000001E0000003F0000002F0000004F0000004F0000008F0000010F0000010F0000020F0000 020F0000040F00000C0F0000080F0000100F0000100F0000200F80003FFF800040078000C00780 0080078001000780010007800200078002000780060007801E000F80FF807FF8>29 32 2 0 34] 65 dc[<01FFFFC0001E00F0001E0078001E0038001E003C003C003C003C003C003C003C003C00 3C0078007800780078007800F0007801E000F0078000FFFE0000F00F8000F003C001E001C001E0 01E001E001E001E001E003C001E003C001E003C001E003C001C0078003C00780078007800F0007 801E000F007800FFFFE000>30 31 3 0 32]66 dc[<0000FE0200078186001C004C0038003C00 60003C00C0001C01C0001803800018070000180F0000181E0000101E0000103C0000003C000000 78000000780000007800000078000000F0000000F0000000F0000000F0000000F0000080700000 8070000080700001003800010038000200180004000C001800060020000381C00000FE0000>31 33 6 1 33]67 dc[<01FFFF80001E00E0001E0070001E0038001E001C003C001C003C000E003C 000E003C000E0078000E0078000E0078000E0078000E00F0001E00F0001E00F0001E00F0001E01 E0003C01E0003C01E0003C01E0007803C0007003C0007003C000E003C001C0078001C007800380 07800E0007801C000F007000FFFFC000>31 31 3 0 34]68 dc[<01FFFFFE001E001C001E000C 001E0004001E0004003C0004003C0004003C0004003C0004007808080078080000780800007818 0000F0300000FFF00000F0300000F0300001E0200001E0200001E0200001E0001003C0002003C0 002003C0004003C00040078000800780018007800100078007000F001F00FFFFFE00>31 31 3 0 31]69 dc[<01FFFFFC001E0038001E0018001E0008001E0008003C0008003C0008003C0008003C 00080078001000780800007808000078080000F0100000F0300000FFF00000F0300001E0200001 E0200001E0200001E0200003C0000003C0000003C0000003C00000078000000780000007800000 078000000F800000FFF80000>30 31 3 0 30]70 dc[<0000FC040007030C001C009800300078 00E0007801C000380380003003800030070000300E0000301E0000201E0000203C0000003C0000 0078000000780000007800000078000000F0000000F000FFF0F0000780F0000780F0000F007000 0F0070000F0070000F0070001E0038001E0018003E001C002E000E00CC000383040000FC0000> 30 33 6 1 35]71 dc[<01FFF3FFE0001F003E00001E003C00001E003C00001E003C00003C0078 00003C007800003C007800003C007800007800F000007800F000007800F000007800F00000F001 E00000FFFFE00000F001E00000F001E00001E003C00001E003C00001E003C00001E003C00003C0 07800003C007800003C007800003C007800007800F000007800F000007800F000007800F00000F 801F0000FFF1FFE000>35 31 3 0 34]72 dc[<01FFF0001F00001E00001E00001E00003C0000 3C00003C00003C0000780000780000780000780000F00000F00000F00000F00001E00001E00001 E00001E00003C00003C00003C00003C0000780000780000780000780000F8000FFF800>20 31 3 0 18]73 dc[<01FFF800001F0000001E0000001E0000001E0000003C0000003C0000003C000000 3C00000078000000780000007800000078000000F0000000F0000000F0000000F0000001E00000 01E0000001E0000001E0008003C0010003C0010003C0030003C00200078006000780060007800C 0007801C000F007800FFFFF800>25 31 3 0 29]76 dc[<01FE00007FC0001E0000FC00001E00 00F80000170001780000170001780000270002F00000270004F00000270004F00000270008F000 00470009E00000470011E00000470021E00000470021E00000870043C00000838043C000008380 83C00000838083C0000103810780000103820780000103820780000103840780000203840F0000 0203880F00000203900F00000203900F00000401E01E00000401E01E00000401C01E00000C0180 1E00001C01803E0000FF8103FFC000>42 31 3 0 41]77 dc[<01FF007FE0001F000F00001F00 04000017800400001780040000278008000023C008000023C008000023C008000041E010000041 E010000041F010000040F010000080F0200000807820000080782000008078200001003C400001 003C400001003C400001001E400002001E800002001E800002000F800002000F800004000F0000 040007000004000700000C000700001C00020000FF80020000>35 31 3 0 34]78 dc[<0001FC 0000070700001C01C0003000E000E0006001C000700380007007800038070000380E0000381E00 00381C0000383C0000383C00003878000078780000787800007878000078F00000F0F00000F0F0 0000E0F00001E0F00001C0F00003C0700003807000070078000F0038001E0038003C001C007000 0E00E0000783800001FC0000>29 33 6 1 35]79 dc[<01FFFF80001E00E0001E0070001E0038 001E003C003C003C003C003C003C003C003C003C0078007800780078007800F0007800E000F003 C000F00F0000FFFC0000F0000001E0000001E0000001E0000001E0000003C0000003C0000003C0 000003C00000078000000780000007800000078000000F800000FFF00000>30 31 3 0 31]80 dc[<01FFFF00001E03C0001E00E0001E0070001E0078003C0078003C0078003C0078003C007800 7800F0007800F0007801E0007801C000F0070000F01E0000FFF00000F0380001E01C0001E01E00 01E00E0001E00F0003C01E0003C01E0003C01E0003C01E0007803C0007803C0807803C0807803C 100F801C10FFF00C20000007C0>29 32 3 1 33]82 dc[<0007E040001C18C000300580006003 8000C0038001C00180018001000380010003800100038001000380000003C0000003C0000003F8 000001FF800001FFE000007FF000001FF0000001F8000000780000007800000038000000380020 003800200038002000300060007000600060006000E0007000C000E8038000C606000081F80000 >26 33 3 1 26]83 dc[<0FFFFFF01E0780E0180780201007802020078020200F0020600F0020 400F0020400F0020801E0040001E0000001E0000001E0000003C0000003C0000003C0000003C00 000078000000780000007800000078000000F0000000F0000000F0000000F0000001E0000001E0 000001E0000001E0000003E00000FFFF0000>28 31 8 0 33]84 dc[<7FFC1FF807C003C00780 010007800100078001000F0002000F0002000F0002000F0002001E0004001E0004001E0004001E 0004003C0008003C0008003C0008003C00080078001000780010007800100078001000F0002000 F0002000F0002000F0004000F0004000700080007001000030020000380400000C18000007E000 00>29 32 9 1 34]85 dc[30 32 9 1 34]86 dc[41 32 9 1 45] 87 dc[<00FFF07FE0000F801F00000F001C00000F801000000780300000078020000007C04000 0003C080000003C100000003E200000001E400000001EC00000001F800000000F000000000F800 000000F800000000F8000000017C000000023C000000063C000000043E000000081E000000101E 000000201F000000400F000000800F000001800F8000010007800007000780001F000FC000FFC0 7FF800>35 31 2 0 34]88 dc[30 31 9 0 34]89 dc[<00F1800389C007 07800E03801C03803C0380380700780700780700780700F00E00F00E00F00E00F00E20F01C40F0 1C40703C40705C40308C800F0700>19 20 4 0 23]97 dc[<07803F8007000700070007000E00 0E000E000E001C001C001CF01D0C3A0E3C0E380F380F700F700F700F700FE01EE01EE01EE01CE0 3CE038607060E031C01F00>16 32 5 0 21]98 dc[<007E0001C1000300800E07801E07801C07 003C0200780000780000780000F00000F00000F00000F00000F000007001007002003004001838 0007C000>17 20 4 0 21]99 dc[<0000780003F80000700000700000700000700000E00000E0 0000E00000E00001C00001C000F1C00389C00707800E03801C03803C0380380700780700780700 780700F00E00F00E00F00E00F00E20F01C40F01C40703C40705C40308C800F0700>21 32 4 0 23]100 dc[<007C01C207010E011C013C013802780C7BF07C00F000F000F000F0007000700170 023804183807C0>16 20 4 0 21]101 dc[<00007800019C00033C00033C000718000700000700 000E00000E00000E00000E00000E0001FFE0001C00001C00001C00001C00003800003800003800 00380000380000700000700000700000700000700000700000E00000E00000E00000E00000C000 01C00001C0000180003180007B0000F300006600003C0000>22 41 -2 9 14]102 dc[<003C60 00E27001C1E00380E00700E00F00E00E01C01E01C01E01C01E01C03C03803C03803C03803C0380 3C07003C07001C0F001C17000C2E0003CE00000E00000E00001C00001C00301C00783800F07000 60E0003F8000>20 29 2 9 21]103 dc[<01E0000FE00001C00001C00001C00001C00003800003 8000038000038000070000070000071E000763000E81800F01C00E01C00E01C01C03801C03801C 03801C0380380700380700380700380E10700E20700C20701C20700C40E00CC0600700>20 32 3 0 23]104 dc[<00C001E001E001C000000000000000000000000000000E003300230043804300 470087000E000E000E001C001C001C003840388030807080310033001C00>11 31 4 0 14]105 dc[<0001800003C00003C0000380000000000000000000000000000000000000000000003C0000 4600008700008700010700010700020E00000E00000E00000E00001C00001C00001C00001C0000 380000380000380000380000700000700000700000700000E00000E00030E00079C000F1800063 00003C0000>18 40 -2 9 14]106 dc[<01E0000FE00001C00001C00001C00001C00003800003 80000380000380000700000700000703C00704200E08E00E11E00E21E00E40C01C80001D00001E 00001FC00038E000387000387000383840707080707080707080703100E03100601E00>19 32 3 0 21]107 dc[<03C01FC0038003800380038007000700070007000E000E000E000E001C001C00 1C001C0038003800380038007000700070007100E200E200E200E20064003800>10 32 4 0 12] 108 dc[<1C0F80F0002630C318004740640C004780680E004700700E004700700E008E00E01C00 0E00E01C000E00E01C000E00E01C001C01C038001C01C038001C01C038001C01C0708038038071 003803806100380380E100380380620070070066003003003800>33 20 4 0 37]109 dc[<1C0F 802630C04740604780604700704700708E00E00E00E00E00E00E00E01C01C01C01C01C01C01C03 843803883803083807083803107003303001C0>22 20 4 0 26]110 dc[<007C0001C300030180 0E01C01E01C01C01E03C01E07801E07801E07801E0F003C0F003C0F003C0F00780F00700700F00 700E0030180018700007C000>19 20 4 0 23]111 dc[<01C1E002621804741C04781C04701E04 701E08E01E00E01E00E01E00E01E01C03C01C03C01C03C01C0380380780380700380E003C1C007 2380071E000700000700000E00000E00000E00000E00001C00001C0000FFC000>23 29 0 9 23] 112 dc[<00F0400388C00705800E03801C03803C0380380700780700780700780700F00E00F00E 00F00E00F00E00F01C00F01C00703C00705C0030B8000F38000038000038000070000070000070 0000700000E00000E0000FFE00>18 29 4 9 21]113 dc[<1C1E00266100478380478780470780 4703008E00000E00000E00000E00001C00001C00001C00001C0000380000380000380000380000 700000300000>17 20 4 0 19]114 dc[<00FC030206010C030C070C060C000F800FF007F803FC 003E000E700EF00CF00CE008401020601F80>16 20 3 0 19]115 dc[<018001C0038003800380 038007000700FFF007000E000E000E000E001C001C001C001C0038003800380038207040704070 80708031001E00>12 28 4 0 15]116 dc[<0E00C03300E02301C04381C04301C04701C0870380 0E03800E03800E03801C07001C07001C07001C07101C0E20180E20180E201C1E200C264007C380 >20 20 4 0 24]117 dc[<0E03803307802307C04383C04301C04700C08700800E00800E00800E 00801C01001C01001C01001C02001C02001C04001C04001C08000E300003C000>18 20 4 0 21] 118 dc[<0E00C1C03300E3C02301C3E04381C1E04301C0E04701C060870380400E0380400E0380 400E0380401C0700801C0700801C0700801C0701001C0701001C0602001C0F02000C0F04000E13 080003E1F000>27 20 4 0 30]119 dc[<0383800CC4401068E01071E02071E02070C040E00000 E00000E00000E00001C00001C00001C00001C040638080F38080F38100E5810084C600787800> 19 20 3 0 21]120 dc[<0E00C03300E02301C04381C04301C04701C08703800E03800E03800E 03801C07001C07001C07001C07001C0E00180E00180E001C1E000C3C0007DC00001C00001C0000 3800F03800F07000E06000C0C0004380003E0000>19 29 4 9 22]121 dc[<01C04003E08007F1 800C1F000802000004000008000010000020000040000080000100000200000401000802001002 003E0C0063FC0041F80080E000>18 20 3 0 19]122 dc dfe /fl df[<387CFEFEFE7C380000 00000000387CFEFEFE7C38>7 20 4 0 15]58 dc[<0000E000000000E000000001F000000001F0 00000001F000000003F800000003F800000006FC00000006FC0000000EFE0000000C7E0000000C 7E000000183F000000183F000000303F800000301F800000701FC00000600FC00000600FC00000 C007E00000FFFFE00001FFFFF000018003F000018003F000030001F800030001F800060001FC00 060000FC000E0000FE00FFE00FFFE0FFE00FFFE0>35 31 2 0 40]65 dc[36 31 2 0 41]78 dc[36 31 2 0 39]82 dc[<03FC080FFF381E03F83800F8700078700038F00038F00018F00018 F80000FC00007FC0007FFE003FFF801FFFE00FFFF007FFF000FFF80007F80000FC00007C00003C C0003CC0003CC0003CE00038E00078F80070FE01E0E7FFC081FF00>22 31 3 0 29]83 dc[<07 FC001FFF003F0F803F07C03F03E03F03E00C03E00003E0007FE007FBE01F03E03C03E07C03E0F8 03E0F803E0F803E0FC05E07E0DE03FF8FE0FE07E>23 20 1 0 25]97 dc[<01FE0007FF801F0F C03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000FC0000FC0000FC00007C00007E00003E00 603F00C01F81C007FF0001FC00>19 20 2 0 23]99 dc[<0007F80007F80000F80000F80000F8 0000F80000F80000F80000F80000F80000F80000F801F8F80FFEF81F83F83E01F87E00F87C00F8 7C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00F87C00F87E00F83E01F81F07F80FFEFF 03F8FF>24 32 2 0 29]100 dc[<01FE0007FF800F83C01E01E03E00F07C00F07C00F8FC00F8FF FFF8FFFFF8FC0000FC0000FC00007C00007C00003E00181E00180F807007FFE000FF80>21 20 1 0 24]101 dc[<01FC3C07FFFE0F079E1E03DE3E03E03E03E03E03E03E03E03E03E01E03C00F07 800FFF0009FC001800001800001C00001FFF800FFFF007FFF81FFFFC3C007C70003EF0001EF000 1EF0001E78003C78003C3F01F80FFFE001FF00>23 30 1 10 26]103 dc[24 32 3 0 29]104 dc[<1C003E003F007F003F003E001C0000000000 0000000000000000FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F 001F001F00FFE0FFE0>11 33 2 0 14]105 dc[11 32 2 0 14]108 dc[39 20 3 0 44]109 dc[24 20 3 0 29] 110 dc[<01FF0007FFC01F83F03E00F83E00F87C007C7C007CFC007EFC007EFC007EFC007EFC00 7EFC007E7C007C7C007C3E00F83E00F81F83F007FFC001FF00>23 20 1 0 26]111 dc[24 29 2 9 29]112 dc[ 18 20 2 0 22]114 dc[<0FE63FFE701E600EE006E006F800FFC07FF83FFC1FFE03FE001FC007 C007E007F006F81EFFFCC7F0>16 20 2 0 21]115 dc[<01800180018003800380038007800F80 3F80FFFCFFFC0F800F800F800F800F800F800F800F800F800F800F860F860F860F860F8607CC03 F801F0>15 29 1 0 20]116 dc[25 20 1 0 28]118 dc[35 20 1 0 38]119 dc[25 29 1 9 28]121 dc dfe /fm df[<60F0 F07010101020204080>4 11 3 7 11]44 dc[<60F0F060>4 4 3 0 11]46 dc[<0F8010602030 4038803CC01CE01C401C003C003800380070006000C001800100020004040804100430083FF87F F8FFF8>14 24 2 0 19]50 dc[24 26 2 0 29]72 dc[7 37 3 9 11]91 dc[7 37 0 9 11]93 dc[<3F8070C070E020700070007007F01C7030707070E070E071E071E0F171FB1E3C>16 16 2 0 19]97 dc[<07F80C1C381C30087000E000E000E000E000E000E0007000300438080C1807E0>14 16 1 0 17]99 dc[<007E00000E00000E00000E00000E00000E00000E00000E00000E00000E00 03CE000C3E00380E00300E00700E00E00E00E00E00E00E00E00E00E00E00E00E00600E00700E00 381E001C2E0007CFC0>18 26 1 0 21]100 dc[<07C01C3030187018600CE00CFFFCE000E000E0 00E0006000300438080C1807E0>14 16 1 0 17]101 dc[<01F0031807380E100E000E000E000E 000E000E00FFC00E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE0>13 26 0 0 12]102 dc[<0FCE187330307038703870387038303018602FC02000600070003FF03FFC 1FFE600FC003C003C003C0036006381C07E0>16 24 1 8 19]103 dc[18 26 1 0 21]104 dc [<18003C003C001800000000000000000000000000FC001C001C001C001C001C001C001C001C00 1C001C001C001C001C001C00FF80>9 26 0 0 10]105 dc[18 26 1 0 20]107 dc[9 26 0 0 10]108 dc[29 16 1 0 32]109 dc[18 16 1 0 21]110 dc[<07 E01C38300C700E6006E007E007E007E007E007E0076006700E381C1C3807E0>16 16 1 0 19] 111 dc[18 23 1 7 21]112 dc[ 12 16 1 0 15]114 dc[<1F2060E04020C020C020F0007F003FC01FE000F080708030C030C020 F0408F80>12 16 1 0 15]115 dc[<0400040004000C000C001C003C00FFC01C001C001C001C00 1C001C001C001C001C201C201C201C201C200E400380>11 23 1 0 15]116 dc[18 16 1 0 21]117 dc[17 23 1 7 20]121 dc dfe /fn df[<001F83E000F06E3001C078780380F87803 00F03007007000070070000700700007007000070070000700700007007000FFFFFF8007007000 070070000700700007007000070070000700700007007000070070000700700007007000070070 00070070000700700007007000070070000700700007007000070070007FE3FF00>29 32 0 0 27]11 dc[<003F0000E0C001C0C00381E00701E00701E007000007000007000007000007000007 0000FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E007 00E00700E00700E00700E00700E00700E00700E07FC3FE>23 32 0 0 25]12 dc[<003FE000E0 E001C1E00381E00700E00700E00700E00700E00700E00700E00700E00700E0FFFFE00700E00700 E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700 E00700E00700E00700E07FE7FE>23 32 0 0 25]13 dc[<001F81F80000F04F040001C07C0600 0380F80F000300F00F000700F00F00070070000007007000000700700000070070000007007000 000700700000FFFFFFFF0007007007000700700700070070070007007007000700700700070070 070007007007000700700700070070070007007007000700700700070070070007007007000700 70070007007007000700700700070070070007007007007FE3FE3FF0>36 32 0 0 38]14 dc[< 001F81FF0000F06F070001C07C0F000380F80F000300F007000700700700070070070007007007 000700700700070070070007007007000700700700FFFFFFFF0007007007000700700700070070 070007007007000700700700070070070007007007000700700700070070070007007007000700 70070007007007000700700700070070070007007007000700700700070070070007007007007F E3FE3FF0>36 32 0 0 38]15 dc[<0F0000301880003030600060703001C0602C06C06013F980 E0100300E0100300E0100600E0100C00E0100C00E01018006010300060203000702060003040C0 001880C0000F018000000300E0000303100006060800060604000C0C0400180C0400181C020030 1C0200601C0200601C0200C01C0201801C0201801C0203000C0406000C04060006040C00060818 000310080000E0>31 37 3 3 38]37 dc[<70F8FCFC74040404080810102040>6 14 4 -18 13] 39 dc[<0020004000800100020006000C000C00180018003000300030007000600060006000E0 00E000E000E000E000E000E000E000E000E000E000E00060006000600070003000300030001800 18000C000C00060002000100008000400020>11 46 3 12 18]40 dc[<80004000200010000800 0C00060006000300030001800180018001C000C000C000C000E000E000E000E000E000E000E000 E000E000E000E000E000C000C000C001C001800180018003000300060006000C00080010002000 40008000>11 46 3 12 18]41 dc[<70F8FCFC74040404080810102040>6 14 4 9 13]44 dc[< FFC0FFC0>10 2 1 -9 15]45 dc[<70F8F8F870>5 5 4 0 13]46 dc[<00010003000300060006 0006000C000C000C00180018001800300030003000600060006000C000C000C001800180018003 00030003000600060006000C000C000C00180018001800300030003000600060006000C000C000 C000>16 45 3 11 23]47 dc[<03F0000E1C001C0E001806003807007003807003807003807003 80F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003 C07003807003807003807807803807001806001C0E000E1C0003F000>18 31 2 1 23]48 dc[< 018003800F80F38003800380038003800380038003800380038003800380038003800380038003 800380038003800380038003800380038007C0FFFE>15 30 4 0 23]49 dc[<03F0000C1C0010 0E00200700400780800780F007C0F803C0F803C0F803C02007C00007C0000780000780000F0000 0E00001C0000380000700000600000C0000180000300000600400C00401800401000803FFF807F FF80FFFF80>18 30 2 0 23]50 dc[<03F0000C1C00100E00200F00780F80780780780780380F 80000F80000F00000F00000E00001C0000380003F000003C00000E00000F000007800007800007 C02007C0F807C0F807C0F807C0F00780400780400F00200E001C3C0003F000>18 31 2 1 23] 51 dc[<000600000600000E00000E00001E00002E00002E00004E00008E00008E00010E00020E 00020E00040E00080E00080E00100E00200E00200E00400E00C00E00FFFFF0000E00000E00000E 00000E00000E00000E00000E0000FFE0>20 30 1 0 23]52 dc[<1803001FFE001FFC001FF800 1FE00010000010000010000010000010000010000011F000161C00180E00100700100780000380 0003800003C00003C00003C07003C0F003C0F003C0E00380400380400700200600100E000C3800 03E000>18 31 2 1 23]53 dc[<007C000182000701000E03800C07801C078038030038000078 0000700000700000F1F000F21C00F40600F80700F80380F80380F003C0F003C0F003C0F003C0F0 03C07003C07003C07003803803803807001807000C0E00061C0001F000>18 31 2 1 23]54 dc[ <4000007FFFC07FFF807FFF804001008002008002008004000008000008000010000020000020 0000400000400000C00000C00001C0000180000380000380000380000380000780000780000780 00078000078000078000078000030000>18 31 3 1 23]55 dc[<03F0000C0C00100600300300 2001806001806001806001807001807803003E03003F06001FC8000FF00003F80007FC000C7E00 103F00300F806003804001C0C001C0C000C0C000C0C000C0C000806001802001001002000C0C00 03F000>18 31 2 1 23]56 dc[<03F0000E18001C0C00380600380700700700700380F00380F0 0380F003C0F003C0F003C0F003C0F003C07007C07007C03807C0180BC00E13C003E3C000038000 0380000380000700300700780600780E00700C002018001070000FC000>18 31 2 1 23]57 dc[ <70F8F8F8700000000000000000000070F8F8F870>5 20 4 0 13]58 dc[<70F8F8F870000000 0000000000000070F0F8F878080808101010202040>5 29 4 9 13]59 dc[<70F8F8F870000000 0000202020202070707070707070707070F8F8F8F8F8F8F870>5 33 4 10 13]60 dc[<07000F 800F800F800700000000000000000000000200020002000200020002000600060004000C001C00 380078007000F018F03CF03CF01CF008701838200FC0>14 32 3 9 21]62 dc[<000100000003 800000038000000380000007C0000007C0000007C0000009E0000009E0000009E0000010F00000 10F0000010F00000207800002078000020780000403C0000403C0000403C0000801E0000801E00 00FFFE0001000F0001000F0001000F00020007800200078002000780040003C00E0003C01F0007 E0FFC03FFE>31 32 1 0 34]65 dc[26 31 2 0 32]66 dc[<000FC04000 7030C001C009C0038005C0070003C00E0001C01E0000C01C0000C03C0000C07C0000407C000040 78000040F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F80000 00780000007C0000407C0000403C0000401C0000401E0000800E000080070001000380020001C0 040000703800000FC000>26 33 3 1 33]67 dc[29 31 2 0 35]68 dc[< FFFFFF000F800F0007800300078003000780010007800180078000800780008007800080078080 800780800007808000078080000781800007FF8000078180000780800007808000078080000780 8000078000200780002007800020078000400780004007800040078000C0078000C0078001800F 800F80FFFFFF80>27 31 2 0 31]69 dc[25 31 2 0 30]70 dc[<000FE0 200078186000E004E0038002E0070001E00F0000E01E0000601E0000603C0000603C0000207C00 002078000020F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8007FFCF8 0003E0780001E07C0001E03C0001E03C0001E01E0001E01E0001E00F0001E0070001E0038002E0 00E0046000781820000FE000>30 33 3 1 36]71 dc[29 31 2 0 34]72 dc[14 31 1 0 16]73 dc[<0FFFC0 007C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00 003C00003C00003C00003C00003C00003C00003C00003C00003C00203C00F83C00F83C00F83C00 F0380040780040700030E0000F8000>18 32 2 1 23]74 dc[30 31 2 0 35]75 dc[23 31 2 0 28]76 dc[37 31 2 0 42]77 dc[29 31 2 0 34]78 dc[<001F800000F0F00001C0380007801E000F000F 000E0007001E0007803C0003C03C0003C07C0003E0780001E0780001E0F80001F0F80001F0F800 01F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0780001E07C0003E07C0003E03C 0003C03C0003C01E0007800E0007000F000F0007801E0001C0380000F0F000001F8000>28 33 3 1 35]79 dc[25 31 2 0 31]80 dc[<001F800000F0F00001C0380007801E 000F000F000E0007001E0007803C0003C03C0003C07C0003E07C0003E0780001E0F80001F0F800 01F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0780001E0780001E07C 0003E03C0003C03C0F03C01E1087800E2047000F204F0007A03E0001E0380000F0F010001FB010 00003010000038300000387000003FF000001FE000001FE000000FC000000780>28 41 3 9 35] 81 dc[30 32 2 1 33]82 dc[<07E0800C198010078030038060 0180600180E00180E00080E00080E00080F00000F000007800007F00003FF0001FFC000FFE0003 FF00001F800007800003C00003C00001C08001C08001C08001C08001C0C00180C00380E00300F0 0600CE0C0081F800>18 33 3 1 25]83 dc[<7FFFFFE0780F01E0600F0060400F0020400F0020 C00F0030800F0010800F0010800F0010800F0010000F0000000F0000000F0000000F0000000F00 00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F 0000000F0000000F0000000F0000000F0000001F800007FFFE00>28 31 2 0 33]84 dc[29 32 2 1 34]85 dc[31 32 1 1 34] 86 dc[44 32 1 1 47]87 dc[<7FF83FF80FE00FC007C0070003C0020001E0040001F00C0000F008 0000781000007C1000003C2000003E4000001E4000000F8000000F8000000780000003C0000007 E0000005E0000009F0000018F8000010780000207C0000603C0000401E0000801F0001800F0001 000780020007C0070003C01F8007E0FFE01FFE>31 31 1 0 34]88 dc[32 31 1 0 34]89 dc[<7FFFF87C00F87000F06001E04001E0C003C0C003C0800780800F80800F00 001E00001E00003C00003C0000780000F80000F00001E00001E00003C00403C0040780040F8004 0F000C1E000C1E00083C00183C0018780038F801F8FFFFF8>22 31 3 0 28]90 dc[7 45 4 11 13]91 dc[7 45 1 11 13]93 dc[<081020204040808080 B8FCFC7C38>6 14 3 -18 13]96 dc[<1FE000303000781800781C00300E00000E00000E00000E 0000FE00078E001E0E00380E00780E00F00E10F00E10F00E10F01E10781E103867200F83C0>20 20 2 0 23]97 dc[<0E0000FE00000E00000E00000E00000E00000E00000E00000E00000E0000 0E00000E00000E3E000EC3800F01C00F00E00E00E00E00700E00700E00780E00780E00780E0078 0E00780E00780E00700E00700E00E00F00E00D01C00CC300083E00>21 32 1 0 25]98 dc[<03 F80E0C1C1E381E380C70007000F000F000F000F000F000F00070007000380138011C020E0C03F0 >16 20 2 0 20]99 dc[<000380003F8000038000038000038000038000038000038000038000 038000038000038003E380061B801C0780380380380380700380700380F00380F00380F00380F0 0380F00380F003807003807003803803803807801C07800E1B8003E3F8>21 32 2 0 25]100 dc [<03F0000E1C001C0E00380700380700700700700380F00380F00380FFFF80F00000F00000F000 007000007000003800801800800C010007060001F800>17 20 1 0 20]101 dc[<007C00C6018F 038F07060700070007000700070007000700FFF007000700070007000700070007000700070007 00070007000700070007000700070007007FF0>16 32 0 0 14]102 dc[<0000E003E3300E3C30 1C1C30380E00780F00780F00780F00780F00780F00380E001C1C001E380033E000200000200000 3000003000003FFE001FFF800FFFC03001E0600070C00030C00030C00030C000306000603000C0 1C038003FC00>20 31 1 10 23]103 dc[<0E0000FE00000E00000E00000E00000E00000E0000 0E00000E00000E00000E00000E00000E3E000E43000E81800F01C00F01C00E01C00E01C00E01C0 0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC>22 32 1 0 25]104 dc[<1C001E003E001E001C000000000000000000000000000E007E000E000E000E 000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFC0>10 31 0 0 12] 105 dc[<00E001F001F001F000E0000000000000000000000000007007F000F000700070007000 70007000700070007000700070007000700070007000700070007000700070007000706070F060 F0C061803F00>12 40 -2 9 14]106 dc[<0E0000FE00000E00000E00000E00000E00000E0000 0E00000E00000E00000E00000E00000E0FF00E03C00E03000E02000E04000E08000E10000E3000 0E70000EF8000F38000E1C000E1E000E0E000E07000E07800E03800E03C00E03E0FFCFF8>21 32 1 0 24]107 dc[<0E00FE000E000E000E000E000E000E000E000E000E000E000E000E000E000E 000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE0>11 32 0 0 12]108 dc[<0E1F01F000FE618618000E81C81C000F00F00E000F00F00E000E00E00E000E00E0 0E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00 E00E000E00E00E000E00E00E000E00E00E000E00E00E00FFE7FE7FE0>35 20 1 0 38]109 dc[< 0E3E00FE43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 0E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC>22 20 1 0 25]110 dc[<01F800070E001C 03803801C03801C07000E07000E0F000F0F000F0F000F0F000F0F000F0F000F07000E07000E038 01C03801C01C0380070E0001F800>20 20 1 0 23]111 dc[<0E3E00FEC3800F01C00F00E00E00 E00E00F00E00700E00780E00780E00780E00780E00780E00780E00700E00F00E00E00F01E00F01 C00EC3000E3E000E00000E00000E00000E00000E00000E00000E00000E0000FFE000>21 29 1 9 25]112 dc[<03E0800619801C05803C0780380380780380700380F00380F00380F00380F00380 F00380F003807003807803803803803807801C0B800E138003E380000380000380000380000380 000380000380000380000380003FF8>21 29 2 9 24]113 dc[<0E78FE8C0F1E0F1E0F0C0E000E 000E000E000E000E000E000E000E000E000E000E000E000E00FFE0>15 20 1 0 18]114 dc[<1F 9030704030C010C010C010E00078007F803FE00FF00070803880188018C018C018E030D0608F80 >13 20 2 0 18]115 dc[<020002000200060006000E000E003E00FFF80E000E000E000E000E00 0E000E000E000E000E000E000E080E080E080E080E080610031001E0>13 28 1 0 18]116 dc[< 0E01C0FE1FC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 0E01C00E01C00E01C00E03C00603C0030DC001F1FC>22 20 1 0 25]117 dc[21 20 1 0 24]118 dc[30 20 1 0 33]119 dc[<7F C3FC0F01E00701C007018003810001C20000E40000EC00007800003800003C00007C00004E0000 87000107000303800201C00601E01E01E0FF07FE>23 20 0 0 24]120 dc[21 29 1 9 24]121 dc[<3FFF380E200E201C40384078407000E001E001C00380078007010E 011E011C0338027006700EFFFE>16 20 1 0 20]122 dc[22 1 0 -12 23]123 dc[< FFFFFFFFFFF0>44 1 0 -12 45]124 dc dfe end TeXDict begin @letter %%Page: 78 89 bop 0 50 a fg(CHAPTER)15 b(8.)35 b(IMPLEMENTING)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)459 b fn(78)0 195 y(Neither)16 b(interaction)f(p)q(oses)g(great)f (di\016culties)k(for)c(an)i(implementation.)71 252 y(The)i(ma)r(jor)g(interac\ tion)g(inv)o(olv)o(es)g(replication)j(and)d(cop)o(y-on-write.)30 b(If)19 b (the)g(system)f(has)g(replicated)i(a)0 308 y(shared)c(page)g(that)f(m)n(ust)h (b)r(e)g(copied)h(if)f(written,)g(then)g(the)g(replicates)h(can)f(b)r(e)g(use\ d)g(to)f(satisfy)h(write)g(faults)0 364 y(on)e(the)g(page;)f(this)i(a)n(v)o (oids)f(the)g(costs)f(of)h(creating)g(an)f(extra)h(cop)o(y)l(,)f(but)h(imp)r (oses)g(extra)f(costs)g(if)i(the)f(replicate)0 421 y(w)o(as)h(used)i(b)o(y)f (more)g(than)g(one)g(address)h(space)f(and)g(has)g(to)g(b)r(e)g(recreated)g (as)g(a)g(result.)23 b(The)16 b(easy)g(case)h(is)f(if)0 477 y(there)h(is)h (a)e(replicate)j(that)d(is)i(only)f(b)r(eing)g(used)h(b)o(y)f(the)g(address)g (space)h(that)e(caused)h(the)h(write)f(fault;)g(this)0 534 y(replicate)k(can) f(alw)o(a)n(ys)f(b)r(e)h(used)g(to)f(satisfy)g(the)h(fault.)33 b(F)l(or)19 b (m)o(ultiple)j(address)d(spaces,)i(I)f(w)n(ould)h(prop)q(ose)0 590 y(alw)o (a)n(ys)15 b(using)g(the)g(replicate)h(unless)g(one)f(of)f(the)h(other)f(spac\ es)h(has)g(indicated)h(that)e(the)h(replicate)h(is)g(needed)0 647 y(\(cf.)i (the)h fl(alw)o(a)o(ys)h(replicate)g fn(op)r(eration)e(in)i(Section)f(8.7\).) 29 b(An)19 b(additional)h(primitive)f(m)o(ust)f(b)q(e)h(added)g(to)0 703 y (Mac)n(h's)h(mac)o(hine-dep)s(endent)f(interface)h(to)f(implemen)q(t)g(this)i (functionality;)h(the)e(fault)g(handler)h(m)n(ust)f(b)r(e)0 760 y(able)c(to)f (\014nd)g(out)g(if)h(the)f(NUMA)g(la)o(y)o(er)g(has)g(a)g(replicate)i(that)d (can)h(b)r(e)g(used)h(to)f(satisfy)g(a)f(write)i(fault.)0 903 y fe(8.5)70 b (Hardw)n(are)23 b(Supp)s(ort)0 1004 y fn(Existing)i(m)n(ultipro)r(cessor)f (hardw)o(are)f(will)j(not)d(allo)o(w)h(a)g(su\016ciently)g(accurate)f(impleme\ n)q(tation)g(of)h(the)0 1061 y(NUMA)c(memory)g(managemen)o(t)g(sc)o(hemes)h (discussed)h(here.)36 b(Soft)n(w)o(are)20 b(systems)g(that)g(imp)r(ose)g(a)g (level)h(of)0 1117 y(indirection)g(on)d(all)i(accesses)e(to)g(memory)g(or)g (shared)h(memory)f(can)g(not)h(hop)q(e)g(to)f(reco)n(v)o(er)g(from)g(this)h (p)r(er-)0 1174 y(formance)h(p)r(enalt)o(y)l(.)36 b(Th)o(us)20 b(it)h(is)g (w)o(orth)f(considering)i(an)e(arc)o(hitecture)h(with)g(hardw)n(are)g(supp)r (ort)e(for)h(our)0 1230 y(algorithms.)g(F)l(or)15 b(eac)n(h)h(page,)f(a)g(set) g(of)f(t)o(w)n(o)h(reference)h(counters)e(is)i(required)g(p)r(er)f(pro)q(cess\ or)g(in)h(the)g(system.)0 1287 y(T)l(ogether)h(with)h(increment/decremen)o (t)f(logic,)i(these)f(main)o(tain)g(the)f(counts)g(required)h(b)o(y)g(the)f (algorithms.)0 1343 y(An)h(exception)g(is)g(caused)g(when)f(a)g(pre-loaded)i (threshold)f(for)e(migration)i(or)e(replication)j(is)f(reac)o(hed.)27 b(The)0 1400 y(op)q(erating)15 b(system)g(then)h(deals)g(with)f(the)g(cop)o(ying)h (and)f(remapping)h(op)r(erations)f(required.)71 1456 y(The)d(coun)o(ters)g (are)g(k)o(ept)h(with)f(their)h(asso)q(ciated)g(memory)f(page.)19 b(F)-5 b (or)12 b(a)g(64-pro)q(cessor)g(system)g(and)h(16-bit)0 1512 y(coun)o(ters,)g (this)g(requires)g(256)f(b)o(ytes)h(of)f(memory)g(p)r(er)g(page.)19 b(This)14 b(translates)e(to)g(50%)g(o)o(v)n(erhead)i(for)e(512-b)n(yte)0 1569 y(pages,) i(25%)g(o)n(v)o(erhead)g(for)g(1K)h(pages,)f(6.25%)f(for)g(4K)i(pages)f(and)g (3.125%)f(for)h(8K)g(pages.)19 b(This)c(o)o(v)o(erhead)f(is)0 1625 y(acceptab\ le)j(for)e(pages)g(in)i(the)e(4K{8K)h(range.)21 b(There)16 b(should)g(b)r(e)g (no)f(impact)h(on)g(access)g(times)g(to)f(memory)-5 b(,)0 1682 y(as)19 b(the) h(coun)o(ter)f(manipulations)i(can)f(b)q(e)g(p)q(erformed)g(in)g(parallel)h (with)f(or)f(in)h(a)f(pip)s(eline)i(stage)e(after)g(the)0 1738 y(actual)d(acc\ ess.)23 b(An)16 b(exception)h(indicating)h(the)e(need)h(for)e(a)h(replication) h(or)f(migration)g(action)g(w)o(ould)g(o)q(ccur)0 1795 y(after)e(the)i(access) f(is)h(complete.)71 1851 y(The)i(replication)i(algorithm)f(only)g(needs)g(to) f(increment)g(a)g(single)i(coun)o(ter.)30 b(On)19 b(the)f(other)g(hand,)i(the) 0 1908 y(migration)11 b(algorithm)h(requires)g(up)r(dating)g(t)n(w)o(o)f(coun) o(ters,)g(one)h(of)f(which)g(m)o(ust)g(b)r(e)h(c)n(hosen)g(from)f(the)h(non-z\ ero)0 1964 y(coun)o(ters)j(for)f(that)h(page)g(\(lo)q(cal)h(references)g(only) g(up)q(date)f(the)h(latter)e(counter\).)19 b(Since)e(the)e(up)r(dating)g(of)g (the)0 2021 y(coun)o(ters)j(m)n(ust)g(tak)n(e)h(place)f(transparen)o(tly)g (and)g(at)g(the)g(same)f(rate)h(as)g(memory)f(references,)i(a)f(sequen)o(tial) 0 2077 y(searc)o(h)13 b(for)g(non-zero)g(coun)o(ters)g(is)h(not)f(acceptable.) 20 b(An)14 b(alternativ)o(e)f(is)h(to)e(pick)i(a)e(counter)h(and)g(decrement) g(it)0 2133 y(if)j(it)g(is)g(non-zero.)k(This)c(is)g(m)o(uc)o(h)g(simpler)h (to)d(implemen)q(t)h(and)h(trace-driv)o(en)g(sim)o(ulations)g([7])f(indicate) i(that)0 2190 y(its)e(p)r(erformance)g(is)g(similar)i(to)d(the)i(original)g (migration)f(algorithm.)71 2246 y(A)h(ma)r(jor)f(alternativ)o(e)i(to)e(the)i (replication)g(of)f(co)q(de)h(is)g(the)f(use)g(of)g(instruction)h(cac)o(hes.) 23 b(Since)18 b(co)q(de)f(can)0 2303 y(b)r(e)e(assumed)h(to)e(b)r(e)h(read-on\ ly)m(,)g(the)h(global)g(cac)o(he)f(consistency)i(problem)f(do)q(es)f(not)g (arise.)21 b(Ho)o(w)n(ev)o(er,)15 b(unlik)q(e)0 2359 y(the)g(sc)o(hemes)h(pro\ p)q(osed)f(here,)h(instruction)g(cac)o(hes)f(do)g(not)g(help)i(with)e(replica\ table)i(data.)71 2416 y(This)11 b(arc)o(hitecture)g(has)g(b)r(een)g(sim)o(ula\ ted)h(using)g(traces)e(from)g(a)h(uniform)g(memory)g(access)g(m)n(ultipro)r (cessor;)0 2472 y(the)j(results)g(are)g(rep)r(orted)f(in)i([7)o(].)k(The)14 b (simulated)g(access)g(costs)g(w)n(ere)g(con\014gured)h(to)e(appro)o(ximately) h(matc)o(h)0 2529 y(a)h(Butter\015y)l(,)g(and)g(traces)g(derived)g(from)g(act\ ual)g(parallel)i(programs)d(w)o(ere)h(used.)21 b(The)15 b(results)h(indicate) h(that)0 2585 y(considerable)e(p)q(erformance)e(b)r(ene\014ts)g(seemed)h(to)e (accrue)i(from)e(b)r(oth)h(replication)h(and)g(migration,)f(but)g(up)r(on)0 2642 y(further)18 b(examination)h(it)f(b)q(ecame)h(clear)f(that)g(most)f(of)g (the)i(b)q(ene\014ts)g(w)n(ere)f(from)g(replication)h(of)f(co)q(de)h(and)0 2698 y(migration)d(of)g(stac)o(k)g(pages)g(to)g(the)g(pro)q(cessor)g(using)i (them)1062 2681 y fd(2)1081 2698 y fn(.)24 b(Migration)16 b(e\013ects)g(w)o (ere)g(observ)o(ed)g(in)i(shared)0 2746 y 779 2 v 52 2803 a fc(2)69 2819 y fm (Hollida)r(y[22])12 b(discusses)j(the)e(imp)r(ortance)h(of)f(p)q(ositioning)j (co)r(de,)d(stac)o(k,)g(and)g(lo)r(cal)h(pages)g(correctly)n(.)p eop %%Page: 79 90 bop 0 50 a fg(CHAPTER)15 b(8.)35 b(IMPLEMENTING)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)459 b fn(79)0 195 y(data,)19 b(but)g(no)g(p)r(erformance)g(gain)g (w)o(as)f(obtained[52];)i(this)g(could)g(b)r(e)f(due)h(to)e(short)h(domains)g (of)g(lo)q(cality)0 252 y(that)c(w)n(ould)i(not)e(b)q(ene\014t)h(from)f(migra\ tion)h(at)f(the)g(page)h(lev)o(el)h(of)e(gran)n(ularit)o(y)m(,)g(or)g(to)g (the)g(short)g(traces)g(used)0 308 y(\(eac)o(h)e(trace)h(represen)o(ted)g(a)f (fraction)h(of)f(a)g(second)i(of)e(actual)h(computation\).)19 b(In)14 b(addit\ ion,)h(v)n(ery)f(little)h(e\013ect)0 364 y(w)o(as)i(observ)o(ed)i(from)e(v)n (arying)h(the)g(page)h(size)g(and)f(thresholds)h(used)g(to)f(mak)n(e)g(replic\ ation)i(and)f(migration)0 421 y(decisions.)42 b(The)22 b(lac)o(k)g(of)f(thres\ hold)i(e\013ect)e(suggests)h(that)f(the)h(w)n(orst)f(cases)h(for)f(p)r(erform\ ance)g(of)h(these)0 477 y(algorithms)d(do)g(not)f(o)q(ccur)h(in)h(practice,)g (so)f(that)f(actual)h(p)r(erformance)f(is)i(b)q(etter)e(than)h(indicated)i (b)o(y)e(the)0 534 y(comp)q(etitive)14 b(factor)f(b)r(ound.)20 b(On)14 b(the) g(other)g(hand,)h(it)f(is)g(p)r(ossible)h(that)f(these)g(results)g(are)g(also) g(due)h(to)e(short)0 590 y(trace)i(e\013ects.)0 734 y fe(8.6)70 b(Replicati)o (on)20 b(of)k(W)-6 b(ritable)21 b(P)n(ages)0 835 y fn(So)16 b(far)f(w)o(e)h (ha)n(v)o(e)g(not)f(allow)n(ed)i(the)f(replication)h(of)f(writable)g(pages.) 22 b(F)l(or)15 b(p)q(ortions)h(of)f(shared)h(memory)g(that)0 891 y(are)i(rare\ ly)g(written)g(\(called)h fk(mostly-r)n(e)n(ad)g(obje)n(cts)e fn(in)i([53)o (]\),)f(the)g(amortized)g(costs)g(of)f(the)h(atomic)g(up)r(dates)0 948 y(requ\ ired)23 b(b)o(y)g(the)f(writes)g(ma)n(y)h(not)f(b)q(e)g(prohibitiv)q(e.)41 b (Such)22 b(a)g(sc)o(heme)h(can)f(b)r(e)g(implemen)q(ted)g(b)o(y)g(using)0 1004 y(hardw)o(are)17 b(mec)o(hanisms)h(to)f(cause)g(a)g(trap)g(if)h(a)f(write)h (o)q(ccurs)g(to)f(an)n(y)h(of)f(the)g(replicates.)28 b(The)18 b(handler)g(for) 0 1061 y(this)d(trap)f(can)g(then)h(p)q(erform)f(the)h(up)q(date)g(b)o(y)f (obtaining)h(an)f(exclusiv)q(e)g(lo)r(c)o(k)g(on)h(the)f(logical)i(page)e(str\ ucture)0 1117 y(and)f(propagating)f(correct)g(data)g(to)g(all)h(copies.)20 b (The)13 b(resulting)h(serialization)g(of)e(writes)h(preserv)o(es)g(sequen)o (tial)0 1174 y(consistency)m(.)19 b(Relaxed)13 b(consistency)f(constrain)o (ts)f(are)g(preferable)i(if)e(the)h(data)f(has)g(to)g(b)q(e)h(up)r(dated)f (frequently)l(.)0 1230 y(On)j(the)f(other)g(hand,)h(if)f(the)h(memory)e(is)i (nev)o(er)f(written)h(after)e(some)h(p)r(oin)o(t,)g(then)g(replication)i(is)f (a)f(v)o(ery)g(go)q(o)q(d)0 1287 y(idea.)20 b(Researchers)14 b(w)n(orking)h (on)f(the)g(A)o(CE)g(pro)r(ject[19)o(])g(at)f(IBM)i(Researc)o(h)f(ha)o(v)o (e)g(found)h(this)f(to)g(b)q(e)h(the)f(case)0 1343 y(for)i(a)h(parallel)h(sho\ rtest)e(path)h(program;)f(the)h(data)f(structures)h(describing)i(the)e(graph) f(to)g(b)r(e)h(searc)o(hed)g(are)0 1400 y(nev)o(er)i(written)g(after)f(the)h (initialization)j(phase,)e(but)f(are)g(read)g(hea)o(vily)h(during)g(the)f(sea\ rc)n(h.)31 b(Replicating)0 1456 y(these)19 b(structures)f(into)g(lo)q(cal)h (memories)g(on)g(their)g(mac)n(hine)h(pro)q(duced)g(ma)r(jor)e(impro)o(v)o (emen)o(ts)g(in)i(the)f(run)0 1512 y(time)h(of)f(the)h(application)h([8)o(].) 33 b(Similar)21 b(results)f(ha)n(v)o(e)g(b)q(een)h(rep)q(orted)e(in)i(t)n(w)o (o)e(recen)o(t)g(pap)r(ers)g(on)h(NUMA)0 1569 y(memory)15 b(managemen)n(t)g ([9)o(,)g(13].)71 1625 y(Algorithm)f fl(R)f fn(ma)o(y)g(not)g(b)r(e)h(appropr\ iate)f(for)g(managing)h(replicated)h(writable)f(shared)g(memory)f(b)q(ecause) 0 1682 y(it)e(ignores)h(the)f(costs)f(of)h(up)r(dating)g(other)g(replicates)h (in)g(resp)r(onse)f(to)f(a)h(write.)19 b(The)11 b fk(Gener)n(al-Sno)m(opy-Cac\ hing)0 1738 y fn(algorithm)j(in)h([28)o(])f(is)h(a)f(b)q(etter)g(c)o(hoice)h (if)g(these)f(costs)g(are)f(imp)r(ortan)n(t)h(b)r(ecause)g(it)h(tak)n(es)f (them)g(into)f(account;)0 1795 y(this)i(algorithm)g(is)g(strongly)g(comp)q (etitive)g(with)g(a)f(factor)g(of)g(3.)20 b(If)15 b(up)q(date)g(costs)f(dep)r (end)i(on)e(the)h(n)o(um)o(b)r(er)f(of)0 1851 y(replicates)19 b(\(e.g.,)d(if) h(individual)k(messages)c(are)g(required)i(to)d(up)r(date)h(eac)o(h)h(replica\ te\),)h(then)e(the)h(algorithm)0 1908 y(m)o(ust)d(b)q(e)g(mo)q(di\014ed)i(acc\ ordingly)f(in)g(order)f(to)g(remain)h(strongly)e(comp)r(etitiv)o(e.)0 2051 y fe(8.7)70 b(Input)23 b(and)h(F)-6 b(eedbac)n(k)0 2152 y fn(If)17 b(additional) h(information)g(is)f(a)n(v)n(ailable)i(ab)q(out)d(the)h(access)g(patterns)g (for)f(a)g(page,)h(the)g(algorithms)g(can)g(b)r(e)0 2209 y(further)d(impro)o (v)n(ed)g(up)r(on.)20 b(F)-5 b(our)14 b(primitives)g(are)f(prop)r(osed)g(to)g (help)i(sp)r(ecify)g(this)f(additional)h(memory)e(usage)0 2265 y(information:) 0 2359 y fl(Nev)n(er)k(replicate:)24 b fn(On)13 b(a)o(v)o(erage,)f(this)i(pag\ e)f(is)h(used)g(so)e(infrequen)q(tly)h(in)h(this)g(cluster)g(that)e(it)h(shou\ ld)i(nev)o(er)114 2415 y(b)q(e)h(replicated)g(\(ev)o(en)f(if)h(it)g(accum)o (ulates)f fh(r)h fn(accesses\).)0 2509 y fl(Alw)n(a)o(ys)h(replicate:)24 b fn (On)14 b(a)o(v)n(erage,)g(this)g(page)g(will)i(b)q(e)f(used)f(enough)h(in)f (this)h(cluster)g(to)e(justify)h(replication)114 2566 y(as)19 b(early)h(as)g (p)q(ossible.)35 b(Alternativ)o(ely)m(,)21 b(this)f(page)g(is)g(read-only)h (due)f(to)f(the)h(use)g(of)g(cop)n(y-on-write)114 2622 y(tec)n(hniques)d(and) e(is)h(going)f(to)g(b)q(e)h(written)f(\(whic)o(h)h(will)h(require)f(a)f(cop)n (y)h(to)e(b)r(e)h(made\).)0 2716 y fl(Nev)n(er)i(migrate:)23 b fn(On)16 b(a)o (v)n(erage,)g(this)h(page)f(is)g(used)h(so)f(infrequently)g(that)g(it)g(shoul\ d)h(not)f(b)q(e)h(migrated)e(to)114 2772 y(this)g(cluster)h(\(ev)o(en)f(if)h (it)f(accum)o(ulates)h(enough)g(accesses)f(to)g(justify)g(migration\).)p eop %%Page: 80 91 bop 0 50 a fg(CHAPTER)15 b(8.)35 b(IMPLEMENTING)15 b(NUMA)g(MEMOR)m(Y)g(MANA) o(GEMENT)459 b fn(80)0 195 y fl(Anc)n(hor:)22 b fn(This)15 b(page)f(will)i (b)r(e)e(so)g(hea)o(vily)i(used)f(in)g(this)g(cluster)g(that)e(it)i(should)g (b)r(e)f(anc)o(hored)h(here)g(and)f(not)114 252 y(allo)o(w)o(ed)h(to)g(migrat\ e)g(un)o(til)h(further)f(notice.)20 b(An)c(option)f(to)g(rev)o(erse)g(this)h (e\013ect)f(is)g(also)g(needed.)71 345 y(Lazy)20 b(ev)n(aluation)h(can)g(b)q (e)g(used)g(to)f(dela)o(y)h(the)f(e\013ects)g(of)g fl(alw)o(a)o(ys)j(replicat\ e)f fn(un)o(til)g(the)e(memory)g(in)0 402 y(question)f(is)g(actually)g(access\ ed.)30 b(This)18 b(is)h(done)g(b)o(y)f(unmapping)i(the)e(page)g(in)h(hardw)o (are)f(and)g(p)r(erforming)0 458 y(the)i(op)q(eration)g(in)g(resp)r(onse)g (to)f(the)h(page)f(fault)h(generated)g(b)o(y)g(the)g(\014rst)f(access.)34 b (This)20 b(p)r(ermits)g(greater)0 515 y(\015exibilit)r(y)14 b(in)h(the)g(use) g(of)f(this)h(primitive,)f(as)g(no)h(additional)h(cost)e(is)h(imp)r(osed)f (for)g(pages)h(that)e(are)i(not)f(used;)0 571 y(similar)f(functionality)e(is) h(also)g(pro)n(vided)h(b)o(y)f(cop)o(ying)g(pages)f(when)h(they)g(are)f(\014r\ st)g(referenced)h(b)o(y)g(eac)o(h)f(remote)0 628 y(pro)q(cessor.)30 b(Recent) 19 b(w)n(ork)f([9])g(has)h(indicated)h(the)f(utility)g(of)f(b)r(eing)h(able)h (to)e(dela)o(y)h(making)g(a)f(replication)0 684 y(or)f(migration)h(decision)i (to)d(a)n(v)o(oid)h(incurring)h(large)f(costs)f(on)h(the)g(basis)g(of)g(trans\ ien)o(t)f(b)r(eha)o(vior;)h(this)h(is)f(an)0 741 y(adv)m(an)o(tage)d(of)f(our) h(approac)o(h)g(o)o(v)n(er)h(cop)n(y)g(on)f(reference.)71 797 y(These)j(primi\ tives)h(can)f(also)g(b)r(e)g(used)h(to)e(pro)o(vide)i(feedbac)o(k)f(from)g (the)g(managemen)o(t)g(algorithms)g(and)0 853 y(other)13 b(instrumentation)g (o)o(v)n(er)h(m)n(ultiple)i(runs)e(of)f(an)h(application)h(to)e(impro)o(v)o (e)h(its)f(p)r(erformance)g(b)o(y)h(adapting)0 910 y(its)k(memory)f(usage)g (to)g(the)g(memory)g(structure)g(of)g(the)h(mac)n(hine.)28 b(This)18 b(feedba\ ck)f(ma)o(y)g(reduce)h(the)g(e\013ort)0 966 y(required)e(to)f(restructure)g (data)f(to)h(tak)n(e)g(adv)n(an)o(tage)f(of)h(non-uniform)h(memory)e(arc)o (hitectures.)0 1110 y fe(8.8)70 b(Related)20 b(W)-6 b(ork)0 1211 y fn(Comp)q (etitiv)o(e)19 b(managemen)o(t)f(of)g(distributed)i(shared)f(memory)e(is)i (a)g(topic)g(at)e(the)i(juncture)g(of)f(sev)o(eral)h(ac-)0 1268 y(tiv)o(e)e (areas)g(of)f(researc)o(h.)26 b(A)17 b(n)o(um)o(b)q(er)g(of)g(researc)n(hers) h([11)o(,)e(18,)h(37)o(])g(ha)n(v)o(e)g(implemen)q(ted)g(distributed)i(shared) 0 1324 y(memory)c(using)i(messages)e(on)h(a)g(net)o(w)n(ork.)22 b(The)16 b (hardw)o(are)f(for)h(these)g(implementations)g(do)q(es)g(not)g(supp)r(ort)0 1380 y(remote)j(accesses)h(or)e(access)i(forw)n(arding;)h(this)f(remo)o(v)n (es)g(the)f(c)o(hoice)i(of)d(the)i(amoun)o(t)f(of)g(data)f(to)h(send)h(in)0 1437 y(resp)q(onse)d(to)f(a)h(request)f(which)h(is)g(critical)h(to)e(our)h (w)n(ork.)24 b(Most)16 b(researc)n(h)h(pro)s(jects)f(in)i(the)f(area)f(of)g (NUMA)0 1493 y(arc)n(hitectures)i(ha)o(v)o(e)f(implemen)q(ted)g(a)f(shared)i (memory)e(programming)h(model;)i(the)e(b)r(est)f(kno)o(wn)h(is)h(BBN's)0 1550 y(Uniform)13 b(System)g([49)o(],)f(and)h(it)h(is)f(t)n(ypical)i(in)e(that)f (it)h(directly)i(exp)q(orts)d(the)h(non-uniform)h(memory)e(structure)0 1606 y (to)j(users.)k(Our)d(w)n(ork)f(supp)r(orts)f(automatic)h(managemen)n(t)g(mec) o(hanisms)h(that)e(free)i(users)f(from)f(some)h(of)g(the)0 1663 y(details)h (in)o(v)o(olv)o(ed)f(in)h(managing)f(non-uniform)g(memory)l(,)f(and)h(should) h(mak)n(e)f(these)g(mac)o(hines)h(easier)f(to)f(pro-)0 1719 y(gram.)19 b(Othe\ r)c(researc)n(hers)g(ha)o(v)o(e)g(b)q(een)g(implemen)q(ting)g([9)o(,)g(13)o (])f(and)h(simulating)g([23)o(])f(memory)h(managemen)n(t)0 1776 y(systems)h (on)h(curren)o(t)g(NUMA)g(m)n(ultipro)s(cessors)f(that)g(do)h(not)g(pro)n(vid\ e)h(the)f(reference)g(information)h(needed)0 1832 y(b)o(y)d(the)g(algorithms) h(considered)g(in)g(this)g(c)o(hapter.)71 1889 y(Some)g(related)h(migration)f (results)h(are)f(rep)q(orted)g(b)o(y)h(LaRo)o(w)n(e)g(and)f(Ellis)i([33)o(].) 23 b(These)17 b(results)g(are)f(from)0 1945 y(exp)r(erimen)o(ts)e(on)f(a)g (Butter\015y)h(m)n(ultipro)s(cessor,)f(and)h(use)g(appro)n(ximations)g(to)f (an)h(access)f(coun)o(t)h(obtained)g(b)o(y)0 2001 y(sampling)j(and)f(aging)f (reference)i(bits)f([23)o(].)21 b(This)c(sampling)f(and)g(aging)g(requires)g (a)g(p)q(erio)r(dic)h(soft)n(w)n(are)f(scan)0 2058 y(of)e(all)h(pages)g(in)g (the)f(system,)g(which)g(introduces)i(some)e(additional)i(o)n(v)o(erhead.)k (Although)15 b(this)g(implementa-)0 2114 y(tion)g(is)h(not)f(a)f(complete)i (and)g(faithful)g(v)n(ersion)g(of)f(the)g(migration)g(algorithm,)g(it)g(shoul\ d)h(b)r(e)f(a)g(close)g(enough)0 2171 y(appro)o(ximation)g(for)f(estimation)h (of)f(the)h(p)r(erformance)f(impact.)20 b(They)15 b(found)g(that)f(the)h(comp) q(etitive)g(migra-)0 2227 y(tion)f(algorithm)g(pro)q(duced)h(p)q(erformance)f (impro)o(v)o(emen)o(ts)f(among)h(comparable)g(algorithms,)f(but)h(that)g(thes\ e)0 2284 y(p)r(erformance)j(gains)g(w)o(ere)h(minor)g(\(no)f(more)g(than)g (5%\))g(and)h(w)n(ere)g(not)f(enough)h(to)f(justify)h(the)f(additional)0 2340 y(state)h(that)g(the)h(migration)g(algorithm)f(requires)i(\(coun)o(ters)e(p)r (er)g(page)h(and)g(pro)q(cessor\).)30 b(In)19 b(addition,)i(the)0 2397 y(time) 16 b(tak)n(en)g(b)o(y)g(the)f(p)r(erio)r(dic)h(scans)g(puts)f(their)i(impleme\ ntation)f(at)f(a)g(ma)r(jor)g(disadv)n(an)o(tage)g(to)g(migration)0 2453 y (algorithms)j(that)f(do)h(not)f(require)i(suc)o(h)f(scans.)28 b(These)18 b (results)g(suggest)f(that)g(this)i(appro)n(ximation)g(to)e(the)0 2510 y(comp) q(etitive)c(migration)h(algorithm)f(is)h(not)f(suitable)i(to)d(the)i(Butter\ \015y)f(or)g(similar)h(NUMA)g(m)n(ultipro)s(cessors.)0 2566 y(The)i(results)g (also)g(suggest)f(that)g(the)h(p)q(erformance)g(b)q(ene\014ts)h(of)e(the)h (actual)g(migration)f(algorithm)h(ma)o(y)f(not)0 2622 y(justify)i(the)h(hardw) n(are)f(inv)n(estmen)o(t)g(required)h(to)f(ac)n(hieve)g(them,)h(but)f(resolvi\ ng)h(this)f(is)h(a)f(topic)g(for)g(future)0 2679 y(w)o(ork.)p eop %%Page: 81 92 bop 0 506 a ff(Chapter)34 b(9)0 714 y fi(Conclusion)0 936 y fn(The)18 b(comp\ lexities)h(of)e(managing)h(m)n(ultipro)r(cessor)g(resources)f(mak)n(e)h(it)g (clear)g(that)f(a)g(go)q(o)q(d)g(m)o(ultipro)r(cessor)0 993 y(op)q(erating)g (system)g(requires)h(more)f(than)g(simple)i(extensions)f(to)f(an)g(existing)h (unipro)r(cessor)f(system.)26 b(Mul-)0 1049 y(tipro)q(cessor)18 b(application\ s)h(complicate)f(the)g(managemen)o(t)f(of)g(pro)q(cessor)g(resources)h(\(sc)n (heduling\))i(b)o(y)d(using)0 1106 y(parallelism)c(and)f(concurrency)g(\(and) g(exp)q(ecting)h(system)e(supp)r(ort)f(to)h(ac)o(hiev)o(e)h(go)q(o)q(d)f(p)r (erformance.)18 b(Non)12 b(Uni-)0 1162 y(form)f(Memory)g(Access)i(\(NUMA\))e (m)n(ultipro)r(cessor)h(arc)o(hitectures)g(sub)r(divide)i(b)q(oth)e(pro)q(ces\ sing)g(and)g(memory)0 1219 y(resources)17 b(into)f(subsets,)i(eac)o(h)f(of)g (whic)o(h)h(is)f(di\013erent)g(\(e.g.,)f(eac)n(h)i(cluster)g(of)e(pro)q(cesso\ rs)h(is)h(close)g(to)e(a)h(dif-)0 1275 y(feren)o(t)g(p)q(o)q(ol)g(of)g(memory\ \).)24 b(This)17 b(c)o(hanges)g(the)g(nature)g(of)f(the)h(resource)g(manageme\ n)o(t)f(problems,)i(b)q(ecause)0 1332 y(it)f(is)h(no)e(longer)i(p)q(ossible)g (to)f(view)g(either)h(resource)f(as)f(a)h(single)h(large)f(p)r(o)q(ol)g(of)f (interc)o(hangeable)i(elements.)0 1388 y(Unipro)r(cessor)c(op)q(erating)g(sys\ tems)g(do)g(not)g(face)g(analogous)f(problems,)i(and)f(therefore)g(lac)o(k)h (the)f(tec)o(hnology)0 1445 y(to)h(solv)o(e)g(them.)71 1501 y(This)c(thesis)g (has)f(explored)h(resource)g(managemen)n(t)f(issues)i(that)d(arise)i(in)g(the) g(design)g(and)g(implementation)0 1557 y(of)17 b(m)n(ultipro)r(cessor)g(op)q (erating)g(systems.)25 b(New)17 b(sc)o(heduling)i(tec)o(hniques)g(suc)o(h)e (as)g(Hando\013)f(Sc)o(heduling)k(and)0 1614 y(Pro)q(cessor)f(Allo)r(cation)h (ha)o(v)o(e)f(b)r(een)h(dev)o(elop)r(ed)g(to)f(supp)r(ort)g(application)i(sc) o(heduling)h(requirements.)33 b(The)0 1670 y(pro)q(cessor)14 b(allo)r(cation) h(w)o(ork)f(is)h(one)f(of)h(the)f(\014rst)g(successful)i(applications)g(of)f (p)q(olicy)h(mec)o(hanism)f(separation)0 1727 y(to)j(m)n(ultipro)s(cessor)g (sc)o(heduling;)j(this)e(p)r(ermits)f(it)h(to)f(ac)n(hieve)h(an)f(unpreceden) q(ted)g(degree)h(of)f(\015exibilit)r(y)g(in)0 1783 y(supp)r(orting)c(di\013er\ en)o(t)g(programming)f(mo)q(dels,)i(allo)r(cation)f(p)q(olicies,)i(and)e(m)o (ultipro)r(cessor)g(arc)n(hitectures.)20 b(In)0 1840 y(the)f(area)g(of)g(memo\ ry)f(managemen)o(t,)i(new)f(comp)q(etitive)g(algorithms)g(for)g(managing)g (memory)g(in)h(NUMA)0 1896 y(m)o(ultipro)r(cessors)15 b(ha)o(v)n(e)h(b)q(een) g(dev)o(elop)r(ed.)21 b(In)16 b(this)g(con)o(text,)e(`comp)q(etitive')h(means) g(that)g(their)h(p)q(erformance)0 1953 y(is)d(within)g(a)f(small)i(constan)n (t)e(factor)f(b)r(ound)i(of)f(optimal.)19 b(These)13 b(results)g(are)f(a)g (new)g(con)o(tribution)h(to)f(the)h(\014eld)0 2009 y(of)j(comp)q(etitiv)o(e)h (algorithm)f(analysis.)23 b(A)16 b(case)g(study)g(using)h(Mac)n(h)f(addressed) h(the)f(ma)r(jor)g(implementation)0 2066 y(issues,)g(but)f(an)g(actual)g(impl\ emen)q(tation)g(requires)h(hardw)o(are)e(supp)r(ort)h(that)f(is)i(not)f(curre\ n)o(tly)g(a)o(v)m(ailable.)0 2209 y fe(9.1)70 b(Timesharing)21 b(Sc)n(hedulin\ g)g(and)j(Timing)0 2310 y fn(A)15 b(new)h(timesharing)g(sc)o(heduler)h(for)e (Mac)n(h)h(w)n(as)f(develop)r(ed)g(as)h(a)f(basis)g(for)g(the)h(m)n(ultipro)s (cessor)f(sc)o(heduling)0 2367 y(researc)o(h.)23 b(This)17 b(sc)o(heduler)g (employs)f(a)g(new)g(algorithm)h(for)e(computing)i(priorities)h(that)d(spread\ s)i(the)f(com-)0 2423 y(putation)h(o)n(v)o(er)g(all)g(threads)g(\(and)f(hence) i(all)g(pro)q(cessors\))e(in)h(a)g(system,)f(a)n(v)o(oiding)i(the)f(need)g (for)f(a)h(p)q(erio)r(dic)0 2480 y(scan)c(of)g(the)h(threads.)19 b(A)14 b(p)q (erio)r(dic)g(scan)g(of)f(runnable)h(threads)g(is)g(needed,)g(but)g(this)g (scans)f(far)g(few)o(er)g(threads)0 2536 y(b)r(ecause)i(the)f(n)o(um)o(b)r (er)g(of)g(runnable)i(threads)f(is)g(usually)h(a)e(small)h(fraction)g(of)f (the)g(total)g(n)o(um)o(b)r(er)g(of)g(threads.)0 2593 y(The)19 b(sc)o(heduler) i(uses)e(an)g(appro)n(ximation)h(tec)o(hnique)g(based)g(on)f(t)n(w)o(o)f(digi\ t)i(binary)g(fractional)f(expansions)0 2649 y(to)f(replace)h(exp)r(ensive)f (division)j(op)q(erations)d(with)h(shifts)g(and)f(adds.)30 b(Time)19 b(quan)o (ta)f(are)g(used)h(within)h(the)0 2705 y(sc)o(heduler)c(to)d(reduce)i(the)f (n)o(um)o(b)r(er)g(of)f(con)o(text)h(switc)o(hes,)g(and)h(a)e(further)h(reduc\ tion)h(is)g(obtained)g(b)o(y)f(length-)0 2762 y(ening)20 b(quan)o(ta)e(on)h (lightly)g(loaded)h(m)n(ultipro)s(cessors.)30 b(This)20 b(thesis)f(also)g(pre\ sents)f(a)h(closed-form)g(solution)0 2818 y(to)d(the)i(exp)q(ected)g(division) h(of)e(pro)q(cessor)g(usage)g(among)f(compute-b)r(ound)h(threads)g(at)g(di\ \013eren)o(t)g(priorities.)951 2927 y(81)p eop %%Page: 82 93 bop 0 50 a fg(CHAPTER)15 b(9.)35 b(CONCLUSION)1279 b fn(82)0 195 y(This)15 b (w)n(ork)f(is)g(not)g(a)g(detailed)i(study)e(of)f(the)i(alternativ)o(es)f(and) g(tradeo\013s)f(in)i(building)i(a)c(timesharing)i(sc)o(hed-)0 252 y(uler,)j (but)g(instead)g(demonstrates)f(\(via)g(implemen)q(tation\))f(that)h(a)g(sele\ cted)i(new)f(design)g(p)q(oint)f(is)h(feasible.)0 308 y(A)d(comprehensive)h (study)f(of)g(costs)f(and)i(tradeo\013s)e(\(including)k(identi\014cation)e (of)e(appropriate)i(p)q(erformance)0 364 y(metrics\))f(for)g(timesharing)h (sc)n(heduling)i(is)d(left)h(to)f(future)g(w)n(ork.)71 421 y(This)k(thesis)f (demonstrates)g(that)g(timestamp-based)g(timing)i(is)e(a)g(ma)s(jor)f(impro)o (v)o(emen)o(t)h(o)o(v)o(er)g(statisti-)0 477 y(cal)i(timing)g(b)o(y)f(designi\ ng)h(and)g(implementing)g(a)e(timestamp-based)i(timing)g(subsystem)f(for)f (Mac)o(h.)32 b(The)0 534 y(accuracy)19 b(of)f(statistical)h(timing)g(tec)o (hniques)h(is)f(limited)h(b)o(y)e(the)h(clo)r(c)o(k)f(interrupt)g(rate)g(at)g (whic)o(h)h(usage)f(is)0 590 y(sampled,)g(and)g(the)f(results)h(are)f(distort\ ed)g(b)o(y)g(activities)i(sync)o(hronized)g(to)d(\(e.g.,)g(caused)i(b)o(y\))f (these)g(inter-)0 647 y(rupts.)22 b(Timestamp-based)16 b(timing)h(tec)o(hniqu\ es)g(a)o(v)n(oid)g(these)f(distortions)g(and)g(can)g(impro)o(v)o(e)g(measurem\ en)o(t)0 703 y(accuracy)f(b)o(y)h(orders)e(of)h(magnitude)h(\(dep)r(ending)g (on)f(the)h(gran)n(ularity)f(of)g(the)g(timestamp)g(source\),)g(making)0 760 y (it)i(p)q(ossible)h(to)e(time)h(pro)q(cessor)f(usage)g(do)o(wn)g(to)g(the)h (instruction)g(level.)24 b(Measuremen)o(ts)16 b(of)g(the)g(Multimax)0 816 y (implemen)q(tation)f(demonstrate)g(that)g(its)h(o)n(v)o(erheads)g(are)f(small\ ,)h(appro)o(ximately)g(a)g(dozen)g(instructions)g(p)r(er)0 873 y(trap,)f(inte\ rrupt,)g(return)h(from)g(trap)f(or)g(interrupt,)h(or)f(con)o(text)g(switc)o (h.)23 b(These)16 b(small)h(o)o(v)n(erheads)g(are)e(more)0 929 y(than)j(justi\ \014ed)i(b)o(y)e(the)g(impro)o(v)o(emen)o(ts)g(in)i(accuracy)l(.)29 b(A)19 b (ma)r(jor)f(adv)m(an)o(tage)f(of)h(the)h(Mac)n(h)g(timing)g(facility)0 985 y (is)f(that)f(no)g(m)o(ultipro)r(cessor)g(\(e.g.,)g(test-and-set\))f(lo)r(c)o (ks)h(are)g(used)h(to)f(protect)g(the)h(timers,)f(prev)o(enting)g(un-)0 1042 y (predictable)k(delays)e(to)f(timing)i(op)r(erations)f(that)f(o)q(ccur)i(in)g (critical)h(paths)e(\(esp)q(ecially)j(in)o(terrupts\).)32 b(The)0 1098 y(only) 16 b(hardw)o(are)f(supp)r(ort)f(required)j(is)e(a)h(timestamp)f(source;)g(a)g (32-bit)g(counter)g(running)h(at)f(a)g(kno)o(wn)g(clo)r(c)o(k)0 1155 y(freque\ ncy)g(is)g(su\016cient.)k(This)c(impro)o(v)o(ed)g(timing)g(facility)f(is)h (useful)h(on)e(b)q(oth)g(unipro)s(cessors)g(and)g(m)o(ultipro-)0 1211 y(cesso\ rs.)0 1355 y fe(9.2)70 b(Sc)n(heduling)21 b(Supp)s(ort)i(for)h(Concurrency)f (and)g(P)n(arallelism)0 1456 y fn(A)15 b(new)h(classi\014cation)h(of)e(progra\ mming)g(mo)q(dels)h(for)f(concurren)o(t)g(and)h(parallel)h(programs)d(has)h (b)r(een)h(dev)o(el-)0 1512 y(op)q(ed)h(to)g(elicit)h(their)g(sc)n(heduling)h (requirements.)25 b(Programming)15 b(mo)q(dels)j(are)f(classi\014ed)h(b)o(y)f (whether)g(they)0 1569 y(introduce)k(concurrency)g(at)e(the)h(system)f(\(virt\ ual)i(pro)q(cessor\))e(and/or)h(user)g(\(m)n(ultiroutine\))h(levels.)35 b(The) 0 1625 y(terms)16 b fk(virtual)i(pr)n(o)n(c)n(essor)e fn(and)h fk(multir)n (outine)g fn(are)f(introduced)i(to)e(b)r(e)h(precise)g(ab)r(out)f(whether)h (the)g(en)o(tit)o(y)f(is)0 1682 y(implemen)q(ted)e(b)o(y)g(the)g(op)q(erating) g(system)g(\(virtual)g(pro)q(cessor\))g(or)f(part)h(of)g(the)g(application)i (\(m)n(ultiroutine\);)0 1738 y(the)i(common)f(term)g(`thread')g(has)h(b)q(een) h(used)f(to)f(refer)h(to)f(b)q(oth)h(t)n(yp)q(es)g(of)g(en)o(tities.)28 b(The) 18 b(resulting)h(classi-)0 1795 y(\014cation)e(ranges)e(from)h(pure)g(paralle\ lism)j(mo)q(dels)e(that)e(introduce)i(no)f(concurrency)h(b)r(ey)o(ond)f(the)h (hardw)n(are)0 1851 y(parallelism)j(to)d(dual)i(concurrency)g(mo)q(dels)g(tha\ t)e(introduce)i(concurrency)g(at)f(b)q(oth)g(the)g(system)f(and)i(user)0 1908 y(levels.)h(F)l(or)14 b(sc)o(heduling)i(purp)r(oses,)e(the)h(most)e(imp)r(ort\ an)n(t)h(c)o(haracteristic)h(of)f(these)h(mo)q(dels)g(is)g(whether)g(they)0 1964 y(introduce)i(concurrency)h(at)e(the)g(system)g(\(virtual)h(pro)q(cessor\ \))f(level.)24 b(Programs)15 b(that)h(esc)o(hew)h(this)f(level)h(of)0 2021 y (concurrency)g(require)h(dedicated)g(use)e(of)g(pro)q(cessors)h(to)e(ac)o(hie\ ve)i(goo)q(d)g(p)r(erformance)f(\(with)g(the)h(exception)0 2077 y(of)h(corout\ ine)h(mo)q(dels\).)30 b(Programs)17 b(that)g(use)i(this)g(level)g(of)f(concur\ rency)h(do)f(not)g(necessarily)i(need)f(dedi-)0 2133 y(cated)14 b(pro)q(cesso\ rs,)f(but)h(can)f(b)r(ene\014t)h(from)f(op)q(erating)h(system)f(supp)r(ort)f (for)h(synchronization)h(with)g(a)f(virtual)0 2190 y(pro)q(cessor)i(that)f (is)i(not)f(running)h(on)f(a)g(physical)h(pro)q(cessor.)71 2246 y(The)i(tec)o (hniques)i(of)e(Discouragemen)o(t)g(and)h(Hando\013)f(Sc)o(heduling)i(supp)r (ort)e(comm)n(unication)i(and)f(syn-)0 2303 y(c)o(hronization)f(for)f(applica\ tions)h(that)f(use)g(system)g(concurrency)h(\(more)f(virtual)h(pro)q(cessors) e(than)i(ph)o(ysical)0 2359 y(pro)q(cessors\).)28 b(Discouragemen)o(t)17 b (Scheduling)j(allo)o(ws)e(running)h(threads)f(to)f(supply)i(hints)f(to)f(the) h(sc)o(heduler)0 2416 y(indicating)j(that)d(they)h(should)g(not)g(b)q(e)g(run\ .)31 b(Hando\013)18 b(Sc)o(heduling)j(extends)f(this)f(b)o(y)f(also)h(hinting) g(that)f(a)0 2472 y(sp)q(eci\014c)h(other)e(thread)g(should)i(b)q(e)f(run.)26 b(These)18 b(tec)o(hniques)h(are)e(based)h(on)f(lo)q(cal)h(information)g(\(ab) q(out)f(the)0 2529 y(thread)d(supplying)h(the)f(hint)f(and)h(at)f(most)g(one) h(other\))e(to)h(a)o(v)o(oid)h(the)g(complexity)f(dra)o(wbac)n(ks)h(of)f(basi\ ng)h(this)0 2585 y(functionality)h(on)g(global)g(information)g(\(state)f(of)h (the)g(en)o(tire)g(application\).)21 b(Sp)r(ecifying)16 b(the)f(information)g (as)0 2642 y(hints)f(frees)g(the)g(user)g(from)f(p)r(erforming)h(c)o(hec)o (ks)g(that)g(the)g(op)q(erating)g(system)g(can)g(p)q(erform)g(more)f(e\016cie\ n)q(tly)0 2698 y(\(e.g.,)j(whether)i(the)f(target)f(thread)i(of)f(a)g(hando\ \013)g(is)h(blo)r(c)o(k)o(ed\).)26 b(The)18 b(o)o(v)n(erall)h(design)f(of)f (applications)i(sup-)0 2754 y(plying)g(information)f(\(instead)g(of)g(the)g (system)f(asking)h(for)g(it\))f(mak)o(es)h(these)g(hints)f(optional,)i(imp)r (osing)f(no)0 2811 y(additional)h(o)o(v)o(erhead)f(on)g(applications)h(that)f (do)g(not)f(use)i(them.)28 b(P)n(erformance)18 b(results)g(demonstrate)g(the) p eop %%Page: 83 94 bop 0 50 a fg(CHAPTER)15 b(9.)35 b(CONCLUSION)1279 b fn(83)0 195 y(e\013ecti\ v)o(eness)15 b(of)f(these)h(hints)f(in)i(impro)o(ving)f(p)q(erformance)f(of)h (b)q(oth)f(sync)o(hronization)i(and)e(comm)o(unication.)71 252 y(Mac)n(h)20 b (incorp)r(orates)e(a)h(new)h(\015exible)h(approac)o(h)e(to)g(pro)q(cessor)g (allo)r(cation.)33 b(This)20 b(\015exibilit)q(y)g(supp)r(orts)0 308 y(applica\ tions)f(written)e(using)h(di\013erent)f(programming)f(mo)q(dels,)i(the)g(use) f(of)g(di\013erent)g(sc)n(heduling)j(p)q(olicies,)0 364 y(and)e(ev)o(en)g(di\ \013eren)o(t)f(mac)o(hine)i(arc)n(hitectures\(e.g.,)e(NUMA\).)f(The)i(ma)r (jor)f(con)o(tribution)h(to)f(this)h(\015exibilit)r(y)0 421 y(comes)c(from)f (isolating)i(sc)o(heduling)h(p)r(olicy)f(in)g(a)f(privileged)i(serv)o(er)e (that)f(is)i(easier)f(to)g(replace)h(or)e(recon\014gure)0 477 y(than)k(the)h (op)q(erating)g(system)f(k)o(ernel.)28 b(The)17 b(pro)q(cessor)h(allo)r(catio\ n)f(mec)o(hanisms)h(are)g(still)h(implemented)f(in)0 534 y(the)g(k)o(ernel.) 28 b(The)18 b(k)o(ernel)h(in)o(terface)f(is)g(based)g(on)g(the)f(notion)h(of) g(a)f fk(pr)n(o)n(c)n(essor)h(set)p fn(,)f(an)h(indep)s(endent)f(en)o(tit)o (y)0 590 y(to)d(which)h(b)q(oth)g(pro)q(cessors)f(and)h(threads)g(can)g(b)r (e)g(assigned.)20 b(The)15 b(seman)o(tics)g(of)f(these)i(assignmen)o(ts)e(is) i(that)0 647 y(assigned)k(threads)f(execute)g(only)h(on)f(assigned)h(pro)q (cessors)e(and)i(vice-versa.)31 b(Processor)19 b(assignmen)o(ts)g(are)0 703 y (managed)f(b)o(y)g(the)g(serv)o(er,)g(and)h(thread)f(assignmen)o(ts)g(b)o(y)g (the)g(application.)31 b(This)18 b(separation)h(of)e(concerns)0 760 y(frees)f (the)f(serv)o(er)h(from)f(the)h(details)g(of)g(application)h(structure)e(b)r (ecause)h(the)g(serv)o(er)f(is)h(resp)r(onsible)h(only)f(for)0 816 y(assem)n (bling)21 b(sets)d(of)h(pro)q(cessors)g(in)g(resp)r(onse)g(to)f(requests;)j (applications)f(are)f(resp)q(onsible)i(for)d(ho)o(w)h(these)0 873 y(pro)q(ces\ sors)c(are)g(used,)g(and)h(can)f(exercise)h(detailed)h(con)o(trol)e(in)h(this) g(area)e(if)i(desired.)71 929 y(Exp)q(erience)h(with)g(the)f(use)g(of)g(Mac)n (h's)g(pro)q(cessor)f(allo)r(cation)i(facility)f(has)f(b)r(een)h(v)o(ery)g (p)r(ositiv)o(e.)22 b(A)16 b(sim-)0 985 y(ple)k(serv)o(er,)f(the)g(cpu)t 14 2 v 13 w(serv)o(er,)g(implemen)q(ts)g(a)f(basic)i(gang)e(sc)o(heduling)j(p)r (olicy)f(for)e(pro)q(cesses.)32 b(This)19 b(serv)o(er)0 1042 y(b)r(ears)c(mar\ k)n(ed)h(similarities)h(to)e(a)g(batc)o(h)h(sc)n(heduler)h(for)e(a)g(computer) h(that)f(do)q(es)g(not)g(ha)o(v)o(e)g(virtual)i(memory)-5 b(.)0 1098 y(The)17 b(serv)n(er)g(has)g(b)q(een)g(used)g(b)o(y)g(b)q(oth)g(parallel)h(programming) e(researc)n(hers)h(and)g(studen)o(ts)f(in)i(parallel)g(pro-)0 1155 y(gramming) g(courses)g(at)f(CMU,)g(and)h(has)g(b)r(een)g(successful)i(in)f(meeting)f(the\ ir)h(requirements)e(for)g(dedicated)0 1211 y(pro)q(cessors)e(\(primarily)i (for)e(p)q(erformance)g(measurement\).)20 b(Man)n(y)c(extensions)g(to)f(this) h(serv)o(er)f(are)g(p)r(ossible.)0 1268 y(One)k(example)g(has)f(b)r(een)g(stu\ died)i(and)e(implemen)q(ted)g(under)h(Mac)n(h)g(b)o(y)f(researc)o(hers)g(from) f(Stanford;)i(this)0 1324 y(extension)e(allo)o(ws)f(dynamic)g(v)n(ariation)g (of)f(the)h(n)o(um)o(b)q(er)g(of)f(pro)q(cessors)h(dedicated)h(to)e(an)h(appl\ ication)h(in)g(re-)0 1381 y(sp)q(onse)g(to)f(c)o(hanges)g(in)i(system)e(load) g([51)o(].)24 b(Implementation)16 b(and)h(analysis)g(of)f(this)h(and)g(other) f(p)q(olicies)i(for)0 1437 y(pro)q(cessor)d(allo)r(cation)g(is)h(a)f(pro)q (ductive)g(area)g(for)f(future)h(w)o(ork.)0 1580 y fe(9.3)70 b(NUMA)22 b(Memo\ ry)h(Managemen)n(t)0 1682 y fn(The)c(memory)g(managemen)n(t)g(researc)n(h)g (fo)q(cuses)h(on)f(the)g(dev)o(elopment)f(of)h(comp)q(etitive)g(algorithms)g (based)0 1738 y(on)h(memory)g(access)g(b)q(eha)o(vior.)35 b(In)21 b(this)f (con)o(text,)h(comp)q(etitive)f(means)g(that)f(the)i(p)q(erformance)f(of)g (these)0 1795 y(algorithms)f(is)h(within)h(a)e(small)h(constan)n(t)f(factor)g (of)g(optimal,)h(and)g(that)e(the)i(p)q(erformance)f(is)h(essentially)0 1851 y (the)e(b)r(est)g(that)f(can)i(b)q(e)g(done)g(without)f(adv)m(ance)h(kno)o(wle\ dge)g(of)e(future)i(memory)e(access)i(b)q(eha)o(vior.)30 b(Algo-)0 1908 y(rit\ hms)15 b(ha)n(v)o(e)g(b)q(een)h(dev)o(elop)r(ed)f(for)f(the)g(replication)j (of)d(read-only)h(memory)f(and)h(the)f(migration)h(of)f(writable)0 1964 y(mem\ ory)i(on)g(NUMA)g(interconnection)h(top)q(ologies)g(corresp)q(onding)g(to)e (complete)j(graphs)d(and)i(trees.)23 b(Most)0 2021 y(actual)d(NUMA)g(intercon\ nections)h(implemen)q(t)e(a)h(short)g(access)g(time)h(to)e(lo)r(cal)i(memory) e(and)i(a)f(constan)n(t)0 2077 y(longer)d(access)f(time)h(to)f(an)n(y)h(remot\ e)e(memory;)h(this)h(corresp)q(onds)g(to)f(the)g(complete)h(graph)f(top)q(olo\ gy)l(.)24 b(The)0 2133 y(replication)19 b(algorithms)e(are)g(extensions)h(of) e(w)o(ell-known)h(results,)h(but)f(the)h(migration)f(algorithms)g(are)g(the)0 2190 y(\014rst)c(comp)r(etitiv)o(e)h(solutions)h(to)e(the)h fk(1-server)h(wit\ h)g(excursions)f fn(problem.)20 b(This)14 b(thesis)g(pro)o(v)o(es)g(the)g(com\ p)q(et-)0 2246 y(itive)i(prop)r(erties)h(of)f(these)h(algorithms,)f(and)h(als\ o)g(establishes)h(a)e(lo)o(w)o(er)g(b)r(ound)h(result)g(\(3\))f(for)g(the)g (1-serv)o(er)0 2303 y(with)f(excursions)h(problem.)k(This)c(result)f(is)g(unu\ sual)g(in)h(that)e(it)h(has)g(b)q(een)h(previously)g(pro)n(v)o(ed)f(in)h(an)f (earlier)0 2359 y(pap)q(er[28],)f(but)h(w)o(as)g(not)g(recognized)h(and)f(sta\ ted)g(as)g(suc)o(h)g(b)o(y)g(the)h(authors.)71 2416 y(A)f(case)g(study)g(of)f (the)h(Mac)o(h)g(op)q(erating)g(system)g(demonstrates)f(the)h(feasibilit)q (y)g(of)g(implementing)h(these)0 2472 y(algorithms)j(if)g(the)g(required)h (hardw)o(are)e(supp)r(ort)g(is)i(presen)o(t.)31 b(The)19 b(algorithms)g(canno\ t)g(b)q(e)g(implemen)q(ted)0 2529 y(in)i(current)f(m)n(ultipro)r(cessor)h(sys\ tems)e(b)r(ecause)i(they)f(rely)h(on)g(reference)g(coun)o(t)f(information)h (that)e(is)i(not)0 2585 y(a)n(v)n(ailable)e(from)d(current)g(hardw)o(are.)25 b (If)18 b(this)g(information)f(is)h(a)n(v)m(ailable,)i(the)d(additional)h(soft) n(w)o(are)f(c)o(hanges)0 2642 y(required)j(to)f(implemen)q(t)f(the)i(algorith\ ms)f(can)g(b)r(e)g(handled)i(b)o(y)e(Mac)n(h;)j(existing)e(Mac)n(h)g(implemen\ tations)0 2698 y(of)c(NUMA)g(memory)g(managemen)n(t)g([9)o(,)g(13])f(lend)j (supp)r(ort)d(to)h(this)g(conclusion.)25 b(Preliminary)18 b(p)q(erformance)0 2754 y(studies)d([7,)f(33)o(])g(of)g(these)h(algorithms)f(sho)o(w)g(that)g (they)h(can)f(impro)o(v)o(e)h(p)q(erformance,)f(but)h(the)f(demonstrated)0 2811 y(p)r(erformance)k(impro)o(v)o(emen)o(ts)h(are)f(relatively)h(small.)32 b (This)19 b(has)g(lead)h(the)f(authors)f(of)h(one)g(of)f(the)h(studies)p eop %%Page: 84 95 bop 0 50 a fg(CHAPTER)15 b(9.)35 b(CONCLUSION)1279 b fn(84)0 195 y([33)o(]) 21 b(to)g(conjecture)h(that)f(the)h(p)q(erformance)g(impro)o(v)n(ements)f(gai\ ned)h(from)f(their)h(appro)o(ximation)g(to)f(the)0 252 y(migration)16 b(algor\ ithm)g(are)f(not)g(justi\014ed)i(b)o(y)f(the)g(implemen)q(tation)f(costs.)21 b (More)15 b(w)o(ork)g(is)h(needed)h(to)f(deter-)0 308 y(mine)j(the)g(practical) g(utilit)q(y)f(of)g(these)h(algorithms,)g(and)f(to)g(understand)h(the)g(e\013\ ects)f(of)g(the)h(compromises)0 364 y(that)e(are)g(required)h(to)f(appro)o (ximate)g(their)h(b)r(eha)n(vior)g(for)f(implementation)h(on)f(the)g(current) g(generation)g(of)0 421 y(m)o(ultipro)r(cessors.)0 564 y fe(9.4)70 b(Conclusi\ on)0 666 y fn(This)21 b(thesis)g(has)f(demonstrated)f(that)h(m)o(ultipro)r (cessor)g(op)q(erating)g(systems)g(require)h(more)f(sophisticated)0 722 y(res\ ource)c(managemen)n(t)g(tec)n(hniques)h(than)f(their)g(unipro)r(cessor)g(coun) o(terparts,)e(and)i(has)f(made)h(some)f(ma)r(jor)0 779 y(progress)k(in)h(dev) o(eloping)h(suc)o(h)f(tec)o(hniques.)34 b(Both)20 b(m)n(ultipro)s(cessor)f (arc)n(hitectures)i(and)e(the)h(t)n(yp)r(es)g(of)f(ap-)0 835 y(plications)f (that)d(they)h(are)g(exp)r(ected)h(to)e(supp)r(ort)g(increase)i(the)f(complex\ ity)g(of)g(the)g(resource)h(managemen)n(t)0 891 y(problems.)j(The)13 b(w)o (ork)f(describ)r(ed)i(here)f(has)g(concentrated)f(on)h(the)g(managemen)n(t)g (of)f(pro)r(cessor)g(and)h(memory)0 948 y(resources)i(with)g(the)g(dual)h(goa\ ls)e(of)h(pro)n(viding)h(b)r(etter)e(supp)r(ort)g(for)g(applications)j(and)e (making)g(e\016cient)f(use)0 1004 y(of)h(hardw)n(are)g(resources.)71 1061 y (The)e(pro)q(cessor)f(managemen)o(t,)g(or)h(sc)n(heduling,)i(researc)o(h)e (is)g(concentrated)f(on)h(supp)r(orting)f(requirements)0 1117 y(derived)22 b (from)g(applications.)43 b(Sync)o(hronization)23 b(and)g(comm)n(unication)h (in)f(concurren)o(t)f(applications)i(are)0 1174 y(supp)r(orted)13 b(b)o(y)h (Discouragemen)o(t)f(and)h(Hando\013)f(Sc)o(heduling,)j(whic)o(h)e(allow)f (users)h(to)e(pro)r(ductiv)o(ely)j(in\015uence)0 1230 y(sc)o(heduling)f(of)e (their)g(applications)i(without)e(requiring)h(them)f(to)f(write)h(their)h(o)n (wn)f(sc)o(hedulers.)21 b(A)12 b(new)g(design)0 1287 y(and)i(implementation)g (of)f(a)g(Pro)q(cessor)g(Allo)s(cation)h(and)f(Con)o(trol)g(facilit)q(y)g(for) g(Mac)o(h)g(supp)r(orts)g(dedication)i(of)0 1343 y(pro)q(cessors)h(to)g(indiv\ idual)k(applications)e(and)e(\014ner)h(con)o(trol)g(o)n(v)o(er)f(the)h(use)g (of)f(pro)q(cessing)h(resources)g(within)0 1400 y(an)c(application,)h(if)f (needed.)21 b(This)13 b(facility)g(ac)n(hieves)g(an)g(unprecedented)g(degree) g(of)f(\015exibili)q(t)q(y)h(in)g(supp)r(orting)0 1456 y(di\013erent)k(progra\ mming)g(mo)q(dels,)i(sc)o(heduling)h(p)q(olicies,)g(and)e(m)o(ultipro)r(cesso\ r)g(arc)n(hitectures;)i(part)d(of)g(this)0 1512 y(is)f(due)g(to)e(a)h(success\ ful)i(application)g(of)e(p)q(olicy)i(mec)o(hanism)e(separation)h(to)e(m)o(ult\ ipro)r(cessor)h(sc)o(heduling.)22 b(In)0 1569 y(addition,)15 b(the)e(Mac)o (h)h(timesharing)g(sc)o(heduler)h(has)e(b)r(een)h(redesigned)h(to)e(ac)o(hiev\ e)g(a)h(b)q(etter)f(matc)n(h)h(with)g(m)o(ul-)0 1625 y(tipro)q(cessor)h(hardw) o(are;)f(this)i(includes)h(a)e(new)g(timestamp-based)h(usage)f(timing)g(subsy\ stem)h(that)e(impro)o(v)o(es)0 1682 y(timing)i(precision)h(and)e(accuracy)g (b)o(y)g(sev)o(eral)h(orders)f(of)f(magnitude.)71 1738 y(In)19 b(the)g(area)f (of)g(memory)h(managemen)n(t,)g(this)g(researc)o(h)g(has)g(dev)o(elop)r(ed)g (new)g(algorithms)g(for)f(NUMA)0 1795 y(memory)f(managemen)o(t)h(and)g(pionee\ red)h(the)f(use)g(of)g(comp)q(etitive)g(algorithms)g(for)f(suc)o(h)h(problems\ .)29 b(Com-)0 1851 y(p)r(etitiv)o(e)20 b(algorithms)g(are)f(on-line)j(algorit\ hms)d(whose)h(p)q(erformance)g(is)g(alw)o(a)n(ys)g(within)h(a)e(small)i(const\ an)n(t)0 1908 y(factor)c(b)q(ound)i(of)e(the)h(optimal)g(o\013-line)h(solutio\ n,)g(ev)o(en)f(though)g(the)g(latter)g(has)f(the)h(adv)n(an)n(tage)f(of)h(see\ ing)0 1964 y(all)d(future)f(ev)o(en)o(ts)g(when)g(making)h(its)f(decisions.) 21 b(The)14 b(migration)g(and)h(replication)g(algorithms)f(discussed)i(in)0 2021 y(this)d(thesis)h(are)e(imp)r(ortan)n(t)h(con)o(tributions)g(to)g(the)g (\014eld)h(of)e(comp)r(etitiv)o(e)h(algorithms)g(in)h(their)f(o)o(wn)g(righ)o (t;)g(the)0 2077 y(migration)k(algorithms)h(are)f(the)g(\014rst)h(comp)q(etit\ iv)o(e)g(solutions)g(to)f(the)g fk(1-server)i(with)g(excursions)d fn(problem,) 0 2133 y(and)i(this)h(w)o(ork)f(also)g(pro)n(v)o(es)g(a)g(tigh)o(t)g(lo)o(w)o (er-b)r(ound)g(result)h(for)f(that)f(problem.)30 b(Implemen)q(tation)18 b(of) g(these)0 2190 y(algorithms)c(requires)h(hardw)o(are)f(supp)r(ort)g(that)f (is)i(not)f(present)g(in)h(the)f(curren)o(t)g(generation)h(of)f(NUMA)g(m)o (ul-)0 2246 y(tipro)q(cessors,)g(but)g(a)g(feasibilit)q(y)g(study)g(indicates) h(that)e(Mac)o(h)h(should)h(ha)n(v)o(e)f(no)g(further)g(di\016culties)i(in)f (using)0 2303 y(these)g(algorithms.)71 2359 y(This)f(researc)o(h)g(has)f(made) h(imp)r(ortan)n(t)g(con)o(tributions)g(to)f(b)r(oth)g(the)h(principles)j(and) d(practice)g(of)g(resource)0 2416 y(managemen)o(t)19 b(for)g(m)o(ultipro)r (cessors)h(and)f(unipro)s(cessors.)33 b(The)20 b(new)g(tec)o(hniques)h(dev)o (elop)r(ed)g(here)f(should)0 2472 y(mak)n(e)c(it)f(easier)h(to)f(ac)o(hiev)o (e)h(e\016cient)f(and)h(e\013ectiv)o(e)f(use)h(of)f(m)n(ultipro)s(cessor)g (systems.)20 b(Ongoing)c(c)o(hanges)f(in)0 2529 y(b)r(oth)f(m)o(ultipro)r(ces\ sor)h(arc)n(hitectures)h(\(e.g.,)e(the)h(increasing)i(sophistication)f(of)f (no)g(remote)f(memory)h(access,)0 2585 y(or)d(NORMA)h(systems\))e(and)i(appli\ cations)h(\(e.g.,)d(sc)o(heduling)j(at)e(b)r(oth)g(the)g(system)g(and)g(appli\ cation)i(levels)f(in)0 2642 y(dual)i(concurrent)f(programming)g(mo)q(dels\))h (con)o(tinue)g(to)f(p)q(ose)h(new)g(and)g(in)o(teresting)g(resource)g(managem\ en)n(t)0 2698 y(c)o(hallenges.)28 b(This)18 b(author)f(lo)r(oks)g(forw)n(ard) g(to)g(the)h(ev)o(olution)g(of)f(the)h(tec)o(hniques)h(dev)o(elop)r(ed)f(here) g(and)g(the)0 2754 y(dev)o(elopment)d(of)g(new)g(ones)g(to)g(meet)g(these)g (c)o(hallenges.)p eop %%Page: 85 96 bop 0 506 a ff(App)s(endix)34 b(A)0 714 y fi(Mac)m(h)39 b(Pro)s(cessor)h(All\ o)6 b(cation)40 b(In)m(terface)0 936 y fn(This)15 b(app)q(endix)h(describ)s (es)e(the)g(k)o(ernel)h(interface)f(for)g(pro)q(cessor)g(allo)r(cation.)20 b (These)14 b(primitiv)q(es)g(are)g(used)h(b)o(y)0 993 y(applications)g(and)e (allo)r(cation)g(serv)o(ers)g(to)f(p)r(erform)g(pro)q(cessor)h(allo)r(cation.) 19 b(The)13 b(primitiv)q(es)g(are)g(divided)i(in)o(to)0 1049 y(groups)e(based) h(on)g(the)f(ob)s(jects)g(they)h(manipulate.)21 b(Only)14 b(the)g(routines)g (to)f(get)g(the)h(host)f(p)r(orts)f(are)i(traps;)f(all)0 1106 y(other)i(primi\ tives)g(are)g(implemen)q(ted)g(b)o(y)g(a)g(remote)g(pro)q(cedure)h(call)g(mes\ sage)f(exc)o(hange)g(with)h(the)f(k)o(ernel.)0 1249 y fe(A.1)69 b(Host)23 b (Op)r(erations)0 1352 y fj(A.1.1)56 b(Get)18 b(Host)g(P)o(ort:)24 b(host)s 17 2 v 17 w(self)18 b(and)h(host)t 17 2 v 17 w(priv)r 17 2 v 17 w(self)0 1438 y fa(host_t)k(host_self\(\);)0 1551 y(host_priv_t)46 b(host_priv_self\(\);)71 1657 y fk(Host)r 14 2 v 14 w(self)19 b fn(and)i fk(host)s 14 2 v 14 w(priv)s 14 2 v 14 w(self)e fn(are)h(traps)g(that)g(return)g(the)g(host)g(p)r(ort)f (and)i(privileged)h(host)e(p)r(ort)f(for)0 1714 y(the)f(curren)o(t)g(host.)27 b(The)18 b(host)f(p)r(ort)g(is)h(used)h(to)e(identify)h(and)g(obtain)g(inform\ ation)g(ab)q(out)f(the)h(host.)28 b(The)0 1770 y(privileged)19 b(host)d(p)r (ort)f(is)j(used)f(to)f(con)o(trol)g(the)h(ph)o(ysical)h(resources)f(on)f(the) h(host,)f(in)i(particular,)f(it)g(is)g(used)0 1827 y(to)d(obtain)h(the)g(pro) q(cessor)f(con)o(trol)g(p)r(orts)g(that)f(allow)h(pro)q(cessors)h(to)f(b)q (e)h(assigned.)20 b fk(Host)s 14 2 v 14 w(priv)s 14 2 v 14 w(self)13 b fn(cur\ rently)0 1883 y(uses)j(Unix)g(authen)o(tication;)g(it)g(will)h(return)e(the)h (n)o(ull)h(p)q(ort)e(if)h(the)f(inv)o(ok)n(er)g(do)r(es)g(not)g(ha)o(v)o(e)g (the)h(privileges)h(of)0 1939 y(the)e(Unix)h(sup)r(er-user.)71 1996 y(Both)g (of)f(these)i(traps)e(are)h(slated)h(to)f(v)m(anish)h(in)g(future)f(v)o(ersio\ ns)h(of)f(Mac)n(h.)23 b(The)16 b fk(host)s 14 2 v 14 w(self)g fn(trap)f(will) j(b)r(e)0 2052 y(replaced)f(b)o(y)e(an)g(extension)i(of)e fk(task)r 14 2 v 14 w(get)s 14 2 v 14 w(sp)m(e)n(cial)r 14 2 v 14 w(p)n(ort)h fn(to)f(return)g (the)h(host)f(p)q(ort.)20 b(This)c(allo)o(ws)f(interp)q(osition)0 2109 y(on) 21 b(the)f(host)h(p)q(ort)f(on)h(a)f(p)r(er-task)g(basis)h(\(e.g.,)e(for)h (debugging)i(applications)g(and)f(serv)o(ers)f(that)g(use)h(it\).)0 2165 y fk (Host)r 14 2 v 14 w(priv)s 14 2 v 14 w(self)e fn(will)h(b)r(e)f(replaced)h (b)o(y)f(a)g(mec)o(hanism)h(that)e(inserts)i(the)f(privileged)j(host)c(p)r (ort)g(in)i(the)f(p)r(ort)0 2222 y(space)j(of)g(the)g(\014rst)g(task)f(to)h (b)q(e)h(run)f(on)g(the)g(host)g(as)f(part)h(of)g(the)g(b)q(o)q(ot)g(sequence\ ;)k(that)c(task)f(is)h(then)0 2278 y(resp)q(onsible)17 b(for)e(implemen)q(tin\ g)g(the)h(appropriate)f(authen)o(tication)h(functionality)g(to)e(restrict)i (access)f(to)g(the)0 2335 y(p)r(ort.)0 2456 y fj(A.1.2)56 b(Get)18 b(Pro)q (cessor)h(Con)o(trol)f(P)n(orts:)25 b(host)s 17 2 v 17 w(pro)q(cessors)0 2542 y fa(kern_return_t)0 2599 y(host_processors\(host_priv,)20 b(processor_list,) i(processor_count\))191 2655 y(host_priv_t)165 b(host_priv;)191 2712 y(proces\ sor_array_t)21 b(*processor_list;)h(/*)i(out,)f(pointer)g(to)h(list)f(*/)191 2768 y(int)357 b(*processor_count;)22 b(/*)i(out)f(*/)951 2927 y fn(85)p eop %%Page: 86 97 bop 0 50 a fg(APPENDIX)15 b(A.)30 b(MA)o(CH)15 b(PR)o(OCESSOR)i(ALLOCA)m(TIO\ N)f(INTERF)-5 b(A)o(CE)517 b fn(86)71 195 y fk(Host)r 14 2 v 14 w(pr)n(o)n (c)n(essors)15 b fn(obtains)i(the)g(con)o(trol)f(p)r(orts)f(for)h(all)i(pro)q (cessors)e(on)h(a)f(host.)24 b(The)17 b(p)q(orts)f(are)g(returned)0 252 y(in) k(an)e(arra)n(y)l(,)h(but)g(the)g(p)q(osition)h(of)e(eac)o(h)h(p)q(ort)f(in)h (the)g(arra)n(y)g(ma)n(y)g(not)f(corresp)q(ond)h(to)f(an)o(y)g(arc)o(hitectur\ al)0 308 y(feature)f(of)g(the)h(mac)n(hine)h(\(e.g.,)d(slot)h(n)o(um)o(b)q (ers\).)26 b fk(Pr)n(o)n(c)n(essor)r 14 2 v 14 w(info)17 b fn(should)h(b)r (e)f(used)h(to)f(obtain)h(information)0 364 y(ab)q(out)c(the)g(pro)q(cessors) f(represented)h(b)n(y)g(the)g(p)r(orts.)k(The)c(p)r(orts)f(are)g(returned)i (in)f(newly)h(allo)r(cated)f(memory;)0 421 y(the)j(caller)h(ma)n(y)f(wish)g (to)f(deallo)s(cate)g(it)h(when)h(the)f(data)f(is)h(no)g(longer)g(needed.)26 b (The)17 b(privileged)i(host)d(p)r(ort)0 477 y(from)e fk(host)s 14 2 v 14 w (priv)s 14 2 v 14 w(self)h fn(m)n(ust)g(b)r(e)g(used.)0 597 y fj(A.1.3)56 b (Obtain)18 b(Host)h(Information:)k(host)s 17 2 v 17 w(info)0 682 y fa(kern_re\ turn_t)f(host_info\(host,)g(flavor,)h(info,)g(count\))191 739 y(host_t)309 b (host;)191 795 y(int)381 b(flavor;)191 852 y(host_info_t)189 b(info;)310 b (/*)23 b(in)h(and)f(out)h(*/)191 908 y(unsigned)f(int)166 b(*count;)262 b(/*) 23 b(in)h(and)f(out)h(*/)71 996 y fk(Host)r 14 2 v 14 w(info)15 b fn(returns) h(information)f(ab)r(out)g(the)h(host.)k(Either)c(the)g(host)f(p)r(ort)f(or)h (the)h(privileged)i(host)d(p)r(ort)0 1053 y(ma)n(y)h(b)r(e)g(used.)23 b(Three) 16 b(\015a)o(v)n(ors)g(of)f(information)h(are)g(curren)o(tly)g(supp)r(orted:) 21 b(basic)c(information,)f(sc)o(heduling)0 1109 y(information,)f(and)g(activ) o(e)h(pro)q(cessor)f(slots.)71 1166 y(Basic)g(information)h(is)f(de\014ned)i (b)o(y)e(the)g(following)g(structure:)72 1246 y fa(struct)23 b(host_basic_inf\ o)e({)191 1303 y(int)310 b(max_cpus;)166 b(/*)23 b(maximum)g(possible)g(cpus) g(for)1026 1359 y(this)g(kernel)g(*/)191 1416 y(int)310 b(avail_cpus;)118 b (/*)23 b(number)g(of)h(cpus)f(available)g(*/)191 1472 y(vm_size_t)166 b(memor\ y_size;)94 b(/*)23 b(size)g(of)h(memory)f(in)h(bytes)f(*/)191 1529 y(cpu_type\ _t)142 b(cpu_type;)166 b(/*)23 b(cpu)h(type)f(*/)191 1585 y(cpu_subtype_t)70 b (cpu_subtype;)94 b(/*)23 b(cpu)h(subtype)e(*/)72 1642 y(};)0 1722 y fn(The)15 b(de\014nitions)i(for)e(the)g(cpu)h(t)o(yp)q(e)f(and)h(subt)o(yp)q(e)f(are)g (con)o(tained)h(in)g(the)f(\014le)i fa()p fn(.)71 1779 y(Sc)o (heduling)g(information)e(is)h(de\014ned)h(b)o(y)e(the)g(follo)o(wing)h(struc\ ture:)0 1859 y fa(struct)23 b(host_sched_info)f({)191 1916 y(int)310 b(min_ti\ meout;)94 b(/*)23 b(minimum)g(timeout)g(*/)191 1972 y(int)310 b(min_quantum;) 94 b(/*)23 b(minimum)g(quantum)g(*/)0 2029 y(};)0 2110 y fn(Milliseconds)d (are)e(used)g(as)f(the)h(units)g(for)g(these)f(quan)o(tities)i(to)e(corresp)q (ond)h(to)f(the)h(timeout)f(interface)g(for)0 2166 y(IPC.)71 2222 y(The)h(act\ iv)o(e)g(pro)q(cessor)g(slots)g(\015a)o(v)n(or)g(returns)g(a)g(list)h(of)e (the)i(slot)f(n)o(um)o(b)q(ers)g(of)g(the)g(pro)q(cessors)g(that)f(are)0 2279 y(curren)o(tly)f(activ)o(e)f(\(on)g(line\))h(for)f(this)h(host.)71 2335 y(The) d(introduction)i(of)e(m)o(ultiple)j(\015a)n(v)o(ors)d(represents)g(a)g(c)o (hange)h(to)f(the)g(calling)j(sequence)e(of)g(the)f fk(host)s 14 2 v 14 w(inf\ o)0 2392 y fn(call)18 b(in)f(previous)h(k)o(ernels,)f(but)g(a)g(new)g(call)h (n)o(um)n(b)r(er)f(has)f(b)r(een)h(used)h(so)e(that)g(old)h(programs)f(will)i (con)o(tin)o(ue)0 2448 y(to)d(w)n(ork.)21 b(This)16 b(call)h(can)e(b)r(e)g (extended)i(with)f(mac)n(hine-dep)t(endent)f(\015a)o(v)n(ors)g(to)g(return)h (imp)r(ortan)n(t)f(mac)n(hine-)0 2505 y(dep)r(endent)g(con\014guration)g(info\ rmation.)0 2624 y fj(A.1.4)56 b(Obtain)18 b(Kernel)f(V)l(ersion:)24 b(host)s 17 2 v 17 w(k)n(ernel)r 17 2 v 17 w(v)n(ersion)0 2710 y fa(kern_return_t)e (host_kernel_version\(host,ve)o(rsion\))191 2766 y(host_t)429 b(host;)191 2823 y(kernel_version_t)189 b(*version;)p eop %%Page: 87 98 bop 0 50 a fg(APPENDIX)15 b(A.)30 b(MA)o(CH)15 b(PR)o(OCESSOR)i(ALLOCA)m(TIO\ N)f(INTERF)-5 b(A)o(CE)517 b fn(87)71 195 y fk(Host)r 14 2 v 14 w(kernel)r 14 2 v 14 w(version)12 b fn(returns)h(the)f(v)o(ersion)h(string)g(for)f(the)h (k)o(ernel)h(executing)g(on)f(the)f(given)h(host.)18 b(Either)0 252 y(the)f (host)f(p)r(ort)f(or)i(the)f(privileged)j(host)e(p)q(ort)f(ma)n(y)h(b)r(e)f (used.)25 b(Exp)r(erience)18 b(indicates)g(that)e(this)h(is)g(the)g(only)0 308 y(reliable)g(w)o(a)n(y)e(to)g(determine)h(what's)e(actually)i(running;)g(v)o (ersion)g(n)o(um)o(b)q(ers)f(are)g(inadequate.)0 427 y fj(A.1.5)56 b(Obtain) 18 b(List)g(of)h(Pro)r(cessor)f(Sets:)24 b(host)s 17 2 v 17 w(pro)r(cessor)s 17 2 v 16 w(sets)0 513 y fa(kern_return_t)0 569 y(host_processor_sets\(host,) c(processor_set_name_list,)h(processor_set_count\))95 626 y(host_t)381 b(host\ ;)95 682 y(processor_set_name_array_t)21 b(*processor_set_list;)g(/*)i(out,)h (ptr)f(to)h(array)f(*/)95 739 y(int)453 b(*processor_set_count;)188 b(/*)24 b (out)g(*/)71 826 y fk(Host)r 14 2 v 14 w(pr)n(o)n(c)n(essor)r 14 2 v 14 w(set\ s)12 b fn(returns)h(a)g(list)h(of)f(the)h(pro)q(cessor)f(sets)g(that)f(curren) o(tly)i(exist)g(on)f(the)g(sp)r(eci\014ed)i(host.)0 882 y(The)i(sets)f(are)g (identi\014ed)h(b)o(y)f(their)h(name)f(p)r(orts.)22 b(Either)17 b(the)f(host) g(p)r(ort)f(or)h(the)g(privileged)j(host)d(p)q(ort)g(ma)n(y)0 939 y(b)r(e)i (used.)28 b(This)19 b(list)f(is)h(returned)f(in)h(an)f(arra)n(y)g(that)f(is)h (created)g(as)g(a)f(result)i(of)e(the)h(call.)29 b(The)18 b(caller)i(ma)n(y)0 995 y(wish)c(to)e(deallo)s(cate)h(it)g(when)h(the)f(data)g(is)g(no)h(longer)f (needed.)0 1136 y fe(A.2)69 b(Pro)s(cessor)23 b(Op)q(erations)0 1239 y fj(A.2\ .1)56 b(Obtain)18 b(Information:)23 b(pro)r(cessor)s 17 2 v 16 w(info)0 1325 y fa(kern_return_t)0 1381 y(processor_info\(processor,)d(flavor,)j(host,)h(proc\ essor_info,)d(count\))191 1437 y(processor_t)189 b(processor;)191 1494 y(int) 381 b(flavor;)191 1550 y(host_t)309 b(*host;)286 b(/*)23 b(out)h(*/)191 1607 y (processor_info_t)69 b(processor_info;)h(/*)23 b(in)h(and)f(out)h(*/)191 1663 y(int)381 b(*count;)262 b(/*)23 b(in)h(and)f(out)h(*/)0 1750 y fk(Pr)n(o)n (c)m(essor)r 14 2 v 14 w(info)15 b fn(returns)f(information)h(ab)q(out)f(a)h (pro)q(cessor,)f(including)j(the)e(host)f(to)g(which)h(it)g(b)q(elongs.)20 b (This)0 1807 y(is)f(the)f(ordinary)h(host)f(p)q(ort,)g(not)g(the)h(privileged) h(host)e(p)r(ort.)28 b(Only)20 b(one)e(mac)o(hine-indep)t(endent)g(\015a)o (v)n(or)g(of)0 1863 y(information)d(is)h(de\014ned:)0 1943 y fa(struct)23 b (processor_basic_info)e({)191 1999 y(cpu_type_t)142 b(cpu_type;)166 b(/*)23 b (cpu)h(type)f(*/)191 2056 y(cpu_subtype_t)70 b(cpu_subtype;)94 b(/*)23 b(cpu) h(subtype)e(*/)191 2112 y(boolean_t)166 b(running;)190 b(/*)23 b(is)h(process\ or)e(running?)h(*/)191 2169 y(int)310 b(slot_num;)166 b(/*)23 b(slot)g(number) g(*/)191 2225 y(boolean_t)166 b(is_master;)142 b(/*)23 b(is)h(processor)e(the) i(master?)f(*/)0 2282 y(};)0 2362 y fn(Mac)n(hine-dep)t(endent)18 b(\015a)o (v)o(ors)g(can)h(b)q(e)h(de\014ned)g(to)e(return)h(additional)h(mac)o(hine-de\ p)s(endent)f(con\014guration)0 2418 y(information.)0 2537 y fj(A.2.2)56 b(Sta\ rt)18 b(Pro)r(cessor:)24 b(pro)q(cessor)s 17 2 v 17 w(start)0 2623 y fa(kern_\ return_t)e(processor_start\(processor\))191 2679 y(processor_t)189 b(processo\ r;)71 2766 y fk(Pr)m(o)n(c)n(essor)r 14 2 v 14 w(start)18 b fn(starts)f(the)h (sp)r(eci\014ed)h(pro)q(cessor.)29 b(Supp)r(ort)17 b(for)h(this)g(call)i(is)e (mac)o(hine-dep)s(endent;)h(on)0 2823 y(mac)o(hines)d(that)e(do)i(not)e(supp) r(ort)h(it,)g(nothing)g(happ)r(ens.)p eop %%Page: 88 99 bop 0 50 a fg(APPENDIX)15 b(A.)30 b(MA)o(CH)15 b(PR)o(OCESSOR)i(ALLOCA)m(TIO\ N)f(INTERF)-5 b(A)o(CE)517 b fn(88)0 195 y fj(A.2.3)56 b(Stop)18 b(Pro)r(cess\ or:)24 b(pro)r(cessor)s 17 2 v 16 w(exit)0 281 y fa(kern_return_t)e(processor\ _exit\(processor\))191 337 y(processor_t)189 b(processor;)71 444 y fk(Pr)m (o)n(c)n(essor)r 14 2 v 14 w(exit)17 b fn(exits)h(a)f(pro)q(cessor)g(from)f (the)i(system.)25 b(Supp)s(ort)16 b(for)h(this)g(call)i(is)f(mac)n(hine-dep)t (endent,)0 500 y(as)d(is)h(the)f(ability)g(to)g(restart)f(an)h(exited)h(pro)q (cessor.)0 622 y fj(A.2.4)56 b(Miscellaneous:)23 b(pro)q(cessor)s 17 2 v 17 w (con)o(trol)0 708 y fa(kern_return_t)f(processor_control\(processor)o(,)f(com\ mand,)i(count\))191 764 y(processor_t)189 b(processor;)191 821 y(int)381 b (*command;)190 b(/*)24 b(array)f(of)g(ints)h(*/)191 877 y(int)381 b(count;)g (/*)24 b(length)f(of)h(array)f(*/)71 983 y fk(Pr)m(o)n(c)n(essor)r 14 2 v 14 w (c)n(ontr)m(ol)e fn(issues)g(the)f(sp)r(eci\014ed)i(command)e(to)g(the)h(sp)q (eci\014ed)h(pro)q(cessor.)36 b(In)o(terpretation)20 b(of)0 1040 y(this)f(com\ mand)g(is)g(mac)o(hine-dep)s(endent.)31 b(This)19 b(routine)g(is)h(useful)f (for)g(p)q(erforming)g(console)g(functions)h(on)0 1096 y(m)o(ultipro)r(cessor\ s)15 b(that)f(ha)o(v)o(e)h(one)g(logical)i(console)f(p)q(er)f(pro)q(cessor)g (rather)g(than)g(a)g(single)h(system)f(console.)0 1239 y fe(A.3)69 b(Pro)s (cessor)23 b(Set)f(Op)r(erations)0 1343 y fj(A.3.1)56 b(Creation:)24 b(pro)q (cessor)s 17 2 v 17 w(set)s 17 2 v 17 w(create)0 1428 y fa(kern_return_t)e (processor_set_create\(host,)e(new_set,)j(new_name\))191 1485 y(host_t)452 b (host;)191 1541 y(processor_set_t)236 b(*new_set;)191 1598 y(processor_set_na\ me_t)116 b(*new_name;)71 1704 y fk(Pr)m(o)n(c)n(essor)r 14 2 v 14 w(set)r 14 2 v 14 w(cr)n(e)n(ate)14 b fn(creates)f(a)h(new)g(pro)q(cessor)f(set)h(on)g(the) g(sp)q(eci\014ed)i(host)d(and)h(returns)g(the)g(t)n(w)o(o)f(p)r(orts)0 1760 y (asso)q(ciated)f(with)h(it.)19 b(The)12 b(p)q(ort)g(returned)g(in)h fk(new)r 14 2 v 14 w(set)f fn(is)g(the)g(actual)g(p)r(ort)f(represen)o(ting)i(the)f (set.)18 b(It)12 b(is)h(used)f(to)0 1817 y(p)r(erform)g(op)q(erations)h(suc)o (h)h(as)f(assigning)h(pro)q(cessors,)f(tasks,)f(or)h(threads.)19 b(The)13 b (p)r(ort)f(returned)i(in)g fk(new)r 14 2 v 14 w(name)0 1873 y fn(identi\014es) i(the)g(set,)f(and)h(is)g(used)g(to)f(obtain)h(information)f(ab)q(out)h(the)f (set.)21 b(Usually)c(the)e(ordinary)h(host)f(p)r(ort)0 1930 y(will)i(b)q(e)f (used,)f(but)g(the)h(privileged)h(host)e(p)q(ort)g(is)h(also)f(accepted.)0 2051 y fj(A.3.2)56 b(Destruction:)23 b(pro)q(cessor)s 17 2 v 17 w(set)s 17 2 v 17 w(destro)n(y)0 2137 y fa(kern_return_t)f(processor_set_destroy\(proce)o (ssor_se)o(t\))191 2194 y(processor_set_t)380 b(processor_set;)71 2300 y fk (Pr)m(o)n(c)n(essor)r 14 2 v 14 w(set)r 14 2 v 14 w(destr)n(oy)19 b fn(destro) n(ys)g(the)g(sp)q(eci\014ed)h(pro)q(cessor)f(set.)30 b(An)o(y)19 b(assigned)g (pro)q(cessors,)g(tasks,)f(or)0 2356 y(threads)c(are)g(reassigned)g(to)g(the) g(default)h(set.)k(The)14 b(ob)s(ject)g(p)q(ort)f(for)h(the)g(pro)q(cessor)g (set)g(is)g(required)h(\(not)f(the)0 2413 y(name)h(p)r(ort\).)j(The)e(default) g(pro)q(cessor)f(set)g(cannot)g(b)q(e)g(destro)o(y)o(ed.)0 2535 y fj(A.3.3)56 b(Iden)n(tify)17 b(Default)h(Set:)24 b(pro)r(cessor)s 17 2 v 17 w(set)s 17 2 v 16 w(default)0 2620 y fa(kern_return_t)e(processor_set_default\(host,)e(defau\ lt_set\))191 2677 y(host_t)357 b(host;)191 2733 y(processor_set_t)141 b(*defa\ ult_set;)p eop %%Page: 89 100 bop 0 50 a fg(APPENDIX)15 b(A.)30 b(MA)o(CH)15 b(PR)o(OCESSOR)i(ALLOCA)m(TIO\ N)f(INTERF)-5 b(A)o(CE)517 b fn(89)71 195 y(The)18 b(default)g(pro)q(cessor)f (set)h(is)g(used)g(b)o(y)g(all)h(threads,)f(tasks,)f(and)h(pro)q(cessors)f (that)g(are)h(not)f(explicitly)0 252 y(assigned)e(to)f(other)g(sets.)20 b fk (Pr)n(o)m(c)n(essor)r 14 2 v 14 w(set)s 14 2 v 14 w(default)15 b fn(returns)f (a)g(p)r(ort)g(that)g(can)g(b)r(e)h(used)g(to)f(obtain)h(information)0 308 y (ab)q(out)i(this)h(set)f(\(e.g.,)f(ho)o(w)h(man)n(y)g(threads)h(are)f(assigne\ d)h(to)e(it\).)26 b(This)18 b(p)r(ort)e(cannot)h(b)r(e)g(used)h(to)f(p)r(erfo\ rm)0 364 y(op)q(erations)e(on)g(that)g(set.)0 483 y fj(A.3.4)56 b(Obtain)18 b (Information:)23 b(pro)r(cessor)s 17 2 v 16 w(set)s 17 2 v 17 w(info)0 569 y fa(kern_return_t)0 625 y(processor_set_info\(process)o(or_set,)d(flavor,)j (host,)g(info,)h(count\))191 682 y(processor_set_t)165 b(processor_set;)191 738 y(int)453 b(flavor;)191 795 y(host_t)381 b(*host;)191 851 y(processor_set\ _info_t)45 b(info;)166 b(/*)24 b(in)f(and)h(out)f(*/)191 907 y(int)453 b(*cou\ nt;)118 b(/*)24 b(in)f(and)h(out)f(*/)71 989 y fk(Pr)m(o)n(c)n(essor)r 14 2 v 14 w(set)r 14 2 v 14 w(info)d fn(returns)g(the)h(requested)g(information)f (\(sp)q(eci\014ed)i(b)o(y)f(the)f fk(\015avor)h fn(argumen)n(t)f(for)g(a)0 1046 y(pro)q(cessor)c(set.)23 b(Either)17 b(the)g(pro)q(cessor)f(set's)g(name) g(p)q(ort)g(or)g(ob)r(ject)h(p)q(ort)f(ma)n(y)g(b)r(e)g(used)h(for)f(this)h (call.)25 b(The)0 1102 y fk(info)18 b fn(structure)g(is)h(an)g(arra)n(y)f(of) g(integers)g(that)f(is)i(supplied)i(b)o(y)e(the)f(caller)i(and)f(\014lled)h (with)f(the)f(requested)0 1159 y(information.)i fk(c)n(ount)15 b fn(sp)q(eci\ \014es)i(the)e(size)h(of)f(the)g(arra)n(y)g(and)h(returns)f(the)g(size)h(of)f (the)g(pro)o(vided)h(information.)71 1215 y(Basic)f(information)h(is)f(de\014\ ned)i(b)o(y)e(the)g(following)g(structure:)0 1291 y fa(struct)23 b(processor_\ set_basic_info)e({)191 1348 y(int)381 b(processor_count;)22 b(/*)i(number)f (of)g(processors)g(*/)191 1404 y(int)381 b(task_count;)142 b(/*)24 b(number)f (of)g(tasks)g(*/)191 1461 y(int)381 b(thread_count;)94 b(/*)24 b(number)f(of) g(threads)g(*/)191 1517 y(int)381 b(load_average;)94 b(/*)24 b(scaled)f(load) g(average)g(*/)191 1574 y(int)381 b(mach_factor;)118 b(/*)24 b(scaled)f(mach) g(factor)g(*/)0 1630 y(};)0 1707 y fn(The)e(load)h(a)o(v)n(erage)f(is)h(the)f (a)o(v)n(erage)g(n)o(um)o(b)r(er)g(of)g(runnable)h(threads.)38 b(The)22 b(mac) n(h)g(factor)e(is)i(the)f(a)n(v)o(erage)0 1763 y(n)o(um)o(b)q(er)c(of)e(idle) j(pro)q(cessors.)23 b(Both)16 b(are)g(scaled)h(b)o(y)g(the)f(constan)n(t)g fa (LOAD)s 15 2 v 14 w(FACTOR)f fn(\(e.g.,)g(if)i(the)f(actual)h(v)m(alue)0 1819 y(is)f(1,)e(the)h(integer)g(v)m(alue)h(returned)g(is)g fa(LOAD)r 15 2 v 14 w (FACTOR)p fn(\).)71 1876 y(Additional)h(sc)n(heduling)h(information)d(is)h (de\014ned)g(b)o(y)g(the)f(follo)o(wing)h(structure:)0 1952 y fa(struct)23 b (processor_set_sched_info)e({)191 2009 y(int)310 b(policies;)166 b(/*)23 b (allowed)g(policies)g(*/)191 2065 y(int)310 b(max_priority;)70 b(/*)23 b(max) h(priority)46 b(*/)0 2122 y(};)0 2198 y fn(The)15 b fk(p)n(olicies)g fn(\014e\ ld)h(is)g(a)f(bit)g(mask)g(of)g(the)g(p)r(olicies)i(allo)o(w)o(ed)e(b)o(y)g (the)h(pro)q(cessor)f(set.)0 2316 y fj(A.3.5)56 b(Get)18 b(List)f(of)i(T)l (asks:)24 b(pro)r(cessor)s 17 2 v 16 w(set)s 17 2 v 17 w(tasks)0 2402 y fa (kern_return_t)e(processor_set_tasks\(process)o(or_set,)e(task_list,)j(task_c\ ount\))191 2459 y(processor_set_t)69 b(processor_set;)191 2515 y(task_array_t) 141 b(*task_list;)94 b(/*)24 b(out,)f(ptr)h(to)f(array)h(*/)191 2572 y(int) 357 b(*task_count;)70 b(/*)24 b(out)f(*/)71 2653 y fk(Pr)m(o)n(c)n(essor)r 14 2 v 14 w(set)r 14 2 v 14 w(tasks)12 b fn(returns)f(a)h(list)h(of)e(tasks)h (curren)o(tly)g(assigned)h(to)e(the)h(sp)q(eci\014ed)i(pro)q(cessor)e(set.)18 b(T)l(asks)0 2710 y(are)g(identi\014ed)g(b)o(y)g(their)h(k)n(ernel)g(p)r(ort.) 27 b(The)18 b(arra)n(y)g(of)f(tasks)g(is)h(created)g(as)g(a)f(result)i(of)e (this)h(call,)i(and)e(the)0 2766 y(caller)j(ma)n(y)e(wish)h(to)f(deallo)s(cat\ e)g(it)h(when)f(the)h(information)g(is)g(no)f(longer)h(needed.)34 b(The)19 b (pro)q(cessor)h(set's)0 2823 y(ob)s(ject)15 b(p)q(ort)g(is)g(required)h(for)f (this)h(call.)p eop %%Page: 90 101 bop 0 50 a fg(APPENDIX)15 b(A.)30 b(MA)o(CH)15 b(PR)o(OCESSOR)i(ALLOCA)m(TIO\ N)f(INTERF)-5 b(A)o(CE)517 b fn(90)0 195 y fj(A.3.6)56 b(Get)18 b(List)f(of)i (Threads:)25 b(pro)q(cessor)s 17 2 v 17 w(set)s 17 2 v 17 w(threads)0 281 y fa (kern_return_t)0 337 y(processor_set_threads\(proc)o(essor_s)o(et,)c(thread_l\ ist,)h(thread_count\))191 394 y(processor_set_t)46 b(processor_set;)191 450 y (thread_array_t)70 b(*thread_list;)141 b(/*)24 b(out,)f(ptr)g(to)h(array)f (*/)191 507 y(int)334 b(*thread_count;)117 b(/*)24 b(out)f(*/)71 599 y fk(Pr) m(o)n(c)n(essor)r 14 2 v 14 w(set)r 14 2 v 14 w(thr)n(e)n(ads)15 b fn(returns) h(a)f(list)h(of)f(threads)g(currently)g(assigned)h(to)f(the)h(sp)q(eci\014ed) h(pro)q(cessor)e(set.)0 655 y(Threads)g(are)g(identi\014ed)h(b)o(y)f(their)h (k)o(ernel)g(p)q(ort.)j(The)d(arra)n(y)f(of)g(threads)g(is)g(created)g(as)g (a)g(result)h(of)e(this)i(call,)0 712 y(and)g(the)f(caller)i(ma)o(y)e(wish)h (to)f(deallo)s(cate)g(it)h(when)g(the)g(information)f(is)h(no)g(longer)g(need\ ed.)22 b(The)16 b(pro)q(cessor)0 768 y(set's)f(ob)r(ject)g(p)r(ort)f(is)i(req\ uired)g(for)f(this)g(call.)0 888 y fj(A.3.7)56 b(Get)18 b(Con)o(trol)g(P)n (ort:)25 b(host)s 17 2 v 17 w(pro)q(cessor)s 17 2 v 17 w(set)s 17 2 v 17 w (priv)0 974 y fa(kern_return_t)d(host_processor_set_priv\(hos)o(t_priv,)e(set\ _name,)j(set\))191 1030 y(host_priv_t)285 b(host_priv;)191 1087 y(processor_s\ et_name_t)69 b(set_name;)191 1143 y(processor_set_t)189 b(*set;)71 1235 y fk (Host)r 14 2 v 14 w(pr)n(o)n(c)n(essor)r 14 2 v 14 w(set)r 14 2 v 14 w(priv) 19 b fn(allo)o(ws)f(a)g(privileged)i(application)g(\(one)e(with)h(righ)o(ts)f (to)f(the)i(privileged)h(host)0 1292 y(p)r(ort\))13 b(to)i(obtain)g(the)g(con) o(trol)f(p)r(ort)g(for)g(a)h(pro)q(cessor)g(set)f(from)h(its)g(name)g(p)q(ort\ .)k(This)d(is)f(primarily)h(intended)0 1348 y(for)11 b(reco)o(v)n(ery)h(from) f(situations)h(in)g(which)g(an)f(application)i(has)f(b)q(een)h(susp)q(ended)g (b)r(ecause)f(all)g(of)f(its)h(pro)q(cessors)0 1404 y(ha)o(v)n(e)19 b(b)r(een) g(reassigned.)30 b(Obtaining)20 b(the)f(con)o(trol)f(p)r(ort)f(allows)h(the)h (pro)q(cessor)f(set)g(to)g(b)r(e)h(destro)n(y)o(ed,)g(or)f(a)0 1461 y(new)d (allo)r(cation)h(of)f(pro)q(cessors)f(to)h(b)r(e)g(requested)h(\(from)e(the)h (serv)o(er\).)0 1602 y fe(A.4)69 b(Execution)22 b(Con)n(trol)h(Op)r(erations) 0 1705 y fj(A.4.1)56 b(Pro)q(cessor)19 b(Assignmen)m(t:)24 b(pro)r(cessor)r 17 2 v 17 w(assign)0 1791 y fa(kern_return_t)e(processor_assign\(processor,)e (processor_set,)i(wait\))191 1848 y(processor_t)142 b(processor;)191 1904 y (processor_set_t)46 b(processor_set;)191 1961 y(boolean_t)190 b(wait;)71 2053 y fk(Pr)m(o)n(c)n(essor)r 14 2 v 14 w(assign)17 b fn(assigns)i(a)f(pro)r(cess\ or)g(to)g(a)g(pro)q(cessor)h(set.)30 b(After)18 b(this)h(assignmen)o(t,)g(the) g(pro)q(cessor)0 2109 y(only)e(executes)g(threads)f(assigned)g(to)g(the)g(set\ .)23 b(An)o(y)16 b(previous)h(assignmen)o(t)f(is)h(n)o(ulli\014ed.)26 b(A)16 b fk(wait)h fn(argumen)n(t)0 2165 y(of)i(TR)o(UE)f(causes)i(this)f(call)h(to)e (synchronize)i(with)f(the)g(sp)q(eci\014ed)i(pro)q(cessor)e(ceasing)g(to)g (execute)g(its)g(cur-)0 2222 y(ren)o(t)f(thread)h(if)g(that)f(thread)g(is)h (not)f(in)i(the)e(sp)r(eci\014ed)i(set.)30 b(Using)19 b(a)f(w)o(ait)g(argumen) o(t)g(of)g(F)-5 b(ALSE)19 b(p)r(ermits)0 2278 y(application-k)q(ernel)14 b (parallelism)g(to)f(b)q(e)g(exploited)i(b)q(ecause)e(the)g(k)o(ernel)h(uses)f (a)g(separate)f(internal)h(thread)g(\(or)0 2335 y(threads\))h(to)h(p)q(erform) f(pro)q(cessor)h(assignmen)o(t.)20 b(The)15 b(master)f(pro)q(cessor)h(cannot) f(b)r(e)h(reassigned.)20 b(It)15 b(remains)0 2391 y(assigned)21 b(to)e(the)h (default)g(pro)q(cessor)g(set)g(to)f(ensure)i(that)e(in)o(ternal)i(k)n(ernel) g(threads)f(and)g(imp)r(ortan)n(t)g(user)0 2448 y(daemons)15 b(can)h(b)q(e)g (run.)21 b(Redirection)c(of)e(device)i(interrupts)e(a)n(w)o(a)n(y)g(from)g (pro)q(cessors)g(assigned)h(to)f(sets)g(other)0 2504 y(than)g(the)g(default)h (set)f(is)h(mac)n(hine-dep)t(endent.)j(All)e(pro)q(cessors)e(tak)n(e)g(clo)r (c)o(k)g(interrupts)f(at)h(all)h(times.)0 2624 y fj(A.4.2)56 b(Obtain)18 b (Pro)r(cessor)g(Assignmen)m(t:)25 b(pro)q(cessor)s 17 2 v 17 w(get)s 17 2 v 16 w(assignmen)m(t)0 2710 y fa(kern_return_t)d(processor_get_assignment\(pr)o (ocessor)o(,)f(assigned_set_name\))191 2766 y(processor_t)237 b(processor;) 191 2823 y(processor_set_name_t)21 b(*assigned_set_name;)45 b(/*)24 b(out)f (*/)p eop %%Page: 91 102 bop 0 50 a fg(APPENDIX)15 b(A.)30 b(MA)o(CH)15 b(PR)o(OCESSOR)i(ALLOCA)m(TIO\ N)f(INTERF)-5 b(A)o(CE)517 b fn(91)71 195 y fk(Pr)m(o)n(c)n(essor)r 14 2 v 14 w(get)s 14 2 v 14 w(assignment)14 b fn(returns)i(the)h(name)f(p)r(ort)f(of)h (the)g(pro)q(cessor)g(set)g(to)g(whic)o(h)h(the)f(pro)q(cessor)g(is)0 252 y (curren)o(tly)g(assigned.)0 373 y fj(A.4.3)56 b(Thread)18 b(Assignmen)m(t:)25 b(thread)s 17 2 v 16 w(assign)0 459 y fa(kern_return_t)d(thread_assign\(threa\ d,)f(processor_set\))191 516 y(thread_t)190 b(thread;)191 572 y(processor_set\ _t)22 b(processor_set;)71 678 y fk(Thr)m(e)n(ad)s 14 2 v 14 w(assign)15 b fn (assigns)h(a)g(thread)h(to)e(a)h(pro)q(cessor)h(set.)23 b(After)16 b(assignme\ n)o(t,)g(the)g(thread)g(only)h(executes)0 735 y(on)i(pro)q(cessors)f(assigned) i(to)e(that)g(set.)30 b(An)o(y)19 b(previous)g(assignment)f(is)h(n)o(ulli\014\ ed.)34 b(This)19 b(call)h(sync)o(hronizes)0 791 y(with)c(the)g(sp)r(eci\014ed) i(thread)e(switc)o(hing)g(a)o(w)n(a)o(y)g(from)f(its)h(current)f(pro)q(cessor) h(if)h(that)e(pro)q(cessor)h(is)g(not)g(in)h(the)0 848 y(sp)q(eci\014ed)i(set\ .)25 b(Unix)18 b(system)e(call)i(compatibilit)q(y)e(co)r(de)h(in)h(some)e(k)o (ernels)i(ma)n(y)f(temp)q(orarily)g(force)g(threads)0 904 y(to)e(execute)g (on)h(the)f(master)f(pro)q(cessor.)0 1026 y fj(A.4.4)56 b(Default)18 b(Thread) g(Assignmen)m(t:)25 b(thread)s 17 2 v 17 w(assign)s 17 2 v 17 w(default)0 1112 y fa(kern_return_t)d(thread_assign_default\(threa)o(d\))191 1168 y(thread_t) 190 b(thread;)71 1274 y fk(Thr)m(e)n(ad)s 14 2 v 14 w(assign)r 14 2 v 13 w (default)19 b fn(is)f(a)f(v)o(ersion)h(of)g fk(thr)n(e)m(ad)t 14 2 v 14 w(ass\ ign)e fn(that)h(assigns)h(the)g(thread)g(to)f(the)h(default)g(pro-)0 1331 y (cessor)e(set)f(on)h(its)g(host.)21 b(This)c(call)g(is)f(necessary)g(b)r(ecau\ se)g(the)g(con)o(trol)f(p)r(ort)g(for)g(the)h(default)g(pro)q(cessor)g(set)0 1387 y(is)g(not)f(a)n(v)m(ailable)i(to)e(unprivileged)j(applications.)0 1509 y fj(A.4.5)56 b(Obtain)18 b(Thread)h(Assignmen)m(t:)24 b(thread)s 17 2 v 17 w (get)s 17 2 v 17 w(assignmen)m(t)0 1595 y fa(kern_return_t)e(thread_get_assig\ nment\(threa)o(d,)f(processor_set\))191 1651 y(thread_t)381 b(thread;)191 1708 y(processor_set_name_t)93 b(*processor_set;)45 b(/*)24 b(out)f(*/)71 1814 y fk (Thr)m(e)n(ad)s 14 2 v 14 w(get)s 14 2 v 14 w(assignment)15 b fn(returns)i (the)g(name)g(p)r(ort)f(of)g(the)h(pro)q(cessor)g(set)g(to)f(which)h(the)g (thread)g(is)g(cur-)0 1870 y(ren)o(tly)e(assigned.)0 1992 y fj(A.4.6)56 b(T) -5 b(ask)18 b(Assignmen)n(t:)24 b(task)s 17 2 v 17 w(assign)0 2078 y fa(kern_\ return_t)e(task_assign\(task,)g(processor_set,)g(assign_threads\))191 2134 y (task_t)262 b(task;)191 2191 y(processor_set_t)46 b(processor_set;)191 2247 y (boolean_t)190 b(assign_threads;)71 2354 y fk(T)l(ask)r 14 2 v 14 w(assign)14 b fn(assigns)i(a)f(task)g(to)f(a)i(pro)q(cessor)f(set.)20 b(This)c(assignment) f(is)h(for)e(the)i(purp)r(oses)f(of)g(obtaining)0 2410 y(the)d(initial)i(assi\ gnmen)o(t)e(for)f(newly)i(created)f(threads.)18 b(Existing)13 b(threads)e(are) h(also)g(assigned)g(if)h fk(assign)q 14 2 v 14 w(thr)n(e)n(ads)0 2466 y fn (is)j(TR)o(UE.)f(These)g(assignmen)o(ts)g(are)g(as)g(if)g fk(thr)o(e)m(ad)s 14 2 v 14 w(assign)f fn(w)o(as)h(called)i(for)d(eac)o(h)h(thread.)0 2588 y fj (A.4.7)56 b(Default)18 b(T)-5 b(ask)18 b(Assignmen)n(t:)24 b(task)s 17 2 v 17 w(assign)s 17 2 v 17 w(default)0 2674 y fa(kern_return_t)e(task_assign_defaul\ t\(task,)f(assign_threads\))191 2730 y(task_t)142 b(task;)191 2787 y(boolean_\ t)70 b(assign_threads;)p eop %%Page: 92 103 bop 0 50 a fg(APPENDIX)15 b(A.)30 b(MA)o(CH)15 b(PR)o(OCESSOR)i(ALLOCA)m(TIO\ N)f(INTERF)-5 b(A)o(CE)517 b fn(92)71 195 y fk(T)l(ask)r 14 2 v 14 w(assign)r 14 2 v 14 w(default)15 b fn(is)g(a)g(v)n(ersion)h(of)e fk(task)s 14 2 v 14 w (assign)f fn(that)h(assigns)h(the)g(task)f(to)g(the)h(default)g(pro)r(cessor) f(set)0 252 y(on)20 b(its)g(host.)33 b(This)21 b(call)g(is)f(necessary)g(b)r (ecause)g(the)g(con)o(trol)f(p)r(ort)g(for)g(the)h(default)h(pro)q(cessor)e (set)h(is)g(not)0 308 y(a)n(v)n(ailable)d(to)d(unprivileged)k(applications.)0 430 y fj(A.4.8)56 b(Obtain)18 b(T)-5 b(ask)19 b(Assignmen)m(t:)24 b(task)t 17 2 v 16 w(get)s 17 2 v 17 w(assignmen)m(t)0 516 y fa(kern_return_t)e(task_get_\ assignment\(task,)f(processor_set\))191 572 y(task_t)381 b(task;)191 628 y (processor_set_name_t)45 b(*processor_set;)h(/*)23 b(out)h(*/)71 735 y fk(T)l (ask)r 14 2 v 14 w(get)s 14 2 v 14 w(assignment)15 b fn(returns)h(the)g(name) h(p)q(ort)f(of)g(the)g(pro)q(cessor)g(set)g(to)g(which)g(the)h(task)e(is)i (currently)0 791 y(assigned.)p eop %%Page: 93 104 bop 0 506 a ff(App)s(endix)34 b(B)0 714 y fi(Mac)m(h)39 b(Priorit)m(y)i(and) e(P)m(olicy)j(In)m(terface)0 936 y fn(This)12 b(app)r(endix)h(describ)r(es)f (the)g(k)o(ernel)g(interface)f(for)h(sc)n(heduling)i(p)r(olicies)f(and)f(prio\ rities.)20 b(Only)13 b(timesharing)0 993 y(and)e(\014xed)g(priority)f(p)r(oli\ cies)i(exist,)g(but)f(the)g(in)o(terface)g(is)g(extensible)i(to)d(allo)o(w)h (the)f(de\014nition)j(and)e(use)g(of)f(other)0 1049 y(p)r(olicies)19 b(in)f (the)f(future.)26 b(The)17 b(timesharing)h(p)q(olicy)h(is)e(for)g(the)g(usual) h(timeshared)g(use)f(of)g(a)g(mac)n(hine.)28 b(The)0 1106 y(\014xed)15 b(prio\ rit)o(y)f(p)q(olicy)h(is)g(in)o(tended)g(to)e(supp)r(ort)g(soft)g(real)i(time) f(applications.)21 b(All)15 b(pro)q(cessor)f(set)g(argumen)n(ts)0 1162 y(in)i (this)g(app)q(endix)h(denote)e(the)g(con)o(trol)g(p)r(ort)f(for)h(the)g(pro)q (cessor)g(set.)0 1306 y fe(B.1)69 b(Priorit)n(y)22 b(Op)r(erations)0 1409 y fj (B.1.1)55 b(Set)18 b(Thread)h(Priorit)m(y:)24 b(thread)s 17 2 v 17 w(priorit) n(y)0 1494 y fa(kern_return_t)e(thread_priority\(thread,)f(priority,)h(set_ma\ x\))191 1551 y(thread_t)70 b(thread;)191 1607 y(int)190 b(priority;)191 1664 y (boolean_t)46 b(set_max)71 1770 y fk(Thr)m(e)n(ad)s 14 2 v 14 w(priority)13 b fn(sets)e(the)h(priority)g(of)f(a)h(thread,)g(and)g(also)g(its)g(maxim)o(um)g (priorit)o(y)l(,)h(if)f fk(set)r 14 2 v 14 w(max)h fn(is)f(TR)o(UE.)0 1827 y (This)i(priorit)o(y)f(is)h(the)g(base)f(priorit)o(y)h(for)e(the)i(thread;)f (the)h(actual)f(priorit)o(y)h(used)g(for)e(sc)o(heduling)k(is)d(computed)0 1883 y(b)o(y)f(the)g(thread's)f(sc)o(heduling)j(p)q(olicy)n(.)19 b(This)12 b (call)h(will)g(fail)g(if)g(an)e(attempt)g(is)i(made)e(to)h(raise)g(a)f(thread\ 's)h(priorit)o(y)0 1939 y(ab)q(o)o(v)n(e)k(its)f(curren)o(t)g(maxim)o(um)g (priority)l(.)0 2061 y fj(B.1.2)55 b(Change)19 b(Thread)g(Max)g(Priorit)m(y:) 24 b(thread)s 17 2 v 17 w(max)r 17 2 v 17 w(priorit)m(y)0 2147 y fa(kern_retu\ rn_t)e(thread_max_priority\(thread,)e(processor_set,)i(priority\))191 2203 y (thread_t)190 b(thread;)191 2260 y(processor_set_t)22 b(processor_set;)191 2316 y(int)310 b(priority;)71 2423 y fk(thr)n(e)m(ad)t 14 2 v 14 w(max)s 14 2 v 14 w(priority)16 b fn(c)o(hanges)g(the)g(maxim)o(um)f(priority)g(of)h(a)f (thread.)21 b(It)16 b(requires)h(presen)o(tation)e(of)h(the)0 2479 y(con)o (trol)e(p)r(ort)g(for)g(the)g(pro)q(cessor)h(set)f(to)g(whic)o(h)h(the)g(thre\ ad)f(is)h(currently)g(assigned)g(to)f(establish)h(the)g(caller's)0 2536 y(rig\ h)o(t)f(to)g(raise)h(the)g(maxim)o(um)f(priority)l(.)19 b(The)c(maxim)o(um)g (priorit)o(y)f(can)h(b)r(e)f(low)n(ered)h(b)o(y)g(the)f fk(set)s 14 2 v 14 w (max)h fn(option)0 2592 y(to)i fk(thr)n(e)n(ad)s 14 2 v 14 w(priority)h fn (without)f(the)h(need)g(to)f(presen)o(t)g(this)h(p)r(ort.)25 b(If)18 b(a)f (thread's)g(priorit)o(y)g(is)h(higher)g(than)g(the)0 2648 y(new)d(maxim)o(um) h(priorit)o(y)f(set)g(b)o(y)g(this)h(call,)g(the)f(thread's)g(priorit)o(y)g (is)h(lo)o(w)n(ered)g(to)e(the)i(new)f(maxim)o(um.)951 2927 y(93)p eop %%Page: 94 105 bop 0 50 a fg(APPENDIX)15 b(B.)30 b(MA)o(CH)15 b(PRIORITY)i(AND)e(POLICY)h (INTERF)l(A)o(CE)579 b fn(94)0 195 y fj(B.1.3)55 b(Set)18 b(T)l(ask)g(Priorit) n(y:)24 b(task)s 17 2 v 17 w(priorit)m(y)0 281 y fa(kern_return_t)e(task_prio\ rity\(task,)f(priority,)i(change_threads\))191 337 y(task_t)142 b(task;)191 394 y(int)214 b(priority;)191 450 y(boolean_t)70 b(change_threads;)71 557 y fn (The)15 b(priorit)o(y)f(of)h(a)f(task)g(is)h(used)h(only)f(for)f(creation)h (of)f(new)h(threads;)f(a)h(new)g(thread's)f(priorit)o(y)h(is)g(set)f(to)0 613 y(the)j(enclosing)i(task's)d(priority)l(.)26 b fk(task)s 14 2 v 14 w(priority) 18 b fn(c)o(hanges)f(this)h(task)f(priorit)o(y)l(.)26 b(It)18 b(also)f(sets)g (the)h(priorities)g(of)0 669 y(all)e(threads)f(in)h(the)f(task)f(to)h(this)g (new)g(priority)f(if)i fk(change)s 14 2 v 13 w(thr)o(e)m(ads)f fn(is)h(TR)o (UE.)e(Otherwise,)i(existing)g(threads)0 726 y(are)h(not)f(a\013ected.)25 b (If)17 b(this)h(priorit)o(y)f(c)o(hange)g(violates)g(the)h(maxim)n(um)f(prior\ ity)g(of)f(some)h(threads,)g(as)f(man)o(y)0 782 y(threads)f(as)g(p)q(ossible) i(will)g(b)q(e)e(c)o(hanged)h(and)f(an)h(error)e(co)q(de)i(will)h(b)q(e)f(ret\ urned.)0 904 y fj(B.1.4)55 b(Set)18 b(Max)h(Priorit)m(y)g(for)f(Pro)r(cessor) g(Set:)24 b(pro)r(cessor)s 17 2 v 17 w(set)r 17 2 v 17 w(max)r 17 2 v 17 w (priorit)m(y)0 990 y fa(kern_return_t)0 1046 y(processor_set_max_priority)o (\(proces)o(sor_set,)c(priority,)j(change_threads\))191 1103 y(processor_set_\ t)260 b(processor_set;)191 1159 y(int)548 b(priority;)191 1216 y(boolean_t) 404 b(change_threads;)71 1322 y fn(The)22 b(priorit)o(y)h(of)e(a)h(pro)r(cess\ or)g(set)g(is)g(used)h(only)g(for)f(newly)h(created)f(threads)g(\(thread's)g (maxim)o(um)0 1378 y(priorit)o(y)f(is)g(set)g(to)f(pro)q(cessor)g(set's\))g (and)h(the)g(assignmen)o(t)g(of)f(threads)h(to)f(the)h(set)f(\(thread's)g(max\ im)o(um)0 1435 y(priorit)o(y)15 b(is)h(reduced)g(if)f(it)g(exceeds)h(the)f (set's)g(maxim)n(um)h(priorit)o(y)l(,)f(thread's)f(priorit)o(y)h(is)h(similar\ ly)g(reduced\).)0 1491 y fk(pr)n(o)n(c)n(essor)r 14 2 v 14 w(set)r 14 2 v 14 w (max)s 14 2 v 14 w(priority)j fn(c)o(hanges)e(this)i(priorit)o(y)l(.)27 b(It) 18 b(also)g(sets)f(the)h(maxim)o(um)f(priority)g(of)g(all)i(threads)0 1548 y (assigned)i(to)f(the)h(pro)q(cessor)f(set)g(to)g(this)h(new)g(priorit)o(y)f (if)h fk(change)s 14 2 v 14 w(thr)n(e)n(ads)f fn(is)h(TR)o(UE.)f(If)h(this)g (maxim)o(um)0 1604 y(priorit)o(y)13 b(is)h(less)g(than)f(the)g(priorities)i (of)d(an)o(y)h(of)g(these)g(threads,)g(their)h(priorities)h(will)f(also)g(b)q (e)f(set)g(to)g(this)h(new)0 1661 y(v)m(alue.)0 1804 y fe(B.2)69 b(Sc)n(hedul\ ing)22 b(P)n(olicy)f(Op)r(erations)0 1907 y fj(B.2.1)55 b(Set)18 b(Thread)h (P)o(olicy:)k(thread)s 17 2 v 17 w(p)q(olicy)0 1993 y fa(kern_return_t)f(thre\ ad_policy\(thread,)f(policy,)i(data\))191 2049 y(thread_t)190 b(thread;)191 2106 y(int)310 b(policy;)191 2162 y(int)g(data;)71 2269 y fk(thr)n(e)m(ad)t 14 2 v 14 w(p)m(olicy)22 b fn(c)o(hanges)f(the)h(sc)n(heduling)i(p)q(olicy)f(for) e(a)g(thread.)38 b fk(data)23 b fn(is)e(p)r(olicy-dep)s(endent)g(sc)o(hedul-) 0 2325 y(ing)e(information.)29 b(There)18 b(are)g(currently)g(t)o(w)n(o)g(sup\ p)r(orted)g(p)q(olicies:)28 b fk(POLICY)q 14 2 v 14 w(TIMESHARE)16 b fn(and)i fk(POL-)0 2381 y(ICY)r 14 2 v 14 w(FIXEDPRI)p fn(.)k(these)j(sym)o(b)q(ols)g (are)g(de\014ned)h(in)f(the)g(\014le)h(,)h(whic)o(h)e (is)h(included)h(b)o(y)0 2438 y(.)32 b fk(data)20 b fn(is)g(meanin\ gless)h(for)d(timesharing,)i(but)g(is)f(the)h(quan)o(tum)f(to)f(b)r(e)h(used) h(\(in)f(milliseconds\))0 2494 y(for)h(the)h(\014xed)h(priorit)o(y)f(p)q(olic\ y)m(.)37 b(T)l(o)21 b(b)q(e)g(meaningful,)i(this)f(quan)n(tum)f(m)o(ust)f(b)r (e)h(a)f(m)o(ultiple)j(of)d(the)h(basic)0 2551 y(system)e(quan)o(tum)f(\()p fk (min)r 14 2 v 14 w(quantum)p fn(\))i(whic)o(h)g(can)f(b)q(e)g(obtained)h(from) e fk(host)s 14 2 v 14 w(info)p fn(.)31 b(The)19 b(system)g(will)i(alw)n(a)o (ys)0 2607 y(round)15 b(up)g(to)f(the)h(next)g(m)o(ultiple)h(of)f(the)g(quan) o(tum.)k(Pro)q(cessor)14 b(sets)h(ma)n(y)g(restrict)f(the)h(allow)n(ed)g(p)r (olicies,)h(so)0 2664 y(this)g(call)g(will)h(fail)f(if)f(the)h(pro)q(cessor)f (set)g(to)f(which)h(the)g(thread)g(is)h(curren)o(tly)g(assigned)g(do)q(es)f (not)g(p)q(ermit)h(the)0 2720 y(sp)q(eci\014ed)h(p)r(olicy)m(.)p eop %%Page: 95 106 bop 0 50 a fg(APPENDIX)15 b(B.)30 b(MA)o(CH)15 b(PRIORITY)i(AND)e(POLICY)h (INTERF)l(A)o(CE)579 b fn(95)0 195 y fj(B.2.2)55 b(Enable)18 b(P)o(olicy:)23 b (pro)r(cessor)s 17 2 v 16 w(set)s 17 2 v 17 w(p)r(olicy)r 17 2 v 17 w(enable) 0 281 y fa(kern_return_t)f(processor_set_policy_enable)o(\(proces)o(sor_set)o (,)f(policy\))191 337 y(processor_set_t)h(processor_set;)191 394 y(int)310 b (policy;)71 500 y fn(Allo)o(w)15 b(use)h(of)f(the)g(sp)q(eci\014ed)i(p)r(olic\ y)f(b)o(y)f(threads)g(assigned)h(to)f(the)g(pro)q(cessor)g(set.)0 622 y fj (B.2.3)55 b(Disable)18 b(P)o(olicy:)23 b(pro)q(cessor)s 17 2 v 17 w(set)s 17 2 v 17 w(p)q(olicy)r 17 2 v 17 w(disable)0 708 y fa(kern_return_t)0 764 y(proce\ ssor_set_policy_disab)o(le\(proc)o(essor_se)o(t,)e(policy,)i(change_threads\)) 191 821 y(thread_t)190 b(thread;)191 877 y(processor_set_t)22 b(processor_set\ ;)191 933 y(int)310 b(change_threads;)71 1040 y fn(Disallo)o(w)20 b(use)h(of) e(the)i(sp)q(eci\014ed)h(p)q(olicy)g(for)d(the)h(sp)r(eci\014ed)i(pro)q(cesso\ r)e(set.)34 b fk(change)s 14 2 v 13 w(thr)o(e)m(ads)20 b fn(indicates)0 1096 y (whether)j(this)g(call)h(should)f(a\013ect)f(existing)i(threads.)42 b(If)23 b (it)g(is)g(TR)o(UE,)f(an)o(y)h(existing)g(thread)g(with)g(the)0 1153 y(sp)q (eci\014ed)16 b(p)r(olicy)f(has)f(its)g(p)r(olicy)h(reset)f(to)f(timesharing.) 20 b(If)15 b(it)f(is)h(F)-6 b(ALSE,)15 b(existing)g(threads)f(with)g(the)g (p)r(olicy)0 1209 y(are)i(grandfathered;)g(they)g(k)n(eep)h(their)g(p)q(olicy) n(,)e(but)i(threads)e(subsequently)i(created)f(in)h(the)f(set)g(or)f(assigned) 0 1266 y(to)d(it)h(with)h(this)f(p)r(olicy)h(will)g(ha)o(v)o(e)f(it)g(reset)g (to)f(timesharing.)20 b(The)13 b(timesharing)g(p)r(olicy)h(ma)n(y)f(not)g(b)q (e)g(disabled.)p eop %%Page: 96 107 bop 0 506 a ff(App)s(endix)34 b(C)0 714 y fi(The)40 b(cpu)7 b 36 2 v 35 w (serv)m(er)40 b(In)m(terfaces)0 936 y fn(This)15 b(app)r(endix)h(do)q(cumen)o (ts)f(the)f(interfaces)g(to)g(the)h(Mac)n(h)g(cpu)t 14 2 v 13 w(serv)o(er.)k (Both)c(the)g(lo)o(w)f(level)h(remote)f(pro)q(ce-)0 993 y(dure)i(call)g(inter\ face)e(and)i(the)f(library)h(interfaces)f(built)h(on)f(top)g(of)g(it)g(are)g (included.)0 1136 y fe(C.1)69 b(Serv)n(er)23 b(RPC)f(In)n(terface)0 1238 y fn (This)c(section)f(describ)s(es)g(the)g(basic)h(remote)e(pro)q(cedure)i(call)g (\(RPC\))f(interface)f(used)i(to)e(access)h(the)h(serv)n(er.)0 1294 y(This)d (in)o(terface)f(is)h(based)f(on)g(the)g(concept)h(of)f(a)g fk(r)m(e)n(quest)g fn(ob)r(ject)g(that)g(is)h(created)f(and)g(manipulated)i(b)o(y)e(these)0 1350 y(primitives.)0 1472 y fj(C.1.1)56 b(Create)18 b(a)h(Request:)k(cpu)s 17 2 v 17 w(request)r 17 2 v 17 w(create)0 1558 y fa(mach_error_t)0 1614 y(cpu_reque\ st_create\(server,)d(total_processors,)i(run_time,)g(delay,)i(request\))191 1671 y(port_t)214 b(server;)191 1727 y(int)286 b(total_processors;)191 1784 y (int)g(run_time;)191 1840 y(int)g(*delay;)166 b(/*)24 b(out)f(*/)191 1897 y (cpu_request_t)46 b(*request;)118 b(/*)24 b(out)f(*/)71 2002 y fk(Cpu)s 14 2 v 13 w(r)n(e)n(quest)s 14 2 v 14 w(cr)m(e)n(ate)16 b fn(creates)f(a)g(cpu)s 14 2 v 14 w(serv)o(er)g(request)h(ob)r(ject)g(for)f(a)g(total)g(of)g fk(total)s 14 2 v 14 w(pr)n(o)n(c)n(essors)f fn(pro)q(cessors)0 2058 y(and)d(a)g(maxim)n (um)g(of)g fk(run)s 14 2 v 14 w(time)g fn(seconds.)18 b(The)12 b(newly)f(crea\ ted)g(request)g(ob)r(ject)g(and)g(a)g(curren)o(t)g(dela)o(y)g(estimate)0 2115 y(are)17 b(returned.)27 b(The)18 b(request)f(is)h(created)g(in)g(the)g(inacti\ ve)f(state.)26 b(The)18 b(initial)h(serv)o(er)f(p)q(ort)f(is)h(obtained)g(b)o (y)0 2171 y(lo)r(oking)d(up)h(the)f(name)g(`cpu)s 14 2 v 14 w(serv)o(er')f (with)i(the)f(lo)r(cal)h(nameservice.)0 2293 y fj(C.1.2)56 b(Add)19 b(to)f (a)h(Request:)k(cpu)t 17 2 v 17 w(request)r 17 2 v 17 w(add)0 2379 y fa(mach_\ error_t)0 2435 y(cpu_request_add\(request,)e(processor_set,)h(processors,)g (processors_left\))191 2492 y(cpu_request_t)94 b(request;)191 2548 y(processo\ r_set_t)46 b(processor_set;)191 2604 y(int)334 b(processors;)191 2661 y(int)g (*processors_left;)69 b(/*)23 b(out)h(*/)0 2766 y fk(Cpu)s 14 2 v 14 w(r)n (e)m(quest)s 14 2 v 14 w(add)11 b fn(adds)g(a)f(request)h(for)f(pro)q(cessors) g(for)h(the)f(indicated)j(pro)q(cessor)d(set)h(to)f(the)g(sp)r(eci\014ed)i (request.)0 2823 y(This)21 b(n)o(um)o(b)r(er)f(of)g(pro)q(cessors)g(is)i(dedu\ cted)f(from)f(the)h(total)f(n)o(um)o(b)q(er)h(of)f(pro)q(cessors)g(sp)q(eci\ \014ed)j(when)e(the)951 2927 y(96)p eop %%Page: 97 108 bop 0 50 a fg(APPENDIX)15 b(C.)30 b(THE)15 b(CPU)s 14 2 v 13 w(SER)l(VER)h (INTERF)-5 b(A)o(CES)844 b fn(97)0 195 y(request)16 b(w)o(as)f(created,)h(and) g(the)g(n)o(um)o(b)r(er)g(remaining)h(to)e(b)q(e)i(associated)g(with)f(a)g (pro)q(cessor)g(set)f(is)i(returned.)0 252 y(The)e(request)h(m)n(ust)f(b)r (e)g(in)h(the)f(inactive)h(state)e(for)h(this)g(call.)0 373 y fj(C.1.3)56 b (Request)17 b(Noti\014cations:)23 b(cpu)t 17 2 v 17 w(request)r 17 2 v 17 w (set)r 17 2 v 17 w(notify)0 459 y fa(mach_error_t)0 515 y(cpu_request_set_not\ ify\(req)o(uest,)e(notify_port\))191 572 y(cpu_request_t)70 b(request;)191 628 y(port_t)238 b(notify_port;)71 731 y fk(Cpu)s 14 2 v 13 w(r)n(e)n(quest)s 14 2 v 14 w(set)r 14 2 v 14 w(notify)18 b fn(asks)f(the)h(serv)o(er)g(to)g(send)g (a)g(noti\014cation)h(message)e(to)h fk(notify)r 14 2 v 14 w(p)n(ort)h fn(aft\ er)e(allo-)0 788 y(cating)f(pro)q(cessors)f(to)g(the)h(request,)f(and)h(one)g (second)g(b)q(efore)g(remo)n(ving)g(them.)21 b(Applications)d(that)d(receive) 0 844 y(these)d(messages)f(can)h(use)g(them)g(to)f(mak)n(e)h(sure)g(that)f (execution)i(only)f(tak)n(es)g(place)h(while)g(all)g(of)e(the)h(pro)q(cessors) 0 900 y(are)18 b(allo)r(cated;)i(the)e(end)i(message)e(can)g(b)r(e)g(used)i (to)d(initiate)j(a)e(barrier)h(sync)o(hronization)h(to)d(stop)h(cleanly)n(,)0 957 y(and)f(the)g(start)f(message)g(can)h(b)r(e)g(used)g(to)g(exit)g(the)g (barrier.)25 b(The)17 b(request)g(m)o(ust)f(b)r(e)h(in)h(the)f(inactive)g(sta\ te)0 1013 y(for)e(this)g(call.)0 1135 y fj(C.1.4)56 b(Activ)l(ate)18 b(Reques\ t:)23 b(cpu)t 17 2 v 16 w(request)r 17 2 v 17 w(activ)l(ate)0 1220 y fa(mach_\ error_t)0 1277 y(cpu_request_activate\(reque)o(st,)e(options,)i(total_time,)f (delay\))191 1333 y(cpu_request_t)46 b(request;)191 1390 y(int)286 b(options;) 191 1446 y(int)g(total_time;)191 1503 y(int)g(*delay;)47 b(/*)23 b(out)h(*/) 71 1606 y fk(Cpu)s 14 2 v 13 w(r)n(e)n(quest)s 14 2 v 14 w(activate)17 b fn (activ)n(ates)g(a)g(request)h(\(i.e.,)f(requests)g(the)h(serv)n(er)g(to)f(all\ o)r(cate)g(pro)q(cessors)g(to)g(it\).)0 1662 y(A)d(maxim)o(um)h(dela)o(y)f (until)h(the)f(pro)q(cessors)g(will)i(b)q(e)f(allo)r(cated)f(is)h(returned.) 20 b(No)14 b(further)g fk(cpu)s 14 2 v 14 w(r)n(e)n(quest)r 14 2 v 14 w(add)h fn(or)0 1719 y fk(cpu)s 14 2 v 14 w(r)n(e)n(quest)r 14 2 v 14 w(set)s 14 2 v 14 w(notify)10 b fn(op)q(erations)h(are)f(p)q(ermitted)h(on)g(the)f(request.) 19 b(The)10 b(following)h(options)f(are)h(supp)r(orted:)68 1810 y fb(\017)23 b fk(CPU)r 14 2 v 14 w(OPTION)q 14 2 v 14 w(DESTR)n(O)o(Y)14 b fn(-)g(Destro)n (y)g(the)g(pro)q(cessor)g(sets)g(when)h(the)g(request)f(is)h(completed.)20 b (This)114 1867 y(is)e(intended)h(to)f(supp)r(ort)f(naiv)o(e)i(users)f(b)o(y)g (prev)o(en)o(ting)h(a)f(program)f(that)g(o)o(v)n(erruns)i(its)f(request)h(fro\ m)114 1923 y(going)e(into)g(susp)r(ended)h(animation;)h(destro)o(ying)f(its)g (pro)q(cessor)f(sets)h(forces)f(the)h(program)e(bac)o(k)i(in)o(to)114 1980 y (the)d(default)h(pro)q(cessor)f(set)g(where)g(it)h(will)g(con)o(tinue)f(to)g (run.)68 2072 y fb(\017)23 b fk(CPU)r 14 2 v 14 w(OPTION)q 14 2 v 14 w(REPEA) l(T)15 b fn(-)i(Rep)r(eat)f(the)g(request)g(for)g fk(total)s 14 2 v 14 w(time) p fn(.)23 b(The)17 b(time)f(for)g(eac)o(h)g(instance)h(of)114 2129 y(the)i (request)g(is)h(sp)r(eci\014ed)h(b)o(y)e(the)g(run)t 14 2 v 13 w(time)h(argum\ en)n(t)f(of)g(the)h fk(cpu)s 14 2 v 14 w(r)n(e)m(quest)s 14 2 v 14 w(cr)n(e)m (ate)g fn(op)q(eration)g(that)114 2185 y(created)15 b(the)g(request.)20 b fk (total)s 14 2 v 14 w(time)15 b fn(is)h(ignored)g(if)f(this)h(option)f(is)h (not)f(selected.)0 2277 y(The)g(sym)o(b)q(ols)h(for)e(these)i(options)f(are)g (de\014ned)i(in)f(the)f(\014le)h(.) 0 2398 y fj(C.1.5)56 b(Activ)l(ate)18 b(Request)f(for)i(T)-5 b(ask:)25 b(cpu) s 17 2 v 17 w(request)r 17 2 v 17 w(activ)l(ate)s 17 2 v 17 w(task)0 2484 y fa (mach_error_t)0 2540 y(cpu_request_activate_task\()o(request)o(,)c(options,)i (total_time,)f(task,)i(delay\))191 2597 y(cpu_request_t)46 b(request;)191 2653 y(int)286 b(options;)191 2710 y(int)g(total_time;)191 2766 y(task_t)214 b(tas\ k;)191 2823 y(int)286 b(*delay;)47 b(/*)23 b(out)h(*/)p eop %%Page: 98 109 bop 0 50 a fg(APPENDIX)15 b(C.)30 b(THE)15 b(CPU)s 14 2 v 13 w(SER)l(VER)h (INTERF)-5 b(A)o(CES)844 b fn(98)71 195 y(This)20 b(is)g(a)f(v)o(ersion)h(of) f fk(cpu)t 14 2 v 14 w(r)n(e)m(quest)s 14 2 v 14 w(activate)h fn(whic)o(h)g (informs)g(the)g(serv)n(er)g(that)f(the)h(application)h(using)0 252 y(the)16 b (pro)q(cessor)f(sets)g(is)h(a)f(task,)g(and)h(identi\014es)g(the)g(task.)k (This)c(allo)o(ws)g(the)f(serv)o(er)g(to)g(optimize)i(assignmen)o(t)0 308 y (pro)q(cessors)e(b)o(y)g(susp)r(ending)h(the)f(task)g(b)q(ecause)h(pro)q(cess\ or)f(assignmen)o(t)g(is)h(faster)e(if)i(the)f(pro)q(cessor)g(is)h(idle.)0 429 y fj(C.1.6)56 b(T)-5 b(erminate)16 b(a)j(Request:)k(cpu)t 17 2 v 16 w(request) r 17 2 v 17 w(destro)n(y)0 515 y fa(mach_error_t)f(cpu_request_destroy\(reque\ st\))191 572 y(cpu_request_t)189 b(request;)71 676 y fk(Cpu)s 14 2 v 13 w(r)n (e)n(quest)s 14 2 v 14 w(destr)m(oy)13 b fn(destro)o(ys)f(the)h(sp)r(eci\014e\ d)h(request,)f(freeing)h(an)n(y)f(pro)q(cessors)g(that)f(w)o(ere)h(allo)r(cat\ ed)f(to)0 732 y(it.)22 b(If)16 b(noti\014cations)h(w)n(ere)f(requested)h(for) e(this)h(request,)g(an)g(end)g(noti\014cation)h(will)g(b)r(e)f(sen)o(t)f(and) h(the)g(freeing)0 789 y(of)f(the)g(pro)q(cessors)g(will)i(b)q(e)f(dela)o(y)o (ed)g(b)o(y)f(1)g(second.)0 910 y fj(C.1.7)56 b(Get)18 b(Request)f(Informatio\ n:)23 b(cpu)t 17 2 v 16 w(request)r 17 2 v 17 w(status)0 996 y fa(mach_error_\ t)0 1052 y(cpu_request_status\(request)o(,)e(reserved,)i(assigned,)f(active,) h(options,)g(time\))191 1109 y(cpu_request_t)f(request;)191 1165 y(int)262 b (*reserved;)46 b(/*)24 b(out)f(*/)191 1222 y(int)262 b(*assigned;)46 b(/*)24 b (out)f(*/)191 1278 y(boolean_t)118 b(*active;)94 b(/*)24 b(out)f(*/)191 1335 y (int)262 b(*options;)70 b(/*)24 b(out)f(*/)191 1391 y(int)262 b(*time;)142 b (/*)24 b(out)f(*/)71 1495 y fk(Cpu)s 14 2 v 13 w(r)n(e)n(quest)s 14 2 v 14 w (status)10 b fn(obtains)h(information)f(ab)r(out)g(an)g(allo)r(cation)h(reque\ st.)18 b fk(active)11 b fn(indicates)h(whether)f(the)0 1552 y(request)16 b (has)f(b)r(een)h(activ)n(ated.)21 b(F)l(or)15 b(an)g(inactive)h(request,)f fk (r)n(eserve)m(d)h fn(is)g(the)g(n)o(um)o(b)r(er)f(of)g(pro)q(cessors)h(reserv) n(ed)0 1608 y(when)i(the)g(request)f(w)o(as)g(created,)h(and)g fk(assigne)l (d)g fn(is)g(the)g(n)o(um)o(b)q(er)g(of)f(pro)q(cessors)g(used)h(b)o(y)g fk (cpu)s 14 2 v 14 w(r)n(e)n(quest)r 14 2 v 14 w(add)0 1665 y fn(calls.)i(F)l (or)13 b(an)h(activ)o(e)g(request,)f fk(r)n(eserve)m(d)h fn(is)g(the)g(n)o (um)o(b)r(er)f(of)g(pro)q(cessors)h(needed)h(to)e(satisfy)g(the)h(request,)g (and)0 1721 y fk(assigne)l(d)f fn(is)h(the)f(n)o(um)o(b)q(er)g(curren)o(tly)g (assigned;)h(b)r(ecause)f(pro)q(cessor)g(assignmen)o(t)f(is)i(done)f(b)o(y)g (a)f(single)i(thread,)0 1778 y(this)k(n)o(um)o(b)q(er)g(ma)n(y)g(ha)o(v)o(e)f (v)n(alues)h(b)r(et)n(w)o(een)g(zero)g(and)g fk(r)m(eserve)n(d)p fn(.)27 b fk (options)18 b fn(indicates)h(the)e(options)h(currently)0 1834 y(asso)q(ciated) c(with)f(the)h(request;)f(noti\014cation)h(is)g(an)f(option,)h(ev)o(en)g(thou\ gh)f(it)g(is)h(requested)g(in)g(a)f(separate)g(call.)0 1890 y fk(time)i fn (is)h(the)f(serv)o(er's)f(estimate)h(of)g(the)g(amoun)o(t)g(of)f(time)i(un)o (til)g(the)f(request)g(can)h(b)q(e)f(satis\014ed)h(if)g(the)f(request)0 1947 y (is)i(not)f(activ)o(e)g(or)g(has)g(no)h(pro)q(cessors)f(assigned.)24 b(It)16 b (is)h(the)f(time)h(un)o(til)g(the)g(pro)q(cessors)f(will)i(b)q(e)f(deactiv)n (ated)0 2003 y(\(or)d(the)i(end)g(noti\014cation)f(sent,)f(if)i(requested\))f (for)g(an)g(activ)o(e)g(request)g(that)g(has)g(pro)q(cessors)g(assigned.)0 2125 y fj(C.1.8)56 b(Get)18 b(Serv)m(er)h(Information:)j(cpu)t 17 2 v 17 w (serv)m(er)s 17 2 v 17 w(info)0 2211 y fa(mach_error_t)0 2267 y(cpu_server_in\ fo\(server,)f(max_time,)h(max_total_time,)g(max_processors,)95 2323 y(delay\)) 191 2380 y(cpu_request_t)70 b(server;)191 2436 y(int)310 b(*max_time;)237 b (/*)24 b(out)f(*/)191 2493 y(int)310 b(*max_total_time;)93 b(/*)24 b(out)f (*/)191 2549 y(int)310 b(*max_processors;)93 b(/*)24 b(out)f(*/)191 2606 y (int)310 b(*delay;)f(/*)24 b(out)f(*/)71 2710 y fk(Cpu)s 14 2 v 13 w(server)s 14 2 v 14 w(info)10 b fn(obtains)g(information)h(ab)q(out)f(the)g(serv)o(er.) 18 b fk(max)t 14 2 v 14 w(time)10 b fn(is)h(the)f(maxim)o(um)h(time)f(in)h (seconds)0 2766 y(for)j(a)h(single)h(request)f(or)f(single)i(segmen)o(t)f(of) f(a)h(rep)q(eating)g(request.)20 b fk(max)s 14 2 v 14 w(total)s 14 2 v 14 w (time)15 b fn(is)h(the)f(maxim)n(um)g(total)0 2823 y(time)j(for)f(a)g(rep)q (eating)h(request)g(\(one)f(that)g(uses)g(the)h(Rep)r(eat)f(option\).)27 b fk (max)s 14 2 v 14 w(pr)n(o)n(c)n(essors)16 b fn(is)i(the)g(maxim)o(um)p eop %%Page: 99 110 bop 0 50 a fg(APPENDIX)15 b(C.)30 b(THE)15 b(CPU)s 14 2 v 13 w(SER)l(VER)h (INTERF)-5 b(A)o(CES)844 b fn(99)0 195 y(n)o(um)o(b)q(er)16 b(of)g(pro)q(cess\ ors)g(a)n(v)n(ailable)i(to)d(an)o(y)h(request,)g(and)g fk(delay)g fn(is)h(the) f(serv)o(er's)f(estimate)h(of)g(the)g(maxim)o(um)0 252 y(delay)f(un)o(til)h (a)f(new)g(request)g(can)h(b)q(e)g(satis\014ed.)k(The)c fk(cpuinfo)f fn(progr\ am)f(uses)h(this)h(call)g(to)f(query)g(the)h(serv)n(er.)0 395 y fe(C.2)69 b (Library)24 b(In)n(terfaces)0 496 y fn(The)16 b(serv)o(er)g(interface)g(and)g (the)g(k)o(ernel)h(interface)e(for)h(pro)q(cessor)g(allo)r(cation)g(will)i (b)q(e)f(used)f(directly)i(b)o(y)e(pro-)0 553 y(grams)e(that)h(require)g(expl\ icit)j(con)o(trol)d(o)n(v)o(er)g(whic)o(h)h(threads)f(are)f(executing)j(on)e (whic)o(h)h(pro)q(cessors)f(at)f(which)0 609 y(time.)38 b(F)l(or)21 b(applica\ tions)i(with)e(less)h(stringen)o(t)f(pro)q(cessor)g(allo)r(cation)g(requireme\ nts,)h(simple)h(library)f(in-)0 666 y(terfaces)e(which)h(hide)g(all)h(of)e (the)h(in)o(ternal)g(details)g(of)g(in)o(teraction)g(with)f(the)h(k)o(ernel)g (and)g(serv)o(er)f(ma)o(y)g(b)r(e)0 722 y(appropriate.)g(F)l(our)15 b(in)o (terfaces)g(ha)o(v)o(e)g(b)q(een)h(dev)o(elop)r(ed:)21 b fk(al)r(lo)m(c)n(ate) p fn(,)15 b fk(task)p fn(,)g fk(ho)n(ok)p fn(,)g(and)g fk(task-ho)n(ok)p fn (.)0 844 y fj(C.2.1)56 b(Allo)q(cate)18 b(In)n(terface)0 930 y fn(The)e fk (al)r(lo)m(c)n(ate)g fn(in)o(terface)f(supp)r(orts)g(a)g(single)i(allo)r(cati\ on)e(of)g(a)g(p)r(o)q(ol)h(of)f(pro)q(cessors.)20 b(It)15 b(exp)r(orts)g(the) g(follo)o(wing)0 986 y(t)n(w)o(o)g(calls:)0 1080 y fa(allocate_processors\(nu\ m_pr)o(ocessor)o(s,)21 b(num_seconds,)h(interactive\))191 1136 y(int)238 b (num_processors;)191 1193 y(int)g(num_seconds;)191 1249 y(boolean_t)94 b(inte\ ractive;)0 1362 y(deallocate_processors\(\))71 1456 y fk(A)n(l)r(lo)n(c)m(ate) s 14 2 v 14 w(pr)n(o)n(c)n(essors)13 b fn(allo)r(cates)h fk(num)s 14 2 v 14 w (pr)n(o)n(c)n(essors)f fn(pro)q(cessors)i(for)e fk(num)s 14 2 v 14 w(se)m(c)n (onds)h fn(seconds.)20 b(If)15 b(the)f(time)h(is)0 1512 y(larger)c(than)g(the) h(serv)n(er's)f(maxim)o(um)g(slice)i(time,)f(then)g(a)f(rep)q(eating)h(reques\ t)f(is)h(automatically)f(submitted.)20 b(If)0 1569 y fk(inter)m(active)c fn (is)g(TR)o(UE,)g(errors)f(generate)g(printfs,)g(and)h(the)g(user)f(is)i(ask)n (ed)f(whether)g(the)g(serv)o(er's)f(maxim)o(um)0 1625 y(delay)k(is)h(acceptab\ le;)i(no)d(allo)r(cation)h(is)g(p)q(erformed)g(if)f(the)h(answ)n(er)g(is)g (no.)32 b fk(al)r(lo)n(c)m(ate)t 14 2 v 13 w(pr)o(o)m(c)n(essors)18 b fn(do)r (es)h(not)0 1682 y(return)13 b(un)o(til)i(the)e(allo)r(cation)g(of)g(pro)q (cessors)g(has)g(started;)g(it)g(p)r(erforms)f(a)h fk(task)s 14 2 v 14 w(assi\ gn)f fn(in)o(ternally)i(so)f(that)g(the)0 1738 y(initial)19 b(thread)e(and)h (all)g(threads)f(and)g(tasks)g(subsequently)g(created)g(share)h(the)f(allo)r (cated)g(pro)q(cessors.)26 b(If)17 b(a)0 1795 y(program)d(o)o(v)n(erruns)i (its)f(time)h(allo)r(cation,)f(it)g(will)i(con)o(tin)o(ue)f(to)e(run,)h(but)h (without)f(dedicated)h(pro)q(cessors.)71 1851 y fk(De)m(al)s(lo)m(c)n(ate)s 14 2 v 14 w(pr)n(o)n(c)m(essors)e fn(frees)g(the)h(pro)q(cessors)f(allo)r(cated) g(b)o(y)h fk(al)r(lo)n(c)m(ate)s 14 2 v 14 w(pr)n(o)n(c)n(essors)p fn(.)j(It) d(m)n(ust)g(b)q(e)g(called)h(b)o(y)0 1908 y(a)f(thread)g(in)h(the)f(same)g (task)g(that)f(did)i(the)g(allo)r(cation.)0 2029 y fj(C.2.2)56 b(T)-5 b(ask) 19 b(In)n(terface)0 2115 y fn(The)d fk(task)g fn(interface)g(is)g(identical)h (to)f(the)g(allo)r(cate)g(interface,)f(but)i(is)f(restricted)h(to)e(applicati\ ons)j(consisting)0 2172 y(of)13 b(a)h(single)h(task)e(so)g(that)g(the)h(serv) o(er)g(can)f(exploit)i(e\016ciencies)h(a)o(v)m(ailable)g(in)e(this)h(case)e (\(susp)r(ending)i(the)f(task)0 2228 y(b)r(efore)g(remo)o(ving)i(pro)q(cessor\ s\).)j(The)c(task)g(in)o(terface)g(exp)r(orts)f(the)i(follo)o(wing)f(t)o(w)n (o)g(calls:)0 2322 y fa(task_allocate_processors\(n)o(um_proc)o(essors,)20 b (num_seconds,)j(interactive\))191 2378 y(int)214 b(num_processors;)191 2435 y (int)g(num_seconds;)191 2491 y(boolean_t)70 b(interactive;)0 2604 y(task_deal\ locate_processors)o(\(\))p eop %%Page: 100 111 bop 0 50 a fg(APPENDIX)15 b(C.)30 b(THE)15 b(CPU)s 14 2 v 13 w(SER)l(VER)h (INTERF)-5 b(A)o(CES)822 b fn(100)0 195 y fj(C.2.3)56 b(Ho)q(ok)18 b(In)o(ter\ face)0 281 y fn(The)j fk(ho)o(ok)g fn(in)o(terface)g(supp)r(orts)f(allo)r(cat\ ion)i(of)f(a)f(p)r(o)q(ol)h(of)g(pro)q(cessors,)h(with)g(user)f(sc)o(heduling) i(ho)q(oks.)38 b(It)0 337 y(exp)r(orts)14 b(the)h(following)g(t)o(w)n(o)g(cal\ ls:)0 431 y fa(allocate_processors_with_h)o(ooks\(nu)o(m_proces)o(sors,)21 b (num_seconds,)h(start_hook,)95 488 y(end_hook,)h(interactive\))191 544 y(int) 167 b(num_processors;)191 601 y(int)g(num_seconds;)191 657 y(int)g(\(*start_h\ ook\)\(\);)191 713 y(int)g(\(*end_hook\)\(\);)191 770 y(boolean_t)23 b(intera\ ctive;)0 883 y(deallocate_processors_with)o(_hooks\()o(\))71 977 y fk(A)n(l)r (lo)n(c)m(ate)s 14 2 v 14 w(pr)n(o)n(c)n(essors)r 14 2 v 14 w(with)s 14 2 v 14 w(ho)n(oks)f fn(allo)r(cates)h(the)g(sp)q(eci\014ed)i(n)o(um)o(b)q(er)e(of)f (pro)q(cessors)h(for)f(the)h(sp)q(eci\014ed)0 1033 y(n)o(um)o(b)q(er)d(of)g (seconds.)35 b(If)20 b(the)h(n)o(um)n(b)r(er)f(of)g(seconds)g(is)h(greater)e (than)h(the)g(serv)o(er's)f(maxim)o(um)h(slice)i(time,)0 1090 y(a)15 b(rep)r (eating)h(request)f(is)h(automatically)g(submitted.)22 b fk(start)s 14 2 v 14 w(ho)n(ok)16 b fn(is)g(called)h(eac)o(h)f(time)g(after)e(the)i(pro)q(cessors) 0 1146 y(are)g(allo)r(cated.)22 b(Similarly)o(,)16 b fk(end)r 14 2 v 14 w(ho) n(ok)g fn(is)h(called)h(appro)n(ximately)f(1)f(second)g(b)r(efore)g(an)n(y)g (pro)r(cessor)f(deallo)s(ca-)0 1202 y(tion.)29 b fk(inter)m(active)18 b fn (functions)h(identically)h(to)d(the)i(previous)g(in)o(terfaces.)28 b(A)19 b (thread)f(m)n(ust)g(b)r(e)g(dedicated)h(to)0 1259 y(the)e fk(al)r(lo)m(c)n (ate)s 14 2 v 14 w(pr)n(o)n(c)n(essors)q 14 2 v 14 w(with)t 14 2 v 14 w(ho)n (oks)f fn(call;)i(i.e.,)f(the)f(calling)j(thread)d(do)q(es)h(not)g(return)f (un)o(til)i(the)f(allo)r(cation)0 1315 y(request)12 b(is)g(\014nished)i(or)e (terminated.)19 b(This)12 b(dedicated)i(thread)e(is)g(assigned)h(to)e(the)h (allo)r(cated)g(pro)q(cessors)g(\(this)0 1372 y(can)g(b)r(e)g(rev)o(ersed)g (b)o(y)g(p)r(erforming)g(a)g fk(thr)n(e)n(ad)s 14 2 v 14 w(assign)q 14 2 v 14 w(default)h fn(or)e fk(thr)o(e)m(ad)s 14 2 v 14 w(assign)g fn(as)h(part)g(of) f(the)i(\014rst)e(inv)o(o)q(cation)0 1428 y(of)k fk(start)s 14 2 v 14 w(ho)o (ok)p fn(\).)21 b(All)c(threads)f(within)h(its)f(task)f(and)h(subsequently)h (created)f(tasks)f(are)g(also)h(assigned)g(to)g(the)0 1485 y(allo)r(cated)g (pro)q(cessors)f(\(c.f.)g fk(task)r 14 2 v 14 w(assign)p fn(\).)20 b(Both)c fk (start)s 14 2 v 14 w(ho)n(ok)g fn(and)f fk(end)s 14 2 v 14 w(ho)n(ok)h fn(m)n (ust)g(return)g(for)f(the)h(in)o(terface)0 1541 y(to)f(function)h(correctly)m (.)k(In)c(particular,)g(the)g(in)o(terface)f(will)i(break)f(if)g fk(end)r 14 2 v 14 w(ho)n(ok)g fn(do)q(es)g(not)f(return)g(b)r(efore)g(the)0 1598 y(pro)q (cessors)g(are)g(deallo)r(cated.)71 1654 y fk(De)m(al)s(lo)m(c)n(ate)s 14 2 v 14 w(pr)n(o)n(c)m(essors)r 14 2 v 14 w(with)s 14 2 v 14 w(ho)n(oks)10 b fn (frees)g(the)h(pro)q(cessors)e(allo)r(cated)i(b)o(y)f fk(al)r(lo)m(c)n(ate)s 14 2 v 14 w(pr)n(o)n(c)n(essors)q 14 2 v 14 w(with)t 14 2 v 14 w(ho)n(oks)p fn (.)0 1711 y fk(end)r 14 2 v 14 w(ho)o(ok)k fn(will)i(not)e(b)r(e)h(in)o(v)o (ok)n(ed)g(as)g(a)f(result)h(of)f(this)h(call,)g(but)g(users)f(should)i(b)q (e)f(a)o(w)n(are)f(of)g(the)h(race)g(b)q(et)o(w)n(een)0 1767 y(this)h(deallo) r(cation)f(and)h(the)f(serv)o(er)g(deallo)r(cating)h(b)q(ecause)g(a)f(time-sl\ ice)i(has)e(ended.)0 1889 y fj(C.2.4)56 b(T)-5 b(ask-ho)q(ok)19 b(In)n(terfac\ e)0 1975 y fn(Finally)n(,)i(there)f(is)h(the)f fk(task-ho)n(ok)g fn(interface\ ,)h(whic)o(h)g(com)n(bines)h(the)e(functionality)g(of)g(the)g(ho)r(ok)g(in)o (terface)0 2031 y(with)c(the)f(serv)o(er)g(optimization)i(of)e(the)g(task)g (in)o(terface;)g(the)h(calls)g(in)g(this)g(interface)f(are)g(the)g(ho)q(ok)h (in)o(terface)0 2087 y(calls)i(with)g fk(task)s 14 2 v 31 w fn(pre\014xed.)27 b(Users)18 b(should)g(note)f(that)g(the)g(interfaces)g(are)g(indep)s(endent;) g(pro)q(cessors)g(m)o(ust)0 2144 y(b)r(e)e(deallo)r(cated)h(with)f(the)g(deal\ lo)s(cate)g(call)h(from)e(the)i(same)f(in)o(terface)g(that)g(w)n(as)g(used)h (to)e(allo)r(cate)h(them.)p eop %%Page: 101 112 bop 0 506 a ff(App)s(endix)34 b(D)0 714 y fi(Thread)7 b 36 2 v 35 w(switc)m (h)40 b(In)m(terface)0 936 y fn(This)16 b(app)q(endix)h(do)q(cuments)d(the)i (k)n(ernel)h(in)o(terface)e(to)g fk(thr)n(e)m(ad)t 14 2 v 14 w(switch)g fn (and)g(related)h(calls)g(that)e(p)r(erform)g(Dis-)0 993 y(couragemen)o(t)h (and)g(Hando\013)g(Sc)o(heduling.)0 1083 y fa(kern_return_t)22 b(thread_switc\ h\(new_thread,)f(option,)h(time\))191 1139 y(thread_t)70 b(new_thread;)191 1196 y(int)190 b(option;)191 1252 y(int)g(time;)71 1342 y fk(thr)n(e)m(ad)t 14 2 v 14 w(switch)14 b fn(pro)o(vides)h(lo)o(w-level)h(access)e(to)g(the)h(sc)o (heduler's)h(con)o(text)e(switc)o(hing)i(co)q(de.)k fk(new)r 14 2 v 14 w(thr) o(e)m(ad)15 b fn(is)0 1399 y(a)h(hint)g(that)g(implements)g(hando\013)h(sc)n (heduling.)26 b(The)17 b(op)q(erating)f(system)g(will)j(attempt)c(to)h(switc) o(h)g(directly)0 1455 y(to)j(the)g(new)h(thread)f(\(b)o(ypassing)g(the)h(norm\ al)f(logic)h(that)f(selects)h(the)f(next)h(thread)f(to)g(run\),)h(if)f(p)r (ossible.)0 1512 y(Since)h(this)f(is)g(a)f(hint,)h(it)g(ma)n(y)g(b)q(e)g(inco\ rrect;)h(it)f(is)g(ignored)g(if)g(it)g(do)q(esn't)f(sp)r(ecify)h(a)g(thread)f (on)g(the)h(same)0 1568 y(host)c(as)f(the)h(current)f(thread)h(or)g(if)g(that) f(thread)h(can't)g(b)q(e)g(switc)o(hed)h(to)e(\(not)h(runnable)h(or)e(already) i(running)0 1624 y(on)g(another)g(pro)q(cessor\).)22 b(In)17 b(this)g(case,)f (the)g(normal)h(logic)g(to)e(select)i(the)g(next)f(thread)g(to)g(run)g(is)h (used;)g(the)0 1681 y(curren)o(t)e(thread)g(ma)n(y)h(con)o(tin)o(ue)f(running) i(if)e(there)h(is)f(no)h(other)e(appropriate)i(thread)f(to)f(run.)71 1737 y (Options)i(for)e fk(option)i fn(are)e(de\014ned)j(in)f(.)21 b(Three)15 b(options)h(are)f(recognized:)56 1820 y (1.)22 b fa(SWITCH_OPTION_NONE)12 b fn({)j(No)g(options,)g fk(time)g fn(is)h (ignored.)56 1909 y(2.)22 b fa(SWITCH_OPTION_WAIT)11 b fn({)j(The)h(thread)f (is)h(blo)q(c)o(k)o(ed)g(for)e(the)i(sp)q(eci\014ed)h fk(time)p fn(.)k(This) 15 b(can)f(b)q(e)h(ab)q(orted)f(b)o(y)114 1965 y fk(thr)n(e)m(ad)t 14 2 v 14 w (ab)m(ort)p fn(.)56 2054 y(3.)22 b fa(SWITCH_OPTION_DEPRESS)17 b fn({)i(The)h (thread's)g(priorit)o(y)g(is)g(depressed)h(to)f(the)g(lo)o(w)n(est)g(p)q(ossi\ ble)i(v)m(alue)114 2111 y(for)16 b fk(time)p fn(.)26 b(The)18 b(priorit)o(y)f (is)h(reset)f(b)o(y)g(the)g(sc)o(heduler)i(running)f(the)f(thread)h(again,)f (expiration)h(of)f(the)114 2167 y(timeout,)d(or)h(a)g fk(thr)n(e)n(ad-ab)n (ort)h fn(op)q(eration)f(on)h(this)f(thread.)0 2249 y(The)10 b(priority)g(dep\ ression)h(is)g(indep)s(enden)o(t)f(of)g(op)q(erations)g(that)g(c)o(hange)g (the)g(thread's)g(priorit)o(y)g(\(e.g.,)f fk(thr)n(e)m(ad)t 14 2 v 14 w(prior\ ity)0 2306 y fn(will)23 b(not)e(ab)r(ort)f(the)i(depression\).)40 b(The)22 b (minimum)f(time)h(and)g(units)g(of)f(time)h(can)g(b)r(e)f(obtained)i(as)e(the) 0 2362 y fk(min)r 14 2 v 14 w(time)n(out)c fn(v)n(alue)g(from)f fk(host)s 14 2 v 14 w(info)p fn(.)23 b fk(thr)n(e)n(ad)s 14 2 v 14 w(switch)16 b fn(is)h(an) f(optimized)i(trap)e(that)g(op)q(erates)g(on)g(the)h(thread)0 2419 y(that)d (inv)o(ok)n(es)i(it.)71 2475 y(Users)h(should)i(b)q(ew)o(are)e(of)h(calling)h fk(thr)n(e)n(ad)s 14 2 v 14 w(switch)f fn(with)g(an)f(inv)m(alid)i(hint)e(\(e\ .g.,)f fa(THREAD_NULL)p fn(\))g(and)i(no)0 2532 y(option.)i(Because)15 b(the) g(time-sharing)g(sc)o(heduler)h(v)m(aries)f(the)g(priorit)o(y)g(of)f(threads) g(based)h(on)f(usage,)h(this)g(ma)n(y)0 2588 y(result)j(in)h(a)f(w)n(aste)f (of)h(cpu)g(time)h(if)f(the)g(thread)g(that)f(m)n(ust)h(b)q(e)g(run)h(is)f (of)f(lo)o(w)o(er)h(priorit)o(y)l(.)28 b(The)18 b(use)g(of)g(the)0 2645 y(DEP\ RESS)e(option)f(in)h(this)g(situation)f(is)h(highly)h(recommended.)71 2701 y fk(thr)n(e)m(ad)t 14 2 v 14 w(switch)d fn(ignores)g(p)q(olicies.)22 b(Users) 14 b(relying)h(on)f(the)g(preemption)h(seman)o(tics)g(of)e(a)h(\014xed)h(time) f(p)r(olicy)0 2757 y(should)21 b(b)q(e)f(a)n(w)o(are)f(that)g fk(thr)n(e)n (ad)s 14 2 v 14 w(switch)h fn(ignores)f(these)h(seman)o(tics;)i(it)e(will)h (run)f(the)g(sp)q(eci\014ed)h fk(new)s 14 2 v 14 w(thr)n(e)m(ad)0 2814 y fn (indep)s(endent)15 b(of)f(its)i(priorit)o(y)f(and)h(the)f(priorit)o(y)g(of)g (an)o(y)g(other)g(threads)g(that)f(could)i(b)r(e)f(run)h(instead.)939 2927 y (101)p eop %%Page: 102 113 bop 0 506 a ff(App)s(endix)34 b(E)0 714 y fi(Timer)41 b(In)m(terface)0 936 y fn(This)18 b(app)r(endix)g(describ)s(es)f(the)h(interface)f(to)g(the)g(mo)q (dule)i(that)e(implements)g(the)h(accurate)f(timers)h(within)0 993 y(the)i (k)n(ernel.)34 b(It)20 b(is)g(only)g(a)n(v)n(ailable)h(within)g(the)e(k)o(ern\ el;)j(applications)g(can)d(obtain)h(usage)f(times)h(from)f(the)0 1049 y(timer\ s)c(via)h(the)f fk(task)s 14 2 v 14 w(info)f fn(and)i fk(thr)n(e)n(ad)s 14 2 v 14 w(info)f fn(k)n(ernel)i(op)q(erations.)71 1106 y(Eac)n(h)e(thread)g(has)g (b)q(oth)g(a)f(user-mo)q(de)i(and)f(a)f(system-mo)q(de)h(timer.)20 b(In)c(add\ ition,)f(there)g(is)g(at)g(least)g(one)0 1162 y(set)h(of)f(k)o(ernel)i(o)o (v)n(erhead)g(timers)f(\(a)f(set)h(of)g(k)n(ernel)h(timers)f(consists)h(of)e (one)h(p)r(er)g(pro)q(cessor\).)22 b(In)16 b(addition)h(to)0 1219 y(the)d(tim\ er)h(data)e(structures,)h(this)h(mo)q(dule)g(also)f(maintains)g(a)g(data)g (structure)g(that)f(indicates)j(the)e(currently)0 1275 y(running)i(timer)f (for)f(eac)n(h)h(pro)q(cessor)g(in)g(the)g(system)f(\(there)g(is)i(alw)n(a)o (ys)e(exactly)h(one)g(running)h(timer)f(for)f(eac)o(h)0 1332 y(pro)q(cessor)h (at)g(an)n(y)g(time\).)0 1472 y fe(E.1)69 b(Initializati)o(on)20 b(Routines)0 1575 y fj(E.1.1)55 b(Master)18 b(Initialization:)23 b(init)r 17 2 v 17 w(time\ rs)0 1661 y fa(init_timers\(\))71 1747 y fk(Init)q 14 2 v 14 w(timers)e fn (is)h(called)g(b)o(y)f(the)g(master)f(pro)q(cessor)h(\(\014rst)f(pro)q(cessor\ \))h(during)h(the)f(b)q(o)q(ot)f(sequence.)39 b(It)0 1803 y(initializes)18 b (all)e(of)f(the)g(o)o(v)o(erhead)g(timers)h(and)f(starts)f(a)h(k)n(ernel)i (o)n(v)o(erhead)e(timer)h(for)e(the)i(master)e(pro)q(cessor.)0 1922 y fj(E.1.\ 2)55 b(Sla)n(v)n(e)19 b(Initialization:)j(start)s 17 2 v 17 w(timer)0 2008 y fa(start_timer\(timer\))191 2064 y(timer_t)190 b(timer;)71 2150 y fk(Start)s 14 2 v 13 w(timer)18 b fn(is)g(called)h(once)f(b)o(y)f(eac)o(h)h(pro)q(cessor) f(in)i(the)e(b)r(o)q(ot)g(sequence)h(to)f(start)f(its)i(k)o(ernel)g(o)o(v)n (erhead)0 2207 y(timer.)i(The)c(master)f(pro)q(cessor)g(calls)h(it)g(from)e fk (init)s 14 2 v 14 w(timers)p fn(,)h(and)g(sla)o(v)o(es)g(call)i(it)e(directly) i(from)e(their)h(startup)0 2263 y(co)q(de.)0 2382 y fj(E.1.3)55 b(T)-5 b(ermi\ nation)0 2468 y fn(There)15 b(is)h(curren)o(tly)g(no)f(termination)h(routine) f(to)g(stop)g(a)f(timer)i(for)e(a)h(pro)q(cessor)g(that)g(exits)g(the)h(syste\ m.)0 2608 y fe(E.2)69 b(T)-6 b(rap)24 b(and)g(Con)n(text)e(Switc)n(h)g(Routin\ es)0 2710 y fn(These)12 b(routines)g(are)f(called)i(b)o(y)f(the)f(trap)g(and) h(con)o(text)f(switc)o(h)h(co)q(de)g(to)f(switc)o(h)g(the)h(running)h(timer.) 18 b(They)12 b(are)0 2766 y(all)k(v)o(ersions)f(of)g(the)g fl(Switc)o(h)g fn (op)q(eration;)g(stop)f(one)h(timer)h(and)f(start)e(another)i(using)h(the)f (same)f(timestamp.)0 2823 y(Implementors)g(will)j(probably)f(w)n(an)o(t)e(to) h(use)g(inline)i(assem)o(bly)f(language)f(for)f(these)h(routines)h(to)e(gain) h(sp)r(eed.)939 2927 y(102)p eop %%Page: 103 114 bop 0 50 a fg(APPENDIX)15 b(E.)30 b(TIMER)16 b(INTERF)-5 b(A)o(CE)1104 b fn (103)0 195 y fj(E.2.1)55 b(T)-5 b(rap)19 b(En)o(try:)k(time)q 17 2 v 17 w(tra\ p)t 17 2 v 16 w(uen)o(try)0 281 y fa(time_trap_uentry\(ts\))191 337 y(unsigne\ d)190 b(ts;)71 444 y fk(Time)r 14 2 v 14 w(tr)n(ap)s 14 2 v 14 w(uentry)23 b fn(do)q(es)g(trap)f(en)o(try)g(timing.)43 b(The)23 b(caller)h(m)o(ust)e(lo)r (c)o(k)g(out)g(interrupts)g(and)h(tak)n(e)g(a)0 500 y(timestamp.)c fk(ts)c fn (is)g(a)f(timestamp)h(tak)n(en)g(after)f(in)o(terrupts)h(are)f(lo)r(c)o(k)n (ed)h(out.)20 b(This)15 b(routine)g(stops)f(the)h(curren)o(t)0 557 y(timer)20 b(on)g(this)h(pro)q(cessor)f(and)g(starts)f(the)h(system)g(timer)g(for)g(the) g(curren)o(t)g(thread.)34 b(The)21 b(curren)o(t)f(timer)0 613 y(\(whic)o(h)15 b(m)n(ust)f(b)r(e)g(the)g(user)h(timer)f(for)g(the)g(curren)o(t)g(thread\))g (is)g(c)o(heck)n(ed)h(for)e(o)o(v)o(er\015o)n(w,)h(and)g fk(timer)t 14 2 v 13 w(normalize)0 669 y fn(is)i(called,)g(if)g(needed.)21 b(This)16 b(routine)f (m)o(ust)g(only)h(b)q(e)g(called)g(if)g(the)f(trap)g(w)o(as)f(from)h(user)g (mo)q(de.)0 791 y fj(E.2.2)55 b(T)-5 b(rap)19 b(Exit:)k(time)q 17 2 v 17 w (trap)t 17 2 v 16 w(uexit)0 877 y fa(time_trap_uexit\(ts\))191 933 y(unsigned) 190 b(ts;)71 1040 y fk(Time)r 14 2 v 14 w(tr)n(ap)s 14 2 v 14 w(uexit)11 b fn (do)q(es)f(trap)g(exit)h(timing.)19 b(The)11 b(caller)g(m)o(ust)f(lo)q(c)o (k)h(out)f(in)o(terrupts)g(and)h(tak)n(e)f(a)g(timestamp.)0 1096 y fk(ts)18 b fn(is)g(a)g(timestamp)g(tak)n(en)g(after)g(in)o(terrupts)g(are)f(lo)r(c)o(k)o (ed)h(out.)28 b(This)19 b(routine)f(stops)g(the)g(curren)o(t)g(timer)g(on)0 1153 y(this)e(pro)q(cessor)f(and)g(starts)f(the)h(user)h(timer)f(for)g(the)g (curren)o(t)g(thread.)20 b(The)15 b(current)f(timer)i(\(whic)o(h)f(m)o(ust)g (b)r(e)0 1209 y(the)i(system)f(timer)h(for)f(the)h(curren)o(t)g(thread\))f (is)h(c)o(hec)o(k)o(ed)g(for)f(o)o(v)o(er\015o)n(w,)h(and)g fk(timer)s 14 2 v 14 w(normalize)f fn(is)h(called,)h(if)0 1266 y(needed.)j(This)16 b(routine)g (m)n(ust)f(only)h(b)r(e)f(called)i(if)e(the)h(trap)e(return)h(is)h(to)f(user) g(mo)q(de.)0 1387 y fj(E.2.3)55 b(In)n(terrupt)18 b(En)o(try:)23 b(time)q 17 2 v 17 w(in)n(t)t 17 2 v 16 w(en)n(try)0 1473 y fa(timer_t)g(time_int_entry\(ts\ ,new_tim)o(er\))191 1530 y(unsigned)g(ts;)191 1586 y(timer_t)47 b(new_timer;) 71 1692 y fk(Time)r 14 2 v 14 w(int)r 14 2 v 14 w(entry)19 b fn(do)r(es)g(int\ errupt)g(en)o(try)g(timing.)34 b(The)20 b(caller)h(m)n(ust)f(lo)q(c)o(k)g(out) f(in)o(terrupts)h(and)f(tak)n(e)h(a)0 1749 y(timestamp.)g fk(ts)14 b fn(is)i (a)e(timestamp)h(tak)n(en)h(after)e(interrupts)g(are)h(lo)q(c)o(k)o(ed)g(out.) 20 b fk(new)r 14 2 v 14 w(timer)c fn(is)f(the)g(new)g(timer)g(to)0 1805 y(swi\ tc)o(h)h(to.)21 b(This)c(routine)f(stops)f(the)h(current)f(timer)h(and)g(swit\ c)o(hes)g(to)g(the)g(new)g(timer)g(\(whic)o(h)g(m)o(ust)f(b)r(e)h(an)0 1862 y (o)n(v)o(erhead)h(timer)f(for)g(the)h(curren)o(t)f(pro)q(cessor\).)23 b(This) 17 b(routine)f(returns)h(the)f(timer)h(that)e(w)o(as)h(running)h(when)0 1918 y (it)e(w)o(as)f(called;)i(this)g(timer)f(\(p)q(oin)o(ter)g(to)f(data)g(structu\ re\))g(MUST)h(b)q(e)g(pushed)h(on)o(to)e(the)h(stac)o(k)f(b)o(y)h(the)g(calle\ r,)0 1975 y(or)g(otherwise)g(sa)n(v)o(ed)h(for)e fk(time)s 14 2 v 14 w(int)s 14 2 v 14 w(exit)p fn(.)0 2096 y fj(E.2.4)55 b(In)n(terrupt)18 b(Exit:)24 b (time)q 17 2 v 16 w(in)n(t)t 17 2 v 16 w(exit)0 2182 y fa(time_int_exit\(ts,) e(old_timer\))191 2238 y(unsigned)h(ts;)191 2295 y(timer_t)47 b(old_timer;)71 2401 y fk(Time)r 14 2 v 14 w(int)r 14 2 v 14 w(exit)15 b fn(do)q(es)f(interru\ pt)g(exit)h(timing.)20 b(The)15 b(caller)h(m)n(ust)e(lo)r(c)o(k)g(out)g(inter\ rupts)g(and)h(tak)n(e)f(a)g(times-)0 2458 y(tamp.)19 b fk(ts)c fn(is)h(a)f (timestamp)g(tak)n(en)g(after)g(in)o(terrupts)g(are)g(lo)q(c)o(k)o(ed)h(out.) j fk(old)s 14 2 v 14 w(timer)c fn(is)h(the)f(timer)g(v)n(alue)h(pushed)0 2514 y(on)o(to)g(the)g(stac)o(k)g(or)g(otherwise)h(sa)n(v)o(ed)g(after)f fk(time)s 14 2 v 14 w(int)r 14 2 v 14 w(entry)h fn(returned)g(it.)24 b(This)17 b(routin\ e)g(stops)f(the)h(curren)o(t)0 2571 y(timer)h(and)h(switc)o(hes)f(to)g fk(old) s 14 2 v 13 w(timer)p fn(.)29 b(Both)18 b(the)h(curren)o(t)f(timer)g(and)g fk (old)s 14 2 v 14 w(timer)h fn(are)e(c)o(heck)n(ed)i(for)e(o)o(v)o(er\015o)n (w,)0 2627 y(and)e fk(timer)s 14 2 v 14 w(normalize)g fn(is)h(called,)g(if)g (needed.)p eop %%Page: 104 115 bop 0 50 a fg(APPENDIX)15 b(E.)30 b(TIMER)16 b(INTERF)-5 b(A)o(CE)1104 b fn (104)0 195 y fj(E.2.5)55 b(Con)o(text)17 b(Switc)o(h:)24 b(timer)q 17 2 v 17 w (switc)n(h)0 281 y fa(timer_switch\(new_timer\))191 337 y(timer_t)f(new_timer\ ;)71 444 y fk(Timer)r 14 2 v 14 w(switch)h fn(switc)o(hes)h(to)f(a)g(new)h (timer.)48 b(It)24 b(uses)h(the)f(mac)o(hine)i(dep)r(endent)e(routine)h(or)f (macro)0 500 y fa(get_timestamp\(\))8 b fn(to)i(obtain)g(a)g(timestamp)g(whic) o(h)h(is)f(used)h(to)f(stop)f(the)i(curren)o(t)f(timer)g(and)g(start)f fk(new) s 14 2 v 13 w(timer)p fn(.)0 557 y(The)15 b(current)f(timer)h(is)h(c)o(hec)o (k)o(ed)f(for)g(o)n(v)o(er\015o)o(w)g(and)g fk(timer)s 14 2 v 14 w(normalize) f fn(is)i(called)g(if)g(needed.)21 b(The)15 b(caller)h(m)o(ust)0 613 y(lo)r (c)o(k)f(out)g(in)o(terrupts.)0 756 y fe(E.3)69 b(Basic)22 b(Timer)f(Op)r(era\ tions)0 858 y fn(This)16 b(section)g(describ)s(es)g(the)f(basic)i(routines)f (that)e(normalize)j(a)e(timer)h(and)g(read)f(its)h(v)n(alue.)21 b(These)16 b (are)g(the)0 914 y(routines)g(that)e(incorp)r(orate)h(the)g(sync)o(hronizatio\ n)h(derived)f(from)g(Lamp)q(ort's)f(clo)r(c)o(k)h(algorithm[31)o(].)0 1036 y fj(E.3.1)55 b(Normalize:)22 b(timer)q 17 2 v 16 w(normalize)0 1122 y fa(timer\ _normalize\(timer\))191 1178 y(timer_t)190 b(timer;)71 1284 y fk(Timer)r 14 2 v 14 w(normalize)18 b fn(normalizes)h(a)f(timer)g(v)m(alue.)30 b(It)18 b(is)h (called)h(from)d(the)h(trap,)g(interrupt,)g(and)g(con)o(text)0 1341 y(switc)o (h)c(routines)g(if)h(the)e(most)g(signi\014can)q(t)g(bit)h(in)h(the)f(lo)o (w)g(order)f(accum)o(ulated)i(time)f(w)n(ord)g(is)g(set)g(in)h(a)e(timer.)0 1463 y fj(E.3.2)55 b(Read:)24 b(timer)q 17 2 v 17 w(grab)0 1548 y fa(timer_gr\ ab\(timer,)e(save\))191 1605 y(timer_t)214 b(timer;)191 1661 y(timer_save_t) 94 b(save;)71 1768 y fk(Timer)r 14 2 v 14 w(gr)n(ab)14 b fn(is)g(the)g(basic) h fl(Read)f fn(routine)h(for)e(timers.)20 b(It)14 b(returns)g(a)f(sa)o(v)n (e)h(v)n(alue,)h(whic)o(h)f(is)h(a)e(cop)o(y)h(of)g(the)0 1824 y(lo)o(w)h(and) g(high)h(order)f(accum)o(ulated)h(time)g(\014elds)g(of)f(the)g(timer)h(that)e (is)i(guaran)n(teed)g(to)e(b)r(e)h(consisten)o(t.)0 1946 y fj(E.3.3)55 b(Read) 18 b(Routines)0 2032 y fn(These)j(routines)g(read)f(accum)o(ulated)h(time)g (v)m(alues)g(from)f(timers.)35 b(A)21 b fa(time_value_t)d fn(con)o(tains)j (\014elds)g(for)0 2088 y(seconds)16 b(and)f(microseconds.)0 2210 y fj(E.3.4) 55 b(Read)18 b(a)h(Timer:)k(timer)p 17 2 v 17 w(read)0 2296 y fa(timer_read\(\ timer,)f(tv\))191 2352 y(timer_t)142 b(timer;)191 2408 y(time_value_t)22 b (*tv;)71 2515 y fk(Timer)r 14 2 v 14 w(r)n(e)m(ad)e fn(reads)g(the)f(v)m(alue) i(of)e(a)g(timer)g(and)h(returns)f(it)h(normalized)g(in)h(second)e(and)h(micr\ osecond)0 2571 y(units.)p eop %%Page: 105 116 bop 0 50 a fg(APPENDIX)15 b(E.)30 b(TIMER)16 b(INTERF)-5 b(A)o(CE)1104 b fn (105)0 195 y fj(E.3.5)55 b(Read)18 b(b)r(oth)h(Thread)f(Timers:)23 b(thread)s 17 2 v 17 w(read)s 17 2 v 17 w(times)0 281 y fa(thread_read_times\(thread,)d (user_time_p,)j(system_time_p\))191 337 y(thread_t)190 b(thread;)191 394 y (time_value_t)94 b(*user_time_p;)191 450 y(time_value_t)g(*system_time_p;)71 542 y fk(thr)n(e)m(ad)t 14 2 v 14 w(r)m(e)n(ad)s 14 2 v 14 w(times)13 b fn (reads)g(the)g(v)m(alues)h(of)e(b)r(oth)h(the)g(user)g(and)g(system)g(timers) g(for)f(a)h(sp)q(eci\014ed)i(thread)e(and)0 598 y(returns)i(them)g(normalized) i(in)f(second)f(and)h(microsecond)g(units.)0 740 y fe(E.4)69 b(Sc)n(heduler) 22 b(In)n(terface)0 841 y fn(This)16 b(section)g(describ)r(es)f(the)h(routine\ s)f(used)h(b)o(y)f(the)g(sc)o(heduler)i(to)e(obtain)g(usage)g(timing)h(inform\ ation.)0 961 y fj(E.4.1)55 b(Delta:)24 b(timer)p 17 2 v 17 w(delta)0 1047 y fa (unsigned)f(timer_delta\(timer,)e(save\))191 1103 y(timer_t)214 b(timer;)191 1160 y(timer_save_t)94 b(save;)71 1251 y fk(Timer)r 14 2 v 14 w(delta)18 b fn (tak)n(es)f(the)h(di\013erence)g(of)f(a)h(sa)n(v)o(ed)g(timer)f(v)n(alue)h (and)f(the)h(curren)o(t)f(one,)h(and)g(up)r(dates)f(the)0 1308 y(sa)n(v)o(ed) i(v)m(alue)g(to)e(curren)o(t.)28 b(The)19 b(di\013erence)g(is)f(returned)h (as)e(a)h(function)h(v)m(alue.)29 b(This)19 b(routine)g(handles)g(the)0 1364 y (general)d(case)f(in)h(which)f(the)g(high)h(order)f(sa)o(v)n(e)h(v)m(alue)g (and)g(the)f(high)h(order)f(timer)g(v)n(alue)g(ma)o(y)g(not)g(matc)n(h.)0 1484 y fj(E.4.2)55 b(F)l(ast)18 b(Delta:)24 b(TIMER)s 17 2 v 17 w(DEL)-6 b(T)l(A)0 1570 y fa(TIMER_DELTA\(timer,)21 b(save,)j(result\))191 1626 y(timer_t)214 b (timer;)191 1683 y(timer_save_t)94 b(save;)191 1739 y(unsigned)190 b(result;) 71 1831 y fk(TIMER)q 14 2 v 14 w(DEL)l(T)l(A)19 b fn(is)g(a)g(macro)f(form)g (of)h fk(timer)s 14 2 v 14 w(delta)g fn(that)f(optimizes)i(the)f(common)g(cas\ e)g(of)f(the)h(high)0 1888 y(sa)n(v)o(e)d(v)n(alue)g(and)g(high)h(timer)f(v)m (alue)h(matc)n(hing.)23 b(If)16 b(these)g(v)m(alues)h(don't)e(matc)n(h,)h fk (timer)s 14 2 v 14 w(delta)g fn(is)g(called)i(to)d(do)0 1944 y(this)h(op)q (eration)f(the)g(slo)o(w)g(w)o(a)n(y)m(.)0 2064 y fj(E.4.3)55 b(Delta)18 b (for)h(Sc)n(heduler:)k(thread)t 17 2 v 16 w(timer)q 17 2 v 17 w(delta)0 2150 y fa(thread_timer_delta\(thread\))191 2206 y(thread_t)190 b(thread;)71 2298 y fk (Thr)m(e)n(ad)s 14 2 v 14 w(timer)s 14 2 v 14 w(delta)10 b fn(up)r(dates)g (the)g(sc)o(heduler's)h(timer)f(information)h(for)e(a)h(thread.)18 b(It)10 b (calls)i fk(TIMER)q 14 2 v 14 w(DEL)l(T)l(A)0 2354 y fn(on)j(b)q(oth)f(the)h (system)f(and)h(user)g(timers)f(for)g(the)h(thread,)f(and)h(up)r(dates)f(the) h(corresp)q(onding)h(sa)n(v)o(e)e(v)n(alues)h(\(all)0 2411 y(in)20 b(the)f (thread's)f(data)g(structure\).)31 b(The)19 b(delta)g(v)n(alues)h(are)e(used) i(to)e(k)o(eep)h(running)h(coun)o(ts)f(of)f(cpu)i(usage)0 2467 y(\(un)o(w)n (eighted\))c(and)h(sc)o(heduler)h(usage)f(\(w)n(eighted)f(b)o(y)h(o)n(v)o(erl\ oad)g(factor\).)23 b(The)17 b(sc)o(heduler)h(uses)f(these)g(v)m(alues)0 2524 y (to)e(compute)g(p)q(ercent)g(cpu)h(usage)e(and)i(priorit)o(y)f(for)g(a)g(time\ sharing)h(thread,)e(resp)r(ectiv)o(ely)m(.)0 2665 y fe(E.5)69 b(Timestamps)21 b(and)j(Units)0 2766 y fn(This)17 b(section)g(describ)s(es)f(the)h(in)o(terfa\ ce)f(b)r(et)o(w)n(een)h(the)g(timer)f(co)q(de)h(and)g(the)g(source)f(of)g(tim\ estamps.)23 b(These)0 2823 y(interfaces)14 b(are)h(normally)h(de\014ned)h(in) f(the)f(mac)n(hine-dep)t(endent)g(header)g(\014le)h(mac)o(hine/timer.h.)p eop %%Page: 106 117 bop 0 50 a fg(APPENDIX)15 b(E.)30 b(TIMER)16 b(INTERF)-5 b(A)o(CE)1104 b fn (106)0 195 y fj(E.5.1)55 b(Obtain)19 b(Timestam)o(p:)j(get)s 17 2 v 16 w(time\ stamp)0 281 y fn(The)11 b fa(get_timestamp\(\))d fn(routine)j(or)f(macro)g (m)n(ust)g(return)h(a)f(32-bit)g(timestamp)h(from)e(the)i(timestamp)f(source.) 0 403 y fj(E.5.2)55 b(Describ)q(e)18 b(Timestamps)0 488 y fa(TIMER_MAX)f fn (de\014nes)h(the)g(v)n(alue)g(at)g(whic)o(h)g(the)g(timestamp)g(source)g(roll\ s)g(o)o(v)o(er.)27 b(If)19 b(the)e(di\013erence)j(b)q(et)o(w)n(een)0 545 y (t)n(w)o(o)g(timestamps)f(is)i(negativ)o(e,)g(this)f(v)m(alue)h(is)g(added)f (to)f(correct)h(for)f(the)h(\(assumed\))g(rollo)o(v)o(er.)34 b(No)19 b(such)0 601 y(correction)c(is)g(needed)h(for)e(timers)h(that)f(roll)i(o)n(v)o(er)f (at)f(their)h(full)h(32-bit)f(v)n(alue,)g(so)f fa(TIMER_MAX)g fn(is)h(not)f (de\014ned)0 658 y(for)h(them.)71 714 y fa(TIMER_RATE)g fn(de\014nes)j(the)f (rate)g(of)g(the)g(timestamp)g(source)g(in)h(coun)o(ts)e(p)r(er)h(second)h (\(hertz\).)25 b(It)17 b(is)g(used)0 771 y(b)o(y)e(the)g(sc)o(heduler)i(to)e (calculate)h(p)q(ercent)f(cpu)h(usage.)71 827 y fa(TIMER_HIGH_UNIT)f fn(de\ \014nes)j(the)f(n)o(um)o(b)r(er)g(of)g(timestamp)g(units)g(\()p fa(TIMER_RATE) f fn(p)q(er)i(second\))f(that)g(con-)0 884 y(stitute)f(one)h(unit)g(for)f(the) g(high)h(w)o(ord)f(of)g(the)g(timer.)24 b(Setting)17 b(this)g(to)e fa(TIMER_R\ ATE)g fn(causes)i(the)f(high)i(w)n(ord)0 940 y(to)d(use)g(units)h(of)f(second\ s.)0 1062 y fj(E.5.3)55 b(Unit)18 b(Adjustmen)n(t)0 1148 y fa(TIMER_ADJUST\(\ \))c fn(adjusts)i(for)g(timestamp)g(units)g(for)g(read)g(op)q(erations.)23 b (It)16 b(tak)n(es)h(a)f fa(timer_save_t)e fn(as)i(an)0 1204 y(argumen)o(t)d (and)h(con)o(v)n(erts)g(it)g(to)f(use)h(lo)o(w)f(units)i(of)e(microseconds)i (and)e(high)i(units)f(of)g(seconds.)19 b(This)c(is)f(a)f(n)o(ull)0 1261 y(op) q(eration)k(and)h(not)e(de\014ned)j(if)e(the)g(timer)h(lo)o(w)f(and)g(high)h (units)g(are)e(already)i(microseconds)f(and)h(seconds.)0 1317 y(The)d(timer)h (lo)o(w)f(unit)h(alw)o(a)n(ys)f(matc)n(hes)h(the)f(unit)h(of)f(the)g(timestam\ p)g(source.)71 1373 y fa(PRI_SHIFT)f fn(and)j fa(PRI_SHIFT_2)d fn(adjust)i (for)f(timestamp)h(units)h(for)e(sc)o(heduler)j(delta)e(op)q(erations.)23 b (They)0 1430 y(de\014ne)g(a)e(t)n(w)o(o)g(shift)h(and)f(add)h(or)f(subtract)g (optimization)h(as)f(describ)s(ed)h(in)g(Section)h(2.2.3,)e(except)h(that)0 1486 y fa(PRI_SHIFT_2)17 b fn(is)i(ignored)g(if)g(it)f(is)h(not)f(de\014ned.) 31 b(F)l(or)18 b(timestamp)g(units)i(of)e(microseconds,)h fa(PRI_SHIFT)e fn (is)0 1543 y(16)e(for)f(the)i(0{127)e(priorit)o(y)h(range,)g(and)g(18)g(for)f (the)i(0{31)e(priorit)o(y)h(range.)20 b fa(PRI_SHIFT_2)14 b fn(is)h(not)g(de\ \014ned)i(in)0 1599 y(these)e(cases.)20 b(These)15 b(shift)g(v)m(alues)h(can) e(b)r(e)h(used)g(to)f(calculate)i(the)f(appropriate)g(shifts)g(for)f(other)g (timestamp)0 1656 y(units.)p eop %%Page: 107 118 bop 0 527 a fi(Biblio)q(graph)m(y)23 750 y fn([1])21 b(Thomas)16 b(E.)g(Ande\ rson,)h(Edw)o(ard)f(D.)f(Lazo)o(wsk)m(a,)i(and)f(Henry)h(M.)e(Levy)m(.)24 b (The)16 b(P)o(erformance)g(Implica-)93 806 y(tions)g(of)f(Thread)h(Managemen) n(t)f(Alternatives)g(for)g(Shared-Memory)g(Multipro)r(cessors.)21 b fk(IEEE) 15 b(T)l(r)n(ans-)93 863 y(actions)h(on)g(Computers)p fn(,)f(38\(12\):1631{16) o(44,)d(Decem)o(b)q(er)j(1989.)23 954 y([2])21 b(A.)h(J.)f(Bernstein)i(and)f (J.)f(C.)h(Sharp.)39 b(A)21 b(Policy-Driv)q(en)h(Sc)o(heduler)h(for)e(a)g(Tim\ e-Sharing)i(System.)93 1010 y fk(Communic)n(ations)16 b(of)g(the)h(A)n(CM)p fn (,)e(14\(2\):74{78)o(,)d(F)l(ebruary)j(1971.)23 1101 y([3])21 b(Brian)30 b (N.)f(Bershad,)k(Thomas)c(E.)g(Anderson,)k(Edw)o(ard)c(D.)f(Lazo)o(wsk)m(a,) 33 b(and)c(Henry)h(M.)e(Levy)m(.)93 1157 y(Light)o(w)n(eight)18 b(Remote)g (Pro)q(cedure)h(Call.)29 b fk(A)o(CM)18 b(T)l(r)n(ansactions)g(on)h(Computer) h(Systems)p fn(,)d(8\(1\):37{55,)93 1214 y(F)l(ebruary)f(1990.)23 1305 y([4]) 21 b(Andrew)g(D.)e(Birrell.)35 b(An)20 b(Introduction)h(to)e(Programming)g (with)h(Threads.)34 b(T)l(ec)o(hnical)22 b(Rep)r(ort)d(35,)93 1361 y(Digital) d(Equipment)f(Corp)q(oration,)f(Systems)h(Research)g(Cen)o(ter,)g(P)n(alo)h (Alto,)e(CA,)h(1989.)23 1452 y([5])21 b(Rob)r(erto)c(Bisiani,)j(Andreas)e(No) n(w)o(atzyk,)f(and)h(Mosur)f(Ra)o(vishank)n(ar.)27 b(Coheren)o(t)17 b(Shared) h(Memory)f(on)93 1509 y(a)e(Message)f(Passing)h(Mac)n(hine.)21 b(T)l(ec)o(hni\ cal)c(Rep)r(ort)d(CMU-CS-88-204,)f(Sc)o(ho)q(ol)i(of)g(Computer)f(Science,)93 1565 y(Carnegie)i(Mellon)g(Universit)o(y)l(,)f(Pittsburgh,)g(P)l(A,)g(1988.) 23 1656 y([6])21 b(Rob)r(erto)c(Bisiani)i(and)f(Mosur)f(Ra)o(vishank)n(ar.)26 b(PLUS:)17 b(A)h(Distributed)g(Shared)g(Memory)f(System.)26 b(In)93 1713 y fk (Confer)m(enc)m(e)16 b(Pr)n(o)n(c)m(e)n(e)m(dings:)k(The)15 b(17th)i(Internat\ ional)d(Symp)n(osium)i(on)f(Computer)h(A)o(r)n(chite)n(ctur)n(e)p fn(,)e(page\ s)93 1769 y(115{124,)f(Ma)n(y)j(1990.)23 1860 y([7])21 b(Da)o(vid)i(Blac)o (k,)h(Ano)q(op)e(Gupta,)i(and)e(W)l(olf-Dietrich)h(W)l(eb)q(er.)41 b(Comp)q (etitive)22 b(Managemen)o(t)g(of)f(Dis-)93 1916 y(tributed)15 b(Shared)g(Memo\ ry)l(.)j(In)d fk(Pr)n(o)n(c)m(e)n(e)m(dings,)g(Spring)g(Comp)n(c)m(on)h('89)p fn(,)e(pages)g(184{190,)e(San)j(F)l(rancisco,)93 1973 y(CA,)g(F)l(ebruary)g (1989.)f(IEEE)h(Computer)g(So)q(ciety)l(.)23 2064 y([8])21 b(William)g(Bolosk\ y)l(.)29 b(P)o(ersonal)18 b(Comm)n(unication,)j(Septem)o(b)q(er)e(1988.)28 b (P)n(erformance)18 b(results)h(from)f(the)93 2120 y(Mac)o(h)d(implemen)q(tati\ on)g(on)g(the)g(A)o(CE)g(w)n(orkstation.)23 2211 y([9])21 b(William)e(J.)e (Bolosky)l(,)g(Rob)r(ert)g(P)l(.)f(Fitzgerald,)i(and)f(Mic)o(hael)h(L.)f(Scot\ t.)24 b(Simple)19 b(But)e(E\013ectiv)o(e)g(T)l(ec)o(h-)93 2268 y(niques)23 b (for)d(NUMA)h(Memory)f(Managemen)n(t.)37 b(In)21 b fk(Pr)n(o)n(c)m(e)n(e)n (dings)f(of)i(the)g(12th)g(A)o(CM)f(Symp)m(osium)h(on)93 2324 y(Op)n(er)n(ati\ ng)16 b(Systems)f(Principles)p fn(,)f(pages)h(19{31,)e(Decem)o(b)r(er)i(1989.) 0 2415 y([10])21 b(Ra)o(y)f(Bry)n(an)o(t.)32 b(The)20 b(RP3)f(Parallel)i(Comp\ uting)e(En)o(vironment.)32 b(In)20 b fk(Pr)m(o)n(c)n(e)m(e)n(dings)f(of)i(USE\ NIX)d(1988)93 2471 y(Sup)n(er)n(c)n(omputer)f(Workshop)p fn(,)f(pages)f(69{85\ ,)e(1988.)0 2562 y([11])21 b(Da)o(vid)i(Cheriton.)42 b(Uni\014ed)24 b(Managem\ en)n(t)e(of)g(Memory)g(and)h(File)g(Cac)o(hing)g(Using)g(the)g(V)f(Virtual)93 2619 y(Memory)g(System.)39 b(T)l(ec)o(hnical)24 b(Rep)r(ort)d(ST)l(AN-CS-88-1\ 192,)h(Computer)g(Science)i(Dept.,)e(Stanford)93 2675 y(Universit)o(y)l(,)15 b (Stanford,)f(CA,)h(1988.)0 2766 y([12])21 b(Eric)14 b(C.)f(Co)q(op)q(er)g(and) g(Richard)h(P)l(.)f(Dra)n(v)n(es.)k(C)c(Threads.)k(T)l(ec)o(hnical)e(Rep)r (ort)d(CMU-CS-88-154,)g(Sc)o(ho)r(ol)93 2823 y(of)j(Computer)g(Science,)i(Car\ negie)e(Mellon)h(Universit)o(y)l(,)f(June)h(1988.)939 2927 y(107)p eop %%Page: 108 119 bop 0 50 a fg(BIBLIOGRAPHY)1518 b fn(108)0 195 y([13])21 b(Alan)c(L.)g(Co)n (x)f(and)h(Rob)q(ert)f(J.)h(F)l(o)n(wler.)24 b(The)16 b(Implemen)q(tation)g (of)f(a)h(Coheren)o(t)g(Memory)g(Abstraction)93 252 y(on)f(a)g(NUMA)f(Multipr\ o)r(cessor:)20 b(Exp)q(eriences)c(with)f(PLA)m(TINUM.)k(In)d fk(Pr)m(o)n(c)n (e)m(e)n(dings)f(of)h(the)g(12th)h(A)o(CM)93 308 y(Symp)n(osium)g(on)f(Op)n (er)m(ating)g(Systems)g(Principles)p fn(,)d(pages)i(32{44,)e(Decem)o(b)r(er)i (1989.)0 402 y([14])21 b(W.)g(Cro)n(wther,)h(J.)e(Go)q(o)q(dh)o(ue,)j(E.)d (Starr,)i(R.)f(Thomas,)g(W.)f(Millik)q(en,)j(and)e(T.)f(Black)m(adar.)37 b (P)n(erfor-)93 458 y(mance)16 b(Mmeasuremen)n(ts)f(on)g(a)g(128-node)h(Butter\ \015y)f(P)n(arallel)i(Pro)q(cessor.)i(In)d fk(Intl.)e(Conf.)i(on)g(Par)n(al)r (lel)93 515 y(Pr)n(o)n(c)n(essing)p fn(,)d(pages)i(531{540,)e(1985.)0 609 y ([15])21 b(Ra)o(ymond)15 b(B.)f(Essic)o(k.)k(An)d(Ev)n(en)o(t-based)g(Fair-Sh\ are)f(Sc)o(heduler.)20 b(In)15 b fk(1990)h(USENIX)e(Winter)h(Confer-)93 665 y (enc)m(e)i(Pr)m(o)n(c)n(e)m(e)n(dings)p fn(,)d(pages)h(147{161,)e(Jan)o(uary) i(1990.)0 759 y([16])21 b(Dror)11 b(G.)f(F)l(eitelson)j(and)e(Larry)g(Rudolph\ .)16 b(Distributed)c(Hierarc)o(hical)h(Con)n(trol)e(for)g(Parallel)i(Processi\ ng.)93 815 y fk(COMPUTER)p fn(,)g(23\(5\):65{77,)f(Ma)n(y)j(1990.)0 909 y([17\ ])21 b(Amos)f(Fiat,)h(Richard)f(Karp,)h(Mic)o(hael)g(Lub)o(y)l(,)g(Lyle)g(McG\ eo)q(c)o(h,)g(Daniel)g(Sleator,)g(and)f(Neal)h(Y)l(oung.)93 966 y(Comp)q(etit\ ive)15 b(P)o(aging)f(Algorithms.)20 b(T)l(ec)o(hnical)d(Rep)r(ort)d(CMU-CS-86\ -164,)f(Sc)o(ho)r(ol)i(of)f(Computer)h(Sci-)93 1022 y(ence,)h(Carnegie)g(Mell\ on)g(Universit)o(y)l(,)e(Pittsburgh,)h(P)m(A,)f(1986.)0 1116 y([18])21 b(Ales\ sandro)15 b(F)l(orin,)f(Joseph)h(Barrera,)e(and)h(Richard)g(Sanzi.)19 b(The) 14 b(Shared)g(Memory)f(Serv)o(er.)18 b(In)d fk(Winter)93 1172 y(USENIX)k(Conf\ er)m(enc)m(e)i(Pr)n(o)m(c)n(e)n(e)m(dings)p fn(,)f(pages)g(229{244,)f(San)h (Diego,)g(CA,)g(F)l(ebruary)g(1989.)e(USENIX)93 1229 y(Asso)q(ciation.)0 1323 y([19])j(Armando)14 b(Garcia,)f(Da)n(vid)i(F)l(oster,)e(and)h(Richard)g(F)-5 b (reitas.)18 b(The)c(Adv)n(anced)g(Computing)g(En)o(vironmen)o(t)93 1379 y(Mul\ tipro)r(cessor)h(Workstation.)i(Research)d(Rep)s(ort)f(RC14491,)f(IBM)j(T.)f (J.)h(W)l(atson)e(Research)i(Cen)o(ter,)93 1435 y(Ha)o(wthorne,)g(NY,)f(1988.) 0 1529 y([20])21 b(Edw)o(ard)d(F.)g(Gehringer,)h(Daniel)h(P)l(.)e(Siewiorek,) i(and)e(Zary)g(Segall.)30 b fk(Par)n(al)r(lel)19 b(Pr)m(o)n(c)n(essing:)25 b (The)19 b(Cm*)93 1586 y(Exp)n(erienc)m(e)p fn(.)h(Digital)c(Press,)e(Ma)o(yna\ rd,)g(MA,)h(1987.)0 1680 y([21])21 b(Alan)h(Gottlieb.)38 b(The)21 b(NYU)g(Ult\ racomputer|Designing)i(a)d(MIMD)h(Shared-Memory)g(Computer.)93 1736 y fk(IEEE) 16 b(T)l(r)n(ansactions)f(on)h(Computers)p fn(,)f(C-32\(2\):175{18)o(9,)d(F)l (ebruary)j(1983.)0 1830 y([22])21 b(Mark)c(A.)f(Hollida)q(y)l(.)25 b(On)18 b (the)f(E\013ectiv)o(eness)h(of)e(Dynamic)i(Page)e(Placement.)25 b(T)l(ec)o (hnical)19 b(Rep)r(ort)e(CS-)93 1886 y(1989-19,)d(Departmen)n(t)h(of)g(Comput\ er)g(Science,)h(Duk)o(e)f(Universit)o(y)l(,)g(Durham,)f(NC,)h(1989.)0 1980 y ([23])21 b(Mark)d(A.)h(Holliday)l(.)31 b(Reference)20 b(History)l(,)g(Page)e (Size,)j(and)e(Migration)f(Daemons)g(in)i(Lo)q(cal/Remote)93 2037 y(Arc)o(hit\ ectures.)27 b(In)18 b fk(Thir)m(d)h(International)e(Confer)m(enc)m(e)h(on)g (A)n(r)n(chite)n(ctur)n(al)g(Supp)n(ort)h(for)g(Pr)m(o)n(gr)n(amming)93 2093 y (L)n(anguages)14 b(and)g(Op)n(er)n(ating)g(Systems)g(\(ASPLOS)e(III\))p fn (,)f(Boston,)i(MA,)f(April)j(1989.)d(A)o(CM/IEEE)g(Com-)93 2149 y(puter)k(So) q(ciet)o(y)m(.)0 2243 y([24])21 b(Herb)14 b(Jacobs.)k(A)13 b(User-tunable)i (Multiple)g(Pro)q(cessor)f(Sc)o(heduler.)k(In)d fk(1986)g(USENIX)e(Winter)i (Confer-)93 2300 y(enc)m(e)i(Pr)m(o)n(c)n(e)m(e)n(dings)p fn(,)d(pages)h(183{\ 191,)e(Jan)o(uary)i(1986.)0 2394 y([25])21 b(Anita)16 b(K.)e(Jones,)h(Rob)r (ert)g(J.)g(Chansler,)g(Jr.,)f(Iv)o(or)g(Durham,)h(Karsten)f(Sch)o(w)n(ans,)h (and)g(Sev)o(en)g(V)l(egdahl.)93 2450 y(StarOS,)h(A)h(Multipro)r(cessor)f(Op) r(erating)g(System)g(for)g(the)h(Supp)r(ort)f(of)g(Task)f(Forces.)23 b(In)17 b fk(Pr)n(o)n(c)m(e)n(e)n(dings)93 2506 y(of)g(the)f(7th)h(Symp)n(osium)f(on)h (Op)m(er)n(ating)f(Systems)f(Principles)p fn(,)f(pages)h(117{127,)e(Decem)o (b)q(er)i(1979.)0 2600 y([26])21 b(P)o(aul)i(A.)e(Karger.)40 b(Using)22 b(Reg\ isters)g(to)g(Optimize)h(Cross-Domain)f(Call)g(Performance.)40 b(In)22 b fk (Thir)n(d)93 2657 y(International)14 b(Confer)m(enc)m(e)g(on)h(A)o(r)m(chite) n(ctur)n(al)g(Supp)n(ort)g(for)g(Pr)n(o)n(gr)n(amming)f(L)m(anguages)h(and)g (Op)m(er)n(ating)93 2713 y(Systems)p fn(,)f(pages)h(194{204,)e(April)k(1989.) p eop %%Page: 109 120 bop 0 50 a fg(BIBLIOGRAPHY)1518 b fn(109)0 195 y([27])21 b(Anna)f(Karlin,)h (Mark)e(Manasse,)g(Lyle)h(McGeo)q(c)o(h,)g(and)g(Susan)f(Owicki.)32 b(Comp)q (etitive)19 b(Randomized)93 252 y(Algorithms)f(for)g(Non-Uniform)g(Problems.) 27 b(In)19 b fk(Pr)m(o)n(c)n(e)m(e)n(dings,)f(Symp)n(osium)h(on)f(Discr)n(ete) g(A)o(lgorithms,)93 308 y(1990)p fn(,)e(San)g(F)-5 b(rancisco,)16 b(CA,)e(Jan) o(uary)h(1990.)f(A)o(CM-SIAM.)0 402 y([28])21 b(Anna)26 b(Karlin,)j(Mark)24 b (Manasse,)j(Larry)e(Rudolph,)k(and)d(Daniel)g(Sleator.)50 b(Comp)q(etitiv)o (e)26 b(Sno)q(op)o(y)93 458 y(Cac)o(hing.)21 b fk(A)n(lgorithmic)n(a)p fn(,) 15 b(3\(1\):79{119,)d(1988.)0 552 y([29])21 b(La)o(wrence)e(J.)f(Kenah)h(and) f(Simon)h(F.)f(Bate.)28 b fk(V)-5 b(AX/VMS)18 b(Internals)g(and)h(Data)g(Stru\ ctur)o(es)p fn(.)28 b(Digital)93 609 y(Press,)15 b(Ma)n(ynard,)g(MA,)f(1984.) 0 702 y([30])21 b(Leslie)16 b(Lamp)r(ort.)h(Concurren)o(t)c(Reading)i(and)g (Writing.)j fk(Communic)m(ations)d(of)g(the)h(A)n(CM)p fn(,)d(20\(11\):806{) 93 759 y(811,)h(No)o(v)o(em)n(b)r(er)h(1977.)0 853 y([31])21 b(Leslie)h(Lamp) q(ort.)32 b(Concurren)o(t)19 b(Reading)i(and)f(Writing)g(of)f(Clo)q(c)o(ks.) 32 b(T)l(echnical)21 b(Rep)r(ort)e(27,)g(Digital)93 909 y(Equipmen)q(t)14 b (Corp)q(oration,)h(Systems)g(Researc)o(h)g(Cen)o(ter,)g(P)n(alo)h(Alto,)f(CA,) f(1988.)0 1003 y([32])21 b(Alan)14 b(Langerman,)f(Joseph)g(Bo)o(ykin,)h(Susan) f(LoV)l(erso,)g(and)g(Shashi)h(Mangalat.)h(A)e(Highly-Parallelize)q(d)93 1059 y(Mac)o(h-based)g(Vno)r(de)g(Filesystem.)k(In)c fk(Pr)n(o)n(c)m(e)n(e)n(dings) g(of)h(the)h(Winter)f(1990)h(USENIX)d(Confer)m(enc)m(e)p fn(,)h(pages)93 1116 y(297{312,)g(Jan)o(uary)i(1990.)0 1210 y([33])21 b(Richard)13 b(P)l(.)f(LaRo) o(w)o(e,)h(Jr.)f(and)h(Carla)f(S.)g(Ellis.)17 b(Exp)r(erimen)o(tal)c(Comparis\ on)f(of)g(Memory)g(Managemen)n(t)93 1266 y(Policies)18 b(for)c(NUMA)i(Multipr\ o)r(cessors.)k(T)l(ec)o(hnical)d(Rep)r(ort)e(CS-1990-10,)f(Departmen)n(t)h (of)g(Computer)93 1323 y(Science,)i(Duk)o(e)e(Universit)o(y)l(,)g(Durham,)f (NC,)h(1990.)0 1416 y([34])21 b(Sam)o(uel)e(J.)e(Le\017er,)h(Marshall)g(K.)g (McKusick,)f(Mic)o(hael)i(J.)e(Karels,)i(and)e(John)h(S.)g(Quarterman.)26 b fk (The)93 1473 y(Design)14 b(and)h(Implementation)f(of)h(the)g(4.3BSD)g(Unix)g (Op)m(er)n(ating)g(System)p fn(.)h(Addison-W)m(esley)m(,)e(Reading,)93 1529 y (MA,)h(1989.)0 1623 y([35])21 b(Charles)g(Leiserson.)35 b(Fat)19 b(Trees:)29 b (Universal)20 b(Net)o(w)n(orks)g(for)f(Hardw)n(are-E\016cient)h(Sup)r(ercompu\ ting.)93 1680 y fk(IEEE)c(T)l(r)n(ansactions)f(on)h(Computers)p fn(,)f(C-34\(\ 10\):892{9)o(01,)d(Octob)q(er)j(1985.)0 1773 y([36])21 b(Daniel)15 b(Lenoski,) g(Kouroush)f(Gharac)n(horlo)q(o,)f(James)h(Laudon,)g(Ano)q(op)g(Gupta,)f(John) h(Hennessy)m(,)g(Mark)93 1830 y(Horo)o(witz,)h(and)g(Monica)h(Lam.)k(Design)c (of)f(Scalable)i(Shared-Memory)e(Multipro)r(cessors:)20 b(The)c(D)n(ASH)93 1886 y(Approac)o(h.)d(In)e fk(Digest)h(of)g(Pap)n(ers,)h(Spring)e(Comp)n(c)n (on)h('90)p fn(,)f(pages)g(62{67,)e(San)i(F)l(rancisco,)h(CA,)e(F)l(ebruary) 93 1943 y(1990.)k(IEEE)h(Computer)g(So)r(ciet)o(y)l(.)0 2037 y([37])21 b(Kai) 14 b(Li)f(and)g(P)o(aul)g(Hudak.)j(Memory)c(Coherence)h(in)h(Shared)f(Virtual) h(Memory)e(Systems.)j(In)e fk(5th)i(Symp.)93 2093 y(on)h(Principles)f(of)i (Distribute)n(d)f(Computing)p fn(,)f(pages)g(229{239,)e(1986.)0 2187 y([38]) 21 b(Mark)13 b(Manasse,)g(Lyle)h(McGeo)q(c)o(h,)g(and)f(Daniel)i(Sleator.)i (Comp)q(etitiv)o(e)d(Algorithms)f(for)g(On-line)j(Prob-)93 2243 y(lems.)f(In) d fk(Pr)n(o)n(c)n(e)m(e)n(dings)g(of)h(the)h(20th)f(A)o(CM)f(Symp)n(osium)h (on)g(the)h(The)m(ory)f(of)h(Computing)p fn(,)e(pages)f(322{333.)93 2300 y (A)o(CM)k(SIGA)o(CT,)g(Ma)n(y)g(1988.)0 2394 y([39])21 b(Elliot)d(I.)e(Organi\ c)o(k.)23 b fk(The)17 b(Multics)f(System:)22 b(A)o(n)17 b(Examination)g(of)g (Its)f(Structur)o(e)p fn(.)22 b(MIT)16 b(Press,)g(Cam-)93 2450 y(bridge,)g (MA,)f(1972.)0 2544 y([40])21 b(G.)c(P\014ster,)h(W.)f(C.)g(Bran)o(tley)l(,)h (D.)f(A.)h(George,)f(S.)g(L.)h(Harv)n(ey)m(,)g(W.)f(J.)g(Kleinfelder,)k(K.)d (P)l(.)f(McAuli\013e,)93 2600 y(E.)f(A.)g(Melton,)g(V.)g(A.)f(Norton,)h(and)g (J.)g(W)l(eiss.)23 b(The)16 b(IBM)h(Researc)o(h)f(Parallel)i(Processor)e(Prot\ ot)n(yp)q(e:)93 2657 y(Introduction)22 b(and)f(Arc)o(hitecture.)37 b(In)21 b fk(Pr)n(o)n(c)m(e)n(e)n(dings)f(of)i(the)f(International)f(Confer)m(enc)m(e)i (on)f(Par)n(al)r(lel)93 2713 y(Pr)n(o)n(c)n(essing)p fn(,)13 b(pages)i(764{77\ 1.)e(IEEE)i(Computer)g(So)q(ciety)l(,)g(1985.)p eop %%Page: 110 121 bop 0 50 a fg(BIBLIOGRAPHY)1518 b fn(110)0 195 y([41])21 b(Richard)f(Rashid,) h(Av)n(adis)f(T)l(ev)n(anian,)g(Jr.,)g(Mic)o(hael)h(Y)l(oung,)f(Da)n(vid)h (Golub,)f(Rob)r(ert)f(Baron,)h(Da)n(vid)93 252 y(Black,)g(Jonathan)e(Chew,)i (and)f(William)i(Bolosky)m(.)31 b(Mac)n(hine-Indep)t(endent)19 b(Virtual)h (Memory)e(Man-)93 308 y(agemen)o(t)j(for)g(Paged)h(Unipro)r(cessor)f(and)h (Multipro)q(cessor)g(Arc)o(h)o(tectures.)38 b fk(IEEE)21 b(T)l(r)n(ansactions) g(on)93 364 y(Computers)p fn(,)16 b(37\(8\):896{9)o(08,)c(August)j(1988.)0 455 y([42])21 b(Richard)16 b(F.)e(Rashid.)21 b(Threads)15 b(of)g(a)g(New)g(System\ .)20 b fk(Unix)c(R)m(eview)p fn(,)f(4\(8\):37{49,)d(August)j(1986.)0 546 y ([43])21 b(Manfred)c(Rusc)o(hitzk)n(a)f(and)h(R.)f(S.)h(F)-5 b(abry)l(.)24 b (A)16 b(Unifying)i(Approac)o(h)e(to)g(Sc)o(heduling.)26 b fk(Communic)m(ation\ s)93 603 y(of)17 b(the)f(A)o(CM)p fn(,)e(20\(7\):469{477)o(,)e(July)k(1977.)0 694 y([44])21 b(Christoph)f(Sc)o(heurich)f(and)g(Michel)h(Dub)q(ois.)31 b(Dyn\ amic)20 b(Page)e(Migration)h(in)h(Multipro)r(cessors)e(with)93 750 y(Distribu\ ted)12 b(Global)f(Memory)-5 b(.)13 b fk(IEEE)d(T)m(r)m(ansactions)h(on)h(Comp\ uters)p fn(,)f(38\(8\):1154{116)o(3,)d(August)i(1989.)0 841 y([45])21 b(Mark) f(S.)g(Squillan)q(te)g(and)g(Edw)o(ard)g(D.)f(Lazo)o(wsk)m(a.)34 b(Using)21 b (Pro)q(cessor-Cac)n(he)g(A\016nit)o(y)f(Information)93 897 y(in)k(Shared-Memo\ ry)e(Multipro)r(cessor)g(Sc)o(heduling.)44 b(T)l(ec)o(hnical)24 b(Rep)s(ort)d (89-06-01,)i(Departmen)n(t)f(of)93 954 y(Computer)15 b(Science)i(and)f(Engine\ ering,)g(Universit)o(y)f(of)g(W)l(ashington,)g(Seattle,)g(W)-6 b(A,)15 b(1990\ .)0 1045 y([46])21 b(Je\013rey)16 b(H.)g(Straathof,)e(Ahok)i(K.)g(Thareja,)f (and)h(Ashok)g(K.)g(Agra)n(w)n(ala.)22 b(UNIX)17 b(Sc)o(heduling)h(for)d(Larg\ e)93 1101 y(Systems.)20 b(In)c fk(1986)h(USENIX)e(Winter)h(Confer)m(enc)m(e)g (Pr)n(o)n(c)m(e)n(e)n(dings)p fn(,)e(pages)h(111{139,)d(Jan)o(uary)j(1986.)0 1192 y([47])21 b(Av)n(adis)15 b(T)l(ev)m(anian,)g(Jr.)j fk(Ar)n(chite)n(ctur) n(e-Indep)m(endent)d(Virtual)g(Memory)h(Management)f(for)g(Par)n(al)r(lel)g (and)93 1249 y(Distribute)n(d)23 b(Envir)m(onments:)32 b(The)22 b(Mach)h(Appr) n(o)n(ach)p fn(.)39 b(PhD)22 b(thesis,)h(Carnegie)g(Mellon)f(Universit)o(y)l (,)93 1305 y(Pittsburgh,)15 b(P)l(A,)g(Decem)o(b)r(er)g(1987.)0 1396 y([48]) 21 b(Charles)d(P)l(.)f(Thac)n(k)o(er,)g(La)o(wrence)h(C.)e(Stew)o(art,)g(and) h(Edwin)h(H.)f(Satterw)n(aithe,)g(Jr.)26 b(Fire\015y)m(,)17 b(A)g(Multi-)93 1452 y(pro)q(cessor)e(W)l(orkstation.)k fk(IEEE)d(T)l(r)m(ansactions)g(on)g (Computers)p fn(,)f(8\(37\):909{92)o(0,)d(August)j(1988.)0 1543 y([49])21 b (Rob)r(ert)11 b(Thomas)g(and)h(Will)h(Cro)n(wther.)g(The)f(Uniform)g(System:) 17 b(An)12 b(approac)o(h)f(to)g(run)o(time)h(supp)r(ort)e(for)93 1600 y(large) j(scale)h(shared)e(memory)h(m)n(ultipro)r(cessors.)j(In)d fk(Pr)n(o)n(c.)h (of)g(1988)h(Int.)e(Conf.)g(on)h(Par)n(al)r(lel)f(Pr)n(o)n(c)m(essing,)93 1656 y(V)m(ol)j(II)p fn(,)e(pages)h(245{254,)e(1988.)0 1747 y([50])21 b(Hide)d(T)m (okuda,)e(James)h(W.)g(W)l(endorf,)g(and)g(Hua)o(y-Y)l(eng)g(W)l(ang.)25 b (Implementation)17 b(of)f(a)h(Time-Driv)o(en)93 1804 y(Scheduler)g(for)e(Real\ -Time)j(Op)r(erating)d(Systems.)22 b(In)17 b fk(Pr)m(o)n(c)n(e)m(e)n(dings)f (of)h(the)g(8th)h(IEEE)d(R)n(e)n(al-Time)h(Sys-)93 1860 y(tems)g(Symp)n(osium) p fn(,)f(Decem)o(b)r(er)g(1987.)0 1951 y([51])21 b(Andrew)j(T)l(uc)o(k)o(er)f (and)g(Ano)q(op)g(Gupta.)43 b(Pro)q(cess)23 b(Con)o(trol)f(and)i(Sc)o(hedulin\ g)h(Issues)f(for)e(Multipro-)93 2007 y(grammed)13 b(Shared)g(Memory)g(Multipr\ o)q(cessors.)j(In)e fk(Pr)n(o)n(c)m(e)n(e)m(dings)g(of)g(the)h(Twelfth)f(A)n (CM)g(Symp)m(osium)h(on)93 2064 y(Op)n(er)n(ating)h(Systems)f(Principles)p fn (,)f(pages)h(159{166,)e(Decem)n(b)r(er)i(1989.)0 2155 y([52])21 b(W)l(olf-Die\ trich)16 b(W)l(eb)q(er.)k(P)n(ersonal)c(comm)n(unication.)21 b(Conclusions)16 b(from)e(additional)j(trace)d(analysis)i(of)93 2211 y(results)g(for)f(shared) g(data.)0 2302 y([53])21 b(W)l(olf-Dietrich)h(W)l(eb)r(er)f(and)h(Ano)q(op)g (Gupta.)38 b(Analysis)22 b(of)f(Cac)o(he)h(In)o(v)n(alidation)g(P)o(atterns)f (in)h(Mul-)93 2359 y(tipro)r(cessors.)35 b(In)21 b fk(Thir)n(d)g(Internationa\ l)f(Confer)m(enc)m(e)h(on)g(A)o(r)m(chite)n(ctur)n(al)g(Supp)n(ort)h(for)g (Pr)m(o)n(gr)n(amming)93 2415 y(L)n(anguages)16 b(and)g(Op)n(er)m(ating)g(Sys\ tems)g(\(ASPLOS)e(III\))p fn(,)f(April)j(1989.)0 2506 y([54])21 b(Mark)16 b (W)l(eiser,)h(Alan)g(Demers,)g(and)f(Carl)h(Hauser.)23 b(The)17 b(Portable)g (Common)e(Runtime)i(Approac)o(h)f(to)93 2562 y(Interop)q(erability)l(.)i(In)c fk(Pr)m(o)n(c)n(e)n(e)m(dings)g(of)h(the)g(12th)h(A)o(CM)e(Symp)m(osium)i(on) e(Op)n(er)n(ating)g(System)h(Principles)p fn(,)93 2619 y(pages)g(114{122,)e (Decem)o(b)r(er)i(1989.)0 2710 y([55])21 b(James)15 b(W.)g(W)-5 b(endorf.)20 b fk(Op)n(er)m(ating)c(System/Applic)m(ation)g(Concurr)n(ency)f(in)h(Tightly-Co\ uple)m(d)g(Multiple-)93 2766 y(Pr)n(o)n(c)n(essor)21 b(Systems)p fn(.)38 b (PhD)21 b(thesis,)j(Carnegie)e(Mellon)g(Universit)o(y)l(,)h(Sc)o(ho)q(ol)f (of)f(Computer)g(Science,)93 2823 y(Pittsburgh,)15 b(P)l(A,)g(1987.)k(Av)n (ailable)e(as)d(T)l(echnical)i(Rep)s(ort)e(CMU-CS-88-117.)p eop %%Page: 111 122 bop 0 50 a fg(BIBLIOGRAPHY)1518 b fn(111)0 195 y([56])21 b(Andrew)14 b(Wilso\ n)g(Jr.)j(Hierarc)o(hical)e(Cac)o(he/Bus)f(Arc)n(hitecture)h(for)d(Shared)i (Memory)f(Multipro)r(cessors.)93 252 y(In)20 b fk(Confer)m(enc)m(e)g(Pr)n(o)n (c)m(e)n(e)m(dings,)g(14th)h(International)e(Symp)m(osium)i(on)e(Computer)i (A)o(r)m(chite)n(ctur)n(e)p fn(,)f(pages)93 308 y(244{252,)13 b(Pittsburgh,)i (P)l(A,)g(June)h(1987.)e(A)o(CM)h(SIGAR)o(CH/IEEE)g(Computer)g(So)q(ciety)l (.)0 402 y([57])21 b(William)j(A.)e(W)l(ulf,)i(Ro)n(y)e(Levin,)j(and)d(Sam)o (uel)g(P)m(.)f(Harbison.)40 b fk(Hydr)n(a/C.mmp:)34 b(A)n(n)22 b(Exp)n(erimen\ tal)93 458 y(Computer)17 b(System)p fn(.)j(McGra)m(w-Hill,)d(New)e(Y)m(ork,)f (NY,)h(1981.)0 552 y([58])21 b(Michael)28 b(Y)l(oung,)h(Av)n(adis)f(T)l(ev)m (anian,)i(Jr.,)g(Richard)d(Rashid,)k(Da)n(vid)d(Golub,)i(Je\013rey)d(Eppinger\ ,)93 609 y(Jonathan)20 b(Chew,)h(William)h(Bolosky)l(,)f(Da)n(vid)g(Black,)g (and)f(Rob)q(ert)g(Baron.)34 b(The)20 b(Dualit)o(y)g(of)g(Mem-)93 665 y(ory)g (and)g(Comm)n(unication)i(in)f(the)f(Implemen)q(tation)f(of)h(a)g(Multipro)r (cessor)g(Op)r(erating)g(System.)34 b(In)93 721 y fk(11th)17 b(Symp.)g(on)f (Op)n(er)m(ating)g(Systems)g(Principles)p fn(,)d(pages)i(63{76,)e(1987.)0 815 y([59])21 b(John)11 b(Zahorjan,)f(Edw)o(ard)g(D.)g(Lazo)n(wsk)n(a,)g(and)h (Derek)f(L.)g(Eager.)h(Spinning)i(Versus)d(Blo)r(c)o(king)h(in)g(Parallel)93 872 y(Systems)k(with)g(Uncertaint)n(y)l(.)k(In)d fk(Pr)m(o)n(c)n(e)m(e)n(ding\ s)f(of)h(the)g(International)f(Symp)m(osium)i(on)e(Performanc)n(e)h(of)93 928 y(Distribute)n(d)k(and)f(Par)n(al)r(lel)f(Systems)p fn(,)g(Decem)o(b)q(er)h (1988.)27 b(Pro)q(ceedings)20 b(published)h(b)o(y)d(North-Holland)93 985 y (\(1989\),)13 b(T.)i(Hasega)n(w)o(a)g(et.)f(al.)h(\(eds.\).)0 1078 y([60])21 b (John)e(Zahorjan,)f(Edw)o(ard)g(D.)f(Lazo)o(wsk)m(a,)i(and)f(Derek)g(L.)h(Eag\ er.)28 b(The)18 b(E\013ect)g(of)g(Sc)o(heduling)j(Disci-)93 1135 y(pline)g (on)e(Spin)h(Ov)o(erhead)f(in)h(Shared)f(Memory)f(P)n(arallel)i(Pro)q(cessors\ .)30 b(T)l(ec)o(hnical)21 b(Rep)r(ort)d(89-07-03,)93 1191 y(Departmen)o(t)g (of)g(Computer)h(Science)h(and)f(Engineering,)h(Universit)o(y)f(of)f(W)l(ashi\ ngton,)h(Seattle,)g(W)-5 b(A,)93 1248 y(1989.)0 1342 y([61])21 b(John)14 b (Zahorjan)f(and)h(Cath)n(y)f(McCann.)k(Pro)q(cessor)c(Sc)o(heduling)j(in)e (Shared)g(Memory)f(Multipro)r(cessors.)93 1398 y(In)g fk(SIGMETRICS)e(Confer) m(enc)m(e)j(on)f(Me)n(asur)n(ement)g(and)h(Mo)m(deling)f(of)h(Computer)g(Syst\ ems)p fn(,)e(Ma)n(y)g(1990.)p eop %%Trailer eos end %%EOF