%!PS (but not EPSF because of memory limits) %%Creator: dvips by Radical Eye Software %%Pages: 16 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[<0402000C06000C06000C0600180C00180C00180C 00180C003018003018803018803038807859006F8E00600000600000C00000C00000C000008000 00>17 20 2 6 21]22 dc dfe /fb df[<001FE02000FFF8E003F80FE007C003E00F8001E01F00 00E03E0000E03E0000607E0000607C000060FC000000FC000000FC000000FC000000FC000000FC 000000FC000000FC0000007C0000607E0000603E0000603E0000C01F0000C00F80018007C00300 03F80E0000FFFC00001FE000>27 28 3 0 34]67 dc[27 28 2 0 31]69 dc[32 28 2 0 37]72 dc[16 28 1 0 18]73 dc[27 28 2 0 33]80 dc[33 28 2 0 36]82 dc[<0FF8001C1E003E0F803E07803E07 C01C07C00007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC03E13F80FE1 F8>21 18 1 0 23]97 dc[<03FC000E0E001C1F003C1F00781F00780E00F80000F80000F80000 F80000F80000F800007800007801803C01801C03000E0E0003F800>17 18 2 0 21]99 dc[<00 0FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F001F9F00F07F01C 03F03C01F07801F07801F0F801F0F801F0F801F0F801F0F801F0F801F07801F07801F03C01F01C 03F00F0FFE03F9FE>23 29 2 0 27]100 dc[<01FC000F07001C03803C01C07801C07801E0F801 E0F801E0FFFFE0F80000F80000F800007800007C00603C00601E00C00F038001FC00>19 18 1 0 22]101 dc[<007F0001E38003C7C00787C00F87C00F83800F80000F80000F80000F80000F8000 FFF800FFF8000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8000 0F80000F80000F80007FF8007FF800>18 29 0 0 15]102 dc[<03F8F00E0F381E0F381C07303C 07803C07803C07803C07801C07001E0F000E0E001BF8001000001800001800001FFF001FFFC00F FFE01FFFF07801F8F00078F00078F000787000707800F01E03C007FF00>21 27 1 9 24]103 dc [<1E003F003F003F003F001E00000000000000000000000000FF00FF001F001F001F001F001F00 1F001F001F001F001F001F001F001F001F00FFE0FFE0>11 30 1 0 14]105 dc[11 29 1 0 14]108 dc[37 18 1 0 40]109 dc[24 18 1 0 27]110 dc[<01FC000F07 801C01C03C01E07800F07800F0F800F8F800F8F800F8F800F8F800F8F800F87800F07800F03C01 E01E03C00F078001FC00>21 18 1 0 24]111 dc[23 26 1 8 27]112 dc[17 18 1 0 20]114 dc[<1FD830786018E018E018F000FF807FE07FF01FF8 07FC007CC01CC01CE01CE018F830CFC0>14 18 2 0 19]115 dc[<030003000300030007000700 0F000F003FFCFFFC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F08079803 F0>14 26 1 0 19]116 dc[24 18 1 0 27]117 dc[22 18 1 0 25]118 dc[22 18 1 0 25]120 dc dfe /fc df[<0180300380700380700380700700E00700E00700E0 0700E00E01C00E01C00E01C00E01C01C03881C03881C03881E07883E19903BE0E0380000380000 700000700000700000700000E00000E00000C00000>21 27 1 9 25]22 dc dfe /fd df[<07F0 00FE00F000F0017001E0017002E0017002E0017004E0027009C0023809C0023811C0023821C004 3823800438438004388380041C8380081D0700081E0700081E0700081C070018180E00FE187FC0 >31 20 1 0 32]77 dc[<1FFFF8381C1820381820380840380840381080701000700000700000 700000E00000E00000E00000E00001C00001C00001C00001C0000380003FF800>21 20 0 0 20] 84 dc dfe /fe df[<00FC7C0183C607078E0607040E07000E07000E07000E07000E07000E0700 FFFFF00E07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E0700 0E07000E07007F0FF0>23 26 0 0 22]11 dc[<00FC000182000703000607000E02000E00000E 00000E00000E00000E0000FFFF000E07000E07000E07000E07000E07000E07000E07000E07000E 07000E07000E07000E07000E07000E07007F0FE0>19 26 0 0 21]12 dc[<00FF000387000707 000607000E07000E07000E07000E07000E07000E0700FFFF000E07000E07000E07000E07000E07 000E07000E07000E07000E07000E07000E07000E07000E07000E07007F9FE0>19 26 0 0 21] 13 dc[<60F0F868080808101020C0>5 11 3 -15 11]39 dc[<00800100020004000C00080018 003000300030006000600060006000E000E000E000E000E000E000E000E000E000E00060006000 60006000300030003000180008000C000400020001000080>9 38 3 10 15]40 dc[<80004000 20001000180008000C000600060006000300030003000300038003800380038003800380038003 800380038003000300030003000600060006000C00080018001000200040008000>9 38 2 10 15]41 dc[<60F0F07010101020204080>4 11 3 7 11]44 dc[10 2 0 -7 13]45 dc[<60F0F060>4 4 3 0 11]46 dc[<003F0201C0C603002E0E001E1C000E1C00063800067800 02700002700002F00000F00000F00000F00000F00000F000007000027000027800023800041C00 041C00080E000803003001C0C0003F00>23 26 2 0 28]67 dc[24 26 2 0 29]68 dc[11 26 1 0 14]73 dc[19 26 2 0 24]76 dc[<007F000001 C1C000070070000E0038001C001C003C001E0038000E0078000F0070000700F0000780F0000780 F0000780F0000780F0000780F0000780F0000780F000078078000F0078000F0038000E003C001E 001C001C000E0038000700700001C1C000007F0000>25 26 2 0 30]79 dc[25 26 2 0 28]82 dc[<7FFFFF00701C070040 1C0100401C0100C01C0180801C0080801C0080801C0080001C0000001C0000001C0000001C0000 001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C00 00001C0000001C0000001C000003FFE000>25 26 1 0 28]84 dc[<3F8070C070E02070007000 7007F01C7030707070E070E071E071E0F171FB1E3C>16 16 2 0 19]97 dc[18 26 1 0 21] 98 dc[<07F80C1C381C30087000E000E000E000E000E000E0007000300438080C1807E0>14 16 1 0 17]99 dc[<007E00000E00000E00000E00000E00000E00000E00000E00000E00000E0003CE 000C3E00380E00300E00700E00E00E00E00E00E00E00E00E00E00E00E00E00600E00700E00381E 001C2E0007CFC0>18 26 1 0 21]100 dc[<07C01C3030187018600CE00CFFFCE000E000E000E0 006000300438080C1807E0>14 16 1 0 17]101 dc[<01F0031807380E100E000E000E000E000E 000E00FFC00E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE0>13 26 0 0 12]102 dc[<0FCE187330307038703870387038303018602FC02000600070003FF03FFC1FFE 600FC003C003C003C0036006381C07E0>16 24 1 8 19]103 dc[18 26 1 0 21]104 dc[<18 003C003C001800000000000000000000000000FC001C001C001C001C001C001C001C001C001C00 1C001C001C001C001C00FF80>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[<07E01C 38300C700E6006E007E007E007E007E007E0076006700E381C1C3807E0>16 16 1 0 19]111 dc [18 23 1 7 21] 112 dc[<03C2000C2600381E00300E00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E 00700E00381E001C2E0007CE00000E00000E00000E00000E00000E00000E00007FC0>18 23 1 7 20]113 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 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[<7FF86070407040E041C041C00380070007000E081C081C0838 1070107030FFF0>13 16 1 0 17]122 dc dfe /ff df[<00C001C0030006000C001C00380030 00700070006000E000E000E000E000E000E000E000600070007000300038001C000C0006000300 01C000C0>10 29 6 3 20]40 dc[<8000C0006000300018001C000E0006000700070003000380 03800380038003800380038003000700070006000E001C00180030006000C0008000>9 29 4 3 20]41 dc[<70F8FCFC7C0C1830E0C0>6 10 7 5 20]44 dc[15 3 2 -10 20] 45 dc[<1FC0007FF000707800201800001C00001C0007FC001FFC003C1C00701C00E01C00E01C 00E01C00707C003FFF800F8F80>17 16 2 0 20]97 dc[<03F80FFC1C1C380870006000E000E0 00E000E00060007000380E1C1E0FFC03F0>15 16 2 0 20]99 dc[<007E00007E00000E00000E 00000E00000E00000E0007CE000FFE001C3E00301E00700E00E00E00E00E00E00E00E00E00E00E 00E00E00700E00301E00383E001FEFC007CFC0>18 23 1 0 20]100 dc[<07E00FF01C38301C70 0CE00EE00EFFFEFFFEE00060007000380E1C1E0FFC03F0>15 16 2 0 20]101 dc[<007C00FE01 CE03840380038003807FFEFFFE0380038003800380038003800380038003800380038003807FFC 7FFC>15 23 1 0 20]102 dc[19 23 0 0 20]104 dc[<030007800780030000000000000000007F807F8003800380 0380038003800380038003800380038003800380FFFCFFFC>14 24 3 0 20]105 dc[17 23 1 0 20]107 dc[15 23 2 0 20]108 dc[19 16 0 0 20]110 dc[<07C01F F03C78701C701CE00EE00EE00EE00EE00EE00E701C783C3C781FF007C0>15 16 2 0 20]111 dc [18 24 0 8 20]112 dc[17 16 1 0 20]114 dc[<0FD83FF86038C038C038F0007F 803FF007F8001C6006E006F006F81CFFF8CFE0>15 16 2 0 20]115 dc[<030007000700070007 007FFCFFFC07000700070007000700070007000700070E070E070E070C03FC00F0>15 21 1 0 20]116 dc[19 16 0 0 20]117 dc[17 16 1 0 20]118 dc[17 16 1 0 20]119 dc[<7E3F007E3F001E38000E7800 07700007E00003E00001C00003C00003E0000770000E78000E38001C1C00FE3F80FE3F80>17 16 1 0 20]120 dc[17 24 1 8 20]121 dc dfe /fg df[<0C003C00CC000C000C000C000C000C000C000C00 0C000C000C000C000C00FF80>9 16 2 0 15]49 dc[<1F00618040C08060C0600060006000C001 80030006000C00102020207FC0FFC0>11 16 1 0 15]50 dc dfe /fh df[<1FE0003FF0007FF8 00783C00300E00000E00000E0003FE001FFE003E0E00700E00E00E00E00E00E00E00783E007FFF E03FE7E00F83E0>19 18 2 0 22]97 dc[<7E0000FE00007E00000E00000E00000E00000E0000 0E3E000EFF000FFF800F83C00F00E00E00E00E00700E00700E00700E00700E00700E00700E00E0 0F01E00F83C00FFF800EFF00063C00>20 25 0 0 22]98 dc[<03F80FFC1FFE3C1E780C7000E0 00E000E000E000E000F000700778073E0E1FFC0FF803F0>16 18 3 0 22]99 dc[<003F00007F 00003F0000070000070000070000070003C7000FF7001FFF003C1F00780F00700700E00700E007 00E00700E00700E00700E00700700F00700F003C1F001FFFE00FE7F007C7E0>20 25 1 0 22] 100 dc[<03E00FF81FFC3C1E780E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE0FFC03 F0>16 18 3 0 22]101 dc[<001F00007F8000FF8001E78001C30001C00001C0007FFF00FFFF00 FFFF0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000 3FFE007FFF003FFE00>17 25 1 0 22]102 dc[<03E3C007F7E00FFFE01C1CC0380E00380E0038 0E00380E00380E001C1C000FF8001FF0001BE0003800001800001FFC001FFF003FFF807803C0E0 00E0E000E0E000E0E000E07001C07C07C03FFF800FFE0003F800>19 28 1 10 22]103 dc[<7E 0000FE00007E00000E00000E00000E00000E00000E3C000EFE000FFF000F87800F03800E03800E 03800E03800E03800E03800E03800E03800E03800E03800E03807FC7F0FFE7F87FC7F0>21 25 0 0 22]104 dc[<018003C003C0018000000000000000007FC07FC07FC001C001C001C001C001C0 01C001C001C001C001C001C001C07FFFFFFF7FFF>16 26 3 0 22]105 dc[<7E0000FE00007E00 000E00000E00000E00000E00000E7FE00E7FE00E7FE00E0F000E1E000E3C000E78000EF0000FF0 000FF8000FBC000F1E000E0E000E07000E07807F87F0FFCFF07F87F0>20 25 0 0 22]107 dc[< FFC000FFC000FFC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000 01C00001C00001C00001C00001C00001C00001C00001C00001C000FFFF80FFFF80FFFF80>17 25 2 0 22]108 dc[21 18 0 0 22]109 dc[<7E3C00FEFE 007FFF000F87800F03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E03 807FC7F0FFE7F87FC7F0>21 18 0 0 22]110 dc[<03E0000FF8001FFC003C1E00780F00700700 E00380E00380E00380E00380E00380F00780700700780F003C1E001FFC000FF80003E000>17 18 2 0 22]111 dc[<7E3E00FEFF007FFF800F83C00F00E00E00E00E00700E00700E00700E00700E 00700E00700E00E00F01E00F83C00FFF800EFF000E3C000E00000E00000E00000E00000E00000E 00007FC000FFE0007FC000>20 27 0 9 22]112 dc[19 18 1 0 22]114 dc[<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00EF00EF81E FFFCFFF8C7E0>15 18 3 0 22]115 dc[<0300000700000700000700000700007FFF00FFFF00FF FF0007000007000007000007000007000007000007000007010007038007038007038007870003 FE0001FC0000F800>17 23 1 0 22]116 dc[<7E1F80FE3F807E1F800E03800E03800E03800E03 800E03800E03800E03800E03800E03800E03800E03800E0F800FFFF007FBF803E3F0>21 18 0 0 22]117 dc[19 18 1 0 22]119 dc[<7F1FC07F3FC07F 1FC00F1C00073C0003B80003F00001F00000E00001E00001F00003B800073C00071C000E0E007F 1FC0FF3FE07F1FC0>19 18 1 0 22]120 dc[<7F1FC0FF9FE07F1FC01C07000E07000E0E000E0E 00070E00071C00071C00039C00039C0003980001B80001B80000F00000F00000F00000E00000E0 0000E00001C00079C0007BC0007F80003F00003C0000>19 27 1 9 22]121 dc dfe /fi df[< 0C001C00EC000C000C000C000C000C000C000C000C000C000C000C000C000C000C000C00FFC0> 10 19 3 0 17]49 dc[<1F0060C06060F070F030603000700070006000C001C001800200040008 10101020207FE0FFE0>12 19 2 0 17]50 dc dfe /fj df[<0180038006000C00180038003000 70007000E000E000E000E000E000E000E000700070003000380018000C00060003800180>9 25 5 2 18]40 dc[<80C06030181C0C0E0E070707070707070E0E0C1C183060C080>8 25 4 2 18] 41 dc[<070007000700E738FFF87FF01FC01FC07FF0FFF8E738070007000700>13 14 2 -3 18] 42 dc[<60F0F878183030E0C0>5 9 7 5 18]44 dc[13 3 2 -9 18]45 dc[< 0018003800380070007000E000E001C001C001C003800380070007000E000E001C001C001C0038 00380070007000E000E000C000>13 26 2 3 18]47 dc[<060006000E001E00FE00EE000E000E 000E000E000E000E000E000E000E000E000E000E00FFE0FFE0>11 20 3 0 18]49 dc[<0F803F C070E0E070E038E038403800380030007000E000C00180030006000C00183830387FF87FF8>13 20 2 0 18]50 dc[<0FE03FF07838701C201C001C0038007807E007F00038001C000E000E400E E00EE01C78383FF00FC0>15 20 1 0 18]51 dc[<60F0F06000000000000060F0F070303060C0 80>4 19 7 5 18]59 dc[15 9 1 -6 18]61 dc[ <4000E000F0007C003E000F8007C001E000F8007800F801E007C00F803E007C00F000E0004000> 13 19 2 -1 18]62 dc[<038007C007C006C006C00EE00EE00EE00EE00C601C701C701C701FF0 1FF0383838383838FC7EFC7E>15 20 1 0 18]65 dc[15 20 1 0 18]66 dc[<03E60FFE 1C3E381E700E700E600EE000E000E000E000E000E000600E700E700E381C1C380FF003E0>15 20 1 0 18]67 dc[15 20 1 0 18]68 dc[15 20 1 0 18]69 dc[<07980FF818783878 70387038E038E000E000E000E0FCE0FCE038E03870387038387818780FF807B8>14 20 1 0 18] 71 dc[15 20 1 0 18]72 dc[11 20 3 0 18]73 dc[15 20 1 0 18]76 dc[ 15 20 1 0 18]78 dc[<3FE07FF07070E038E038E038E038E038E038E038E038E038E038 E038E038E038E03870707FF03FE0>13 20 2 0 18]79 dc[15 20 1 0 18]80 dc[ 16 20 1 0 18]82 dc[<1F303FF070F0E070E070E070E00070007F003FC00FE000F00038003860 38E038E030F070FFE0CF80>13 20 2 0 18]83 dc[<7FFEFFFEE38EE38EE38E03800380038003 800380038003800380038003800380038003801FF01FF0>15 20 1 0 18]84 dc[17 20 0 0 18]85 dc[15 20 1 0 18]87 dc[< FFF8FFF8FFF8>13 3 2 3 18]95 dc[<3F807FC070E0207000700FF03FF07870E070E070E07070 F03FFE1F3E>15 14 2 0 18]97 dc[15 20 1 0 18]98 dc[<07F01FF8383870106000E0 00E000E000E0006000703838381FF007E0>13 14 2 0 18]99 dc[<00F800F800380038003800 3807B81FF8387870386038E038E038E038E0386038707838781FFE0FBE>15 20 1 0 18]100 dc [<07801FE0387070706038E038FFF8FFF8E0006000703838381FF007C0>13 14 2 0 18]101 dc [<007E00FF01C70382038003807FFEFFFE03800380038003800380038003800380038003803FF8 3FF8>16 20 0 0 18]102 dc[<0F9E1FFF38E7707070707070707038E03FC03F8070003FE03FF8 3FFC701EE00EE00EE00E600C783C1FF00FE0>16 22 1 8 18]103 dc[15 20 1 0 18]104 dc[<06000F000F000600000000000000FF00FF0007000700070007000700070007000700070007 00FFF0FFF0>12 21 3 0 18]105 dc[15 20 1 0 18]107 dc[13 20 2 0 18]108 dc [17 14 0 0 18]109 dc[15 14 1 0 18]110 dc[<0F803FE038E07070E038E038E038E038E038F078707038E0 3FE00F80>13 14 2 0 18]111 dc[15 21 1 7 18]112 dc[<079C1FFC387C703C601C E01CE01CE01CE01C601C703C387C1FFC079C001C001C001C001C001C007F007F>16 21 1 7 18] 113 dc[14 14 2 0 18] 114 dc[<1FF03FF06070C070E0007F003FE00FF000786018E018F030FFE0DFC0>13 14 2 0 18] 115 dc[<06000E000E000E007FF8FFF80E000E000E000E000E000E000E000E380E380E3807F003 C0>13 18 1 0 18]116 dc[15 14 1 0 18]117 dc[15 14 1 0 18]118 dc[15 14 1 0 18]119 dc[<7C7C7C7C1CF00EE00FC007C00380078007C00EE01EF01C70FC7EFC 7E>15 14 1 0 18]120 dc[15 21 1 7 18]121 dc[<00F801F8038007000700070007 0007000700070007000E00FC00FC000E0007000700070007000700070007000700038001F800F8 >13 26 2 3 18]123 dc[<7800FC000E0007000700070007000700070007000700038001F801F8 0380070007000700070007000700070007000E00FC007800>13 26 2 3 18]125 dc dfe /fk df[<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003C0>16 16 2 -2 21]15 dc dfe /fl df[14 4 1 -9 19]45 dc[<387CFEFEFE7C38>7 7 4 0 16]46 dc[<00180000780001F800FFF800FFF80001F80001F80001F80001F80001F80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 F80001F80001F80001F80001F80001F80001F8007FFFE07FFFE0>19 32 4 0 28]49 dc[<03FC 000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01F87C01F83803F80003F80003F00003 F00007E00007C0000F80001F00003E0000380000700000E01801C0180380180700180E00380FFF F01FFFF03FFFF07FFFF0FFFFF0FFFFF0>21 32 3 0 28]50 dc[<00FE0007FFC00F07E01E03F0 3F03F03F81F83F81F83F81F81F03F81F03F00003F00003E00007C0001F8001FE0001FF000007C0 0001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00FEFF00FEFF00FC7E01FC7801F81E07F0 0FFFC001FE00>23 32 2 0 28]51 dc[<0000E00001E00003E00003E00007E0000FE0001FE000 1FE00037E00077E000E7E001C7E00187E00307E00707E00E07E00C07E01807E03807E07007E0E0 07E0FFFFFEFFFFFE0007E00007E00007E00007E00007E00007E00007E000FFFE00FFFE>23 32 2 0 28]52 dc[<1000201E01E01FFFC01FFF801FFF001FFE001FF8001BC000180000180000180000 18000019FC001FFF001E0FC01807E01803E00003F00003F00003F80003F83803F87C03F8FE03F8 FE03F8FC03F0FC03F07007E03007C01C1F800FFF0003F800>21 32 3 0 28]53 dc[<001F8000 FFE003F07007C0F00F01F81F01F83E01F83E01F87E00F07C00007C0000FC0800FC7FC0FCFFE0FD 80F0FF00F8FE007CFE007CFC007EFC007EFC007EFC007E7C007E7C007E7C007E3C007C3E007C1E 00F80F00F00783E003FFC000FF00>23 32 2 0 28]54 dc[<6000007800007FFFFE7FFFFE7FFF FC7FFFF87FFFF87FFFF0E00060E000C0C00180C00300C00300000600000C00001C000018000038 0000780000780000F00000F00000F00001F00001F00001F00003F00003F00003F00003F00003F0 0003F00003F00001E000>23 34 3 0 28]55 dc[<00FE0003FFC00703E00E00F01C00F01C0078 3C00783E00783F00783F80783FE0F01FF9E01FFFC00FFF8007FFC003FFE007FFF01E7FF83C1FFC 7807FC7801FEF000FEF0003EF0001EF0001EF0001CF8001C7800383C00381F01F00FFFC001FF00 >23 32 2 0 28]56 dc[<01FE0007FF800F83E01E01F03E00F07C00F87C0078FC007CFC007CFC 007CFC007EFC007EFC007EFC007E7C00FE7C00FE3E01FE1E037E0FFE7E07FC7E00207E00007C00 007C1E007C3F00F83F00F83F00F03F01E01E03C01C0F800FFE0003F800>23 32 2 0 28]57 dc[ <000070000000007000000000F800000000F800000000F800000001FC00000001FC00000003FE 00000003FE00000003FE00000006FF000000067F0000000E7F8000000C3F8000000C3F80000018 3FC00000181FC00000381FE00000300FE00000300FE00000600FF000006007F00000E007F80000 FFFFF80000FFFFF800018001FC00018001FC00038001FE00030000FE00030000FE000600007F00 0600007F00FFE00FFFF8FFE00FFFF8>37 34 2 0 42]65 dc[34 34 2 0 40]66 dc[<0003FE0080001FFF818000FF01E38001F8003F8003E0001F8007C0 000F800F800007801F800007803F000003803F000003807F000001807E000001807E00000180FE 00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000 7E000000007E000001807F000001803F000001803F000003801F800003000F8000030007C00006 0003F0000C0001F800380000FF00F000001FFFC0000003FE0000>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[39 34 2 0 44]72 dc[19 34 1 0 21]73 dc[38 34 2 0 44]75 dc[48 34 2 0 53]77 dc[<0007FC0000003F FF800000FC07E00003F001F80007E000FC000FC0007E001F80003F001F80003F003F00001F803F 00001F807F00001FC07E00000FC07E00000FC0FE00000FE0FE00000FE0FE00000FE0FE00000FE0 FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE07E00000FC07F00001FC07F00001F C03F00001F803F80003F801F80003F000FC0007E0007E000FC0003F001F80000FC07E000003FFF 80000007FC0000>35 34 3 0 42]79 dc[32 34 2 0 38]80 dc[39 34 2 0 42]82 dc[<01FC0407FF 8C1F03FC3C007C7C003C78001C78001CF8000CF8000CFC000CFC0000FF0000FFE0007FFF007FFF C03FFFF01FFFF80FFFFC03FFFE003FFE0003FF00007F00003F00003FC0001FC0001FC0001FE000 1EE0001EF0003CFC003CFF00F8C7FFE080FF80>24 34 3 0 31]83 dc[<7FFFFFFF807FFFFFFF 807E03F80F807803F807807003F803806003F80180E003F801C0E003F801C0C003F800C0C003F8 00C0C003F800C0C003F800C00003F800000003F800000003F800000003F800000003F800000003 F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8000000 03F800000003F800000003F800000003F800000003F800000003F800000003F8000003FFFFF800 03FFFFF800>34 34 2 0 39]84 dc[38 34 2 0 43]85 dc[55 34 1 0 58]87 dc[<07FC001FFF803F07C03F03E03F01E03F01F01E01F000 01F00001F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81F F87F07E03F>24 22 2 0 27]97 dc[26 35 2 0 31]98 dc[<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000FC0000FC 0000FC0000FC0000FC0000FC00007C00007E00007E00003E00301F00600FC0E007FF8000FE00> 20 22 2 0 25]99 dc[<0001FE000001FE0000003E0000003E0000003E0000003E0000003E0000 003E0000003E0000003E0000003E0000003E0000003E0001FC3E0007FFBE000F81FE001F007E00 3E003E007E003E007C003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E 00FC003E007C003E007C003E003E007E001E00FE000F83BE0007FF3FC001FC3FC0>26 35 2 0 31]100 dc[<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8 FC0000FC0000FC00007C00007C00007E00003E00181F00300FC07003FFC000FF00>21 22 2 0 26]101 dc[<003F8000FFC001E3E003C7E007C7E00F87E00F83C00F80000F80000F80000F8000 0F80000F8000FFFC00FFFC000F80000F80000F80000F80000F80000F80000F80000F80000F8000 0F80000F80000F80000F80000F80000F80000F80000F80000F80007FF8007FF800>19 35 1 0 17]102 dc[<03FC1E0FFF7F1F0F8F3E07CF3C03C07C03E07C03E07C03E07C03E07C03E03C03C0 3E07C01F0F801FFF0013FC003000003000003800003FFF801FFFF00FFFF81FFFFC3800FC70003E F0001EF0001EF0001EF0001E78003C7C007C3F01F80FFFE001FF00>24 33 2 11 28]103 dc[< FF000000FF0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000 001F0000001F0000001F0000001F07E0001F1FF8001F307C001F403C001F803E001F803E001F00 3E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F 003E001F003E001F003E001F003E00FFE1FFC0FFE1FFC0>26 35 2 0 31]104 dc[<1C003F007F 007F007F003F001C000000000000000000000000000000FF00FF001F001F001F001F001F001F00 1F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE0>11 36 2 0 16]105 dc[< FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F 001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE0>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[<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 /fm df[<00FCF807839C0E079C1C07081C07001C 07001C07001C07001C0700FFFFE01C07001C07001C07001C07001C07001C07001C07001C07001C 07001C07001C07001C0700FF1FE0>22 23 0 0 21]11 dc[<00FC000782000E07001C07001C02 001C00001C00001C00001C0000FFFF001C07001C07001C07001C07001C07001C07001C07001C07 001C07001C07001C07001C0700FF1FE0>19 23 0 0 20]12 dc[<00FC7E000703C1000E078380 1C0703801C0701001C0700001C0700001C0700001C070000FFFFFF801C0703801C0703801C0703 801C0703801C0703801C0703801C0703801C0703801C0703801C0703801C0703801C070380FF1F CFF0>28 23 0 0 29]14 dc[<60C0F1E0F1E070E0102010202040204040804080>11 10 1 -13 18]34 dc[<60F0F070101020204040>4 10 3 -13 10]39 dc[<0102040C1818303070606060E0 E0E0E0E0E0E0E0E0E060606070303018180C040201>8 34 3 9 14]40 dc[<8040203018180C0C 0E060606070707070707070707070606060E0C0C181830204080>8 34 2 9 14]41 dc[<60F0F0 70101020204040>4 10 3 6 10]44 dc[9 2 0 -6 12]45 dc[<60F0F060>4 4 3 0 10]46 dc[<0008001800300030003000600060006000C000C000C0018001800180030003000600 060006000C000C000C00180018001800300030003000600060006000C000C000>13 33 2 8 18] 47 dc[<07C018303018701C600C600CE00EE00EE00EE00EE00EE00EE00EE00EE00E600C600C70 1C30181C7007C0>15 21 1 0 18]48 dc[<0F8030E040708030C038E038403800380070007000 6000C00180030006000C08080810183FF07FF0FFF0>13 21 2 0 18]50 dc[<0FE03030601870 1C701C001C00180038006007E000300018000C000E000EE00EE00EC00C401830300FE0>15 21 1 0 18]51 dc[<00300030007000F001F001700270047008701870107020704070C070FFFE007000 7000700070007003FE>15 21 1 0 18]52 dc[<20303FE03FC0240020002000200020002F8030 E020700030003800384038E038E0388030406020C01F00>13 21 2 0 18]53 dc[<40007FFE7F FC7FF8C008801080200040008000800100010003000200060006000E000E000E000E000E000400 >15 22 2 0 18]55 dc[<07C0183030186018E00CE00CE00EE00EE00E601E301E186E0F8E000E 000C001C70187018603020C01F80>15 21 1 0 18]57 dc[<001000003800003800003800005C 00005C00005C00008E00008E00008E0001070001070003078002038002038007FFC00401C00401 C00800E00800E01800E03800F0FE03FE>23 23 1 0 26]65 dc[21 23 1 0 25]66 dc[<00FC100383300E00B01C 0070380030300030700010600010E00010E00000E00000E00000E00000E00000E0001060001070 00103000203800201C00400E008003830000FC00>20 23 2 0 25]67 dc[23 23 1 0 27]68 dc[20 23 1 0 23]70 dc[23 23 1 0 26]72 dc[11 23 1 0 13]73 dc[<0FFC00E000E000E000E000E000E000E000E000E000E000 E000E000E000E000E000E000E0E0E0E0E0C1C061801F00>14 23 2 0 18]74 dc[24 23 1 0 27]75 dc[29 23 1 0 32]77 dc[23 23 1 0 26]78 dc[<00FC000303000E01C01C00E0380070 300030700038600018E0001CE0001CE0001CE0001CE0001CE0001CE0001C700038700038300030 3800701C00E00E01C003030000FC00>22 23 2 0 27]79 dc[20 23 1 0 24]80 dc[24 23 1 0 26]82 dc[<0FC4302C601C400CC0 04C004C004E00070007F003FE00FF801FC001C000E0006800680068006C004E008D81087E0>15 23 2 0 20]83 dc[<7FFFF8603818403808403808803804803804803804003800003800003800 00380000380000380000380000380000380000380000380000380000380000380000380007FFC0 >22 23 1 0 25]84 dc[23 23 1 0 26]85 dc[25 23 0 0 26]89 dc[<20 4020404080408081008100E1C0F1E0F1E060C0>11 10 5 -13 18]92 dc[<1FC0386038301038 003803F81E3830387038E039E039E07970FF1F1E>16 14 1 0 18]97 dc[18 23 0 0 20]98 dc[<07F018383038 70106000E000E000E000E000600070083008183007C0>13 14 1 0 16]99 dc[<007E00000E00 000E00000E00000E00000E00000E00000E00000E0007CE001C3E00300E00700E00600E00E00E00 E00E00E00E00E00E00600E00700E00301E00182E0007CFC0>18 23 1 0 20]100 dc[<0FC01860 30307038E018FFF8E000E000E000600070083010183007C0>13 14 1 0 16]101 dc[<03E00670 0E701C201C001C001C001C001C00FF801C001C001C001C001C001C001C001C001C001C001C001C 00FF80>12 23 0 0 11]102 dc[<0F9E18E33060707070707070306018C02F80200060003FE03F F83FFC600EC006C006C006600C38380FE0>16 21 1 7 18]103 dc[19 23 0 0 20]104 dc[<183C3C180000000000 7C1C1C1C1C1C1C1C1C1C1C1C1CFF>8 23 0 0 10]105 dc[<0300078007800300000000000000 000000001F800380038003800380038003800380038003800380038003800380038003804380E3 00E7007C00>9 29 -2 6 11]106 dc[18 23 0 0 19]107 dc[9 23 0 0 10]108 dc[29 14 0 0 30]109 dc[19 14 0 0 20]110 dc[< 07C018303018600C600CE00EE00EE00EE00EE00E701C3018183007C0>15 14 1 0 18]111 dc[< FCF8001F0E001C03001C03801C01801C01C01C01C01C01C01C01C01C01801C03801C07001F0E00 1CF8001C00001C00001C00001C00001C0000FF8000>18 20 0 6 20]112 dc[13 14 0 0 14]114 dc[<1F4060C0C040C0 40E000FF007F801FC001E080608060C060E0C09F00>11 14 1 0 14]115 dc[<08000800080018 0018003800FF80380038003800380038003800380038403840384038401C800F00>10 20 1 0 14]116 dc[19 14 0 0 20]117 dc[16 14 1 0 19]118 dc[22 14 1 0 25]119 dc[16 14 1 0 19]120 dc[16 20 1 6 19]121 dc[13 14 1 0 16]122 dc dfe /fn df[<0001FC3C00060E67000C0EC7001C0DC6001C01C0003801C0003803 800038038000380380003803800070038007FFFFF800700700007007000070070000E0070000E0 0E0000E00E0000E00E0000E00E0001C00E0001C01C0001C01C0001C01C0001C01C0003801C0003 803800038038000380380003003800070030000700700006006000C6606000E470C000C8618000 703E0000>32 37 -1 8 25]11 dc[10 3 3 -7 15]45 dc[<3078F060>5 4 4 0 13]46 dc[<0000180000001800000038000000380000007800000078000000B8000001B80000 0138000002380000023C0000041C0000041C0000081C0000181C0000101C0000201C0000201C00 007FFC0000401C0000801C0001801C0001001C0002001C0002001C0004000E000C000E001C001E 00FF00FFC0>26 29 2 0 31]65 dc[<01FFFE00003C0780003803C0003801C0003801C0003801 C0007001C0007003C0007003C00070078000E0070000E00E0000E03C0000FFF80001C01C0001C0 0E0001C00F0001C00F0003800F0003800F0003800F0003800F0007001E0007001C0007003C0007 0078000E01E000FFFF8000>26 28 3 0 29]66 dc[<0003F020001E0C60003002E000E003C001 C001C0038001C0070000C00E0000801E0000801C0000803C0000803C0000007800000078000000 78000000F0000000F0000000F0000000F0000000F0000400F0000400F0000400F0000800700008 007000100038002000180040000C0180000706000001F80000>27 30 6 1 30]67 dc[<01FFFF E0003C00E0003800600038004000380040003800400070004000700040007020400070200000E0 400000E0400000E0C00000FFC00001C0800001C0800001C0800001C08000038101000380010003 80020003800200070004000700040007000C00070018000E007800FFFFF000>27 28 3 0 28] 69 dc[<01FFFFC0003C01C0003800C00038008000380080003800800070008000700080007020 800070200000E0400000E0400000E0C00000FFC00001C0800001C0800001C0800001C080000381 0000038000000380000003800000070000000700000007000000070000000F000000FFF00000> 26 28 3 0 27]70 dc[<01FFCFFE003C01E0003801C0003801C0003801C0003801C00070038000 700380007003800070038000E0070000E0070000E0070000FFFF0001C00E0001C00E0001C00E00 01C00E0003801C0003801C0003801C0003801C00070038000700380007003800070038000F0078 00FFE7FF00>31 28 3 0 31]72 dc[<01FFC0003C000038000038000038000038000070000070 0000700000700000E00000E00000E00000E00001C00001C00001C00001C0000380000380000380 000380000700000700000700000700000F0000FFE000>18 28 2 0 16]73 dc[<01FFE0003C00 00380000380000380000380000700000700000700000700000E00000E00000E00000E00001C000 01C00001C00001C0000380080380080380080380100700100700300700600700E00E03C0FFFFC0 >21 28 3 0 26]76 dc[<01FFFC00003C070000380380003801C0003801C0003801C0007003C0 007003C0007003C00070038000E0078000E0070000E00E0000E0380001FFE00001C0000001C000 0001C0000003800000038000000380000003800000070000000700000007000000070000000F00 0000FFE00000>26 28 3 0 28]80 dc[<000F8400304C00403C00801801001803001803001806 001006001006000007000007000003E00003FC0001FF00007F800007C00001C00001C00000C000 00C02000C02000C0600180600180600300600200F00400CC180083E000>22 30 3 1 23]83 dc[ <7FF0FF800F001C000E0018000E0010000E0010000E0010001C0020001C0020001C0020001C00 20003800400038004000380040003800400070008000700080007000800070008000E0010000E0 010000E0010000E0020000E0020000E0040000E00400006008000030300000104000000F800000 >25 29 9 1 31]85 dc[<03CC063C0C3C181C3838303870387038E070E070E070E070E0E2C0E2 C0E261E462643C38>15 18 5 0 21]97 dc[<01F007080C08181C3838300070007000E000E000 E000E000E000E008E010602030C01F00>14 18 5 0 19]99 dc[<001F80000380000380000700 000700000700000700000E00000E00000E00000E0003DC00063C000C3C00181C00383800303800 703800703800E07000E07000E07000E07000E0E200C0E200C0E20061E4006264003C3800>17 29 5 0 21]100 dc[<01E007100C1018083810701070607F80E000E000E000E000E000E008601060 2030C01F00>13 18 5 0 19]101 dc[<0003C0000670000C70001C60001C00001C000038000038 0000380000380000380003FF8000700000700000700000700000700000E00000E00000E00000E0 0000E00001C00001C00001C00001C00001C000038000038000038000030000030000070000C600 00E60000CC0000780000>20 37 -1 8 13]102 dc[<00F3018F030F06070E0E0C0E1C0E1C0E38 1C381C381C381C383830383038187818F00F700070007000E000E0C0C0E1C0C3007E00>16 26 3 8 19]103 dc[<0FC00001C00001C0000380000380000380000380000700000700000700000700 000E78000E8C000F0E000E0E001C0E001C0E001C0E001C0E00381C00381C00381C003838007038 80703880707080707100E03200601C00>17 29 3 0 21]104 dc[<018003800100000000000000 00000000000000001C002600470047008E008E000E001C001C001C003800380071007100710072 0072003C00>9 28 4 0 13]105 dc[<0FC00001C00001C0000380000380000380000380000700 000700000700000700000E0F000E11000E23800E43801C83001C80001D00001E00003F800039C0 0038E00038E00070E20070E20070E20070E400E06400603800>17 29 3 0 19]107 dc[<1F8003 80038007000700070007000E000E000E000E001C001C001C001C00380038003800380070007000 70007000E400E400E400E40068003800>9 29 4 0 11]108 dc[<3C1E0780266318C04683A0E0 4703C0E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701C01C0701C01C070380380E03 88380E0388380E0708380E0710701C0320300C01C0>29 18 4 0 34]109 dc[<3C3C0026460046 87004707008E07008E07000E07000E07001C0E001C0E001C0E001C1C00381C40381C4038384038 3880701900300E00>18 18 4 0 23]110 dc[<01E007180C0C180C380C300E700E700EE01CE01C E01CE018E038E030E06060C031801E00>15 18 5 0 21]111 dc[<07870004D98008E0C008E0C0 11C0E011C0E001C0E001C0E00381C00381C00381C00381800703800703000707000706000E8C00 0E70000E00000E00001C00001C00001C00001C00003C0000FF8000>19 26 1 8 21]112 dc[<03 C4062C0C3C181C3838303870387038E070E070E070E070E0E0C0E0C0E061E063C03DC001C001C0 038003800380038007803FF0>14 26 5 8 19]113 dc[<3C3C26C2468747078E068E000E000E00 1C001C001C001C00380038003800380070003000>16 18 4 0 18]114 dc[<01F006080C080C1C 18181C001F001FC00FF007F0007800386030E030C030806060C01F00>14 18 3 0 17]115 dc[< 00C001C001C001C00380038003800380FFE00700070007000E000E000E000E001C001C001C001C 00384038403840388019000E00>11 26 3 0 14]116 dc[<1E0300270700470700470700870E00 870E000E0E000E0E001C1C001C1C001C1C001C1C003838803838801838801839001C5900078E00 >17 18 4 0 22]117 dc[<1E06270E470E4706870287020E020E021C041C041C041C0818083808 181018200C400780>15 18 4 0 19]118 dc[<1E01832703874703874703838707018707010E07 010E07011C0E021C0E021C0E021C0E04180C04181C04181C081C1C100C263007C3C0>24 18 4 0 28]119 dc[<070E0019910010E38020E38041C30041C00001C00001C000038000038000038000 038000070200670200E70400CB04008B080070F000>17 18 3 0 19]120 dc[<1E032707470747 07870E870E0E0E0E0E1C1C1C1C1C1C1C1C38383838183818381C7007F00070007000E0E0C0E1C0 818047003C00>16 26 4 8 20]121 dc[<038207C20FEC08381008001000200040008001000200 040008081008383067F043E081C0>15 18 3 0 17]122 dc dfe /fo df[<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[<000003800000000007C0000000 0007C0000000000FE0000000000FE0000000000FE0000000001FF0000000001FF0000000003FF8 000000003FF8000000003FF80000000073FC0000000073FC00000000F3FE00000000E1FE000000 00E1FE00000001C0FF00000001C0FF00000003C0FF80000003807F80000007807FC0000007003F C0000007003FC000000E003FE000000E001FE000001E001FF000001C000FF000001FFFFFF00000 3FFFFFF800003FFFFFF80000780007FC0000700003FC0000700003FC0000E00001FE0000E00001 FE0001E00001FF0001C00000FF0001C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE001FFFFE> 47 41 2 0 52]65 dc[<00003FF001800003FFFE0380000FFFFF8780003FF007DF8000FF8001FF 8001FE00007F8003FC00003F8007F000001F800FF000000F801FE0000007801FE0000007803FC0 000007803FC0000003807FC0000003807F80000003807F8000000000FF8000000000FF80000000 00FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80 000000007F80000000007F80000000007FC0000003803FC0000003803FC0000003801FE0000003 801FE0000007000FF00000070007F000000E0003FC00001E0001FE00003C0000FF8000F800003F F007E000000FFFFFC0000003FFFF000000003FF80000>41 41 4 0 50]67 dc[22 41 2 0 26]73 dc[47 41 3 0 54]75 dc[<0000FFE000 000007FFFC0000003FC07F8000007F001FC00001FC0007F00003F80003F80007F00001FC000FF0 0001FE001FE00000FF001FE00000FF003FC000007F803FC000007F807FC000007FC07F8000003F C07F8000003FC07F8000003FC0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF80 00003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE07F8000003F C07FC000007FC07FC000007FC03FC000007F803FC000007F801FE00000FF001FE00000FF000FF0 0001FE0007F00001FC0003F80003F80001FC0007F00000FF001FE000003FC07F8000000FFFFE00 000000FFE00000>43 41 4 0 52]79 dc[39 41 3 0 47]80 dc[< 007F806003FFF0E007FFF9E00F807FE01F001FE03E0007E07C0003E07C0001E0FC0001E0FC0001 E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFE00007FFFE0003FFFFC001FFFFE000FFF FF8007FFFFC003FFFFE000FFFFE00007FFF000007FF000000FF8000007F8000003F8600001F8E0 0001F8E00001F8E00001F8F00001F0F00001F0F80003F0FC0003E0FF0007C0FFE01F80F3FFFF00 E0FFFE00C01FF000>29 41 4 0 38]83 dc[46 41 3 0 53] 85 dc[<01FF800007FFF0000F81F8001FC07E001FC07E001FC03F000F803F8007003F8000003F 8000003F8000003F80000FFF8000FFFF8007FC3F800FE03F803F803F803F003F807F003F80FE00 3F80FE003F80FE003F80FE003F807E007F807F00DF803F839FFC0FFF0FFC01FC03FC>30 27 2 0 33]97 dc[33 42 2 0 38]98 dc[<001FF80000FFFE00 03F01F0007E03F800FC03F801F803F803F801F007F800E007F0000007F000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF0000007F0000007F0000007F8000003F8001C01F80 01C00FC0038007E0070003F01E0000FFFC00001FE000>26 27 2 0 31]99 dc[<00003FF80000 003FF80000003FF800000003F800000003F800000003F800000003F800000003F800000003F800 000003F800000003F800000003F800000003F800000003F800000003F800001FE3F80000FFFBF8 0003F03FF80007E00FF8000FC007F8001F8003F8003F8003F8007F0003F8007F0003F8007F0003 F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F8007F00 03F8007F0003F8007F0003F8003F8003F8001F8003F8000F8007F80007C00FF80003F03BFF8000 FFF3FF80003FC3FF80>33 42 2 0 38]100 dc[<003FE00001FFF80003F07E0007C01F000F801F 801F800F803F800FC07F000FC07F0007C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF00 0000FF000000FF0000007F0000007F0000007F0000003F8000E01F8000E00FC001C007E0038003 F81F0000FFFE00001FF000>27 27 2 0 32]101 dc[<0007F0003FFC00FE3E01F87F03F87F03F0 7F07F07F07F03E07F00007F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F0 0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0 0007F00007F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80>24 42 2 0 21] 102 dc[<00FF81F003FFE7F80FC1FE7C1F80FC7C1F007C383F007E107F007F007F007F007F007F 007F007F007F007F007F007F003F007E001F007C001F80FC000FC1F8001FFFE00018FF80003800 0000380000003C0000003E0000003FFFF8001FFFFF001FFFFF800FFFFFC007FFFFE01FFFFFF03E 0007F07C0001F8F80000F8F80000F8F80000F8F80000F87C0001F03C0001E01F0007C00FC01F80 03FFFE00007FF000>30 40 2 13 34]103 dc[<07000FC01FE03FE03FE03FE01FE00FC0070000 00000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE>15 43 3 0 20]105 dc[< FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 FFFEFFFEFFFE>15 42 3 0 20]108 dc[53 27 3 0 58]109 dc[33 27 3 0 38]110 dc[<003FE00001FFFC0003F07E000FC01F801F800FC03F800FE03F0007 E07F0007F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF00 07F8FF0007F87F0007F07F0007F03F800FE03F800FE01F800FC00FC01F8007F07F0001FFFC0000 3FE000>29 27 2 0 34]111 dc[33 39 2 12 38]112 dc[24 27 2 0 28]114 dc [<03FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FFE0007FFE007FFF803FFF E01FFFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F80038FC0070FF01E0F7FF C0C1FF00>22 27 2 0 27]115 dc[<00700000700000700000700000F00000F00000F00001F000 03F00003F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007F00007F00007F000 07F00007F00007F00007F00007F00007F00007F03807F03807F03807F03807F03807F03803F038 03F87001F86000FFC0001F80>21 38 1 0 27]116 dc[33 27 3 0 38]117 dc[33 39 1 12 36]121 dc dfe /fp df[<70F8FCFC7404040404 080810102040>6 15 4 10 14]44 dc[<70F8F8F870>5 5 4 0 14]46 dc[<01F000071C000C06 001803003803803803807001C07001C07001C07001C0F001E0F001E0F001E0F001E0F001E0F001 E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E07001C07001C07001C07803C03803 803803801C07000C0600071C0001F000>19 34 2 1 24]48 dc[<008003800F80F38003800380 038003800380038003800380038003800380038003800380038003800380038003800380038003 800380038003800380038007C0FFFE>15 33 4 0 24]49 dc[<03F0000C1C0010070020078040 03C04003C08003E0F003E0F801E0F801E0F801E02003E00003E00003C00003C000078000070000 0E00001C0000180000300000600000C0000180000100000200200400200800201800603000403F FFC07FFFC0FFFFC0>19 33 2 0 24]50 dc[<03F8000C1E001007002007804007C07807C07803 C07807C03807C0000780000780000700000F00000E0000380003F000001C00000F000007800007 800003C00003C00003E02003E07003E0F803E0F803E0F003C04003C0400780200780100F000C1C 0003F000>19 34 2 1 24]51 dc[<1000801E07001FFF001FFE001FF80013E000100000100000 10000010000010000010000010F800130E001407001803801003800001C00001C00001E00001E0 0001E00001E07001E0F001E0F001E0E001C08001C04003C04003802007001006000C1C0003F000 >19 34 2 1 24]53 dc[<0001800000018000000180000003C0000003C0000003C0000005E000 0005E000000DF0000008F0000008F0000010F800001078000010780000203C0000203C0000203C 0000401E0000401E0000401E0000800F0000800F0000FFFF000100078001000780030007C00200 03C0020003C0040003E0040001E0040001E00C0000F00C0000F03E0001F8FF800FFF>32 35 2 0 37]65 dc[29 34 2 0 35]66 dc[<0007E010 0038183000E0063001C00170038000F0070000F00E0000701E0000701C0000303C0000303C0000 307C0000107800001078000010F8000000F8000000F8000000F8000000F8000000F8000000F800 0000F800000078000000780000107C0000103C0000103C0000101C0000201E0000200E00004007 0000400380008001C0010000E0020000381C000007E000>28 36 3 1 35]67 dc[31 34 2 0 37]68 dc[27 34 2 0 32]70 dc[40 34 2 0 45]77 dc[32 34 2 0 37]78 dc[27 34 2 0 33]80 dc[33 35 2 1 36]82 dc[<03F0200C0C601802603001E07000E0600060E00060E00060E0 0020E00020E00020F00000F000007800007F00003FF0001FFE000FFF0003FF80003FC00007E000 01E00000F00000F0000070800070800070800070800070C00060C00060E000C0F000C0C80180C6 070081FC00>20 36 3 1 27]83 dc[32 35 2 1 37]85 dc[47 35 1 1 50]87 dc[<0FE0 001838003C0C003C0E0018070000070000070000070000FF0007C7001E07003C07007807007007 00F00708F00708F00708F00F087817083C23900FC1E0>21 21 2 0 24]97 dc[<0E0000FE0000 1E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E1F00 0E61C00E80600F00300E00380E003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E 0E001C0E003C0E00380F00700C80600C41C0083F00>23 35 1 0 27]98 dc[<01FE000703000C 07801C0780380300780000700000F00000F00000F00000F00000F00000F00000F0000070000078 00403800401C00800C010007060001F800>18 21 2 0 22]99 dc[<0000E0000FE00001E00000 E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E001F8E00704E00C02 E01C01E03800E07800E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800 E03800E01801E00C02E0070CF001F0FE>23 35 2 0 27]100 dc[<01FC000707000C03801C01C0 3801C07801E07000E0F000E0FFFFE0F00000F00000F00000F00000F00000700000780020380020 1C00400E008007030000FC00>19 21 1 0 22]101 dc[<003C00C6018F038F030F070007000700 070007000700070007000700FFF807000700070007000700070007000700070007000700070007 000700070007000700070007807FF8>16 35 0 0 15]102 dc[<00007001F198071E180E0E181C 07001C07003C07803C07803C07803C07801C07001C07000E0E000F1C0019F00010000010000018 00001800001FFE000FFFC00FFFE03800F0600030400018C00018C00018C0001860003060003038 00E00E038003FE00>21 33 1 11 24]103 dc[<0E0000FE00001E00000E00000E00000E00000E 00000E00000E00000E00000E00000E00000E00000E00000E1F800E60C00E80E00F00700F00700E 00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E 00700E0070FFE7FF>24 35 1 0 27]104 dc[<1C001E003E001E001C0000000000000000000000 0000000000000E00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E 000E000E000E00FFC0>10 34 1 0 14]105 dc[<0E00FE001E000E000E000E000E000E000E000E 000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 0E000E000E000E000E00FFE0>11 35 1 0 14]108 dc[<0E1FC07F00FE60E183801E807201C00F 003C00E00F003C00E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E0 0E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800 E00E003800E0FFE3FF8FFE>39 21 1 0 42]109 dc[<0E1F80FE60C01E80E00F00700F00700E00 700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00 700E0070FFE7FF>24 21 1 0 27]110 dc[<01FC000707000C01801800C03800E0700070700070 F00078F00078F00078F00078F00078F00078F000787000707800F03800E01C01C00E0380070700 01FC00>21 21 1 0 24]111 dc[<0E1F00FE61C00E80600F00700E00380E003C0E001C0E001E0E 001E0E001E0E001E0E001E0E001E0E001E0E003C0E003C0E00380F00700E80E00E41C00E3F000E 00000E00000E00000E00000E00000E00000E00000E00000E0000FFE000>23 31 1 10 27]112 dc[<0E3CFE461E8F0F0F0F060F000E000E000E000E000E000E000E000E000E000E000E000E000E 000F00FFF0>16 21 1 0 19]114 dc[<0F8830786018C018C008C008E008F0007F803FE00FF001 F8003C801C800C800CC00CC008E018D0308FC0>14 21 2 0 19]115 dc[<020002000200020006 00060006000E001E003E00FFF80E000E000E000E000E000E000E000E000E000E000E000E040E04 0E040E040E040E040708030801F0>14 31 1 0 19]116 dc[<0E0070FE07F01E00F00E00700E00 700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00F00E00 F006017003827800FC7F>24 21 1 0 27]117 dc[23 21 1 0 26]118 dc[23 31 1 10 26 ]121 dc dfe /fq df[<000003FF80018000003FFFF003800001FFFFFC0F800007FF007F1F8000 1FF8000FBF80003FE00003FF8000FF800000FF8001FF0000007F8003FE0000003F8007FC000000 3F8007FC0000001F800FF80000001F801FF80000000F801FF00000000F803FF000000007803FF0 00000007807FF000000007807FE000000007807FE000000000007FE00000000000FFE000000000 00FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE000 00000000FFE00000000000FFE000000000007FE000000000007FE000000000007FE00000000000 7FF000000003803FF000000003803FF000000003801FF000000003801FF800000007800FF80000 00070007FC000000070007FC0000000E0003FE0000001E0001FF0000003C0000FF800000780000 3FE00000F000001FF80003E0000007FF003F80000001FFFFFE000000003FFFF80000000003FF80 0000>49 49 5 0 60]67 dc[26 49 2 0 31]73 dc[73 49 2 0 78]77 dc[<00000FFE0000000000FFFFE000000007FFFFFC00 00001FFC07FF0000003FE000FF800000FF80003FE00001FF00001FF00003FE00000FF80007FC00 0007FC0007FC000007FC000FF8000003FE001FF8000003FF001FF0000001FF003FF0000001FF80 3FF0000001FF803FF0000001FF807FE0000000FFC07FE0000000FFC07FE0000000FFC0FFE00000 00FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FF E0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE07FE0000000 FFC07FE0000000FFC07FF0000001FFC07FF0000001FFC03FF0000001FF803FF0000001FF801FF8 000003FF001FF8000003FF000FFC000007FE000FFC000007FE0007FE00000FFC0003FF00001FF8 0001FF80003FF00000FFC0007FE000003FE000FF8000001FFC07FF00000007FFFFFC00000000FF FFE0000000000FFE000000>51 49 5 0 62]79 dc[<001FF0018000FFFF038003FFFFC78007F0 0FFF800F8001FF801F00007F803F00001F803E00000F807E00000F807E00000780FE00000780FE 00000780FE00000380FF00000380FF00000380FF80000000FFE00000007FFC0000007FFFE00000 7FFFFE00003FFFFFC0001FFFFFF0001FFFFFF8000FFFFFFC0003FFFFFE0001FFFFFF00007FFFFF 80001FFFFF800000FFFFC0000007FFC0000000FFE00000003FE00000003FE00000001FE0600000 1FE0E000000FE0E000000FE0E000000FE0E000000FC0F000000FC0F000000FC0F800001F80FC00 001F80FF00003F00FFC0007E00FFFC01FC00F1FFFFF800E03FFFE000C007FF0000>35 49 5 0 46]83 dc[<3FFFFFFFFFFF003FFFFFFFFFFF003FFFFFFFFFFF003FE00FFC01FF007F000FFC003F 807E000FFC001F807C000FFC000F8078000FFC00078078000FFC00078070000FFC00038070000F FC00038070000FFC00038070000FFC000380E0000FFC0001C0E0000FFC0001C0E0000FFC0001C0 E0000FFC0001C000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC 00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000 000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00 000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC0000000000 0FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC0000 0000000FFC000000007FFFFFFF8000007FFFFFFF8000007FFFFFFF8000>50 48 3 0 57]84 dc[ 58 49 2 0 63]85 dc[<007FF8000003FFFF000007FFFFC0000FE01FE0001FF007F000 1FF003F8001FF003FC001FF001FE000FE001FE0007C001FE00010001FE00000001FE00000001FE 000001FFFE00003FFFFE0001FFF1FE0007FE01FE000FF001FE001FC001FE003F8001FE007F8001 FE00FF0001FE00FF0001FE00FF0001FE00FF0001FE00FF0003FE007F8003FE007FC00EFE003FF0 3CFF000FFFF87FF807FFF03FF800FF800FF8>37 32 2 0 40]97 dc[<0007FF00007FFFE000FF FFF003FC03F807F007FC0FE007FC1FE007FC3FC007FC3FC003F87FC001F07F8000407F800000FF 800000FF800000FF800000FF800000FF800000FF800000FF800000FF8000007F8000007FC00000 7FC000003FC0000E3FE0000E1FE0001C0FF0001C07F8007803FF01F000FFFFE0007FFF800007FC 00>31 32 3 0 37]99 dc[<00000007E0000003FFE0000003FFE0000003FFE00000003FE00000 001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE000 00001FE00000001FE00000001FE00000001FE00000001FE0000FF81FE0007FFF1FE001FFFFDFE0 03FE03FFE007F800FFE00FE0003FE01FE0001FE03FC0001FE03FC0001FE07F80001FE07F80001F E07F80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF8000 1FE0FF80001FE07F80001FE07F80001FE07F80001FE03FC0001FE03FC0001FE01FC0003FE00FE0 007FE007F001FFE003FC07DFF001FFFF9FFF007FFE1FFF000FF01FFF>40 50 3 0 46]100 dc[< 0007FC0000003FFF800000FFFFE00003FC07F00007F801F8000FE000FC001FE0007E003FC0007E 003FC0003F007FC0003F007F80003F007F80003F80FF80003F80FF80003F80FFFFFFFF80FFFFFF FF80FFFFFFFF80FF80000000FF80000000FF800000007F800000007F800000003FC00000003FC0 0003801FC00003801FE00007800FF0000F0007F8001E0003FE00FC0000FFFFF800003FFFE00000 03FF0000>33 32 2 0 38]101 dc[<001FF007E000FFFE3FF001FFFF7FF807F83FF1F80FE00FE1 F80FE00FE0F01FC007F0601FC007F0003FC007F8003FC007F8003FC007F8003FC007F8003FC007 F8001FC007F0001FC007F0000FE00FE0000FE00FE00007F83FC00007FFFF000006FFFE00000E1F F000000E000000001E000000001E000000001F000000001F800000001FFFFFC0000FFFFFF8000F FFFFFE0007FFFFFF0003FFFFFF8007FFFFFFC01FFFFFFFE03F00007FE07E00000FF0FC000007F0 FC000003F0FC000003F0FC000003F0FC000003F07E000007E03F00000FC01FC0003F800FF801FF 0007FFFFFE0000FFFFF000001FFF8000>37 47 2 15 41]103 dc[<01F800000000FFF8000000 00FFF800000000FFF8000000000FF80000000007F80000000007F80000000007F80000000007F8 0000000007F80000000007F80000000007F80000000007F80000000007F80000000007F8000000 0007F80000000007F80000000007F80000000007F807F8000007F83FFF000007F87FFF800007F8 F03FC00007F9C01FE00007FB000FE00007FE000FF00007FE000FF00007FC000FF00007FC000FF0 0007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8 000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF0 0007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000FFFF C1FFFF80FFFFC1FFFF80FFFFC1FFFF80>41 50 3 0 46]104 dc[<03C0000FF0000FF0001FF800 1FF8001FFC001FF8001FF8000FF0000FF00003C000000000000000000000000000000000000000 00000000000001F800FFF800FFF800FFF8000FF80007F80007F80007F80007F80007F80007F800 07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800 07F80007F80007F80007F80007F800FFFF80FFFF80FFFF80>17 51 3 0 23]105 dc[<01F800FF F800FFF800FFF8000FF80007F80007F80007F80007F80007F80007F80007F80007F80007F80007 F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007 F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007 F80007F80007F80007F80007F80007F80007F800FFFFC0FFFFC0FFFFC0>18 50 3 0 23]108 dc [<03F007F8000FF000FFF03FFF007FFE00FFF07FFF80FFFF00FFF0F03FC1E07F800FF1C01FE380 3FC007F3000FE6001FC007F6000FFC001FE007FE000FFC001FE007FC000FF8001FE007FC000FF8 001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000F F0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F800 0FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8 000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE0FF FFC1FFFF83FFFFFFFFC1FFFF83FFFFFFFFC1FFFF83FFFF>64 32 3 0 69]109 dc[<03F007F800 00FFF03FFF0000FFF07FFF8000FFF0F03FC0000FF1C01FE00007F3000FE00007F6000FF00007FE 000FF00007FC000FF00007FC000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF0 0007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8 000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF0 0007F8000FF00007F8000FF000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF80>41 32 3 0 46] 110 dc[<0007FE0000003FFFC00000FFFFF00003FC03FC0007F000FE000FE0007F001FC0003F80 3FC0003FC03FC0003FC07F80001FE07F80001FE07F80001FE0FF80001FF0FF80001FF0FF80001F F0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF07F80001FE07F80001FE07F8000 1FE03FC0003FC03FC0003FC01FE0007F800FE0007F0007F801FE0003FE07FC0001FFFFF800003F FFC0000007FE0000>36 32 2 0 41]111 dc[<01F80FF000FFF87FFE00FFF9FFFF80FFFFE07FC0 0FFF001FE007FE000FF007F80007F807F80007FC07F80003FC07F80003FE07F80003FE07F80001 FE07F80001FF07F80001FF07F80001FF07F80001FF07F80001FF07F80001FF07F80001FF07F800 01FF07F80001FE07F80003FE07F80003FE07F80003FC07F80007FC07FC0007F807FE000FF007FF 001FE007FBE07FC007F9FFFF0007F87FFE0007F81FE00007F800000007F800000007F800000007 F800000007F800000007F800000007F800000007F800000007F800000007F800000007F8000000 FFFFC00000FFFFC00000FFFFC00000>40 46 2 14 46]112 dc[<03F03F00FFF07FC0FFF1FFE0 FFF3C7F00FF38FF807F70FF807F60FF807FE0FF807FC07F007FC03E007FC008007F8000007F800 0007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8 000007F8000007F8000007F8000007F8000007F8000007F80000FFFFE000FFFFE000FFFFE000> 29 32 2 0 34]114 dc[<00FF870007FFEF001FFFFF003F007F003C001F0078000F00F8000700 F8000700F8000700FC000700FF000000FFF800007FFFC0003FFFF0003FFFFC000FFFFE0007FFFF 0001FFFF80001FFF800000FFC000001FC060000FC0E00007C0E00007C0F00007C0F8000780F800 0F80FE000F00FF803E00FFFFFC00F3FFF800C07FC000>26 32 3 0 33]115 dc[<003800003800 00380000380000380000780000780000780000F80000F80001F80003F80007F8001FF800FFFFFE FFFFFEFFFFFE07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800 07F80007F80007F80007F80007F80007F80707F80707F80707F80707F80707F80707F80703F80E 03FC0E01FE1C00FFF8007FF0000FE0>24 46 2 0 32]116 dc[<01F80003F000FFF801FFF000FF F801FFF000FFF801FFF0000FF8001FF00007F8000FF00007F8000FF00007F8000FF00007F8000F F00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007 F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000F F00007F8000FF00007F8000FF00007F8001FF00007F8001FF00003F8003FF00003F8006FF00001 FE03CFF80000FFFF8FFF80007FFF0FFF80000FFC0FFF80>41 32 3 0 46]117 dc[39 46 2 14 44] 121 dc dfe /fr df[<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0000E 01C0000E01C0000E01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0000E01C000 0E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0 000E01C0007F87FC00>26 29 0 0 24]11 dc[<007E0001C1800301800703C00E03C00E01800E 00000E00000E00000E00000E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E 01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07F87F8>21 29 0 0 23]12 dc[ <007FC001C1C00303C00703C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01 C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 C00E01C00E01C07FCFF8>21 29 0 0 23]13 dc[<003F07E00001C09C18000380F018000701F0 3C000E01E03C000E00E018000E00E000000E00E000000E00E000000E00E000000E00E00000FFFF FFFC000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E 00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C00 0E00E01C007FC7FCFF80>33 29 0 0 35]14 dc[<6060F0F0F8F8686808080808080810101010 202040408080>13 12 1 -17 21]34 dc[<0F0000C0188000C030600380703807006027FB00E0 100600E0100C00E0100C00E0101800E0101800E0103000E0106000602060007020C00030418000 188180000F0303C00006062000060C10000C1C0800181808001838040030380400603804006038 0400C0380400C03804018038040300180803001C0806000C100C000620040003C0>30 33 2 2 35]37 dc[<00E00000019000000308000003080000070800000708000007080000070800000710 000007100000072000000740000003C03FE003800F00038006000380040005C0040009C0080010 E0100030E010006070200060702000E0384000E03C4000E01C8000E00F0020E007002070078040 3009C0401830E18007C03E00>27 31 2 1 32]38 dc[<60F0F8680808081010204080>5 12 4 -17 12]39 dc[<004000800100020006000C000C0018001800300030007000600060006000E000 E000E000E000E000E000E000E000E000E000E000E000600060006000700030003000180018000C 000C0006000200010000800040>10 42 3 11 16]40 dc[<800040002000100018000C000C0006 00060003000300038001800180018001C001C001C001C001C001C001C001C001C001C001C001C0 018001800180038003000300060006000C000C0018001000200040008000>10 42 2 11 16]41 dc[<60F0F0701010101020204080>4 12 4 8 12]44 dc[11 2 0 -8 14]45 dc[< 60F0F060>4 4 4 0 12]46 dc[<00010003000600060006000C000C000C001800180018003000 3000300060006000C000C000C0018001800180030003000300060006000C000C000C0018001800 1800300030003000600060006000C000C000>16 41 2 10 21]47 dc[<03C00C301818300C300C 700E60066006E007E007E007E007E007E007E007E007E007E007E007E007E00760066006700E30 0C300C18180C3007E0>16 29 2 1 21]48 dc[<030007003F00C7000700070007000700070007 0007000700070007000700070007000700070007000700070007000700070007000F80FFF8>13 28 4 0 21]49 dc[<07C01830201C400C400EF00FF80FF807F8077007000F000E000E001C001C 00380070006000C00180030006010C01180110023FFE7FFEFFFE>16 28 2 0 21]50 dc[<07E0 1830201C201C781E780E781E381E001C001C00180030006007E00030001C001C000E000F000F70 0FF80FF80FF80FF00E401C201C183007E0>16 29 2 1 21]51 dc[<000C00000C00001C00003C 00003C00005C0000DC00009C00011C00031C00021C00041C000C1C00081C00101C00301C00201C 00401C00C01C00FFFFC0001C00001C00001C00001C00001C00001C00001C0001FFC0>18 28 1 0 21]52 dc[<300C3FF83FF03FC020002000200020002000200023E024302818301C200E000E000F 000F000F600FF00FF00FF00F800E401E401C2038187007C0>16 29 2 1 21]53 dc[<00F0030C 06040C0E181E301E300C700070006000E3E0E430E818F00CF00EE006E007E007E007E007E00760 0760077006300E300C18180C3003E0>16 29 2 1 21]54 dc[<4000007FFF807FFF007FFF0040 020080040080040080080000100000100000200000600000400000C00000C00001C00001800001 8000038000038000038000038000078000078000078000078000078000078000030000>17 29 2 1 21]55 dc[<03E00C301008200C20066006600660067006780C3E083FB01FE007F007F818FC30 7E601E600FC007C003C003C003C00360026004300C1C1007E0>16 29 2 1 21]56 dc[<03C00C 301818300C700C600EE006E006E007E007E007E007E0076007700F300F18170C2707C700060006 000E300C780C78187010203030C00F80>16 29 2 1 21]57 dc[<60F0F0600000000000000000 000060F0F060>4 18 4 0 12]58 dc[<60F0F0600000000000000000000060F0F0701010101020 204080>4 26 4 8 12]59 dc[<000600000006000000060000000F0000000F0000000F00000017 800000178000001780000023C0000023C0000023C0000041E0000041E0000041E0000080F00000 80F0000180F8000100780001FFF80003007C0002003C0002003C0006003E0004001E0004001E00 0C001F001E001F00FF80FFF0>28 29 1 0 31]65 dc[24 28 2 0 29]66 dc[ <001F808000E0618001801980070007800E0003801C0003801C00018038000180780000807800 008070000080F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000070 0000807800008078000080380000801C0001001C0001000E000200070004000180080000E03000 001FC000>25 30 2 1 30]67 dc[27 28 2 0 32]68 dc[24 28 2 0 28]69 dc[22 28 2 0 27]70 dc[<001F808000E0618001801980070007800E0003801C0003 801C00018038000180780000807800008070000080F0000000F0000000F0000000F0000000F000 0000F0000000F000FFF0F0000F80700007807800078078000780380007801C0007801C0007800E 00078007000B800180118000E06080001F8000>28 30 2 1 33]71 dc[26 28 2 0 31]72 dc[12 28 1 0 15]73 dc[28 28 2 0 32]75 dc[21 28 2 0 26]76 dc[33 28 2 0 38] 77 dc[ 26 28 2 0 31]78 dc[<003F800000E0E0000380380007001C000E000E001C0007003C00078038 000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0 F00001E0F00001E0700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C 000380380000E0E000003F8000>27 30 2 1 32]79 dc[23 28 2 0 28]80 dc[<003F800000E0E0000380380007001C000E000E001C0007003C00078038000380780003C078 0003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0 700001C0780003C0780003C0380003803C0E07801C1107000E208E0007205C0003A0780000F0E0 20003FE0200000602000003060000038E000003FC000003FC000001F8000000F00>27 37 2 8 32]81 dc[28 29 2 1 31]82 dc[<07E0801C1980300580700380600180E00180E00080E00080 E00080F00000F800007C00007FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001C0 8001C08001C08001C0C00180C00180E00300D00200CC0C0083F800>18 30 2 1 23]83 dc[<7F FFFFC0700F01C0600F00C0400F0040400F0040C00F0020800F0020800F0020800F0020000F0000 000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F00 00000F0000000F0000000F0000000F0000000F0000000F0000001F800003FFFC00>27 28 1 0 30]84 dc[26 29 2 1 31]85 dc[28 29 1 1 31]86 dc[40 29 1 1 43]87 dc[30 28 0 0 31]89 dc[7 41 4 10 12]91 dc[<08081010202040404040808080808080B0B0F8F878783030>13 12 6 -17 21]92 dc[7 41 0 10 12]93 dc[<1FC000307000783800781C00301C00001C00001C0001FC00 0F1C00381C00701C00601C00E01C40E01C40E01C40603C40304E801F8700>18 18 2 0 21]97 dc[19 29 1 0 23]98 dc[<07E00C301878307870306000E000E000E0 00E000E000E00060007004300418080C3007C0>14 18 2 0 18]99 dc[<003F00000700000700 00070000070000070000070000070000070000070000070003E7000C1700180F00300700700700 600700E00700E00700E00700E00700E00700E00700600700700700300700180F000C370007C7E0 >19 29 2 0 23]100 dc[<03E00C301818300C700E6006E006FFFEE000E000E000E00060007002 300218040C1803E0>15 18 1 0 18]101 dc[<00F8018C071E061E0E0C0E000E000E000E000E00 0E00FFE00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE0> 15 29 0 0 13]102 dc[<00038003C4C00C38C01C3880181800381C00381C00381C00381C0018 18001C38000C300013C0001000003000001800001FF8001FFF001FFF803003806001C0C000C0C0 00C0C000C06001803003001C0E0007F800>18 28 1 9 21]103 dc[20 29 1 0 23]104 dc[<18003C003C0018000000000000000000000000000000FC001C001C001C00 1C001C001C001C001C001C001C001C001C001C001C001C001C00FF80>9 29 1 0 12]105 dc[< 00C001E001E000C000000000000000000000000000000FE000E000E000E000E000E000E000E000 E000E000E000E000E000E000E000E000E000E000E000E000E060E0F0C0F1C061803E00>11 37 -3 8 13]106 dc[19 29 1 0 22]107 dc[9 29 1 0 12]108 dc[33 18 1 0 36] 109 dc[20 18 1 0 23]110 dc[<03F0000E1C00180600 300300700380600180E001C0E001C0E001C0E001C0E001C0E001C0600180700380300300180600 0E1C0003F000>18 18 1 0 21]111 dc[19 26 1 8 23]112 dc[<03C1000C3300180B00300F 00700700700700E00700E00700E00700E00700E00700E00700600700700700300F00180F000C37 0007C700000700000700000700000700000700000700000700003FE0>19 26 2 8 22]113 dc[< FCE01D301E781E781C301C001C001C001C001C001C001C001C001C001C001C001C00FFC0>13 18 1 0 16]114 dc[<1F9030704030C010C010E010F8007F803FE00FF000F880388018C018C018E0 10D0608FC0>13 18 1 0 16]115 dc[<04000400040004000C000C001C003C00FFE01C001C001C 001C001C001C001C001C001C001C101C101C101C101C100C100E2003C0>12 26 1 0 16]116 dc [20 18 1 0 23]117 dc[19 18 1 0 22]118 dc[27 18 1 0 30]119 dc[<7F8FF00F03800F030007020003840001C80001D8 0000F00000700000780000F800009C00010E00020E000607000403801E07C0FF0FF8>21 18 0 0 22]120 dc[19 26 1 8 22]121 dc[<7FFC70386038407040F040E041C003C0038007000F04 0E041C043C0C380870087038FFF8>14 18 1 0 18]122 dc[41 1 0 -11 42] 124 dc dfe end TeXDict begin @letter %%EndProlog %%Page: 1 1 bop -33 -46 a fr(This)13 b(page)910 b(in)n(tentionally)12 b(left)i(blank.)p eop %%Page: 2 2 bop -55 16 a fq(Using)28 b(Con)m(tin)n(uations)f(to)h(Implemen)l(t)g(Thread) f(Managemen)n(t)195 84 y(and)g(Comm)m(unication)g(in)g(Op)r(erating)g(Systems) 108 191 y fp(Ric)n(hard)16 b(P)l(.)g(Dra)o(v)o(es,)g(Brian)f(N.)h(Bershad,)g (Ric)m(hard)h(F.)f(Rashid,)g(and)h(Randall)f(W.)g(Dean)666 287 y(Sc)n(ho)r (ol)g(of)h(Computer)e(Science)672 339 y(Carnegie)h(Mellon)f(Univ)n(ersit)n (y)510 385 y(5000)j(F)-5 b(orb)r(es)16 b(Av)n(en)o(ue)g(Pittsburgh,)g(P)l(A)g (15213)-75 596 y fo(Abstract)-75 683 y fr(W)l(e)c(ha)n(v)o(e)g(impro)m(v)n (ed)g(the)g(p)q(erformance)e(of)h(the)h(Mac)o(h)f(3.0)f(op-)-75 728 y(erating) 17 b(system)h(b)o(y)f(redesigning)h(its)f(in)o(ternal)g(thread)i(and)-75 773 y (in)n(terpro)s(cess)f(comm)l(unication)e(facilities)g(to)h(use)h fn(c)n(ontin\ ua-)-75 819 y(tions)h fr(as)g(the)h(basis)f(for)g(con)o(trol)f(transfer.)35 b (Compared)18 b(to)-75 864 y(previous)j(v)o(ersions)g(of)f(Mac)o(h)g(3.0,)h (our)f(new)h(system)f(con-)-75 909 y(sumes)15 b(85%)f(less)h(space)h(p)q(er)g (thread.)22 b(Cross-address)16 b(space)-75 955 y(remote)f(pro)q(cedure)j(call\ s)d(execute)i(14%)e(faster.)24 b(Exception)-75 1000 y(handling)13 b(runs)h (o)o(v)o(er)g(60%)f(faster.)-33 1045 y(In)21 b(addition)g(to)h(impro)m(ving)f (system)h(p)q(erformance,)h(w)o(e)-75 1091 y(ha)o(v)n(e)i(used)g(con)o(tin)n (uations)f(to)g(generalize)h(man)m(y)f(con)o(trol)-75 1136 y(transfer)c(optim\ izations)c(that)i(are)h(common)d(to)j(op)q(erating)-75 1181 y(systems,)c(and) g(ha)o(v)n(e)h(recast)g(those)g(optimizations)d(in)i(terms)-75 1227 y(of)j (a)g(single)h(implem)o(en)m(tation)f(methodology)-5 b(.)32 b(This)19 b(pap)q (er)-75 1272 y(describ)r(es)g(our)f(exp)r(eriences)h(with)f(using)g(con)o(tin) n(uations)g(in)-75 1317 y(the)c(Mach)f(op)q(erating)h(system.)-75 1448 y fo (1)69 b(In)n(tro)s(duction)-75 1534 y fr(W)l(e)14 b(ha)o(v)o(e)g(ac)o(hiev)o (ed)g(signi\014can)n(t)g(impro)m(v)o(emen)n(ts)g(in)f(the)i(p)q(er-)-75 1579 y (formance)d(of)g(the)h(Mac)o(h)g(3.0)e(op)q(erating)i(system)f(k)o(ernel)i ([Ac-)-75 1625 y(cetta)e(et)g(al.)k(86])10 b(b)o(y)h(redesigning)h(it)f(to)g (use)h(con)o(tin)o(uations)e(as)-75 1670 y(the)17 b(basis)g(for)f(control)g (transfers)i(b)q(etw)n(een)g(execution)f(con-)-75 1715 y(texts.)25 b(In)16 b (our)g(system,)g(a)g(thread)g(blo)q(c)o(ks)g(in)g(the)g(k)o(ernel)h(in)-75 1761 y(one)g(of)g(t)o(w)o(o)f(w)o(a)o(ys.)28 b(It)17 b(either)h(preserves)g (its)f(register)i(state)-75 1806 y(and)10 b(stac)o(k)g(and)f(resumes)h(execut\ ion)h(b)o(y)e(restoring)h(this)g(state,)-75 1840 y 396 2 v -11 1878 a fm(This) 17 b(researc)o(h)d(w)o(as)k(sp)q(onsored)c(in)j(part)f(b)o(y)g(The)h(Defense) f(Ad-)-75 1914 y(v)n(anced)7 b(Researc)o(h)g(Pro)q(jects)h(Agency)m(,)g(Infor\ mation)e(Science)g(and)i(T)m(ec)o(h-)-75 1950 y(nology)g(O\016ce,)i(under)f (the)g(title)f(\\Researc)o(h)g(on)h(P)o(arallel)g(Computing",)-75 1986 y(ARP) m(A)h(Order)f(No.)15 b(7330,)8 b(issued)g(b)o(y)g(D)o(ARP)m(A/CMO)k(under)7 b (Con)o(tract)-75 2022 y(MDS972-90-C-0035)j(and)j(in)g(part)g(b)o(y)g(the)g (Op)q(en)g(Soft)o(w)o(are)g(F)m(ounda-)-75 2058 y(tion)d(\(OSF\).)g(Dra)o(v)o (es)g(w)o(as)h(supp)q(orted)d(b)o(y)i(a)h(fello)o(wship)e(from)g(the)h(F)m (an-)-75 2094 y(nie)e(and)f(John)h(Hertz)g(F)m(oundation.)k(Bershad)6 b(w)o (as)j(partially)d(supp)q(orted)-75 2130 y(b)o(y)11 b(a)h(National)f(Science)f (F)m(oundation)f(Presiden)o(tial)g(Y)m(oung)i(In)o(v)o(estiga-)-75 2166 y(tor) g(Aw)o(ard.)-40 2201 y(The)18 b(views)g(and)f(conclusions)f(con)o(tained)f (in)j(this)f(do)q(cumen)o(t)e(are)-75 2237 y(those)10 b(of)h(the)g(authors)f (and)g(should)g(not)h(b)q(e)g(in)o(terpreted)d(as)j(represen)o(t-)-75 2273 y (ing)h(the)g(o\016cial)g(p)q(olicies,)e(either)h(expressed)g(or)h(implied,)f (of)h(D)o(ARP)m(A,)-75 2309 y(OSF,)j(the)e(F)m(annie)g(and)h(John)f(Hertz)h (F)m(oundation,)e(the)i(NSF,)g(or)g(the)-75 2345 y(U.S.)d(go)o(v)o(ernmen)o (t.)1013 584 y fr(or)h(it)g(sp)r(eci\014es)i(its)e(resumption)g(con)o(text)i (as)e(a)h fn(c)m(ontinuation)p fr(,)1013 629 y(a)f(function)g(that)h(the)g (thread)g(should)g(execute)h(when)f(it)f(next)1013 674 y(runs.)26 b(By)17 b fn (al)r(lowing)f fr(a)g(thread)h(to)f(blo)q(c)o(k)g(with)g(a)h(con)o(tin)n(ua-) 1013 720 y(tion,)f(the)i(k)n(ernel)g(programmer)d(can)i(sa)o(v)n(e)h(space)g (and)e(time)1013 765 y(during)k(thread)h(managemen)m(t.)39 b(Con)n(tin)o(uati\ ons)20 b(enable)h(a)1013 810 y(thread)d(to)f(discard)h(its)g(stac)o(k)g(while) f(block)n(ed,)i(thereby)e(re-)1013 856 y(ducing)j(the)h(space)g(required)g (to)f(supp)r(ort)g(threads)i(in)d(the)1013 901 y(k)n(ernel.)34 b(Con)n(tin)o (uations)18 b(also)h(allo)m(w)g(a)f(thread)i(to)e(presen)q(t)1013 946 y(a)c (high-lev)n(el)h(represen)r(tation)f(of)h(its)g(execution)h(state)f(while) 1013 991 y(bloc)o(k)o(ed,)c(reducing)g(con)o(trol)f(transfer)i(o)n(v)o(erhead) f(b)q(ecause)h(the)1013 1037 y(state)i(can)g(b)q(e)g(examined)f(and)g(acted)i (up)q(on.)j(By)c(not)f fn(r)n(e)n(quir-)1013 1082 y(ing)k fr(a)g(thread)h(to) f(blo)q(c)o(k)h(with)f(a)g(con)o(tin)n(uation,)g(the)h(k)o(ernel)1013 1127 y (programmer)13 b(can)k(rely)f(on)g(a)g(traditional)f(st)o(yle)h(of)g(concur-) 1013 1173 y(ren)o(t)d(programmi)o(ng)d(when)j(using)f(a)g(con)o(tin)o(uation) g(w)n(ould)g(b)r(e)1013 1218 y(di\016cult.)1054 1268 y(Con)o(tin)n(uations)20 b(ha)n(v)o(e)g(enabled)g(us)g(to)g(reduce)h(the)g(stor-)1013 1313 y(age)c(req\ uiremen)o(ts)h(of)f(the)i(Mac)o(h)e(k)o(ernel)i(and)e(impro)m(v)o(e)h(its) 1013 1358 y(run)o(time)c(p)q(erformance.)22 b(Compared)15 b(to)g(earlier,)g (optimized)1013 1404 y(v)n(ersions)g(of)f(Mac)o(h)g(3.0)f(on)h(a)f(DECstation) h(3100,)f(for)g(exam-)1013 1449 y(ple,)g(our)i(new)f(system)g(consumes)g(o)o (v)o(er)h(85%)e(less)i(space)g(p)q(er)1013 1494 y(thread)k(b)o(y)g(making)d (k)o(ernel)j(stacks)g(p)q(er-pro)r(cessor,)i(rather)1013 1540 y(than)c(p)q (er-thread,)i(resources.)30 b(A)17 b(cross-address)i(space)f(re-)1013 1585 y (mote)e(pro)q(cedure)j(call)e(\(RPC\))g(executes)j(14%)c(faster.)29 b(Ex-) 1013 1630 y(ception)12 b(handling)e(p)r(erformance,)h(crucial)h(to)g(the)g (em)n(ulation)1013 1676 y(of)18 b(sev)o(eral)h(non-Unix)f(op)q(erating)g(syst\ ems,)i(has)f(impro)m(v)n(ed)1013 1721 y(b)n(y)13 b(a)e(factor)i(of)e(t)o(w)o (o)h(to)g(three.)19 b(Additionally)-5 b(,)12 b(con)o(tin)n(uations)1013 1766 y (enable)g(man)m(y)h(common)c(control)j(transfer)h(optimizations)d(to)1013 1812 y(b)q(e)k(recast)i(in)e(terms)g(of)f(a)h(single)g(implemen)l(tation)g(method-) 1013 1857 y(ology)-5 b(.)1054 1906 y(The)19 b(system)g(describ)r(ed)g(in)g (this)f(pap)q(er)i(is)e(in)h(daily)e(use)1013 1952 y(b)n(y)f(researc)q(hers)h (at)f(Carnegie)g(Mellon)f(and)h(elsewhere.)26 b(W)m(e)1013 1997 y(b)q(eliev)n (e)c(that)f(our)h(technique)f(of)g(using)g(con)o(tin)n(uations)g(to)1013 2042 y(manage)16 b(con)o(trol)i(transfers)h(will)e(yield)g(similar)f(results)j(for) 1013 2088 y(other)h(op)q(erating)g(system)g(k)o(ernels)i(that,)f(lik)n(e)f (Mac)o(h,)i(rely)1013 2133 y(on)12 b(threads)i(and)e(in)o(terpro)r(cess)i(com\ m)l(unication)f(to)f(supp)r(ort)1013 2178 y(m)m(ultithreaded)19 b(programming) d(and)i(distributed)i(comput-)1013 2224 y(ing)f([Mullender)h(et)g(al.)36 b (90,)19 b(Rozier)h(et)g(al.)35 b(88,)19 b(Thack)n(er)1013 2269 y(et)14 b(al.) j(88].)1013 2402 y fl(1.1)55 b(Managing)20 b(Con)o(trol)f(Flo)n(w)h(in)f(Op)r (erat-)1140 2455 y(ing)g(System)d(Kernels)1013 2534 y fr(In)10 b(the)i(past,) f(op)q(erating)f(systems)h(ha)o(v)o(e)g(relied)g(on)f(one)h(of)f(t)o(w)o(o) 1013 2580 y(distinct)f(models)g(for)g(executing)i(within)d(the)i(k)o(ernel:) 16 b(the)10 b fn(pr)n(o-)1013 2625 y(c)m(ess)17 b(mo)n(del)e fr(and)g(the)h fn (interrupt)f(mo)n(del)p fr(.)23 b(With)14 b(the)i(pro)q(cess)p eop %%Page: 3 3 bop -75 -46 a fr(model,)11 b(the)g(k)o(ernel's)h(address)g(space)g(con)o(tai\ ns)f(one)g(stack)g(for)-75 -1 y(ev)o(ery)16 b(thread)f(in)f(the)i(system.)k (When)15 b(a)f(thread)i(traps)f(in)o(to)-75 44 y(the)c(k)o(ernel)g(due)g(to)f (a)g(system)h(call)e(or)i(a)f(fault,)g(it)g(uses)i(its)e(ded-)-75 90 y(icated) k(k)o(ernel)g(stac)o(k)g(to)f(k)o(eep)i(trac)o(k)e(of)g(execution)i(state.)j (In)-75 135 y(this)f(w)n(a)o(y)m(,)f(the)i(thread)f(can)g(b)q(e)g(descheduled) g(and)g(resched-)-75 180 y(uled)h(at)g(an)o(y)g(time)f(while)g(executing)i (in)f(the)g(k)o(ernel,)i(since)-75 226 y(its)e(en)o(tire)h(state)g(is)f(sa)o (v)o(ed)g(while)g(block)n(ed.)32 b(Unix)17 b([Ritc)n(hie)-75 271 y(&)c(Thomps\ on)f(78])g(is)h(an)g(example)f(of)h(an)g(op)q(erating)g(system)-75 316 y(that) h(relies)g(on)g(the)h(pro)q(cess)g(model.)-33 365 y(In)10 b(con)o(trast)i(to) e(the)h(pro)r(cess)h(mo)o(del,)f(the)h(in)n(terrupt)g(mo)o(del)-75 410 y(trea\ ts)h(system)f(calls)g(and)h(faults)e(lik)n(e)i(in)n(terrupts:)19 b(all)11 b (execu-)-75 456 y(tion)j(inside)h(the)g(k)o(ernel)g(uses)h(a)e(single)h(p)q (er-pro)r(cessor)h(stack)-75 501 y(in)c(the)g(k)o(ernel's)h(address)g(space.) 19 b(Threads)13 b(that)f(blo)q(c)o(k)g(while)-75 546 y(in)18 b(the)i(k)o(erne\ l)f(m)n(ust)g(\014rst)g(sa)o(v)o(e)g(information)d(ab)q(out)j(their)-75 592 y (execution)f(context.)29 b(This)18 b(sa)o(v)o(ed)g(information)d(is)i(used)i (to)-75 637 y(later)10 b(resume)g(the)h(bloc)o(k)o(ed)f(thread)h(in)e(an)h (appropriate)g(state.)-75 682 y(Quic)o(kSilv)n(er)15 b([Haskin)f(et)h(al.)k (88])13 b(and)i(V)f([Cheriton)h(88])e(are)-75 728 y(examples)j(of)g(op)q(erat\ ing)h(systems)g(that)g(rely)f(on)h(the)g(in)o(ter-)-75 773 y(rupt)d(model.) -33 822 y(The)i(main)d(adv)n(an)n(tage)j(of)f(the)h(pro)q(cess)i(mo)o(del)e (is)f(that)h(it)-75 867 y(can)i(b)r(e)g(easily)g(programmed)d(|)j(k)o(ernel)h (threads)g(ha)n(v)o(e)g(no)-75 912 y(\\sp)q(ecial")g(constrain)o(ts)h(on)f (when)h(they)g(can)f(blo)q(c)o(k)g(or)g(ref-)-75 958 y(erence)i(pageable)e (memory)-6 b(.)34 b(Unfortunately)m(,)20 b(the)g(pro)q(cess)-75 1003 y(model) 11 b(has)h(t)o(w)o(o)f(p)r(erformance)g(problems.)16 b(First,)c(since)h(eac)o (h)-75 1048 y(thread)19 b(requires)g(a)f(stac)o(k)g(in)g(the)g(k)o(ernel's)h (address)g(space,)-75 1094 y(the)13 b(pro)q(cess)h(mo)o(del)f(can)f(consume)g (large)g(amoun)m(ts)g(of)g(mem-)-75 1139 y(ory)l(.)28 b(Second,)19 b(b)q(ecau\ se)f(a)f(k)o(ernel)h(stack)f(re\015ects)i(the)f(state)-75 1184 y(of)12 b(a)g (blo)q(c)o(k)o(ed)h(thread)g(at)g(the)g(mac)n(hine)f(lev)o(el)g(in)h(terms)f (of)g(re-)-75 1230 y(turn)f(addresses,)h(sa)o(v)o(ed)f(registers)g(and)f(auto\ matic)f(v)m(ariables,)-75 1275 y(it)16 b(is)h(di\016cult)f(to)h(ev)n(aluate)f (that)h(state)h(and)f(to)f(implemen)l(t)-75 1320 y(optimizations)h(that)j(red\ uce)h(the)f(latency)g(of)f(transferring)-75 1365 y(con)o(trol)14 b(from)e(one) i(thread)g(to)g(another.)-75 1494 y fl(1.2)56 b(A)16 b(Brief)f(History)f(of)i (Con)o(trol)f(T)l(ransfer)53 1546 y(in)j(Mac)o(h)-75 1625 y fr(Early)j(v)o (ersions)i(of)e(the)h(Mac)o(h)g(op)q(erating)f(system)h(k)o(ernel)-75 1670 y (relied)g(on)f(the)h(pro)q(cess)h(model)e(for)g(t)o(w)o(o)g(reasons.)42 b(Fir\ st,)-75 1715 y(the)20 b(Mac)o(h)g(k)n(ernel)h(w)n(as)f(patterned)h(after)f (Accent)g([Rashid)-75 1761 y(&)14 b(Rob)q(ertson)h(81],)d(whic)o(h)i(used)h (the)g(pro)q(cess)g(model.)j(With)-75 1806 y(m)m(uch)c(of)g(the)h(o)n(v)o(era\ ll)f(design)g(of)g(Mac)o(h)g(and)g(p)r(ortions)g(of)f(its)-75 1851 y(co)q(de) 19 b(deriv)o(ed)f(directly)g(from)e(Accent,)j(it)e(w)o(as)h(natural)f(for)-75 1897 y(Mac)o(h)10 b(to)h(use)g(Accent's)g(pro)q(cess)h(mo)o(del)f(as)f(w)o (ell)g([Rashid)f(86].)-75 1942 y(Second,)i(early)e(v)o(ersions)h(of)f(Mac)o (h)h(included)g(a)f(Unix)g(compat-)-75 1987 y(ibilit)m(y)14 b(la)n(y)n(er)h (whic)o(h)e(executed)j(in)d(k)n(ernel)i(mo)o(de.)j(This)c(la)n(y)o(er)-75 2032 y(w)o(as)j(implemen)m(ted)h(with)f(soft)o(w)o(are)g(from)f(BSD)i(Unix)f([Lef-) -75 2078 y(\015er)g(et)g(al.)24 b(89],)15 b(an)h(op)q(erating)g(system)g(base\ d)h(on)f(the)h(pro-)-75 2123 y(cess)d(model.)j(Signi\014can)n(t)c(programmi)o (ng)d(e\013ort)j(w)o(ould)f(ha)n(v)o(e)-75 2168 y(b)q(een)21 b(required)g(to) f(use)h(a)f(di\013eren)o(t)h(con)o(trol)e(model)h(while)-75 2214 y(that)14 b (co)q(de)h(remained)e(in)g(the)i(k)n(ernel.)-33 2262 y(As)j(Mac)o(h)g(ev)o (olv)n(ed,)g(it)g(b)q(ecame)f(clear)i(that)e(the)i(pro)q(cess)-75 2308 y(mode\ l)d(w)o(as)h(inappropriate.)27 b(In)17 b(Accent,)h(thread)f(manage-)-75 2353 y (men)n(t)k(primitiv)l(es)g(w)o(ere)h(handled)e(in)g(microco)q(de,)i(so)f(they) -75 2398 y(w)o(ere)e(quite)f(fast)g(relativ)n(e)g(to)g(the)h(mac)m(hine's)f (CPU)g(sp)r(eed.)-75 2444 y(In)13 b(con)o(trast,)g(Mac)o(h)g(w)n(as)g(designe\ d)g(to)g(run)g(on)f(a)h(wide)f(range)-75 2489 y(of)i(arc)o(hitectures.)21 b (so)14 b(w)o(e)h(could)f(not)g(assume)g(microco)q(de)h(to)-75 2534 y(reduce)h (thread)e(managemen)m(t)g(costs.)19 b(Also,)13 b(unlik)n(e)h(Accen)q(t,)-75 2580 y(Mac)o(h)g(supp)r(orts)g(m)n(ultiple)f(threads)i(of)f(con)o(trol)f(p)q (er)i(address)-75 2625 y(space.)24 b(This)15 b(resulted)h(in)f(situations)g (where)i(a)e(small)e(n)o(um-)1013 -46 y(b)q(er)f(of)e(programs)h(migh)l(t)h (b)q(e)g(using)f(large)g(n)o(um)m(b)q(ers)i(of)d(k)o(ernel)1013 -1 y(threads.) 18 b(With)11 b(the)h(pro)r(cess)h(model,)e(each)h(of)f(these)i(threads)1013 44 y(w)n(ould)i(consume)f(4)h(kilob)m(ytes)h(of)e(stack)g(in)h(the)g(k)o(ernel's) g(ad-)1013 90 y(dress)20 b(space.)35 b(Finally)-5 b(,)20 b(as)f(the)h(Unix)e (compatibilit)l(y)h(co)q(de)1013 135 y(mo)m(v)n(ed)i(out)f(of)g(the)h(k)n(ern\ el)g(and)f(in)o(to)g(user)h(space)g([Golub)1013 180 y(et)12 b(al.)k(90],)11 b (there)i(w)o(as)e(no)h(longer)f(a)g(need)i(to)e(use)i(the)f(pro)q(cess)1013 226 y(mo)o(del)g(in)f(the)i(k)n(ernel)g(purely)f(to)g(supp)q(ort)g(Unix)g(com\ patibil-)1013 271 y(it)n(y)l(.)1054 321 y(Our)18 b(reev)o(aluation)e(of)g(the) i(pro)r(cess)h(mo)o(del)f(w)n(as)g(acceler-)1013 366 y(ated)13 b(b)o(y)g(our) g(desire)i(to)e(e\016cien)o(tly)g(supp)r(ort)g(small)e(systems,)1013 412 y (fast)25 b(RISC)f(unipro)q(cessors,)30 b(and)25 b(m)m(ultipro)q(cessors.)53 b (Al-)1013 457 y(though)10 b(it)g(is)g(no)o(w)g(common)d(to)k(\014nd)f(w)o(ork\ stations)g(equipp)q(ed)1013 502 y(with)f(32)g(megab)m(ytes)i(or)e(more)g(of)f (memory)-5 b(,)9 b(w)o(e)h(w)o(an)o(ted)g(Mac)o(h)1013 548 y(to)15 b(run)h (e\016cien)o(tly)g(on)f(small)f(PCs,)i(laptops)f(and)h(noteb)q(o)q(ok)1013 593 y(computers,)c(whic)o(h)h(t)o(ypically)f(ha)o(v)o(e)h(less)h(than)f(8)g(megab) m(ytes)1013 638 y(of)k(memory)-6 b(.)29 b(Consequently)m(,)18 b(it)f(w)o(as)h (critical)f(to)h(k)o(eep)g(the)1013 683 y(k)n(ernel's)k(memory)c(requiremen)o (ts)j(lo)n(w.)39 b(F)m(urthermore,)22 b(as)1013 729 y(pro)q(cessor)12 b(sp)r (eed)g(increases,)g(the)g(relativ)n(e)f(cost)h(of)e(cache)h(and)1013 774 y (TLB)k(misses)g(also)g(gro)n(ws.)23 b(W)l(e)16 b(exp)q(ected)h(that)e(if)g (w)n(e)h(made)1013 819 y(k)n(ernel)21 b(stac)o(ks)f(more)f(of)h(a)f(p)q(er-pr\ o)r(cessor,)k(rather)d(than)g(a)1013 865 y(p)q(er-thread)11 b(resource,)h(the\ n)e(the)h(n)o(um)m(b)r(er)f(of)f(cache)h(and)g(TLB)1013 910 y(misses)h(on)h (references)k(to)c(k)n(ernel)h(stacks)f(w)o(ould)g(b)q(e)h(reduced.)1013 955 y (Additionally)-6 b(,)20 b(Mac)o(h)g(runs)g(on)f(cac)o(he-coheren)q(t)g(m)n (ultipro-)1013 1001 y(cessors,)24 b(and)e(these)h(mac)m(hines)f(are)g(most)e (e\016cient)h(when)1013 1046 y(dealing)c(with)i(p)q(er-pro)r(cessor)h(data)e (structures)j([Anderson)1013 1091 y(et)14 b(al.)j(89].)1054 1141 y(W)l(e)f (w)o(ere)h(also)e(concerned)j(ab)q(out)d(the)i(latency)e(of)h(trans-)1013 1187 y(ferring)11 b(con)o(trol)g(from)e(one)j(thread)g(to)f(another.)18 b(Our)11 b (exp)r(eri-)1013 1232 y(ences)j(designing)e(fast)h(in)n(terpro)r(cess)h(comm) m(unication)d(\(IPC\))1013 1277 y(systems)k([Dra)n(v)n(es)h(90,)e(Bershad)j (90])c(taugh)o(t)i(us)h(sev)o(eral)f(im-)1013 1323 y(p)q(ortan)o(t)g(lessons) h(regarding)e(lo)o(w)g(latency)i(con)o(trol)e(transfer.)1013 1368 y(W)l(e)i (w)o(an)n(ted)h(to)e(apply)g(these)j(lessons)e(in)g(a)f(general)h(w)o(a)n(y)g (to)1013 1413 y(other)e(k)n(ernel-level)f(con)o(trol)h(transfer)g(paths.)k (While)13 b(lo)n(w)h(la-)1013 1459 y(tency)j(w)n(as)g(imp)o(ortan)o(t)f(for)g (the)h(cross-address)h(space)f(RPC)1013 1504 y(path,)11 b(esp)r(ecially)g(sin\ ce)h(most)e(of)h(the)h(op)q(erating)g(system)f(w)o(as)1013 1549 y(implem)o (en)m(ted)k(at)f(user)i(lev)o(el,)e(other)h(paths,)g(such)f(as)h(excep-)1013 1594 y(tion)e(handling,)f(w)o(ere)i(also)f(b)r(ecoming)f(imp)o(ortan)o(t.)18 b (F)m(ast)c(ex-)1013 1640 y(ception)c(handling,)f(for)h(example,)g(b)q(ecomes) g(necessary)i(when)1013 1685 y(using)g(virtual)f(memory)f(primitiv)m(es)j(fro\ m)d(user)k(lev)o(el)e([App)q(el)1013 1730 y(&)f(Li)h(91],)e(or)i(when)g(em)n (ulating)e(one)i(op)q(erating)g(system)f(with)1013 1776 y(another)f([Blac)o (k)g(et)h(al.)16 b(91].)g(Moreo)o(v)o(er,)11 b(b)q(ecause)h(Mac)o(h)e(runs) 1013 1821 y(on)i(a)h(wide)h(v)m(ariet)o(y)f(of)g(pro)q(cessor)i(arc)o(hitectu\ res,)g(it)e(w)o(as)g(im-)1013 1866 y(p)q(ortan)o(t)h(that)g(w)o(e)h(could)f (apply)f(our)h(general)h(solutions)e(in)h(a)1013 1912 y(mac)m(hine-indep)q (endent)j(fashion)e(|)g(ad)h(ho)q(c)h(assem)n(bly)f(lan-)1013 1957 y(guage)j (solutions)h(to)f(p)r(erformance)g(problems)g(w)o(ere)i(unac-)1013 2002 y(cep\ table.)1013 2137 y fl(1.3)55 b(Some)17 b(Inadequate)h(Solutions)1013 2217 y fr (V)l(ery)g(early)f(on,)g(w)o(e)h(realized)f(that)h(w)n(e)g(needed)h(to)e(addr\ ess)1013 2262 y(the)j(size)g(and)f(sp)r(eed)h(problems)f(asso)q(ciated)h(with) f(manag-)1013 2308 y(ing)12 b(large)g(n)o(um)m(b)r(ers)h(of)g(threads)g(in)g (the)g(k)o(ernel.)18 b(As)13 b(our)g(\014rst)1013 2353 y(solution,)c(w)o(e)h (modi\014ed)g(our)g(user-level)g(threads)h(pac)o(k)n(age,)f(C-)1013 2398 y (Threads)16 b([Coop)q(er)h(&)e(Dra)o(v)o(es)h(88],)e(so)i(that)g(it)f(m)m(ult\ iplexed)1013 2444 y(user-lev)o(el)e(threads)h(on)e(top)h(of)f(k)o(ernel-lev)o (el)h(threads)g([Golub)1013 2489 y(et)21 b(al.)38 b(90].)h(Our)21 b(in)o(ten) o(tion)g(w)n(as)g(to)g(reduce)i(the)e(k)o(ernel)1013 2534 y(space)i(required) g(to)g(supp)q(ort)g(large)f(n)o(um)m(b)r(ers)h(of)f(threads)1013 2580 y(since) 14 b(one)f(k)o(ernel-lev)o(el)h(thread)g(could)f(supp)r(ort)g(man)n(y)g(user-) 1013 2625 y(lev)n(el)19 b(threads)g(in)f(the)h(same)f(address)i(space.)33 b (F)l(urther,)21 b(as)p eop %%Page: 4 4 bop -75 -44 a fr(noted)15 b(elsewhere)i([Anderson)e(et)g(al.)20 b(91,)13 b (Marsh)i(et)g(al.)20 b(91],)-75 1 y(user-level)11 b(threads)g(can)h(also)e (reduce)i(the)g(latency)f(of)f(switch-)-75 47 y(ing)18 b(b)r(et)o(w)o(een)i (t)o(w)o(o)f(threads)h(when)f(b)q(oth)g(are)h(in)f(the)g(same)-75 92 y(addres\ s)c(space.)-33 141 y(Our)h(use)h(of)f(C-Threads)h(eased,)g(but)g(did)f(not)g (solv)n(e,)h(the)-75 187 y(space)g(problems)d(of)h(the)h(pro)q(cess)h(model.) 23 b(First,)16 b(ev)o(ery)g(ad-)-75 232 y(dress)c(space)f(still)e(required)i (at)g(least)f(one)h(k)n(ernel-level)f(thread)-75 277 y(b)q(ecause)15 b(k)o (ernel-level)e(threads)i(cannot)f(b)q(e)g(shared)h(b)q(etw)o(een)-75 323 y (address)k(spaces.)33 b(Doing)17 b(so)h(in)g(Mac)o(h)g(w)o(ould)g(create)h (sub-)-75 368 y(stan)o(tial)11 b(protection)i(problems.)j(Eac)o(h)c(em)n(ulat\ ed)g(Unix)g(pro-)-75 413 y(gram)e(used)j(one)f(k)o(ernel)g(thread)h(as)f(its) g(Unix)f(\\pro)q(cess,")j(and)-75 458 y(each)j(m)n(ultithreaded)h(program)e (running)h(with)h(C-Threads)-75 504 y(used)f(at)g(least)f(one)h(k)o(ernel)g (thread)g(as)f(its)h(\\virtual)e(pro)q(ces-)-75 549 y(sor.")i(A)12 b(second)h (problem)d(with)h(putting)g(user-level)g(threads)-75 594 y(on)20 b(top)f(of)h (the)g(k)o(ernel's)h(pro)q(cess)g(model)f(is)f(that)h(threads)-75 640 y(that) 11 b(block)n(ed)g(while)g(executing)g(within)f(the)h(k)o(ernel)h(still)d(con-) -75 685 y(sumed)18 b(a)g(k)n(ernel)h(stack.)31 b(As)18 b(a)g(result,)i(w)o (e)e(observed)g(that)-75 730 y(C-Threads,)k(on)e(a)o(v)o(erage,)i(w)o(as)e (only)g(able)g(to)g(reduce)i(the)-75 776 y(n)o(um)m(b)r(er)15 b(of)f(k)n(erne\ l-level)g(threads)i(in)e(the)h(system)f(b)o(y)h(ab)q(out)-75 821 y(a)f(factor) f(of)h(t)o(w)o(o.)-33 870 y(User-lev)o(el)21 b(threads)h(excel)g(at)e(impro)m (ving)h(p)q(erformance)-75 916 y(when)13 b(applications)e(ha)o(v)n(e)i(little) e(in)o(v)o(olv)n(emen)n(t)h(with)g(the)h(k)o(er-)-75 961 y(nel.)20 b(While)14 b fn(multipr)m(o)n(c)n(essor)h fr(programs)e(tend)i(to)g(sta)o(y)g(a)n(w)o (a)o(y)-75 1006 y(from)10 b(the)i(k)o(ernel,)g(our)g(exp)q(erience)h(with)f fn (multithr)l(e)n(ade)o(d)g fr(pro-)-75 1052 y(grams)20 b(suc)o(h)h(as)g(server\ s)h(has)f(sho)o(wn)g(them)f(to)h(b)q(e)g(k)o(ernel)-75 1097 y(in)n(tensive,)i (for)f(example,)g(b)q(ecause)h(of)e(IPC,)h(page)f(faults,)-75 1142 y(and)c (exceptions.)30 b(So,)17 b(while)g(user-lev)o(el)h(threads)g(partially)-75 1188 y(address)h(the)f(space)g(requiremen)o(ts)g(of)e(m)n(ultithreaded)i(pro-) -75 1233 y(grams,)12 b(they)i(alone)f(are)h(not)f(enough.)18 b(W)m(e)c(needed) h(a)e(k)o(ernel)-75 1278 y(solution)g(to)h(solv)n(e)g(a)g(k)o(ernel)g(problem\ .)-33 1327 y(Our)19 b(exp)r(erience)i(with)d(other)i(systems)f(such)g(as)h (Quic)o(k-)-75 1373 y(Silv)n(er)d(and)f(RIG)g([Ball)f(et)i(al.)25 b(76])16 b (led)g(us)h(to)f(consider)i(the)-75 1418 y(in)n(terrupt)g(model,)f(but)g(w)o (e)g(\014nally)e(concluded)j(that)e(it)h(w)n(as)-75 1463 y(inappropriate)i (for)h(the)g(Mac)o(h)g(k)o(ernel.)36 b(In)20 b(its)g(fa)n(v)o(or,)h(the)-75 1509 y(in)n(terrupt)f(model)e(consumes)h(few)f(k)o(ernel)h(resources,)j(since) -75 1554 y(threads)g(don't)e(ha)o(v)n(e)i(dedicated)f(k)o(ernel)g(stacks.)39 b (On)21 b(the)-75 1599 y(other)11 b(hand,)f(the)h(model)f(can)g(b)q(e)h(di\016\ cult)f(to)g(program,)f(since)-75 1645 y(ev)o(ery)20 b(p)r(oten)o(tially)e(blo\ c)o(king)h(op)q(eration)h(requires)g(sp)r(ecial-)-75 1690 y(purp)r(ose)d(co)r (de)g(to)g(sa)o(v)o(e)g(and)g(restore)i(state.)28 b(F)m(urther,)18 b(this)-75 1735 y(co)q(de)13 b(ma)m(y)f(ha)o(v)o(e)h(to)f(p)q(eek)h(o)o(v)n(er)g(module) f(b)q(oundaries)h(so)f(that)-75 1781 y(a)k(blo)q(c)o(king)g(mo)o(dule)h(can)f (sa)o(v)o(e)h(state)g(for)f(its)g(callers,)h(ham-)-75 1826 y(p)q(ering)k(a)f (system's)g(main)m(tainabilit)m(y)l(.)38 b(F)l(or)21 b(Mac)o(h,)h(whic)n(h) -75 1871 y(runs)12 b(on)f(m)m(ultipro)q(cessors)i(\(i.e.,)e(loc)o(ks)h(are)g (used)g(in)n(ternally\),)-75 1917 y(and)h(supp)r(orts)g(virtual)g(memory)e (\(i.e.,)h(the)h(k)o(ernel)h(can)f(page)-75 1962 y(fault\),)f(w)n(e)h(felt)g (that)f(the)h(in)o(terrupt)h(mo)o(del)f(w)o(as)f(unmanage-)-75 2007 y(able,)h (and)h(therefore)h(unacceptable.)-75 2138 y fl(1.4)56 b(Restructuring)17 b (With)h(Con)o(tin)n(uations)-75 2217 y fr(W)l(e)13 b(ha)o(v)n(e)g(restructure\ d)i(the)e(Mac)o(h)f(k)o(ernel)h(so)f(that)h(a)f(thread)-75 2262 y(can)f(use)h (either)g(the)g(pro)q(cess)h(mo)o(del)e(or)g(the)h(in)o(terrupt)g(mo)o(del) -75 2308 y(when)f(blocking.)16 b(When)11 b(a)f(thread)h(blocks)f(using)h(the) g(pro)q(cess)-75 2353 y(model,)19 b(its)f(curren)q(t)g(execution)i(state)f (is)f(recorded)j(on)d(the)-75 2398 y(stack.)k(The)16 b(blo)q(c)o(k)o(ed)g(thr\ ead)g(is)g(resumed)f(with)h(a)f(con)o(text-)-75 2444 y(switc)o(h.)48 b(When) 24 b(a)f(thread)h(blo)q(c)o(ks)g(using)f(the)i(in)n(terrupt)-75 2489 y(model,) e(it)f(records)i(the)f(execution)g(con)o(text)g(in)f(whic)o(h)g(it)-75 2534 y (should)10 b(b)q(e)g(resumed)g(in)g(an)g(auxiliary)e(data)h(structure,)k(call\ ed)-75 2580 y(a)k fn(c)n(ontinuation)i fr([Milne)e(&)h(Strac)o(hey)h(76].)58 b (The)18 b(blo)q(c)o(k)o(ed)-75 2625 y(thread)c(is)g(resumed)g(b)o(y)f(means)g (of)g(a)h(call)f(to)g(the)h(sa)o(v)o(ed)g(con-)1013 -46 y(tin)n(uation.)j(Our) e(new)f(approac)o(h)f(o\013ers)i(several)e(adv)n(an)o(tages)1013 -1 y(o)n(v)o (er)k(one)f(that)g(uses)i(the)f(in)n(terrupt)g(model)f(or)g(the)h(pro)q(cess) 1013 44 y(mo)o(del)d(alone:)1054 149 y fk(\017)21 b fn(It)c(pr)m(ovides)h(the) f(e)n(ase-of-use)h(advantages)h(of)e(the)g(pr)n(o-)1096 194 y(c)m(ess)c(mo)n (del.)k fr(A)11 b(thread)g(ma)m(y)g(block)f(with)h(its)g(stac)o(k)g(con-)1096 239 y(text)k(in)o(tact)g(at)h(an)n(y)f(time)f(within)h(the)g(k)o(ernel.)23 b (This)15 b(is)1096 285 y(imp)o(ortan)o(t)j(when)h(the)g(in)o(terrupt)h(mo)o (del)f(w)n(ould)f(\\not)1096 330 y(b)q(e)23 b(con)o(v)n(enient,")h(sa)o(y)e (b)q(ecause)i(a)e(thread)h(is)g(deeply)1096 375 y(nested)18 b(in)e(a)g(functi\ on)h(call)f(c)o(hain)g(when)h(it)f(blo)q(c)o(ks)h(on)1096 421 y(a)d(semaphore\ ,)f(or)i(b)q(ecause)h(it)e(has)h(tak)n(en)g(a)f(page)h(fault)1096 466 y(while) e(executing)i(in)e(the)h(k)o(ernel.)1054 562 y fk(\017)21 b fn(It)16 b(pr)n (ovides)h(the)g(p)n(erformanc)m(e)g(advantages)h(of)f(the)g(in-)1096 607 y (terrupt)c(mo)n(del.)k fr(When)d(a)e(thread)i(has)f(little)f(or)h(no)g(k)n (er-)1096 653 y(nel)i(con)o(text,)i(sa)o(y)e(b)q(ecause)j(it)d(is)g(w)o(aitin\ g)g(to)g(receive)h(a)1096 698 y(message)d(from)e(another)j(thread,)g(or)f(b)q (ecause)i(the)f(next)1096 743 y(instruction)19 b(it)g(should)g(execute)j(is)d (in)g(user)h(space,)h(it)1096 789 y(ma)m(y)c(relinquish)f(its)h(k)o(ernel)h (stac)o(k)f(entirely)l(.)27 b(F)m(urther-)1096 834 y(more,)17 b(since)i(a)f (con)o(tin)o(uation)f(is)h(accessed)i(through)e(a)1096 879 y(mac)m(hine-indep) q(endent)c(in)n(terface,)g(it)f(is)g(often)h(p)q(ossible)1096 925 y(to)k(exam\ ine)g(a)g(con)o(tin)o(uation)g(at)h(run)o(time)f(and)g(a)o(v)o(oid)1096 970 y (using)13 b(it,)f(b)q(ecause)j(the)f(system's)f(curren)q(t)g(state)h(mak)m (es)1096 1015 y(its)f(use)i(unnecessary)o(.)1054 1111 y fk(\017)21 b fn(It)16 b(pr)n(ovides)h(a)g(gener)n(alize)n(d)g(fr)m(amework)g(and)h(interfac)m(e) 1096 1157 y(with)d(which)h(to)f(implement)h(many)h(runtime)e(optimiza-)1096 1202 y(tions)e(found)g(in)g(other)g(op)o(er)m(ating)g(systems.)18 b fr(Man)n (y)12 b(lo)n(w-)1096 1247 y(lev)n(el)17 b(optimizations)d(asso)r(ciated)j(wit\ h)f(con)o(trol)h(trans-)1096 1293 y(fer)j(in)g(op)q(erating)h(systems)f(can)h (b)q(e)g(recast)h(in)e(terms)1096 1338 y(of)f(con)o(tin)n(uations.)35 b(F)m (or)19 b(example,)h(hando\013)f(schedul-)1096 1383 y(ing)d([Blac)n(k)h(90b,)f (Thac)o(k)o(er)i(et)f(al.)27 b(88],)17 b(stac)o(kless)h(k)n(er-)1096 1428 y (nel)24 b(threads)h([Thac)o(k)o(er)g(et)g(al.)49 b(88],)25 b(asynchronous) 1096 1474 y(I/O)h([Levy)h(&)g(Eckhouse)g(89],)i(k)o(ernel-to-user)f(up-)1096 1519 y(calls)f([Hutc)o(hinson)h(et)g(al.)60 b(89,)27 b(Anderson)i(et)f(al.) 1096 1564 y(91,)13 b(Scott)h(et)h(al.)j(89],)12 b(and)i(Ligh)n(t)o(w)o(eigh)o (t)g(Remote)f(Pro-)1096 1610 y(cedure)k(Call)e([Bershad)h(et)h(al.)23 b(90]) 15 b(eac)o(h)h(represen)q(t)g(an)1096 1655 y(optimization)11 b(to)j(IPC)g(and) g(thread)h(managemen)l(t)g(sys-)1096 1700 y(tems)j(that)i(can)g(b)q(e)g(descr\ ib)r(ed)g(and)f(implemen)l(ted)h(in)1096 1746 y(terms)c(of)f(con)o(tin)o(uati\ ons.)25 b(F)l(urthermore,)17 b(b)o(y)f(de\014ning)1096 1791 y(a)d(mac)n(hine-\ indep)q(endent)h(in)n(terface)h(to)f(con)o(tin)o(uations,)1096 1836 y(these)g (optimizations)d(can)i(b)q(e)h(ac)o(hiev)o(ed)f(with)g(p)q(ortable)1096 1882 y (co)q(de.)1054 1986 y(W)l(e)19 b(ha)o(v)o(e)g(used)h(con)o(tin)n(uations)f (to)f(handle)h(a)f(v)n(ariet)o(y)h(of)1013 2031 y(con)o(trol)10 b(transfers)j (in)d(the)i(Mac)o(h)f(k)o(ernel)h(and)f(ha)o(v)n(e)h(b)q(een)g(able)1013 2077 y(to)18 b(impro)m(v)n(e)h(system)f(p)q(erformance)g(in)g(a)g(large)g(n)o(um)m (b)r(er)h(of)1013 2122 y(places)h(b)o(y)g(applying)f(a)h(small)d(set)k(of)f (optimizations)e(in)h(a)1013 2167 y(uniform)11 b(w)o(a)o(y)l(.)1054 2217 y (In)h(this)g(pap)q(er)g(w)o(e)g(describ)r(e)g(the)h(use)f(and)g(p)q(erformanc\ e)g(of)1013 2262 y(con)o(tin)n(uations)d(in)g(the)h(Mac)o(h)g(3.0)e(op)q(erat\ ing)h(system.)17 b(In)9 b(Sec-)1013 2308 y(tion)i(2)h(w)o(e)h(describ)r(e)g (the)g(implemen)l(tation)f(of)g(con)o(tin)n(uations)1013 2353 y(in)j(Mac)o (h.)24 b(W)l(e)16 b(examine)f(the)i(p)q(erformance)e(impro)m(v)o(emen)n(ts) 1013 2398 y(that)e(result)h(from)e(using)h(con)o(tin)o(uations)g(and)g(the)h (optimiza-)1013 2444 y(tions)d(they)g(allo)n(w)g(in)g(Section)h(3.)17 b(In)11 b(Section)h(4)f(w)n(e)h(sho)o(w)f(ho)o(w)1013 2489 y(con)o(tin)n(uations)h (can)g(b)r(e)g(used)h(to)f(implemen)l(t)h(sev)o(eral)f(con)o(trol)1013 2534 y (transfer)g(functions)h(found)e(in)h(other)g(op)q(erating)g(systems.)18 b(In) 1013 2580 y(Section)12 b(5)h(w)n(e)g(discuss)h(related)f(w)o(ork.)k(Finally) -5 b(,)12 b(in)g(Section)h(6)1013 2625 y(w)n(e)i(summarize)d(and)h(presen)q (t)h(our)g(conclusions.)p eop %%Page: 5 5 bop 83 -43 a fn(Befor)n(e)15 b(Continuations)917 -30 y 2 46 v 943 -43 a(Afte\ r)f(Continuations)58 -28 y 1810 2 v 917 17 a 2 46 v 83 49 a fj(/*)j(a)g(frequ\ ently)d(used)j(system)e(call)h(*/)83 121 y(example\(arg)o(1,)e(arg2\))i({)118 157 y(P1\(arg1,)f(arg2\);)118 193 y(if)i(\(need_to_bl)o(ock)o(\))32 b({)154 228 y(/*)17 b(use)f(process)f(model)h(*/)154 264 y(thread_bl)o(ock)o(\(\);) 154 300 y(P2\(arg1\);)118 336 y(})i(else)34 b({)154 372 y(P3\(\);)118 408 y (})118 444 y(/*)17 b(return)f(control)f(to)i(user)f(*/)118 480 y(return)g(SUC\ CESS;)83 516 y(})917 826 y 2 809 v 943 49 a(example\(ar)o(g1,)e(arg2\))i({) 978 85 y(P1\(arg1,)f(arg2\);)978 121 y(if)i(\(need_to_bl)o(oc)o(k\))32 b({) 1013 157 y(/*)17 b(use)g(continuati)o(on)d(*/)1013 193 y(save)j(context)e(in) i(thread;)1013 228 y(thread_block)o(\(e)o(xam)o(ple)o(_co)o(nti)o(nu)o(e\);) 1013 264 y(/*NOTREACHED)o(*/)978 300 y(})g(else)34 b({)1013 336 y(P3\(\);)978 372 y(})978 408 y(/*)17 b(return)f(control)f(to)i(user)f(*/)978 444 y(thread_\ sysc)o(all)o(_r)o(etu)o(rn\()o(SUC)o(CES)o(S\))o(;)943 480 y(})943 551 y(exam\ ple_co)o(nti)o(nue)o(\(\))e({)978 587 y(recover)h(context)g(from)i(thread;) 978 623 y(P2\(recovere)o(d)e(arg1\);)978 695 y(/*)i(return)f(control)f(to)i (user)f(*/)978 731 y(thread_sysc)o(all)o(_r)o(etu)o(rn\()o(SUC)o(CES)o(S\))o (;)943 767 y(})58 828 y 1810 2 v 482 944 a fr(Figure)e(1:)k(T)l(ransforming) 12 b(a)i(Blo)q(c)o(king)f(Kernel)i(Pro)q(cedure)-75 1076 y fo(2)69 b(Using)55 b(Con)n(tin)n(uations)g(in)f(an)28 1144 y(Op)r(erating)22 b(System)g(Kernel) -33 1237 y fr(In)15 b(this)g(section)h(w)o(e)g(describ)r(e)g(the)g(k)o(ernel) g(programmer's)-75 1282 y(view)h(of)f(con)o(tin)o(uations,)h(the)g(steps)i (w)n(e)f(to)q(ok)e(to)h(con)o(v)o(ert)h(a)-75 1327 y(pro)q(cess-based)h(k)n (ernel)e(in)o(to)f(one)g(that)g(uses)i(con)o(tin)n(uations,)-75 1373 y(and)h (some)f(general)h(optimization)d(techniques)j(made)e(p)r(os-)-75 1418 y(sible) k(b)o(y)g(con)o(tin)n(uations.)39 b(W)m(e)21 b(then)h(sho)o(w)f(the)g(in\015u\ ence)-75 1463 y(that)15 b(con)o(tin)o(uations)f(ha)o(v)o(e)h(had)g(on)f(the)i (implem)o(en)m(tation)e(of)-75 1509 y(several)h(critical)f(k)o(ernel)i(servic\ es.)23 b(Finally)-5 b(,)15 b(w)o(e)g(presen)q(t)g(the)-75 1554 y(mac)n(hine-i\ ndep)q(endent)20 b(in)o(terface)i(for)e(con)o(tin)n(uation)g(man-)-75 1599 y (agemen)n(t)14 b(in)f(the)i(Mac)o(h)f(k)o(ernel.)-75 1728 y fl(2.1)56 b(Creat\ ing)18 b(Con)o(tin)n(uations)-75 1806 y fr(There)i(are)f(t)o(w)o(o)f(kinds)h (of)f(con)o(trol)g(transfers)i(that)f(in)n(v)o(olv)n(e)-75 1851 y(con)o(tin)o (uations:)k(transfers)17 b(that)g(o)q(ccur)h(at)e(the)h(user/kernel)-75 1896 y (b)q(oundary)k(when)g(a)f(thread)h(traps)g(or)g(faults)f(out)g(of)g(user)-75 1942 y(space)15 b(and)f(in)n(to)g(the)h(k)n(ernel,)g(and)e(those)i(that)f(o)q (ccur)h(within)-75 1987 y(the)10 b(k)o(ernel)h(when)f(one)g(thread)h(transfer\ s)g(con)o(trol)f(to)f(another.)-75 2032 y(System)20 b(calls,)g(exceptions)i (and)d(in)o(terrupts)j(at)e(user)h(lev)o(el)-75 2078 y(transfer)e(con)o(trol) f(to)g(the)h(k)o(ernel.)32 b(The)19 b(k)o(ernel)g(en)o(try)g(rou-)-75 2123 y (tines)12 b(create)h(a)e(con)o(tin)n(uation)g(whic)o(h,)g(when)h(called)f(fro\ m)f(the)-75 2168 y(k)o(ernel,)16 b(returns)i(con)o(trol)d(to)h(the)g(user)h (lev)o(el.)24 b(Con)n(trol)16 b(do)q(es)-75 2214 y(not)g(return)h(to)f(the)h (caller.)25 b(System)15 b(calls)h(generate)i(a)d(con-)-75 2259 y(tin)o(uation) c(whic)o(h)i(is)f(in)o(v)n(ok)o(ed)h(with)f(the)h(return)h(co)r(de)f(for)f (the)-75 2304 y(system)k(call.)26 b(Exceptions)17 b(and)g(in)n(terrupts,)i (whic)o(h)d(do)h(not)-75 2350 y(return)12 b(v)m(alues)f(to)g(user)h(programs,) d(generate)j(a)e(contin)n(uation)-75 2395 y(that)k(is)g(later)g(in)n(v)o(ok)n (ed)h(without)e(argumen)n(ts.)-33 2444 y(Within)k(the)i(k)o(ernel,)h(a)e(thre\ ad)i(creates)g(a)e(contin)n(uation)-75 2489 y(when)13 b(it)f(relinquishes)i (its)e(pro)r(cessor.)19 b(It)13 b(do)q(es)g(this)g(b)o(y)f(pass-)-75 2534 y (ing)21 b(a)h(function)g(p)q(oin)n(ter)h(to)f(the)h(k)o(ernel)f(pro)r(cedure) h(that)-75 2580 y(blo)q(c)o(ks)f(threads.)45 b(The)23 b(function)f(b)q(ecomes) h(the)g(thread's)-75 2625 y(con)o(tin)o(uation)g(and)g(is)h(stored)g(in)g(the) g(k)o(ernel's)g(mac)n(hine-)1013 1064 y(indep)q(endent)16 b(thread)i(data)e (structure.)28 b(In)16 b(the)h(absence)i(of)1013 1109 y(further)e(run)o(time) f(optimizations,)f(the)i(thread)h(resumes)f(b)o(y)1013 1154 y(calling)12 b (its)i(con)o(tin)o(uation.)1054 1201 y(A)g(function)f(sp)q(eci\014ed)i(as)e (a)h(con)o(tin)n(uation)f(cannot)h(return)1013 1246 y(as)19 b(normal)e(functi\ ons)i(do;)i(it)e(ma)m(y)g(only)g(call)f(other)i(func-)1013 1291 y(tions)11 b (or)h(con)o(tin)o(uations.)17 b(This)12 b(p)q(oin)n(t)g(distinguishes)g(con)o (tin-)1013 1337 y(uations)h(from)f(closures.)1054 1383 y(If)h(the)i(bloc)o (king)e(thread)i(m)m(ust)f(preserv)q(e)g(an)n(y)g(state)g(while)1013 1428 y (bloc)o(k)o(ed,)h(it)f(m)m(ust)h(do)g(so)f(explicitly)l(,)g(as)h(with)f(the)h (in)o(terrupt)1013 1474 y(mo)o(del.)27 b(The)17 b(k)o(ernel's)g(thread)g(data) g(structure)i(con)o(tains)d(a)1013 1519 y(scratch)i(area)h(large)g(enough)f (for)h(28)f(b)n(ytes)i(of)e(state.)33 b(If)18 b(a)1013 1564 y(thread)h(needs) h(to)f(sa)o(v)n(e)h(more)d(state,)k(it)d(m)n(ust)h(allocate)g(an)1013 1610 y (additional)12 b(data)h(structure.)1054 1656 y(In)f(those)h(cases)g(where)g (it)f(is)g(not)g(p)q(ossible,)g(con)o(v)o(enien)o(t,)g(or)1013 1701 y(b)q(ene\ \014cial)f(to)f(blo)q(c)o(k)h(with)f(a)h(con)o(tin)o(uation,)f(a)g(n)o(ull)g (argumen)n(t)1013 1747 y(to)j(the)i(blocking)e(function)g(will)g(cause)i(the) f(thread)h(to)e(blo)q(c)o(k)1013 1792 y(using)h(the)i(pro)q(cess)h(mo)o(del.) k(The)16 b(thread's)f(con)o(text)h(will)d(b)r(e)1013 1837 y(preserved)j(on)g (the)h(stac)o(k,)f(and)g(the)g(thread)h(will)d(resume)i(in)1013 1883 y(that)d (same)g(context.)1013 1999 y fl(2.2)55 b(Con)o(v)n(erting)17 b(the)g(Kernel)f (to)h(Use)h(Con-)1140 2052 y(tin)n(uations)1013 2126 y fr(T)l(ransforming)9 b (the)j(Mac)o(h)f(k)o(ernel)h(to)f(use)h(con)o(tin)n(uations)f(w)o(as)1013 2172 y(a)21 b(straigh)o(tforw)n(ard)h(pro)q(cess.)43 b(First)22 b(w)o(e)g(iden)o (ti\014ed)g(those)1013 2217 y(k)n(ernel)e(functions)g(that)f(could)h(p)q(oten) o(tially)e(blo)q(c)o(k)h(and)g(re-)1013 2262 y(quired)g(only)f(a)h(small)e (amoun)m(t)i(of)g(state)h(to)f(b)q(e)h(preserved)1013 2308 y(while)15 b(block) n(ed.)25 b(W)l(e)17 b(then)f(separated)h(each)f(of)f(those)i(func-)1013 2353 y (tions)e(in)n(to)g(t)o(w)o(o)g(parts:)22 b(one)15 b(b)q(efore)h(the)g(blo)q (c)o(k)f(and)g(one)h(af-)1013 2398 y(ter.)29 b(W)l(e)18 b(de\014ned)g(a)f(new) h(function)f(that)g(consisted)i(of)d(the)1013 2444 y(p)q(ost-block,)c(or)g (contin)n(uing,)g(part)h(of)f(the)h(original)e(function,)1013 2489 y(and)k (left)g(only)f(the)i(pre-blo)q(ck)f(part)g(in)g(the)h(original.)21 b(Next,) 1013 2534 y(w)n(e)g(iden)o(ti\014ed)f(the)g(stack)g(con)o(text)g(that)g(w)o (as)g(common)d(to)1013 2580 y(the)c(t)o(w)o(o)g(parts)h(and)f(modi\014ed)g (the)h(pre-blo)q(ck)f(co)q(de)h(to)f(store)1013 2625 y(that)d(con)o(text)h (in)f(the)h(blo)q(c)o(king)f(thread's)h(scratch)g(area.)17 b(Sim-)p eop %%Page: 6 6 bop -75 -46 a fr(ilarly)-5 b(,)19 b(w)o(e)g(modi\014ed)f(the)i(p)q(ost-block) e(function)g(so)h(that)g(it)-75 -1 y(used)i(the)f(scratch)g(con)o(text.)36 b (In)19 b(the)h(pre-blo)q(ck)f(function,)-75 44 y(w)o(e)f(changed)g(the)g(call) g(to)g(the)g(k)o(ernel's)h(bloc)o(king)f(function)-75 90 y(so)g(that)g(it)f (passed)i(the)g(p)q(ost-blo)q(c)o(k)f(function)f(as)h(an)g(argu-)-75 135 y (men)n(t.)35 b(That)20 b(function)f(serves)h(as)g(the)g(thread's)g(con)o(tin) o(u-)-75 180 y(ation.)30 b(Lastly)l(,)18 b(w)o(e)h(c)o(hanged)f(the)h(p)q(ost\ -blo)q(c)o(k)f(function)g(to)-75 226 y(in)n(v)o(ok)o(e)13 b(a)g(con)o(tin)o (uation)f(on)h(exit,)g(rather)h(than)f(returning)h(to)-75 271 y(its)g(caller) g(o\013)g(of)g(the)g(stack.)19 b(Figure)14 b(1)g(illustrates)g(a)g(sample)-75 316 y(transformation;)c(one)h(function)f(b)r(ecomes)g(t)o(w)o(o,)h(and)g(the) g(sec-)-75 362 y(ond)j(function)g(is)g(named)g(as)g(an)g(argumen)n(t)h(in)e (the)i(blo)q(c)o(king)-75 407 y(part)f(of)f(the)i(\014rst.)-33 455 y(In)h(mos\ t)g(cases)i(w)o(e)f(did)f(not)h(\014nd)g(it)f(di\016cult)g(to)g(rewrite)-75 501 y(blo)q(c)o(king)10 b(k)n(ernel)i(functions)e(to)h(use)g(con)o(tin)o(uati\ ons.)16 b(F)m(or)10 b(user)-75 546 y(threads)21 b(that)f(trap)g(in)o(to)g(the) g(k)o(ernel,)i(the)f(primary)d(cases)-75 591 y(where)e(blo)q(c)o(king)f(o)q (ccurs)i(are)e(on)g(message)g(receives,)h(excep-)-75 637 y(tions,)k(page)f (faults,)h(and)f(preemptions.)34 b(Eac)o(h)20 b(o)q(ccurs)g(as)-75 682 y(a)f (result)h(of)f(a)g(user-to-kernel)h(transfer)g(\(system)g(call,)f(ex-)-75 727 y(ception)f(or)g(in)o(terrupt\),)i(and)e(eac)o(h,)h(up)q(on)f(b)q(eing)g(hand\ led,)-75 773 y(returns)f(con)o(trol)e(to)g(the)h(user)g(lev)o(el)f(b)o(y)h (w)n(a)o(y)f(of)g(the)h(con)o(tin-)-75 818 y(uation)f(that)h(w)o(as)g(created) h(when)g(con)o(trol)f(transferred)h(in)o(to)-75 863 y(the)d(k)o(ernel.)-33 912 y(F)l(or)i(threads)h(that)f(run)h(only)e(in)g(the)i(k)o(ernel,)f(there)i(is)e (no)-75 957 y(\\return-to-user-level")h(contin)n(uation.)28 b(In)18 b(practic\ e,)h(most)-75 1002 y(of)f(our)g(k)o(ernel)h(threads)h(execute)g(an)e(in\014ni\ te)h(loop,)g(block-)-75 1048 y(ing)d(un)o(til)f(an)h(ev)o(ent)g(o)q(ccurs,)i (doing)d(some)h(w)n(ork,)h(and)f(then)-75 1093 y(blo)q(c)o(king)10 b(again.) 16 b(F)l(or)11 b(these)h(threads,)g(w)o(e)f(de\014ne)h(the)g(con)o(tin-)-75 1138 y(uation)e(to)h(b)q(e)g(a)g(function)f(con)o(taining)g(the)h(b)q(o)q(dy) g(of)f(the)i(loop.)-75 1184 y(The)k(last)g(statemen)o(t)g(in)f(the)i(function) e(blo)q(c)o(ks)h(with)g(a)f(con-)-75 1229 y(tin)o(uation)g(that)g(is)h(the)g (function)g(itself,)f(thereb)q(y)g(ac)o(hieving)-75 1274 y(the)f(in\014nite)g (lo)q(op)f(via)g(tail-recursion.)-75 1401 y fl(2.3)56 b(Optimization)62 b(T) -5 b(ec)n(hniques)65 b(Using)53 1454 y(Con)o(tin)n(uations)-75 1531 y fr(Con) o(tin)n(uations)12 b(enable)h(three)h(general)e(con)o(trol)g(transfer)i(op-) -75 1577 y(timizations)9 b(that)h(impro)m(v)o(e)h(the)g(p)r(erformance)f(of)g (the)h(k)o(ernel:)-75 1622 y fn(stack)i(disc)n(ar)n(ding)p fr(,)f fn(stack)h (hando\013)p fr(,)g(and)f fn(c)n(ontinuation)i(r)n(e)m(c)n(o)o(g-)-75 1667 y (nition)p fr(.)-33 1715 y(A)27 b(con)o(tin)o(uation)f(sp)r(eci\014es)j(the)e (context)h(in)e(whic)o(h)i(a)-75 1761 y(thread)18 b(is)g(to)g(b)q(e)g(resumed\ ,)g(so)g(the)h(thread's)f(k)o(ernel)g(stack)-75 1806 y(can)k(b)q(e)g fn(disc) n(ar)n(de)n(d)g fr(while)f(the)h(thread)h(is)e(blo)q(c)o(k)o(ed.)42 b(This) -75 1851 y(sa)o(v)o(es)22 b(b)q(oth)g(space)g(and)f(time.)40 b(It)21 b(allo)n (ws)h(the)g(k)n(ernel)h(to)-75 1897 y(sa)o(v)o(e)12 b(space)g(b)q(ecause)h (the)f(stack)f(of)g(a)g(block)n(ed)h(thread)g(can)g(b)q(e)-75 1942 y(used)j (b)o(y)g(another)f(thread.)21 b(F)m(urther,)15 b(if)f(the)h fn(next)f fr(thre\ ad)i(to)-75 1987 y(run)f(has)h(bloc)o(k)o(ed)g(with)f(a)f(contin)n(uation)g (and)h(discarded)h(its)-75 2033 y(o)o(wn)h(stack,)h(that)g(thread)h(can)f(use) h(the)f(blocking)f(thread's)-75 2078 y(discarded)i(stack)f(directly)m(.)31 b (This)18 b(second)h(optimization)d(is)-75 2123 y(called)d fn(stack)i(hando\ \013)p fr(.)k(By)14 b(reducing)g(the)g(memory)d(require-)-75 2169 y(men)n(ts) 18 b(of)f(the)h(k)n(ernel,)h(con)o(tin)o(uations)e(can)g(also)g(sa)o(v)o(e)h (time)-75 2214 y(since)c(they)f(decrease)i(the)f(size)f(of)f(the)i(k)o(ernel'\ s)f(w)o(orking)f(set,)-75 2259 y(and)18 b(therefore)h(increase)g(the)g(e\013e\ ctiveness)g(of)e(caches)i(and)-75 2305 y(TLBs.)-33 2353 y(Time)g(can)i(b)q (e)g(sa)o(v)o(ed)g(during)g(a)g(con)o(trol)f(transfer)i(to)f(a)-75 2398 y(con) o(tin)o(uation)h(b)o(y)i(\014rst)g(examining)d(the)j(con)o(tin)o(uation)f(at) -75 2444 y(run)o(time)18 b(\(the)i(sa)o(v)o(ed)f(con)o(tin)o(uation,)g(whic)o (h)g(is)g(a)g(function)-75 2489 y(p)q(oin)n(ter,)i(can)e(b)q(e)g(compared)f (to)h(a)g(set)g(of)g(kno)n(wn)g(v)n(alues\).)-75 2534 y(This)e(technique)g (is)g(called)g fn(c)n(ontinuation)i(r)m(e)n(c)n(o)n(gnition)p fr(,)f(and)-75 2580 y(it)h(allo)n(ws)h(the)g(k)o(ernel)h(to)e(use)i(information)c(that)j(is) g(a)n(v)n(ail-)-75 2625 y(able)e(at)g(the)h(time)d(a)i(thread)h(is)f(resumed) g(so)g(that)h(a)e(more)1013 -44 y(sp)q(eci\014c)d(\(and)f(faster\))g(co)r(de) g(sequence)i(can)e(b)r(e)g(used)h(instead)1013 1 y(of)g(the)h(thread's)h(con) o(tin)o(uation.)k(Moreo)o(v)o(er,)c(b)o(y)e(not)h(chang-)1013 47 y(ing)f(the) i(stack)f(p)q(oin)o(ter)h(after)f(a)h(stac)o(k)f(hando\013,)h(a)f(resumed) 1013 92 y(thread)h(can)g(execute)i(that)e(sp)r(eci\014c)h(co)q(de)g(sequence) h(within)1013 137 y(the)c(function)g(call)f(con)o(text)h(of)g(the)g(blo)q(c)o (king)f(thread.)1013 249 y fl(2.4)55 b(Using)d(Con)o(tin)n(uations)g(for)h (Cross-)1140 302 y(Address)19 b(Space)g(RPC)1013 375 y fr(Op)q(erating)k(syst\ em)g(services)h(in)f(Mac)o(h)g(are)g(accessed)i(b)o(y)1013 420 y(means)32 b (of)g(cross-address)j(space)f(RPCs)f(to)g(user-level)1013 465 y(serv)o(ers.) 19 b(W)l(e)14 b(ha)o(v)o(e)f(used)h(contin)n(uations)f(to)g(restructure)j(the) 1013 511 y(k)n(ernel's)f(RPC)e(path)h(to)g(impro)m(v)o(e)g(p)q(erformance.) 1054 556 y(Figure)e(2)h(sho)o(ws)f(the)h(fast)f(path)h(through)f(the)h(callin\ g)e(half)1013 602 y(of)h(a)h(Mac)o(h)g(RPC.)1306 586 y fi(1)1337 602 y fr(A)h (single)e(system)h(call,)f fh(mach)r 14 2 v 13 w(msg)p fr(,)g(com-)1013 647 y (bines)h(the)h(sending)g(and)f(receiving)h(phases)h(of)d(an)i(RPC)f(in)n(to) 1013 692 y(one)j(op)q(eration.)24 b(A)16 b(clien)n(t)g(thread)h(uses)g fh(mac\ h)r 14 2 v 13 w(msg)e fr(to)h(send)1013 738 y(an)11 b(RPC)h(request)i(message) d(to)h(a)g(server,)g(and)g(to)g(receive)g(the)1013 783 y(reply)e(message.)17 b (A)11 b(server)g(thread)h(uses)g fh(mach)r 14 2 v 13 w(msg)e fr(to)h(send)g (a)1013 828 y(reply)i(message)h(to)f(the)h(clien)o(t,)f(and)h(to)f(receive)h (the)g(next)g(re-)1013 874 y(quest)d(message.)17 b(In)11 b(b)q(oth)g(cases,)h (the)g(sending)f(thread)h(w)o(ak)n(es)1013 919 y(up)e(the)g(receiving)h(threa\ d)g(and)e(blo)q(c)o(ks)i(itself)e(un)o(til)g(a)h(message)1013 964 y(arriv)n (es.)1054 1010 y(The)17 b(sending)h(thread)f(enters)h(the)f(k)o(ernel)h(and)e (creates)j(a)1013 1055 y(con)o(tin)n(uation)e(that)g(will)f(return)i(it)f(to) g(user)h(lev)o(el.)28 b(It)17 b(then)1013 1100 y(looks)f(for)f(a)g(thread)i (that)e(is)h(able)f(to)h(receiv)o(e)g(the)h(message.)1013 1146 y(If)12 b(it)h (can't)g(\014nd)g(suc)o(h)g(a)g(thread,)g(then)h(a)f(slo)n(w)g(path)g(is)g (tak)n(en)1013 1191 y(and)g(the)i(message)e(is)h(queued.)19 b(If)14 b(the)g (sender)i(do)q(es)e(\014nd)g(the)1013 1236 y(thread,)19 b(it)f(do)q(es)h(a)f (stac)o(k)g(hando\013)h(to)f(the)g(receiver.)32 b(This)1013 1282 y(lea)n(v)o (es)14 b(the)h(sending)f(thread)h(bloc)o(k)o(ed)f(with)g(a)f(contin)n(uation,) 1013 1327 y fh(mach)q 14 2 v 13 w(msg)r 14 2 v 13 w(continue)p fr(,)k(and)h (no)f(k)o(ernel)i(stac)o(k.)30 b(The)18 b(hand-)1013 1372 y(o\013)d(c)o(hange\ s)g(the)h(currently)f(running)g(k)o(ernel)h(thread)f(to)g(the)1013 1418 y(rec\ eiving)h(thread,)g(but)g(it)g(do)q(es)g(not)g(immedia)o(tely)d(call)i(the) 1013 1463 y(receiv)o(er's)k(con)o(tin)o(uation.)30 b(Instead,)19 b(the)g(rece\ iving)f(thread)1013 1508 y(runs)i(in)f(the)h(con)o(text)h(of)e(the)h(sender's) h fh(mach)r 14 2 v 13 w(msg)e fr(system)1013 1554 y(call.)h(A)o(t)15 b(this)g (p)q(oin)n(t,)g(the)h(thread)g(c)o(hecks)f(its)g(o)n(wn)g(contin)n(u-)1013 1599 y(ation)g(b)q(efore)i(using)g(it.)25 b(If)16 b(it)g(is)h fh(mach)q 14 2 v 13 w(msg)r 14 2 v 14 w(continue)p fr(,)d(b)r(e-)1013 1644 y(cause)g(the)h(rec\ eiver)g(had)e(blo)q(c)o(k)o(ed)h(in)g(this)g(same)f(path,)g(then)1013 1690 y fh(mach)q 14 2 v 13 w(msg)k fr(completes)h(the)g(fast)g(RPC)f(path)h(and)g (transfers)1013 1735 y(out)11 b(of)f(the)i(k)o(ernel)f(in)o(to)g(the)h(receiv) o(er's)g(address)h(space.)18 b(Oth-)1013 1780 y(erwise,)12 b fh(mach)r 14 2 v 13 w(msg)f fr(calls)g(the)i(receiver's)f(sa)o(v)o(ed)g(con)o(tin)o(uation) 1013 1826 y(to)f(complete)g(the)h(message's)f(pro)q(cessing)h(within)f(the)h (k)o(ernel.)1013 1871 y(This)f(can)g(happ)q(en,)h(for)f(example,)f(when)h(a)g (receiver)h(sp)r(eci\014es)1013 1916 y(un)n(usual)i(options)g(or)g(constrain) o(ts,)g(such)g(as)g(maxim)-5 b(um)13 b(size,)1013 1962 y(on)j(messages.)27 b (This)17 b(requires)h(extra)f(pro)r(cessing)h(on)e(ev)o(ery)1013 2007 y(recei\ v)o(e,)e(so)h(the)f(receiver)h(will)e(b)q(e)h(blo)q(c)o(k)o(ed)g(with)g(a)g (di\013erent)1013 2052 y(con)o(tin)n(uation)j(that)g(do)q(es)h(further)f(w)o (ork.)28 b(In)17 b(practice,)h(the)1013 2098 y(extra)i(w)o(ork)f(is)h(rarely) g(required,)h(so)f(most)f(threads)h(blo)q(c)o(k)1013 2143 y(with)13 b fh(mach) r 14 2 v 13 w(msg)r 14 2 v 13 w(continue)p fr(.)1054 2188 y(Using)22 b(con)o (tin)o(uations)g(reduces)i(space)g(and)e(time)f(o)o(v)n(er-)1013 2234 y(heads) d(during)g(RPC.)f(Since)h(almost)e(all)h(threads)h(in)g(Mac)o(h)1013 2279 y (are)h(normally)e(w)n(aiting)h(for)h(a)g(message,)h(stac)o(k)f(discarding) 1013 2324 y(frees)f(their)g(k)o(ernel)g(stacks)g(while)f(they)h(are)g(block)o (ed.)29 b(Call)1013 2370 y(latency)10 b(is)g(reduced)i(b)q(ecause)f(the)g(han\ do\013)f(allo)m(ws)h(the)f(blo)q(c)o(k-)1013 2415 y(ing)j(thread)i(to)e(comm) m(unicate)h(its)g(still-activ)n(e)g(function)g(call)1013 2460 y(con)o(text)h (to)h(the)f(resuming)g(thread.)22 b(The)16 b(resuming)e(thread)1013 2506 y (ma)m(y)g(complete)g(the)i(con)o(trol)e(transfer)i(b)o(y)e(calling)f(its)i (previ-)1013 2551 y(ously)g(stored)h(con)o(tin)o(uation,)e(or)i(it)f(ma)m(y)h (tak)n(e)g(an)f(alternate)1013 2586 y 396 2 v 1059 2613 a fg(1)1076 2625 y fm (The)d(return)d(phase)i(is)g(symmetric)e(and)h(w)o(orks)i(in)f(the)g(same)f (w)o(a)o(y)m(.)p eop %%Page: 7 7 bop 239 -75 a 22036890 22760489 3946905 26378485 25983795 49138974 startTexFig %%BeginDocument: rpc.ps 50 dict begin /arrowHeight 8 def /arrowWidth 4 def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { /patternGrayLevel idef patternGrayLevel -1 eq { /patternString idef } if false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l b translate w h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont findfont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 0 descender sub printSize sub printFont /Courier ne printFont /Courier-Bold ne and { 1 add } if def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def Begin [ 0.923077 0 0 0.923077 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Line 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 17.25 334.5 ] concat 207 442 207 131 Line End Begin %I MLine 2 0 0 [2 2 2 2 2 2 2 2] 15 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 17.25 342.5 ] concat 363 279 216 279 216 123 3 MLine End Begin %I MLine 2 0 0 [2 2 2 2 2 2 2 2] 15 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ -1 0 0 -1 432.25 901.5 ] concat 364 280 216 279 216 125 3 MLine End Begin %I Line 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 17.25 334.5 ] concat 173 426 233 426 Line End Begin %I Line 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 17.25 334.5 ] concat 182 150 242 150 Line End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 78.75 749 ] concat [ (enter kernel, saving) (user continuation) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 79.25 723.5 ] concat [ (copy-in message) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 78.75 704 ] concat [ (find receiver) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 246.75 513 ] concat [ (exit kernel, calling) (user continuation) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 247.75 541 ] concat [ (copy-out message) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 116.75 659.5 ] concat [ (Stack Handoff) ] Text End Begin %I MLine 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 0.0625 0 0 0.0625 214.75 457 ] concat 120 240 150 150 183 240 119 240 4 MLine End Begin %I MLine 2 0 0 [2 2 2 2 2 2 2 2] 15 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 0.0625 0 0 0.0625 223.75 457.562 ] concat 122 237 152 141 186 237 122 237 4 MLine End Begin %I MLine 2 0 0 [2 2 2 2 2 2 2 2] 15 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 0 0.0625 0.0625 0 59.438 612.25 ] concat 120 240 150 150 183 240 119 240 4 MLine End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 168 804 ] concat [ (Client Address Space) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 173 449 ] concat [ (Server Address Space) ] Text End Begin %I Line 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ -0.5 0 0 0.5 314.375 557.625 ] concat 227 381 197 405 Line End Begin %I Line 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 0.5 0 0 -0.5 137.5 689.25 ] concat 218 379 192 409 Line End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 245 476 ] concat [ (receiver returns from mach_msg) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 78.25 777 ] concat [ (sender calls mach_msg) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 77 609 ] concat [ (sender blocked) (with continuation) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 244 653 ] concat [ (receiver blocked) (with continuation) ] Text End Begin %I Line 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 0.5 0 0 0.5 113 388.25 ] concat 157 515 222 467 Line End Begin %I Poly 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 0.125 0 0 0.125 199.5 563 ] concat 174 505 157 480 195 470 175 505 4 Poly End End %I eop showpage end %%EndDocument endTexFig 556 1454 a fr(Figure)14 b(2:)k(Calling)12 b(Half)h(of)g(the)h(F)m (ast)g(RPC)g(P)o(ath)-75 1573 y(fast)19 b(path)g(that)g(tak)o(es)h(adv)m(an)o (tage)f(of)f(information)e(in)j(the)-75 1619 y(inherited)i(con)o(text.)38 b (Within)19 b(this)h(con)o(text,)i(the)f(sender's)-75 1664 y(and)13 b(receiver\ 's)g(message)g(pro)q(cessing)h(can)f(b)q(e)g(optimized)f(to-)-75 1709 y(gethe\ r.)19 b(F)m(or)14 b(example,)e(the)j(fast)f(RPC)g(path)g(a)n(v)o(oids)g(queue\ -)-75 1755 y(ing)j(and)h(dequeueing)g(the)h(message,)f(rep)r(eatedly)g(synchr\ o-)-75 1800 y(nizing,)11 b(and)g(rep)r(eatedly)h(parsing)f(the)i(message)e (to)g(chec)o(k)h(for)-75 1845 y(exceptional)j(conditions.)20 b(Instead,)15 b (the)g(message)g(is)f(passed)-75 1891 y(implicitly)7 b(on)i(the)h(common)d (stack,)j(the)g(sender)i(locks)e(shared)-75 1936 y(data)g(structures)i(and)e (the)h(receiver)g(unloc)o(ks)g(them,)e(and)h(only)-75 1981 y(the)j(sender,)h (not)e(the)h(receiver)f(as)h(w)o(ell,)e(chec)o(ks)i(the)g(message)-75 2027 y (for)f(exceptional)g(conditions)g(suc)o(h)g(as)h(whether)g(the)g(message)-75 2072 y(is)h(large.)-75 2185 y fl(2.5)56 b(Using)f(Con)o(tin)n(uations)h(for)g (Other)53 2238 y(T)n(yp)q(es)19 b(of)g(Con)o(trol)f(T)-5 b(ransfers)-75 2310 y fr(Although)9 b(the)i(RPC)e(path)h(is)g(the)g(most)f(frequen)o(tly)h(tra)o (v)n(eled,)-75 2356 y(w)o(e)i(ha)o(v)o(e)g(also)g(used)h(con)o(tin)o(uations) f(on)f(several)h(other)h(k)o(ernel)-75 2401 y(paths.)k(Three)11 b(of)e(these) i(paths,)f(exception)h(handling,)e(thread)-75 2446 y(preemption)15 b(and)g (user-level)h(page)f(faulting,)f(illustrate)i(the)-75 2492 y(di\013erent)e (w)o(a)n(ys)g(in)g(whic)o(h)g(con)o(tin)n(uations)g(can)g(b)q(e)g(applied.) -33 2580 y fk(\017)20 b fn(Exc)n(eption)g(Hand)s(ling.)33 b fr(In)19 b(Mac)o (h,)h(ev)o(ery)g(thread)f(has)8 2625 y(an)f(exception)i(server)f(that)f(the)i (k)n(ernel)g(in)n(v)o(ok)n(es)g(with)1096 1573 y(an)k(RPC)g(whenever)h(the)g (thread)g(raises)h(an)e(excep-)1096 1619 y(tion)15 b([Blac)n(k)h(et)g(al.)23 b (88].)f(F)m(or)15 b(example,)g(an)g(exception)1096 1664 y(is)i(raised)i(when) f(a)g(thread)h(tries)g(to)f(write)g(to)g(a)g(read-)1096 1709 y(only)11 b(page) h(\(b)r(ecause)i(it's)d(running)i(in)e(a)i(shared)g(virtual)1096 1755 y(memor\ y)g([App)q(el)k(&)f(Li)g(91]\))g(or)g(execute)i(a)e(privileged)1096 1800 y (instruction)22 b(\(b)q(ecause)h(Mac)o(h)f(is)g(em)n(ulating)f(another)1096 1845 y(operating)13 b(system)g(suc)o(h)g(as)g(MS-DOS)g([Duncan)f(86])g(or) 1096 1891 y(the)17 b(Macin)o(tosh)g(OS)g([Rose)f(&)h(Hac)o(k)o(er)h(85]\).)26 b(The)17 b(ex-)1096 1936 y(ception)c(server)g(receives)h(a)e(request)j(messag\ e)d(from)f(the)1096 1981 y(k)n(ernel,)20 b(attempts)f(to)f(handle)h(it,)g(and) f(sends)i(a)f(reply)1096 2027 y(message)e(back)h(to)g(the)h(k)n(ernel)g(indic\ ating)e(the)i(status)1096 2072 y(of)h(the)h(just-tak)o(en)g(exception.)39 b (In)21 b(most)e(cases,)k(the)1096 2117 y(serv)o(er)14 b(can)f(handle)f(the)i (exception)f(and)g(its)g(reply)g(mes-)1096 2163 y(sage)j(causes)h(the)g(k)o (ernel)g(to)e(immediately)e(restart)k(the)1096 2208 y(faulting)12 b(thread)i (in)g(user)h(space.)1096 2308 y(Unlik)n(e)i(a)h(user-to-user)h(RPC,)d(though,) i(the)g(k)o(ernel)g(is)1096 2353 y(an)i(endp)r(oin)n(t)h(of)f(comm)m(unicatio\ n)g(when)h(in)n(teracting)1096 2398 y(with)d(an)g(exception)h(server.)32 b (W)l(e)19 b(tak)n(e)g(adv)m(an)o(tage)g(of)1096 2444 y(this)d(b)o(y)g(using)g (contin)n(uations)g(to)h(reduce)h(the)f(latency)1096 2489 y(of)12 b(exception\ -handling.)17 b(Before)e(en)o(tering)e(the)h(normal)1096 2534 y(path)f(for)g (sending)h(the)g(exception)g(message,)f(the)h(fault-)1096 2580 y(ing)g(thread\ ,)h(executing)h(here)h(in)d(k)o(ernel)i(mo)o(de,)g(c)o(hecks)1096 2625 y(for) i(a)h(server)h(thread)f(w)o(aiting)f(to)h(receive)g(a)g(message)p eop %%Page: 8 8 bop 8 -44 a fr(\(with)22 b(the)h(con)o(tin)o(uation)f fh(mach)r 14 2 v 13 w (msg)r 14 2 v 13 w(continue)p fr(\).)42 b(If)8 1 y(the)18 b(faulting)e(thread) i(\014nds)g(a)f(server)h(thread,)h(then)f(it)8 47 y(defers)h(creating)f(the)g (request)i(message)d(and)h(immedi-)8 92 y(ately)i(do)q(es)g(a)g(stac)o(k)g (hando\013)g(to)f(the)i(server)f(thread,)8 137 y(passing)i(information)e(ab)q (out)i(the)h(fault)f(directly)h(on)8 183 y(the)18 b(shared)h(stac)o(k.)29 b (This)17 b(a)o(v)o(oids)g(the)h(cop)o(ying,)f(pars-)8 228 y(ing,)g(and)g(queu\ eing)g(of)f(the)i(message)f(that)g(w)o(ould)f(o)q(c-)8 273 y(cur)g(if)e(the)h (message)g(w)n(ere)h(sent)f(in)g(the)g(con)o(text)h(of)e(the)8 319 y(faulting) d(thread)h(and)g(then)h(received)f(in)g(the)g(con)o(text)h(of)8 364 y(the)19 b (serv)o(er)g(thread.)31 b(If)17 b(no)h(server)g(thread)h(is)f(w)o(aiting)8 409 y(with)c fh(mach)r 14 2 v 13 w(msg)r 14 2 v 13 w(continue)p fr(,)e(then)j(thi\ s)f(slo)o(w)o(er)g(path)h(is)8 455 y(tak)o(en.)-33 561 y fk(\017)20 b fn(Pr)n (e)n(emptive)14 b(Sche)o(duling.)8 636 y fr(Thread)d(preemption)f(occurs)i (during)e(a)g(clo)q(ck)g(in)n(terrupt)8 682 y(when)i(the)f(curren)q(t)g(threa\ d's)g(quan)o(tum)f(has)h(expired.)18 b(If)8 727 y(the)13 b(in)n(terrupted)h (thread)f(is)f(running)f(at)h(user)h(lev)o(el,)f(the)8 772 y(stack)f(con)o (text)h(that)g(the)g(thread)h(builds)e(as)h(it)f(\014elds)h(the)8 818 y(in)n (terrupt)19 b(b)r(ecomes)e(unimp)o(ortan)o(t,)h(since)h(the)f(thread)8 863 y (can)c(simply)e(resume)i(execution)h(at)f(user)h(lev)n(el.)j(There-)8 908 y (fore,)f(the)h(preempted)g(thread)f(blo)q(c)o(ks)g(with)g(a)g(con)o(tin-)8 954 y(uation)e(that)g(returns)i(the)f(thread)g(to)f(user)i(lev)o(el)e(when)8 999 y (called.)8 1075 y(Using)23 b(con)o(tin)o(uations)g(for)f(preemption)h(means)f (that)8 1120 y(most)14 b(runnable,)i(but)g(not)f(actually)g(running,)g(thread\ s)8 1165 y(do)26 b(not)g(require)h(k)o(ernel)g(stac)o(ks.)56 b(It)26 b(also)f (reduces)8 1211 y(rescheduling)15 b(latency)g(sligh)n(tly)m(,)f(since)i(the)g (preempted)8 1256 y(thread)k(do)q(es)f(not)g(ha)o(v)o(e)g(to)g(un)o(wind)g (its)g(k)n(ernel)h(stack)8 1301 y(after)14 b(b)q(eing)g(rescheduled.)-33 1407 y fk(\017)20 b fn(User-L)m(evel)15 b(Page)g(F)m(aults.)8 1483 y fr(When)e(a)g (thread)h(faults)f(on)f(a)h(non-resident)g(page)g(from)8 1528 y(user)i(space,) g(it)e(m)n(ust)h(blo)q(c)o(k)g(in)f(the)i(k)n(ernel)g(un)o(til)e(a)h(free)8 1574 y(ph)o(ysical)j(page)h(can)g(b)q(e)g(found)g(and)f(\014lled)h(with)f(dat\ a.)8 1619 y(The)12 b(k)n(ernel's)g(fault)e(handler)h(blo)q(c)o(ks)h(the)f(thr\ ead)h(with)f(a)8 1664 y(con)o(tin)o(uation)g(that)i(maps)e(the)i(new)f(page)h (and)f(resumes)8 1710 y(the)24 b(thread)f(at)g(user)h(lev)o(el.)45 b(This)23 b (a)o(v)o(oids)f(consum-)8 1755 y(ing)e(stacks)h(for)g(faulting)f(threads)i (and)f(con)o(v)o(enien)o(tly)8 1800 y(reduces)i(the)f(k)o(ernel's)f(memory)e (consumption)h(when)8 1846 y(there)15 b(is)f(little)f(free)i(memory)c(a)o(v)m (ailable.)8 1921 y(This)18 b(optimization)c(only)j(applies)h(to)f(user-level) g(page)8 1967 y(faults.)40 b(When)21 b(a)g(thread)h(faults)f(in)g(the)g(k)o (ernel,)i(its)8 2012 y(k)o(ernel)16 b(state)f(and)g(stack)g(are)g(preserv)q (ed.)22 b(Kernel-level)8 2057 y(page)17 b(faults)g(are)h(an)g(example)e(of)h (where)h(it)f(w)o(ould)g(b)q(e)8 2103 y(quite)12 b(hard)h(to)f(use)h(con)o (tin)o(uations)f(since,)h(in)e(general,)i(a)8 2148 y(thread)k(can)f(fault)f (an)o(ywhere)i(while)e(executing)i(in)f(the)8 2193 y(k)o(ernel.)34 b(Because) 21 b(of)e(this)g(di\016cult)n(y)m(,)h(w)n(e)g(simply)d(fall)8 2239 y(bac)o (k)d(on)g(the)g(pro)q(cess)i(mo)o(del)e(in)g(this)f(case.)-33 2353 y(Con)n (tin)o(uations)d(are)h(also)f(used)h(when)g(threads)g(v)o(olun)n(tarily)-75 2398 y(relinquish)g(the)g(pro)r(cessor)h(from)d(user)j(lev)o(el)f(and)g(when) g(in)o(ter-)-75 2444 y(nal)k(k)n(ernel)i(threads)f(block)f(w)o(aiting)f(for)h (w)o(ork.)22 b(In)16 b(the)g(\014rst)-75 2489 y(case,)g(there)g(is)f(no)f(k)o (ernel)i(state)f(to)g(sa)o(v)o(e)g(\(as)g(with)g(preemp-)-75 2534 y(tions\).) j(In)13 b(the)h(second)h(case,)f(w)n(e)g(can)g(use)g(con)o(tin)o(uations)f (to)-75 2580 y(implemen)l(t)g(tail)f(recursion)j(using)e(the)h(tec)o(hnique)g (describ)r(ed)-75 2625 y(in)f(Section)i(2.2.)1013 -40 y fl(2.6)55 b(Impleme)o (n)l(ting)18 b(Con)o(tin)n(uations)44 b(in)g(a)1140 12 y(P)o(ortable)18 b(Op) r(erating)f(System)g(Kernel)1054 155 y fr(The)27 b(Mac)o(h)g(3.0)f(k)o(ernel) h(runs)h(on)e(a)h(v)m(ariet)o(y)g(of)f(pro-)1013 200 y(cessor)21 b(architectu\ res.)39 b(This)20 b(p)r(ortabilit)m(y)g(is)h(ac)o(hiev)n(ed)g(b)o(y)1013 245 y (dividing)j(the)i(k)o(ernel)g(in)n(to)g(mac)n(hine-indep)q(endent)g(mo)o(d-) 1013 291 y(ules,)13 b(whic)o(h)h(implemen)l(t)g(the)h(Mac)o(h)f(k)o(ernel)h (in)n(terfaces,)g(and)1013 336 y(mac)m(hine-dep)r(endent)h(mo)o(dules,)h(whic) o(h)f(manage)e(the)j(hard-)1013 381 y(w)n(are.)24 b(Machine-indep)q(endent)16 b(mo)o(dules)g(manage)e(schedul-)1013 427 y(ing,)26 b(in)n(terpro)s(cess)g (comm)l(unication,)h(and)d(virtual)h(mem-)1013 472 y(ory)l(.)j(Mac)o(hine-dep) r(endent)17 b(mo)o(dules)h(implemen)l(t)f(the)h(lo)n(w-)1013 517 y(lev)n(el) 11 b(trap)f(and)h(exception)g(mac)n(hinery)l(,)g(handle)f(the)h(memory)1013 563 y(managem)o(en)m(t)k(unit,)f(and)g(exp)r(ort)h(a)f(new)h(in)o(ternal)f (in)o(terface)1013 608 y(for)f(manipulating)e(stac)o(ks)j(and)g(con)o(tin)o (uations.)1054 691 y(The)20 b(new)g(in)o(terface)g(allo)n(ws)g(the)g(mac)n (hine-indep)q(endent)1013 736 y(thread)f(managemen)m(t)g(and)g(IPC)h(mo)o(dul\ es)g(to)f(c)o(hange)g(ad-)1013 782 y(dress)11 b(spaces,)g(to)e(manage)f(the)i (relationship)f(of)g(k)o(ernel)h(stacks)1013 827 y(and)i(threads,)i(and)f(to) g(create)h(and)f(call)f(contin)n(uations.)18 b(The)1013 872 y(operations)11 b (are)f(listed)h(in)e(Figure)h(3.)17 b(The)10 b(in)o(terface)h(do)q(es)g(not) 1013 918 y(include)i(an)n(y)g(functions)h(for)f(examining)d(a)j(blo)q(c)o(k)o (ed)g(thread's)1013 963 y(con)o(tin)n(uation.)47 b(It)24 b(is)f(stored)i(in)e (the)h(k)o(ernel's)g(mac)n(hine-)1013 1008 y(indep)q(endent)16 b(thread)g(dat\ a)g(structure,)i(and)e(can)g(b)q(e)g(exam-)1013 1054 y(ined)21 b(directly)h (b)n(y)g(an)n(y)g(other)f(thread)i(running)e(in)f(k)o(ernel)1013 1099 y(mo)o (de.)1054 1182 y(The)12 b(routines)g(in)f(Figure)h(3)f(are)h(the)h(building)d (bloc)o(ks)i(with)1013 1227 y(whic)n(h)17 b(higher)f(lev)o(el)h(thread)g(mana\ gemen)l(t)g(op)q(erations)g(are)1013 1273 y(constructed.)26 b(Figure)16 b(4)f (sho)o(ws)h(some)f(of)g(these)j(op)q(erations)1013 1318 y(and)g(demonstrates) h(the)g(use)g(of)f(the)h(in)n(terface)h(within)d(the)1013 1363 y(k)n(ernel.) 40 b(The)21 b fh(thread)r 14 2 v 13 w(handoff)e fr(call)h(giv)n(es)i(con)o (trol)f(to)f(a)1013 1409 y(sp)q(eci\014c)f(thread.)33 b(It)18 b(do)q(es)h(a)g (stac)o(k)f(hando\013)h(and)f(up)q(dates)1013 1454 y(thread)d(scheduling)f (information)d(to)k(indicate)g(that)f(the)i(old)1013 1499 y(thread)f(is)g(blo) q(c)o(k)o(ed)g(and)g(the)g(new)h(thread)g(is)e(running.)22 b(The)1013 1545 y (function)e(returns)j(con)o(trol)e(running)g(as)g(the)h(new)g(thread,)1013 1590 y(but)15 b(do)q(es)h(not)g(call)e(the)i(new)g(thread's)g(con)o(tin)o(uat\ ion.)22 b(This)1013 1635 y(giv)n(es)d fh(thread)q 14 2 v 13 w(handoff)p fr ('s)e(caller)h(a)g(chance)h(to)f(do)g(con)o(tin-)1013 1681 y(uation)c(recogni\ tion,)h(as)h(is)f(done)h(on)f(the)h(RPC)g(and)f(excep-)1013 1726 y(tion)9 b (handling)g(paths.)17 b(In)10 b(con)o(trast,)h(the)f fh(thread)r 14 2 v 13 w (block)f fr(call)1013 1771 y(c)o(ho)q(oses)15 b(an)o(y)f(runnable)h(thread)h (for)e(execution.)21 b(If)14 b(the)i(new)1013 1817 y(thread)k(has)f(a)g(conti\ n)n(uation)g(and)g fh(thread)r 14 2 v 13 w(block)p fr('s)f(caller)1013 1862 y (has)c(pro)o(vided)g(a)g(con)o(tin)n(uation,)f(then)i fh(thread)q 14 2 v 13 w (block)f fr(tak)n(es)1013 1907 y(adv)m(an)o(tage)19 b(of)f(the)i(more)e(e\016\ cien)o(t)h fh(stack)r 14 2 v 13 w(handoff)e fr(path.)1013 1953 y(Otherwise)d (it)e(m)m(ust)i(use)f fh(switch)r 14 2 v 13 w(context)p fr(,)e(whic)o(h)h(cha\ nges)1013 1998 y(stac)o(ks.)1054 2081 y(The)i(implemen)l(tation)f(of)g fh(thr\ ead)r 14 2 v 13 w(block)g fr(illustrates)g(the)1013 2126 y(in)n(teraction)28 b (of)e fh(switch)r 14 2 v 13 w(context)p fr(,)j fh(stack)q 14 2 v 13 w(attach) p fr(,)g(and)1013 2172 y fh(stack)q 14 2 v 13 w(detach)p fr(.)49 b(The)25 b fh (thread)q 14 2 v 13 w(block)f fr(function)g(cannot)1013 2217 y(detac)o(h)30 b (and)g(free)h(the)g(old)f(thread's)g(stack,)k(or)c(place)1013 2262 y(the)23 b (old)g(thread)g(on)g(a)g(run)g(queue)h(where)h(another)e(pro-)1013 2308 y(ces\ sor)31 b(migh)m(t)f(\014nd)h(it,)i(while)d(executing)h(on)f(the)h(old)1013 2353 y(thread's)12 b(stack.)17 b(Therefore)d(the)e(implemen)l(tation)g(\014rs\ t)h(uses)1013 2398 y fh(switch)q 14 2 v 13 w(context)j fr(to)i(c)o(hange)g (to)g(the)h(new)f(thread's)h(stac)o(k)1013 2444 y(and)12 b(the)g(new)h(thread) g(then)g(uses)g fh(thread)r 14 2 v 13 w(dispatch)d fr(to)i(dis-)1013 2489 y (p)q(ose)17 b(of)g(the)h(old)e(thread.)28 b(If)17 b(the)h(new)f(thread)h(do)q (esn't)g(al-)1013 2534 y(ready)c(ha)n(v)o(e)g(a)g(stac)o(k,)f(then)i fh(stack) r 14 2 v 13 w(attach)d fr(initializes)h(it)g(to)1013 2580 y(execute)f fh(thre\ ad)q 14 2 v 13 w(continue)p fr(,)d(whic)o(h)h(calls)g(the)i(new)e(thread's) 1013 2625 y(o)n(wn)k(con)o(tin)o(uation)f(after)h(disp)q(osing)f(of)h(the)g (old)f(thread.)p eop %%Page: 9 9 bop 54 -49 a ff(stack)q 12 2 v 11 w(attach\(thre)o(ad)o(,)17 b(stack,)g(cont\ \))225 -8 y fe(T)m(ransforms)11 b(a)f(mac)o(hine-indep)t(endent)h(con)o(tinua\ tion)h(into)e(a)h(mac)o(hine-dep)s(endent)g(k)o(ernel)g(stac)o(k,)g(attac)o (hing)225 34 y(the)g(kernel)h(stac)o(k)f(to)g(the)h(thread)g(and)g(initializi) q(ng)j(the)c(stac)o(k)h(so)f(that)g(when)h ff(switch)p 12 2 v 12 w(context)c fe(resumes)k(the)225 76 y(thread,)g(control)g(transfers)f(to)h(the)f(supplied) j(continuation)e(function)h(with)f(the)g(previously)i(running)f(thread)225 117 y(as)g(an)g(argumen)q(t.)54 175 y ff(stack)q 12 2 v 11 w(detach\(thre)o(ad)o (\))225 217 y fe(Detaches)g(and)h(returns)f(the)g(thread's)h(k)o(ernel)g(stac) o(k.)54 275 y ff(stack)q 12 2 v 11 w(handoff\(new)o(-t)o(hre)o(ad)o(\))225 317 y fe(Do)r(es)e(a)g(stac)o(k)g(hando\013,)h(mo)o(ving)h(the)e(curren)o(t)g(k)o (ernel)h(stack)f(from)f(the)h(current)g(thread)h(to)e(the)i(new)e(thread.)225 358 y ff(stack)p 12 2 v 12 w(handoff)f fe(c)o(hanges)k(address)g(spaces)g(if) f(necessary)o(.)j ff(stack)q 12 2 v 11 w(handoff)11 b fe(returns)i(as)g(the)g (new)g(thread.)54 416 y ff(call)q 12 2 v 12 w(continuat)o(ion)o(\(c)o(ont)o (\))225 458 y fe(Calls)f(the)g(supplied)i(con)o(tinuation,)f(resetting)f(the) f(current)g(k)o(ernel)h(stack)f(p)q(ointer)g(to)h(the)f(base)h(of)e(the)i(sta\ c)o(k.)225 499 y(This)i(function)g(preven)o(ts)f(stac)o(k)g(o)o(ver\015o)o (w)g(during)h(a)f(long)i(sequence)f(of)e(continuation)i(calls.)54 558 y ff (switch)p 12 2 v 12 w(context\(co)o(nt)o(,)j(new-threa)o(d\))225 599 y fe(Res\ umes)10 b(the)f(new)g(thread)g(on)g(its)h(preserved)f(k)o(ernel)h(stac)o(k.) 16 b(This)9 b(call)i(c)o(hanges)f(address)f(spaces)h(if)f(necessary)n(.)225 641 y(If)k(a)g(continuation)i(for)e(the)h(curren)o(t)g(thread)g(is)g(supplied\ ,)i(then)e ff(switch)p 12 2 v 11 w(context)d fe(do)r(es)i(not)h(sa)o(v)o(e)g (registers)225 682 y(and)j(do)r(es)g(not)g(return.)28 b(Otherwise,)18 b ff (switch)p 12 2 v 12 w(context)13 b fe(sav)o(es)k(the)f(current)h(thread's)g (register)g(state)g(and)225 724 y(k)o(ernel)d(stac)o(k)e(and)i(returns)f(when) f(the)h(calling)i(thread)e(is)g(rescheduled,)h(returning)g(the)f(previously)i (running)225 765 y(thread.)54 823 y ff(thread)p 12 2 v 12 w(syscall)p 12 2 v 11 w(return\(retu)o(rn)o(-va)o(lue)o(\))225 865 y fe(Calls)g(the)f(current)f (thread's)h(user)g(system)g(call)i(con)o(tinuation)f(to)f(mak)o(e)g(the)g(thr\ ead)g(return)g(to)g(user)g(space)225 907 y(from)9 b(a)h(system)g(call)h(with) e(the)h(sp)r(eci\014ed)h(return)f(v)n(alue.)17 b(\(Lo)o(w-lev)o(el)10 b(mac)o (hine-dep)s(endent)g(trap)f(co)r(de)g(creates)225 948 y(system)k(call)i(con)o (tinuations\).)54 1006 y ff(thread)p 12 2 v 12 w(exception)o 12 2 v 12 w(retu\ rn\(\))225 1048 y fe(Calls)i(the)f(curren)o(t)g(thread's)g(user)g(exception)h (continuation)g(to)e(make)g(the)h(thread)g(return)h(to)e(user)h(space)225 1089 y(from)d(an)h(exception)h(or)e(page-fault.)19 b(\(Low-lev)o(el)14 b(mac)o(hin\ e-dep)s(endent)f(trap)h(co)q(de)g(creates)g(exception)h(con-)225 1131 y(tinua\ tions.\))260 1243 y fr(Figure)f(3:)k(Kernel)d(In)o(terface)g(to)f(Mac)o(hine-\ Dep)q(endent)g(Con)o(trol)f(T)m(ransfer)h(F)m(unctions)-75 1368 y fl(2.7)56 b (The)13 b(Adv)m(an)o(tage)h(of)g(a)g(Kernelized)e(Sys-)53 1421 y(tem)-75 1522 y fr(W)l(e)21 b(b)q(eliev)o(e)g(that)f(the)h(e\013ectiveness)h(of)e(con)o(tin) o(uations)g(in)-75 1567 y(Mac)o(h)15 b(stems)f(from)f(the)j(fact)e(that)h(Mac) o(h)g(is)g(a)f(\\k)o(ernelized")-75 1612 y(op)q(erating)g(system.)19 b(It)14 b (exp)r(orts)h(a)f(small)e(in)n(terface)j(and)g(im-)-75 1658 y(plemen)n(ts)k (only)f(a)g(few)h(abstractions.)33 b(As)19 b(a)f(result,)i(there)-75 1703 y (are)c(few)f(p)r(oin)n(ts)h(in)f(the)h(Mac)o(h)f(k)o(ernel)h(where)h(a)e(thre\ ad)h(can)-75 1748 y(blo)q(c)o(k,)f(and)g(ev)o(en)h(few)o(er)g(where)h(most)d (threads)i(actually)f(do)-75 1794 y(blo)q(c)o(k.)25 b(Although)16 b(there)i (are)f(roughly)e(60)h(di\013erent)h(p)q(oin)n(ts)-75 1839 y(where)f(a)e(threa\ d)i(can)e(blo)q(c)o(k)h(in)f(the)h(Mac)o(h)g(3.0)f(k)n(ernel,)h(o)o(v)o(er) -75 1884 y(99%)10 b(of)g(the)i(blo)q(c)o(ks)f(o)q(ccur)h(at)f(only)f(six)h (p)q(oin)o(ts.)17 b(As)12 b(w)n(ould)f(b)q(e)-75 1930 y(exp)r(ected,)k(w)n (e)g(ha)n(v)o(e)g(focused)h(our)e(reorganization)f(on)h(those)-75 1975 y(few) 20 b(\\hot)f(sp)q(ots.")35 b(There)21 b(are)f(still)f(paths)h(in)f(the)h(k)o (ernel)-75 2020 y(where)12 b(contin)n(uations)f(are)h(not)f(used,)h(but)g(the\ y)g(are)f(tra)o(v)o(eled)-75 2066 y(so)h(infrequently)f(that)i(their)g(e\013e\ ct)g(on)f(system)h(p)q(erformance)-75 2111 y(is)h(negligible.)-33 2172 y(In)d (con)o(trast,)i(w)o(e)f(b)q(eliev)o(e)g(that)g(it)f(w)o(ould)g(ha)o(v)o(e)h (b)q(een)h(m)m(uc)o(h)-75 2217 y(more)18 b(di\016cult)h(to)g(use)h(con)o(tin) o(uations)f(in)g(a)g(\\monolithi)o(c")-75 2262 y(op)q(erating)d(system)g(such) g(as)g(Mac)o(h)h(2.5.)23 b(That)17 b(system)f(im-)-75 2308 y(plemen)n(ts)k (the)g(BSD)f(Unix)g(in)n(terface)i(en)o(tirely)e(within)g(the)-75 2353 y(k)o (ernel's)d(address)h(space.)23 b(Most)16 b(threads)h(that)e(blo)q(c)o(k)g(do) g(so)-75 2398 y(while)10 b(executing)g(deep)h(within)f(the)g(k)o(ernel)h(in)f (the)g(Unix)g(com-)-75 2444 y(patibilit)m(y)20 b(la)n(y)o(er.)36 b(Generating) 20 b(a)f(con)o(tin)o(uation)g(for)g(these)-75 2489 y(threads)e(w)o(ould)e(b)q (e)h(di\016cult)g(b)q(ecause)h(they)g(bloc)o(k)f(only)f(af-)-75 2534 y(ter)k (building)d(up)i(a)g(large)f(amoun)m(t)h(of)g(state)g(on)g(their)g(k)o(er-) -75 2580 y(nel)h(stack.)33 b(Additionally)-5 b(,)20 b(there)g(are)g(o)n(v)o (er)g(180)e(places)i(in)-75 2625 y(Mac)o(h)c(2.5)g(where)h(a)f(thread)h(can)g (block,)f(and)g(there)i(are)f(no)1013 1363 y(real)12 b(hot)h(sp)r(ots.)k(F)m (or)c(these)h(reasons,)g(w)n(e)g(b)q(eliev)o(e)f(that)g(there)1013 1408 y(are) h(few)h(places)g(where)h(con)o(tin)n(uations)f(could)f(b)q(e)h(used,)g(and) 1013 1453 y(the)21 b(o)o(v)n(erall)g(space)h(and)e(time)g(sa)o(vings)g(from)f (using)i(them)1013 1499 y(w)n(ould)14 b(b)q(e)g(small.)1013 1622 y fl(2.8)55 b (Soft)o(w)o(are)18 b(Engineering)f(Concerns)1013 1699 y fr(A)9 b(practical)h (concern)h(with)e(con)o(tin)o(uations)g(stems)h(from)e(their)1013 1744 y(p)q (oten)o(tial)13 b(for)g(o)o(v)n(eruse.)20 b(Con)o(tin)n(uations)14 b(should)f (b)q(e)i(applied)1013 1790 y(judiciously)c(to)h(a)n(v)o(oid)g(ending)g(up)g (with)g(an)g(in)n(terrupt-mo)q(del)1013 1835 y(k)n(ernel)k(that)f(su\013ers)i (from)d(the)h(problems)g(describ)r(ed)h(in)e(the)1013 1880 y(in)n(tro)q(ducti\ on.)21 b(A)15 b(k)o(ey)g(adv)n(an)n(tage)g(of)g(our)g(use)g(of)g(con)o(tin)n (ua-)1013 1926 y(tions)h(is)g(that)h(most)e(of)h(the)h(k)o(ernel)g(can)g(w)n (ork)g(\(and)f(blo)q(c)o(k\))1013 1971 y(in)d(the)i(same)f(w)o(a)n(y)h(it)f (did)g(under)h(the)g(pro)q(cess)h(model.)j(Con-)1013 2016 y(sequently)l(,)12 b (the)i(bulk)e(of)h(the)g(system)g(is)g(no)g(less)g(fragile)f(than)1013 2062 y (it)22 b(w)n(as)h(under)g(that)g(mo)o(del.)44 b(Co)q(de)23 b(on)f(paths)h(tha\ t)f(use)1013 2107 y(con)o(tin)n(uations)f(is)h(fragile)e(in)h(the)h(sense)h (that)f(it)f(assumes)1013 2152 y(certain)d(things)g(ab)q(out)g(its)g(callers) g(\(e.g.,)g(if)f(the)i(co)q(de)g(uses)1013 2198 y fh(thread)q 14 2 v 13 w(sys\ call)q 14 2 v 13 w(return)p fr(,)12 b(it)g(can)h(only)g(b)q(e)g(used)h(to)f (imple-)1013 2243 y(men)m(t)18 b(system)g(calls\),)g(but)g(w)o(e)g(view)g(thi\ s)g(as)g(a)g(reasonable)1013 2288 y(price)f(to)f(pa)o(y)g(giv)n(en)h(that)f (w)o(e)h(ha)o(v)n(e)g(b)q(een)h(able)e(to)g(adopt)g(a)1013 2334 y(high-lev)m (el)e(approac)o(h)g(to)g(impro)m(ving)f(system)h(p)q(erformance.)1013 2458 y fl(2.9)55 b(Summary)1013 2534 y fr(Con)n(tin)o(uations)15 b(represen)q(t)g (one)h(more)e(case)i(where)h(lev)n(erage)1013 2580 y(and)12 b(uniformit)m(y)h (can)g(b)q(e)h(gained)e(b)o(y)h(promoting)e(an)i(op)q(erat-)1013 2625 y(ing)g (system)g(abstraction)h(to)g(a)g(\014rst-class)h(ob)r(ject)f(|)g(an)f(ob-)p eop %%Page: 10 10 bop 73 -32 a 1780 2 v 962 14 a 2 46 v 98 45 a fj(thread_hand)o(of)o(f\(c)o (ont)o(,)15 b(new_threa)o(d\))f({)169 81 y(old_threa)o(d)h(=)i(current_th)o (rea)o(d\(\))o(;)169 117 y(old_threa)o(d->)o(con)o(t)e(=)i(cont;)169 189 y (/*)g(stack_han)o(dof)o(f)e(changes)g(current_th)o(re)o(ad\()o(\))g(*/)169 225 y(stack_han)o(dof)o(f\(n)o(ew_)o(thr)o(ea)o(d\);)169 261 y(/*)i(now)f(current\ _thr)o(ead)o(\(\))e(==)j(new_thread)d(*/)169 332 y(/*)j(update)e(scheduling)f (state)i(*/)169 368 y(old_threa)o(d->)o(sta)o(te)e(=)k(WAITING;)169 404 y(new\ _threa)o(d->)o(sta)o(te)c(=)k(RUNNABLE;)98 440 y(})98 512 y(thread_cont)o(in) o(ue\()o(old)o(_th)o(rea)o(d\))c({)169 548 y(new_threa)o(d)h(=)i(current_th)o (rea)o(d\(\))o(;)169 584 y(thread_di)o(spa)o(tch)o(\(ol)o(d_t)o(hr)o(ead)o (\);)169 619 y(\(*new_thr)o(ead)o(->c)o(ont)o(\)\(\))o(;)169 655 y(/*NOTREAC) o(HED)o(*/)98 691 y(})98 763 y(thread_disp)o(at)o(ch\()o(old)o(_th)o(rea)o (d\))d({)169 799 y(if)j(\(old_thre)o(ad-)o(>co)o(nt\))d({)239 835 y(stack)i (=)h(stack_detac)o(h\(o)o(ld_)o(thr)o(ead)o(\);)239 871 y(/*)g(return)f(stack) g(to)g(free)h(pool)f(*/)239 907 y(stack_free\()o(sta)o(ck\))o(;)169 942 y(}) 169 978 y(if)h(\(old_thre)o(ad-)o(>st)o(ate)d(==)j(RUNNABLE\))239 1014 y(/*)g (return)f(old_threa)o(d)f(to)i(run)f(queue)g(*/)239 1050 y(thread_setr)o(un\() o(old)o(_t)o(hre)o(ad\))o(;)98 1086 y(})962 1178 y 2 1165 v 988 45 a(thread_b\ lo)o(ck\()o(con)o(t\))e({)1058 81 y(/*)j(stop)g(running)e(the)h(current)f(thr\ ead)h(*/)1058 117 y(old_thread)f(=)i(current_th)o(rea)o(d\()o(\);)1058 189 y (/*)g(select)f(a)h(runnable)e(thread)g(from)i(the)f(ready)g(queue)g(*/)1058 225 y(new_thread)f(=)i(thread_sel)o(ect)o(\(\))o(;)1058 296 y(if)g(\(new_thre\ ad)o(->c)o(ont)o(\))e({)1129 332 y(if)i(\(cont\))e({)1200 368 y(/*)i(stack_ha\ n)o(dof)o(f)e(changes)g(current_t)o(hre)o(ad\()o(\))g(*/)1200 404 y(stack_han) o(dof)o(f\(n)o(ew_)o(th)o(rea)o(d\);)1200 440 y(/*)i(now)f(current_thr)o(ea)o (d\(\))e(==)j(new_thread)d(*/)1200 512 y(old_threa)o(d->)o(con)o(t)h(=)i(cont\ ;)1200 548 y(if)g(\(old_thre)o(ad-)o(>st)o(at)o(e)e(==)i(RUNNABLE\))1270 584 y (/*)g(return)f(old_threa)o(d)f(to)i(ready)e(queue)h(*/)1270 619 y(thread_setr) o(un\()o(ol)o(d_t)o(hre)o(ad\))o(;)1200 691 y(call_cont)o(inu)o(ati)o(on\()o (ne)o(w_t)o(hre)o(ad-)o(>co)o(nt)o(\);)1200 727 y(/*NOTREAC)o(HED)o(*/)1129 763 y(})h(else)g({)1200 799 y(/*)g(create)e(a)i(new)g(stack)f(*/)1200 835 y (stack)f(=)j(stack_allo)o(ca)o(te\()o(\);)1200 871 y(stack_att)o(ach)o(\(ne)o (w_t)o(hr)o(ead)o(,)d(stack,)1429 907 y(thread_con)o(tin)o(ue\))o(;)1129 942 y (})1058 978 y(})1058 1050 y(thread_dispa)o(tc)o(h\(s)o(wit)o(ch_)o(con)o(te)o (xt\()o(con)o(t,)f(new_thread\))o(\);)988 1086 y(})73 1180 y 1780 2 v 541 1296 a fr(Figure)g(4:)k(Using)c(the)g(Con)o(trol)f(T)m(ransfer)i(In)n(terface)-75 1416 y(ject)10 b(that)f(can)h(b)q(e)g(named)e(and)h(manipulated)e(b)o(y)i(k)o (ernel)h(co)q(de.)-75 1461 y(In)i(this)g(sense,)i(con)o(tin)o(uations)e(are)g (similar)e(to)i(Mac)o(h's)g fn(pmap)-75 1507 y fr(abstraction)k([Rashid)e(et) i(al.)22 b(87].)g(A)16 b(pmap)e(is)h(a)g(\014rst-class)-75 1552 y(ob)r(ject) 23 b(that)f(re\015ects)i(a)e(sequence)i(of)d(address)i(mappings)-75 1597 y (from)10 b(virtual)i(to)f(ph)o(ysical)h(memory)-6 b(.)17 b(By)c(encapsulating) f(the)-75 1643 y(abstraction)j(of)e(memory)f(mapping)h(in)g(a)i(\014rst-class) g(ob)r(ject,)-75 1688 y(and)20 b(b)o(y)f(separating)h(the)h(abstraction)f(fro\ m)e(its)i(mac)n(hine-)-75 1733 y(dep)r(endent)g(implemen)l(tation)f(\(page)i (tables)f(and)g(segmen)n(t)-75 1779 y(registers\),)g(the)f(pmap)e(in)n(terfac\ e)i(is)f(p)r(ortable)g(and)g(can)g(b)q(e)-75 1824 y(used)i(and)f(optimized)f (in)h(w)o(a)n(ys)h(that)f(w)o(ere)i(not)e(originally)-75 1869 y(p)q(ossible)g ([Y)l(oung)g(et)g(al.)32 b(87].)g(Con)n(tin)o(uations)18 b(as)h(a)g(\014rst-) -75 1915 y(class)14 b(k)o(ernel)h(abstraction)f(ha)n(v)o(e)g(yielded)g(simila\ r)e(results.)-75 2108 y fo(3)69 b(P)n(erformance)-33 2217 y fr(In)20 b(this)h (section)h(w)n(e)g(examine)d(the)j(e\013ect)g(that)f(con)o(tin-)-75 2262 y (uations)e(ha)n(v)o(e)g(on)g(p)q(erformance.)33 b(In)19 b(terms)f(of)h(space,) h(w)o(e)-75 2308 y(sho)o(w)i(that)g(almost)e(all)h(con)o(trol)h(transfers)i (in)d(the)i(k)o(ernel)-75 2353 y(use)e(con)o(tin)n(uations)f(and)f(are)h(able) g(to)g(lea)n(v)o(e)g(the)g(blo)q(c)o(king)-75 2398 y(thread)d(without)f(a)h (stac)o(k.)26 b(This)16 b(e\013ectively)h(mak)m(es)g(k)o(ernel)-75 2444 y(sta\ cks)d(in)o(to)g(a)h(p)q(er-pro)r(cessor)h(resource.)22 b(In)15 b(terms)f(of)g (time,)-75 2489 y(w)o(e)j(also)e(show)h(that)g(most)g(con)o(trol)g(transfers) i(use)f(con)o(tin)o(u-)-75 2534 y(ation)h(recognition.)32 b(This)19 b(reduces) i(the)e(latency)g(of)f(cross-)-75 2580 y(address)e(space)g(comm)l(unication)e (and)h(user-level)g(exception)-75 2625 y(handling.)1013 1422 y fl(3.1)55 b (Exp)q(erimen)l(tal)18 b(En)o(vironmen)l(t)1013 1515 y fr(W)l(e)11 b(measured) f(three)i(v)o(ersions)f(of)f(the)h(Mac)o(h)g(k)o(ernel:)17 b(MK32,)1013 1560 y (MK40)11 b(and)h(Mac)o(h)g(2.5.)k(Both)c(MK32)f(and)h(MK40)g(are)g(Mac)o(h) 1013 1605 y(3.0)j(\\pure")h(k)o(ernels)i(in)d(that)i(they)g(do)f(not)g(implem\ en)l(t)g(the)1013 1651 y(Unix)10 b(system)h(call)f(in)o(terface)i(in)f(the)h (k)n(ernel's)g(address)g(space.)1013 1696 y(The)17 b(MK32)f(k)o(ernel)h(do)q (es)h(not)f(use)g(con)o(tin)o(uations,)g(but)g(in-)1013 1741 y(cludes)c(optim\ izations)d(that)i(reduce)i(the)f(o)n(v)o(erhead)g(of)f(cross-)1013 1787 y(add\ ress)h(space)g(RPC)f([Dra)n(v)o(es)h(90].)j(The)d(MK40)f(k)o(ernel)h(uses) 1013 1832 y(con)o(tin)n(uations)i(as)g(describ)r(ed)g(in)g(Section)g(2.)21 b (Mac)o(h)15 b(2.5)f(is)g(a)1013 1877 y(h)n(ybrid)g(k)o(ernel)g(that)g(implem) o(en)m(ts)g(the)g(BSD)g(Unix)f(in)o(terface)1013 1923 y(in)c(k)n(ernel)i(spac\ e,)g(do)q(es)f(not)f(include)h(the)g(RPC)f(optimizations)1013 1968 y(in)k(MK3\ 2,)g(and)h(do)q(es)g(not)g(use)h(con)o(tin)o(uations.)1054 2025 y(All)k(k)n (ernels)i(run)f(on)f(the)h(DECstation)f(3100)g(\(DS3100\))1013 2070 y(and)h (the)h(T)m(oshiba)f(5200/100.)36 b(The)21 b(DS3100)e(is)h(a)h(MIPS)1013 2115 y (R2000-based)i(w)o(orkstation)i(with)f(separate)j(64K)d(direct-)1013 2160 y (mapp)o(ed)18 b(instruction)f(and)g(data)g(cac)o(hes)h(and)f(a)g(four-stage) 1013 2206 y(write)c(bu\013er.)19 b(It)13 b(has)g(a)g(16.67Mhz)f(clock)h(and)f (executes)k(one)1013 2251 y(instruction)i(p)r(er)h(cycle,)h(barring)e(cac)o (he)h(misses)f(and)h(write)1013 2296 y(stalls.)h(Our)c(DS3100)d(w)o(as)i(con\ \014gured)h(with)e(16)h(megab)m(ytes)1013 2342 y(of)21 b(memory)f(and)j(a)f (250)g(megab)m(yte)h(Hitac)o(hi)f(disk)g(driv)o(e.)1013 2387 y(The)15 b(T)m (oshiba)g(5200)f(is)h(an)g(In)o(tel)g(80386-based)g(laptop)f(with)1013 2432 y (a)19 b(20Mhz)h(clo)q(c)o(k)g(and)g(a)f(32K)h(com)n(bined)g(instruction)g(and) 1013 2478 y(data)c(cache.)28 b(Our)17 b(T)m(oshiba)g(5200)f(w)n(as)i(con\014g\ ured)g(with)e(8)1013 2523 y(megab)m(ytes)c(of)f(memory)e(and)j(a)f(100)g(mega\ b)m(yte)h(Conner)g(disk)1013 2568 y(driv)n(e.)1054 2625 y(The)e(Mac)o(h)f(3.0) g(k)n(ernel)h(tests)h(w)o(ere)f(run)g(in)f(an)g(en)o(vironmen)n(t)p eop %%Page: 11 11 bop 516 -46 a fr(T)m(oshiba)13 b(5200)g(running)g(MK40)h(and)g(Unix)f(em)n (ulation)288 9 y 1351 2 v 287 55 a 2 46 v 389 41 a(Op)q(erations)688 55 y 2 46 v 714 41 a(Compile)f(T)l(est)979 55 y 2 46 v 1023 41 a(Kernel)j(Build)1298 55 y 2 46 v 1324 41 a(DOS)f(Em)m(ulation)1637 55 y 2 46 v 287 100 a 2 46 v 437 86 a(Using)688 100 y 2 46 v 756 86 a(\(22)f(secs\))979 100 y 2 46 v 1040 86 a (\(4917)g(secs\))1298 100 y 2 46 v 1379 86 a(\(698)h(secs\))1637 100 y 2 46 v 287 145 a 2 46 v 363 132 a(Stac)o(k)g(Discard)688 145 y 2 46 v 714 132 a(bloc\ ks)95 b(%)979 145 y 2 46 v 1038 132 a(blo)q(c)o(ks)89 b(%)1298 145 y 2 46 v 1336 132 a(blo)q(c)o(ks)131 b(%)1637 145 y 2 46 v 288 147 a 1351 2 v 10 x 1351 2 v 287 202 a 2 46 v 313 189 a(message)13 b(receive)688 202 y 2 46 v 743 189 a (3113)54 b(83.4)979 202 y 2 46 v 1005 189 a(1391769)48 b(86.3)1298 202 y 2 46 v 1324 189 a(200167)89 b(55.2)1637 202 y 2 46 v 287 247 a 2 46 v 313 234 a (exception)688 247 y 2 46 v 805 234 a(0)76 b(0.0)979 247 y 2 46 v 1088 234 a (882)70 b(0.0)1298 247 y 2 46 v 1324 234 a(137367)89 b(37.9)1637 247 y 2 46 v 287 293 a 2 46 v 313 279 a(page)14 b(fault)688 293 y 2 46 v 785 279 a(34)75 b (0.9)979 293 y 2 46 v 1067 279 a(3278)70 b(0.2)1298 293 y 2 46 v 1386 279 a (144)111 b(0.0)1637 293 y 2 46 v 287 338 a 2 46 v 313 325 a(thread)14 b(switc\ h)688 338 y 2 46 v 805 325 a(0)76 b(0.0)979 338 y 2 46 v 1088 325 a(114)70 b (0.0)1298 338 y 2 46 v 1428 325 a(4)111 b(0.0)1637 338 y 2 46 v 287 383 a 2 46 v 313 370 a(preempt)688 383 y 2 46 v 764 370 a(288)75 b(7.7)979 383 y 2 46 v 1047 370 a(78602)69 b(4.9)1298 383 y 2 46 v 1344 370 a(19101)111 b(5.3)1637 383 y 2 46 v 287 429 a 2 46 v 313 415 a(in)n(ternal)14 b(threads)688 429 y 2 46 v 764 415 a(239)75 b(6.4)979 429 y 2 46 v 1026 415 a(135756)69 b(8.4)1298 429 y 2 46 v 1365 415 a(5791)111 b(1.6)1637 429 y 2 46 v 288 430 a 1351 2 v 287 476 a 2 46 v 313 462 a(total)13 b(stack)g(discards)688 476 y 2 46 v 743 462 a(3674)54 b(98.4)979 476 y 2 46 v 1005 462 a(1610401)48 b(99.9)1298 476 y 2 46 v 1324 462 a(362574)69 b(100.0)1637 476 y 2 46 v 288 477 a 1351 2 v 10 x 1351 2 v 287 533 a 2 46 v 313 519 a(no)13 b(stack)h(discards)688 533 y 2 46 v 785 519 a(60)75 b(1.6)979 533 y 2 46 v 1067 519 a(2117)70 b(0.1)1298 533 y 2 46 v 1428 519 a(7)111 b(0.0)1637 533 y 2 46 v 288 534 a 1351 2 v 423 609 a (T)m(able)13 b(1:)18 b(F)m(requency)d(of)e(Stac)o(k)h(Discarding)g(with)f(Con) o(tin)n(uations)516 779 y(T)m(oshiba)g(5200)g(running)g(MK40)h(and)g(Unix)f (em)n(ulation)331 834 y 1265 2 v 330 879 a 2 46 v 291 w 2 46 v 649 866 a(Comp\ ile)e(T)m(est)916 879 y 2 46 v 970 866 a(Kernel)k(Build)1255 879 y 2 46 v 1281 866 a(DOS)f(Em)m(ulation)1594 879 y 2 46 v 330 925 a 2 46 v 291 w 2 46 v 647 911 a(coun)o(t)110 b(%)916 925 y 2 46 v 986 911 a(coun)o(t)g(%)1255 925 y 2 46 v 1305 911 a(coun)o(t)131 b(%)1594 925 y 2 46 v 331 926 a 1265 2 v 10 x 1265 2 v 330 982 a 2 46 v 356 968 a(total)13 b(blocks)621 982 y 2 46 v 664 968 a(373\ 4)49 b(100.0)916 982 y 2 46 v 941 968 a(1612518)f(100.0)1255 982 y 2 46 v 1281 968 a(362581)69 b(100.0)1594 982 y 2 46 v 330 1027 a 2 46 v 356 1013 a(stac)o (k)14 b(hando\013)621 1027 y 2 46 v 664 1013 a(3614)70 b(96.8)916 1027 y 2 46 v 941 1013 a(1608320)f(99.7)1255 1027 y 2 46 v 1281 1013 a(362567)g(100.0) 1594 1027 y 2 46 v 330 1072 a 2 46 v 356 1059 a(recognition)621 1072 y 2 46 v 664 1059 a(2247)h(60.2)916 1072 y 2 46 v 941 1059 a(1166449)f(72.3)1255 1072 y 2 46 v 1281 1059 a(311277)89 b(85.9)1594 1072 y 2 46 v 331 1074 a 1265 2 v 349 1148 a(T)l(able)14 b(2:)k(F)l(requency)e(of)d(Con)o(tin)n(uation)g(Recognitio\ n)g(and)h(Stac)o(k)g(Hando\013)-75 1310 y(in)i(whic)o(h)g(Unix)g(system)g(cal\ ls)f(are)i(implemen)l(ted)g(as)f(RPCs)-75 1355 y(to)e(a)g(Unix)g(server.)19 b (W)l(e)c(also)e(measured)i(an)f(MS-DOS)g(em)n(u-)-75 1401 y(lation)d(en)o(vir\ onmen)m(t)h(on)g(the)g(T)m(oshiba)f(5200.)16 b(The)c(MS-DOS)-75 1446 y(em)n (ulator)e(catc)o(hes)i(the)f(faults)f(resulting)g(from)f(privileged)h(in-)-75 1491 y(structions)17 b(and)e(MS-DOS)h(system)f(calls)g(with)h(a)f(user-level) -75 1537 y(exception)d(handler.)17 b(The)11 b(exception)h(handling)e(thread)i (runs)-75 1582 y(in)e(the)h(address)h(space)f(of)f(the)h(em)n(ulated)f(MS-DOS) h(program.)-75 1720 y fl(3.2)56 b(Dynamic)33 b(F)-5 b(requency)33 b(of)i(Cont\ in)m(ua-)53 1773 y(tion)18 b(Use)-75 1854 y fr(The)g(v)n(alue)g(of)f(con)o (tin)o(uations)g(dep)r(ends)i(on)f(the)g(frequency)-75 1900 y(with)f(whic)o (h)h(they)g(can)g(b)r(e)g(used.)30 b(T)m(o)17 b(determine)h(this,)g(w)o(e)-75 1945 y(coun)o(ted)g(the)g(n)o(um)n(b)q(er)g(of)f(blocking)f(op)q(erations)i (that)g(used)-75 1990 y(the)k(con)o(tin)o(uations)f(in)g(three)i(tests)g(run) f(on)f(the)h(T)m(oshiba)-75 2036 y(5200)d(running)h(the)h(MK40)e(k)o(ernel.) 37 b(The)21 b(\014rst)g(test)g(mea-)-75 2081 y(sured)e(a)e(short)h(C)f(compil\ ation)d(b)r(enc)o(hmark.)28 b(The)17 b(second)-75 2126 y(test)j(measured)f (a)f(Mac)o(h)h(3.0)f(k)o(ernel)h(build)f(where)i(all)e(the)-75 2172 y(\014les) e(resided)g(in)f(AFS,)g(the)h(distributed)g(Andrew)g(File)f(Sys-)-75 2217 y (tem)h([Sat)o(y)n(anara)o(y)o(anan)g(et)i(al.)28 b(85].)f(The)17 b(third)h (test)g(mea-)-75 2262 y(sured)d(the)g(MS-DOS)f(program)e(Wing)h(Comma)o(nder) 785 2247 y fd(T)r(M)844 2262 y fr(,)h(an)-75 2308 y(in)n(teractive)d(video)e (game.)16 b(The)10 b(short)h(compilation)c(and)k(MS-)-75 2353 y(DOS)20 b(test\ s)i(w)o(ere)f(run)g(with)f(the)h(mac)n(hine)f(in)g(single-user)-75 2398 y(mod\ e.)32 b(The)19 b(k)o(ernel)g(build)f(w)o(as)g(run)h(in)f(m)n(ulti-user)g(mode) -75 2444 y(b)q(ecause)c(AFS)f(requires)h(net)o(w)o(ork)e(services)i(and)f(a)f (user-level)-75 2489 y(\014le)20 b(cac)o(he)g(manager.)34 b(T)l(able)19 b(1)h (summarizes)e(the)i(results.)-75 2534 y(On)e(the)g(DS3100,)f(the)h(frequencie\ s)h(are)f(similar,)e(with)h(the)-75 2580 y(exception)j(of)e(the)i(MS-DOS)f (game,)f(whic)o(h)h(runs)g(only)g(on)-75 2625 y(the)14 b(T)m(oshiba.)1054 1312 y(The)f(table)g(sho)o(ws)g(that)f(ab)q(out)h(99%)f(of)g(all)f(con)o(trol)i (trans-)1013 1358 y(fers)h(use)g(con)o(tin)o(uations)f(and)h(tak)n(e)g(adv)n (an)n(tage)g(of)f(stack)g(dis-)1013 1403 y(carding.)k(The)d(most)e(frequen)o (t)i(op)q(erations)f(are)h(message)e(re-)1013 1448 y(ceiv)o(e)20 b(and)h(exce\ ption)g(handling.)36 b(The)21 b(other)g(op)q(erations)1013 1494 y(are)15 b (page-fault)f(handling,)g(v)n(olun)o(tary)h(rescheduling)g([Blac)n(k)1013 1539 y(90a],)h(in)n(v)o(olun)n(tary)h(preemptions,)g(and)g(blo)q(c)o(king)f(b)o (y)h(in)n(ter-)1013 1584 y(nal)c(k)o(ernel)h(threads.)19 b(The)c(remaining)d (blocking)h(op)q(erations)1013 1630 y(\(whic)o(h)i(do)h(not)f(use)i(con)o(tin) n(uations\))f(o)q(ccur)g(during)g(k)n(ernel-)1013 1675 y(mo)o(de)c(page)g(fau\ lts,)g(memory)d(allocation,)i(and)h(lock)g(acquisi-)1013 1720 y(tion.)k(Becau\ se)f(generating)d(a)g(contin)n(uation)g(for)g(these)i(cases)1013 1765 y(is)i (di\016cult,)g(MK40,)h(using)f(the)i(pro)q(cess)g(model,)f(preserves)1013 1811 y(k)n(ernel)e(stac)o(ks)g(while)e(threads)i(block.)1054 1856 y(T)m(able)c(2)g (sho)o(ws)h(that)f(stack)g(hando\013)h(occurs)i(on)d(nearly)g(all)1013 1901 y (con)o(trol)16 b(transfers.)27 b(Moreo)o(v)o(er,)17 b(con)o(tin)o(uation)f (recognition,)1013 1947 y(whic)n(h)f(can)f(o)q(ccur)i(during)e(cross-address) i(space)g(RPCs)e(and)1013 1992 y(exceptions,)g(happ)q(ens)h(in)f(o)n(v)o(er)h (60%)e(of)g(all)g(blocking)g(op)q(era-)1013 2037 y(tions.)1013 2145 y fl(3.3) 55 b(Time)13 b(Sa)o(vings)h(Due)g(to)h(Con)o(tin)n(uations)1054 2217 y fr(W)l (e)c(can)h(sho)o(w)e(that)h(con)o(tin)o(uations)g(impro)m(v)n(e)h(the)f(run)o (time)1013 2262 y(p)q(erformance)18 b(of)g(cross-address)j(space)f(RPCs)e(and) h(excep-)1013 2308 y(tion)14 b(handling.)20 b(Our)c(RPC)f(test)h(measures)f (the)h(round-trip)1013 2353 y(time)c(for)h(a)g(cross-address)j(space)f(\\n)n (ull")e(RPC.)g(Our)h(excep-)1013 2398 y(tion)k(handling)g(test)i(measures)f (the)g(time)f(for)h(a)f(user-level)1013 2444 y(serv)o(er)g(thread)g(to)e(hand\ le)h(a)g(faulting)e(thread's)j(exception.)1013 2489 y(The)e(exception)g(serve\ r)g(thread)h(runs)f(in)f(the)i(same)e(address)1013 2534 y(space)20 b(as)f(the) h(faulting)d(thread;)22 b(it)d(do)q(es)h(not)f(examine)f(or)1013 2580 y(c)o (hange)f(the)g(state)g(of)g(the)g(faulting)e(thread,)j(so)f(the)g(excep-)1013 2625 y(tion)e(is)g(retaken.)24 b(The)16 b(times)f(for)g(the)h(t)o(w)o(o)g(tes\ ts,)h(a)o(v)n(eraged)p eop %%Page: 12 12 bop 313 -73 a 1300 2 v 312 -28 a 2 46 v 222 w 2 46 v 735 -42 a fr(DS3100) 1073 -28 y 2 46 v 1224 -42 a(T)l(oshiba)14 b(5200)1612 -28 y 2 46 v 312 17 a 2 46 v 222 w 2 46 v 560 4 a(MK40)49 b(MK32)h(Mac)o(h)14 b(2.5)1073 17 y 2 46 v 1099 4 a(MK40)49 b(MK32)h(Mac)o(h)14 b(2.5)1612 17 y 2 46 v 313 19 a 1300 2 v 10 x 1300 2 v 312 74 a 2 46 v 338 61 a(n)o(ull)f(RPC)534 74 y 2 46 v 630 61 a (95)99 b(110)153 b(185)1073 74 y 2 46 v 1148 61 a(535)99 b(510)153 b(890)1612 74 y 2 46 v 312 120 a 2 46 v 338 106 a(exception)534 120 y 2 46 v 609 106 a (135)99 b(425)153 b(380)1073 120 y 2 46 v 1148 106 a(525)78 b(1155)132 b(1410) 1612 120 y 2 46 v 313 121 a 1300 2 v 541 240 a(T)m(able)13 b(3:)18 b(RPC)c (and)f(Exception)i(Times)e(\(in)g fc(\026)p fr(secs\))338 343 y 1251 2 v 337 388 a 2 46 v 358 w 2 46 v 863 375 a(MK40)1141 388 y 2 46 v 1309 375 a(MK32) 1587 388 y 2 46 v 337 434 a 2 46 v 358 w 2 46 v 721 420 a(instrs)51 b(loads)e (stores)1141 434 y 2 46 v 1167 420 a(instrs)i(loads)e(stores)1587 434 y 2 46 v 338 435 a 1251 2 v 10 x 1251 2 v 337 491 a 2 46 v 363 477 a(system)13 b(call) h(en)o(try)695 491 y 2 46 v 779 477 a(64)121 b(7)113 b(25)1141 491 y 2 46 v 1225 477 a(67)121 b(8)113 b(20)1587 491 y 2 46 v 337 536 a 2 46 v 363 522 a (system)13 b(call)h(exit)695 536 y 2 46 v 779 522 a(35)101 b(21)132 b(1)1141 536 y 2 46 v 1225 522 a(24)101 b(11)132 b(1)1587 536 y 2 46 v 337 581 a 2 46 v 363 568 a(stac)o(k)14 b(hando\013)695 581 y 2 46 v 779 568 a(83)101 b(22)112 b (18)1141 581 y 2 46 v 446 w 2 46 v 337 627 a 2 46 v 363 613 a(con)o(text)14 b (switch)695 627 y 2 46 v 446 w 2 46 v 1205 613 a(250)100 b(52)112 b(27)1587 627 y 2 46 v 338 628 a 1251 2 v 579 703 a(T)l(able)14 b(4:)j(Componen)o(t)d (Costs)h(on)e(the)i(DS3100)-75 864 y(o)o(v)n(er)c(a)e(large)h(n)o(um)m(b)r (er)g(of)f(iterations)h(and)g(running)f(on)h(MK40,)-75 909 y(MK32)k(and)f(Mac\ h)g(2.5,)g(are)h(sho)o(wn)g(in)f(T)m(able)h(3.)-75 1015 y fb(RPC)i(Impro)m (v)o(emen)n(ts)-75 1088 y fr(The)e(RPC)g(path)g(in)f(MK32)h(w)o(as)g(already) f(highly)g(optimized)-75 1133 y(relativ)n(e)18 b(to)f(Mac)o(h)g(2.5,)f(so)h (there)h(w)o(as)f(little)f(ro)r(om)f(for)i(im-)-75 1178 y(pro)o(v)o(emen)n (t.)g(Although)9 b(it)h(uses)h(the)g(pro)q(cess)g(model)f(\(that)g(is,)-75 1224 y(one)k(stac)o(k)f(p)r(er)h(thread\),)f(MK32)h(a)n(v)o(oids)f(the)h(gene\ ral)f(sched-)-75 1269 y(uler)19 b(co)q(de)g(during)f(RPC)g(transfers.)33 b (Instead,)20 b(it)e(con)o(text-)-75 1314 y(switc)o(hes)k(directly)e(from)f (the)i(sending)g(thread)g(to)f(the)h(re-)-75 1360 y(ceiving)14 b(thread.)k (In)c(con)o(trast,)g(Mac)o(h)g(2.5)f(queues)i(messages)-75 1405 y(and)10 b (uses)h(the)f(general)g(scheduling)f(mac)n(hinery)h(to)g(determine)-75 1450 y (that)k(the)g(receiving)h(thread)f(is)g(the)g(next)h(to)f(run.)-33 1496 y(Des\ pite)d(the)h(earlier)f(optimizations,)e(RPCs)i(in)f(MK40)h(are)-75 1541 y(sti\ ll)18 b(14%)h(faster)g(than)h(in)e(MK32.)34 b(The)20 b(impro)m(v)o(emen)n(t)g (is)-75 1587 y(mostly)11 b(due)i(to)g(the)g(stac)o(k)g(hando\013)g(that)f(rep\ laces)i(the)f(more)-75 1632 y(exp)r(ensiv)o(e)i(con)o(text)g(switc)o(h.)387 1617 y fi(2)426 1632 y fr(T)m(able)f(4)h(illustrates)g(the)g(cost)-75 1677 y (di\013erential)9 b(b)q(etw)n(een)j(stac)o(k)e(hando\013)g(and)g(context)g (switch)g(in)-75 1723 y(terms)15 b(of)g(the)i(n)n(um)n(b)q(er)f(of)f(instruct\ ions,)i(loads,)e(and)g(stores)-75 1768 y(required)i(on)g(a)f(DS3100.)25 b(The) 17 b(table)f(sho)o(ws)h(that)f(a)h(hand-)-75 1813 y(o\013,)d(whic)n(h)h(do)q (esn't)f(require)h(a)f(complete)g(con)o(text)g(sa)o(v)o(e)h(and)-75 1859 y (restore,)20 b(is)f(substan)o(tially)e(more)g(e\016cien)o(t)i(than)f(a)g(con) o(text)-75 1904 y(switc)o(h.)-75 2009 y fb(Run)n(time)c(Cost)i(of)f(Con)n(tin) m(uations)-75 2082 y fr(There)i(is)f(a)g(small)e(run)o(time)h(cost)i(asso)q (ciated)g(with)f(the)h(use)-75 2127 y(of)e(con)o(tin)o(uations)g(in)h(Mac)o (h.)24 b(As)16 b(T)m(able)f(4)h(sho)o(ws,)g(en)o(tering)-75 2173 y(and)j(exit\ ing)f(the)h(k)o(ernel)h(tak)n(es)g(sligh)n(tly)f(longer)f(in)h(MK40)-75 2218 y (than)c(in)f(MK32.)20 b(This)15 b(is)f(due)i(to)e(the)h(in)o(teraction)g(b)q (etw)o(een)-75 2263 y(con)o(tin)o(uations)e(and)g(architectural)g(calling)f (conv)n(entions.)17 b(In)-75 2299 y 396 2 v -29 2326 a fg(2)-11 2338 y fm(The) 10 b(T)m(oshiba)f(5200's)g(RPC)i(latency)e(increased)f(sligh)o(tly)g(in)i(MK4\ 0)-75 2374 y(b)q(ecause)j(of)h(a)h(p)q(erformanc)o(e)d(\\bug")h(that)h(is)h (b)q(eing)e(\014xed.)24 b(The)15 b(trap)-75 2410 y(handler)6 b(on)h(the)h(520\ 0)e(sa)o(v)o(es)h(user)h(registers)e(on)h(the)g(stac)o(k)g(during)f(k)o(ernel) -75 2446 y(en)o(try)m(,)12 b(rather)g(than)g(in)g(a)i(separate)d(mac)o(hine-d) o(ep)q(e)o(nde)o(n)o(t)f(data)i(struc-)-75 2481 y(ture.)h(As)8 b(a)g(result,) f(the)g(mac)o(hine-d)o(ep)q(e)o(nde)o(n)o(t)t(stac)o(k)g(hando\013)f(pro)q (cedure)-75 2517 y(m)o(ust)j(cop)o(y)f(the)h(curren)o(t)e(thread's)h(state)h (from)f(the)h(stac)o(k)f(and)h(cop)o(y)f(the)-75 2553 y(new)k(thread's)e(stat\ e)h(on)o(to)g(the)h(stac)o(k.)k(Once)c(this)f(is)h(\014xed,)f(w)o(e)i(exp)q (ect)-75 2589 y(that)g(the)h(T)m(oshiba)f(5200)g(times)g(will)h(impro)o(v)o (e)e(b)o(y)i(appro)o(ximate)o(ly)d(50)-75 2625 y fa(\026)p fm(secs.)1013 864 y fr(MK32,)j(the)i(k)o(ernel's)g(system)f(call)f(en)o(try)i(routine)f(do)q(es)h (not)1013 909 y(need)f(to)f(sa)o(v)o(e)g(an)o(y)g(user)i(registers)f(on)f(the) h(stack.)k(Registers)1013 955 y(that)13 b(are)h(\\caller-sa)o(v)n(ed")g(ha)o (v)o(e)f(already)h(b)q(een)g(sa)o(v)o(ed)g(on)f(the)1013 1000 y(user-lev)o (el)i(stack,)f(and)h(those)h(that)f(are)h(\\callee-sa)n(v)o(ed")f(will)1013 1045 y(b)q(e)h(sa)o(v)o(ed)g(on)g(the)g(k)o(ernel-lev)o(el)g(stac)o(k)g(as)g (necessary)i(b)o(y)d(the)1013 1091 y(system)i(call's)h(compiler-generated)f (prolog.)30 b(That)18 b(prolog)1013 1136 y(implicitl)o(y)c(assumes)j(the)g (pro)q(cess)h(model)f(and)f(that)h(callee-)1013 1181 y(sa)n(v)o(ed)c(register\ s)i(will)c(b)q(e)i(restored)i(on)d(return)i(from)d(the)i(pro-)1013 1227 y(ced\ ure)j(that)e(sa)o(v)o(ed)h(them.)k(When)14 b(contin)n(uations)g(are)h(used) 1013 1272 y(and)9 b(stacks)h(are)g(discarded,)h(though,)f(a)g(callee-sa)o(v)n (ed)h(register)1013 1317 y(will)j(not)j(b)q(e)g(restored)h(on)e(return)h(\(si\ nce)h(the)e(return)i(nev)o(er)1013 1363 y(occurs\).)30 b(Consequently)l(,)18 b (the)g(k)o(ernel)g(en)o(try)f(routine)h(m)m(ust)1013 1408 y(sa)n(v)o(e)e(all) e(callee-sa)o(v)o(ed)i(registers)h(in)e(an)g(auxiliary)e(mac)n(hine-)1013 1453 y(dep)q(endent)g(data)f(structure,)i(and)e(the)i(k)n(ernel's)f(exit)g(routine) 1013 1499 y(m)m(ust)19 b(restore)h(them.)30 b(The)19 b(DS3100,)e(for)h(exampl\ e,)g(has)g(9)1013 1544 y(callee-sa)n(v)o(ed)g(registers)h(to)f(whic)o(h)f(the) h(additional)e(costs)i(in)1013 1589 y(T)l(able)f(4)h(can)g(b)q(e)g(attributed\ .)29 b(F)m(or)18 b(exceptions)g(and)g(in)n(ter-)1013 1635 y(rupts,)g(the)f (k)o(ernel)h(en)o(try)g(routine)f(m)m(ust)h(preserv)q(e)f(all)f(user)1013 1680 y(registers,)d(not)f(just)g(those)h(that)f(are)g(callee-sa)o(v)o(ed.)18 b(Thi\ s)12 b(w)o(as)1013 1725 y(necessary)18 b(in)e(MK32)g(as)g(w)o(ell,)g(so)h(the) g(relativ)n(e)g(cost)g(of)f(ag-)1013 1771 y(gressiv)o(ely)d(preserving)i(call\ ee-sa)o(v)o(ed)e(registers)i(decreases)h(in)1013 1816 y(these)f(cases.)1013 1918 y fb(Exception)f(Handling)f(Impro)n(v)o(emen)m(ts)1013 1990 y fr(As)i (T)m(able)f(3)h(sho)o(ws,)g(exception)h(handling)e(in)h(MK40)g(is)f(t)o(w)o (o)1013 2036 y(to)22 b(three)i(times)e(faster)h(than)g(in)f(MK32.)45 b(Unlik) n(e)23 b(RPC,)1013 2081 y(the)c(exception)g(handling)f(path)g(had)h(not)g(b)q (een)g(optimized)1013 2126 y(in)c(MK32.)24 b(Consequently)l(,)16 b(exception) g(handling)f(in)g(MK40)1013 2172 y(demonstrates)f(a)f(\\b)q(est)h(case")h(res\ ult)f(for)g(con)o(tin)n(uations.)k(It)1013 2217 y(also)g(illustrates)h(an)g (importan)n(t)h(p)q(oin)n(t)f(regarding)g(the)h(use)1013 2262 y(of)15 b(a)h (general)g(mec)o(hanism)e(lik)n(e)i(contin)n(uations)g(in)g(an)f(op)q(er-) 1013 2308 y(ating)f(system)i(k)n(ernel.)24 b(Our)16 b(need)h(for)e(a)h(fast)f (but)h(p)q(ortable)1013 2353 y(cross-address)k(space)f(RPC)f(mec)o(hanism)e (motiv)l(ated)i(us)h(to)1013 2398 y(dev)o(elop)c(a)g(general)h(in)o(terface)h (for)e(handling)f(con)o(trol)i(trans-)1013 2444 y(fer)11 b(e\016ciently)l(.) 17 b(Once)12 b(w)o(e)g(had)f(that)g(in)o(terface,)h(w)o(e)g(w)o(ere)g(able) 1013 2489 y(to)17 b(apply)f(it)h(easily)g(to)g(the)h(exception)g(handling)f (path.)28 b(In)1013 2534 y(less)11 b(than)g(three)i(da)n(ys)e(of)g(w)o(ork,)g (w)o(e)g(sa)o(w)g(a)g(2-3)f(fold)g(impro)m(v)o(e-)1013 2580 y(men)m(t)g(in)f (the)h(run)o(time)e(p)r(erformance)h(of)f(exception)j(handling.)1013 2625 y (W)l(e)16 b(also)e(realized)i(a)f(space)i(sa)o(vings)e(due)h(to)f(stac)o(k)h (discard-)p eop eos end TeXDict begin bos 300 @start /fa df[<0004001800300060 00C0008001800300030006000E000C001C001800180038003000300070007000600060006000E0 00E000E000C000C000C000C000C0006000600060002000300010000800>14 38 5 10 16]40 dc [<0040006000200030001000180018001800180018001800180018001800180018003800380030 003000700070006000E000C000C001C0018003800300060006000C0018001000200040008000> 13 38 1 10 16]41 dc[9 3 3 -6 14]45 dc[<3078F060>5 4 4 0 12]46 dc [<0000080000180000180000300000300000600000600000C00000C00001800003000003000006 00000600000C00000C0000180000300000300000600000600000C00000C0000180000300000300 000600000600000C00000C0000180000180000300000600000600000C00000800000>21 37 1 9 20]47 dc[<007C000186000303000603000C03801C03801C038038038038038038038070070070 0700700700700700E00E00E00E00E00E00E01C00E01C00E01800E0300060600030C0001F0000> 17 24 4 0 20]48 dc[<000800180030007001F00E7000E000E000E000E001C001C001C001C003 8003800380038007000700070007000F00FFF0>13 24 4 0 20]49 dc[<007C00018600020300 0403800483800883801083801083801083801107001207000C0E00001C00003000006000018000 0200000C00001001002001003C060067FE00C1FC0080F000>17 24 3 0 20]50 dc[<003E0000 C3000101800201800481C00441C0088380048380070300000600000C0001F000001800000C0000 0C00000E00000E00600E00E01C00E01C0080380040300020E0001F8000>18 24 3 0 20]51 dc[ <000300000380000700000700000700000E00000E00000E00001C00001C000018000030000030 0000600000C00000C600018E00030E00021C00041C00081C00101C007FB800807F800038000038 00007000007000007000007000006000>17 31 1 7 20]52 dc[<001F00006080018080030380 0603800E00001C000018000038000039F000721800740C00780E00700E00F00E00E00E00E00E00 E00E00E01C00E01C0060380060700030C0001F8000>17 24 4 0 20]54 dc[<003E0000C10001 00800200C00600C00600C00E018007030007860003CC0001F00001F800067C000C3E00180E0030 0700600700600700C00600C00600600C006018003070000FC000>18 24 3 0 20]56 dc[<007C 000186000703000E03000C03801C0380380380380380380380380780380700380F001817000C27 0007CE00000E00000C00001C00001800E03000E0600080C000C380003E0000>17 24 4 0 20] 57 dc[<060F1E0C00000000000000003078F060>8 16 4 0 12]58 dc[<000020000060000060 0000E00001E00001E0000270000270000470000870000870001070001070002070002070004070 00807000FFF00100380100380200380400380400380C00381C0038FF01FF>24 26 2 0 29]65 dc[<03FFF800700E00700600700700E00700E00700E00700E00701C00E01C01C01C03801C07003 FFE003807003803803801C07001C07001C07001C07001C0E00380E00380E00700E00E01C03C0FF FF00>24 26 3 0 27]66 dc[<000F8200706200C01603801E07000C0E000C1C000C18000C3800 08300008700000700000E00000E00000E00000E00000E00020E00020E00020E000406000406000 803001001006000C180003E000>23 26 6 0 27]67 dc[<03FFF80000700E0000700700007003 0000E0018000E0018000E0018000E001C001C001C001C001C001C001C001C001C0038003800380 03800380038003800300070007000700070007000E0007000C000E001C000E0038000E0070000E 00E0001C038000FFFE0000>26 26 3 0 29]68 dc[<03FFFF00700700700300700100E00100E0 0100E00100E00101C08001C08001C08001C18003FF000381000381000381000702000700040700 040700080E00080E00180E00100E00301C00E0FFFFE0>24 26 3 0 26]69 dc[<03FFFF007007 00700300700100E00100E00100E00100E00101C08001C08001C08001C18003FF00038100038100 0381000702000700000700000700000E00000E00000E00000E00001E0000FFE000>24 26 3 0 25]70 dc[<000FC100302100C01301800F0700060E00060C000618000638000430000470000070 0000E00000E00000E00000E007FEE00070E00070E00070E000706000E06000E03000E01801E00C 064003F840>24 26 6 0 30]71 dc[<03FF1FF800700380007003800070038000E0070000E007 0000E0070000E0070001C00E0001C00E0001C00E0001C00E0003FFFC0003801C0003801C000380 1C00070038000700380007003800070038000E0070000E0070000E0070000E0070001C00E000FF C7FE00>29 26 3 0 29]72 dc[<01FF8000380000380000380000700000700000700000700000 E00000E00000E00000E00001C00001C00001C00001C00003800003800003800003800007000007 00000700000700000E0000FFE000>17 26 2 0 15]73 dc[<00FFC0000E00000E00000E00001C 00001C00001C00001C0000380000380000380000380000700000700000700000700000E00000E0 0000E00000E00061C000E1C000E180008380004700003C0000>18 26 4 0 20]74 dc[<03FF80 00700000700000700000E00000E00000E00000E00001C00001C00001C00001C000038000038000 0380000380000700000700100700100700200E00200E00600E00400E00C01C0380FFFF80>20 26 3 0 24]76 dc[<03F8001FC00078003C000078003C000078005C0000B800B80000B800B800009C 013800009C013800011C027000011C027000011C047000011C087000021C08E000021C10E00002 1C10E000021C20E000041C41C000041C41C000041C81C000041C81C000080F038000080F038000 080E038000180C038000380C070000FF083FF000>34 26 3 0 34]77 dc[<03F007F8007801C0 0078008000780080009C0100009C0100009C0100008E0100010E02000106020001070200010702 000203840002038400020384000201C4000401C8000401C8000400E8000400E8000800F0000800 7000080070001800700038002000FF002000>29 26 3 0 29]78 dc[<001F8000706001C03003 001806001C0E000C1C000C18000E38000E30000E70000E70000EE0001CE0001CE0001CE00038E0 0038E00030E00070E000E0E000C06001807003003806001C1C0007E000>23 26 6 0 29]79 dc[ <03FFF800701C00700600700700E00700E00700E00700E00701C00E01C00E01C01C01C0380380 7003FF800380000380000700000700000700000700000E00000E00000E00000E00001C0000FFC0 00>24 26 3 0 26]80 dc[<03FFF000701C00700E00700700E00700E00700E00700E00701C00E 01C01C01C03801C0E003FF800380C00380600380700700700700700700700700700E00E00E00E0 0E00E10E00E21C0062FFC03C>24 26 3 0 28]82 dc[<003F1000609001807001007003002006 002006002006002006000007000007C00003F80001FE00007F00000F8000038000018000018020 0180200180600300600300600600700C00C8180087E000>20 26 3 0 22]83 dc[<3FFFFC381C 0C201C04401C0440380480380480380480380400700000700000700000700000E00000E00000E0 0000E00001C00001C00001C00001C000038000038000038000038000078000FFF800>22 26 7 0 27]84 dc[<7FE0FF0E00380E00100E00101C00201C00201C00201C002038004038004038004038 0040700080700080700080700080E00100E00100E00100E00200E00200E0040060080060100038 60000F8000>24 26 8 0 29]85 dc[25 26 8 0 29]86 dc[34 26 8 0 38]87 dc[<01 FF07F8003C01C000380100003C0200001C0600001C0C00001E0800000E1000000E200000074000 000780000007800000038000000780000007C0000009C0000011C0000020E0000040E0000080E0 00018070000100700002007800040038001C007800FF01FF00>29 26 2 0 29]88 dc[<03CC0E 2E181C381C301C701CE038E038E038E038C072C072C07260F261341E18>15 16 4 0 20]97 dc[ <7E000E000E000E001C001C001C001C00380038003BC03C307830701870187018E038E038E038 E038C070C060C0E060C063801E00>13 26 4 0 18]98 dc[<01F006080C181838301070006000 E000E000E000E000E008E010602030C01F00>13 16 4 0 18]99 dc[<001F8000038000038000 0380000700000700000700000700000E00000E0003CE000E2E00181C00381C00301C00701C00E0 3800E03800E03800E03800C07200C07200C0720060F2006134001E1800>17 26 4 0 20]100 dc [<01E006181C08380870087010FFE0E000E000E000E000E0086010602030C01F00>13 16 4 0 18]101 dc[<000700001980001B80003B0000300000300000700000700000700000700007FF00 00E00000E00000E00000E00000E00001C00001C00001C00001C00001C000038000038000038000 038000038000070000070000070000660000E40000CC0000700000>17 33 -1 7 12]102 dc[< 00F300038B800607000E07000C07001C0700380E00380E00380E00380E00301C00301C00301C00 183C0018780007B800003800003800007000607000E0E000C1C0007F0000>17 23 2 7 18]103 dc[<1F80000380000380000380000700000700000700000700000E00000E00000E7C000F86001E 07001E07001C07001C0700380E00380E00380E00381C00701C80701C80703880703900E0190060 0E00>17 26 2 0 20]104 dc[<030706000000000000384C4E8E9C9C1C3838707272E2E46438> 8 25 4 0 12]105 dc[<1F8003800380038007000700070007000E000E000E0E0E131C271C431C 801F003C003F8039C038E070E270E270E270E4E0646038>16 26 2 0 18]107 dc[<3F0707070E 0E0E0E1C1C1C1C3838383870707070E4E4E4E46830>8 26 3 0 10]108 dc[<307C1E00598663 009E0783809E0703809C0703809C070380380E0700380E0700380E0700380E0E00701C0E40701C 0E40701C1C40701C1C80E0380C8060180700>26 16 4 0 31]109 dc[<307C005986009E07009E 07009C07009C0700380E00380E00380E00381C00701C80701C80703880703900E01900600E00> 17 16 4 0 22]110 dc[<01F006180C0C180E300E700E600EE00EE00EE00CE01CE018E0306060 30C01F00>15 16 4 0 20]111 dc[<030F000590C009E0C009C06009C06009C0600380E00380E0 0380E00380E00701C00701800703800703000E8E000E78000E00000E00001C00001C00001C0000 1C0000FF0000>19 23 0 7 20]112 dc[<03C20E2E181C381C301C701CE038E038E038E038C070 C070C07060F061E01EE000E000E001C001C001C001C01FF0>15 23 4 7 18]113 dc[<30F05918 9E389C189C009C0038003800380038007000700070007000E0006000>13 16 4 0 16]114 dc[< 03E004300830187018601C001F801FC00FE000E00060E060E06080C041803E00>12 16 3 0 16] 115 dc[<06000E000E000E000E001C001C00FFC01C0038003800380038007000700070007000E1 00E100E100E20064003800>10 23 4 0 13]116 dc[<38064C074E0E8E0E9C0E9C0E1C1C381C38 1C381C7039703970393079389A0F0C>16 16 4 0 21]117 dc[<38184C1C4E1C8E0C9C0C9C0C1C 08380838083808701070107020304018C00F00>14 16 4 0 18]118 dc[<380C304C0E384E1C38 8E1C189C1C189C1C181C381038381038381038381070702070702070704030704018B8800F0F00 >21 16 4 0 25]119 dc[<078F0008D18010F38020E18020E00020E00001C00001C00001C00001 C000038200038200C38200E78400C5880078F000>17 16 2 0 18]120 dc[<38064C074E0E8E0E 9C0E9C0E1C1C381C381C381C703870387038307838F00F700070006060E0E1C0C18047003C00> 16 23 4 7 19]121 dc[<038207C40FFC10081010002000400180030004000808100820187FF0 43E081C0>15 16 2 0 16]122 dc dfe /fb df[<072008E018E0306030C060C060C060C0C180 C188C1884388659038E0>13 14 4 0 18]97 dc[<007C00180018001800180030003000300030 076008E018E0306030C060C060C060C0C180C188C1884388659038E0>14 23 4 0 18]100 dc[< 030706000000000000384C4C4C8C181818303262622438>8 23 3 0 11]105 dc[<3E0C0C0C0C 181818183030303060606060C0D0D0D0D060>7 23 4 0 9]108 dc[<387044984708460C8C180C 180C180C18183018311861186230263038>16 14 3 0 20]110 dc[<078018C0304060606060C0 60C060C06080C080C08180C10046003C00>11 14 5 0 18]111 dc[<0300030006000600060006 00FF800C000C000C001800180018001800300031003100310032001C00>9 20 3 0 12]116 dc dfe /fc df[<00FC7C0183C607078E0607040E07000E07000E07000E07000E07000E0700FFFFF0 0E07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E0700 0E07007F0FF0>23 26 0 0 22]11 dc[<00FF000387000707000607000E07000E07000E07000E 07000E07000E0700FFFF000E07000E07000E07000E07000E07000E07000E07000E07000E07000E 07000E07000E07000E07000E07007F9FE0>19 26 0 0 21]13 dc[<007E1FE001C170E00703C0 E0060380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E0FFFFFFE00E0380E00E03 80E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E 0380E00E0380E00E0380E07F8FE3FC>30 26 0 0 32]15 dc[<01C0000003200000061000000E 1000000E1000000E1000000E1000000E2000000E4000000E40000007807F8007001E0007000800 078010000B80100013C0200031C0200060E04000E0F08000E0788000E0390000E01E0080E00E00 80700F01003873C3000F807C00>25 26 2 0 30]38 dc[<60F0F868080808101020C0>5 11 3 -15 11]39 dc[<00800100020004000C00080018003000300030006000600060006000E000E000 E000E000E000E000E000E000E000E0006000600060006000300030003000180008000C00040002 0001000080>9 38 3 10 15]40 dc[<8000400020001000180008000C00060006000600030003 000300030003800380038003800380038003800380038003800300030003000300060006000600 0C00080018001000200040008000>9 38 2 10 15]41 dc[<60F0F07010101020204080>4 11 3 7 11]44 dc[10 2 0 -7 13]45 dc[<60F0F060>4 4 3 0 11]46 dc[<0780186030 30303060186018E01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01C6018601870383030 18600780>14 24 2 0 19]48 dc[<03000700FF00070007000700070007000700070007000700 07000700070007000700070007000700070007000700FFF0>12 24 3 0 19]49 dc[<0F801060 20304038803CC01CE01C401C003C003800380070006000C001800100020004040804100430083F F87FF8FFF8>14 24 2 0 19]50 dc[<0F8010E02070607870382038007800700070006000C00F 8000E000700038003C003CE03CE03CC03C4038407030E00F80>14 24 2 0 19]51 dc[<003000 30007000F000F001700370027004700C7008701070307020704070C070FFFF0070007000700070 0070007007FF>16 24 1 0 19]52 dc[<30183FF03FE03FC02000200020002000200027C03860 203000380018001C001C401CE01CE01C80184038403030E00F80>14 24 2 0 19]53 dc[<01E0 06100C1818383038300070006000E000E7C0E860F030F018E018E01CE01CE01C601C601C701830 183030186007C0>14 24 2 0 19]54 dc[<40007FFE7FFC7FFC40088010801080200040004000 8001800180010003000300030003000700070007000700070007000200>15 25 2 0 19]55 dc[ <078018603030201860186018601870103C303E600F8007C019F030F86038401CC00CC00CC00C C00C6008201018600FC0>14 24 2 0 19]56 dc[<07801860303070306018E018E018E01CE01C E01C601C603C303C185C0F9C001C00180018003870307060604021801F00>14 24 2 0 19]57 dc[<60F0F060000000000000000060F0F060>4 16 3 0 11]58 dc[<000C0000000C0000000C00 00001E0000001E0000003F000000270000002700000043800000438000004380000081C0000081 C0000081C0000100E0000100E00001FFE000020070000200700006007800040038000400380008 001C0008001C001C001E00FF00FFC0>26 26 1 0 29]65 dc[22 26 2 0 27]66 dc[<003F 0201C0C603002E0E001E1C000E1C0006380006780002700002700002F00000F00000F00000F000 00F00000F000007000027000027800023800041C00041C00080E000803003001C0C0003F00>23 26 2 0 28]67 dc[24 26 2 0 29]68 dc[22 26 2 0 26]69 dc[20 26 2 0 25] 70 dc[<003F020001C0C60003002E000E001E001C000E001C0006003800060078000200700002 0070000200F0000000F0000000F0000000F0000000F0000000F001FFC070000E0070000E007800 0E0038000E001C000E001C000E000E000E000300160001C06600003F8200>26 26 2 0 30]71 dc[24 26 2 0 29]72 dc[11 26 1 0 14]73 dc[<1FFC 00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E040 E0E0E0E0E041C061801E00>14 26 3 0 20]74 dc[25 26 2 0 30]75 dc[19 26 2 0 24]76 dc[30 26 2 0 35]77 dc[24 26 2 0 29]78 dc[ <007F000001C1C000070070000E0038001C001C003C001E0038000E0078000F0070000700F000 0780F0000780F0000780F0000780F0000780F0000780F0000780F000078078000F0078000F0038 000E003C001E001C001C000E0038000700700001C1C000007F0000>25 26 2 0 30]79 dc[ 21 26 2 0 26]80 dc[<007F000001C1C000070070000E0038001C001C003C001E0038000E0078 000F0070000700F0000780F0000780F0000780F0000780F0000780F0000780F0000780F0000780 7000070078000F0038000E003C1C1E001C221C000E4138000741F00001E1C000007F80800000C0 800000C0800000E18000007F0000007F0000003E0000001C00>25 33 2 7 30]81 dc[25 26 2 0 28]82 dc[<0FC2183620 0E6006C006C002C002C002E00070007E003FE01FF807FC003E000E00070003800380038003C002 C006E004D81887E0>16 26 2 0 21]83 dc[<7FFFFF00701C0700401C0100401C0100C01C0180 801C0080801C0080801C0080001C0000001C0000001C0000001C0000001C0000001C0000001C00 00001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C 000003FFE000>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[<7FC0FF000F003C0007003000078020000380600001C0400001E08000 00E1800000710000007A0000003C0000001C0000001E0000001E00000017000000278000004380 000041C0000081E0000100E0000100700002007800040038000C001C001E003E00FF80FFC0>26 26 1 0 29]88 dc[27 26 1 0 29]89 dc[7 37 3 9 11]91 dc[7 37 0 9 11]93 dc[<3F8070C070E020700070007007F01C7030 707070E070E071E071E0F171FB1E3C>16 16 2 0 19]97 dc[18 26 1 0 21]98 dc[<07F8 0C1C381C30087000E000E000E000E000E000E0007000300438080C1807E0>14 16 1 0 17]99 dc[<007E00000E00000E00000E00000E00000E00000E00000E00000E00000E0003CE000C3E0038 0E00300E00700E00E00E00E00E00E00E00E00E00E00E00E00E00600E00700E00381E001C2E0007 CFC0>18 26 1 0 21]100 dc[<07C01C3030187018600CE00CFFFCE000E000E000E00060003004 38080C1807E0>14 16 1 0 17]101 dc[<01F0031807380E100E000E000E000E000E000E00FFC0 0E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE0>13 26 0 0 12]102 dc[<0FCE187330307038703870387038303018602FC02000600070003FF03FFC1FFE600FC003C0 03C003C0036006381C07E0>16 24 1 8 19]103 dc[18 26 1 0 21]104 dc[<18003C003C00 1800000000000000000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C 001C001C00FF80>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[<07E01C38300C700E 6006E007E007E007E007E007E0076006700E381C1C3807E0>16 16 1 0 19]111 dc[18 23 1 7 21]112 dc[<03C2 000C2600381E00300E00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E00700E00381E 001C2E0007CE00000E00000E00000E00000E00000E00000E00007FC0>18 23 1 7 20]113 dc[< FCE01D701E701E201C001C001C001C001C001C001C001C001C001C001C00FFC0>12 16 1 0 15] 114 dc[<1F2060E04020C020C020F0007F003FC01FE000F080708030C030C020F0408F80>12 16 1 0 15]115 dc[<0400040004000C000C001C003C00FFC01C001C001C001C001C001C001C001C 001C201C201C201C201C200E400380>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[<7FF86070407040E041C041C00380070007000E081C081C08381070107030FF F0>13 16 1 0 17]122 dc[18 1 0 -9 19]123 dc dfe /fd df[<1F00218060C060 C000C0008001800F00008000400060C060C060804060801F00>11 16 1 0 15]51 dc[<030003 0007000F000B001300330023004300C300FFE003000300030003001FE0>11 16 1 0 15]52 dc[ <20803F002C002000200020002F0030802040006000600060C06080C061801F00>11 16 1 0 15 ]53 dc dfe /fe df[<0FC030707038703870380038003000E00FC0007000380018001C601CF0 1CF018E03860701FC0>14 19 1 0 17]51 dc[<006000E000E00160026006600C600860106020 606060C060FFFC0060006000600060006003FC>14 19 1 0 17]52 dc[<60607FC07F80440040 00400040004F0070C040E0006000700070E070E070E06040E021C01F00>12 19 2 0 17]53 dc dfe /ff df[14 4 1 -9 19]45 dc[<387CFEFEFE7C38>7 7 4 0 16]46 dc[<00FE0007FFC00F07E01E03F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003E000 07C0001F8001FE0001FF000007C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00FEFF 00FEFF00FC7E01FC7801F81E07F00FFFC001FE00>23 32 2 0 28]51 dc[<0000E00001E00003 E00003E00007E0000FE0001FE0001FE00037E00077E000E7E001C7E00187E00307E00707E00E07 E00C07E01807E03807E07007E0E007E0FFFFFEFFFFFE0007E00007E00007E00007E00007E00007 E00007E000FFFE00FFFE>23 32 2 0 28]52 dc[<0003FE0080001FFF818000FF01E38001F800 3F8003E0001F8007C0000F800F800007801F800007803F000003803F000003807F000001807E00 0001807E00000180FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE 00000000FE000000007E000000007E000001807F000001803F000001803F000003801F80000300 0F8000030007C000060003F0000C0001F800380000FF00F000001FFFC0000003FE0000>33 34 3 0 40]67 dc[37 34 2 0 43]68 dc[<01FC0407FF8C1F03 FC3C007C7C003C78001C78001CF8000CF8000CFC000CFC0000FF0000FFE0007FFF007FFFC03FFF F01FFFF80FFFFC03FFFE003FFE0003FF00007F00003F00003FC0001FC0001FC0001FE0001EE000 1EF0003CFC003CFF00F8C7FFE080FF80>24 34 3 0 31]83 dc[<7FFFFFFF807FFFFFFF807E03 F80F807803F807807003F803806003F80180E003F801C0E003F801C0C003F800C0C003F800C0C0 03F800C0C003F800C00003F800000003F800000003F800000003F800000003F800000003F80000 0003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F800 000003F800000003F800000003F800000003F800000003F800000003F8000003FFFFF80003FFFF F800>34 34 2 0 39]84 dc[<07FC001FFF803F07C03F03E03F01E03F01F01E01F00001F00001 F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF87F07E0 3F>24 22 2 0 27]97 dc[<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000FC0000 FC0000FC0000FC0000FC0000FC00007C00007E00007E00003E00301F00600FC0E007FF8000FE00 >20 22 2 0 25]99 dc[<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00F8FF FFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E00181F00300FC07003FFC000FF00> 21 22 2 0 26]101 dc[<03FC1E0FFF7F1F0F8F3E07CF3C03C07C03E07C03E07C03E07C03E07C 03E03C03C03E07C01F0F801FFF0013FC003000003000003800003FFF801FFFF00FFFF81FFFFC38 00FC70003EF0001EF0001EF0001EF0001E78003C7C007C3F01F80FFFE001FF00>24 33 2 11 28 ]103 dc[<1C003F007F007F007F003F001C000000000000000000000000000000FF00FF001F00 1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE0> 11 36 2 0 16]105 dc[26 22 2 0 31]110 dc[<00FE0007FFC00F 83E01E00F03E00F87C007C7C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C 007C7C007C3E00F81F01F00F83E007FFC000FE00>23 22 2 0 28]111 dc[26 32 2 10 31]112 dc[<0FF3003FFF00781F00600700E00300E00300F00300FC0000 7FE0007FF8003FFE000FFF0001FF00000F80C00780C00380E00380E00380F00700FC0E00EFFC00 C7F000>17 22 2 0 22]115 dc[<0180000180000180000180000380000380000780000780000F 80003F8000FFFF00FFFF000F80000F80000F80000F80000F80000F80000F80000F80000F80000F 80000F80000F81800F81800F81800F81800F81800F830007C30003FE0000F800>17 32 1 0 22] 116 dc[26 22 2 0 31]117 dc[27 22 1 0 30]118 dc dfe /fg df[<1C00183200186180706161E0E09E60E080C0E08180E08180E08300 E08300610600610C00320C001C18380030640030C20060C200C1C100C1C10181C10181C10301C1 0601C10600C20C00C2180064080038>24 27 2 2 29]37 dc[<60F0F070101020204040>4 10 3 -13 10]39 dc[<60F0F070101020204040>4 10 3 6 10]44 dc[9 2 0 -6 12]45 dc[<60F0F060>4 4 3 0 10]46 dc[<07C018303018701C600C600CE00EE00EE00EE00EE00EE0 0EE00EE00EE00E600C600C701C30181C7007C0>15 21 1 0 18]48 dc[<0F8030E040708030C0 38E0384038003800700070006000C00180030006000C08080810183FF07FF0FFF0>13 21 2 0 18]50 dc[<0FE030306018701C701C001C00180038006007E000300018000C000E000EE00EE00E C00C401830300FE0>15 21 1 0 18]51 dc[<01F00608080C181C301C70006000E000E3E0EC30 F018F00CE00EE00EE00E600E600E300C3018183007C0>15 21 1 0 18]54 dc[<07C018303018 6018E00CE00CE00EE00EE00E601E301E186E0F8E000E000C001C70187018603020C01F80>15 21 1 0 18]57 dc[21 23 1 0 24]69 dc[24 23 1 0 27]75 dc[29 23 1 0 32]77 dc[<7FFFF8 603818403808403808803804803804803804003800003800003800003800003800003800003800 00380000380000380000380000380000380000380000380007FFC0>22 23 1 0 25]84 dc[23 23 1 0 26]86 dc[ 33 23 1 0 36]87 dc[<1FC0386038301038003803F81E3830387038E039E039E07970FF1F1E> 16 14 1 0 18]97 dc[18 23 0 0 20]98 dc[<07F01838303870106000E000E000E000E000600070083008183007 C0>13 14 1 0 16]99 dc[<007E00000E00000E00000E00000E00000E00000E00000E00000E00 07CE001C3E00300E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00301E00182E00 07CFC0>18 23 1 0 20]100 dc[<0FC0186030307038E018FFF8E000E000E00060007008301018 3007C0>13 14 1 0 16]101 dc[<03E006700E701C201C001C001C001C001C00FF801C001C001C 001C001C001C001C001C001C001C001C001C00FF80>12 23 0 0 11]102 dc[<0F9E18E3306070 7070707070306018C02F80200060003FE03FF83FFC600EC006C006C006600C38380FE0>16 21 1 7 18]103 dc[19 23 0 0 20]104 dc[<183C3C1800000000007C1C1C1C1C1C1C1C1C1C1C1C1CFF>8 23 0 0 10] 105 dc[18 23 0 0 19]107 dc[9 23 0 0 10]108 dc[29 14 0 0 30]109 dc[19 14 0 0 20]110 dc[<07C018303018600C600CE00E E00EE00EE00EE00E701C3018183007C0>15 14 1 0 18]111 dc[18 20 0 6 20]112 dc[<07C2001C2600381E00700E00600E00E00E00E0 0E00E00E00E00E00600E00700E00301E001C2E0007CE00000E00000E00000E00000E00000E0000 7FC0>18 20 1 6 19]113 dc[13 14 0 0 14]114 dc[<1F4060C0C040C040E000FF007F801FC001E080608060C060E0C0 9F00>11 14 1 0 14]115 dc[<080008000800180018003800FF80380038003800380038003800 380038403840384038401C800F00>10 20 1 0 14]116 dc[19 14 0 0 20]117 dc[< FE1F3C0E3C0C1C081C080E100E100720072003C003C003C001800180>16 14 1 0 19]118 dc[< FCFE7C3838383838101C3C201C3C201C4C200E4E400E4E400E8640078780078780070380030300 030300>22 14 1 0 25]119 dc[16 14 1 0 19]120 dc[16 20 1 6 19]121 dc dfe /fh df[<3C3C0026460046 87004707008E07008E07000E07000E07001C0E001C0E001C0E001C1C00381C40381C4038384038 3880701900300E00>18 18 4 0 23]110 dc[<01E007180C0C180C380C300E700E700EE01CE01C E01CE018E038E030E06060C031801E00>15 18 5 0 21]111 dc[<00C001C001C001C003800380 03800380FFE00700070007000E000E000E000E001C001C001C001C00384038403840388019000E 00>11 26 3 0 14]116 dc[<070E0019910010E38020E38041C30041C00001C00001C000038000 038000038000038000070200670200E70400CB04008B080070F000>17 18 3 0 19]120 dc dfe /fi df[17 6 1 -11 23]45 dc[<00000E000000 1E0000003E0000007E000000FE000000FE000001FE000003FE0000077E00000E7E00000E7E0000 1C7E0000387E0000707E0000E07E0000E07E0001C07E0003807E0007007E000E007E000E007E00 1C007E0038007E0070007E00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000FE000000FE 000000FE000000FE000000FE000000FE000000FE00007FFFF8007FFFF8007FFFF8>29 39 2 0 34]52 dc[<0C0003000F803F000FFFFE000FFFFC000FFFF8000FFFF0000FFFE0000FFFC0000FFE 00000E0000000E0000000E0000000E0000000E0000000E0000000E7FC0000FFFF8000F80FC000E 003E000C003F0000001F8000001FC000001FC000001FE000001FE018001FE07C001FE0FE001FE0 FE001FE0FE001FE0FE001FC0FC001FC078003F8078003F803C007F001F01FE000FFFF80003FFF0 0000FF8000>27 39 3 0 34]53 dc[<0007F000003FFC0000FFFE0001FC0F0003F01F8007E03F 800FC03F801FC03F801F803F803F801F003F8000007F0000007F0000007F000000FF000000FF0F C000FF3FF800FF707C00FFC03E00FFC03F00FF801F80FF801FC0FF001FC0FF001FE0FF001FE0FF 001FE07F001FE07F001FE07F001FE07F001FE03F001FE03F001FC01F801FC01F803F800FC03F00 07E07E0003FFFC0000FFF000003FC000>27 39 3 0 34]54 dc[<000003800000000007C00000 000007C0000000000FE0000000000FE0000000000FE0000000001FF0000000001FF0000000003F F8000000003FF8000000003FF80000000073FC0000000073FC00000000F3FE00000000E1FE0000 0000E1FE00000001C0FF00000001C0FF00000003C0FF80000003807F80000007807FC000000700 3FC0000007003FC000000E003FE000000E001FE000001E001FF000001C000FF000001FFFFFF000 003FFFFFF800003FFFFFF80000780007FC0000700003FC0000700003FC0000E00001FE0000E000 01FE0001E00001FF0001C00000FF0001C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE001FFFFE >47 41 2 0 52]65 dc[<00003FF001800003FFFE0380000FFFFF8780003FF007DF8000FF8001 FF8001FE00007F8003FC00003F8007F000001F800FF000000F801FE0000007801FE0000007803F C0000007803FC0000003807FC0000003807F80000003807F8000000000FF8000000000FF800000 0000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF 80000000007F80000000007F80000000007FC0000003803FC0000003803FC0000003801FE00000 03801FE0000007000FF00000070007F000000E0003FC00001E0001FE00003C0000FF8000F80000 3FF007E000000FFFFFC0000003FFFF000000003FF80000>41 41 4 0 50]67 dc[36 41 3 0 43]70 dc[<00007FE003000003FFFC0700001FFFFF0F00003FF00FFF 0000FF8001FF0001FE0000FF0003F800003F0007F000003F000FF000001F001FE000000F001FE0 00000F003FC000000F003FC0000007007FC0000007007F80000007007F8000000000FF80000000 00FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80 00000000FF8001FFFFF87F8001FFFFF87F8001FFFFF87FC00000FF003FC00000FF003FC00000FF 001FE00000FF001FE00000FF000FF00000FF0007F00000FF0003F80000FF0001FE0000FF0000FF 8001FF00003FF007BF00001FFFFF1F000003FFFE0F0000007FF00300>45 41 4 0 54]71 dc[< 0000FFE000000007FFFC0000003FC07F8000007F001FC00001FC0007F00003F80003F80007F000 01FC000FF00001FE001FE00000FF001FE00000FF003FC000007F803FC000007F807FC000007FC0 7F8000003FC07F8000003FC07F8000003FC0FF8000003FE0FF8000003FE0FF8000003FE0FF8000 003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0 7F8000003FC07FC000007FC07FC000007FC03FC000007F803FC000007F801FE00000FF001FE000 00FF000FF00001FE0007F00001FC0003F80003F80001FC0007F00000FF001FE000003FC07F8000 000FFFFE00000000FFE00000>43 41 4 0 52]79 dc[39 41 3 0 47]80 dc[48 41 3 0 52]82 dc[68 41 1 0 71]87 dc[<01FF800007FFF0000F81F8001FC07E001FC07E001F C03F000F803F8007003F8000003F8000003F8000003F80000FFF8000FFFF8007FC3F800FE03F80 3F803F803F003F807F003F80FE003F80FE003F80FE003F80FE003F807E007F807F00DF803F839F FC0FFF0FFC01FC03FC>30 27 2 0 33]97 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[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[<3FFFFF803FFFFF803F007F003C00FE003801FE0078 03FC007803F8007007F800700FF000700FE000001FC000003FC000007F8000007F000000FF0000 01FE038001FC038003F8038007F803800FF007800FE007801FE007003FC00F003F801F007F007F 00FFFFFF00FFFFFF00>25 27 2 0 31]122 dc dfe /fj df[<007E1F0001C1B1800303E3C007 03C3C00E03C1800E01C0000E01C0000E01C0000E01C0000E01C0000E01C000FFFFFC000E01C000 0E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0 000E01C0000E01C0000E01C0000E01C0000E01C0007F87FC00>26 29 0 0 24]11 dc[<007E00 01C1800301800703C00E03C00E01800E00000E00000E00000E00000E0000FFFFC00E01C00E01C0 0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 0E01C07F87F8>21 29 0 0 23]12 dc[<007FC001C1C00303C00703C00E01C00E01C00E01C00E 01C00E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E 01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07FCFF8>21 29 0 0 23]13 dc[<003F 07E00001C09C18000380F018000701F03C000E01E03C000E00E018000E00E000000E00E000000E 00E000000E00E000000E00E00000FFFFFFFC000E00E01C000E00E01C000E00E01C000E00E01C00 0E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C 000E00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF80>33 29 0 0 35]14 dc[<6060 F0F0F8F8686808080808080810101010202040408080>13 12 1 -17 21]34 dc[<0F0000C018 8000C030600380703807006027FB00E0100600E0100C00E0100C00E0101800E0101800E0103000 E0106000602060007020C00030418000188180000F0303C00006062000060C10000C1C08001818 080018380400303804006038040060380400C0380400C03804018038040300180803001C080600 0C100C000620040003C0>30 33 2 2 35]37 dc[<00E000000190000003080000030800000708 00000708000007080000070800000710000007100000072000000740000003C03FE003800F0003 8006000380040005C0040009C0080010E0100030E010006070200060702000E0384000E03C4000 E01C8000E00F0020E0070020700780403009C0401830E18007C03E00>27 31 2 1 32]38 dc[< 60F0F8680808081010204080>5 12 4 -17 12]39 dc[<004000800100020006000C000C001800 1800300030007000600060006000E000E000E000E000E000E000E000E000E000E000E000E00060 0060006000700030003000180018000C000C0006000200010000800040>10 42 3 11 16]40 dc [<800040002000100018000C000C000600060003000300038001800180018001C001C001C001C0 01C001C001C001C001C001C001C001C0018001800180038003000300060006000C000C00180010 00200040008000>10 42 2 11 16]41 dc[<60F0F0701010101020204080>4 12 4 8 12]44 dc [11 2 0 -8 14]45 dc[<60F0F060>4 4 4 0 12]46 dc[<00010003000600060006 000C000C000C0018001800180030003000300060006000C000C000C00180018001800300030003 00060006000C000C000C00180018001800300030003000600060006000C000C000>16 41 2 10 21]47 dc[<03C00C301818300C300C700E60066006E007E007E007E007E007E007E007E007E007 E007E007E007E00760066006700E300C300C18180C3007E0>16 29 2 1 21]48 dc[<03000700 3F00C7000700070007000700070007000700070007000700070007000700070007000700070007 0007000700070007000F80FFF8>13 28 4 0 21]49 dc[<07C01830201C400C400EF00FF80FF8 07F8077007000F000E000E001C001C00380070006000C00180030006010C01180110023FFE7FFE FFFE>16 28 2 0 21]50 dc[<07E01830201C201C781E780E781E381E001C001C001800300060 07E00030001C001C000E000F000F700FF80FF80FF80FF00E401C201C183007E0>16 29 2 1 21] 51 dc[<000C00000C00001C00003C00003C00005C0000DC00009C00011C00031C00021C00041C 000C1C00081C00101C00301C00201C00401C00C01C00FFFFC0001C00001C00001C00001C00001C 00001C00001C0001FFC0>18 28 1 0 21]52 dc[<300C3FF83FF03FC020002000200020002000 200023E024302818301C200E000E000F000F000F600FF00FF00FF00F800E401E401C2038187007 C0>16 29 2 1 21]53 dc[<00F0030C06040C0E181E301E300C700070006000E3E0E430E818F0 0CF00EE006E007E007E007E007E007600760077006300E300C18180C3003E0>16 29 2 1 21] 54 dc[<4000007FFF807FFF007FFF004002008004008004008008000010000010000020000060 0000400000C00000C00001C0000180000180000380000380000380000380000780000780000780 00078000078000078000030000>17 29 2 1 21]55 dc[<03E00C301008200C20066006600660 067006780C3E083FB01FE007F007F818FC307E601E600FC007C003C003C003C00360026004300C 1C1007E0>16 29 2 1 21]56 dc[<03C00C301818300C700C600EE006E006E007E007E007E007 E0076007700F300F18170C2707C700060006000E300C780C78187010203030C00F80>16 29 2 1 21]57 dc[<60F0F0600000000000000000000060F0F060>4 18 4 0 12]58 dc[<60F0F0600000 000000000000000060F0F0701010101020204080>4 26 4 8 12]59 dc[<000600000006000000 060000000F0000000F0000000F00000017800000178000001780000023C0000023C0000023C000 0041E0000041E0000041E0000080F0000080F0000180F8000100780001FFF80003007C0002003C 0002003C0006003E0004001E0004001E000C001F001E001F00FF80FFF0>28 29 1 0 31]65 dc[ 24 28 2 0 29]66 dc[<001F808000E0618001801980070007800E0003801C 0003801C00018038000180780000807800008070000080F0000000F0000000F0000000F0000000 F0000000F0000000F0000000F0000000700000807800008078000080380000801C0001001C0001 000E000200070004000180080000E03000001FC000>25 30 2 1 30]67 dc[27 28 2 0 32]68 dc[24 28 2 0 28]69 dc[22 28 2 0 27]70 dc[<001F808000E0 618001801980070007800E0003801C0003801C00018038000180780000807800008070000080F0 000000F0000000F0000000F0000000F0000000F0000000F000FFF0F0000F807000078078000780 78000780380007801C0007801C0007800E00078007000B800180118000E06080001F8000>28 30 2 1 33]71 dc[26 28 2 0 31]72 dc[12 28 1 0 15]73 dc[<1FFF00F8007800780078007800780078007800780078007800780078007800780078007800 78007800787078F878F878F878F0F040E021C01F00>16 29 1 1 21]74 dc[28 28 2 0 32]75 dc[21 28 2 0 26]76 dc[33 28 2 0 38]77 dc[<003F800000E0E0000380380007001C000E000E001C0007003C000780 38000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001 E0F00001E0F00001E0700001C0780003C0780003C0380003803C0007801C0007000E000E000700 1C000380380000E0E000003F8000>27 30 2 1 32]79 dc[23 28 2 0 28] 80 dc[<003F800000E0E0000380380007001C000E000E001C0007003C00078038000380780003 C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F000 01E0700001C0780003C0780003C0380003803C0E07801C1107000E208E0007205C0003A0780000 F0E020003FE0200000602000003060000038E000003FC000003FC000001F8000000F00>27 37 2 8 32]81 dc[28 29 2 1 31]82 dc[<07E0801C1980300580700380600180E00180E00080E000 80E00080F00000F800007C00007FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001 C08001C08001C08001C0C00180C00180E00300D00200CC0C0083F800>18 30 2 1 23]83 dc[< 7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020800F0020800F0020800F0020000F00 00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F 0000000F0000000F0000000F0000000F0000000F0000000F0000001F800003FFFC00>27 28 1 0 30]84 dc[26 29 2 1 31]85 dc[28 29 1 1 31]86 dc[40 29 1 1 43]87 dc[<7FFFF07C01F07001E06003C06003 C0400780400F80400F00401E00001E00003C00007C0000780000F00000F00001E00003E00003C0 100780100780100F00101F00301E00203C00203C00607800E0F803E0FFFFE0>20 28 2 0 25] 90 dc[7 41 4 10 12]91 dc[<08081010202040404040808080808080B0B0F8F87878 3030>13 12 6 -17 21]92 dc[7 41 0 10 12]93 dc[<1FC000307000783800781C00 301C00001C00001C0001FC000F1C00381C00701C00601C00E01C40E01C40E01C40603C40304E80 1F8700>18 18 2 0 21]97 dc[19 29 1 0 23]98 dc[<07E00C3018 78307870306000E000E000E000E000E000E00060007004300418080C3007C0>14 18 2 0 18] 99 dc[<003F0000070000070000070000070000070000070000070000070000070000070003E7 000C1700180F00300700700700600700E00700E00700E00700E00700E00700E007006007007007 00300700180F000C370007C7E0>19 29 2 0 23]100 dc[<03E00C301818300C700E6006E006FF FEE000E000E000E00060007002300218040C1803E0>15 18 1 0 18]101 dc[<00F8018C071E06 1E0E0C0E000E000E000E000E000E00FFE00E000E000E000E000E000E000E000E000E000E000E00 0E000E000E000E000E007FE0>15 29 0 0 13]102 dc[<00038003C4C00C38C01C388018180038 1C00381C00381C00381C001818001C38000C300013C0001000003000001800001FF8001FFF001F FF803003806001C0C000C0C000C0C000C06001803003001C0E0007F800>18 28 1 9 21]103 dc [20 29 1 0 23]104 dc[<18003C003C00180000000000000000000000 00000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF 80>9 29 1 0 12]105 dc[<00C001E001E000C000000000000000000000000000000FE000E000 E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0 F0C0F1C061803E00>11 37 -3 8 13]106 dc[19 29 1 0 22]107 dc [9 29 1 0 12]108 dc[33 18 1 0 36]109 dc[20 18 1 0 23]110 dc[<03F0000E1C00180600300300700380600180E001C0E001C0E001C0E001C0E001C0E001C060 01807003803003001806000E1C0003F000>18 18 1 0 21]111 dc[19 26 1 8 23]112 dc[< 03C1000C3300180B00300F00700700700700E00700E00700E00700E00700E00700E00700600700 700700300F00180F000C370007C700000700000700000700000700000700000700000700003FE0 >19 26 2 8 22]113 dc[13 18 1 0 16]114 dc[<1F9030704030C010C010E010F8007F803FE00FF0 00F880388018C018C018E010D0608FC0>13 18 1 0 16]115 dc[<04000400040004000C000C00 1C003C00FFE01C001C001C001C001C001C001C001C001C001C101C101C101C101C100C100E2003 C0>12 26 1 0 16]116 dc[20 18 1 0 23]117 dc[19 18 1 0 22]118 dc[27 18 1 0 30]119 dc[<7F8FF00F03800F0300 07020003840001C80001D80000F00000700000780000F800009C00010E00020E00060700040380 1E07C0FF0FF8>21 18 0 0 22]120 dc[19 26 1 8 22]121 dc[<7FFC70386038407040F040 E041C003C0038007000F040E041C043C0C380870087038FFF8>14 18 1 0 18]122 dc dfe end TeXDict begin @letter %%Page: 13 13 bop -75 -46 a fj(ing.)34 b(F)m(urther,)21 b(b)r(ecause)f(our)g(optimizations) d(w)o(ere)j(imple-)-75 -1 y(men)n(ted)10 b(using)g(mac)n(hine-indep)q(endent) g(co)q(de,)h(they)f(only)g(had)-75 44 y(to)15 b(b)q(e)h(done)f(once.)22 b(Our) 16 b(exp)q(erience)h(with)d(using)h(con)o(tin)o(ua-)-75 90 y(tions)f(on)g(oth\ er)h(k)o(ernel)g(paths)g(has)f(b)r(een)h(similar.)i(This)d(has)-75 135 y(led) h(us)h(to)f(conclude)h(that)f(w)o(e)h(can)f(apply)g(con)o(tin)o(uations)g(to) -75 180 y(p)q(erformance-critical)k(paths)h(and)g(get)g(goo)q(d)g(results)h (with)-75 226 y(relativ)n(ely)14 b(little)f(e\013ort.)-75 337 y ff(3.4)56 b (Space)33 b(Sa)o(vings)g(Due)g(T)-5 b(o)33 b(Contin)m(ua-)53 390 y(tions)-75 463 y fj(Con)o(tin)n(uations)12 b(e\013ectively)f(c)o(hange)h(the)g(k)o(ernel) h(stac)o(k)f(in)n(to)g(a)-75 508 y(p)q(er-pro)r(cessor,)17 b(rather)f(than)f (a)g(p)q(er-thread,)i(resource.)24 b(F)l(or)-75 553 y(the)f(three)h(test)g (programs,)f(the)g(n)o(um)m(b)q(er)h(of)d(k)o(ernel-level)-75 599 y(threads)f (v)n(aried)f(from)f(24)g(to)i(43.)33 b(\(In)20 b(con)o(trast,)g(the)g(ma-)-75 644 y(c)o(hine)12 b(on)g(whic)o(h)g(w)o(e)g(read)h(our)f(mail)d(t)o(ypically) i(supp)r(orts)h(one)-75 689 y(to)h(t)o(w)o(o)f(h)o(undred)i(threads.\))19 b (Using)12 b(MK32,)h(there)h(w)o(ould)e(b)q(e)-75 735 y(as)19 b(man)m(y)g(k)o (ernel)g(stacks)g(as)g(k)o(ernel-lev)o(el)g(threads.)34 b(Using)-75 780 y(MK4\ 0,)19 b(the)h(n)n(um)n(b)q(er)f(of)g(k)n(ernel)h(stac)o(ks)f(w)o(as,)g(on)g (a)o(v)n(erage,)-75 825 y(2.002.)26 b(Ov)o(er)17 b(99%)f(of)h(the)g(time)f (only)g(t)o(w)o(o)g(stacks)h(w)o(ere)h(in)-75 871 y(use:)23 b(one)16 b(for)f (the)h(curren)q(tly)f(running)h(thread)g(and)g(one)g(for)-75 916 y(an)d(in)n (ternal)g(k)o(ernel)h(thread)f(that)g(never)g(blo)q(c)o(ks)g(with)g(a)f(con-) -75 961 y(tin)o(uation.)20 b(That)15 b(thread's)g(\015o)o(w)g(of)f(con)o(trol) g(is)h(such)g(that)g(a)-75 1007 y(con)o(tin)o(uation)f(is)h(di\016cult)g(to)g (use.)22 b(Its)16 b(stac)o(k,)f(though,)g(rep-)-75 1052 y(resents)f(a)f(const\ ant)g(p)q(er-mac)o(hine,)g(and)g fh(not)g fj(p)r(er-pro)q(cessor,)-75 1097 y (o)o(v)n(erhead)84 1082 y fe(3)104 1097 y fj(.)20 b(The)15 b(remaining)e(.002) g(stacks)i(w)n(ere)h(due)f(to)g(the)-75 1143 y(fact)j(that)g(some)f(con)o(tro\ l)g(transfers)i(do)f(not)g(use)g(con)o(tin)o(ua-)-75 1188 y(tions)c(\(see)i (the)f(b)q(ottom)e(ro)o(w)h(in)g(T)m(able)g(1\).)20 b(In)14 b(the)h(w)o(orst) g(of)-75 1233 y(circumstances,)j(w)o(e)g(sa)o(w)e(the)i(compile)e(test)i(and) e(MS-DOS)-75 1279 y(em)n(ulation)e(use)i(3)e(stacks,)h(and)g(the)h(k)n(ernel) g(build)e(use)i(6.)21 b(In)-75 1324 y(the)f(steady)h(state,)g(ho)o(w)o(ev)o (er,)g(only)e(2)h(k)o(ernel)g(stacks)g(w)n(ere)-75 1369 y(used.)147 1463 y 545 2 v 146 1508 a 2 46 v 221 w 2 46 v 393 1494 a(MK40)529 1508 y 2 46 v 555 1494 a(MK32)691 1508 y 2 46 v 147 1510 a 545 2 v 10 x 545 2 v 146 1565 a 2 46 v 172 1551 a(MI)14 b(state)367 1565 y 2 46 v 443 1551 a(484)529 1565 y 2 46 v 604 1551 a(452)691 1565 y 2 46 v 146 1610 a 2 46 v 172 1597 a(MD)f(state)367 1610 y 2 46 v 443 1597 a(206)529 1610 y 2 46 v 646 1597 a(0)691 1610 y 2 46 v 146 1656 a 2 46 v 172 1642 a(stac)o(k)367 1656 y 2 46 v 484 1642 a(0)529 1656 y 2 46 v 584 1642 a(4096)691 1656 y 2 46 v 146 1701 a 2 46 v 172 1687 a(VM)h(stat\ e)367 1701 y 2 46 v 484 1687 a(0)529 1701 y 2 46 v 604 1687 a(116)691 1701 y 2 46 v 147 1703 a 545 2 v 146 1748 a 2 46 v 172 1734 a(total)367 1748 y 2 46 v 443 1734 a(690)529 1748 y 2 46 v 584 1734 a(4664)691 1748 y 2 46 v 147 1750 a 545 2 v -75 1866 a(T)m(able)c(5:)16 b(Thread)11 b(Managemen)m(t)g(Ov)o(erhead) g(on)g(the)g(DS3100)-75 1911 y(\(in)j(b)n(ytes\))-33 2017 y(Another)k(w)o(a)o (y)g(of)f(ev)n(aluating)g(the)h(sa)o(vings)g(due)h(to)e(con-)-75 2062 y(tin)o (uations)e(is)g(to)g(consider)h(the)g(a)o(v)o(erage)g(amoun)m(t)f(of)g(k)o (ernel)-75 2107 y(memory)e(consumed)h(b)o(y)h(each)g(thread.)22 b(T)m(able)15 b(5)f(sho)o(ws)i(the)-75 2153 y(size)j(in)f(b)o(ytes)i(of)d(the)j(p)q(er-thre\ ad)g(data)e(structures)j(main-)-75 2198 y(tained)12 b(b)o(y)g(the)g(MK32)g (and)g(MK40)g(k)o(ernels)h(on)f(the)g(DS3100.)-75 2243 y(On)g(that)f(mac)n (hine,)g(con)o(tin)o(uations)g(reduce)i(the)e(a)o(v)o(erage)h(size)-75 2289 y (of)g(a)h(thread)g(b)o(y)g(85%.)k(On)c(the)g(T)m(oshiba,)f(there)i(is)f(a)f (compa-)-75 2334 y(rable)i(reduction.)-33 2379 y(The)28 b(space)h(required)g (b)o(y)f(a)f(k)o(ernel-lev)o(el)h(thread)h(in-)-75 2425 y(cludes)e(mac)m(hine\ -indep)r(endent)e(and)h(mac)n(hine-dep)q(endent)-75 2470 y(state,)21 b(and)e (p)q(ossibly)f(a)h(stack.)33 b(In)19 b(MK40,)h(the)g(mac)n(hine-)-75 2515 y (indep)q(endent)e(state)g(has)g(gro)n(wn)g(to)f(include)g(space)i(for)e(the) -75 2551 y 396 2 v -29 2577 a fd(3)-11 2589 y fg(This)g(sp)q(ecial)e(thread)h (will)h(b)q(e)f(remo)o(v)o(ed)f(from)h(the)h(k)o(ernel)e(in)i(a)-75 2625 y (future)10 b(v)o(ersion)g(of)h(Mac)o(h.)1013 -44 y fj(con)o(tin)n(uation)19 b (\(a)g(4)g(b)o(yte)g(function)g(p)q(oin)o(ter\),)i(and)e(the)g(28)1013 1 y (b)n(yte)h(scratc)q(h)f(area,)i(making)c(it)i(32)f(b)o(ytes)j(larger)e(than)g (in)1013 47 y(MK32.)i(The)15 b(mac)n(hine-dep)q(endent)g(thread)h(state)g(inc\ ludes,)1013 92 y(for)9 b(example,)g(user)i(registers)h(that)e(are)h(sa)o(v)n (ed)g(when)f(a)g(thread)1013 137 y(en)o(ters)19 b(the)h(k)n(ernel.)65 b(In)18 b(MK32,)h(the)g(thread's)g(mac)n(hine-)1013 183 y(dep)q(endent)11 b(state)h (is)e(stored)i(on)e(the)i(thread's)f(dedicated)h(k)n(er-)1013 228 y(nel)k(sta\ c)o(k.)26 b(In)16 b(MK40,)g(threads)i(do)e(not)g(ha)o(v)n(e)h(a)f(dedicated) 1013 273 y(k)n(ernel)e(stac)o(k,)f(so)g(the)g(mac)n(hine-dep)r(endent)g(state) g(is)g(k)o(ept)g(in)1013 319 y(a)g(separate)i(data)f(structure.)1054 365 y (The)19 b(space)h(consumed)e(b)o(y)g(a)g(stack)g(includes)h(the)h(stac)o(k) 1013 410 y(itself)10 b(\(4)i(kilob)m(ytes\),)g(and)g(an)n(y)f(data)g(structur\ es)j(used)e(b)o(y)f(the)1013 455 y(virtual)i(memory)f(\(VM\))i(system)g(to)g (main)m(tain)g(the)h(stac)o(k)f(in)1013 501 y(the)g(k)o(ernel's)h(address)g (space.)20 b(In)14 b(MK32,)f(k)o(ernel)i(stac)o(ks)g(are)1013 546 y(pageable,) 10 b(so)g(they)h(require)g(an)f(additional)e(116)h(b)o(ytes)i(of)f(VM)1013 591 y(data)i(structures.)1296 576 y fe(4)1335 591 y fj(The)i(MK40)f(k)o(ernel)h (tak)n(es)g(adv)n(an)n(tage)g(of)1013 637 y(the)j(fact)f(that)g(it)g(is)h(not) f(necessary)j(to)d(page)g(k)o(ernel)h(stacks)1013 682 y(\(since)d(there)h(are) f(so)g(few)f(of)g(them\))g(and)h(sa)n(v)o(es)h(space)f(in)f(the)1013 727 y (VM)h(system.)k(Additionally)-5 b(,)13 b(MK40)h(allocates)h(stac)o(ks)g(from) 1013 773 y(ph)n(ysical)9 b(memory)e(on)i(architectures)i(where)f(this)g(is)f (p)q(ossible,)1013 818 y(freeing)14 b(up)f(a)h(TLB)g(entry)g(for)f(other)i (purp)q(oses.)1013 952 y fi(4)69 b(Generalizi)o(ng)42 b(Previous)h(Opti-)1116 1020 y(mizations)20 b(with)i(Con)n(tin)n(uations)1013 1108 y fj(Con)n(tin)o (uations)d(pro)o(vide)h(a)g(mac)m(hine-indep)q(endent)g(frame-)1013 1154 y (w)n(ork)12 b(with)g(whic)o(h)f(to)h(realize)h(man)m(y)f(of)f(the)h(con)o(tro\ l)g(transfer)1013 1199 y(optimizations)e(found)j(in)g(other)h(op)q(erating)f (systems.)18 b(As)13 b(an)1013 1244 y(example,)18 b(w)o(e)i(can)g(compare)e (Mac)o(h's)h(contin)n(uation-based)1013 1290 y(RPC)12 b(to)g(the)h(con)o(trol) f(transfer)i(asp)q(ects)g(of)e(Ligh)n(t)o(w)o(eigh)o(t)g(Re-)1013 1335 y(mote) g(Pro)r(cedure)j(Call)e(\(LRPC\))h([Bershad)g(et)h(al.)i(90].)1054 1381 y(LRP\ C)d(is)h(a)g(high-performance)f(in)o(terpro)r(cess)i(comm)m(uni-)1013 1426 y (cation)g(facilit)m(y)g(designed)h(for)f(the)h(common)d(case)j(of)f(cross-) 1013 1472 y(address)e(space)f(RPC.)f(P)o(art)h(of)f(LRPC's)h(goo)q(d)g(p)q (erformance)1013 1517 y(is)h(due)g(to)g(the)h(fact)f(that)g(threads)i(can)e (cross)h(address)h(space)1013 1562 y(b)q(oundaries.)h(A)10 b(thread)h(in)f (the)h(caller's)f(address)i(space)f(traps)1013 1608 y(in)n(to)f(the)g(k)o(ern\ el,)g(but)g(returns)i(to)d(the)i(server's)f(address)h(space)1013 1653 y(where) j(it)g(b)q(egins)f(executing)i(the)f(server)g(stub)g(immediately)-7 b(.)1013 1698 y(Up)q(on)10 b(return,)h(the)g(caller's)f(thread)h(traps)f(back)g(in)n (to)g(the)h(k)n(er-)1013 1744 y(nel)k(from)e(the)j(server's)g(address)g(space) g(and)f(transfers)i(bac)o(k)1013 1789 y(in)n(to)12 b(the)g(caller's)f(address) i(space)g(at)f(the)g(instruction)g(follo)m(w-)1013 1834 y(ing)k(the)i(trap.) 29 b(The)17 b(primary)f(p)q(erformance)h(adv)n(an)n(tage)h(of)1013 1880 y(the) 13 b(single)g(thread)h(approac)o(h)f(is)g(that)g(sc)o(heduling)g(and)g(mes-) 1013 1925 y(sage)d(queueing)g(can)h(b)q(e)g(a)n(v)o(oided)f(en)o(tirely)g(on) g(the)h(fast)f(LRPC)1013 1970 y(path,)16 b(since)i(all)d(w)o(ork)h(is)h(b)q (eing)g(done)f(in)h(the)g(con)o(text)g(of)f(a)1013 2016 y(single)d(thread.) 1054 2062 y(Mac)o(h's)22 b(con)o(tin)o(uation-based)g(RPC)g(ac)o(hiev)n(es)h (man)n(y)f(of)1013 2107 y(the)13 b(same)g(p)q(erformance)g(adv)m(an)o(tages)h (as)f(LRPC:)f(no)h(queue-)1013 2152 y(ing,)f(no)i(scheduling,)f(and)g(sharing) h(a)g(k)o(ernel)g(stack)g(b)q(et)o(w)o(een)1013 2198 y(the)22 b(caller)g(and) g(the)g(callee.)42 b(In)22 b(fact,)i(the)e(\015o)o(w)g(of)f(con-)1013 2243 y (trol)14 b(through)h(the)g(k)o(ernel)g(\\lo)q(oks")f(similar)e(in)j(the)g(t)o (w)o(o)g(sys-)1013 2288 y(tems:)24 b(con)o(trol)17 b(en)o(ters)i(a)e(k)n(erne\ l)h(pro)q(cedure)h(from)d(one)h(ad-)1013 2334 y(dress)12 b(space)f(and)f(exit\ s)h(that)g(same)f(pro)q(cedure)i(in)o(to)e(another.)1013 2371 y 396 2 v 1059 2398 a fd(4)1076 2410 y fg(Ev)o(en)17 b(when)h(k)o(ernel)f(stac)o(ks)f(are)i (pageable,)f(threads)f(run)i(often)1013 2446 y(enough)13 b(that)i(their)f(sta\ c)o(ks)h(remain)e(in)j(memory)m(.)25 b(With)15 b(MK32,)i(for)1013 2481 y(exam\ ple,)9 b(w)o(e)j(found)f(that)g(o)o(v)o(er)g(90%)h(of)f(k)o(ernel)g(stac)o (ks)f(remained)g(res-)1013 2517 y(iden)o(t,)15 b(ev)o(en)f(when)h(the)g(syste\ m)f(paged)g(other)h(memory)m(.)25 b(When)15 b(the)1013 2553 y(stac)o(k)d(of)g (an)h(idle)f(thread)g(is)h(actually)e(paged)g(out,)i(an)g fb(additional)h fg (220)1013 2589 y(b)o(ytes)d(of)h(VM-related)g(data)f(structures)f(p)q(er)i (thread)f(are)h(required,)e(so)1013 2625 y(a)h(non-residen)o(t)d(stac)o(k)i (consumes)g(336)g(b)o(ytes.)p eop %%Page: 14 14 bop -75 -46 a fj(F)m(urther,)21 b(con)o(tin)o(uation-based)e(RPC)f(main)m (tains)h(the)h(logi-)-75 -1 y(cal)13 b(separation)g(b)r(et)o(w)o(een)h(a)f (clien)o(t's)g(thread)h(and)f(a)h(serv)o(er's.)-75 44 y(Threads)i(remain)e (\014xed)h(in)g(their)g(address)h(space,)g(eliminat-)-75 90 y(ing)11 b(man)m (y)g(of)g(the)g(protection,)h(debugging)f(and)g(garbage)g(col-)-75 135 y(lect\ ion)k(problems)f(that)i(o)q(ccur)g(when)g(threads)g(migrate)e(b)q(e-)-75 180 y (t)o(w)o(een)h(address)g(spaces)g([Bershad)g(90].)-33 228 y(A)k(natural)h(ext\ ension)g(to)g(the)g(con)o(tin)o(uation)f(model)g(al-)-75 273 y(lo)n(ws)f(us)h (to)e(completely)g(mimi)o(c)f(the)i(LRPC)g(transfer)h(pro-)-75 318 y(to)q(col\ .)j(By)16 b(default,)f(when)h(a)f(Mac)o(h)h(thread)g(traps)g(in)o(to)f(the) -75 364 y(k)o(ernel,)22 b(it)e(generates)i(a)f(con)o(tin)n(uation)f(that)h (will)e(transfer)-75 409 y(con)o(trol)g(bac)o(k)g(to)g(the)h(same)e(user-leve\ l)h(con)o(text)h(in)f(whic)n(h)-75 454 y(the)e(trap)f(o)q(ccurred.)27 b(W)l (e)17 b(are)f(exp)r(erimen)n(ting)g(with)f(an)h(ex-)-75 500 y(tension)h(to)g (the)h(IPC)f(in)o(terface)h(that)f(enables)h(a)f(thread)h(to)-75 545 y(regist\ er)j(an)e(o)n(v)o(erriding)g(user-level)h(con)o(tin)n(uation)f(for)g(sys-)-75 590 y(tem)11 b(call)g(returns.)220 575 y fe(5)258 590 y fj(This)h(extension)g (eliminates)f(the)h(cost)h(of)-75 636 y(sa)o(ving)e(and)h(restoring)g(registe\ r)h(state)g(for)f(the)g(server)h(thread)-75 681 y(and)19 b(allo)m(ws)g(the)h (server)f(thread)h(to)f(discard)g(its)g(user-level)-75 726 y(stack)13 b(while) h(block)n(ed)h(w)n(aiting)e(for)h(an)f(RPC)h(request.)-33 773 y(With)d(the)j (abilit)m(y)e(to)h(return)g(out)g(of)f(the)h(k)o(ernel)g(to)f(a)g(con-)-75 819 y(text)h(other)g(than)g(the)g(one)g(that)f(w)o(as)h(activ)n(e)g(at)g(the)g (time)e(the)-75 864 y(k)o(ernel)h(w)o(as)f(entered,)h(con)o(tin)o(uations)f (can)h(b)q(e)g(used)g(to)f(imple-)-75 909 y(men)n(t)g(a)g(ric)o(h)g(collectio\ n)g(of)f(con)o(trol)h(transfer)h(mec)n(hanisms)e(in)-75 955 y(a)h(general)g (w)o(a)n(y)m(.)17 b(F)l(or)11 b(example,)f(the)h(up)r(calls)f(required)i(b)o (y)f(the)-75 1000 y fh(x)p fj(-k)o(ernel)17 b([Hutc)o(hinson)g(et)g(al.)25 b (89])16 b(and)g(Scheduler)h(Activ)n(a-)-75 1045 y(tions)11 b([Anderson)i(et)f (al.)k(91])11 b(can)h(b)q(e)g(implemen)l(ted)h(b)n(y)f(k)o(eep-)-75 1091 y (ing)g(a)g(p)q(o)q(ol)g(of)g(bloc)o(k)o(ed)h(threads)h(in)e(the)h(k)o(ernel,) g(eac)o(h)g(with)f(a)-75 1136 y(default)e(\\return-to-user-level")f(contin)n (uation.)16 b(T)m(o)9 b(p)r(erform)-75 1181 y(an)i(up)r(call,)g(the)h(default) f(con)o(tin)o(uation)g(is)g(replaced)i(with)e(one)-75 1227 y(that)20 b(transf\ ers)i(con)o(trol)e(out)g(of)g(the)h(k)o(ernel)g(to)f(a)g(sp)r(eci\014c)-75 1272 y(address)15 b(at)f(user)h(lev)o(el.)j(Asynchronous)c(I/O)g([Levy)g(&)g (Eck-)-75 1317 y(house)e(89])e(b)q(eha)o(v)o(es)h(in)g(a)g(similar)d(fashion;) j(on)g(sc)o(heduling)g(an)-75 1363 y(async)o(hronous)j(I/O,)g(a)f(thread)i (pro)o(vides)f(the)g(k)o(ernel)g(with)g(a)-75 1408 y(con)o(tin)o(uation)f(to) h(b)q(e)g(called)g(when)g(the)h(I/O)e(completes.)-75 1548 y fi(5)69 b(Related) 21 b(W)-6 b(ork)-75 1638 y fj(The)13 b(language)e(comm)l(unit)o(y)h(has)h(b)q (een)g(exp)r(erimen)n(ting)f(with)-75 1683 y(con)o(tin)o(uations)i(for)g(almo\ st)e(t)o(w)o(o)i(decades.)21 b(W)l(ard)14 b(used)h(con-)-75 1729 y(tin)o(uati\ ons)h(to)h(de\014ne)h(the)g(primitiv)l(es)g(of)f(a)f(message)h(pass-)-75 1774 y(ing)h(algebra)g(called)g(m)n(u-calculus)g([W)l(ard)h(&)g(Halstead)f(80])-75 1819 y(and)12 b(sho)o(w)o(ed)g(that)g(all)e(control)h(transfer)i(could)f(b)q (e)g(expressed)-75 1865 y(in)19 b(terms)h(of)f(that)h(algebra.)36 b(F)m(uncti\ onal)19 b(languages)g(that)-75 1910 y(supp)r(ort)d(concurrent)h(execution)f (and)g(\014rst-class)h(con)o(tin)o(ua-)-75 1955 y(tions)e(ha)n(v)o(e)g(b)q (een)h(successful)h(in)d(implemen)l(ting)g(the)i(former)-75 2001 y(in)h(terms) g(of)g(the)h(latter)g([W)l(and)f(80,)f(Ha)o(ynes)i(&)g(F)m(riedman)-75 2046 y (84,)g(Co)q(op)q(er)i(&)f(Morrisett)h(90].)33 b(These)20 b(e\013orts,)i(ho)n (w)o(ev)o(er,)-75 2091 y(ha)o(v)n(e)15 b(concen)q(trated)g(on)f(control)g(tra\ nsfer)h(at)g(user)h(lev)n(el)f(b)q(e-)-75 2137 y(t)o(w)o(een)h(con)o(texts)h (in)e(the)i(same)d(address)j(space.)25 b(F)l(unctional)-75 2182 y(languages) 15 b(often)g(use)i(non-con)n(tiguous)f(data)f(structures)j(to)-75 2227 y(impl\ emen)l(t)f(function)f(call)g(stacks,)h(partially)e(reducing)j(the)-75 2273 y (incen)o(tiv)o(e)12 b(to)f(discard)i(stac)o(ks.)18 b(\(A)12 b(large)f(p)q(ort\ ion)g(of)h(a)f(k)o(ernel)-75 2318 y(thread's)h(discardable)g(state)h(is)f(the) g(un)o(used)h(stac)o(k)f(space)h(b)q(e-)-75 2363 y(lo)n(w)j(the)g(b)q(ottom-m\ ost)d(activ)o(e)j(call)f(frame.\))22 b(Additionally)-5 b(,)-75 2409 y(most)15 b(functional)g(languages)h(mak)m(e)g(con)o(tin)o(uation)f(recogni-)-75 2454 y (tion)i(hard)g(b)r(ecause)h(they)g(disallo)n(w)f(equalit)n(y)h(comparisons) -75 2499 y(of)g(functional)g(ob)r(jects.)35 b(Lampson)17 b([Lampson)g(et)j (al.)32 b(74])-75 2545 y(describ)r(ed)13 b(a)g(generalized)g(con)o(trol)f(tra\ nsfer)i(in)n(terface)g(based)-75 2586 y 396 2 v -29 2613 a fd(5)-11 2625 y fg (This)d(extension)e(is)j(not)e(part)h(of)g(Mac)o(h's)g(main-line)e(release.) 1013 -46 y fj(on)14 b(con)o(tin)o(uations)g(for)h(an)g(early)g(v)n(ersion)h (of)e(the)i(Mesa)f(pro-)1013 -1 y(gramm)o(ing)c(language)i([Gesc)o(hk)o(e)h (et)g(al.)k(77].)1054 45 y(A)c(m)n(uc)o(h)h(restricted)h(form)d(of)g(Lampson'\ s)g(in)n(terface)j(later)1013 90 y(app)q(eared)f(in)e(the)i(cross-address)h (space)f(RPC)f(implemen)l(ta-)1013 136 y(tion)e(for)h(T)l(opaz)h([Sc)n(hro)r (eder)g(&)f(Burrows)g(90],)f(an)h(op)q(erating)1013 181 y(system)d(designed)h (for)g(the)g(Fire\015y)m(,)g(DEC)f(SR)o(C's)g(exp)r(erimen-)1013 226 y(tal)f (m)m(ultiprocessor)j(w)o(orkstation)d([Thac)n(k)o(er)h(et)h(al.)k(88].)h(This) 1013 272 y(in)n(terface,)22 b(implemen)l(ted)f(in)e(assem)o(bly)g(language,)h (do)q(es)h(a)1013 317 y(stac)o(k)13 b(hando\013,)g(but)g(do)q(es)h(not)f(use) h(recognition)f(or)g(tak)o(e)g(ad-)1013 362 y(v)m(an)o(tage)f(of)f(a)h(shared) h(stack)f(con)o(text.)18 b(\(SR)n(C's)12 b(RPC)g(path)g(is)1013 408 y(so)j (hea)o(vily)f(optimized)g(that)h(the)h(stack)f(con)o(tains)g(no)g(useful)1013 453 y(con)o(text)e(b)q(ecause)h(all)d(v)n(alues)h(are)h(k)o(ept)g(in)f(regist\ ers\).)19 b(T)m(opaz)1013 498 y(also)13 b(allo)m(ws)i(threads)g(to)e(discard) i(their)f(k)o(ernel)h(stac)o(ks)f(when)1013 544 y(bloc)o(king)f(if)f(they)i (will)e(execute)j(in)e(user)h(space)g(immediately)1013 589 y(after)c(b)q(eing) g(rescheduled.)17 b(Because)12 b(T)m(opaz)e(implemen)l(ts)g(the)1013 634 y (bloc)o(king)j(componen)o(t)h(of)e(semaphores)i(and)f(condition)g(v)n(ari-) 1013 680 y(ables)k(in)f(the)i(k)o(ernel,)g(this)f(is)g(an)f(importan)o(t)h (optimization)1013 725 y(for)11 b(threads)j(block)n(ed)f(on)f(user-level)g (ev)o(ents.)18 b(Ev)o(en)12 b(with)g(the)1013 770 y(optimizations)7 b(for)j (these)h(t)o(w)o(o)f(cases,)i(though,)e(there)h(are)g(still)1013 816 y(man)m (y)16 b(places)i(in)e(the)i(T)l(opaz)f(k)o(ernel)g(where)h(threads)g(blo)q (c)o(k)1013 861 y(using)c(the)i(pro)q(cess)g(model)f(and)f(consume)h(a)g(stac) o(k.)21 b(Recent)1013 906 y(measuremen)m(ts)13 b(from)d(a)i(\014v)o(e)g(pro)r (cessor,)h(96)f(megab)m(yte)h(Fire-)1013 952 y(\015y)g(at)h(DEC)f(SR)o(C,)g (for)g(example,)f(sho)o(w)o(ed)i(that)g(886)f(k)n(ernel-)1013 997 y(lev)n(el) g(threads)i(w)n(ere)g(using)e(212)f(k)o(ernel)i(stac)o(ks.)k(Most)c(of)e(the) 1013 1042 y(stac)o(ks)k(w)n(ere)h(b)q(eing)e(used)h(b)o(y)f(threads)i(in)n (ternal)f(to)f(the)h(k)n(er-)1013 1088 y(nel)i(\(28\),)g(w)o(aiting)f(for)h (a)f(timer)g(to)h(expire)h(\(106\),)f(w)o(aiting)1013 1133 y(for)c(a)g(netw)o (ork)g(pack)n(et)i(\(20\),)e(or)h(w)n(aiting)f(to)h(handle)f(an)h(ex-)1013 1178 y(ception)d(\(38\).)17 b(While)11 b(w)o(e)i(w)o(ould)e(not)h(exp)r(ect)h (con)o(tin)n(uations)1013 1224 y(to)f(impro)m(v)o(e)g(the)h(Fire\015y's)g(cro\ ss-address)i(space)e(RPC)f(path,)1013 1269 y(w)n(e)h(w)o(ould)e(exp)q(ect)i (a)f(reduction)h(in)e(the)i(amoun)m(t)f(of)f(memory)-6 b(,)1013 1314 y(cac)o (he,)17 b(and)e(bus)i(bandwidth)f(consumed)g(b)n(y)g(so)h(man)m(y)f(k)n(er-) 1013 1360 y(nel)11 b(stacks.)18 b(In)12 b(Mac)o(h,)g(for)f(example,)g(886)g (similarly)e(block)n(ed)1013 1405 y(k)n(ernel-level)h(threads)i(w)o(ould)f (require)g(only)g(6)f(stacks,)h(one)g(for)1013 1450 y(eac)o(h)f(of)g(the)h (Fire\015y's)g(\014v)o(e)g(pro)q(cessors)h(and)f(one)f(for)h(a)f(sp)q(ecial) 1013 1496 y(k)n(ernel)15 b(thread.)1054 1542 y(Op)r(erating)j(systems)g(imple\ men)l(ted)h(with)e(the)i(in)o(terrupt)1013 1587 y(mo)o(del,)11 b(such)g(as)g (QuickSilv)m(er)h([Haskin)f(et)g(al.)17 b(88],)10 b(V)h([Cheri-)1013 1632 y (ton)j(88],)g(and)h(MS-DOS)g([Duncan)f(86],)g(use)i(the)g(equiv)m(alen)o(t) 1013 1678 y(of)9 b(con)o(tin)o(uations)g(exclusiv)o(ely)m(.)17 b(The)10 b(V)g (k)o(ernel,)h(for)f(example,)1013 1723 y(asso)q(ciates)i(a)g(\\\014nish)r 13 2 v 13 w(up")f(function)h(with)f(a)h(thread)g(descrip-)1013 1768 y(tor)18 b(to) f(allo)n(w)h(the)g(thread's)h(computation)d(to)i(b)q(e)h(resumed)1013 1814 y (after)11 b(it)h(bloc)o(ks.)18 b(Ho)o(w)n(ever,)12 b(these)h(systems')e(inabi\ lit)m(y)h(to)f(use)1013 1859 y(the)j(pro)q(cess)h(model)f(as)g(a)f(\\safet)o (y)h(net")g(has)g(made)e(their)j(in-)1013 1904 y(ternal)10 b(structure)j(comp\ lex;)d(for)g(example,)f(page)i(faults)f(m)m(ust)1013 1950 y(generally)j(b)q (e)i(prev)o(ented)f(while)g(executing)h(within)e(the)i(k)n(er-)1013 1995 y (nel,)g(and)h(ev)o(en)g(simple)e(k)o(ernel-lev)o(el)i(locking)f(necessary)i (for)1013 2040 y(m)m(ultiprocessing)e(is)f(di\016cult)f([Cheriton)h(91].)1054 2086 y(W)l(e)f(are)g(not)g(a)n(w)o(are)g(of)f(an)n(y)h(other)g(system)f(that) h(com)n(bines)1013 2132 y(the)k(pro)q(cess)h(mo)o(del)f(and)f(the)h(in)n(terr\ upt)h(model,)e(that)h(uses)1013 2177 y(recognition)10 b(as)h(a)f(general)h (optimization)d(tec)o(hnique,)j(or)g(that)1013 2222 y(treats)21 b(the)g(cross\ ing)h(of)e(the)h(user-kernel)g(b)q(oundary)g(as)f(a)1013 2268 y(con)o(tin)n (uation-based)10 b(con)o(trol)g(transfer)h(that)f(can)h(b)q(e)f(a\013ected) 1013 2313 y(b)n(y)k(user-level)g(applications.)1013 2447 y fi(6)69 b(F)-6 b (uture)18 b(W)-6 b(ork)20 b(and)f(Conclusions)1013 2534 y fj(Our)d(w)o(ork)f (with)h(con)o(tin)o(uations)f(in)g(Mac)o(h)h(is)g(ongoing.)22 b(W)m(e)1013 2580 y(are)16 b(presently)f(exp)r(erimen)n(ting)g(with)h(con)o(tin)n(uations) g(at)f(the)1013 2625 y(application)e(lev)o(el)h(within)g(the)i(con)o(text)f (of)g(C-Threads,)g(our)p eop %%Page: 15 15 bop -75 -46 a fj(user-level)18 b(threads)i(pac)o(k)n(age.)31 b(W)m(e)19 b (in)n(tend)g(to)g(allo)m(w)g(user-)-75 -1 y(lev)o(el)25 b(threads)h(to)g(use) g(con)o(tin)o(uations,)h(discarding)e(their)-75 44 y(stacks)16 b(and)g(p)q (erforming)e(recognition)i(when)g(p)q(ossible.)25 b(F)l(or)-75 90 y(applicati\ ons)9 b(that)h(do)g(their)g(o)o(wn)g(user-level)f(scheduling)h(and)-75 135 y (synchronization,)15 b(w)o(e)h(exp)r(ect)h(that)f(con)o(tin)o(uations)f(will) g(re-)-75 180 y(duce)e(the)f(space)h(and)f(time)e(o)o(v)n(erheads)k(normally) 9 b(asso)q(ciated)-75 226 y(with)14 b(large)f(n)o(um)n(b)q(ers)i(of)e(user-le\ vel)g(threads.)-33 272 y(W)l(e)g(are)h(not)f(the)h(\014rst)g(to)f(recognize)i (the)f(p)q(o)n(w)o(er)g(and)f(\015ex-)-75 317 y(ibilit)m(y)k(of)f(con)o(tin)o (uations)g(as)h(a)f(mec)o(hanism)f(for)h(describing)-75 362 y(and)e(implem)o (en)m(ting)f(the)i(transfer)f(of)g(con)o(trol)f(b)q(etw)o(een)h(con-)-75 408 y (texts.)36 b(The)20 b(no)o(v)n(elt)o(y)g(of)f(our)g(w)o(ork)g(lies)h(in)f(the) h(fact)f(that)-75 453 y(w)o(e)14 b(ha)o(v)n(e)h(b)q(een)f(able)g(to)g(apply)f (con)o(tin)n(uations)h(in)f(a)g(general-)-75 498 y(purp)r(ose)h(op)q(erating) f(system)g(k)o(ernel.)19 b(The)14 b(use)g(of)f(con)o(tin)o(ua-)-75 544 y(tion\ s)j(has)g(allo)n(w)n(ed)h(us)g(to)f(implem)o(en)m(t)g(p)q(ortably)g(new)g(opt\ i-)-75 589 y(mizations,)11 b(and)h(to)h(recast)h(several)e(optimizations)f (found)h(in)-75 634 y(other)e(op)q(erating)f(systems)h(in)f(terms)g(of)g(a)g (single)g(abstraction.)-75 680 y(As)i(a)g(result,)g(w)o(e)g(ha)o(v)n(e)h(ac)o (hiev)n(ed)g(substan)o(tial)e(impro)m(v)o(emen)n(ts)-75 725 y(in)j(system)h (p)q(erformance.)-33 771 y(W)l(e)c(b)q(eliev)o(e)g(that)f(the)i(methodology)d (and)h(techniques)h(that)-75 816 y(w)o(e)i(ha)o(v)n(e)h(describ)r(ed)f(in)f (this)h(pap)q(er)h(can)f(b)q(e)g(applied)f(to)h(other)-75 862 y(op)q(erating) 17 b(system)h(k)o(ernels)g(to)g(ac)o(hiev)o(e)g(results)g(similar)e(to)-75 907 y(our)f(o)o(wn.)22 b(W)l(e)16 b(in)o(vite)f(the)h(reader)g(to)f(examine)f(our) i(system)-75 952 y(b)o(y)i(obtaining)f(the)i(sources)h(for)e(the)h(Mac)o(h)f (3.0)g(k)n(ernel)h(via)-75 998 y(anon)n(ymous)13 b(ftp)h(from)e(cs.cm)n(u.edu\ .)-75 1131 y fi(Ac)n(kno)n(wledgemen)n(ts)-75 1219 y fj(W)l(e'd)17 b(lik)n (e)h(to)e(thank)h(T)m(om)e(Anderson,)k(Lance)e(Berc,)i(John)-75 1264 y(Carter\ ,)c(Da)n(vid)e(Cheriton,)h(Ed)h(F)l(elten,)g(Bill)e(Jo)o(y)l(,)h(Bob)g(Kut-) -75 1309 y(ter,)g(P)o(eter)h(Lee,)f(Tim)e(Mann,)h(Brian)h(Marsh,)g(Sap)q(e)g (Mullen-)-75 1355 y(der,)f(John)g(Ousterhout,)h(Mik)n(e)f(Sc)o(hro)q(eder,)h (Dan)e(Sto)q(dolsky)l(,)-75 1400 y(Andy)18 b(T)l(anenbaum,)e(Ra)r(j)h(V)m(asw) o(ani,)h(John)g(Zahorjan,)g(and)-75 1445 y(Matt)d(Zek)o(ausk)n(as)g(for)g(the\ ir)h(helpful)e(discussions)j(and)e(com-)-75 1491 y(men)n(ts)f(on)g(earlier)g (drafts)g(of)f(this)h(pap)q(er.)19 b(W)l(e'd)14 b(also)f(lik)n(e)i(to)-75 1536 y(thank)e(Da)n(v)o(e)g(Redell)f(and)h(Mik)o(e)g(Burro)o(ws)h(for)e(helping)g (us)i(to)-75 1581 y(understand)e(T)m(opaz)f(and)g(for)f(pro)o(viding)g(us)i (with)e(usage)i(data)-75 1627 y(from)i(that)h(system.)23 b(Ed)15 b(Lazo)o(wsk) n(a's)g(tireless)h(shepherding)-75 1672 y(greatly)e(impro)m(v)n(ed)h(this)f (pap)q(er.)-75 1805 y fi(References)-75 1889 y fc([Accetta)f(et)f(al.)i(86]) 20 b(Accetta,)d(M.)f(J.,)g(Baron,)i(R.)e(V.,)g(Bolosky)o(,)29 1931 y(W.,)f (Golub,)j(D.)d(B.,)g(Rashid,)j(R.)d(F.,)g(T)m(ev)n(anian,)i(Jr.,)e(A.,)29 1972 y(and)e(Y)l(oung,)g(M.)f(W.)j(Mach:)h(A)c(New)f(Kernel)i(F)m(oundation)29 2014 y(for)i(UNIX)f(Dev)o(elopmen)q(t.)23 b(In)15 b fa(Pr)n(o)n(c)m(e)n(e)n(dings) f(of)h(the)f(Sum-)29 2055 y(mer)k(1986)e(USENIX)g(Confer)m(enc)m(e)p fc(,)i (pages)g(93{113,)i(July)29 2097 y(1986.)-75 2174 y([Anderson)14 b(et)f(al.)g (89])21 b(Anderson,)27 b(T.)c(E.,)i(Lazowsk)n(a,)h(E.)d(D.,)29 2216 y(and)18 b (Levy)m(,)h(H.)d(M.)31 b(The)17 b(P)o(erformance)h(Implications)j(of)29 2257 y (Thread)9 b(Managemen)q(t)f(Alternativ)q(es)h(for)g(Shared)h(Memory)29 2299 y (Multipro)s(cessors.)24 b fa(IEEE)16 b(T)n(r)n(ansactions)c(on)j(Computers)p fc(,)29 2340 y(38\(12\):1631{1644,)f(Decemb)q(er)f(1989.)-75 2417 y([Anderson) h(et)f(al.)g(91])21 b(Anderson,)16 b(T.)e(E.,)h(Bershad,)h(B.)f(N.,)g(La-)29 2459 y(zo)o(wsk)n(a,)i(E.)f(D.,)g(and)h(Levy)m(.,)g(H.)e(M.)27 b(Sc)o(heduler) 18 b(Activ)o(a-)29 2500 y(tions:)31 b(E\013ective)19 b(Kernel)h(Supp)s(ort)f (for)g(the)h(User-Lev)o(el)29 2542 y(Management)g(of)f(P)o(arallelism.)40 b (In)19 b fa(Pr)o(o)m(c)n(e)n(e)m(dings)f(of)i(the)29 2583 y(13th)d(A)n(CM)i (Symp)m(osium)f(on)f(Op)n(er)n(ating)g(Systems)f(Prin-)29 2625 y(ciples)p fc (,)10 b(Octob)r(er)j(1991.)k(This)d(issue.)1013 -47 y([App)q(el)f(&)g(Li)g (91])21 b(App)r(el,)g(W.)f(and)g(Li,)h(K.)36 b(Virtual)21 b(Memory)1116 -5 y (Primitiv)r(es)14 b(for)h(User)g(Programs.)23 b(In)15 b fa(Pr)n(o)n(c)m(e)n (e)n(dings)e(of)i(the)1116 36 y(F)m(ourth)e(Symp)m(osium)g(on)f(A)o(r)n(chite) m(ctur)m(al)h(Supp)l(ort)g(for)g(Pr)o(o-)1116 78 y(gr)n(amming)k(L)n(anguages) e(and)h(Op)n(er)n(ating)g(Systems)p fc(,)g(pages)1116 119 y(96{107,)e(April)g (1991.)1013 196 y([Ball)g(et)f(al.)g(76])21 b(Ball,)j(J.)c(E.,)j(F)m(eldman,) h(J.)c(A.,)j(Lo)o(w,)f(J.)e(R.,)1116 238 y(Rashid,)12 b(R.)d(F.,)g(and)g(Rovn\ er,)h(P)m(.)e(D.)j(RIG,)e(Ro)r(c)o(hester's)g(In-)1116 280 y(telligen)r(t)i (Gatew)o(a)o(y:)16 b(System)c(Ov)o(erview.)j fa(IEEE)c(T)n(r)n(ansac-)1116 321 y(tion)j(on)h(Softwar)m(e)g(Engine)l(ering)p fc(,)f(2\(4\):321{328,)i(Decem-) 1116 363 y(b)r(er)d(1976.)1013 440 y([Bershad)g(90])21 b(Bershad,)26 b(B.)c (N.)45 b fa(High)21 b(Performanc)m(e)h(Cr)n(oss-)1116 481 y(A)n(ddr)m(ess)f (Sp)m(ac)m(e)g(Communic)n(ation)p fc(.)40 b(PhD)22 b(dissertation,)1116 523 y (University)15 b(of)f(W)m(ashington,)j(Department)d(of)g(Computer)1116 565 y (Science)20 b(and)g(Engineering,)j(Seattle,)d(W)m(A)e(98195,)j(June)1116 606 y (1990.)1013 683 y([Bershad)13 b(et)g(al.)g(90])21 b(Bershad,)g(B.)d(N.,)g(And\ erson,)j(T.)c(E.,)i(La-)1116 725 y(zowsk)n(a,)i(E.)e(D.,)i(and)g(Levy)m(,)g (H.)e(M.)37 b(Ligh)q(t)n(w)o(eight)20 b(Re-)1116 766 y(mote)d(Pro)r(cedure)h (Call.)30 b fa(A)n(CM)19 b(T)m(r)n(ansactions)14 b(on)j(Com-)1116 808 y(puter) e(Systems)p fc(,)f(8\(1\):37{55,)i(F)m(ebruary)h(1990.)25 b(Also)16 b(ap-) 1116 850 y(p)r(eared)h(in)h fa(Pr)n(o)m(c)n(e)n(e)m(dings)e(of)g(the)h(12th)e (A)o(CM)j(Symp)m(osium)1116 891 y(on)13 b(Op)n(er)n(ating)f(Systems)g(Princip\ les)p fc(,)e(Decemb)q(er)j(1989.)1013 968 y([Blac)o(k)g(90a])21 b(Black,)12 b (D.)g(L.)j fa(Sche)l(duling)c(and)g(R)n(esour)m(c)n(e)h(Manage-)1116 1010 y (ment)j(T)n(e)n(chniques)d(for)k(Multipr)m(o)m(c)n(essors)p fc(.)22 b(PhD)16 b (disserta-)1116 1051 y(tion,)j(Scho)q(ol)g(of)e(Computer)h(Science,)h(Carnegi\ e)g(Mellon)1116 1093 y(University)m(,)13 b(July)g(1990.)1013 1170 y([Blac)o (k)g(90b])21 b(Black,)c(D.)f(L.)25 b(Scheduling)18 b(Supp)s(ort)e(for)g(Concu\ r-)1116 1212 y(rency)11 b(and)g(P)o(arallelism)i(in)d(the)h(Mac)o(h)f(Op)q (erating)i(System.)1116 1253 y fa(IEEE)i(Computer)f(Magazine)p fc(,)d(23\(5\)\ :35{43,)k(Ma)o(y)f(1990.)1013 1331 y([Blac)o(k)g(et)g(al.)g(88])21 b(Black,)g (D.,)g(Golub,)h(D.,)f(Hauth,)g(K.,)f(T)m(ev)n(a-)1116 1372 y(nian,)27 b(Jr.,) e(A.,)g(and)g(Sanzi,)i(R.)48 b(The)23 b(Mach)g(Excep-)1116 1414 y(tion)c(Hand\ ling)g(F)m(acilit)q(y.)30 b(In)17 b fa(Pr)n(o)n(c)n(e)m(e)n(dings)f(of)h(the) g(A)n(CM)1116 1455 y(SIGPLAN/SIGOPS)c(Workshop)i(on)h(Par)n(al)q(lel)g(and)f (Dis-)1116 1497 y(tribute)m(d)e(Debugging)p fc(,)d(pages)j(45{56,)h(Ma)o(y)f (1988.)1013 1574 y([Blac)o(k)g(et)g(al.)g(91])21 b(Black,)c(D.)g(L.,)f(Golub,) i(D.)e(B.,)h(Julin,)i(D.)d(P)m(.,)1116 1616 y(Rashid,)e(R.)e(F.,)f(Dra)o(ves,) g(R.)h(P)m(.,)f(Dean,)i(R.)e(W.,)h(F)m(orin,)h(A.,)1116 1657 y(Barrera,)21 b (J.,)e(T)l(okuda,)i(H.,)e(Malan,)i(G.,)f(and)f(Bohman,)1116 1699 y(D.)f(Micro\ k)q(ernel)c(Op)q(erating)h(System)f(Arc)n(hitectures)h(and)1116 1740 y(Mach.) i fa(Journal)c(of)g(Information)f(Pr)n(o)n(c)m(essing)p fc(,)f(Decemb)q(er) 1116 1782 y(1991.)18 b(T)l(o)13 b(app)r(ear.)1013 1859 y([Cheriton)g(88])21 b (Cheriton,)16 b(D.)e(R.)21 b(The)15 b(V)f(Distributed)j(System.)1116 1901 y fa (Communic)n(ations)c(of)h(the)g(A)n(CM)p fc(,)h(31\(3\):314{333,)g(March)1116 1942 y(1988.)1013 2019 y([Cheriton)e(91])21 b(Cheriton,)g(D.)e(R.)34 b(P)o (ersonal)21 b(Comm)o(unication,)1116 2061 y(May)13 b(1991.)1013 2138 y([Coop) r(er)g(&)f(Drav)o(es)h(88])21 b(Co)q(op)q(er,)13 b(E.)g(C.)g(and)h(Dra)o(ves,) f(R.)g(P)m(.)k(C-)1116 2180 y(Threads.)24 b(T)l(ec)o(hnical)17 b(Rep)r(ort)e (CMU-CS-88-154,)g(Scho)q(ol)1116 2221 y(of)22 b(Computer)h(Science,)i(Carnegi\ e)e(Mellon)i(Univ)o(ersity)m(,)1116 2263 y(F)m(ebruary)14 b(1988.)1013 2340 y ([Coop)r(er)f(&)f(Morrisett)i(90])21 b(Co)q(op)r(er,)34 b(E.)29 b(C.)g(and)i (Morrisett,)1116 2382 y(J.)16 b(G.)28 b(Adding)18 b(Threads)f(to)g(Standard)h (ML.)28 b(T)m(ec)o(hnical)1116 2423 y(Rep)r(ort)18 b(186,)i(Sc)o(ho)r(ol)f (of)f(Computer)h(Science,)i(Carnegie)1116 2465 y(Mellon)15 b(University)m(,)e (Decem)o(b)q(er)g(1990.)1013 2542 y([Dra)o(v)o(es)g(90])21 b(Dra)o(v)o(es,)g (R.)d(P)m(.)35 b(A)19 b(Revised)h(IPC)f(In)o(terface.)35 b(In)1116 2583 y fa (Pr)o(o)m(c)n(e)n(e)m(dings)18 b(of)g(the)g(First)h(Mach)f(USENIX)f(Workshop) p fc(,)1116 2625 y(pages)d(101{121,)g(Octob)q(er)f(1990.)p eop %%Page: 16 16 bop -75 -47 a fc([Duncan)14 b(86])21 b(Duncan,)13 b(R.)h fa(A)m(dvanc)l(e)n (d)e(MS-DOS:)f(the)g(Micr)n(osoft)29 -5 y(guide)22 b(for)i(assembly)f(languag\ e)e(and)i(C)i(pr)n(o)m(gr)n(ammers)p fc(.)29 36 y(Redmond,)14 b(W)m(ashington\ ,)h(1986.)-75 120 y([Gesc)o(hke)d(et)h(al.)h(77])20 b(Geschk)o(e,)e(C.,)g(Mor\ ris,)h(J.,)e(and)h(Satterth-)29 162 y(w)n(aite,)f(E.)23 b(Early)17 b(Exp)r (eriences)f(with)g(Mesa.)24 b fa(Communi-)29 203 y(c)m(ations)12 b(of)h(the)g (A)n(CM)p fc(,)h(20\(8\):540{553,)g(August)f(1977.)-75 288 y([Golub)h(et)f (al.)g(90])21 b(Golub,)30 b(D.,)f(Dean,)g(R.,)f(F)m(orin,)i(A.,)e(and)29 329 y (Rashid,)14 b(R.)h(Unix)e(as)f(an)h(Application)i(Program.)h(In)c fa(Pr)n(o-) 29 371 y(c)m(e)n(e)n(dings)k(of)i(the)f(Summer)h(1990)f(USENIX)f(Confer)m(enc) m(e)p fc(,)29 412 y(pages)e(87{95,)f(June)g(1990.)-75 496 y([Haskin)h(et)f (al.)g(88])21 b(Haskin,)i(R.,)f(Malac)q(hi,)h(Y.,)e(Sawdon,)i(W.,)29 538 y (and)13 b(Chan,)g(G.)k(Reco)o(v)o(ery)c(Managemen)q(t)f(in)i(QuickSilv)q(er.) 29 579 y fa(A)n(CM)20 b(T)m(r)o(ansaction)o(s)c(on)i(Computer)f(Systems)p fc (,)h(6\(1\):82{)29 621 y(108,)13 b(F)m(ebruary)h(1988.)-75 705 y([Ha)o(ynes)f (&)g(F)m(riedman)h(84])21 b(Ha)o(ynes,)34 b(C.)29 b(T.)f(and)i(F)m(riedman,) 29 747 y(D.)15 b(P)m(.)23 b(Engines)17 b(Build)g(Pro)r(cess)e(Abstractions.) 25 b(In)15 b fa(Con-)29 788 y(fer)m(enc)m(e)d(R)n(e)m(c)n(or)n(d)f(of)g(the)g (1984)f(A)n(CM)j(Symp)m(osium)d(on)h(LISP)29 830 y(and)17 b(F)m(unctional)f (Pr)n(o)n(gr)m(amming)p fc(,)j(pages)g(18{23,)h(August)29 871 y(1984.)-75 956 y([Hutc)o(hinson)15 b(et)d(al.)i(89])20 b(Hutchinson,)e(N.)d(C.,)h(P)o(eterso\ n,)i(L.)d(L.,)29 997 y(Abb)q(ott,)10 b(M.)e(B.,)h(and)h(O'Malley)o(,)f(S.)h (RPC)f(in)h(the)f fa(x)p fc(-Kernel:)29 1039 y(Ev)n(aluating)19 b(New)e(Desig\ n)h(T)m(ec)o(hniques.)30 b(In)17 b fa(Pr)o(o)m(c)n(e)n(e)m(dings)29 1080 y (of)f(the)g(12th)f(A)o(CM)i(Symp)m(osium)f(on)g(Op)n(er)n(ating)f(Systems)29 1122 y(Principles)p fc(,)10 b(pages)k(91{101,)f(Decemb)q(er)g(1989.)-75 1206 y ([Lampson)h(et)e(al.)i(74])21 b(Lampson,)16 b(B.)f(W.,)g(Mitchell,)i(J.)e(G.,) g(and)29 1247 y(Satterthw)n(aite,)f(E.)f(H.)19 b(On)13 b(the)h(T)m(ransfer)g (of)f(Con)o(trol)h(Be-)29 1289 y(t)o(w)n(een)g(Con)o(texts.)j(In)c fa(L)n(e)n (ctur)m(e)g(Notes)f(On)i(Computer)f(Sci-)29 1331 y(enc)m(e:)28 b(Pr)n(o)n(c)m (e)n(e)n(dings)17 b(of)i(the)f(Pr)o(o)m(gr)n(amming)h(Symp)m(osium)p fc(,)29 1372 y(pages)14 b(181{203.)f(Springer-V)o(erlag,)g(1974.)-75 1456 y([Le\017er) g(et)f(al.)i(89])21 b(Le\017er,)10 b(S.,)h(McKusick,)g(M.,)f(Karels,)h(M.,)g (and)29 1498 y(Quarterman,)25 b(J.)45 b fa(The)23 b(Design)d(and)i(Implementa\ tion)29 1539 y(of)d(the)f(4.3BSD)g(UNIX)g(Op)n(er)n(ating)g(System)p fc(.)34 b (Addison-)29 1581 y(W)m(esley)n(,)13 b(Reading,)h(MA,)f(1989.)-75 1665 y([Lev\ y)g(&)g(Ec)o(khouse)h(89])21 b(Levy)m(,)g(H.)e(M.)g(and)h(Eckhouse,)i(R.)d (H.)29 1707 y fa(Computer)10 b(Pr)o(o)m(gr)n(amming)h(and)f(A)n(r)o(chite)l (ctur)m(e:)16 b(The)11 b(V)l(AX-)29 1748 y(11)i(\(2nd)f(Edition\))p fc(.)i (Digital)i(Press,)d(Bedford,)g(MA,)g(1989.)-75 1832 y([Marsh)g(et)g(al.)g(91]) 21 b(Marsh,)f(B.,)e(Scott,)h(M.,)g(LeBlanc,)h(T.,)e(and)29 1874 y(Mark)n(atos\ ,)11 b(E.)i(First-Class)e(User-Lev)o(el)g(Threads.)j(In)c fa(Pr)n(o-)29 1915 y (c)m(e)n(e)n(dings)15 b(of)h(the)g(13th)f(A)o(CM)i(Symp)n(osium)e(on)h(Op)n (er)n(ating)29 1957 y(Systems)c(Principles)p fc(,)e(Octob)q(er)j(1991.)18 b (This)13 b(issue.)-75 2041 y([Milne)h(&)f(Strachey)g(76])21 b(Milne,)11 b(R.) e(and)g(Strachey)m(,)g(C.)h fa(A)f(The)n(ory)29 2083 y(of)j(Pr)o(o)m(gr)n(amm\ ing)g(L)o(anguage)e(Semantics)p fc(.)j(Halsted)g(Press,)29 2124 y(New)f(Y)m (ork,)h(1976.)-75 2208 y([Mullender)i(et)e(al.)g(90])21 b(Mullender,)28 b(S.) 23 b(J.,)h(v)n(an)g(Rossum,)i(G.,)29 2250 y(T)l(anenbaum,)35 b(A.)29 b(S.,)34 b(v)n(an)c(Renesse,)35 b(R.,)e(and)e(v)n(an)29 2292 y(Sta)o(v)o(eren,)25 b (H.)45 b(Amo)q(eba:)37 b(A)22 b(Distributed)j(Op)q(erating)29 2333 y(System) 20 b(for)g(the)f(1990s.)38 b fa(IEEE)20 b(Computer)f(Magazine)p fc(,)29 2375 y (23\(5\):44{54,)13 b(May)g(1990.)-75 2459 y([Rashid)h(&)f(Rob)r(ertson)g(81]) 21 b(Rashid,)30 b(R.)c(F.)f(and)h(Rob)r(ertson,)29 2500 y(G.)14 b(G.)20 b(Acc\ en)o(t:)f(A)14 b(Comm)o(unication)i(Oriented)f(Net)n(w)o(ork)29 2542 y(Op)q (erating)h(System)g(Kernel.)23 b(In)15 b fa(Pr)n(o)n(c)m(e)n(e)n(dings)e(of)i (the)g(8th)29 2583 y(A)n(CM)20 b(Symp)m(osium)d(on)h(Op)n(er)n(ating)e(System\ s)h(Principles)p fc(,)29 2625 y(pages)d(64{75,)f(Decemb)q(er)g(1981.)1013 -47 y([Rashid)h(86])21 b(Rashid,)13 b(R.)i(F)m(rom)d(RIG)g(to)f(Accent)g(to)h(Mac) o(h:)17 b(The)1116 -5 y(Evolution)h(of)e(a)g(Net)n(w)o(ork)g(Op)r(erating)h (System.)26 b(In)16 b fa(Pr)o(o-)1116 36 y(c)n(e)n(e)m(dings)g(of)i(the)f(A)n (CM/IEEE)h(Computer)f(So)m(ciety)g(1986)1116 78 y(F)m(al)r(l)k(Joint)f(Comput\ er)g(Confer)m(enc)m(e)p fc(.)g(A)o(CM,)g(No)o(v)o(emb)q(er)1116 119 y(1986.) 1013 194 y([Rashid)14 b(et)f(al.)g(87])21 b(Rashid,)k(R.,)f(T)l(ev)o(anian,)h (Jr.,)e(A.,)g(Y)l(oung,)1116 236 y(M.,)18 b(Golub,)i(D.,)e(Baron,)h(R.,)f(Bla\ ck,)g(D.,)g(Bolosky)o(,)g(W.,)1116 277 y(and)i(Chew,)f(J.)33 b(Mac)o(hine-Ind\ ep)t(endent)18 b(Virtual)i(Mem-)1116 319 y(ory)15 b(Management)f(for)g(P)o (aged)h(Unipro)r(cessor)g(and)f(Multi-)1116 360 y(pro)r(cessor)19 b(Arc)o(hit\ ectures.)34 b(In)19 b fa(Pr)n(o)m(c)n(e)n(e)m(dings)e(of)i(the)e(2nd)1116 402 y(Symp)n(osium)k(on)g(A)o(r)n(chite)m(ctur)m(al)g(Supp)m(ort)h(for)g(Pr)n(o)m (gr)n(am-)1116 443 y(ming)13 b(L)n(anguages)e(and)i(Op)n(er)n(ating)f(Systems) p fc(,)e(April)15 b(1987.)1013 518 y([Ritc)o(hie)f(&)f(Thompson)h(78])20 b (Ritchie,)j(D.)d(and)h(Thompson,)h(K.)1116 560 y(The)13 b(UNIX)f(Time-Sharing) k(System.)h fa(Bel)r(l)c(System)g(T)m(e)n(ch-)1116 601 y(nic)m(al)g(Journal)p fc(,)e(July)j(1978.)1013 676 y([Rose)f(&)f(Hac)o(ker)g(85])21 b(Rose,)16 b (K.)f(and)h(Hac)o(k)o(er,)g(B.)24 b fa(Inside)14 b(Mac-)1116 717 y(intosh)p fc (.)h(Addison-W)o(esley)n(,)d(Reading,)j(MA,)d(1985.)1013 792 y([Rozier)h(et)g (al.)g(88])21 b(Rozier,)14 b(M.,)e(Abrossimo)q(v,)h(V.,)e(Armand,)j(F.,)1116 834 y(Boule,)h(I.,)e(Giend,)h(M.,)f(Guillemon)r(t,)h(M.,)f(Herrmann,)h(F.,) 1116 875 y(Leonard,)19 b(P)m(.,)e(Langlois,)j(S.,)d(and)h(Neuhauser,)h(W.)29 b (The)1116 917 y(Chorus)20 b(Distributed)h(Op)q(erating)f(System.)35 b fa(Comp\ uting)1116 958 y(Systems)p fc(,)11 b(1\(4\),)i(1988.)1013 1033 y([Sat)o(y)o (anaray)o(anan)h(et)f(al.)g(85])21 b(Sat)o(y)o(anaray)o(anan,)29 b(M.,)f(Ho)o (w)o(ard,)1116 1075 y(J.,)11 b(Nic)o(hols,)i(D.,)e(Sideb)s(otham,)h(R.,)f(and) h(Sp)r(ector,)g(A.)i(The)1116 1116 y(ITC)e(Distributed)j(File)f(System:)j(Pri\ nciples)e(and)f(Design.)1116 1158 y(In)h fa(Pr)o(o)m(c)n(e)n(e)m(dings)f(of)h (the)g(10th)f(A)n(CM)j(Symp)m(osium)e(on)f(Op-)1116 1199 y(er)n(ating)j(Syste\ ms)g(Principles)p fc(,)f(pages)j(35{50,)h(Decemb)q(er)1116 1241 y(1985.)1013 1316 y([Sc)n(hro)r(eder)13 b(&)g(Burrows)f(90])21 b(Schro)q(eder,)c(M.)e(D.)g (and)i(Burro)o(ws,)1116 1357 y(M.)i(P)o(erformance)14 b(of)g(Fire\015y)g(RPC.) 19 b fa(A)o(CM)c(T)m(r)o(ansaction)o(s)1116 1399 y(on)e(Computer)g(Systems)p fc(,)e(8\(1\):1{17,)i(F)m(ebruary)h(1990.)1013 1474 y([Scott)e(et)h(al.)h(89]) 20 b(Scott,)d(M.)f(L.,)g(LeBlanc,)i(T.)e(J.,)g(and)g(Marsh,)1116 1515 y(B.)f (D.)24 b(Ev)o(olution)18 b(of)d(an)g(Op)q(erating)i(System)f(for)f(Large-) 1116 1557 y(Scale)d(Shared)g(Memory)f(Multipro)t(cessors.)i(T)m(ec)o(hnical)g (Re-)1116 1598 y(p)r(ort)19 b(309,)h(University)f(of)g(Ro)q(c)o(hester,)i(Sc) o(ho)r(ol)f(of)e(Com-)1116 1640 y(puter)c(Science,)g(Marc)o(h)f(1989.)1013 1715 y([Thac)n(ker)g(et)f(al.)i(88])20 b(Thack)o(er,)25 b(C.)d(P)m(.,)j(Stew) o(art,)g(L.)e(C.,)h(and)1116 1756 y(Satterthw)o(aite,)e(Jr.,)f(E.)f(H.)39 b (Fire\015y:)33 b(A)20 b(Multipro)s(ces-)1116 1798 y(sor)15 b(W)m(orkstation.) 22 b fa(IEEE)15 b(T)m(r)n(ansactions)d(on)h(Computers)p fc(,)1116 1839 y(37\(\ 8\):909{920,)h(August)g(1988.)1013 1914 y([W)l(and)g(80])21 b(W)m(and,)12 b (M.)g(Continuation-Based)g(Multipro)t(cessing.)1116 1956 y(In)k fa(Confer)m (enc)m(e)g(R)n(e)n(c)m(or)n(d)g(of)f(the)g(1980)g(LISP)h(Confer)m(enc)m(e)p fc (,)1116 1997 y(pages)e(19{28,)g(August)f(1980.)1013 2072 y([W)l(ard)h(&)e(Hal\ stead)j(80])20 b(W)n(ard,)11 b(S.)f(A.)g(and)h(Halstead,)h(Jr.,)e(R.)h(H.) 1116 2113 y(A)k(Syntactic)h(Theory)g(of)f(Message)h(P)o(assing.)25 b fa(Journ\ al)15 b(of)1116 2155 y(the)e(A)o(CM)p fc(,)g(27\(2\):365{383,)h(April)g(1980.) 1013 2230 y([Y)l(oung)g(et)e(al.)i(87])21 b(Y)l(oung,)13 b(M.,)e(T)m(ev)n(ani\ an,)j(Jr.,)d(A.,)g(Rashid,)i(R.,)1116 2271 y(Golub,)26 b(D.,)e(Eppinger,)i (J.,)e(Chew,)g(J.,)f(Bolosky)o(,)h(W.,)1116 2313 y(Black,)19 b(D.,)f(and)g (Baron,)h(R.)31 b(The)17 b(Dualit)q(y)h(of)f(Memory)1116 2354 y(and)12 b(Comm) o(unication)i(in)e(the)f(Implemen)q(tation)h(of)f(a)g(Mul-)1116 2396 y(tipro) s(cessor)k(Op)q(erating)h(System.)22 b(In)14 b fa(Pr)n(o)n(c)n(e)m(e)n(dings) g(of)g(the)1116 2438 y(11th)e(A)o(CM)i(Symp)m(osium)f(on)f(Op)n(er)n(ating)g (Systems)f(Princi-)1116 2479 y(ples)p fc(,)h(pages)h(63{76,)h(No)o(v)o(em)o (b)q(er)f(1987.)p eop eos %%Trailer end %%EOF