%!PS (but not EPSF because of memory limits) %%Creator: dvips by Radical Eye Software %%Pages: 14 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 TeXDict begin bos 300 @start /fa df[<60F0F0F0F0F0F0F0F0F0F0F0F0F0600000000060 F0F060>4 23 8 0 20]33 dc[<00C001C0030006000C001C0038003000700070006000E000E000 E000E000E000E000E000600070007000300038001C000C000600030001C000C0>10 29 6 3 20] 40 dc[<8000C0006000300018001C000E00060007000700030003800380038003800380038003 8003000700070006000E001C00180030006000C0008000>9 29 4 3 20]41 dc[<038003800380 638CF39EFFFE3FF80FE00FE03FF8FFFEF39E638C038003800380>15 16 2 -3 20]42 dc[<70F8 FCFC7C0C1830E0C0>6 10 7 5 20]44 dc[<70F8F8F870>5 5 7 0 20]46 dc[<0006000E000E 001C001C003800380070007000E000E001C001C0038003800380070007000E000E001C001C0038 00380070007000E000E000C000>15 29 2 3 20]47 dc[<70F8F8F87000000000000060F0F8F8 78183070E080>5 21 7 5 20]59 dc[17 9 1 -7 20]61 dc[<01C00003E00003E000036000036000077000077000077000 0770000630000E38000E38000E38000E38000E38001FFC001FFC001C1C001C1C003C1E00380E00 FE3F80FE3F80>17 23 1 0 20]65 dc[<03C60FFE1C3E181E381E700E700E600EE000E000E000 E000E000E000E000600E700E700E380C181C1C380FF003C0>15 23 2 0 20]67 dc[17 23 1 0 20]68 dc[17 23 1 0 20]69 dc[< FFFFFFFF380738073807380738003800387038703FF03FF0387038703800380038003800380038 003800FF00FF00>16 23 2 0 20]70 dc[13 23 3 0 20]73 dc[16 23 2 0 20]76 dc[19 23 0 0 20]77 dc[17 23 1 0 20]78 dc[<1FF07FFC783C701CE00EE00EE00EE00EE00EE00E E00EE00EE00EE00EE00EE00EE00EE00EE00E701C783C7FFC1FF0>15 23 2 0 20]79 dc[16 23 1 0 20]80 dc[18 23 1 0 20]82 dc[<0FCC1FFC307C603CE01CE01CE01CE00070007E003F E00FF001F8001C001E000E600EE00EE00EF01CF838FFF0C7E0>15 23 2 0 20]83 dc[<7FFF80 FFFF80E1C380E1C380E1C380E1C38001C00001C00001C00001C00001C00001C00001C00001C000 01C00001C00001C00001C00001C00001C00001C0000FF8000FF800>17 23 1 0 20]84 dc[19 23 0 0 20]85 dc[ 17 23 1 0 20] 87 dc[17 23 1 0 20]89 dc[11 29 7 3 20]91 dc[11 29 1 3 20]93 dc[15 3 2 4 20] 95 dc[<1FC0007FF000707800201800001C00001C0007FC001FFC003C1C00701C00E01C00E01C 00E01C00707C003FFF800F8F80>17 16 2 0 20]97 dc[18 23 0 0 20]98 dc[<03F80FFC1C1C380870006000E0 00E000E000E00060007000380E1C1E0FFC03F0>15 16 2 0 20]99 dc[<007E00007E00000E00 000E00000E00000E00000E0007CE000FFE001C3E00301E00700E00E00E00E00E00E00E00E00E00 E00E00E00E00700E00301E00383E001FEFC007CFC0>18 23 1 0 20]100 dc[<07E00FF01C3830 1C700CE00EE00EFFFEFFFEE00060007000380E1C1E0FFC03F0>15 16 2 0 20]101 dc[<007C00 FE01CE03840380038003807FFEFFFE038003800380038003800380038003800380038003800380 7FFC7FFC>15 23 1 0 20]102 dc[<07CF001FFF80383B80301800701C00701C00701C00301800 3838003FF00037C0007000007000003FF8001FFC003FFE00700F00E00380E00380E00380E00380 7007003C1E001FFC0007F000>17 25 1 9 20]103 dc[19 23 0 0 20]104 dc[<0300078007800300000000000000 00007F807F80038003800380038003800380038003800380038003800380FFFCFFFC>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]109 dc[19 16 0 0 20]110 dc[<07C01FF03C78701C701CE00E E00EE00EE00EE00EE00E701C783C3C781FF007C0>15 16 2 0 20]111 dc[18 24 0 8 20]112 dc[<03CE00 0FFE001C3E00301E00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E00301E001C3E00 0FEE0007CE00000E00000E00000E00000E00000E00000E00007FC0007FC0>18 24 1 8 20]113 dc[17 16 1 0 20]114 dc[<0FD83FF86038C038C038F0007F803FF007 F8001C6006E006F006F81CFFF8CFE0>15 16 2 0 20]115 dc[<030007000700070007007FFCFF FC07000700070007000700070007000700070E070E070E070C03FC00F0>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[17 24 1 8 20]121 dc dfe /fb df[<078018403040 60407F80C000C000C000402020C01F00>11 11 2 0 15]101 dc[<007000D800D0018001800180 0FF00180030003000300030003000300060006000600060004004C00C8007000>13 22 2 5 15] 102 dc[<03900C7018303030303060606060606020E031C01EC000C000C04180C3007E00>12 16 2 5 15]103 dc[<3C000C000C001800180018001BE0343038303030303060606060606460C4C0 C8C070>14 17 2 0 18]104 dc[<7818183030303060606060C0C0C8C8D070>5 17 2 0 10] 108 dc[<1C70278C2604260606060C0C0C0C0C0C0C181E3019C01800180030003000FC00>15 16 0 5 16]112 dc[<73C09C20986098001800300030003000300060006000>11 11 2 0 14]114 dc[<0F001080218020003E001F0001808080C00083007C00>9 11 3 0 15]115 dc[<38104830 8C309830183030603060306430E431E80E38>14 11 2 0 18]117 dc dfe /fc df[23 2 3 -8 30]0 dc[<00000020000000002000000000100000000008000000000400FFFF FFFF80FFFFFFFF8000000004000000000800000000100000000020000000002000>33 12 2 -3 38]33 dc dfe /fd df[10 2 0 -7 13]45 dc[<000C0000000C0000000C0000001E 0000001E0000003F000000270000002700000043800000438000004380000081C0000081C00000 81C0000100E0000100E00001FFE000020070000200700006007800040038000400380008001C00 08001C001C001E00FF00FFC0>26 26 1 0 29]65 dc[<003F0201C0C603002E0E001E1C000E1C 0006380006780002700002700002F00000F00000F00000F00000F00000F0000070000270000278 00023800041C00041C00080E000803003001C0C0003F00>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[30 26 2 0 35]77 dc[<007F000001C1C000070070000E00 38001C001C003C001E0038000E0078000F0070000700F0000780F0000780F0000780F0000780F0 000780F0000780F0000780F000078078000F0078000F0038000E003C001E001C001C000E003800 0700700001C1C000007F0000>25 26 2 0 30]79 dc[21 26 2 0 26]80 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[<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[<0FCE187330307038703870387038303018 602FC02000600070003FF03FFC1FFE600FC003C003C003C0036006381C07E0>16 24 1 8 19] 103 dc[18 26 1 0 21]104 dc[<18003C003C001800000000000000000000000000FC001C00 1C001C001C001C001C001C001C001C001C001C001C001C001C00FF80>9 26 0 0 10]105 dc[< FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C 001C001C001C001C001C00FF80>9 26 0 0 10]108 dc[29 16 1 0 32]109 dc[18 16 1 0 21]110 dc[<07E01C38300C700E6006E007E007E007E007E007E0076006700E381C1C3807E0>16 16 1 0 19]111 dc[18 23 1 7 21]112 dc[12 16 1 0 15]114 dc[<1F2060E04020C020C020F0007F003FC01FE000F080708030C030C0 20F0408F80>12 16 1 0 15]115 dc[<0400040004000C000C001C003C00FFC01C001C001C001C 001C001C001C001C001C201C201C201C201C200E400380>11 23 1 0 15]116 dc[18 16 1 0 21]117 dc[25 16 1 0 28]119 dc[17 23 1 7 20]121 dc dfe /fe df[<60F0F060>4 4 4 0 12]58 dc[<60F0F0701010 101020204080>4 12 4 8 12]59 dc[<0003F800000E0E000038038000E001C001C001C0038000 E0070000E00F0000F01E0000F01C0000F03C0000F03C0000F0780000F0780000F0780000F0F000 01E0F00001E0F00001E0F00003C0F00003C0F0000780F0000780F0000F0070000E0070001C0038 0038003C0070001C01C0000707800001FC0000>28 30 2 1 32]79 dc[<01FFFF00003C03C000 3800E0003800F00038007000380070007000F0007000F0007000F0007000E000E001E000E003C0 00E0078000E01E0001FFF00001C0000001C0000001C00000038000000380000003800000038000 00070000000700000007000000070000000F000000FFE00000>28 28 2 0 27]80 dc[<01E300 0717000C0F00180F00380E00300E00700E00700E00E01C00E01C00E01C00E01C00E03880E03880 E038806078803199001E0E00>17 18 2 0 22]97 dc[<01F0030C0E0C1C1E383C301870007000 E000E000E000E000E000E0046008601030601F80>15 18 2 0 18]99 dc[<0007E00000E00000 E00001C00001C00001C00001C000038000038000038000038001E7000717000C0F00180F00380E 00300E00700E00700E00E01C00E01C00E01C00E01C00E03880E03880E038806078803199001E0E 00>19 29 2 0 22]100 dc[<01F007080C0818043808300870307FC0E000E000E000E000E000E0 046008601030600F80>14 18 2 0 19]101 dc[<007180018B800307800607800E07000C07001C 07001C0700380E00380E00380E00380E00381C00381C00381C00183C0008F80007380000380000 3800007000607000F06000F0E000E180007E0000>17 26 1 8 20]103 dc[<0FC00001C00001C0 000380000380000380000380000700000700000700000700000E3E000EC3000F03800E03801E03 801C03801C03801C0380380700380700380700380E00700E20700E20701C20701C40E00C806007 00>19 29 2 0 24]104 dc[<01C003C003C001800000000000000000000000001C002700470047 00870087000E000E001C001C001C003800388038807080710032001C00>10 28 2 0 14]105 dc [<1F800380038007000700070007000E000E000E000E001C001C001C001C003800380038003800 7000700070007000E400E400E400E40064003800>9 29 2 0 12]108 dc[<381F81F04E20C618 4640E81C4680F01C8F00F01C8E00E01C0E00E01C0E00E01C1C01C0381C01C0381C01C0381C01C0 703803807138038071380380E1380380E27007006430030038>32 18 2 0 36]109 dc[<381F00 4E61804681C04701C08F01C08E01C00E01C00E01C01C03801C03801C03801C0700380710380710 380E10380E20700640300380>20 18 2 0 25]110 dc[<07078009C86008D03008E03011C03011 C03801C03801C0380380700380700380700380600700E00700C00701800783000E86000E78000E 00000E00001C00001C00001C00001C00003C0000FF8000>21 26 -1 8 21]112 dc[<383C4E42 4687470F8E1E8E0C0E000E001C001C001C001C00380038003800380070003000>16 18 2 0 19] 114 dc[<01F0060C04040C0E180C1C001F000FE00FF003F80038201C7018F018F010803060601F 80>15 18 2 0 19]115 dc[<00C001C001C001C00380038003800380FFF00700070007000E000E 000E000E001C001C001C001C00382038203840384018800F00>12 26 0 0 15]116 dc[<1C00C0 2701C04701C04701C08703808703800E03800E03801C07001C07001C07001C0700180E00180E00 180E001C1E000C3C0007DC00001C00001800603800F03000F06000E0C0004180003E0000>18 26 2 8 20]121 dc dfe /ff df[<0038006C007C004C00C000C000C007F800C00180018001800180 0180030003000300030003000300060006006600E400C8007000>14 26 1 6 16]102 dc[<3E00 06000C000C000C000C00180019E01E30183038303030303030306060606460C460C4C0C8C070> 14 20 2 0 19]104 dc[<7C0C181818183030303060606060C0D0D0D0D060>6 20 2 0 10]108 dc[<0700188019C0318038001E000F0003804180E180C10082007C00>10 13 2 0 16]115 dc[< 380C4C0C4C0C8C18981818181818303030323032307218B40F1C>15 13 1 0 20]117 dc dfe /fg df[25 2 3 -9 32]0 dc[<400020C000606000C03001801803000C06 00060C0003180001B00000E00000E00001B000031800060C000C06001803003001806000C0C000 60400020>19 20 6 0 32]2 dc[<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFF7FFE7FFE3F FC1FF80FF003C0>16 16 2 -2 21]15 dc[<000000040000000002000000000200000000010000 000000800000000040FFFFFFFFF8FFFFFFFFF80000000040000000008000000001000000000200 00000002000000000400>37 14 2 -3 42]33 dc dfe /fh df[<000400080030006000C00080 01800300060006000C000C001800180038003000300070007000600060006000E000E000E000E0 00E000E000E000E0006000600060006000200030003000180008000C0004000200>14 42 4 11 16]40 dc[<0100008000400060002000300010001800180018001C000C000C000C000C000C000C 000C000C001C001C001C0018001800380038003000300070006000E000C001C001800300030006 000C001800300060008000>14 42 0 11 16]41 dc[<7FF0FFE0>12 2 1 -8 14]45 dc[<7070 F060>4 4 4 0 12]46 dc[<00F800038E000606000C03000C0300180380380380380380300380 700380700380700380700380E00700E00700E00700E00700E00700E00600E00E00C00E00C00E00 C00C00C01C00C0180060300060600030C0001F0000>17 29 4 1 21]48 dc[<007E0001838002 01C00400E00400E00F00E00F00E01F00E01F00E00E00E00001E00001C000038000038000070000 0E00001C0000380000600000C0000180000300800600800801001001003FFF007FFE00FFFE00> 19 28 2 0 21]50 dc[<007C000187000203800403800F03C00F03C00F03C00E03800003800007 00000600000C0000380003F000001C00000E00000E00000F00000F00000F00700F00F80F00F80F 00F00E00E01E00801C004038003070000FC000>18 29 3 1 21]51 dc[<003E0000E100018080 0303800607800C07801C070018000038000030000071F000761800780C00E80E00F00600F00600 E00700E00700E00700E00E00C00E00C00E00C00E00C01C00E0180060380060300030C0000F8000 >17 29 4 1 21]54 dc[<1000003FFFC03FFFC03FFF8060010040020040040080080000080000 100000200000400000C0000080000180000180000300000700000700000F00000E00000E00001E 00001E00001E00003C00003C00003C0000180000>18 29 5 1 21]55 dc[<007C000183000201 800601800C00C00C00C00C00C01C01801C01801E03000F86000FCC0007F00003F80003FC000C7E 00183F00300F00600700600300C00300C00300C00300C00200C006006004006018003830000FC0 00>18 29 3 1 21]56 dc[<0007F010001C0C300070026000C001E0038000E0070000E00E0000 600E0000601C0000403C00004038000040780000007800000078000000F0000000F0000000F000 0000F0000000F0000000F0000080F0000100700001007000010038000200380004001C0004000C 001800060020000380C000007F0000>28 30 4 1 30]67 dc[<0FFF83FE00F800F800F000E000 F0008000F0010000F0020000F0040001E0080001E0100001E0400001E0800001E1C00001E3C000 03C5E00003C9E00003D1F00003E0F00003C0F00003C078000780780007803C0007803C0007801E 0007801E0007800F000F000F000F801F80FFF07FF0>31 28 2 0 32]75 dc[<0FF80007FC00F8 000FC000BC000F8000BC00178000BC00178000BC00278000BC002780011E004F00011E004F0001 1E008F00011E008F00011E010F00010F010F00020F021E00020F021E00020F041E00020F041E00 0207881E000207901E000407903C000407A03C000407A03C000407C03C000403C03C000403803C 000C038078001E03007C00FF8307FF80>38 28 2 0 38]77 dc[<0FFFFC0000F80F0000F00380 00F003C000F001C000F001C000F001C001E003C001E003C001E003C001E0038001E0070001E00E 0003C03C0003FFE00003C0000003C0000003C0000003C000000780000007800000078000000780 000007800000078000000F0000000F800000FFF00000>26 28 2 0 28]80 dc[<1FFFFFF03C07 C0F03007803020078020600780204007802040078020400F0020800F0020000F0000000F000000 0F0000000F0000001E0000001E0000001E0000001E0000001E0000001E0000003C0000003C0000 003C0000003C0000003C0000003C000000780000007C00001FFFE000>28 28 4 0 30]84 dc[< FFF87FE00F800F000F0006000F0004000F0004000F0004000F0004001E0008001E0008001E0008 001E0008001E0008001E0008003C0010003C0010003C0010003C0010003C0010003C0010007800 200078002000780020003800400038004000380080001C0100000C020000070C000001F00000> 27 29 6 1 31]85 dc[<07FF87FE00FE01F0007C01C0003C0180003E0100001E0200001E040000 1F0800000F1800000F90000007A0000007C0000003C0000003E0000003E0000003F0000004F000 0008F0000010F8000030780000207C0000403C0000803E0001001E0003001F0006000F001F001F 80FFC0FFF0>31 28 1 0 31]88 dc[<07F0001C18001E0C001C0E00180E00000E00000E0001FE 000F0E001C1C00301C00701C00E01C40E01C40E03C40E05C80709D803F0E00>18 18 3 0 21] 97 dc[<3F00000F00000E00000E00000E00000E00000E00000E00001C00001C00001C00001C78 001D86001E03003C03803801803801803801C03801C03801C07003807003807003807003007007 00700E00F00C00CC300083C000>18 29 4 0 23]98 dc[<01F8071C0C1E181C38183000700070 007000E000E000E000600060047008301018200FC0>15 18 3 0 18]99 dc[<0003F00000F000 00E00000E00000E00000E00000E00000E00001C00001C00001C000F1C0030DC00C03C01C038038 0380300380700380700380700380E00700E00700E00700600700600700700F00301E00186F0007 8FC0>20 29 3 0 23]100 dc[<01F8070C0C061C073803300370037FFF7000E000E000E0006000 6002300430081C3007C0>16 18 2 0 18]101 dc[<000F800039C00061C000E3C001C18001C000 01C00001C0000380000380000380003FF800038000038000070000070000070000070000070000 0700000E00000E00000E00000E00000E00000E00001C00001E0000FFC000>18 29 1 0 13]102 dc[<000038003CCC00C69C018308038380070380070380070380070380070700030600038C0004 F0000400000C00000C00000FFE0007FF800FFFC01801C02000C06000E0C000C0C000C060018020 0300180E0007F000>22 28 0 9 21]103 dc[<07E00001E00001C00001C00001C00001C00001C0 0001C000038000038000038000038F8003B0C003C0E00780E00780E00700E00700E00700E00700 E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF9FF0>20 29 1 0 23]104 dc[< 00C001C001C0018000000000000000000000000000001F80078003800700070007000700070007 000E000E000E000E000E000E001C001E00FF80>10 29 1 0 12]105 dc[<07E00001E00001C000 01C00001C00001C00001C00001C0000380000380000380000387F80381E0038180070200070400 07080007100007700007F8000F38000E3C000E1C000E1E000E0E000E0F001C07001C0F80FF9FE0 >21 29 1 0 22]107 dc[<07E001E001C001C001C001C001C001C0038003800380038003800380 0700070007000700070007000E000E000E000E000E000E001C001E00FF80>11 29 1 0 12]108 dc[<1F8FC0FC00079061060003E076070007807807000780780700070070070007007007000700 70070007007007000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E001C 01C01C001E01E01E00FF8FF8FF80>33 18 1 0 36]109 dc[<1F8F8007B0C003C0E00780E00780 E00700E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF9F F0>20 18 1 0 23]110 dc[<00FC000307000E01801C01C03800C03000C07000E07000E07000E0 E001C0E001C0E001C0600180600380700700380E001C180007E000>19 18 2 0 21]111 dc[<0F C78003D86001E03003C03803803803801803801C03801C03801C07003807003807003807007007 00700700E00F01C00EC3000E3C000E00000E00000E00001C00001C00001C00001C0000FF8000> 22 26 0 8 23]112 dc[<00F0400308C00E05C01C0380380380380380700380700380700380E0 0700E00700E00700600700700700700F00301E00186E00078E00000E00000E00000E00001C0000 1C00001C00001C0000FF80>18 26 3 8 22]113 dc[<1F9C07EE03CF078E078C07000700070007 000E000E000E000E000E000E001C001E00FFC0>16 18 1 0 16]114 dc[<03F20C0E1806100430 0438043E001FE00FF007F8003C401C400C400C6018E010D0608FC0>15 18 1 0 16]115 dc[<02 0002000200060006000C001C003C00FFE01C001C00380038003800380038003800700070407040 704070407080708031001E00>11 26 4 0 16]116 dc[ 17 18 4 0 23]117 dc[19 18 4 0 22]118 dc[27 18 4 0 30] 119 dc[<1FE3FC07C1E003818001C10001C20000E40000EC00007800007000003800007800009C 00011E00020E000407000C07003C0780FE1FF0>22 18 1 0 22]120 dc[<0FF0FE03C03801C030 01C02001C06001C04001E08000E08000E10000E10000E200007200007400007C00007800007000 003000002000002000004000004000708000F10000F10000E60000780000>23 26 0 8 22]121 dc dfe /fi df[8 2 3 -6 13]45 dc[<072008E018E0306030C060C060C060C0C180C1 88C1884388659038E0>13 14 4 0 18]97 dc[<3E000C000C000C000C00180018001800180037 00388030C030C060C060C060C060C0C180C180C100430066003800>10 23 4 0 16]98 dc[<03 C00C6018E030E030006000600060004000C0004020604021801E00>11 14 4 0 16]99 dc[<00 7C00180018001800180030003000300030076008E018E0306030C060C060C060C0C180C188C188 4388659038E0>14 23 4 0 18]100 dc[<07001880304060404080FF00C000C000C0008000C040 C08043003C00>10 14 5 0 16]101 dc[<001C0036002E006C00600060006000C000C007FC00C0 00C001C00180018001800180018003000300030003000300060006006600E400C8007000>15 29 -1 6 11]102 dc[<1F0006000600060006000C000C000C000C0019C01A601C2018303060306030 60306060C060C461846188C098C0E0>14 23 3 0 18]104 dc[<030706000000000000384C4C4C 8C181818303262622438>8 23 3 0 11]105 dc[<1F0006000600060006000C000C000C000C00 1870189819381A30340038003E0033006300631063106310C320C1C0>13 23 3 0 16]107 dc[< 3E0C0C0C0C181818183030303060606060C0D0D0D0D060>7 23 4 0 9]108 dc[<387044984708 460C8C180C180C180C18183018311861186230263038>16 14 3 0 20]110 dc[<1C702288230C 230C460C060C060C060C0C180C180C100C301A601B8018001800300030003000FC00>14 20 2 6 18]112 dc[<38F04518463846308C000C000C000C00180018001800180030003000>13 14 3 0 15]114 dc[<07800C4018E018E038001E001F8007C000C060C0E0C0C180C3003E00>11 14 3 0 15]115 dc[<030003000600060006000600FF800C000C000C0018001800180018003000310031 00310032001C00>9 20 3 0 12]116 dc[<1C0826184618461886300C300C300C301860186218 62186208E40738>15 14 3 0 19]117 dc[<0E3C1346218E218C430003000300030006000608C6 08E610CA2071C0>15 14 2 0 16]120 dc dfe /fj df[<0C003C00CC000C000C000C000C000C 000C000C000C000C000C000C000C00FF80>9 16 2 0 15]49 dc[<1F00618040C08060C0600060 006000C00180030006000C00102020207FC0FFC0>11 16 1 0 15]50 dc[<1F00218060C060C0 00C0008001800F00008000400060C060C060804060801F00>11 16 1 0 15]51 dc dfe /fk df [<4001C0036006300C18180C30066003C00180018003C006600C301818300C6006C0034001>16 18 5 1 27]2 dc dfe /fl df[<0C001C00EC000C000C000C000C000C000C000C000C000C000C 000C000C000C000C000C00FFC0>10 19 3 0 17]49 dc[<1F0060C06060F070F0306030007000 70006000C001C00180020004000810101020207FE0FFE0>12 19 2 0 17]50 dc[<0FC0307070 38703870380038003000E00FC0007000380018001C601CF01CF018E03860701FC0>14 19 1 0 17]51 dc dfe /fm df[<00200000700000700000700000B80000B80000B800011C00011C0001 1C00020E00020E0004070004070007FF000803800803800803801801C03803C0FE0FF8>21 21 1 0 25]97 dc dfe /fn df[<0FF0303C601EF01FF81FF81F701F003E003C007000E001C0018001 8003000300030003000300000000000000000007800FC00FC00FC00FC00780>16 29 3 0 23] 63 dc[<001FE02000FFF8E003F80FE007C003E00F8001E01F0000E03E0000E03E0000607E0000 607C000060FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0000007C00 00607E0000603E0000603E0000C01F0000C00F80018007C0030003F80E0000FFFC00001FE000> 27 28 3 0 34]67 dc[31 28 2 0 37]68 dc[<07F8201FFEE03C07E07801E07000E0F000E0F00060F000 60F80000FE0000FFE0007FFE003FFF003FFF800FFFC007FFE0007FE00003F00001F00000F0C000 F0C000F0C000E0E000E0F001C0FC03C0EFFF0083FC00>20 28 3 0 27]83 dc[46 28 1 0 49]87 dc[<0FF8001C1E003E0F803E07803E07C01C07C00007C000 7FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC03E13F80FE1F8>21 18 1 0 23] 97 dc[<03FC000E0E001C1F003C1F00781F00780E00F80000F80000F80000F80000F80000F800 007800007801803C01801C03000E0E0003F800>17 18 2 0 21]99 dc[<000FF0000FF00001F0 0001F00001F00001F00001F00001F00001F00001F00001F001F9F00F07F01C03F03C01F07801F0 7801F0F801F0F801F0F801F0F801F0F801F0F801F07801F07801F03C01F01C03F00F0FFE03F9FE >23 29 2 0 27]100 dc[<01FC000F07001C03803C01C07801C07801E0F801E0F801E0FFFFE0F8 0000F80000F800007800007C00603C00601E00C00F038001FC00>19 18 1 0 22]101 dc[<007F 0001E38003C7C00787C00F87C00F83800F80000F80000F80000F80000F8000FFF800FFF8000F80 000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80 007FF8007FF800>18 29 0 0 15]102 dc[24 29 1 0 27]104 dc[<1E 003F003F003F003F001E00000000000000000000000000FF00FF001F001F001F001F001F001F00 1F001F001F001F001F001F001F001F00FFE0FFE0>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[<01FC000F07801C 01C03C01E07800F07800F0F800F8F800F8F800F8F800F8F800F8F800F87800F07800F03C01E01E 03C00F078001FC00>21 18 1 0 24]111 dc[17 18 1 0 20]114 dc[<1FD830786018E018E018F000FF807FE07FF01FF807FC007CC01CC01CE01CE018F8 30CFC0>14 18 2 0 19]115 dc[<0300030003000300070007000F000F003FFCFFFC1F001F001F 001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F08079803F0>14 26 1 0 19]116 dc[24 18 1 0 27]117 dc dfe /fo df[ 14 4 1 -9 19]45 dc[<387CFEFEFE7C38>7 7 4 0 16]46 dc[<000018000038000038000070 0000700000E00000E00000E00001C00001C0000380000380000380000700000700000700000E00 000E00001C00001C00001C0000380000380000700000700000700000E00000E00001C00001C000 01C0000380000380000700000700000700000E00000E00000E00001C00001C0000380000380000 380000700000700000E00000E00000C00000>21 49 3 12 28]47 dc[<00180000780001F800FF F800FFF80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 F8007FFFE07FFFE0>19 32 4 0 28]49 dc[<03FC000FFF003C1FC07007E07C07F0FE03F0FE03 F8FE03F8FE01F87C01F83803F80003F80003F00003F00007E00007C0000F80001F00003E000038 0000700000E01801C0180380180700180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF0>21 32 3 0 28]50 dc[<00FE0007FFC00F07E01E03F03F03F03F81F83F81F83F81F81F03F81F03F0 0003F00003E00007C0001F8001FE0001FF000007C00001F00001F80000FC0000FC3C00FE7E00FE FF00FEFF00FEFF00FEFF00FC7E01FC7801F81E07F00FFFC001FE00>23 32 2 0 28]51 dc[<00 00E00001E00003E00003E00007E0000FE0001FE0001FE00037E00077E000E7E001C7E00187E003 07E00707E00E07E00C07E01807E03807E07007E0E007E0FFFFFEFFFFFE0007E00007E00007E000 07E00007E00007E00007E000FFFE00FFFE>23 32 2 0 28]52 dc[<1000201E01E01FFFC01FFF 801FFF001FFE001FF8001BC00018000018000018000018000019FC001FFF001E0FC01807E01803 E00003F00003F00003F80003F83803F87C03F8FE03F8FE03F8FC03F0FC03F07007E03007C01C1F 800FFF0003F800>21 32 3 0 28]53 dc[<000070000000007000000000F800000000F8000000 00F800000001FC00000001FC00000003FE00000003FE00000003FE00000006FF000000067F0000 000E7F8000000C3F8000000C3F800000183FC00000181FC00000381FE00000300FE00000300FE0 0000600FF000006007F00000E007F80000FFFFF80000FFFFF800018001FC00018001FC00038001 FE00030000FE00030000FE000600007F000600007F00FFE00FFFF8FFE00FFFF8>37 34 2 0 42] 65 dc[37 34 2 0 43]68 dc[19 34 1 0 21]73 dc[48 34 2 0 53]77 dc[<0007FC0000003FFF800000FC07E00003F001F80007E000FC000FC0007E001F80003F 001F80003F003F00001F803F00001F807F00001FC07E00000FC07E00000FC0FE00000FE0FE0000 0FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE07E00 000FC07F00001FC07F00001FC03F00001F803F80003F801F80003F000FC0007E0007E000FC0003 F001F80000FC07E000003FFF80000007FC0000>35 34 3 0 42]79 dc[<7FFFFFFF807FFFFFFF 807E03F80F807803F807807003F803806003F80180E003F801C0E003F801C0C003F800C0C003F8 00C0C003F800C0C003F800C00003F800000003F800000003F800000003F800000003F800000003 F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8000000 03F800000003F800000003F800000003F800000003F800000003F800000003F8000003FFFFF800 03FFFFF800>34 34 2 0 39]84 dc[<07FC001FFF803F07C03F03E03F01E03F01F01E01F00001 F00001F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF8 7F07E03F>24 22 2 0 27]97 dc[ 26 35 2 0 31]98 dc[<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000FC0000FC00 00FC0000FC0000FC0000FC00007C00007E00007E00003E00301F00600FC0E007FF8000FE00>20 22 2 0 25]99 dc[<0001FE000001FE0000003E0000003E0000003E0000003E0000003E000000 3E0000003E0000003E0000003E0000003E0000003E0001FC3E0007FFBE000F81FE001F007E003E 003E007E003E007C003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00 FC003E007C003E007C003E003E007E001E00FE000F83BE0007FF3FC001FC3FC0>26 35 2 0 31] 100 dc[<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC00 00FC0000FC00007C00007C00007E00003E00181F00300FC07003FFC000FF00>21 22 2 0 26] 101 dc[<003F8000FFC001E3E003C7E007C7E00F87E00F83C00F80000F80000F80000F80000F80 000F8000FFFC00FFFC000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80 000F80000F80000F80000F80000F80000F80000F80000F80007FF8007FF800>19 35 1 0 17] 102 dc[<03FC1E0FFF7F1F0F8F3E07CF3C03C07C03E07C03E07C03E07C03E07C03E03C03C03E07 C01F0F801FFF0013FC003000003000003800003FFF801FFFF00FFFF81FFFFC3800FC70003EF000 1EF0001EF0001EF0001E78003C7C007C3F01F80FFFE001FF00>24 33 2 11 28]103 dc[26 35 2 0 31]104 dc[<1C003F007F007F 007F003F001C000000000000000000000000000000FF00FF001F001F001F001F001F001F001F00 1F001F001F001F001F001F001F001F001F001F001F00FFE0FFE0>11 36 2 0 16]105 dc[11 35 2 0 16]108 dc [43 22 2 0 48]109 dc[26 22 2 0 31]110 dc[<00FE0007FFC00F83E01E00F03E00F87C007C7C007C7C007CFC007EFC007E FC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F81F01F00F83E007FFC000FE00>23 22 2 0 28]111 dc[26 32 2 10 31]112 dc[19 22 2 0 23]114 dc[<0FF3003FFF00781F00 600700E00300E00300F00300FC00007FE0007FF8003FFE000FFF0001FF00000F80C00780C00380 E00380E00380F00700FC0E00EFFC00C7F000>17 22 2 0 22]115 dc[<01800001800001800001 80000380000380000780000780000F80003F8000FFFF00FFFF000F80000F80000F80000F80000F 80000F80000F80000F80000F80000F80000F80000F81800F81800F81800F81800F81800F830007 C30003FE0000F800>17 32 1 0 22]116 dc[26 22 2 0 31]117 dc [27 22 1 0 30]118 dc[37 22 1 0 40]119 dc[27 32 1 10 30]121 dc dfe /fp df[<00FCF807839C0E079C1C07081C07001C07001C07001C0700 1C0700FFFFE01C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700 1C0700FF1FE0>22 23 0 0 21]11 dc[<00FC000782000E07001C07001C02001C00001C00001C 00001C0000FFFF001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C 07001C0700FF1FE0>19 23 0 0 20]12 dc[<00FF000707000E07001C07001C07001C07001C07 001C07001C0700FFFF001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07 001C07001C0700FFBFE0>19 23 0 0 20]13 dc[<00FC7E000703C1000E0783801C0703801C07 01001C0700001C0700001C0700001C070000FFFFFF801C0703801C0703801C0703801C0703801C 0703801C0703801C0703801C0703801C0703801C0703801C0703801C070380FF1FCFF0>28 23 0 0 29]14 dc[<60C0F1E0F1E070E0102010202040204040804080>11 10 1 -13 18]34 dc[<1C 00183200186180706161E0E09E60E080C0E08180E08180E08300E08300610600610C00320C001C 18380030640030C20060C200C1C100C1C10181C10181C10301C10601C10600C20C00C218006408 0038>24 27 2 2 29]37 dc[<60F0F070101020204040>4 10 3 -13 10]39 dc[<0102040C18 18303070606060E0E0E0E0E0E0E0E0E0E060606070303018180C040201>8 34 3 9 14]40 dc[< 8040203018180C0C0E060606070707070707070707070606060E0C0C181830204080>8 34 2 9 14]41 dc[<60F0F070101020204040>4 10 3 6 10]44 dc[9 2 0 -6 12]45 dc[< 60F0F060>4 4 3 0 10]46 dc[<0008001800300030003000600060006000C000C000C0018001 800180030003000600060006000C000C000C00180018001800300030003000600060006000C000 C000>13 33 2 8 18]47 dc[<07C018303018701C600C600CE00EE00EE00EE00EE00EE00EE00E E00EE00E600C600C701C30181C7007C0>15 21 1 0 18]48 dc[<03000700FF00070007000700 070007000700070007000700070007000700070007000700070007007FF0>12 21 2 0 18]49 dc[<0F8030E040708030C038E0384038003800700070006000C00180030006000C08080810183F F07FF0FFF0>13 21 2 0 18]50 dc[<0FE030306018701C701C001C00180038006007E0003000 18000C000E000EE00EE00EC00C401830300FE0>15 21 1 0 18]51 dc[<00300030007000F001 F001700270047008701870107020704070C070FFFE0070007000700070007003FE>15 21 1 0 18]52 dc[<20303FE03FC0240020002000200020002F8030E020700030003800384038E038E038 8030406020C01F00>13 21 2 0 18]53 dc[<01F00608080C181C301C70006000E000E3E0EC30 F018F00CE00EE00EE00E600E600E300C3018183007C0>15 21 1 0 18]54 dc[<40007FFE7FFC 7FF8C008801080200040008000800100010003000200060006000E000E000E000E000E000400> 15 22 2 0 18]55 dc[<07E018302018600C600C700C78183E101F600FC00FF018F8607C601EC0 0EC006C006C004600C38300FE0>15 21 1 0 18]56 dc[<07C0183030186018E00CE00CE00EE0 0EE00E601E301E186E0F8E000E000C001C70187018603020C01F80>15 21 1 0 18]57 dc[<00 1000003800003800003800005C00005C00005C00008E00008E00008E0001070001070003078002 038002038007FFC00401C00401C00800E00800E01800E03800F0FE03FE>23 23 1 0 26]65 dc[ 21 23 1 0 25] 66 dc[<00FC100383300E00B01C0070380030300030700010600010E00010E00000E00000E000 00E00000E00000E000106000107000103000203800201C00400E008003830000FC00>20 23 2 0 25]67 dc[23 23 1 0 27]68 dc[21 23 1 0 24]69 dc[20 23 1 0 23]70 dc[23 23 1 0 26]72 dc[11 23 1 0 13]73 dc[29 23 1 0 32]77 dc[23 23 1 0 26]78 dc[<00FC000303000E01C01C00E038007030003070003860 0018E0001CE0001CE0001CE0001CE0001CE0001CE0001C7000387000383000303800701C00E00E 01C003030000FC00>22 23 2 0 27]79 dc[20 23 1 0 24]80 dc[24 23 1 0 26]82 dc[<0FC4302C601C400CC004C004C004E000 70007F003FE00FF801FC001C000E0006800680068006C004E008D81087E0>15 23 2 0 20]83 dc[<7FFFF860381840380840380880380480380480380400380000380000380000380000380000 380000380000380000380000380000380000380000380000380000380007FFC0>22 23 1 0 25] 84 dc[23 23 1 0 26]85 dc[25 23 0 0 26]89 dc[<204020404080408081 008100E1C0F1E0F1E060C0>11 10 5 -13 18]92 dc[<1FC0386038301038003803F81E383038 7038E039E039E07970FF1F1E>16 14 1 0 18]97 dc[18 23 0 0 20]98 dc[<07F01838303870106000E000E000 E000E000600070083008183007C0>13 14 1 0 16]99 dc[<007E00000E00000E00000E00000E 00000E00000E00000E00000E0007CE001C3E00300E00700E00600E00E00E00E00E00E00E00E00E 00600E00700E00301E00182E0007CFC0>18 23 1 0 20]100 dc[<0FC0186030307038E018FFF8 E000E000E000600070083010183007C0>13 14 1 0 16]101 dc[<03E006700E701C201C001C00 1C001C001C00FF801C001C001C001C001C001C001C001C001C001C001C001C00FF80>12 23 0 0 11]102 dc[<0F9E18E33060707070707070306018C02F80200060003FE03FF83FFC600EC006C0 06C006600C38380FE0>16 21 1 7 18]103 dc[19 23 0 0 20]104 dc[<183C3C1800000000007C1C1C1C1C1C1C1C 1C1C1C1C1CFF>8 23 0 0 10]105 dc[<0300078007800300000000000000000000001F800380 038003800380038003800380038003800380038003800380038003804380E300E7007C00>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[<07C01830301860 0C600CE00EE00EE00EE00EE00E701C3018183007C0>15 14 1 0 18]111 dc[18 20 0 6 20]112 dc[13 14 0 0 14]114 dc[<1F4060C0C040C040E000FF007F80 1FC001E080608060C060E0C09F00>11 14 1 0 14]115 dc[<080008000800180018003800FF80 380038003800380038003800380038403840384038401C800F00>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 dfe /fq df[<0001FC3C00060E67000C0EC7001C0DC6001C01C0003801C00038038000380380003803 80003803800070038007FFFFF800700700007007000070070000E0070000E00E0000E00E0000E0 0E0000E00E0001C00E0001C01C0001C01C0001C01C0001C01C0003801C00038038000380380003 80380003003800070030000700700006006000C6606000E470C000C8618000703E0000>32 37 -1 8 25]11 dc[<0001FDC000070FC0000C0FC0001C0F80001C03800038038000380380003807 0000380700003807000070070007FFFE0000700E0000700E0000700E0000E01C0000E01C0000E0 1C0000E01C0000E0380001C0380001C0380001C0380001C0710001C07100038071000380720003 80320003801C0003800000030000000700000006000000C6000000E4000000CC00000070000000 >26 37 -1 8 24]13 dc[<183878380808101020404080>5 12 3 8 13]44 dc[10 3 3 -7 15]45 dc[<3078F060>5 4 4 0 13]46 dc[<000018000000180000003800000038 0000007800000078000000B8000001B800000138000002380000023C0000041C0000041C000008 1C0000181C0000101C0000201C0000201C00007FFC0000401C0000801C0001801C0001001C0002 001C0002001C0004000E000C000E001C001E00FF00FFC0>26 29 2 0 31]65 dc[<0003F02000 1E0C60003002E000E003C001C001C0038001C0070000C00E0000801E0000801C0000803C000080 3C000000780000007800000078000000F0000000F0000000F0000000F0000000F0000400F00004 00F0000400F0000800700008007000100038002000180040000C0180000706000001F80000>27 30 6 1 30]67 dc[<01FFFE00003C0780003801C0003801C0003800E0003800E0007000F00070 007000700070007000F000E000F000E000F000E000F000E000F001C001E001C001E001C001E001 C001C0038003C003800380038007800380070007000E0007001C0007003800070070000E01C000 FFFF0000>28 28 3 0 31]68 dc[<01FFFFC0003C01C0003800C0003800800038008000380080 0070008000700080007020800070200000E0400000E0400000E0C00000FFC00001C0800001C080 0001C0800001C08000038100000380000003800000038000000700000007000000070000000700 00000F000000FFF00000>26 28 3 0 27]70 dc[<01FE0007F8003E000780002E000F00002E00 1700002E001700002E002700004E002E00004E004E00004E004E00004E008E00008E011C00008E 011C00008E021C00008E021C000107043800010704380001070838000107103800020710700002 0720700002072070000207407000040740E000040780E000040700E0000C0700E0001C0601E000 FF861FFC00>37 28 3 0 37]77 dc[<01FFFC00003C070000380380003801C0003801C0003801 C0007003C0007003C0007003C00070038000E0078000E0070000E00E0000E0380001FFE00001C0 000001C0000001C000000380000003800000038000000380000007000000070000000700000007 0000000F000000FFE00000>26 28 3 0 28]80 dc[<000F8400304C00403C0080180100180300 1803001806001006001006000007000007000003E00003FC0001FF00007F800007C00001C00001 C00000C00000C02000C02000C0600180600180600300600200F00400CC180083E000>22 30 3 1 23]83 dc[<7FF0FF800F001C000E0018000E0010000E0010000E0010001C0020001C0020001C00 20001C0020003800400038004000380040003800400070008000700080007000800070008000E0 010000E0010000E0010000E0020000E0020000E0040000E0040000600800003030000010400000 0F800000>25 29 9 1 31]85 dc[36 29 9 1 41]87 dc[<03CC063C0C3C181C3838303870387038E070E070E070E070 E0E2C0E2C0E261E462643C38>15 18 5 0 21]97 dc[<3F00070007000E000E000E000E001C00 1C001C001C0039C03E60383038307038703870387038E070E070E070E060E0E0C0C0C1C0618063 003C00>13 29 5 0 19]98 dc[<01F007080C08181C3838300070007000E000E000E000E000E0 00E008E010602030C01F00>14 18 5 0 19]99 dc[<001F800003800003800007000007000007 00000700000E00000E00000E00000E0003DC00063C000C3C00181C003838003038007038007038 00E07000E07000E07000E07000E0E200C0E200C0E20061E4006264003C3800>17 29 5 0 21] 100 dc[<01E007100C1018083810701070607F80E000E000E000E000E000E0086010602030C01F 00>13 18 5 0 19]101 dc[<0003C0000670000C70001C60001C00001C00003800003800003800 00380000380003FF8000700000700000700000700000700000E00000E00000E00000E00000E000 01C00001C00001C00001C00001C000038000038000038000030000030000070000C60000E60000 CC0000780000>20 37 -1 8 13]102 dc[<00F3018F030F06070E0E0C0E1C0E1C0E381C381C38 1C381C383830383038187818F00F700070007000E000E0C0C0E1C0C3007E00>16 26 3 8 19] 103 dc[<0FC00001C00001C0000380000380000380000380000700000700000700000700000E78 000E8C000F0E000E0E001C0E001C0E001C0E001C0E00381C00381C00381C003838007038807038 80707080707100E03200601C00>17 29 3 0 21]104 dc[<018003800100000000000000000000 00000000001C002600470047008E008E000E001C001C001C003800380071007100710072007200 3C00>9 28 4 0 13]105 dc[<0FC00001C00001C0000380000380000380000380000700000700 000700000700000E0F000E11000E23800E43801C83001C80001D00001E00003F800039C00038E0 0038E00070E20070E20070E20070E400E06400603800>17 29 3 0 19]107 dc[<1F8003800380 07000700070007000E000E000E000E001C001C001C001C00380038003800380070007000700070 00E400E400E400E40068003800>9 29 4 0 11]108 dc[<3C1E0780266318C04683A0E04703C0 E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701C01C0701C01C070380380E0388380E 0388380E0708380E0710701C0320300C01C0>29 18 4 0 34]109 dc[<3C3C0026460046870047 07008E07008E07000E07000E07001C0E001C0E001C0E001C1C00381C40381C4038384038388070 1900300E00>18 18 4 0 23]110 dc[<01E007180C0C180C380C300E700E700EE01CE01CE01CE0 18E038E030E06060C031801E00>15 18 5 0 21]111 dc[<07870004D98008E0C008E0C011C0E0 11C0E001C0E001C0E00381C00381C00381C00381800703800703000707000706000E8C000E7000 0E00000E00001C00001C00001C00001C00003C0000FF8000>19 26 1 8 21]112 dc[<3C3C26C2 468747078E068E000E000E001C001C001C001C00380038003800380070003000>16 18 4 0 18] 114 dc[<01F006080C080C1C18181C001F001FC00FF007F0007800386030E030C030806060C01F 00>14 18 3 0 17]115 dc[<00C001C001C001C00380038003800380FFE00700070007000E000E 000E000E001C001C001C001C00384038403840388019000E00>11 26 3 0 14]116 dc[<1E0300 270700470700470700870E00870E000E0E000E0E001C1C001C1C001C1C001C1C00383880383880 1838801839001C5900078E00>17 18 4 0 22]117 dc[<1E06270E470E4706870287020E020E02 1C041C041C041C0818083808181018200C400780>15 18 4 0 19]118 dc[<1E01832703874703 874703838707018707010E07010E07011C0E021C0E021C0E021C0E04180C04181C04181C081C1C 100C263007C3C0>24 18 4 0 28]119 dc[<070E0019910010E38020E38041C30041C00001C000 01C000038000038000038000038000070200670200E70400CB04008B080070F000>17 18 3 0 19]120 dc[<1E03270747074707870E870E0E0E0E0E1C1C1C1C1C1C1C1C38383838183818381C 7007F00070007000E0E0C0E1C0818047003C00>16 26 4 8 20]121 dc dfe /fr df[17 6 1 -11 23]45 dc[<000E00001E00007E0007FE00FF FE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000 FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000 FE0000FE0000FE0000FE0000FE0000FE007FFFFE7FFFFE7FFFFE>23 39 5 0 34]49 dc[<00FF 800003FFF0000FFFFC001F03FE003800FF007C007F80FE003FC0FF003FC0FF003FE0FF001FE0FF 001FE07E001FE03C003FE000003FE000003FC000003FC000007F8000007F000000FE000000FC00 0001F8000003F0000003E00000078000000F0000001E0000003C00E0007000E000E000E001C001 C0038001C0070001C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFFFF80>27 39 3 0 34]50 dc[<007F800003FFF00007FFFC000F81FE001F00FF003F80FF003F807F803F80 7F803F807F801F807F800F007F800000FF000000FF000000FE000001FC000001F8000007F00000 FFC00000FFF0000001FC0000007E0000007F0000007F8000003FC000003FC000003FE000003FE0 3C003FE07E003FE0FF003FE0FF003FE0FF003FC0FF007FC07E007F807C007F003F01FE001FFFFC 0007FFF00000FF8000>27 39 3 0 34]51 dc[<00000E0000001E0000003E0000007E000000FE 000000FE000001FE000003FE0000077E00000E7E00000E7E00001C7E0000387E0000707E0000E0 7E0000E07E0001C07E0003807E0007007E000E007E000E007E001C007E0038007E0070007E00E0 007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000FE000000FE000000FE000000FE000000FE00 0000FE000000FE00007FFFF8007FFFF8007FFFF8>29 39 2 0 34]52 dc[<0000038000000000 07C00000000007C0000000000FE0000000000FE0000000000FE0000000001FF0000000001FF000 0000003FF8000000003FF8000000003FF80000000073FC0000000073FC00000000F3FE00000000 E1FE00000000E1FE00000001C0FF00000001C0FF00000003C0FF80000003807F80000007807FC0 000007003FC0000007003FC000000E003FE000000E001FE000001E001FF000001C000FF000001F FFFFF000003FFFFFF800003FFFFFF80000780007FC0000700003FC0000700003FC0000E00001FE 0000E00001FE0001E00001FF0001C00000FF0001C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE 001FFFFE>47 41 2 0 52]65 dc[22 41 2 0 26]73 dc[49 41 1 0 52]86 dc[<01FF800007FFF0000F81F8001FC07E001FC07E001F C03F000F803F8007003F8000003F8000003F8000003F80000FFF8000FFFF8007FC3F800FE03F80 3F803F803F003F807F003F80FE003F80FE003F80FE003F80FE003F807E007F807F00DF803F839F FC0FFF0FFC01FC03FC>30 27 2 0 33]97 dc[33 42 2 0 38]98 dc[<001FF80000FFFE0003F01F0007E03F800FC03F801F803F803F801F007F800E007F 0000007F000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000007F000000 7F0000007F8000003F8001C01F8001C00FC0038007E0070003F01E0000FFFC00001FE000>26 27 2 0 31]99 dc[<00003FF80000003FF80000003FF800000003F800000003F800000003F8000000 03F800000003F800000003F800000003F800000003F800000003F800000003F800000003F80000 0003F800001FE3F80000FFFBF80003F03FF80007E00FF8000FC007F8001F8003F8003F8003F800 7F0003F8007F0003F8007F0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F8 00FF0003F800FF0003F8007F0003F8007F0003F8007F0003F8003F8003F8001F8003F8000F8007 F80007C00FF80003F03BFF8000FFF3FF80003FC3FF80>33 42 2 0 38]100 dc[<003FE00001FF F80003F07E0007C01F000F801F801F800F803F800FC07F000FC07F0007C07F0007E0FF0007E0FF 0007E0FFFFFFE0FFFFFFE0FF000000FF000000FF0000007F0000007F0000007F0000003F8000E0 1F8000E00FC001C007E0038003F81F0000FFFE00001FF000>27 27 2 0 32]101 dc[<0007F000 3FFC00FE3E01F87F03F87F03F07F07F07F07F03E07F00007F00007F00007F00007F00007F00007 F000FFFFC0FFFFC0FFFFC007F00007F00007F00007F00007F00007F00007F00007F00007F00007 F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0007FFF807F FF807FFF80>24 42 2 0 21]102 dc[<00FF81F003FFE7F80FC1FE7C1F80FC7C1F007C383F007E 107F007F007F007F007F007F007F007F007F007F007F007F003F007E001F007C001F80FC000FC1 F8001FFFE00018FF800038000000380000003C0000003E0000003FFFF8001FFFFF001FFFFF800F FFFFC007FFFFE01FFFFFF03E0007F07C0001F8F80000F8F80000F8F80000F8F80000F87C0001F0 3C0001E01F0007C00FC01F8003FFFE00007FF000>30 40 2 13 34]103 dc[33 42 3 0 38]104 dc[<07000FC01FE03FE03FE03FE01FE00FC007000000 000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE>15 43 3 0 20]105 dc[15 42 3 0 20]108 dc[53 27 3 0 58]109 dc[33 27 3 0 38]110 dc[<003FE00001FFFC0003F07E000FC01F801F800FC03F800FE03F0007E0 7F0007F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007 F8FF0007F87F0007F07F0007F03F800FE03F800FE01F800FC00FC01F8007F07F0001FFFC00003F E000>29 27 2 0 34]111 dc[33 39 2 12 38]112 dc[24 27 2 0 28]114 dc[< 03FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FFE0007FFE007FFF803FFFE0 1FFFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F80038FC0070FF01E0F7FFC0 C1FF00>22 27 2 0 27]115 dc[<00700000700000700000700000F00000F00000F00001F00003 F00003F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007F00007F00007F00007 F00007F00007F00007F00007F00007F00007F03807F03807F03807F03807F03807F03803F03803 F87001F86000FFC0001F80>21 38 1 0 27]116 dc[33 27 3 0 38]117 dc[33 27 1 0 36]118 dc[33 27 1 0 36]120 dc[33 39 1 12 36] 121 dc dfe /fs df[<70F8F8F870>5 5 4 0 14]46 dc[29 34 2 0 35]66 dc[32 34 2 0 37]78 dc[47 35 1 1 50]87 dc[<0FE0001838003C0C 003C0E0018070000070000070000070000FF0007C7001E07003C0700780700700700F00708F007 08F00708F00F087817083C23900FC1E0>21 21 2 0 24]97 dc[<0E0000FE00001E00000E0000 0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E1F000E61C00E8060 0F00300E00380E003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E001C0E003C 0E00380F00700C80600C41C0083F00>23 35 1 0 27]98 dc[<0000E0000FE00001E00000E000 00E00000E00000E00000E00000E00000E00000E00000E00000E00000E001F8E00704E00C02E01C 01E03800E07800E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E038 00E01801E00C02E0070CF001F0FE>23 35 2 0 27]100 dc[<01FC000707000C03801C01C03801 C07801E07000E0F000E0FFFFE0F00000F00000F00000F00000F000007000007800203800201C00 400E008007030000FC00>19 21 1 0 22]101 dc[<0E0000FE00001E00000E00000E00000E0000 0E00000E00000E00000E00000E00000E00000E00000E00000E1F800E60C00E80E00F00700F0070 0E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0070 0E00700E0070FFE7FF>24 35 1 0 27]104 dc[<1C001E003E001E001C00000000000000000000 000000000000000E00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E00 0E000E000E000E00FFC0>10 34 1 0 14]105 dc[<0E00FE001E000E000E000E000E000E000E00 0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E 000E000E000E000E000E00FFE0>11 35 1 0 14]108 dc[<0E1F80FE60C01E80E00F00700F0070 0E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0070 0E00700E0070FFE7FF>24 21 1 0 27]110 dc[<01FC000707000C01801800C03800E070007070 0070F00078F00078F00078F00078F00078F00078F000787000707800F03800E01C01C00E038007 070001FC00>21 21 1 0 24]111 dc[<0E3CFE461E8F0F0F0F060F000E000E000E000E000E000E 000E000E000E000E000E000E000E000F00FFF0>16 21 1 0 19]114 dc[<0F8830786018C018C0 08C008E008F0007F803FE00FF001F8003C801C800C800CC00CC008E018D0308FC0>14 21 2 0 19]115 dc dfe /ft df[<000003FF80018000003FFFF003800001FFFFFC0F800007FF007F1F80 001FF8000FBF80003FE00003FF8000FF800000FF8001FF0000007F8003FE0000003F8007FC0000 003F8007FC0000001F800FF80000001F801FF80000000F801FF00000000F803FF000000007803F F000000007807FF000000007807FE000000007807FE000000000007FE00000000000FFE0000000 0000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE0 0000000000FFE00000000000FFE000000000007FE000000000007FE000000000007FE000000000 007FF000000003803FF000000003803FF000000003801FF000000003801FF800000007800FF800 0000070007FC000000070007FC0000000E0003FE0000001E0001FF0000003C0000FF8000007800 003FE00000F000001FF80003E0000007FF003F80000001FFFFFE000000003FFFF80000000003FF 800000>49 49 5 0 60]67 dc[26 49 2 0 31]73 dc[73 49 2 0 78]77 dc[57 49 2 0 62]86 dc[<007FF8000003 FFFF000007FFFFC0000FE01FE0001FF007F0001FF003F8001FF003FC001FF001FE000FE001FE00 07C001FE00010001FE00000001FE00000001FE000001FFFE00003FFFFE0001FFF1FE0007FE01FE 000FF001FE001FC001FE003F8001FE007F8001FE00FF0001FE00FF0001FE00FF0001FE00FF0001 FE00FF0003FE007F8003FE007FC00EFE003FF03CFF000FFFF87FF807FFF03FF800FF800FF8>37 32 2 0 40]97 dc[<0007FF00007FFFE000FFFFF003FC03F807F007FC0FE007FC1FE007FC3FC0 07FC3FC003F87FC001F07F8000407F800000FF800000FF800000FF800000FF800000FF800000FF 800000FF800000FF8000007F8000007FC000007FC000003FC0000E3FE0000E1FE0001C0FF0001C 07F8007803FF01F000FFFFE0007FFF800007FC00>31 32 3 0 37]99 dc[<00000007E0000003 FFE0000003FFE0000003FFE00000003FE00000001FE00000001FE00000001FE00000001FE00000 001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE000 00001FE0000FF81FE0007FFF1FE001FFFFDFE003FE03FFE007F800FFE00FE0003FE01FE0001FE0 3FC0001FE03FC0001FE07F80001FE07F80001FE07F80001FE0FF80001FE0FF80001FE0FF80001F E0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE07F80001FE07F80001FE07F8000 1FE03FC0001FE03FC0001FE01FC0003FE00FE0007FE007F001FFE003FC07DFF001FFFF9FFF007F FE1FFF000FF01FFF>40 50 3 0 46]100 dc[<0007FC0000003FFF800000FFFFE00003FC07F000 07F801F8000FE000FC001FE0007E003FC0007E003FC0003F007FC0003F007F80003F007F80003F 80FF80003F80FF80003F80FFFFFFFF80FFFFFFFF80FFFFFFFF80FF80000000FF80000000FF8000 00007F800000007F800000003FC00000003FC00003801FC00003801FE00007800FF0000F0007F8 001E0003FE00FC0000FFFFF800003FFFE0000003FF0000>33 32 2 0 38]101 dc[<0000FF0000 07FFC0001FFFE0003FC7F0007F0FF800FE0FF801FE0FF801FC0FF803FC07F003FC03E003FC01C0 03FC000003FC000003FC000003FC000003FC000003FC000003FC0000FFFFF800FFFFF800FFFFF8 0003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC 000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003 FC000003FC000003FC000003FC000003FC000003FC000003FC00007FFFF0007FFFF0007FFFF000 >29 50 2 0 25]102 dc[<001FF007E000FFFE3FF001FFFF7FF807F83FF1F80FE00FE1F80FE00F E0F01FC007F0601FC007F0003FC007F8003FC007F8003FC007F8003FC007F8003FC007F8001FC0 07F0001FC007F0000FE00FE0000FE00FE00007F83FC00007FFFF000006FFFE00000E1FF000000E 000000001E000000001E000000001F000000001F800000001FFFFFC0000FFFFFF8000FFFFFFE00 07FFFFFF0003FFFFFF8007FFFFFFC01FFFFFFFE03F00007FE07E00000FF0FC000007F0FC000003 F0FC000003F0FC000003F0FC000003F07E000007E03F00000FC01FC0003F800FF801FF0007FFFF FE0000FFFFF000001FFF8000>37 47 2 15 41]103 dc[<01F800000000FFF800000000FFF800 000000FFF8000000000FF80000000007F80000000007F80000000007F80000000007F800000000 07F80000000007F80000000007F80000000007F80000000007F80000000007F80000000007F800 00000007F80000000007F80000000007F807F8000007F83FFF000007F87FFF800007F8F03FC000 07F9C01FE00007FB000FE00007FE000FF00007FE000FF00007FC000FF00007FC000FF00007F800 0FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000 07F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F800 0FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000FFFFC1FFFF80 FFFFC1FFFF80FFFFC1FFFF80>41 50 3 0 46]104 dc[<03C0000FF0000FF0001FF8001FF8001F FC001FF8001FF8000FF0000FF00003C00000000000000000000000000000000000000000000000 000001F800FFF800FFF800FFF8000FF80007F80007F80007F80007F80007F80007F80007F80007 F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007 F80007F80007F80007F800FFFF80FFFF80FFFF80>17 51 3 0 23]105 dc[<01F800FFF800FFF8 00FFF8000FF80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8 0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8 0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8 0007F80007F80007F80007F80007F800FFFFC0FFFFC0FFFFC0>18 50 3 0 23]108 dc[<03F007 F8000FF000FFF03FFF007FFE00FFF07FFF80FFFF00FFF0F03FC1E07F800FF1C01FE3803FC007F3 000FE6001FC007F6000FFC001FE007FE000FFC001FE007FC000FF8001FE007FC000FF8001FE007 F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE0 07F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001F E007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF000 1FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE0FFFFC1FFFF 83FFFFFFFFC1FFFF83FFFFFFFFC1FFFF83FFFF>64 32 3 0 69]109 dc[<03F007F80000FFF03F FF0000FFF07FFF8000FFF0F03FC0000FF1C01FE00007F3000FE00007F6000FF00007FE000FF000 07FC000FF00007FC000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F800 0FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000 07F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F800 0FF00007F8000FF000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF80>41 32 3 0 46]110 dc[<00 07FE0000003FFFC00000FFFFF00003FC03FC0007F000FE000FE0007F001FC0003F803FC0003FC0 3FC0003FC07F80001FE07F80001FE07F80001FE0FF80001FF0FF80001FF0FF80001FF0FF80001F F0FF80001FF0FF80001FF0FF80001FF0FF80001FF07F80001FE07F80001FE07F80001FE03FC000 3FC03FC0003FC01FE0007F800FE0007F0007F801FE0003FE07FC0001FFFFF800003FFFC0000007 FE0000>36 32 2 0 41]111 dc[<03F03F00FFF07FC0FFF1FFE0FFF3C7F00FF38FF807F70FF807 F60FF807FE0FF807FC07F007FC03E007FC008007F8000007F8000007F8000007F8000007F80000 07F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800 0007F8000007F8000007F80000FFFFE000FFFFE000FFFFE000>29 32 2 0 34]114 dc[<00FF87 0007FFEF001FFFFF003F007F003C001F0078000F00F8000700F8000700F8000700FC000700FF00 0000FFF800007FFFC0003FFFF0003FFFFC000FFFFE0007FFFF0001FFFF80001FFF800000FFC000 001FC060000FC0E00007C0E00007C0F00007C0F8000780F8000F80FE000F00FF803E00FFFFFC00 F3FFF800C07FC000>26 32 3 0 33]115 dc[<0038000038000038000038000038000078000078 0000780000F80000F80001F80003F80007F8001FF800FFFFFEFFFFFEFFFFFE07F80007F80007F8 0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8 0007F80707F80707F80707F80707F80707F80707F80703F80E03FC0E01FE1C00FFF8007FF0000F E0>24 46 2 0 32]116 dc[<01F80003F000FFF801FFF000FFF801FFF000FFF801FFF0000FF800 1FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000 07F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F800 0FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000 07F8001FF00007F8001FF00003F8003FF00003F8006FF00001FE03CFF80000FFFF8FFF80007FFF 0FFF80000FFC0FFF80>41 32 3 0 46]117 dc[39 32 2 0 44]120 dc[39 46 2 14 44] 121 dc dfe /fu df[<04081030206040C0C0C0C0C0C0C0C040602030100804>6 22 3 6 11] 40 dc[<804020301018080C0C0C0C0C0C0C0C08181030204080>6 22 2 6 11]41 dc[<40E040> 3 3 3 0 8]46 dc[<18F818181818181818181818FF>8 13 3 0 14]49 dc[<3E00418080C0C0 C000C000C0018003000400084030407F80FF80>10 13 2 0 14]50 dc[<1E006100C080C0C0C0 C0C0C061C01EC000C00080618063003C00>10 13 2 0 14]57 dc[<0180018002C002C002C004 600460083008301FF810181018300CF83F>16 14 2 0 20]65 dc[14 14 2 0 18]70 dc[13 14 2 0 17]76 dc[<07F0001C1C003006006003 00400100C00180C00180C00180C001806003006003003006001C1C0007F000>17 14 2 0 21] 79 dc[15 14 2 0 19] 80 dc[<1FA0606080208020800070003F8003C00020001080108010C060BF80>12 14 2 0 16] 83 dc[16 14 2 0 20] 86 dc[<3C00620003001F006300C300C320C3203FC0>11 9 2 0 14]97 dc[12 14 2 0 16]98 dc[<1F0021804000C0 00C000C000400020801F00>9 9 2 0 13]99 dc[<03C000C000C000C000C01EC021C040C0C0C0 C0C0C0C040C021C01EF0>12 14 2 0 16]100 dc[<1E0061004180FF80C000C000400020801F00 >9 9 2 0 13]101 dc[<060B181818FE181818181818187E>8 14 1 0 9]102 dc[<1DE0222063 00630022003C0060003F003F8040C0C0C0C0C061803F00>11 14 2 5 14]103 dc[12 14 2 0 16]104 dc[<3070300000 00F030303030303030FC>6 15 1 0 8]105 dc[6 14 1 0 8]108 dc[20 9 2 0 24] 109 dc[12 9 2 0 16]110 dc[<1E0061804080 C0C0C0C0C0C0408061801E00>10 9 2 0 14]111 dc[12 13 2 4 16]112 dc[8 9 2 0 11]114 dc [<7C8484F03C0682C2BC>7 9 2 0 11]115 dc[<08081838FE181818181919190E>8 13 1 0 11 ]116 dc[12 9 2 0 16]117 dc[11 9 2 0 15]118 dc[16 9 2 0 20]119 dc[ 11 13 2 4 15]121 dc dfe /fv df[<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0 000E01C0000E01C0000E01C0000E01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01 C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E 01C0000E01C0000E01C0007F87FC00>26 29 0 0 24]11 dc[<007E0001C1800301800703C00E 03C00E01800E00000E00000E00000E00000E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E 01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07F87F8>21 29 0 0 23]12 dc[<007FC001C1C00303C00703C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 0E01C00E01C00E01C00E01C07FCFF8>21 29 0 0 23]13 dc[<003F07E00001C09C18000380F0 18000701F03C000E01E03C000E00E018000E00E000000E00E000000E00E000000E00E000000E00 E00000FFFFFFFC000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E 00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C00 0E00E01C000E00E01C007FC7FCFF80>33 29 0 0 35]14 dc[<6060F0F0F8F868680808080808 0810101010202040408080>13 12 1 -17 21]34 dc[<0F0000C0188000C03060038070380700 6027FB00E0100600E0100C00E0100C00E0101800E0101800E0103000E0106000602060007020C0 0030418000188180000F0303C00006062000060C10000C1C080018180800183804003038040060 38040060380400C0380400C03804018038040300180803001C0806000C100C000620040003C0> 30 33 2 2 35]37 dc[<00E0000001900000030800000308000007080000070800000708000007 0800000710000007100000072000000740000003C03FE003800F00038006000380040005C00400 09C0080010E0100030E010006070200060702000E0384000E03C4000E01C8000E00F0020E00700 20700780403009C0401830E18007C03E00>27 31 2 1 32]38 dc[<60F0F86808080810102040 80>5 12 4 -17 12]39 dc[<004000800100020006000C000C0018001800300030007000600060 006000E000E000E000E000E000E000E000E000E000E000E000E000600060006000700030003000 180018000C000C0006000200010000800040>10 42 3 11 16]40 dc[<80004000200010001800 0C000C000600060003000300038001800180018001C001C001C001C001C001C001C001C001C001 C001C001C0018001800180038003000300060006000C000C0018001000200040008000>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[<00010003000600060006000C000C000C0018001800 180030003000300060006000C000C000C0018001800180030003000300060006000C000C000C00 180018001800300030003000600060006000C000C000>16 41 2 10 21]47 dc[<03C00C301818 300C300C700E60066006E007E007E007E007E007E007E007E007E007E007E007E007E007600660 06700E300C300C18180C3007E0>16 29 2 1 21]48 dc[<030007003F00C70007000700070007 000700070007000700070007000700070007000700070007000700070007000700070007000F80 FFF8>13 28 4 0 21]49 dc[<07C01830201C400C400EF00FF80FF807F8077007000F000E000E 001C001C00380070006000C00180030006010C01180110023FFE7FFEFFFE>16 28 2 0 21]50 dc[<07E01830201C201C781E780E781E381E001C001C00180030006007E00030001C001C000E00 0F000F700FF80FF80FF80FF00E401C201C183007E0>16 29 2 1 21]51 dc[<000C00000C0000 1C00003C00003C00005C0000DC00009C00011C00031C00021C00041C000C1C00081C00101C0030 1C00201C00401C00C01C00FFFFC0001C00001C00001C00001C00001C00001C00001C0001FFC0> 18 28 1 0 21]52 dc[<300C3FF83FF03FC020002000200020002000200023E024302818301C20 0E000E000F000F000F600FF00FF00FF00F800E401E401C2038187007C0>16 29 2 1 21]53 dc[ <00F0030C06040C0E181E301E300C700070006000E3E0E430E818F00CF00EE006E007E007E007 E007E007600760077006300E300C18180C3003E0>16 29 2 1 21]54 dc[<4000007FFF807FFF 007FFF0040020080040080040080080000100000100000200000600000400000C00000C00001C0 000180000180000380000380000380000380000780000780000780000780000780000780000300 00>17 29 2 1 21]55 dc[<03E00C301008200C20066006600660067006780C3E083FB01FE007 F007F818FC307E601E600FC007C003C003C003C00360026004300C1C1007E0>16 29 2 1 21] 56 dc[<03C00C301818300C700C600EE006E006E007E007E007E007E0076007700F300F18170C 2707C700060006000E300C780C78187010203030C00F80>16 29 2 1 21]57 dc[<60F0F06000 00000000000000000060F0F060>4 18 4 0 12]58 dc[<60F0F0600000000000000000000060F0 F0701010101020204080>4 26 4 8 12]59 dc[<0FE03038401CE00EF00EF00EF00E000C001C00 30006000C000800180010001000100010001000100000000000000000000000300078007800300 >15 29 2 0 20]63 dc[<000600000006000000060000000F0000000F0000000F000000178000 00178000001780000023C0000023C0000023C0000041E0000041E0000041E0000080F0000080F0 000180F8000100780001FFF80003007C0002003C0002003C0006003E0004001E0004001E000C00 1F001E001F00FF80FFF0>28 29 1 0 31]65 dc[24 28 2 0 29]66 dc[<00 1F808000E0618001801980070007800E0003801C0003801C000180380001807800008078000080 70000080F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000700000 807800008078000080380000801C0001001C0001000E000200070004000180080000E03000001F C000>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[<001F808000E0618001801980070007800E0003801C0003801C 00018038000180780000807800008070000080F0000000F0000000F0000000F0000000F0000000 F0000000F000FFF0F0000F80700007807800078078000780380007801C0007801C0007800E0007 8007000B800180118000E06080001F8000>28 30 2 1 33]71 dc[26 28 2 0 31]72 dc[12 28 1 0 15]73 dc[<1FFF00F8007800780078007800780078 00780078007800780078007800780078007800780078007800787078F878F878F878F0F040E021 C01F00>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[26 28 2 0 31]78 dc[<00 3F800000E0E0000380380007001C000E000E001C0007003C00078038000380780003C0780003C0 700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0700001 C0780003C0780003C0380003803C0007801C0007000E000E0007001C000380380000E0E000003F 8000>27 30 2 1 32]79 dc[23 28 2 0 28]80 dc[28 29 2 1 31]82 dc[ <07E0801C1980300580700380600180E00180E00080E00080E00080F00000F800007C00007FC0 003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001C08001C08001C0C00180C001 80E00300D00200CC0C0083F800>18 30 2 1 23]83 dc[<7FFFFFC0700F01C0600F00C0400F00 40400F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F0000000F0000000F 0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000 0F0000000F0000000F0000001F800003FFFC00>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[<7FF0FFC00FC03E000780180003C0180003E0100001E0200001F06000 00F0400000788000007D8000003D0000001E0000001F0000000F0000000F8000000F80000013C0 000023E0000021E0000041F00000C0F8000080780001007C0003003C0002001E0006001F001F00 3F80FFC0FFF0>28 28 1 0 31]88 dc[30 28 0 0 31]89 dc[7 41 4 10 12]91 dc[<080810 10202040404040808080808080B0B0F8F878783030>13 12 6 -17 21]92 dc[7 41 0 10 12]93 dc[<1FC000307000783800781C00301C00001C00001C0001FC000F1C00381C00701C 00601C00E01C40E01C40E01C40603C40304E801F8700>18 18 2 0 21]97 dc[19 29 1 0 23]98 dc[<07E00C301878307870306000E000E000E000E000E000E00060 007004300418080C3007C0>14 18 2 0 18]99 dc[<003F000007000007000007000007000007 0000070000070000070000070000070003E7000C1700180F00300700700700600700E00700E007 00E00700E00700E00700E00700600700700700300700180F000C370007C7E0>19 29 2 0 23] 100 dc[<03E00C301818300C700E6006E006FFFEE000E000E000E00060007002300218040C1803 E0>15 18 1 0 18]101 dc[<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE00E000E 000E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE0>15 29 0 0 13] 102 dc[<00038003C4C00C38C01C3880181800381C00381C00381C00381C001818001C38000C30 0013C0001000003000001800001FF8001FFF001FFF803003806001C0C000C0C000C0C000C06001 803003001C0E0007F800>18 28 1 9 21]103 dc[20 29 1 0 23]104 dc[<18003C003C0018000000000000000000000000000000FC001C001C001C001C001C001C001C 001C001C001C001C001C001C001C001C001C00FF80>9 29 1 0 12]105 dc[<00C001E001E000 C000000000000000000000000000000FE000E000E000E000E000E000E000E000E000E000E000E0 00E000E000E000E000E000E000E000E000E060E0F0C0F1C061803E00>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[<03F0000E1C001806003003007003806001 80E001C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E1C0003F000>18 18 1 0 21]111 dc[19 26 1 8 23]112 dc[<03C1000C3300180B00300F00700700700700E0 0700E00700E00700E00700E00700E00700600700700700300F00180F000C370007C70000070000 0700000700000700000700000700000700003FE0>19 26 2 8 22]113 dc[13 18 1 0 16]114 dc[< 1F9030704030C010C010E010F8007F803FE00FF000F880388018C018C018E010D0608FC0>13 18 1 0 16]115 dc[<04000400040004000C000C001C003C00FFE01C001C001C001C001C001C001C 001C001C001C101C101C101C101C100C100E2003C0>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[<7F8FF00F03800F030007020003840001C80001D80000F00000700000 780000F800009C00010E00020E000607000403801E07C0FF0FF8>21 18 0 0 22]120 dc[19 26 1 8 22]121 dc[<7FFC70386038407040F040E041C003C0038007000F040E041C043C0C3808 70087038FFF8>14 18 1 0 18]122 dc dfe end TeXDict begin @letter %%EndProlog %%Page: 1 1 bop -33 -46 a fv(This)13 b(page)910 b(in)n(tentionally)12 b(left)i(blank.)p eop %%Page: 2 2 bop -75 -59 a fu(A)10 b(v)o(ersion)f(of)h(this)g(paper)f(will)h(appear)f(in) h(the)e(Fifth)i(Symp)n(osium)f(on)g(Arc)o(hitectural)h(Supp)o(ort)g(for)f(Pro\ gramming)f(Languages)h(and)f(Op)q(erating)i(Systems)e(\(ASPLOS)h(V\).)h(Octob) q(er)f(1992.)437 63 y ft(Consistency)25 b(Managemen)n(t)i(for)503 146 y(Virtu\ ally)g(Indexed)g(Cac)m(hes)582 252 y fs(Bob)16 b(Wheeler)f(and)i(Brian)f(N.)f (Bershad)710 333 y fv(Sc)o(ho)q(ol)e(of)h(Computer)f(Science)715 379 y(Carneg\ ie)h(Mellon)f(Univ)o(ersit)o(y)781 424 y(5000)g(F)l(orb)r(es)h(Av)o(enue)766 469 y(Pittsburgh,)g(P)m(A)g(15213)-75 635 y fr(Abstract)-75 746 y fv(A)f(virt\ ually)f(indexed)h(cache)g(can)h(impro)m(v)n(e)g(p)q(erformance)f(b)o(y)-75 791 y(allo)m(wing)f(cache)h(lookup)f(and)h(address)g(translation)f(to)g(o)q(ccur) -75 836 y(in)20 b(parallel,)g(th)o(us)g(reducing)h(pro)q(cessor)h(cycle)f(tim\ e.)35 b(Un-)-75 882 y(lik)n(e)12 b(ph)o(ysically)g(indexed)g(caches,)h(virtua\ lly)d(indexed)j(caches)-75 927 y(create)g(consistency)h(problems)d(b)q(ecause) i(a)f(ph)o(ysical)f(address)-75 972 y(ma)m(y)k(b)q(e)h(represen)q(ted)g(in)f (more)f(than)h(one)g(cache)g(line)g(when)-75 1018 y(it)d(has)g(b)q(een)h(acce\ ssed)i(through)d(more)f(than)h(one)h(virtual)e(ad-)-75 1063 y(dress.)30 b fq (Write-b)n(ack)17 b fv(virtually)f(indexed)i(caches)g(create)h(ad-)-75 1108 y (ditional)d(inconsistencies)k(b)q(ecause)f(memory)d(ma)m(y)i(b)q(ecome)-75 1154 y(stale)c(with)g(resp)r(ect)h(to)f(the)g(cache.)-33 1212 y(In)e(this)h (pap)q(er)g(w)o(e)g(examine)e(the)i(problem)e(of)h(consistency)-75 1258 y(man\ agemen)l(t)k(for)g(a)g(virtually)e(indexed)j(write-bac)o(k)f(cac)o(he.)-75 1303 y(W)l(e)g(assume)e(that)h(the)h(hardw)o(are)f(do)q(es)h(not)f(supp)r(ort) g(in)o(tra-)-75 1348 y(cache)9 b(consistency)o(.)16 b(W)l(e)10 b(presen)q(t)f (a)h(mo)o(del)g(and)f(soft)o(w)o(are)h(im-)-75 1394 y(plemen)n(tation)g(strat\ egy)i(for)f(main)l(taining)f(consistency)j(with)-75 1439 y(virtually)f(indexe\ d)j(cac)o(hes.)-33 1497 y(W)l(e)k(present)g(measuremen)n(ts)g(from)e(an)h(imp\ lemen)l(tation)-75 1543 y(of)g(this)g(mo)o(del)h(on)f(the)g(HP)h(9000)e(Serie\ s)i(700)f(in)g(the)g(con-)-75 1588 y(text)13 b(of)f(the)g(Mach)g(op)q(erating) g(system.)17 b(Our)c(measuremen)n(ts)-75 1633 y(sho)o(w)18 b(that)g(a)g(virtu\ ally)f(indexed)h(cache)g(can)g(b)r(e)g(managed)-75 1679 y(with)d(nearly)h(the) g(same)e(cost)i(as)g(that)f(required)i(to)e(manage)-75 1724 y(a)g(ph)o(ysical\ ly)e(indexed)j(one,)e(even)h(when)g(used)h(b)o(y)f(a)f(virtual)-75 1769 y(mem\ ory)d(system)j(that)g(encourages)h(and)f(exploits)g(sharing.)-75 1843 y 396 2 v -11 1916 a fp(This)j(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 1951 y(v)n(anced)7 b(Researc)o(h)g(Pro)q(jects)h (Agency)m(,)g(Information)e(Science)g(and)i(T)m(ec)o(h-)-75 1987 y(nology)g (O\016ce,)i(under)f(the)g(title)f(\\Researc)o(h)g(on)h(P)o(arallel)g(Computin\ g",)-75 2023 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 2059 y(MD)o(A972-90-C-0035,)13 b(b)o(y)h (the)g(Op)q(en)g(Soft)o(w)o(are)f(F)m(oundation)f(\(OSF\),)-75 2095 y(and)f (b)o(y)f(a)i(gran)o(t)e(from)g(the)h(Hewlett-P)o(ac)o(k)n(ard)e(Corp)q(oratio\ n.)j(Bershad)-75 2131 y(w)o(as)g(partially)d(supp)q(orted)g(b)o(y)i(a)h(Natio\ nal)e(Science)g(F)m(oundation)e(Pres-)-75 2167 y(iden)o(tial)h(Y)m(oung)i(In) o(v)o(estigator)d(Aw)o(ard.)-40 2203 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 2239 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 2274 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 2310 y(OSF,)g(HP)m(,)g(the)e(NSF,)i (or)f(the)g(U.S.)g(go)o(v)o(ernmen)o(t.)1013 635 y fr(1)69 b(In)n(tro)r(ducti\ on)1013 739 y fv(Virtually)24 b(indexed)j(cac)o(hes)g(are)g(b)q(ecoming)d(inc\ reasingly)1013 784 y(common)19 b(as)k(architects)g(try)h(to)e(reduce)j(pro)q (cessor)f(cycle)1013 829 y(times)c([Kohn)h(89,)g(Lee)h(89].)40 b(With)21 b (a)g(virtually)f(indexed)1013 875 y(cac)o(he,)h(the)f(virtual)f(address)i(of) d(a)i(data)f(item)f(selects)j(the)1013 920 y(cac)o(he)g(line)f(in)g(whic)n (h)h(the)g(item)e(should)h(reside.)39 b(In)20 b(con-)1013 965 y(trast,)c(with) f(a)g(ph)o(ysically)g(indexed)h(cac)o(he,)g(the)h(virtual)d(ad-)1013 1011 y (dress)22 b(m)m(ust)f(\014rst)h(b)q(e)f(translated)g(in)o(to)f(its)h(corresp) s(onding)1013 1056 y(ph)n(ysical)13 b(address,)h(and)f(that)g(address)h(is)f (used)h(to)f(select)h(the)1013 1101 y(cac)o(he)i(line.)24 b(Virtually)15 b (indexed)h(caches)g(o\013er)h(a)f(sp)q(eed)h(im-)1013 1147 y(pro)n(v)o(emen)o (t)10 b(o)o(v)n(er)h(ph)o(ysically)f(indexed)h(cac)o(hes,)h(since)f(a)f(cac)o (he)1013 1192 y(lookup)16 b(can)h(o)q(ccur)g(in)f(parallel)f(with)h(address)i (translation.)1013 1237 y(Comparable)13 b(p)r(erformance)i(is)h(p)q(ossible)g (with)f(a)h(ph)o(ysically)1013 1283 y(indexed)10 b(cache)h(only)f(b)o(y)g(t)o (ying)g(cac)o(he)h(size)g(and)g(asso)q(ciativit)n(y)1013 1328 y(to)k(page)g (size)i([Jouppi)e(88],)f(b)o(y)i(reducing)g(the)g(asso)q(ciativit)n(y)1013 1373 y(of)i(virtual)g(to)h(ph)o(ysical)g(mappings)e([Chiueh)i(&)h(Katz)f(92],) 1013 1419 y(or)13 b(b)o(y)h(in)n(tro)r(ducing)f(a)h(separate)h(pip)q(eline)f (stage)g(for)g(address)1013 1464 y(translation)f([DEC)g(Alpha)g(92].)1054 1519 y(Despite)i(their)g(lo)n(w-lev)o(el)f(p)r(erformance)g(adv)m(an)o(tages,)g (vir-)1013 1564 y(tually)j(indexed)i(caches)g(ha)o(v)n(e)h(generally)e(b)q (een)i(considered)1013 1609 y(less)15 b(desirable)g(for)g(op)q(erating)f(syst\ ems)h(that)g(supp)r(ort)g(arbi-)1013 1655 y(trary)j(memory)e(sharing)i(within) g(and)g(b)q(etw)n(een)i(programs.)1013 1700 y(Since)f(the)g(selection)h(of)e (a)h(cac)o(he)h(line)e(is)h(based)g(on)g(a)f(vir-)1013 1745 y(tual)9 b(addres\ s,)j(the)f(con)o(tents)f(of)g(a)g(ph)o(ysical)g(address)h(that)g(has)1013 1791 y(b)q(een)h(mapp)o(ed)g(at)f(more)f(than)h(one)g(virtual)f(address)i(ma)m(y)f (ap-)1013 1836 y(p)q(ear)h(in)g(more)g(than)g(one)h(line)e(in)h(the)h(cache)g (at)f(a)g(time.)k(This)1013 1881 y(creates)23 b(an)e(in)n(ternal)h(cac)o(he)g (consistency)h(problem.)39 b(The)1013 1927 y(problem)15 b(b)q(ecomes)i(more)e (acute)j(with)e(a)h fq(write-b)l(ack)g fv(virtu-)1013 1972 y(ally)e(indexed)j (cac)o(he)g(b)q(ecause)g(memory)d(can)i(b)q(ecome)g(stale)1013 2017 y(with)c (resp)r(ect)i(to)f(the)g(cache.)1054 2072 y(In)g(this)f(pap)q(er)i(w)o(e)f (describ)r(e)g(a)f(solution)g(to)h(the)g(problems)1013 2117 y(of)h(in)o(terna\ l)h(cache)h(consistency)h(for)e(mac)m(hines)h(with)f(virtu-)1013 2162 y(ally) f(indexed)h(write-back)g(cac)o(hes.)27 b(Our)17 b(solution)e(is)h(based)1013 2208 y(on)c(a)h(simple)f(mo)o(del)i(of)e(consistency)j(that)e(captures)i(the) e(b)r(e-)1013 2253 y(ha)n(vior)h(of)g(virtual)f(memory)-5 b(,)14 b(ph)o(ysica\ l)g(memory)-6 b(,)14 b(and)g(cac)o(he)1013 2298 y(memory)-6 b(.)16 b(The)11 b (model)f(de\014nes)i(the)f(consistency)h(of)e(virtually)1013 2344 y(indexed)k (cac)o(he)g(lines)g(in)f(terms)h(of)f(the)h(op)q(erations)g(that)g(are)1013 2389 y(p)q(erformed)h(on)h(memory)e(\(CPU-read,)j(CPU-write,)g(DMA-)1013 2434 y(read,)k(and)f(DMA-write\))g(and)g(the)h(cac)o(he)g(\(purge,)h(\015ush\).) 1013 2480 y(The)12 b(mo)o(del)g(lends)g(itself)f(to)g(a)g(straigh)o(tforw)o (ard)g(soft)o(w)o(are)h(so-)1013 2525 y(lution)h(that)h(relies)g(on)g(virtual) g(memory)d(hardw)o(are)k(to)f(den)o(y)1013 2570 y(access)h(to)f(p)q(oten)o (tially)f(inconsisten)o(t)h(data.)1054 2625 y(F)m(rom)21 b(the)i(standp)q(oin) n(t)g(of)e(p)r(erformance,)i(t)o(w)o(o)f(asp)r(ects)p eop %%Page: 3 3 bop -75 -46 a fv(of)21 b(the)i(consistency)h(mo)o(del)e(are)h(imp)o(ortan)o (t.)43 b(First,)24 b(the)-75 -1 y(model)19 b(dela)o(ys)g(cache)h(con)o(trol)f (op)q(erations)h(for)f(as)h(long)e(as)-75 44 y(p)q(ossible,)e(ensuring)g(cons\ istency)h(only)e(when)h(not)g(doing)e(so)-75 90 y(w)o(ould)j(cause)j(the)f (memory)c(system)j(\(the)h(cache)g(plus)f(pri-)-75 135 y(mary)e(memory\))g (to)h(transfer)i(a)e(stale)h(v)n(alue)g(to)f(either)i(the)-75 180 y(CPU)14 b (or)f(a)g(device.)19 b(In)13 b(con)o(trast,)h(man)m(y)f(previous)h(solutions) -75 226 y(ha)o(v)n(e)h(forced)f(the)h(memory)c(system)j(in)n(to)g(a)g(consist\ ent)g(state)-75 271 y(at)k(the)h(time)f(that)g(the)h(inconsistency)h(w)n(ould) e(b)r(e)g(created,)-75 316 y(rather)h(than)f(when)h(it)f(w)o(ould)g(b)q(e)g (detected.)34 b(Second,)19 b(our)-75 362 y(model)14 b(naturally)g(captures)i (the)g(e\013ect)g(of)f(di\013eren)o(t)g(virtual)-75 407 y(addresses)i(that)d (map)f(to)i(b)q(oth)f(the)h(same)f(ph)o(ysical)g(address)-75 452 y(and)d(to)f (the)h(same)f(line)g(within)g(the)i(virtually)d(indexed)i(cac)o(he.)-75 498 y (Suc)o(h)j fq(aligne)n(d)f fv(addresses)j(do)d(not)h(create)h(consistency)g (prob-)-75 543 y(lems)10 b(and)h(therefore)i(do)e(not)g(require)h(an)o(y)f (consistency)h(man-)-75 588 y(agemen)n(t.)-75 726 y fo(1.1)56 b(Motiv)l(ation) 18 b(and)h(goals)-75 807 y fv(W)l(e)25 b(ha)o(v)o(e)g(implemen)l(ted)g(the)h (mac)m(hine-dep)r(endent)f(la)n(y)o(er)-75 852 y(of)20 b(the)h(virtual)f(memo\ ry)e(system)i([Rashid)g(et)h(al.)37 b(87])20 b(in)-75 898 y(Mac)o(h)j(3.0)e ([Accetta)j(et)f(al.)44 b(86])22 b(for)g(the)h(HP)g(9000)f(Se-)-75 943 y(ries) h(700)f([Lee)h(89].)44 b(The)23 b(HP)g(9000)f(Series)i(700)e(uses)i(a)-75 988 y(high-performance)11 b(RISC-based)g(microprocessor)h(\(HP)g(P)m(A-)-75 1034 y (RISC\))j(with)g(separate)i(instruction)f(and)f(data)h(cac)o(hes)g(that)-75 1079 y(are)k(direct)h(mapped,)g(virtually)d(indexed,)k(and)e(ph)o(ysically) -75 1124 y(tagged.)d(The)10 b(data)g(cac)o(he)g(is)g(write-bac)o(k.)17 b(Ther\ e)11 b(is)f(no)g(hard-)-75 1170 y(w)o(are)17 b(supp)q(ort)g(for)f(consistency) i(when)f(a)f(ph)o(ysical)g(address)-75 1215 y(is)c(represen)q(ted)g(at)g(more) e(than)i(one)g(cache)g(line.)17 b(I/O)11 b(devices)-75 1260 y(that)18 b(rely) f(on)g(DMA)h(do)f(not)g(sno)r(op)g(the)h(cac)o(he.)30 b(A)17 b(trans-)-75 1305 y(lation)h(lo)q(ok)m(aside)i(bu\013er)h(\(TLB\))f(translates)h(virtual)d(page) -75 1351 y(frames)12 b(in)o(to)h(ph)n(ysical)g(page)g(frames)f(in)h(parallel) f(with)g(cache)-75 1396 y(lookup.)27 b(A)o(t)16 b(the)i(end)f(of)f(the)h(cach\ e)g(lookup,)g(the)g(ph)o(ysical)-75 1441 y(frame)g(n)o(um)m(b)q(er)i(is)f(com\ pared)g(to)g(the)h(cac)o(he)g(tag.)30 b(If)18 b(they)-75 1487 y(matc)n(h,)13 b (the)h(cac)o(he)g(access)h(hits.)j(Otherwise)d(the)f(data)f(is)g(re-)-75 1532 y(triev)o(ed)18 b(from)e(memory)f(and)i(stored)h(in)f(the)h(cache.)29 b(If)17 b(the)-75 1577 y(previous)e(data)g(in)f(the)h(cache)g(line)g(is)f(dirt)o(y)m (,)g(it)g(is)h(\014rst)h(writ-)-75 1623 y(ten)21 b(bac)o(k)e(to)h(memory)e (b)q(efore)i(b)r(eing)f(replaced.)37 b(F)m(or)20 b(the)-75 1668 y(purp)r(oses) 15 b(of)f(cache)h(managemen)l(t,)g(the)g(cache)g(exp)r(orts)g(t)o(w)o(o)-75 1713 y(op)q(erations)d(to)g(the)h(pro)q(cessor.)20 b(These)13 b(are)g fq(\015\ ush)h(virtual)e(ad-)-75 1759 y(dr)n(ess)f fv(and)h fq(pur)n(ge)g(virtual)g (addr)n(ess)p fv(.)18 b(Both)12 b(remo)n(v)n(e)g(the)g(cache)-75 1804 y(line) 18 b(con)o(taining)f(the)i(sp)q(eci\014ed)g(virtual)f(address)h(from)e(the) -75 1849 y(cache.)h(The)13 b(\015ush)g(will)e(write)i(the)g(line)f(bac)o(k)h (to)f(main)f(mem-)-75 1895 y(ory)j(if)f(it)g(is)h(dirt)o(y)l(.)-33 1945 y(As) j(w)o(e)g(examined)f(the)h(consistency)i(problem)c(for)i(virtu-)-75 1990 y (ally)d(indexed)i(cac)o(hes,)g(w)o(e)g(b)q(egan)f(to)g(appreciate)h(the)g(man) n(y)-75 2036 y(di\013erent)i(kinds)f(of)h(inconsistencies)h(that)f(can)g(o)q (ccur.)31 b(F)l(or)-75 2081 y(example,)19 b(a)g(cac)o(he)h(line)f(can)h(b)q (ecome)f(stale)g(with)g(resp)r(ect)-75 2126 y(to)f(other)h(cache)f(lines)h (or)f(memory)e(due)j(to)f(writes)h(b)o(y)f(the)-75 2172 y(CPU)h(or)g(a)g(DMA) f(device,)j(or)d(primary)g(memory)e(can)j(b)q(e-)-75 2217 y(come)12 b(stale)h (with)f(resp)r(ect)i(to)f(the)g(cac)o(he)h(due)f(to)f(the)i(cac)o(he's)-75 2262 y(write-bac)o(k)k(p)q(olicy)l(.)29 b(When)18 b(w)o(e)g(considered)h(stra\ tegies)g(for)-75 2308 y(resolving)c(the)i(inconsistencies,)g(w)o(e)f(frequent\ ly)g(disco)o(v)n(ered)-75 2353 y(inconsistencies)f(that)g(could)e(b)q(e)i(ign\ ored,)e(or)h(that)g(could)g(b)q(e)-75 2398 y(handled)f(lazily)l(.)k(F)m(or)c (example,)f(when)i(zeroing)g(data)f(kno)n(wn)-75 2444 y(to)e(b)q(e)h(stale)f (in)g(the)h(cac)o(he,)g(there)g(is)f(no)g(reason)h(to)f(\014rst)h(purge)-75 2489 y(the)j(data)e(as)i(it)e(will)g(b)q(e)i(en)o(tirely)f(o)o(v)n(erwritten) i(b)q(efore)e(b)r(eing)-75 2534 y(read.)30 b(On)18 b(the)g(other)h(hand,)f (when)g(the)g(CPU)g(reads)h(data)-75 2580 y(pro)o(vided)11 b(b)o(y)g(a)g(DMA) g(device,)h(previously)g(stale)f(data)g(in)g(the)-75 2625 y(cache)k(m)n(ust)g (\014rst)h(b)r(e)f(purged)h(to)f(ensure)i(that)e(the)h(device's)1013 -46 y (new)d(data)g(is)g(not)g(improperly)g(shado)o(w)o(ed.)18 b(Concerned)d(that) 1013 -1 y(w)n(e)g(migh)m(t)f(b)q(e)g(taking)g(an)g fq(ad)h(ho)n(c)f fv(approa\ c)o(h)h(to)e(consistency)1013 44 y(whic)n(h)h(w)o(ould)f(result)i(in)e(a)h (less-than-optimal)d(implemen)l(ta-)1013 90 y(tion,)g(w)o(e)i(sough)o(t)g(\ \014rst)g(to)g(de\014ne)g(a)g(consistency)h(mo)o(del)f(that)1013 135 y(w)n (ould)k(enable)h(us)f(to)h(manage)d(a)i(virtually)f(indexed)i(cac)o(he)1013 180 y(correctly)d(and)e(e\016ciently)l(.)1054 233 y(Our)h(consistency)h(mo)o (del)e(is)h(therefore)g(in)o(tended)g(to)f(meet)1013 278 y(t)n(w)o(o)k(goals.) 24 b(First,)18 b(w)n(e)f(w)o(an)o(t)f(to)h(mak)m(e)g(it)f(easier)h(to)f(reaso\ n)1013 324 y(about)c(the)g(cac)o(he)g(con)o(trol)f(and)g(virtual)g(memory)e (op)q(erations)1013 369 y(that)k(are)h(required)g(to)g(ensure)h(consistency)n (.)j(This)13 b(allo)n(ws)h(us)1013 414 y(to)d(ev)n(aluate)g(an)g(implemen)l (tation)g(strategy)h(in)f(terms)g(of)g(cor-)1013 460 y(rectness)18 b(\(do)q (es)g(it)e(ensure)h(consistency?\),)h(necessit)q(y)e(\(do)q(es)1013 505 y(it) e(pro)o(vide)h(more)f(consistency)j(than)e(is)g(actually)f(needed?\),)1013 550 y(and)i(e\016ciency)i(\(can)f(certain)g(op)q(erations)g(b)q(e)g(com)n(bined)f (in)1013 596 y(order)10 b(to)f(ac)o(hiev)o(e)h(the)g(same)e(lev)o(el)h(of)g (consistency)i(with)e(lo)n(w)o(er)1013 641 y(cost?\).)28 b(Our)18 b(mo)o(del) f(p)r(ermits)f(inconsistencies)j(within)d(the)1013 686 y(memory)d(system)j (as)g(long)f(as)i(those)f(inconsistencies)i(nev)o(er)1013 732 y(result)f(in)f (stale)g(data)g(b)r(eing)g(returned)i(to)e(either)i(the)f(CPU)1013 777 y(or)c (a)f(device.)19 b(Moreo)o(v)o(er,)13 b(our)h(mo)o(del)f(encourages)i(the)e (op)q(er-)1013 822 y(ating)h(system)g(to)h(select)i(virtual)d(addresses)j(tha\ t)e(naturally)1013 868 y(align)h(within)h(the)h(cache)g(so)g(that)f(consisten\ cy)j(op)q(erations)1013 913 y(can)e(b)r(e)h(a)n(v)o(oided.)32 b(The)19 b(use) h(of)e(these)i(techniques)f(has)f(re-)1013 958 y(sulted)d(in)g(application)e (p)q(erformance)i(impro)m(v)o(emen)n(ts)h(of)e(up)1013 1004 y(to)f(10%.)1054 1056 y(Our)j(second)h(goal)d(is)i(to)f(b)r(etter)i(understand)g(the)f(virtual) 1013 1102 y(cac)o(he)23 b(managemen)l(t)g(strategies)h(that)e(ha)o(v)n(e)h (b)r(een)g(imple-)1013 1147 y(men)m(ted)f(in)e(other)h(systems.)38 b(When)20 b (w)o(e)h(\014rst)g(b)q(egan)g(our)1013 1192 y(w)n(ork,)13 b(w)o(e)g(surv)o (eyed)g(the)g(literature)h(to)f(understand)h(the)f(ap-)1013 1238 y(proac)o (hes)k(tak)o(en)g(b)o(y)g(others)g([Cheng)g(87,)f(Chao)g(et)h(al.)26 b(90].) 1013 1283 y(W)l(e)17 b(found)f(it)h(di\016cult)f(to)h(describ)r(e)g(succinctl\ y)h(the)g(di\013er-)1013 1328 y(ences)k(b)q(et)o(w)o(een)g(the)f(systems)g (b)q(ecause)h(w)o(e)f(had)f(no)g(com-)1013 1373 y(mon)c(reference)21 b(p)q (oin)n(t.)31 b(Our)19 b(mo)o(del)f(pro)o(vides)h(that)f(refer-)1013 1419 y (ence)g(p)r(oin)n(t,)g(and)f(allo)n(ws)h(us)g(to)f(compare)g(our)g(solution)g (to)1013 1464 y(previous)d(ones.)1013 1613 y fo(1.2)55 b(The)19 b(rest)f(of)g (this)h(pap)r(er)1013 1699 y fv(In)g(Section)g(2)g(w)o(e)g(describ)s(e)g(the) h(consistency)h(and)e(p)q(erfor-)1013 1744 y(mance)10 b(issues)j(that)e(arise) h(in)f(the)h(use)g(of)e(a)i(virtually)d(indexed)1013 1790 y(cac)o(he.)18 b (In)c(Section)g(3)f(w)o(e)h(present)g(a)f(consistency)i(model)e(for)1013 1835 y(suc)o(h)j(cac)o(hes.)23 b(In)16 b(Section)f(4)g(w)o(e)h(describ)r(e)g(an)f (implemen)l(ta-)1013 1880 y(tion)10 b(of)g(the)i(model)f(that)g(relies)g(on)g (the)h(virtual)e(memory)f(sys-)1013 1926 y(tem.)21 b(W)l(e)15 b(also)g(descri\ b)r(e)h(c)o(hanges)g(to)f(the)h(Mac)o(h)f(op)q(erating)1013 1971 y(system)j (that)i(eliminate)d(unnecessary)k(cache)e(inconsisten-)1013 2016 y(cies.)i (In)14 b(Section)i(5)e(w)o(e)h(present)g(measuremen)n(ts)g(that)g(sho)o(w) 1013 2062 y(the)i(relativ)o(e)g(impact)f(of)h(our)g(mo)o(del)g(and)g(implemen) m(tation)1013 2107 y(strategy)m(.)g(In)c(Section)g(6)f(w)o(e)h(discuss)h(rela\ ted)f(w)o(ork.)18 b(Finally)-6 b(,)1013 2152 y(in)13 b(Section)h(7)g(w)o(e)g (present)g(our)g(conclusions.)1013 2321 y fr(2)69 b(Virtually)28 b(indexed)i (cac)n(he)g(con-)1116 2389 y(sistency)1013 2489 y fv(In)11 b(this)i(section)f (w)o(e)g(discuss)i(sev)o(eral)e(issues)h(that)f(arise)g(when)1013 2534 y(impl\ em)o(en)m(ting)f(a)g(memory)f(managemen)l(t)i(system)g(for)f(a)h(ma-)1013 2580 y(c)o(hine)h(with)f(a)h(virtually)e(indexed)i(write-bac)o(k)g(cache.)18 b(The\ se)1013 2625 y(issues)d(relate)f(to)g(aliases,)f(new)h(mappings,)e(and)h(DMA.) p eop %%Page: 4 4 bop -75 -40 a fo(2.1)56 b(The)18 b(virtual)f(memory)f(model)-75 33 y fv(Mac) o(h)e(pro)o(vides)g(a)g(hierarchical)f(virtual)g(memory)e(model)j(in)-75 78 y (whic)o(h)c(eac)o(h)g(pro)q(cess)i(runs)e(in)g(its)f(o)o(wn)h(address)h(space\ .)18 b(Mem-)-75 124 y(ory)13 b(can)g(b)q(e)h(shared)g(b)q(et)o(w)o(een)g(pro) q(cesses,)h(although)d(there)j(is)-75 169 y(no)h(requiremen)o(t)g(that)g(it)g (b)q(e)g(shared)h(at)f(the)h(same)e(address)-75 214 y(ev)o(erywhere.)24 b(An) 16 b(alternativ)n(e)g(mo)o(del)g(places)g(all)e(pro)q(cesses)-75 260 y(in)g (a)g(single,)f(global)g(virtual)g(address)i(space)g(in)f(whic)o(h)g(nam-)-75 305 y(ing)g(and)h(protection)g(are)g(orthogonal.)20 b(F)m(rom)13 b(an)i(op)q (erating)-75 350 y(systems)f(p)q(ersp)s(ectiv)o(e,)g(exp)q(orting)g(the)g(lar\ ge)g(address)h(space)-75 396 y(model)h(to)g(applications)g(op)q(ens)h(up)g (a)f(large)g(n)o(um)n(b)q(er)h(of)f(re-)-75 441 y(search)g(issues)h([Chase)f (et)g(al.)24 b(92].)e(These)c(issues)f(are)f(com-)-75 486 y(plicated)c(b)o (y)g(the)g(fact)g(that)g(global)e(address)j(space)g(mac)n(hines)-75 532 y(are) i(still)e(the)i(exception)g(and)f(not)g(the)h(rule.)20 b(Consequently)l(,)-75 577 y(w)o(e)12 b(are)g(retaining)f(Mac)o(h's)g(hierarchical)f(model)h(for)h (our)f(p)q(ort)-75 622 y(to)j(the)g(HP)g(9000)f(Series)i(700.)-33 668 y(F)l (or)e(the)h(purp)r(oses)g(of)f(virtually)e(indexed)j(cache)f(manage-)-75 714 y (men)n(t,)j(only)f(one)h(distinction)g(exists)h(b)q(et)o(w)o(een)g(the)f(t)o (w)o(o)g(ad-)-75 759 y(dressing)i(mo)o(dels.)28 b(In)17 b(the)h(hierarchical) e(mo)o(del,)i(pro)q(cesses)-75 804 y(can)h(share)g(memory)d(at)i(di\013erent) g(virtual)g(addresses,)j(and)-75 850 y(therefore)e(p)r(ossibly)e(di\013erent) h(cac)o(he)h(lines.)30 b(In)18 b(the)g(global)-75 895 y(model,)i(memory)d(is) j(shared)g(at)g(the)g(same)f(address)i(in)e(all)-75 940 y(pro)q(cesses.)h(Thi\ s)12 b(eliminates)e(consistency)k(problems)d(due)i(to)-75 986 y(sharing)e(\(w\ hic)o(h)h(is)f(de\014ned)i(as)f(aliasing)e(in)h(the)h(next)g(subsec-)-75 1031 y(tion\),)f(but)g(do)q(es)h(not)f(solv)o(e)g(the)h(problems)e(that)h(arise)h (during)-75 1076 y(the)h(creation)f(of)f(new)i(mappings)d(or)i(DMA-based)h (I/O)f(\(Sec-)-75 1122 y(tions)i(2.3)f(and)g(2.4\).)-75 1237 y fo(2.2)56 b (The)18 b(problem)f(with)h(aliases)-75 1310 y fv(An)c fq(alias)g fv(o)q(ccurs) i(whenever)e(the)h(same)e(ph)o(ysical)h(address)i(is)-75 1355 y(mapped)f(at)g (more)g(than)g(one)g(virtual)f(address.)24 b(In)15 b(a)g(virtu-)-75 1401 y (ally)i(indexed)h(cache,)h(where)g(the)g(virtual)e(address)j(is)e(used)-75 1446 y(to)g(select)h(the)f(cache)g(line,)f(an)h(alias)f(can)h(result)g(in)f (a)h(data)-75 1491 y(item)12 b(b)r(eing)h(in)g(more)g(than)h(one)f(cache)h (line)f(at)h(a)f(time.)k(It)d(is)-75 1537 y(the)e(job)f(of)g(the)h(cache)g (managemen)l(t)g(system)f(to)g(ensure)i(that)-75 1582 y(references)k(to)c(ali\ ased)h(data)f(yield)h(consistent)g(v)m(alues.)-33 1628 y(W)l(rite-bac)o(k)j (cac)o(hes)h(exacerbate)h(the)e(alias)f(problem.)26 b(A)-75 1674 y(write-bac) o(k)21 b(cac)o(he)g(can)g(impro)m(v)o(e)g(pro)q(cessor)i(p)q(erformance)-75 1719 y(b)o(y)17 b(reducing)h(the)g(frequency)h(of)e(stores)h(to)g(main)d(memo\ ry)-6 b(.)-75 1764 y(Only)17 b(the)h(replacemen)o(t)g(of)e(a)i(dirt)n(y)g(cac) o(he)g(line)f(requires)i(a)-75 1810 y(store)14 b(to)f(memory)-6 b(,)13 b(enab\ ling)g(ph)o(ysical)g(memory)d(to)k(b)q(ecome)-75 1855 y(stale)j(with)f(resp)r (ect)h(to)g(the)g(cac)o(he.)26 b(This)17 b(can)f(cause)i(reads)-75 1900 y(thr\ ough)11 b(one)h(virtual)f(address)h(to)g(return)g(stale)g(v)n(alues)f(if)g (the)-75 1946 y(data)k(w)n(as)g(written)h(through)e(another.)22 b(W)l(rites) 16 b(can)f(also)f(b)q(e)-75 1991 y(lost)c(if)g(a)g(ph)o(ysical)g(address)i (is)e(dirt)o(y)h(in)f(more)f(than)i(one)f(cache)-75 2036 y(line)h(b)q(ecause) i(one)e(or)h(b)q(oth)f(dirt)o(y)g(lines)g(can)h(b)q(e)g(written)f(back)-75 2082 y(to)j(ph)o(ysical)f(memory)e(in)j(an)o(y)f(order.)-75 2189 y fn(Some)i (solutions)-75 2262 y fv(Some)d(solutions)g(to)g(the)i(alias)d(problem,)g(suc\ h)i(as)g(the)g(global)-75 2308 y(address)h(space)f(model)f(men)n(tioned)h(ear\ lier,)f(disallo)m(w)h(aliases)-75 2353 y(altogether.)21 b(Others)16 b(preclud\ e)g(arbitrary)f(aliasing)e(b)o(y)i(forc-)-75 2398 y(ing)c(shared)h(data)f(to) h(reside)g(at)g(virtual)e(addresses)k(that)e fq(align)-75 2444 y fv(in)i(the) h(cache,)f(or)h(b)o(y)f(requiring)g(that)h(shared)g(data)g(b)q(e)g(non-)-75 2489 y(cacheable)j([Cheng)h(87].)31 b(Tw)o(o)18 b(virtual)f(addresses)k(align) c(if)-75 2534 y(they)e(b)q(oth)g(map)d(to)j(the)g(same)e(cache)i(line.)k(In) 14 b(a)h(ph)o(ysically)-75 2580 y(tagged)i(cache,)h(aligned)f(aliases)g(can)h (b)q(e)g(resolv)o(ed)g(without)-75 2625 y(going)c(to)h(memory)-6 b(.)22 b(In) 15 b(a)g(virtually)e(tagged)i(cache,)g(aligned)1013 -46 y(aliases)d(compete)h (for)f(the)h(same)e(cache)i(line,)e(although)h(there)1013 -1 y(is)h(no)h(cons\ istency)h(problem.)1054 45 y(Other)k(solutions)e(allo)m(w)h(arbitrary)f(alias\ es,)h(but)g(rely)f(on)1013 90 y(consistency)e(proto)q(cols)f(implemen)l(ted)h (in)e(hardw)o(are)i([W)-5 b(ang)1013 135 y(et)10 b(al.)15 b(89,)9 b(Knapp)h (&)g(Baer)g(85])f(or)g(soft)o(w)o(are)h([Chao)e(et)j(al.)k(90].)1013 181 y (Hardw)o(are)g(proto)q(cols)h(use)g(a)f fq(r)m(everse)i(tr)m(anslation)f(bu\ \013er)g fv(to)1013 226 y(determine)d(if)h(a)f(ph)o(ysical)h(address)h(is)f (aliased)f(in)h(more)f(than)1013 271 y(one)h(cac)o(he)h(line,)e(and)h(allo)n (w)g(only)f(the)i(most)e(recen)q(t)h(alias)f(to)1013 317 y(b)q(e)k(v)n(alid.) 26 b(Soft)n(w)o(are)17 b(proto)q(cols)g(allo)n(w)g(aliases)f(to)h(b)q(e)h(rea\ d-)1013 362 y(only)-5 b(.)17 b(On)10 b(the)g(\014rst)h(write)f(to)f(a)g(read-\ only)h(alias,)f(a)g(page-fault)1013 407 y(occurs,)23 b(the)e(page)f(is)g(mapp\ ed)h(writable,)g(and)f(an)n(y)g(other)1013 452 y(read)c(mapping)e(is)j(brok)o (en.)25 b(On)17 b(the)g(next)g(read)g(through)f(a)1013 498 y(di\013eren)o(t)h (virtual)f(address,)i(the)f(write-mapping)e(is)i(brok)n(en)1013 543 y(and)12 b (the)i(alias)e(b)q(ecomes)h(read-only)f(again.)17 b(The)c(cache)g(ma)m(y)1013 588 y(require)h(\015ushing)g(or)g(purging)f(during)h(transitions.)1013 692 y fn(When)h(do)g(aliases)f(o)r(ccur?)1013 764 y fv(Aliases)i(o)q(ccur)h(for)e (t)o(w)o(o)h(general)g(reasons.)25 b(Either)17 b(applica-)1013 810 y(tions)12 b(explicitly)g(request)i(that)e(ph)o(ysical)h(pages)g(b)q(e)g(m)m(ultiply) 1013 855 y(mapp)o(ed,)19 b(or)f(the)h(op)q(erating)f(system)g(uses)h(m)m(ulti\ ple)f(map-)1013 900 y(pings)g(to)h(implemen)l(t)g(techniques)g(such)g(as)g (cop)o(y-on-write)1013 946 y(to)11 b(reduce)i(the)f(o)n(v)o(erhead)h(of)d(mem\ ory)f(managemen)m(t)i([Y)l(oung)1013 991 y(et)j(al.)k(87].)f(In)d(either)h (case,)f(only)g(unaligned)f(aliases)h(p)q(ose)g(a)1013 1036 y(problem,)d(as)i (aligned)e(aliases)i(map)e(to)i(the)g(same)f(line)g(in)g(the)1013 1082 y(cac) o(he.)1054 1127 y(Despite)i(the)f(abilit)m(y)g(to)g(share)h(memory)c(at)j(arb\ itrary)f(ad-)1013 1172 y(dresses,)18 b(w)o(e)e(are)h(a)o(w)n(are)g(of)e(few)i (applications)e(that)h(rely)g(on)1013 1218 y(this)f(feature.)25 b(Ev)o(en)16 b (applications)f(that)g(share)i(in)e(sophisti-)1013 1263 y(cated)d(w)o(a)n(ys) g([App)q(el)g(&)g(Li)f(91])f(can)i(generally)f(do)h(so)f(without)1013 1308 y (sp)q(ecifying)18 b(the)g(address)i(at)e(whic)o(h)g(shared)h(data)f(m)n(ust)g (b)r(e)1013 1354 y(mapp)o(ed)e([Li)f(92].)21 b(The)16 b(name)f(of)f(a)i(piece) g(of)f(virtual)g(mem-)1013 1399 y(ory)f(is)g(m)m(uc)o(h)g(less)h(importan)n (t)g(than)f(other)h(attributes,)f(such)1013 1444 y(as)k(its)h(con)o(tents,)h (pageabilit)m(y)l(,)g(protection,)g(and)e(reference)1013 1490 y(information.) 1054 1535 y(In)d(con)o(trast)g(to)f(applications,)g(the)h(op)q(erating)f(syst\ em)g(it-)1013 1580 y(self)f(is)g(a)g(more)g(aggressiv)o(e)h(clien)o(t)f(of)g (virtual)g(memory)e(shar-)1013 1626 y(ing)k(primitiv)l(es.)26 b(As)16 b(a)g (result,)h(it)f(migh)l(t)h(b)q(e)f(more)f(inclined)1013 1671 y(to)h(require)h (unaligned)f(aliases.)25 b(In)16 b(practice,)i(though,)e(this)1013 1716 y(tur\ ns)i(out)f(not)g(to)g(b)q(e)h(case)g(for)f(the)h(same)e(reason)i(as)f(with) 1013 1762 y(applications.)f(The)11 b(virtual)g(memory)e(system)i(can)g(theref\ ore)1013 1807 y(generally)20 b(select)i(aligning)d(virtual)h(addresses)j(for) e(shared)1013 1852 y(data.)40 b(W)l(e)22 b(discuss)h(this)f(c)o(haracteristic) h(further)f(in)f(Sec-)1013 1898 y(tion)13 b(4.2.)1054 1943 y(Nev)o(ertheless,) h(there)e(will)e(alw)n(a)o(ys)i(b)q(e)g(cases)g(where)h(it)e(ma)m(y)1013 1988 y(b)q(e)i(more)f(con)o(v)o(enien)o(t)h(to)g(place)g(shared)h(memory)d(at)h (sp)r(eci\014c)1013 2034 y(virtual)i(addresses)k(\(such)e(as)g(with)f(shared) i(p)q(ersistent)f(data)1013 2079 y(structures\).)21 b(Consequently)l(,)13 b (the)i(cache)f(managemen)l(t)h(sys-)1013 2124 y(tem)e(m)m(ust)h(deal)g(with)g (these)h(aliases)e(correctly)n(.)1013 2235 y fo(2.3)55 b(The)19 b(problem)d (with)j(new)g(mappings)1013 2308 y fv(Aliases)24 b(in)o(tro)q(duce)i(a)e(p)r (oten)o(tial)g(memory)e(inconsistency)1013 2353 y(whenev)o(er)d(the)g(n)o(um) m(b)q(er)g(of)f(virtual)f(mappings)g(to)h(a)f(giv)n(en)1013 2398 y(ph)n(ysica\ l)f(page)g(is)g(greater)h(than)e(one.)25 b(An)16 b(additional)e(con-)1013 2444 y(sistency)k(problem)e(is)h(created)i(whenever)f(a)f(ph)o(ysical)g(page)1013 2489 y(is)e(newly)i(mapp)o(ed,)g(that)f(is,)g(the)h(n)o(um)m(b)q(er)g(of)f (mappings)e(to)1013 2534 y(a)i(ph)o(ysical)f(page)i(c)o(hanges)g(from)d(zero) k(to)e(one.)26 b(Unlik)n(e)16 b(the)1013 2580 y(alias)d(problem,)g(the)i(new) g(mapping)d(problem)h(is)i(not)f(solv)n(ed)1013 2625 y(b)n(y)g(the)h(use)f (of)g(a)f(single,)g(global)g(address)i(space.)p eop %%Page: 5 5 bop -33 -46 a fv(New)12 b(mappings)f(are)i(a)f(problem)f(b)q(ecause)j(the)f (cache)f(ma)n(y)-75 -1 y(con)o(tain)h(data)h(brough)o(t)g(in)f(through)h(an)g (old)f(\(but)h(no)o(w)g(non-)-75 44 y(existent\))i(mapping.)21 b(F)m(or)15 b (example,)g(supp)q(ose)i(that)e(virtual)-75 90 y(address)i(V)e(is)h(mapp)o (ed)g(to)g(ph)o(ysical)e(page)i(P)m(,)f(written,)h(and)-75 135 y(then)d(unmap\ ped)f(so)h(that)f(P)h(has)f(no)g(corresp)s(onding)f(virtual)-75 180 y(address\ .)19 b(This)12 b(could)h(happ)q(en)g(for)f(an)o(y)g(one)h(of)f(a)g(n)o(um)n (b)q(er)h(of)-75 226 y(reasons,)f(such)f(as)g(the)h(termination)d(of)i(an)g (address)h(space,)g(or)-75 271 y(the)i(remap)f(of)g(P)g(from)f(one)i(virtual) e(address)j(to)e(another.)19 b(If)-75 316 y(V')10 b(is)g(then)g(mapped)g(to)g (P)m(,)g(y)n(et)h(V)f(and)g(V')g(do)g(not)g(align)e(in)i(the)-75 362 y(cache,) g(a)f(read)h(or)f(write)h(through)f(V')g(could)g(access)i(data)e(from)-75 407 y(page)14 b(P)f(in)g(ph)o(ysical)g(memory)e(that)j(is)g(older)f(than)h(the)g (data)-75 452 y(from)g(page)h(P)g(in)g(the)h(cache.)22 b(F)m(urthermore,)16 b (write-bac)o(k)f(of)-75 498 y(dirt)o(y)e(data)g(that)h(w)o(as)f(once)h(mapped) g(at)f(V)h(could)f(o)o(v)n(erwrite)-75 543 y(ph)o(ysical)g(memory)f(that)i (had)f(b)r(een)h(written)h(through)f(V'.)-33 597 y(A)e(straigh)o(tforw)o(ard) g(w)o(a)o(y)g(to)h(ensure)h(consistency)h(for)d(new)-75 642 y(mappings)g(is)i (to)h(clean)f(the)h(cac)o(he)g(with)f(a)g(\015ush)h(or)f(a)g(purge)-75 688 y (when)g(a)f(virtual)f(mapping)f(to)i(a)g(ph)o(ysical)g(page)g(is)g(remo)n(v)n (ed.)-75 733 y(The)f(\015ush)g(or)g(purge)g(ensures)i(that)d(the)i fq(next)g (time)e fv(the)h(ph)o(ys-)-75 778 y(ical)18 b(page)h(is)g(accessed,)j(none)e (of)e(its)h(data)g(will)f(b)q(e)h(in)g(the)-75 824 y(cache.)f(This)13 b(appro\ ac)o(h,)f(for)h(example,)f(is)h(tak)n(en)h(in)26 b([Cheng)-75 869 y(87].)-33 923 y(While)16 b(correct,)21 b(the)d(approac)o(h)g(is)f(unnecessarily)i(eager\ .)-75 968 y(It)e(is)g(p)q(ossible)g(that)g(the)h(next)f(time)f(the)h(page)g (is)g(mapp)o(ed,)-75 1013 y(it)i(w)o(ould)f(b)r(e)h(mapped)h(at)f(a)g(virtual) f(address)j(that)e(aligns)-75 1059 y(with)g(the)h(last)f(assigned)h(virtual)e (address.)36 b(By)19 b(remo)n(ving)-75 1104 y(the)12 b(data)g(from)e(the)i (cache)g(at)g(unmap,)e(subsequen)q(t)i(accesses)-75 1149 y(will)h(in)n(v)o (olv)n(e)i(slo)n(w)o(er)g(fetches)g(from)d(main)g(memory)-6 b(,)14 b(thereb)q (y)-75 1195 y(degrading)g(p)r(erformance)g([Chao)g(et)h(al.)20 b(90].)f(On)c (the)h(other)-75 1240 y(hand,)10 b(if)f(the)i(next)f(mapping)e(to)h(the)i(pag\ e)f(is)f(not)h(aligned,)f(ea-)-75 1285 y(ger)k(remo)n(v)n(al)f(reduces)j(the) f(lik)n(elihoo)q(d)f(that)g(the)h(data)e(w)o(ould)-75 1331 y(b)q(e)k(naturall\ y)f(replaced)h(b)o(y)f(other)h(references.)26 b(On)16 b(the)g(HP)-75 1376 y (9000)d(Series)i(700,)e(for)h(example,)e(a)i(purge)h(or)f(\015ush)h(of)e(a)h (vir-)-75 1421 y(tual)f(address)i(can)f(b)q(e)h(up)f(to)f(seven)h(times)f(slo) n(w)o(er)i(when)f(the)-75 1467 y(data)g(is)f(in)h(the)g(cache)g(as)g(opp)q (osed)h(to)e(when)i(it)e(isn't.)-33 1520 y(An)e(alternativ)n(e)h(approac)o (h)f(is)g(to)g(dela)o(y)g(consistency)h(man-)-75 1566 y(agemen)n(t)18 b(un)o (til)g(the)h(new)f(mapping)e(is)i(created.)33 b(It)18 b(is)h(not)-75 1611 y (necessary)g(to)e(purge)h(or)f(\015ush)h(the)g(cache)f(of)g(data)g(when)h(a) -75 1656 y(virtual)c(address)j(is)e(unmapped)g(b)o(y)g(the)h(op)q(erating)f (system.)-75 1702 y(Other)d(structures,)i(ho)o(w)o(ev)o(er,)e(such)f(as)h(TLB) f(and)g(page)h(table)-75 1747 y(en)o(tries,)i(m)n(ust)g(b)q(e)g(in)n(v)n(alid\ ated)f(to)g(deny)g(access)i(to)f(the)g(data)-75 1792 y(in)f(the)i(memory)c (system.)-33 1846 y(As)h(with)g(aliases,)g(consistency)h(op)q(erations)g(for) f(new)g(map-)-75 1891 y(pings)19 b(are)h(only)e(required)j(when)f(the)g(new)f (mapping)f(to)h(a)-75 1937 y(ph)o(ysical)12 b(address)i(do)q(es)f(not)f(align) f(with)h(the)h(previous)g(map-)-75 1982 y(ping)g(to)h(that)g(ph)o(ysical)g (address.)20 b(If)13 b(the)i(previous)f(and)g(new)-75 2027 y(addresses)i(do)e (not)h(align,)d(the)j(previous)g(address)g(ma)m(y)f(need)-75 2073 y(to)21 b (b)q(e)h(\015ushed)g(and)g(the)g(new)f(address)i(ma)m(y)e(need)i(to)e(b)q(e) -75 2118 y(purged.)28 b(The)18 b(\015ush)g(through)f(the)h(previous)f(mapping) e(en-)-75 2163 y(sures)j(that)f(an)o(y)f(writes)i(to)e(it)g(will)g(tak)n(e)h (e\013ect)i(in)d(memory)-75 2209 y(b)q(efore)d(an)o(y)f(reads)h(through)g(the) g(new)g(mapping.)i(The)e(purge)-75 2254 y(of)h(the)h(new)g(mapping)e(ensures) j(that)f(an)n(y)g(reads)g(through)g(it)-75 2299 y(will)d(return)j(fresh)g(dat\ a)f(from)e(memory)-6 b(.)-33 2353 y(The)12 b(consistency)h(issues)g(of)f(new) g(mappings)e(are)i(orthogo-)-75 2398 y(nal)f(to)g(the)g(op)q(erating)g(system) h(issues)g(of)e(initializing)f(data)i(in)-75 2444 y(a)h(newly)f(mapped)h(page\ .)17 b(Security)12 b(concerns)i(dictate)e(that)g(a)-75 2489 y(newly)h(mapped) g(ph)o(ysical)f(page)h(not)g(contain)f(data)h(left)f(o)o(v)o(er)-75 2534 y (from)i(a)h(previous)g(mapping,)e(otherwise)k(one)e(pro)q(cess')i(data)-75 2580 y(could)f(b)q(e)g(made)e(a)o(v)n(ailable)g(to)h(another)h(pro)r(cess)h (through)f(a)-75 2625 y(remapping.)21 b(Prop)r(er)16 b(page)f(preparation)h (m)m(ust)g(o)q(ccur)h(with)1013 -46 y(b)q(oth)e(ph)o(ysically)g(and)g(virtual\ ly)f(indexed)i(cac)o(hes.)24 b(W)l(e)16 b(dis-)1013 -1 y(cuss)g(t)o(w)o(o)e (optimizations)f(that)i(are)h(p)q(ossible)f(when)g(prepar-)1013 44 y(ing)e (a)g(newly)h(mapped)g(page)g(in)f(Section)i(4.)1013 167 y fo(2.4)55 b(The)17 b (problem)f(with)h(DMA-based)h(I/O)1013 243 y fv(DMA-based)i(I/O)f(is)h(anothe\ r)g(source)h(of)e(cache)h(inconsis-)1013 289 y(tency)m(,)k(and)e(hence)i(p)q (otential)d(cac)o(he)i(managemen)m(t)f(o)o(v)n(er-)1013 334 y(head.)17 b(The) c(I/O)f(problem)f(is)h(indep)q(endent)h(of)e(the)i(cac)o(he)g(ar-)1013 379 y (c)o(hitecture)i(\(virtual)e(or)h(ph)o(ysical\))f(or)h(address)h(space)f(mode\ l)1013 425 y(\(hierarc)o(hical)f(or)h(global\).)1054 472 y(DMA)k(devices)i (supp)r(ort)e(t)o(w)o(o)g(memory-orien)m(ted)h(op)q(era-)1013 518 y(tions:)h (DMA-write)c(and)f(DMA-read.)22 b(DMA-write)16 b(causes)1013 563 y(the)j(devi\ ce)h(to)f(transfer)h(data)e(in)o(to)h(the)g(memory)e(system.)1013 608 y(DMA-r\ ead)22 b(causes)h(the)f(device)h(to)e(read)i(data)e(from)f(the)1013 654 y(mem\ ory)d(system.)36 b(Prior)20 b(to)f(issuing)h(a)f(DMA-write,)i(the)1013 699 y (CPU)16 b(m)n(ust)h(ensure)h(that)e(the)h(ph)o(ysical)f(addresses)i(written) 1013 744 y(b)n(y)11 b(the)f(device)h(will)e(not)h(b)r(e)g(o)o(v)o(erwritten)h (b)o(y)f(previously)g(dirt-)1013 790 y(ied)j(data)h(still)e(in)i(the)g(cache.) k(Prior)c(to)f(accessing)i(the)g(data,)1013 835 y(the)21 b(CPU)g(m)m(ust)g (ensure)i(that)e(old)f(data)g(in)g(the)h(cache)g(is)1013 880 y(not)16 b(shado) o(wing)h(new)g(data)g(in)f(memory)-6 b(.)27 b(Prior)17 b(to)g(issuing)1013 926 y(a)g(DMA-read,)h(the)h(CPU)f(m)m(ust)g(ensure)i(that)d(data)h(at)f(the)1013 971 y(addresses)e(b)q(eing)f(read)g(b)n(y)g(the)g(device)g(has)g(b)q(een)h (\015ushed)f(to)1013 1016 y(main)d(memory)-6 b(.)1013 1139 y fo(2.5)55 b(The) 19 b(cost)f(of)h(cac)n(he)g(managemen)-5 b(t)1013 1215 y fv(In)19 b(managing) d(a)j(virtually)f(indexed)h(cache,)h(an)f(op)q(erating)1013 1261 y(system)f (has)h(t)o(w)o(o)f(resp)r(onsibilities.)32 b(First,)19 b(it)g(m)m(ust)g(striv\ e)1013 1306 y(to)e(reduce)i(the)f(frequency)h(of)d(unaligned)h(aliases)g(and) h(new)1013 1351 y(mappings)c(b)o(y)i(taking)g(the)h(cache)g(index)f(function) g(in)o(to)g(ac-)1013 1397 y(coun)o(t)c(when)g(de\014ning)g(virtual)f(to)g(ph) o(ysical)h(mappings.)j(Sec-)1013 1442 y(ond,)20 b(when)g(unaligned)f(mappings) e(do)j(o)q(ccur)g(and)g(consis-)1013 1487 y(tency)g(managemen)l(t)g(is)g(requ\ ired,)h(the)g(op)q(erating)e(system)1013 1533 y(should)g(pro)o(vide)g(it)g (with)g(as)g(little)g(o)o(v)n(erhead)i(as)e(p)q(ossible.)1013 1578 y(F)l(or) 14 b(example,)e(b)q(ecause)k(purges)e(and)g(\015ushes)h(of)e(virtual)g(ad-) 1013 1623 y(dresses)i(that)d(are)i(not)e(presen)q(t)h(in)f(the)i(cac)o(he)f (should)g(b)q(e)g(less)1013 1669 y(exp)q(ensiv)o(e)j(than)f(those)g(that)g (are,)g(they)h(should)f(b)q(e)g(dela)o(y)n(ed)1013 1714 y(for)h(as)g(long)g (as)g(p)q(ossible.)26 b(A)17 b(dela)n(y)o(ed)g(cache)g(managem)o(en)m(t)1013 1759 y(operation)12 b(ma)m(y)f(ev)o(en)h(b)q(e)f(a)o(v)o(oided)g(altogether)g (if)g(it)f(is)h(kno)o(wn)1013 1805 y(to)f(b)q(e)h(ob)o(viated)f(b)o(y)g(a)g (subsequen)q(t)g(and)h(otherwise)g(necessary)1013 1850 y(operation.)17 b(F)m (or)10 b(example,)g(cop)o(ying)f(in)o(to)h(or)g(zeroing)h(a)f(cac)o(he)1013 1895 y(line)15 b(o)o(v)n(erwrites)j(its)e(con)o(ten)o(ts)h(en)o(tirely)l(,)f (making)e(an)i(earlier)1013 1941 y(purge)e(of)f(stale)h(data)g(in)f(that)h (line)g(unnecessary)n(.)1054 1988 y(T)m(o)f(demonstrate)h(the)g(importance)g (of)f(meeting)g(these)i(re-)1013 2033 y(sp)q(onsibilities,)22 b(w)n(e)g(ha)o (v)o(e)f(measured)g(the)h(p)r(erformance)f(of)1013 2079 y(sev)o(eral)h(b)q (enchmark)f(programs)g(on)h(t)o(w)n(o)g(v)o(ersions)h(of)e(the)1013 2124 y (Mac)o(h)e(3.0)g(k)o(ernel)h(running)g(on)f(the)h(HP)g(9000)f(Series)i(700) 1013 2169 y(\(Mo)q(del)c(720\).)29 b(An)18 b(op)q(erating)f(system)h(serv)o (er)h(running)e(at)1013 2215 y(user)c(lev)n(el)f(pro)o(vides)g(Unix)g(functio\ nalit)m(y)g([Golub)e(et)j(al.)j(90].)1013 2260 y(The)11 b(b)q(enchmarks)e(are) i fq(afs-b)n(ench,)i(latex-b)m(ench,)f fv(and)e fq(kernel-)1013 2305 y(build) p fv(.)17 b(The)d(\014rst)h(is)e(a)g(v)o(ersion)h(of)f(the)h(Andrew)g(File)f (System)1013 2351 y(b)q(enchmark)j([Sat)n(y)o(anaran)o(y)n(an)o(y)o(an)i(et)g (al.)30 b(85])17 b(that)h(runs)h(a)1013 2396 y(\014le-in)n(tensiv)o(e)13 b (shell)f(script.)19 b(The)12 b(second)i(formats)d(a)h(v)o(ersion)1013 2441 y (of)f(this)h(pap)q(er)h(using)f(L)1370 2436 y fm(a)1389 2441 y fv(T)1412 2454 y(E)1435 2441 y(X.)g(The)g(third)g(builds)g(a)f(v)o(ersion)i(of)1013 2487 y (the)h(Mac)o(h)g(k)o(ernel)g(from)e(ab)q(out)i(200)f(source)j(\014les.)1054 2534 y(The)e(t)o(w)o(o)f(v)o(ersions)h(of)f(the)h(k)n(ernel)h(are)e(iden)o (tical)g(with)g(the)1013 2580 y(exception)k(of)g(their)g(cache)g(managemen)m (t)g(p)q(olicies.)27 b(In)17 b(the)1013 2625 y(\014rst)e(v)o(ersion)h(of)e (the)i(system)f(\(lab)q(eled)g(\\old"\),)f(neither)i(the)p eop %%Page: 6 6 bop -75 -46 a fv(k)o(ernel)21 b(nor)f(the)g(user-level)g(op)q(erating)g(syst\ em)g(server)h(at-)-75 -1 y(tempt)15 b(to)g(align)f(virtual)h(addresses.)25 b (Both)16 b(the)g(k)n(ernel)h(and)-75 44 y(the)c(Unix)f(serv)o(er)h(run)g(unde\ r)g(the)f(mis-assumption)e(that)i(the)-75 90 y(cache)20 b(is)f(ph)o(ysically) g(indexed,)i(while)f(lo)n(w-lev)n(el)g(mac)n(hine-)-75 135 y(dep)r(endent)e (soft)o(w)o(are)g(guaran)o(tees)i(consistency)f(through)g(a)-75 180 y(simple) c(strategy)i(for)f(cache)h(managemen)l(t.)668 165 y fl(1)712 180 y fv(On)g (a)f(write)-75 226 y(to)d(an)g(aliased)g(ph)o(ysical)g(page,)g(all)f(other)j (mappings)c(to)i(that)-75 271 y(page)k(are)h(brok)o(en.)29 b(On)18 b(a)f(read) h(to)f(an)g(unmapped)h(aliased)-75 316 y(page,)13 b(an)o(y)h(existing)f(writa\ ble)h(mapping)d(is)j(brok)o(en)g(and)g(the)-75 362 y(faulting)f(address)j(is) f(mark)m(ed)h(read-only)l(.)21 b(Whenev)o(er)15 b(a)g(vir-)-75 407 y(tual)10 b (to)h(ph)o(ysical)f(mapping)e(is)j(brok)o(en,)g(the)g(page)g(is)f(remo)n(v)o (ed)-75 452 y(from)g(the)j(cache)f(with)g(a)g(\015ush)g(\(if)g(dirt)o(y\))g (or)g(a)g(purge.)18 b(In)12 b(the)-75 498 y(second)20 b(v)o(ersion)g(of)f(the) h(system)f(\(labeled)h(\\new"\),)h(whic)n(h)-75 543 y(uses)e(the)f(cac)o(he)g (managemen)l(t)g(strategies)g(laid)f(out)g(in)g(the)-75 588 y(next)g(t)o(w)o (o)f(sections,)h(careful)f(alignmen)m(t)g(and)g(dela)o(y)o(ed)g(con-)-75 634 y (sistency)f(are)f(used)h(extensively)l(.)-33 689 y(T)l(able)i(1)h(summarizes) e(the)i(p)q(erformance)f(of)g(the)i(b)q(ench-)-75 734 y(marks)14 b(on)h(the)h (t)o(w)n(o)f(systems)h(in)e(terms)h(of)g(program)e(execu-)-75 780 y(tion)g (time)g(and)g(n)o(um)n(b)q(er)h(of)g(cac)o(he)g(consistency)i(op)q(erations.) -75 825 y(The)h(n)o(um)n(b)q(ers)h(represen)q(t)f(the)g(a)o(v)o(erage)g(from) e(the)i(last)g(t)o(w)o(o)-75 870 y(of)f(three)j(runs)e(on)g(an)g(otherwise)h (idle)e(mac)n(hine.)732 855 y fl(2)778 870 y fv(Despite)-75 916 y(the)k(fact) g(that)g(none)g(of)f(the)h(b)q(enchmarks)f(directly)h(stress)-75 961 y(Mac)o (h's)14 b(virtual)g(memory)d(system)j(\(they)h(are)g(all)e(Unix)h(pro-)-75 1006 y(grams\),)19 b(their)h(indirect)f(reliance)h(on)f(the)h(k)o(ernel)g(and) f(the)-75 1052 y(Unix)h(server)i(can)f(incur)g(a)g(signi\014can)n(t)g(amoun)m (t)g(of)f(cache)-75 1097 y(managemen)l(t)14 b(o)o(v)o(erhead)h(stemming)c(fro\ m)h(the)j(cost)g(of)e(ha)o(v-)-75 1142 y(ing)i(to)g(purge)i(and)e(\015ush)h (pages)g(from)e(the)i(cache.)23 b(Ov)o(erall,)-75 1188 y(the)11 b(new)g(syste\ m's)g(cac)o(he)g(consistency)h(p)q(olicies)f(impro)m(v)n(e)g(ex-)-75 1233 y (ecution)f(times)f(b)o(y)h(b)q(et)o(w)o(een)h(5%)e(and)h(10%.)16 b(A)10 b(mor\ e)f(detailed)-75 1278 y(p)q(erformance)14 b(analysis)f(is)h(presented)h(in)e (Section)h(5.)-33 1334 y(W)l(e)g(also)f(ran)h(an)g(en)o(tirely)g(con)o(triv)n (ed)h(b)q(enchmark,)d(whic)n(h)-75 1379 y(is)22 b(not)g(sho)o(wn)g(in)g(the)h (table,)g(that)g(exp)q(oses)g(the)g(b)q(ene\014t)-75 1424 y(of)17 b(aligning) e(shared)j(mappings.)26 b(A)17 b(single)g(thread)g(rep)r(eat-)-75 1470 y(edly) j(wrote)h(one)f(ph)o(ysical)g(address)h(through)g(t)o(w)n(o)f(virtual)-75 1515 y(addresses.)36 b(When)19 b(the)h(virtual)e(addresses)k(w)o(ere)e(aligned,) -75 1560 y(a)14 b(lo)q(op)g(of)g(1,000,000)e(writes)k(completed)e(in)g(a)g (fraction)h(of)f(a)-75 1606 y(second.)k(When)12 b(unaligned,)f(the)h(loop)f (to)q(ok)g(o)o(v)o(er)h(2)f(min)m(utes.)-63 1754 y fp(Program)128 1765 y 2 36 v 238 1754 a(Elapsed)467 1765 y 2 36 v 535 1754 a(P)o(age)675 1765 y 2 36 v 761 1754 a(P)o(age)128 1801 y 2 36 v 258 1790 a(Time)467 1801 y 2 36 v 514 1790 a(Flushes)675 1801 y 2 36 v 746 1790 a(Purges)128 1839 y 2 39 v 226 1828 a(\(seconds\))467 1839 y 2 39 v 518 1828 a(\()p fk(\002)p fp(10)595 1817 y fj (3)612 1828 y fp(\))675 1839 y 2 39 v 744 1828 a(\()p fk(\002)p fp(10)821 1817 y fj(3)838 1828 y fp(\))128 1875 y 2 36 v 174 1864 a(old)33 b(new)h(%)12 b (gain)467 1875 y 2 36 v 513 1864 a(old)42 b(new)675 1875 y 2 36 v 739 1864 a (old)60 b(new)-75 1877 y 996 2 v -63 1902 a fi(afs-b)n(ench)128 1913 y 2 36 v 159 1902 a fp(66.0)40 b(59.4)337 1913 y 2 36 v 391 1902 a(10%)467 1913 y 2 36 v 479 1902 a(77.41)23 b(7.754)675 1913 y 2 36 v 706 1902 a(62.09)40 b(22.61) -63 1938 y fi(latex-p)n(ap)n(er)128 1949 y 2 36 v 176 1938 a fp(5.8)59 b(5.5) 337 1949 y 2 36 v 408 1938 a(5%)467 1949 y 2 36 v 479 1938 a(2.029)40 b(.143) 675 1949 y 2 36 v 724 1938 a(1.52)75 b(.28)-63 1974 y fi(kernel-build)128 1984 y 2 36 v 141 1974 a fp(678.9)22 b(620.9)337 1984 y 2 36 v 381 1974 a(8.5%)467 1984 y 2 36 v 479 1974 a(602.9)h(57.88)675 1984 y 2 36 v 688 1974 a(418.41)f (171.62)-75 2070 y fv(T)m(able)16 b(1:)22 b fh(P)o(erformance)16 b(of)g(sever\ al)g(common)e(b)q(enchmarks)-75 2116 y(using)19 b(t)o(w)o(o)g(approac)n(hes)h (to)f(consistency)i(managemen)l(t)f(on)-75 2161 y(t)o(w)o(o)f(v)o(ersions)h (of)g(the)g(Mac)o(h)g(3.0)e(k)o(ernel)j(\(v)n(ersion)g(MK67\))-75 2206 y(and) 14 b(Unix)f(server)i(\(v)n(ersion)g(UX28\).)-75 2335 y 396 2 v -29 2397 a fj (1)-11 2408 y fp(This)g(v)o(ersion)f(deriv)o(es)f(its)j(cac)o(he)e(manageme)o (n)o(t)e(p)q(olicy)i(from)g(an)-75 2444 y(earlier)9 b(v)o(ersion)h(of)g(Mac)o (h)h(w)o(ork)o(ed)f(on)g(b)o(y)g(one)h(of)f(this)g(pap)q(er's)g(authors)-75 2480 y(while)h(at)g(the)g(Univ)o(ersit)o(y)f(of)h(Utah.)-29 2542 y fj(2)-11 2553 y fp(The)h(\014rst)g(run,)g(whic)o(h)h(re\015ects)e(p)q(erformanc)o(e)f (on)i(a)h(cold)f(instruc-)-75 2589 y(tion,)f(data,)f(and)h(\014le)g(system)f (bu\013er)h(cac)o(he,)f(to)q(ok)h(sligh)o(tly)e(longer)i(due)-75 2625 y(to)g (increased)e(\014le)i(system)f(read)h(activit)o(y)m(.)1013 -33 y fr(3)69 b (A)19 b(mo)r(del)f(for)i(virtually)e(indexed)1116 35 y(cac)n(he)k(managemen)n (t)1013 121 y fv(The)f(previous)g(section)h(en)o(umerated)e(di\013erent)h(sit\ uations)1013 166 y(that)15 b(arise)h(in)f(consistency)i(managemen)l(t)e(for)h (virtually)e(in-)1013 212 y(dexed)f(write-back)g(cac)o(hes.)19 b(There)14 b (are)f(cases)h(where)h(cac)o(hes)1013 257 y(need)k(to)f(b)q(e)h(\015ushed)g (or)f(purged)h(when)g(the)g(inconsistency)1013 302 y(is)g(created)i(\(write)f (access)h(to)f(an)f(alias,)h(DMA\).)f(In)g(other)1013 348 y(cases,)12 b(the)f (\015ush)g(or)g(purge)g(can)g(b)r(e)g(dela)n(y)o(ed)g(\(remo)n(v)o(e)g(a)g (map-)1013 393 y(ping\).)17 b(Finally)-6 b(,)13 b(in)e(other)i(cases,)h(the)f (\015ush)g(or)f(purge)h(can)f(b)r(e)1013 438 y(a)n(v)o(oided)h(altogether)g (\(virtual)f(addresses)j(align\).)i(These)d(sit-)1013 484 y(uations)i(also)g (include)h(a)f(large)h(n)o(um)m(b)q(er)h(of)e(cases)i(that)f(can)1013 529 y (b)q(e)d(handled)g(sp)q(ecially)f(to)h(impro)m(v)o(e)g(p)q(erformance.)1054 574 y(The)j(problems)f(in)o(tro)q(duced)i(b)o(y)f(aliases,)f(new)i(mappings) 1013 620 y(and)h(DMA-based)i(I/O)f(can)g(b)q(e)g(distilled)f(in)o(to)h(the)g (single)1013 665 y(problem)g(of)i(ensuring)g(that)g(the)h(memory)c(system)j (nev)o(er)1013 710 y(transfers)e(an)g(inconsisten)o(t)g(v)n(alue)f(to)g(eithe\ r)i(the)f(CPU)g(or)1013 756 y(a)13 b(DMA)h(device.)1054 801 y(In)19 b(this)h (section)g(w)o(e)g(present)f(a)h(consistency)g(model)f(for)1013 846 y(a)e(vir\ tually)f(indexed)i(cache)g(that)g(allo)m(ws)g(us)g(to)f(solv)o(e)h(this)1013 892 y(problem.)e(The)e(model)f(expresses)j(the)e(consistency)h(state)g(of) 1013 937 y(eac)o(h)d(cache)g(line)g(with)g(resp)r(ect)h(to)f(virtual)g(and)g (ph)o(ysical)f(ad-)1013 982 y(dresses.)29 b(T)m(ransitions)17 b(b)q(et)o(w)o (een)h(consistency)h(states)f(o)q(ccur)1013 1028 y(as)g(a)g(result)i(of)d(op) q(erations)i(applied)f(to)g(the)i(memory)c(sys-)1013 1073 y(tem)11 b(b)o(y)h (the)h(CPU)g(and)f(devices.)19 b(W)l(e)13 b(de\014ne)g(the)h(states)f(and) 1013 1118 y(transitions)f(in)g(such)g(a)h(w)n(a)o(y)f(as)h(to)f(preven)o(t)h (the)g(detection)h(of)1013 1164 y(data)g(in)g(an)g(inconsisten)o(t)h(state,)g (allo)m(wing)f(us)h(to)f(dela)o(y)g(and)1013 1209 y(sometimes)e(omit)h(cache) i(purge)g(and)f(\015ush)i(op)q(erations.)k(W)m(e)1013 1254 y(also)13 b(use)h (this)g(mo)o(del)g(to)f(describ)s(e)h(the)g(b)q(eha)o(vior)f(and)h(cac)o(he) 1013 1300 y(managem)o(en)m(t)k(requiremen)o(ts)h(for)f(several)g(other)h(cac) o(he)g(ar-)1013 1345 y(c)o(hitectures.)1013 1456 y fo(3.1)55 b(A)19 b(restate\ men)l(t)f(of)h(the)f(problem)1013 1528 y fv(A)23 b(correctly)h(functioning)e (memory)f(system)i(m)m(ust)h(nev)o(er)1013 1573 y(transfer)12 b(stale)f(data) g(to)g(either)h(the)g(CPU)g(or)f(a)g(DMA-device.)1013 1619 y(Because)h(data)f (is)g(k)o(ept)h(only)e(in)g(memory)f(or)i(the)h(cac)o(he,)g(stale)1013 1664 y (data)h(ma)m(y)h(b)q(e)g(transferred)i(for)e(only)f(t)o(w)o(o)g(reasons:)1042 1742 y(1.)21 b(Memory)c(is)h(stale)h(with)f(resp)r(ect)h(to)f(the)h(cache.)32 b(The)1096 1787 y(most)15 b(recen)q(tly)i(written)g(data)g(is)g(not)g(in)f (memory)-6 b(.)28 b(In)1096 1832 y(the)10 b(case)h(of)e(a)h(CPU)g(access,)i (the)f(most)d(recen)q(tly)h(written)1096 1878 y(data)18 b(ma)m(y)h(b)r(e)g (in)g(a)g(cac)o(he)h(line)e(other)i(than)f(the)h(one)1096 1923 y(b)q(eing)e (accessed.)35 b(In)18 b(the)h(case)h(of)e(DMA)g(access,)j(the)1096 1968 y(mos\ t)12 b(recen)q(tly)h(written)i(data)e(ma)m(y)h(b)q(e)h(in)e(the)h(cache.)1042 2047 y(2.)21 b(The)d(cac)o(he)g(is)g(stale)g(with)f(resp)r(ect)i(to)e(memory) -6 b(.)30 b(The)1096 2092 y(most)14 b(recently)i(written)g(data)f(is)h(in)f (memory)-6 b(,)15 b(but)h(the)1096 2137 y(cac)o(he)j(is)f(returning)h(stale)g (data,)f(either)h(to)g(the)g(CPU)1096 2183 y(\(in)f(the)h(case)g(of)f(a)g(CPU) g(access\))j(or)d(to)g(memory)e(\(in)1096 2228 y(the)e(case)h(of)e(a)h(cac)o (he)h(write-bac)o(k\).)1013 2306 y(W)l(e)f(can)h(solv)n(e)g(b)q(oth)g(problem\ s)e(b)o(y)h(k)o(eeping)h(trac)o(k)f(of)g(cac)o(he)1013 2351 y(lines)e(that)g (are)h(stale,)f(and)g(b)o(y)g(ensuring)h(that)f(stale)g(lines)h(are)1013 2397 y(nev)o(er)h(transferred)i(out)e(of)f(the)h(cache.)1013 2508 y fo(3.2)55 b (A)19 b(solution)f(to)h(the)f(problem)1013 2580 y fv(F)l(or)e(an)o(y)g(virtua\ l)f(address,)j(a)e(cac)o(he)h(line)e(can)i(b)q(e)g(in)e(one)i(of)1013 2625 y (four)11 b(states:)17 b(empt)o(y)l(,)11 b(presen)q(t,)g(dirt)o(y)m(,)g(or)g (stale)h(\(E,P)l(,D)f(or)g(S\).)p eop %%Page: 7 7 bop -75 -46 a fv(An)16 b(empt)n(y)f(cac)o(he)h(line)f(do)q(es)h(not)g(con)o (tain)f(the)h(data)f(at)g(the)-75 -1 y(virtual)g(address)i(that)f(w)o(as)g (used)g(to)g(select)h(the)g(cac)o(he)f(line;)-75 44 y(an)10 b(access)i(throug\ h)e(that)g(virtual)f(address)i(results)g(in)f(a)f(cache)-75 90 y(miss)j(and)h (a)f(v)n(alue)h(b)q(eing)g(transferred)i(from)c(main)g(memory)-6 b(.)-75 135 y (A)15 b(present)g(line)f(is)h(one)g(that)g(con)o(tains)f(the)i(correct)g(data) f(at)-75 180 y(the)h(virtual)f(address.)24 b(A)16 b(dirt)n(y)g(line)f(is)g (lik)n(e)h(a)f(presen)q(t)g(line,)-75 226 y(except)g(that)g(the)f(line)g(has) g(b)q(een)h(written)g(b)o(y)f(the)g(CPU)h(and)-75 271 y(ma)m(y)g(therefore)h (b)q(e)f(inconsistent)g(with)f(resp)s(ect)h(to)g(memory)-75 316 y(or)f(anothe\ r)g(cache)g(line.)k(A)c(stale)g(line)f(is)h(one)g(for)g(whic)o(h)g(the)-75 362 y(data)d(at)g(the)h(cac)o(hed)g(ph)o(ysical)f(address)i(is)e(inconsisten)o (t)h(with)-75 407 y(a)h(more)f(recen)q(tly)h(written)g(v)o(ersion)h(either)g (in)f(memory)e(or)i(in)-75 452 y(another)h(cache)g(line.)-33 499 y(Six)f(ev)o (en)o(ts)i(can)f(c)o(hange)g(the)h(consistency)g(state)g(of)e(cache)-75 544 y (lines)e(with)g(resp)s(ect)h(to)f(a)g(virtual)g(address.)18 b(These)13 b(are) f fq(CPU-)-75 589 y(r)m(e)n(ad,)19 b(CPU-write,)d(DMA-r)n(e)n(ad,)i(DMA-write\ ,)f(Pur)n(ge,)h fv(and)-75 635 y fq(Flush)p fv(.)g(The)12 b(\014rst)h(four)f (op)q(erations)h(can)f(create)i(inconsisten-)-75 680 y(cies,)g(while)g(the)g (last)g(t)o(w)o(o)f(can)h(resolv)o(e)h(them.)-33 727 y(Figure)f(2)h(en)o(umer\ ates)g(the)g(state)g(transitions)g(that)f(m)n(ust)-75 772 y(o)q(ccur)i(during) f(eac)o(h)g(op)q(eration)g(in)f(order)i(to)f(ensure)h(consis-)-75 817 y(tency) n(.)h(The)d(\014rst)g(column)d(names)i(the)h(op)q(erations)f(that)g(can)-75 863 y(b)q(e)h(applied)f(to)g(a)g(target)h(virtual)e(address.)20 b(The)13 b (second)i(col-)-75 908 y(umn)f(describ)s(es)i(the)g(transitions)g(that)f(m)n (ust)h(o)q(ccur)h(for)e(the)-75 953 y(target)k(cac)o(he)g(line,)f(dep)r(endin\ g)g(on)g(the)h(target)f(line's)g(cur-)-75 999 y(rent)f(state.)28 b(The)18 b (target)f(line)g(is)g(the)h(one)f(selected)i(b)o(y)e(the)-75 1044 y(cache)10 b (index)h(function)f(for)g(the)h(target)f(virtual)g(address.)18 b(The)-75 1089 y(third)13 b(column)e(describ)s(es)j(the)f(transitions)g(that)g(m)n(ust)g(o)q (ccur)-75 1135 y(for)20 b(all)f(other)i(cac)o(he)g(lines)f(whic)o(h)g(share)h (the)g(same)e(map-)-75 1180 y(ping)14 b(as)h(the)g(target)h(virtual)e(address) i(but)f(are)g(not)g(aligned.)-75 1225 y(T)m(ransitions)j(labeled)h(with)f fq (pur)n(ge)g fv(and)g fq(\015ush)i fv(indicate)e(the)-75 1270 y(cache)e(consis\ tency)h(op)q(eration)e(whic)o(h)h(is)f(required)h(to)g(force)-75 1316 y(the)e (transition.)-33 1362 y(Initially)-6 b(,)10 b(at)g(p)q(o)o(w)n(er)h(up,)f(all) f(cac)o(he)h(lines)g(for)f(all)g(virtual)g(ad-)-75 1408 y(dresses)14 b(are)d (in)g(the)h(empt)n(y)g(state)g(\(the)g(cac)o(he)g(can)g(b)q(e)g(purged)-75 1453 y(to)k(ensure)j(this\).)26 b(An)o(y)16 b(op)q(eration)h(that)g(can)f(mod\ ify)g(state)-75 1498 y(m)m(ust)j(b)q(e)f(caugh)o(t)f(and)h(acted)g(up)r(on)f (b)q(efore)h(the)h(op)q(eration)-75 1544 y(tak)o(es)12 b(place,)f(and)h(the)g (requisite)g(state)g(transitions)f(m)m(ust)h(o)q(c-)-75 1589 y(cur)k(atomical\ ly)-6 b(.)24 b(This)15 b(guaran)o(tees,)i(for)e(example,)g(that)h(an)-75 1634 y(empt)n(y)e(line)f(is)g(not)g(mark)n(ed)h(present)g(and)f(then)i(read)f(b)q (efore)-75 1680 y(dirt)o(y)j(data)g(in)g(another)g(similarly)e(mapp)o(ed)j (line)f(has)g(b)r(een)-75 1725 y(\015ushed)e(to)f(memory)-6 b(.)-33 1771 y (A)12 b(CPU-read)i(through)f(a)f(cache)h(line)f(in)h(the)g(empt)n(y)g(state) -75 1817 y(m)m(ust)19 b(cause)g(that)e(cache)h(line)f(to)h(en)o(ter)h(the)f (presen)q(t)g(state)-75 1862 y(\(E)c fg(\000)-7 b(!)13 b fv(P\),)i(indicating) f(the)i(data's)f(presence)i(in)e(the)g(cache)-75 1907 y(at)j(the)h(particular) f(line.)30 b(T)m(o)18 b(ensure)i(that)e(the)h(previously)-75 1953 y(empt)n (y)13 b(line)g(returns)h(the)g(most)e(recently)h(written)g(data,)g(an)o(y)-75 1998 y(similarly)e(mapp)o(ed)j(but)g(unaligned)f(cac)o(he)h(line)f(in)h(the)g (dirt)o(y)-75 2043 y(state)23 b(m)m(ust)f(b)r(e)g(\015ushed)h(to)e(main)f(mem\ ory)-6 b(,)23 b(lea)o(ving)e(the)-75 2105 y(\015ushed)16 b(line)e(empt)n(y)g (\(D)333 2080 y ff(f)s(lush)341 2105 y fg(\000)-6 b(!)20 b fv(E\).)g(A)15 b (CPU-read)g(of)f(a)g(stale)-75 2151 y(line)f(requires)j(that)d(the)i(line)e (\014rst)i(b)q(e)g(purged.)-33 2197 y(A)g(CPU-write)g(forces)h(an)f(empt)n (y)m(,)g(present,)g(or)g(dirt)o(y)g(line)-75 2242 y(to)h(en)o(ter)i(the)e(dir\ t)o(y)g(state)i(\([E)p fe(;)6 b fv(P)p fe(;)h fv(D)o(])15 b fg(\000)-6 b(!)15 b fv(D\).)25 b(Other)17 b(sim-)-75 2288 y(ilarly)k(mapped)i(but)g(unaligned)f (cache)h(lines)g(not)f(in)h(the)-75 2333 y(empt)n(y)18 b(state)h(m)m(ust)g (en)o(ter)g(the)g(stale)f(state)h(\([P)p fe(;)7 b fv(S])18 b fg(\000)-7 b(!) 18 b fv(S\))-75 2397 y(or)13 b(the)g(empt)n(y)f(state)i(\(D)330 2372 y ff(f)s (lush)339 2397 y fg(\000)-7 b(!)20 b fv(E\).)e(As)13 b(with)f(a)h(CPU-read,)g (a)-75 2443 y(CPU-write)h(to)g(a)g(stale)g(line)f(requires)i(purging.)-33 2489 y(DMA-read)f(and)f(DMA-write)h(are)h(similar)c(to)j(CPU-read)-75 2534 y(and) 21 b(CPU-write,)i(resp)r(ectively)l(.)40 b(Their)21 b(similarit)l(y)g(is)g (re-)-75 2580 y(v)o(ealed)14 b(b)n(y)g(the)g(set)h(of)e(equiv)m(alen)o(t)h (transitions)f(for)g(similarly)-75 2625 y(mapped)19 b(but)f(unaligned)g(cache) h(lines)f(for)g(CPU-read)i(and)1048 0 y fd(Op)r(eration)1253 12 y 2 42 v 1359 0 a(T)l(arget)1573 12 y 2 42 v 1634 0 a(All)14 b(other)g(similarly)1056 41 y (on)g(target)1253 54 y 2 42 v 1369 41 a(cac)o(he)1573 54 y 2 42 v 1599 41 a (mapp)r(ed)f(but)g(unaligned)1071 83 y(address)1253 95 y 2 42 v 1384 83 a(lin\ e)1573 95 y 2 42 v 1699 83 a(cac)o(he)g(lines)1013 97 y 990 2 v 1253 139 a 2 42 v 320 w 2 42 v 1049 168 a(CPU-read)1253 180 y 2 42 v 1344 168 a(E)g fc(\ \000)-7 b(!)14 b fd(P)1573 180 y 2 42 v 1718 168 a(E)f fc(\000)-6 b(!)13 b fd (E)1253 222 y 2 42 v 1344 209 a(P)g fc(\000)-7 b(!)14 b fd(P)1573 222 y 2 42 v 1718 209 a(P)f fc(\000)-6 b(!)13 b fd(P)1253 279 y 2 58 v 1341 266 a(D)g fc (\000)-7 b(!)14 b fd(D)1573 279 y 2 58 v 1708 266 a(D)1750 243 y fb(f)s(lush) 1759 266 y fc(\000)-7 b(!)22 b fd(E)1253 330 y 2 51 v 1280 317 a(S)1314 294 y fb(pur)r(g)q(e)1324 317 y fc(\000)-7 b(!)23 b fd(E)13 b fc(\000)-7 b(!)13 b fd (P)1573 330 y 2 51 v 1723 317 a(S)g fc(\000)-6 b(!)13 b fd(S)1253 371 y 2 42 v 320 w 2 42 v 1043 400 a(CPU-write)1253 413 y 2 42 v 1342 400 a(E)g fc(\000)-6 b(!)13 b fd(D)1573 413 y 2 42 v 1718 400 a(E)g fc(\000)-6 b(!)13 b fd(E)1253 454 y 2 42 v 1342 442 a(P)g fc(\000)-6 b(!)13 b fd(D)1573 454 y 2 42 v 1721 442 a(P)g fc(\000)-7 b(!)13 b fd(S)1253 512 y 2 58 v 1341 499 a(D)g fc(\000) -7 b(!)14 b fd(D)1573 512 y 2 58 v 1708 499 a(D)1750 476 y fb(f)s(lush)1759 499 y fc(\000)-7 b(!)22 b fd(E)1253 562 y 2 51 v 1279 550 a(S)1313 526 y fb (pur)r(g)q(e)1322 550 y fc(\000)-6 b(!)22 b fd(E)13 b fc(\000)-7 b(!)14 b fd (D)1573 562 y 2 51 v 1723 550 a(S)f fc(\000)-6 b(!)13 b fd(S)1253 604 y 2 42 v 320 w 2 42 v 1044 633 a(DMA-read)1253 645 y 2 42 v 1344 633 a(E)g fc(\000)-7 b (!)14 b fd(E)1573 645 y 2 42 v 1718 633 a(E)f fc(\000)-6 b(!)13 b fd(E)1253 687 y 2 42 v 1344 674 a(P)g fc(\000)-7 b(!)14 b fd(P)1573 687 y 2 42 v 1718 674 a(P)f fc(\000)-6 b(!)13 b fd(P)1253 744 y 2 58 v 1334 732 a(D)1376 708 y fb(f)s(lush)1385 732 y fc(\000)-7 b(!)22 b fd(E)1573 744 y 2 58 v 1708 732 a (D)1750 708 y fb(f)s(lush)1759 732 y fc(\000)-7 b(!)22 b fd(E)1253 786 y 2 42 v 1349 773 a(S)13 b fc(\000)-7 b(!)14 b fd(S)1573 786 y 2 42 v 1723 773 a(S)f fc(\000)-6 b(!)13 b fd(S)1253 827 y 2 42 v 320 w 2 42 v 1037 856 a(DMA-write) 1253 869 y 2 42 v 1344 856 a(E)g fc(\000)-7 b(!)14 b fd(E)1573 869 y 2 42 v 1718 856 a(E)f fc(\000)-6 b(!)13 b fd(E)1253 910 y 2 42 v 1346 898 a(P)g fc (\000)-6 b(!)13 b fd(S)1573 910 y 2 42 v 1721 898 a(P)g fc(\000)-7 b(!)13 b fd (S)1253 961 y 2 51 v 1333 949 a(D)1375 925 y fb(pur)r(g)q(e)1385 949 y fc(\ \000)-7 b(!)22 b fd(E)1573 961 y 2 51 v 1707 949 a(D)1750 925 y fb(pur)q(g)q (e)1759 949 y fc(\000)-7 b(!)23 b fd(E)1253 1003 y 2 42 v 1349 990 a(S)13 b fc (\000)-7 b(!)14 b fd(S)1573 1003 y 2 42 v 1723 990 a(S)f fc(\000)-6 b(!)13 b fd(S)1253 1044 y 2 42 v 320 w 2 42 v 1084 1073 a(Purge)1253 1086 y 2 42 v 1344 1073 a(E)g fc(\000)-7 b(!)14 b fd(E)1573 1086 y 2 42 v 1718 1073 a(E)f fc(\ \000)-6 b(!)13 b fd(E)1253 1127 y 2 42 v 1344 1115 a(P)g fc(\000)-7 b(!)14 b fd(E)1573 1127 y 2 42 v 1718 1115 a(P)f fc(\000)-6 b(!)13 b fd(P)1253 1169 y 2 42 v 1342 1156 a(D)h fc(\000)-7 b(!)13 b fd(E)1573 1169 y 2 42 v 1715 1156 a (D)g fc(\000)-6 b(!)13 b fd(D)1253 1210 y 2 42 v 1346 1198 a(S)h fc(\000)-7 b (!)13 b fd(E)1573 1210 y 2 42 v 1723 1198 a(S)g fc(\000)-6 b(!)13 b fd(S)1253 1252 y 2 42 v 320 w 2 42 v 1086 1281 a(Flush)1253 1294 y 2 42 v 1344 1281 a (E)g fc(\000)-7 b(!)14 b fd(E)1573 1294 y 2 42 v 1718 1281 a(E)f fc(\000)-6 b (!)13 b fd(E)1253 1335 y 2 42 v 1344 1323 a(P)g fc(\000)-7 b(!)14 b fd(E)1573 1335 y 2 42 v 1718 1323 a(P)f fc(\000)-6 b(!)13 b fd(P)1253 1377 y 2 42 v 1342 1364 a(D)h fc(\000)-7 b(!)13 b fd(E)1573 1377 y 2 42 v 1715 1364 a(D)g fc(\ \000)-6 b(!)13 b fd(D)1253 1418 y 2 42 v 1346 1406 a(S)h fc(\000)-7 b(!)13 b fd(E)1573 1418 y 2 42 v 1723 1406 a(S)g fc(\000)-6 b(!)13 b fd(S)1013 1494 y fv(T)l(able)e(2:)17 b fh(Cac)o(he)12 b(line)f(state)h(transitions.)17 b(These) c(transitions)1013 1540 y(m)m(ust)19 b(o)q(ccur)h(to)e(ensure)i(that)f(the)g (memory)d(system)i(nev)o(er)1013 1585 y(returns)12 b(inconsisten)o(t)f(data)f (to)h(either)g(the)h(CPU)f(or)f(a)h(device.)1013 1715 y fv(DMA-read,)24 b(and) e(CPU-write)h(and)f(DMA-write.)43 b(DMA)1013 1760 y(does)17 b(not)f(go)g(thro\ ugh)g(the)h(cac)o(he,)g(so)f(all)f(cac)o(he)i(lines)f(that)1013 1806 y(con)o (tain)8 b(the)i(ph)o(ysical)f(address)i(referenced)h(b)o(y)d(the)h(DMA)f(op-) 1013 1851 y(eration)15 b(share)h(the)g(same)f(transitions.)22 b(In)16 b(con)o (trast,)g(CPU-)1013 1896 y(read)d(and)f(CPU-write)i(of)e(a)h(virtual)f(addres\ s)i(a\013ect)g(the)f(tar-)1013 1942 y(get)20 b(cache)g(line)g(\(and)g(state\)) h(di\013erently)f(than)g(the)h(cac)o(he)1013 1987 y(lines)16 b(\(and)h(states\ \))h(for)e(similarly)e(mapped)j(but)g(unaligned)1013 2032 y(virtual)f(address\ es.)31 b(One)18 b(di\013erence)i(b)q(et)o(w)o(een)e(CPU-write)1013 2078 y(and) j(DMA-write)g(is)g(that)h(a)f(DMA-write)g(under)h(a)f(dirt)o(y)1013 2123 y (cac)o(he)15 b(line)f(only)g(requires)h(that)g(the)g(line)f(b)q(e)h(purged)g (rather)1013 2168 y(than)f(\015ushed,)h(since)g(the)g(DMA-write)f(will)f(caus\ e)i(the)g(data)1013 2214 y(in)e(memory)e(to)j(b)q(e)h(o)n(v)o(erwritten.)1054 2262 y(The)20 b(states)h(themselv)n(es)f(are)g(p)r(essimistic)e(with)i(resp)r (ect)1013 2308 y(to)c(consistency)i(and)e(the)h(op)q(eration)g(of)f(a)g(cache\ .)26 b(Because)1013 2353 y(w)n(e)14 b(do)e(not)h(consider)h(the)f(cache)g(rep\ lacemen)o(t)g(p)q(olicy)f(in)g(the)1013 2398 y(transitions,)19 b(it)g(is)g (p)r(ossible)g(to)g(ha)n(v)o(e)h(a)f(cac)o(he)h(line)f(in)f(the)1013 2444 y (present)c(state)h(in)f(terms)g(of)f(the)i(model,)e(y)o(et)i(not)f(ph)o(ysica\ lly)1013 2489 y(present)d(in)g(an)f(actual)h(cache)g(\(although)f(the)i(con)o (v)o(erse)g(is)f(not)1013 2534 y(p)q(ossible\).)27 b(Suc)o(h)17 b(p)q(essimis\ m)d(do)q(es)k(not)f(in\015uence)g(correct-)1013 2580 y(ness)10 b(b)q(ecause)h (a)f(\015ush)g(or)f(purge)h(of)f(a)g(ph)o(ysically)g(non-present)1013 2625 y (line)k(has)h(no)g(e\013ect)h(on)f(the)g(system.)p eop %%Page: 8 8 bop -75 -46 a fn(Correctness)14 b(of)i(the)f(state)g(transiti)o(ons)-75 26 y fv(W)l(e)k(can)f(return)h(to)f(the)g(problem)f(restatement)h(and)f(show)-75 71 y(that)10 b(the)h(state)g(transitions)f(ensure)h(a)f(correct)i(solution.)k (The)-75 117 y(transition)d(rules)i(guaran)n(tee)g(that)f(neither:)-45 193 y (1.)20 b fq(memory)15 b(is)f(stale)h(with)f(r)m(esp)o(e)n(ct)g(to)h(the)g(c)n (ache,)g(or)-45 270 y fv(2.)20 b fq(the)15 b(c)n(ache)g(is)g(stale)g(with)f (r)m(esp)n(e)n(ct)h(to)g(memory)-75 346 y fv(can)f(result)h(in)f(stale)g(data) g(b)q(eing)g(transferred)i(b)o(y)e(the)h(mem-)-75 391 y(ory)f(system)f(to)h (the)h(CPU)f(or)g(a)f(device.)-33 436 y(W)l(e)g(a)o(v)o(oid)f(the)i(\014rst)f (problem)f(b)q(ecause)j(a)e(cac)o(he)h(line)e(can-)-75 482 y(not)18 b(lea)n (v)o(e)h(the)f(empt)n(y)g(state)h(un)o(til)e(memory)e(is)j(consistent)-75 527 y(with)13 b(the)i(most)d(recen)q(t)i(up)q(date.)k(F)m(or)c(up)q(dates)g(cause\ d)h(b)o(y)f(a)-75 572 y(CPU-write,)h(consistency)i(is)e(enforced)h(b)o(y)e (the)i(\015ush)f(of)g(the)-75 618 y(dirt)o(y)h(line.)26 b(F)l(or)17 b(up)q (dates)g(caused)h(b)o(y)e(a)h(DMA-write,)f(con-)-75 663 y(sistency)k(is)f(imp\ lied)d(b)o(y)j(the)g(fact)g(that)g(the)g(DMA)g(device)-75 708 y(p)q(erformed) c(the)h(most)e(recent)i(write)f(to)g(memory)-6 b(,)15 b(and)g(that)-75 754 y (all)c(equiv)m(alen)o(tly)g(mapped)i(cac)o(he)f(lines)g(are)h(either)g(empt)n (y)e(or)-75 799 y(stale.)-33 844 y(W)l(e)j(a)n(v)o(oid)f(the)h(second)h(probl\ em)d(b)r(ecause)j(stale)f(lines)f(are)-75 890 y(nev)o(er)20 b(transferred)g (b)o(y)f(the)h(cac)o(he)f(to)g(either)h(the)f(CPU)g(or)-75 935 y(memory)-6 b (.)34 b(In)19 b(the)h(\014rst)g(case,)h(a)e(stale)h(line)f(m)m(ust)h(\014rst) g(b)q(e)-75 980 y(purged)15 b(b)q(efore)g(it)e(can)i(b)q(e)f(read)h(or)f(writ\ ten.)19 b(In)c(the)f(second)-75 1026 y(case,)j(only)f(dirt)o(y)g(data)g(can)g (ev)o(er)h(b)q(e)g(written)g(bac)o(k)f(b)o(y)g(the)-75 1071 y(cache,)k(and)f (the)h(transitions)f(for)g(CPU-write)h(and)f(DMA-)-75 1116 y(write)d(guaran)n (tee)g(that)g(data)f(corresp)r(onding)g(to)g(a)g(ph)o(ysical)-75 1162 y(addre\ ss)e(is)e(dirt)n(y)h(in)e(at)h(most)f(one)i(cac)o(he)g(line)f(\(one)g(for)g (CPU-)-75 1207 y(write,)j(zero)g(for)g(DMA-write\).)-75 1317 y fo(3.3)56 b (Application)18 b(to)g(other)g(arc)o(hitectures)-75 1390 y fv(Although)28 b (w)o(e)h(are)f(primarily)e(concerned)31 b(with)d(direct-)-75 1435 y(mapped,)g (virtually)c(indexed,)29 b(write-bac)o(k)c(caches)h(on)g(a)-75 1480 y(unipro) q(cessor,)17 b(the)e(consistency)i(model)e(can)g(b)q(e)h(applied)f(to)-75 1526 y(other)g(memory)c(system)j(arc)o(hitectures.)-33 1609 y fg(\017)20 b fq(Writ\ e-thr)m(ough)g(c)n(aches.)32 b fv(In)19 b(a)f(write-through)h(cac)o(he,)8 1655 y(memory)c(is)i(nev)o(er)h(stale)g(with)e(resp)s(ect)i(to)f(the)h(cac)o(he.)8 1700 y(Consequently)l(,)12 b(the)h(dirt)o(y)f(state)h(can)f(b)q(e)h(replaced) g(with)8 1745 y(the)d(presen)q(t)f(state,)i(and)e(all)g(redundan)o(t)h(transi\ tions)f(can)8 1791 y(b)q(e)15 b(eliminated.)k(There)d(is)f(also)f(no)g(need)i (for)f(the)g(\015ush)8 1836 y(op)q(eration.)-33 1913 y fg(\017)20 b fq(Physic) n(al)r(ly)f(indexe)n(d)g(c)n(aches.)31 b fv(With)17 b(a)h(ph)o(ysically)f(in-) 8 1958 y(dexed)10 b(cache,)g(all)e(similarly)e(mapped)k(virtual)e(addresses)8 2004 y(naturally)16 b(align)f(in)i(the)g(cac)o(he,)h(so)f(the)g(third)g(colum\ n)8 2049 y(in)h(T)l(able)g(2)f(b)r(ecomes)h(irrelev)n(an)n(t.)31 b(Only)17 b (DMA-write)8 2094 y(and)h(DMA-read)g(create)h(consistency)g(problems,)f(and)8 2140 y(those)e(are)g(handled)f(with)g(the)h(transitions)g(in)e(the)i(sec-)8 2185 y(ond)i(column.)31 b(As)19 b(with)f(a)g(virtually)f(indexed)i(cac)o(he,) 8 2230 y(write-bac)o(k)i(and)f(write-through)h(ph)o(ysically)e(indexed)8 2276 y(caches)13 b(are)g(distinguished)g(only)f(b)o(y)h(the)g(existence)i(of)d(a)8 2321 y(dirt)o(y)i(state.)-33 2398 y fg(\017)20 b fq(DMA)d(c)n(an)g(ac)n(c)n (ess)f(the)g(c)n(ache.)24 b fv(In)15 b(a)g(system)h(in)f(whic)n(h)8 2444 y (DMA)g(can)g(access)h(the)f(cache,)g(CPU-read)g(and)g(DMA-)8 2489 y(read)j (fold)e(in)n(to)h(a)g(single)g fq(r)m(e)n(ad)h fv(op)q(eration,)f(and)g(CPU-) 8 2534 y(write)g(and)f(DMA-write)g(fold)f(in)o(to)h(a)g(single)g fq(write)f fv (op-)8 2580 y(eration.)j(The)c(transitions)g(on)f fq(r)n(e)n(ad)h fv(and)f fq (write)g fv(are)h(the)8 2625 y(same)f(as)h(for)g(CPU-read)g(and)g(CPU-write)g (in)g(T)l(able)g(2.)1054 -46 y fg(\017)21 b fq(Set-asso)n(ciative)13 b(c)n (aches.)18 b fv(F)l(or)12 b(a)g(set-asso)r(ciativ)n(e)g(cache,)1096 -1 y(the) 17 b(consistency)i(rules)f(remain)e(the)i(same)f(since)h(con-)1096 44 y(siste\ ncy)12 b(within)f(a)g(set)h(is)f(ensured)i(b)o(y)e(hardw)o(are.)18 b(That) 1096 90 y(is,)11 b(the)i(ph)o(ysical)e(tags)h(asso)q(ciated)g(with)g(eac)o (h)g(en)o(try)h(are)1096 135 y(guaran)n(teed)i(to)f(b)q(e)g(unique)g(within)f (a)h(set.)1054 220 y fg(\017)21 b fq(Cache-c)n(oher)n(ent)d(multipr)m(o)n(c)n (essors.)30 b fv(The)18 b(cac)o(hes)h(in)e(a)1096 265 y(cac)o(he-coheren)q (t)e(m)n(ultiprocessor)i(can)e(b)r(e)g(view)o(ed)h(as)f(a)1096 310 y(distribu\ ted)c(set-asso)r(ciativ)n(e)g(cac)o(he.)18 b(Equiv)m(alen)o(t)10 b(cac)o(he) 1096 356 y(lines)j(from)f(each)h(pro)r(cessor)i(constitute)g(an)e(elemen)o (t)h(of)1096 401 y(a)k(set,)j(while)e(hardw)o(are)g(ensures)i(in)o(ter-cache) e(\(in)o(tra-)1096 446 y(set\))h(consistency)n(.)35 b(As)20 b(with)g(set-asso) r(ciativ)n(e)g(caches,)1096 492 y(no)13 b(c)o(hanges)i(to)f(the)g(transition) f(rules)i(are)f(required.)1013 630 y fr(4)69 b(Implemen)n(ti)o(ng)20 b(the)i (mo)r(del)1013 719 y fv(W)l(e)d(no)o(w)f(describ)s(e)h(an)f(implemen)l(tation) g(strategy)i(for)e(the)1013 764 y(cac)o(he)c(consistency)h(model)f(describ)r (ed)g(in)f(the)i(previous)f(sec-)1013 810 y(tion.)i(Our)d(strategy)g(requires) h(that)e(the)h(hardw)o(are)g(ha)o(v)o(e)f(the)1013 855 y(follo)m(wing)h(c)o (haracteristics:)1054 948 y fg(\017)21 b fv(The)13 b(\014rst)h(address)h(with\ in)d(an)o(y)h(virtual)f(page)h(aligns)f(in)1096 993 y(the)e(cache)g(with)g (the)h(\014rst)g(address)h(of)d(an)o(y)h(other)h(virtual)1096 1038 y(page)k (if)g(and)h(only)f(if)g(all)g(addresses)j(within)d(those)h(t)o(w)o(o)1096 1084 y(virtual)d(pages)h(align.)1054 1168 y fg(\017)21 b fv(Reads)h(and)h(writes)g (to)f(individual)f(virtual)g(memory)1096 1213 y(pages)14 b(can)h(b)q(e)f(caug\ h)o(t)h(b)o(y)f(the)h(op)q(erating)f(system)g(k)n(er-)1096 1259 y(nel.)1054 1351 y(The)k(\014rst)g(requiremen)n(t)g(allo)m(ws)g(us)f(to)g(main)m(tain)g (consis-)1013 1397 y(tency)22 b(state)f(on)g(a)g(\\cac)o(he)h(page,")g(rather) g(than)f(a)g(cac)o(he)1013 1442 y(line,)14 b(basis.)21 b(A)16 b(cac)o(he)g (page)f(is)f(the)i(set)g(of)e(cache)h(lines)g(on)o(to)1013 1487 y(whic)n(h)21 b(the)g(cache)f(index)h(function)f(maps)f(all)h(virtual)f(ad-)1013 1533 y(dre\ sses)14 b(within)d(a)g(virtual)g(page.)17 b(A)12 b(cache)g(page)g(is)f(the)i (same)1013 1578 y(size)19 b(as)g(a)g(virtual)f(page,)h(and)g(a)f(virtually)g (indexed)h(cac)o(he)1013 1623 y(con)o(tains)e fe(n)h fv(cac)o(he)g(pages,)h (where)g fe(n)e fv(is)h(the)g(cache)g(size)h(di-)1013 1669 y(vided)13 b(b)o (y)h(the)g(page)g(size.)1054 1715 y(All)k(aligned)f(virtual)h(pages)h(map)e (in)o(to)h(the)h(same)f(cac)o(he)1013 1761 y(page.)h(With)14 b(cac)o(he)h(pag\ es,)f(all)g(cac)o(he)h(lines)f(within)g(a)g(cac)o(he)1013 1806 y(page)k(are)i (de\014ned)g(to)e(ha)o(v)o(e)h(the)g(same)f(consistency)j(state.)1013 1851 y (This)12 b(enables)i(the)f(use)h(of)e(standard)i(virtual)e(memory)e(hard-) 1013 1897 y(w)n(are)19 b(to)f(implem)o(en)m(t)g(the)h(state)f(transitions,)h (and)f(reduces)1013 1942 y(the)13 b(amoun)m(t)h(of)e(cache)i(state)g(informat\ ion)c(from)i fe(O)q fv(\(n)o(um)m(b)q(er)1013 1987 y(of)h(cac)o(he)h(lines)g fg(\002)g fv(n)o(um)m(b)r(er)g(of)f(virtual)g(addresses)j(in)d(use\))i(to) 1013 2033 y fe(O)p fv(\(n)o(um)n(b)q(er)e(of)e(cache)h(pages)g fg(\002)h fv (n)o(um)m(b)q(er)g(of)e(ph)o(ysical)h(pages\).)1013 2078 y(The)g(reduction)h (in)e(state)i(is)f(b)q(ecause)i(of)d(the)i(larger)f(co)o(v)n(erage)1013 2123 y (of)k(a)h(cache)g(page,)h(and)f(b)q(ecause)i(cac)o(he)f(state)g(information) 1013 2169 y(is)d(required)h(only)e(for)h(pages)g(that)h(are)f(ph)o(ysically)f (resident.)1013 2214 y(A)e(virtual)f(memory)e(system)j(already)g(denies)h(acc\ ess)g(to)f(non-)1013 2259 y(resident)j(pages,)i(so)e(cache)h(consistency)h (for)f(these)h(pages)f(is)1013 2305 y(not)d(an)h(issue.)1054 2352 y(The)h(sec\ ond)h(requiremen)o(t)f(guaran)o(tees)h(that)f(w)o(e)g(can)h(de-)1013 2397 y (tect)d(cache)f(page)h(state)g(c)o(hanges,)g(and)f(that)h(w)o(e)f(can)h(prev) o(ent)1013 2442 y(stale)h(cac)o(he)g(pages)h(from)d(b)q(eing)i(accessed)i(b)o (y)e(the)g(CPU.)1054 2489 y(These)k(requiremen)o(ts)f(are)h(met)e(b)o(y)g(the) i(HP)f(9000)f(Series)1013 2534 y(700.)g(While)d(it)g(is)g(conceiv)n(able)g (that)g(one)g(could)g(build)g(a)f(vir-)1013 2580 y(tually)c(indexed)i(cache)g (for)f(whic)o(h)g(the)i(\014rst)f(assumption)e(do)q(es)1013 2625 y(not)h(hold\ ,)h(w)n(e)g(are)h(presently)e(a)o(w)o(are)h(of)f(no)g(such)h(cac)o(he,)h(nor) f(of)p eop %%Page: 9 9 bop -75 -46 a fv(an)o(y)14 b(compelling)e(reason)j(to)f(build)f(such)h(a)g (cac)o(he.)19 b(An)o(y)14 b(sys-)-75 -1 y(tem)c(with)g(a)h(memory)d(managemen) m(t)i(unit)h(should)g(b)q(e)g(able)g(to)-75 44 y(satisfy)16 b(the)h(second)h (assumption.)25 b(Consequently)l(,)16 b(no)h(sp)q(e-)-75 90 y(cial)e(hardw)o (are)h(is)g(required)h(to)e(implemen)l(t)h(the)h(algorithm.)-75 135 y(Note)12 b(that)h(if)e(the)h(hardw)o(are)h(supp)r(orts)f(m)m(ultiple)g(page)g(sizes,) -75 180 y(then)h(the)f(op)q(erating)g(system)g(m)n(ust)g(tak)o(e)g(additional) f(care)i(to)-75 226 y(ensure)18 b(that)e(a)g(cache)g(page)h(is)f(mapp)o(ed)h (only)e(b)o(y)h(similarly)-75 271 y(sized)f(virtual)e(pages.)-75 382 y fo(4.1) 56 b(The)18 b(algorithm)-75 454 y fv(The)d(cache)g(con)o(trol)f(algorithm)e (should)j(b)q(e)g(in)n(v)o(ok)o(ed)g(during)-75 500 y(an)o(y)g(op)q(eration)g (that)g(could)g(c)o(hange)g(the)h(consistency)h(state)-75 545 y(of)d(cache)h (pages.)21 b(Virtual)14 b(memory)f(protections)j(are)f(set)h(to)-75 590 y(det\ ect)k(state)g(transitions)f(during)f(CPU-reads)i(and)e(CPU-)-75 636 y(writes.) 45 621 y fl(3)88 636 y fv(Op)r(erating)e(system)f(soft)o(w)o(are)h(should)g (in)n(v)o(ok)o(e)g(the)-75 681 y(algorithm)11 b(b)q(efore)k(scheduling)e(DMA) h(op)q(erations.)-33 726 y(Pseudo-co)r(de)j(for)f(the)h(algorithm)d(is)j(sho) o(wn)g(in)f(the)h(Fig-)-75 772 y(ure)e(1.)i(As)e(input,)e(the)h(algorithm)e (tak)n(es)j(a)f(virtual)f(address,)-75 817 y(an)20 b(op)q(eration)h(t)o(yp)q (e,)h(and)e(t)o(w)o(o)h(b)q(o)q(oleans)f(whic)o(h)h(indicate)-75 862 y(whethe\ r)e(stale)e(and)g(dirt)o(y)g(cache)h(data)f(will)e(ever)j(b)q(e)f(read.)-75 908 y(The)11 b(algorithm)d(mo)o(di\014es)j(cache)g(state)g(information)d(and) i(en-)-75 953 y(sures)i(that)g(stale)f(data)f(is)h(never)g(mapped.)17 b(The) 12 b(co)q(de)g(in)e(Fig-)-75 998 y(ure)17 b(1)f(has)h(b)q(een)g(adapted)g(dir\ ectly)g(from)d(that)j(running)f(in)-75 1044 y(the)c(mac)m(hine-dep)r(endent)f (mo)o(dule)g(of)g(Mac)o(h's)g(virtual)f(mem-)-75 1089 y(ory)16 b(system)g(for) g(the)h(HP)f(9000)f(Series)j(700.)24 b(A)o(tomicit)m(y)16 b(on)-75 1134 y(a)h (unipro)q(cessor)j(is)d(guaran)o(teed)i(b)o(y)e(running)h(the)g(co)r(de)g(se-) -75 1180 y(quence)11 b(with)e(in)o(terrupts)i(disabled.)16 b(As)10 b(presen)q (ted,)g(the)h(co)q(de)-75 1225 y(is)f(not)g(safe)g(for)g(use)h(on)f(a)g(m)m (ultipro)q(cessor,)i(although)d(it)h(could)-75 1270 y(b)q(e)15 b(made)d(so)i (with)g(appropriate)g(data)f(structure)j(lo)q(c)o(king.)-75 1374 y fn(Data)f (structures)-75 1446 y fv(The)h(algorithm)e(relies)i(on)g(several)g(data)f (structures.)27 b(Eac)o(h)-75 1491 y(ph)o(ysical)14 b(page)g fe(p)g fv(in)g (the)h(system)f(is)g(represen)r(ted)h(b)o(y)f(a)g(data)-75 1536 y(structure,) g fe(P)5 b fv([)p fe(p)p fv(],)11 b(that)h(con)o(tains)g(a)g(list)f(of)g(virt\ ual)g(mappings)-75 1582 y(for)j(the)h(page,)f fe(P)5 b fv([)p fe(p)p fv(])p fe (:mappings)p fv(,)14 b(and)g(the)h(cache)f(page)h(state)-75 1627 y(for)e(that) h(page.)k(The)c(cac)o(he)g(page)g(state)g(consists)h(of)e(t)o(w)n(o)h(bit)-75 1672 y(v)o(ectors,)g fe(P)5 b fv([)p fe(p)p fv(])p fe(:mapped)11 b fv(and)i fe (P)5 b fv([)p fe(p)p fv(])p fe(:stale)p fv(,)13 b(and)f(a)g(single)h(dirt)o (y)-75 1718 y(bit,)g fe(P)6 b fv([)p fe(p)p fv(])p fe(:cache)q 13 2 v 12 w (dir)q(ty)r fv(.)-33 1763 y(Eac)o(h)21 b(bit)h(in)f(the)h(v)o(ectors)h(corres\ p)s(onds)f(to)f(a)g(particu-)-75 1808 y(lar)16 b(cache)h(page.)26 b(The)17 b (bit)f(v)o(ector)i fe(P)5 b fv([)p fe(p)p fv(])p fe(:mapped)15 b fv(indicates) -75 1854 y(whic)o(h)d(cac)o(he)h(pages)f(ha)o(v)n(e)h(b)q(een)g(mapp)o(ed)g (b)o(y)e(the)i(CPU,)f(and)-75 1899 y(therefore)18 b(whic)o(h)e(cache)h(pages) f(ma)n(y)g(con)o(tain)g(data)g(from)f(a)-75 1944 y(giv)n(en)i(ph)o(ysical)f (page)g fe(p)p fv(.)25 b(The)17 b(bit)f(v)o(ector)h fe(P)6 b fv([)p fe(p)p fv (])p fe(:stale)16 b fv(indi-)-75 1990 y(cates)e(whic)o(h)f(cache)h(pages)f (ma)m(y)g(con)o(tain)g(stale)g(data)g(from)f(a)-75 2035 y(giv)n(en)17 b(ph)o (ysical)f(page)h fe(p)p fv(.)27 b(The)17 b fe(P)5 b fv([)p fe(p)p fv(])p fe (:cache)q 13 2 v 13 w(dirty)19 b fv(bit)d(for)h(a)-75 2080 y(ph)o(ysical)e (page)g fe(p)g fv(indicates)g(that)g(the)h(ph)o(ysical)f(page)g(could)-75 2126 y(b)q(e)g(dirt)o(y)g(within)f(a)g(cache)h(page.)20 b(That)15 b(dirt)o(y)f(cac\ he)h(page)g fe(c)-75 2171 y fv(is)g(giv)n(en)g(b)o(y)f(the)i(en)o(try)f(for)f (whic)o(h)h fe(P)5 b fv([)p fe(p)p fv(])p fe(:mapped)p fv([)p fe(c)p fv(])12 b (is)j(true.)-75 2216 y(The)10 b fe(P)c fv([)p fe(p)p fv(])p fe(:cache)q 13 2 v 12 w(dir)q(ty)11 b fv(bit)f(is)f(cleared)i(when)f(the)g(dirt)o(y)f(cache)-75 2262 y(page)k(is)f(remo)n(v)o(ed)h(from)d(the)k(cac)o(he)f(with)f(either)i (a)e(\015ush)h(or)g(a)-75 2307 y(purge.)-75 2480 y 396 2 v -29 2542 a fj(3) -11 2553 y fp(The)f(algorithm)e(assumes)h(that)h(illegal)f(page)g(accesses,)h (suc)o(h)f(as)i(a)-75 2589 y(write)h(to)f(a)h(text)f(page,)h(ha)o(v)o(e)f(b)q (een)g(\014ltered)f(out)h(in)h(earlier)e(stages)h(of)-75 2625 y(the)e(k)o(ern\ el's)e(fault)i(handler.)1013 -67 y fa(CacheCon)o(tro)o(l\()o(vir)o(tua)o(l_)o (add)o(re)o(ss)16 b(target_va,)g(operation)g(op,)1267 -25 y(boolean)h(will_ov\ erwr)o(it)o(e,)f(boolean)h(need_data\))1013 16 y(begin)1013 58 y(phys_pag)o (e)36 b(p)19 b(=)h(va_to_phy)o(si)o(cal)o(_pa)o(ge)o(\(ta)o(rg)o(et_)o(va\))o (;)1013 99 y(cache_pa)o(ge)c(c)j(=)h(va_to_cac)o(he)o(_pa)o(ge\()o(ta)o(rge)o (t_)o(va\))o(;)1013 182 y(if)e(\(P[p].cach)o(e_d)o(irt)o(y\))e(then)1091 224 y (cache_pag)o(e)h(w)i(=)g(find_mappe)o(d_c)o(ac)o(he_)o(pa)o(ge\()o(P[p)o(]\)) o(;)1091 265 y(/*)g(Clean)e(cache)h(if)h(dirty)f(page)g(is)h(not)f(target)37 b (*/)1091 307 y(if)19 b(\(op)f(==)h(DMA_WRITE)d(OR)j(op)g(==)g(DMA_READ)d(OR)j (w)g(!=)g(c\))1091 349 y(then)f(if)h(\(need_dat)o(a\))d(then)1248 390 y(flush\ _cac)o(he_)o(pa)o(ge\()o(w\);)1169 432 y(else)1248 473 y(purge_cac)o(he_)o (pa)o(ge\()o(w\);)1169 515 y(end)1169 556 y(P[p].cache_)o(di)o(rty)g(=)j(FALS\ E;)1091 598 y(end)1013 639 y(end)1013 723 y(if)f(\(\(op)g(==)h(CPU_READ)e(OR) i(op)f(==)h(CPU_WRITE\))1091 764 y(AND)f(P[p].stale[)o(c])o(\))f(then)1091 806 y(if)i(\(NOT)f(will_over)o(wri)o(te)o(\))f(then)1150 847 y(purge_cac)o(he_)o (pa)o(ge\()o(c\))o(;)1091 889 y(end)1091 930 y(P[p].stal)o(e[c)o(])g(=)i(FALS\ E;)1013 972 y(end)1013 1055 y(/*)f(DMA)h(input)e(operations)f(and)j(write)e (operations)f(force)1032 1097 y(*)j(all)g(mapped)e(and)i(stale)e(cache)h(page\ s)g(to)g(stale,)g(and)1032 1138 y(*)h(all)g(mapped)e(pages)h(to)h(unmapped.)d (*/)1013 1180 y(if)i(\(op)h(==)g(DMA_WRITE)d(OR)j(op)f(==)h(CPU_WRITE\))d(the\ n)1091 1221 y(P[p].stal)o(e)h(=)i(bitwise_o)o(r\(P)o([p])o(.m)o(app)o(ed)o (,)e(P[p].stal)o(e\))o(;)1091 1263 y(bitwise_c)o(lea)o(r\(P)o([p)o(].m)o(ap)o (ped)o(\);)1091 1304 y(/*)i(For)f(a)h(write,)f(mark)g(the)g(target)g(cache)f (page)1111 1346 y(*)i(as)g(not)f(stale,)f(dirty,)h(and)g(mapped.)f(*/)1091 1387 y(if)i(\(op)f(==)h(CPU_WRITE\))d(then)1169 1429 y(P[p].stale[)o(c])g(=)j (FALSE;)1169 1471 y(P[p].cache_)o(di)o(rty)d(=)j(TRUE;)1169 1512 y(P[p].mappe\ d)o([c)o(])e(=)i(TRUE;)1091 1554 y(end)1013 1595 y(end)1013 1678 y(if)f(\(op) h(==)g(CPU_READ\))d(then)1091 1720 y(P[p].mapp)o(ed[)o(c])g(=)j(TRUE;)1013 1761 y(end)1013 1844 y(/*)f(Set)h(mappings)d(for)j(all)f(virtual)f(addresses) f(that)1032 1886 y(*)j(map)g(to)g(p)g(to)g(prevent)e(inconsist)o(en)o(cie)o (s)f(from)1032 1928 y(*)j(being)f(perceived,)e(to)j(detect)e(subsequen)o(t)g (accesses,)1032 1969 y(*)i(and)g(to)g(allow)e(the)i(current)e(operation)f(to) j(complete.)o(*/)1013 2011 y(foreach)d(\(virtual_ad)o(dr)o(ess)g(v)j(in)g(P[p\ ].mapp)o(ing)o(s\))d(do)1091 2052 y(c)j(=)g(va_to_cache)o(_p)o(age)o(\(v)o (\);)1091 2094 y(if)g(\(P[p].sta)o(le[)o(c])o(\))e(then)1169 2135 y(set_prote\ ct)o(io)o(n\(v)o(,)f(NO_ACCESS\);)1091 2177 y(else)i(if)h(\(NOT)f(P[p].mapp)o (ed[)o(c]\))e(then)1169 2218 y(set_protect)o(io)o(n\(v)o(,)g(NO_ACCESS\);) 1091 2260 y(else)i(if)h(\(op)f(==)h(CPU_WRITE\))d(then)1169 2302 y(set_protec\ t)o(io)o(n\(v)o(,)g(READ_WRITE_)o(AC)o(CES)o(S\);)1091 2343 y(else)i(if)h(\(o\ p)f(==)h(CPU_READ\))d(then)1169 2385 y(set_protect)o(io)o(n\(v)o(,)g(READONLY\ _AC)o(CE)o(SS\))o(;)1091 2426 y(end)1013 2468 y(end)1013 2509 y(end)i(CacheCo\ nt)o(rol)o(.)1013 2608 y fv(Figure)e(1:)23 b fh(Pseudo-co)r(de)17 b(sequence) i(implem)o(en)m(ting)d(consis-)1013 2653 y(tency)e(for)g(a)f(virtually)g(inde\ xed)h(write-back)f(cache.)p eop eos end TeXDict begin bos 300 @start /fa df[< 3F807FC070E0207000700FF03FF07870E070E070E07070F03FFE1F3E>15 14 2 0 18]97 dc[< 00F800F8003800380038003807B81FF8387870386038E038E038E038E0386038707838781FFE0F BE>15 20 1 0 18]100 dc[<07801FE0387070706038E038FFF8FFF8E0006000703838381FF007 C0>13 14 2 0 18]101 dc[<06000F000F000600000000000000FF00FF00070007000700070007 0007000700070007000700FFF0FFF0>12 21 3 0 18]105 dc[13 20 2 0 18]108 dc[15 14 1 0 18]110 dc[<0F 803FE038E07070E038E038E038E038E038F078707038E03FE00F80>13 14 2 0 18]111 dc[14 14 2 0 18]114 dc[<06 000E000E000E007FF8FFF80E000E000E000E000E000E000E000E380E380E3807F003C0>13 18 1 0 18]116 dc[15 14 1 0 18]118 dc[15 14 1 0 18]119 dc dfe /fb df[9 3 3 -6 14]45 dc[<03CC0E2E181C381C301C70 1CE038E038E038E038C072C072C07260F261341E18>15 16 4 0 20]97 dc[<7E000E000E000E 001C001C001C001C00380038003BC03C307830701870187018E038E038E038E038C070C060C0E0 60C063801E00>13 26 4 0 18]98 dc[<01F006080C181838301070006000E000E000E000E000 E008E010602030C01F00>13 16 4 0 18]99 dc[<001F80000380000380000380000700000700 000700000700000E00000E0003CE000E2E00181C00381C00301C00701C00E03800E03800E03800 E03800C07200C07200C0720060F2006134001E1800>17 26 4 0 20]100 dc[<01E006181C0838 0870087010FFE0E000E000E000E000E0086010602030C01F00>13 16 4 0 18]101 dc[<000700 001980001B80003B0000300000300000700000700000700000700007FF0000E00000E00000E000 00E00000E00001C00001C00001C00001C00001C000038000038000038000038000038000070000 070000070000660000E40000CC0000700000>17 33 -1 7 12]102 dc[<1F8000038000038000 0380000700000700000700000700000E00000E00000E7C000F86001E07001E07001C07001C0700 380E00380E00380E00381C00701C80701C80703880703900E01900600E00>17 26 2 0 20]104 dc[<030706000000000000384C4E8E9C9C1C3838707272E2E46438>8 25 4 0 12]105 dc[<1F 8003800380038007000700070007000E000E000E0E0E131C271C431C801F003C003F8039C038E0 70E270E270E270E4E0646038>16 26 2 0 18]107 dc[<3F0707070E0E0E0E1C1C1C1C38383838 70707070E4E4E4E46830>8 26 3 0 10]108 dc[<307C005986009E07009E07009C07009C0700 380E00380E00380E00381C00701C80701C80703880703900E01900600E00>17 16 4 0 22]110 dc[<030F000590C009E0C009C06009C06009C0600380E00380E00380E00380E00701C007018007 03800703000E8E000E78000E00000E00001C00001C00001C00001C0000FF0000>19 23 0 7 20] 112 dc[<30F059189E389C189C009C0038003800380038007000700070007000E0006000>13 16 4 0 16]114 dc[<03E004300830187018601C001F801FC00FE000E00060E060E06080C041803E 00>12 16 3 0 16]115 dc[<06000E000E000E000E001C001C00FFC01C00380038003800380070 00700070007000E100E100E100E20064003800>10 23 4 0 13]116 dc[<38064C074E0E8E0E9C 0E9C0E1C1C381C381C381C7039703970393079389A0F0C>16 16 4 0 21]117 dc[<078F0008D1 8010F38020E18020E00020E00001C00001C00001C00001C000038200038200C38200E78400C588 0078F000>17 16 2 0 18]120 dc dfe /fc df[<60F0F060>4 4 3 0 11]58 dc[<01FFFC0000 380F000038038000380380007003C0007003C0007003C0007003C000E0078000E0078000E00F00 00E01E0001C0380001FFE00001C0000001C0000003800000038000000380000003800000070000 000700000007000000070000000E000000FFE00000>26 26 2 0 25]80 dc[<03980C5C183838 3830387038E070E070E070E070C0E2C0E2C0E2E1E262643C38>15 16 2 0 20]97 dc[<03E006 181C183838301070006000E000E000E000E000C008E010602030C01F00>13 16 2 0 17]99 dc[ <003F000700070007000E000E000E000E001C001C039C0C5C1838383830387038E070E070E070 E070C0E2C0E2C0E2E1E262643C38>16 26 2 0 20]100 dc[<03E00E101810381070107020FFC0 E000E000E000E000E008E010602030C01F00>13 16 2 0 18]101 dc[<1F800003800003800003 80000700000700000700000700000E00000E00000E78000F8C001E0E001C0E001C0E001C0E0038 1C00381C00381C00383800703880703880707080707100E03200601C00>17 26 2 0 22]104 dc [<03000380030000000000000000000000000000003C004E004E008E008E009C001C001C003800 3800390071007100720072003C00>9 26 2 0 13]105 dc[<3F0707070E0E0E0E1C1C1C1C3838 383870707070E4E4E4E46838>8 26 2 0 11]108 dc[<383E0F804CC330C08F03C0E08F03C0E0 8E0380E08E0380E01C0701C01C0701C01C0701C01C070380380E0388380E0388380E0708380E07 10701C0320300C01C0>29 16 2 0 34]109 dc[<070F0009918011E1C011C0C011C0C011C0C003 81C00381C00381C00381C00703800703000707000706000E8C000E70000E00000E00001C00001C 00001C00001C0000FF0000>18 23 -1 7 19]112 dc[<38704D988F388E188E008E001C001C00 1C001C00380038003800380070003000>13 16 2 0 17]114 dc[<03E006180818183818301C00 1FC00FE007F000700030E030E030806040C03F00>13 16 2 0 18]115 dc[<0180038003800380 038007000700FFE007000E000E000E000E001C001C001C001C00384038403840388019000E00> 11 23 1 0 14]116 dc[<1C062607470E870E8E0E8E0E0E1C1C1C1C1C1C1C3838383838381838 1C700FF00070006060E0E0C0C18043003C00>16 23 2 7 19]121 dc dfe /fd df[<1FE0003F F0007FF800783C00300E00000E00000E0003FE001FFE003E0E00700E00E00E00E00E00E00E0078 3E007FFFE03FE7E00F83E0>19 18 2 0 22]97 dc[<03F80FFC1FFE3C1E780C7000E000E000E0 00E000E000F000700778073E0E1FFC0FF803F0>16 18 3 0 22]99 dc[<003F00007F00003F00 00070000070000070000070003C7000FF7001FFF003C1F00780F00700700E00700E00700E00700 E00700E00700E00700700F00700F003C1F001FFFE00FE7F007C7E0>20 25 1 0 22]100 dc[<03 E00FF81FFC3C1E780E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE0FFC03F0>16 18 3 0 22]101 dc[<001F00007F8000FF8001E78001C30001C00001C0007FFF00FFFF00FFFF0001C0 0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0003FFE007FFF 003FFE00>17 25 1 0 22]102 dc[<03E3C007F7E00FFFE01C1CC0380E00380E00380E00380E00 380E001C1C000FF8001FF0001BE0003800001800001FFC001FFF003FFF807803C0E000E0E000E0 E000E0E000E07001C07C07C03FFF800FFE0003F800>19 28 1 10 22]103 dc[<7E0000FE0000 7E00000E00000E00000E00000E00000E3C000EFE000FFF000F87800F03800E03800E03800E0380 0E03800E03800E03800E03800E03800E03800E03807FC7F0FFE7F87FC7F0>21 25 0 0 22]104 dc[<018003C003C0018000000000000000007FC07FC07FC001C001C001C001C001C001C001C001 C001C001C001C001C07FFFFFFF7FFF>16 26 3 0 22]105 dc[17 25 2 0 22]108 dc[21 18 0 0 22]109 dc[<7E3C00FEFE007FFF000F87800F03800E0380 0E03800E03800E03800E03800E03800E03800E03800E03800E03807FC7F0FFE7F87FC7F0>21 18 0 0 22]110 dc[<03E0000FF8001FFC003C1E00780F00700700E00380E00380E00380E00380E0 0380F00780700700780F003C1E001FFC000FF80003E000>17 18 2 0 22]111 dc[<7E3E00FEFF 007FFF800F83C00F00E00E00E00E00700E00700E00700E00700E00700E00700E00E00F01E00F83 C00FFF800EFF000E3C000E00000E00000E00000E00000E00000E00007FC000FFE0007FC000>20 27 0 9 22]112 dc[19 18 1 0 22]114 dc[<03000007 00000700000700000700007FFF00FFFF00FFFF0007000007000007000007000007000007000007 000007010007038007038007038007870003FE0001FC0000F800>17 23 1 0 22]116 dc[<7F1F C0FF1FE07F1FC01C07001E0F000E0E000E0E000E0E00071C00071C00071C00071C0003B80003B8 0003B80001F00001F00000E000>19 18 1 0 22]118 dc[19 18 1 0 22]119 dc dfe /fe df[<1FC0007FF000707800201800001C00001C0007FC001F FC003C1C00701C00E01C00E01C00E01C00707C003FFF800F8F80>17 16 2 0 20]97 dc[<007E 00007E00000E00000E00000E00000E00000E0007CE000FFE001C3E00301E00700E00E00E00E00E 00E00E00E00E00E00E00E00E00700E00301E00383E001FEFC007CFC0>18 23 1 0 20]100 dc[< 07E00FF01C38301C700CE00EE00EFFFEFFFEE00060007000380E1C1E0FFC03F0>15 16 2 0 20] 101 dc[<030007800780030000000000000000007F807F80038003800380038003800380038003 800380038003800380FFFCFFFC>14 24 3 0 20]105 dc[15 23 2 0 20] 108 dc[19 16 0 0 20]110 dc[<07C01FF03C78701C701CE00EE00EE0 0EE00EE00EE00E701C783C3C781FF007C0>15 16 2 0 20]111 dc[17 16 1 0 20]114 dc[<030007000700070007007FFCFFFC07000700070007000700070007000700 070E070E070E070C03FC00F0>15 21 1 0 20]116 dc[17 16 1 0 20] 118 dc[17 16 1 0 20]119 dc dfe /ff df[<8000C0C001C0600300 300600180C000C180006300003600001C00001C0000360000630000C1800180C00300600600300 C001C08000C0>18 18 6 0 30]2 dc dfe /fg df[<60C0F1E0F9F068D0081008100810102010 202040C180>12 11 1 -15 19]34 dc[<0E0003003100070030800E0060E01C00E05FEC00E040 1800E0403000E0403000E0406000E040C000E040C0006081800030830000310300000E06000000 0C0700001818800018184000303040006070200060702000C07020018070200180702003007020 06007020060030400C0018401800188008000700>27 30 2 2 32]37 dc[<0080010002000400 0C00080018003000300030006000600060006000E000E000E000E000E000E000E000E000E000E0 006000600060006000300030003000180008000C000400020001000080>9 38 3 10 15]40 dc[ <8000400020001000180008000C00060006000600030003000300030003800380038003800380 0380038003800380038003000300030003000600060006000C00080018001000200040008000> 9 38 2 10 15]41 dc[<000C0000000C0000000C0000000C0000000C0000000C0000000C000000 0C0000000C0000000C0000000C0000000C0000FFFFFF80FFFFFF80000C0000000C0000000C0000 000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000>25 26 2 4 30]43 dc[10 2 0 -7 13]45 dc[<60F0F060>4 4 3 0 11]46 dc[<07801860 3030303060186018E01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01C60186018703830 3018600780>14 24 2 0 19]48 dc[<03000700FF000700070007000700070007000700070007 0007000700070007000700070007000700070007000700FFF0>12 24 3 0 19]49 dc[<0F8010 6020304038803CC01CE01C401C003C003800380070006000C00180010002000404080410043008 3FF87FF8FFF8>14 24 2 0 19]50 dc[<0F8010E02070607870382038007800700070006000C0 0F8000E000700038003C003CE03CE03CC03C4038407030E00F80>14 24 2 0 19]51 dc[<0030 0030007000F000F001700370027004700C7008701070307020704070C070FFFF00700070007000 700070007007FF>16 24 1 0 19]52 dc[<30183FF03FE03FC02000200020002000200027C038 60203000380018001C001C401CE01CE01C80184038403030E00F80>14 24 2 0 19]53 dc[<01 E006100C1818383038300070006000E000E7C0E860F030F018E018E01CE01CE01C601C601C7018 30183030186007C0>14 24 2 0 19]54 dc[<40007FFE7FFC7FFC400880108010802000400040 008001800180010003000300030003000700070007000700070007000200>15 25 2 0 19]55 dc[<078018603030201860186018601870103C303E600F8007C019F030F86038401CC00CC00CC0 0CC00C6008201018600FC0>14 24 2 0 19]56 dc[<07801860303070306018E018E018E01CE0 1CE01C601C603C303C185C0F9C001C00180018003870307060604021801F00>14 24 2 0 19] 57 dc[<000C0000000C0000000C0000001E0000001E0000003F00000027000000270000004380 0000438000004380000081C0000081C0000081C0000100E0000100E00001FFE000020070000200 700006007800040038000400380008001C0008001C001C001E00FF00FFC0>26 26 1 0 29]65 dc[22 26 2 0 27]66 dc[<003F0201C0C603002E0E001E1C000E1C00063800067800027000 02700002F00000F00000F00000F00000F00000F000007000027000027800023800041C00041C00 080E000803003001C0C0003F00>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[11 26 1 0 14]73 dc[30 26 2 0 35]77 dc[< FFFF000E03C00E00E00E00700E00700E00780E00780E00780E00780E00700E00700E00E00E03C0 0FFF000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000FFE000 >21 26 2 0 26]80 dc[25 26 2 0 28]82 dc[<0FC21836200E6006C006C002C002C002E00070007E003FE01FF807FC003E 000E00070003800380038003C002C006E004D81887E0>16 26 2 0 21]83 dc[<7FFFFF00701C 0700401C0100401C0100C01C0180801C0080801C0080801C0080001C0000001C0000001C000000 1C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000 001C0000001C0000001C0000001C000003FFE000>25 26 1 0 28]84 dc[26 26 1 0 29]86 dc[36 26 1 0 39]87 dc[7 37 3 9 11]91 dc[<1830204040804080810081008100B160F9 F078F03060>12 11 5 -15 19]92 dc[7 37 0 9 11]93 dc[<3F8070C070E020700070007007F0 1C7030707070E070E071E071E0F171FB1E3C>16 16 2 0 19]97 dc[<07F80C1C381C30087000 E000E000E000E000E000E0007000300438080C1807E0>14 16 1 0 17]99 dc[<007E00000E00 000E00000E00000E00000E00000E00000E00000E00000E0003CE000C3E00380E00300E00700E00 E00E00E00E00E00E00E00E00E00E00E00E00600E00700E00381E001C2E0007CFC0>18 26 1 0 21]100 dc[<07C01C3030187018600CE00CFFFCE000E000E000E0006000300438080C1807E0> 14 16 1 0 17]101 dc[<01F0031807380E100E000E000E000E000E000E00FFC00E000E000E00 0E000E000E000E000E000E000E000E000E000E000E007FE0>13 26 0 0 12]102 dc[<0FCE1873 30307038703870387038303018602FC02000600070003FF03FFC1FFE600FC003C003C003C00360 06381C07E0>16 24 1 8 19]103 dc[18 26 1 0 21]104 dc[<18003C003C00180000000000 0000000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF 80>9 26 0 0 10]105 dc[9 26 0 0 10]108 dc[29 16 1 0 32]109 dc[18 16 1 0 21]110 dc[<07E01C38300C700E6006E007E007E007E007E007E007600670 0E381C1C3807E0>16 16 1 0 19]111 dc[18 23 1 7 21]112 dc[12 16 1 0 15]114 dc[<1F2060E04020C020C020F0007F003F C01FE000F080708030C030C020F0408F80>12 16 1 0 15]115 dc[<0400040004000C000C001C 003C00FFC01C001C001C001C001C001C001C001C001C201C201C201C201C200E400380>11 23 1 0 15]116 dc[18 16 1 0 21]117 dc[17 16 1 0 20]118 dc[ 17 23 1 7 20]121 dc[<7FF86070407040E041C041C00380070007000E081C081C0838107010 7030FFF0>13 16 1 0 17]122 dc dfe /fh df[<60F0F060>4 4 4 0 12]58 dc[<01FFFF0000 3C03C0003800E0003800F00038007000380070007000F0007000F0007000F0007000E000E001E0 00E003C000E0078000E01E0001FFF00001C0000001C0000001C000000380000003800000038000 0003800000070000000700000007000000070000000F000000FFE00000>28 28 2 0 27]80 dc[ 28 29 3 1 24]86 dc[<01E3000717000C0F00180F00380E00300E00700E00700E00E01C00E0 1C00E01C00E01C00E03880E03880E038806078803199001E0E00>17 18 2 0 22]97 dc[<01F0 030C0E0C1C1E383C301870007000E000E000E000E000E000E0046008601030601F80>15 18 2 0 18]99 dc[<0007E00000E00000E00001C00001C00001C00001C000038000038000038000038001 E7000717000C0F00180F00380E00300E00700E00700E00E01C00E01C00E01C00E01C00E03880E0 3880E038806078803199001E0E00>19 29 2 0 22]100 dc[<01F007080C081804380830087030 7FC0E000E000E000E000E000E0046008601030600F80>14 18 2 0 19]101 dc[<0FC00001C000 01C0000380000380000380000380000700000700000700000700000E3E000EC3000F03800E0380 1E03801C03801C03801C0380380700380700380700380E00700E20700E20701C20701C40E00C80 600700>19 29 2 0 24]104 dc[<01C003C003C001800000000000000000000000001C00270047 004700870087000E000E001C001C001C003800388038807080710032001C00>10 28 2 0 14] 105 dc[<1F800380038007000700070007000E000E000E000E001C001C001C001C003800380038 0038007000700070007000E400E400E400E40064003800>9 29 2 0 12]108 dc[<381F81F04E 20C6184640E81C4680F01C8F00F01C8E00E01C0E00E01C0E00E01C1C01C0381C01C0381C01C038 1C01C0703803807138038071380380E1380380E27007006430030038>32 18 2 0 36]109 dc[< 07078009C86008D03008E03011C03011C03801C03801C0380380700380700380700380600700E0 0700C00701800783000E86000E78000E00000E00001C00001C00001C00001C00003C0000FF8000 >21 26 -1 8 21]112 dc[<383C4E424687470F8E1E8E0C0E000E001C001C001C001C00380038 003800380070003000>16 18 2 0 19]114 dc[<01F0060C04040C0E180C1C001F000FE00FF003 F80038201C7018F018F010803060601F80>15 18 2 0 19]115 dc[<00C001C001C001C0038003 8003800380FFF00700070007000E000E000E000E001C001C001C001C0038203820384038401880 0F00>12 26 0 0 15]116 dc[<1C00C02701C04701C04701C08703808703800E03800E03801C07 001C07001C07001C0700180E00180E00180E001C1E000C3C0007DC00001C00001800603800F030 00F06000E0C0004180003E0000>18 26 2 8 20]121 dc dfe /fi df[<0007E1F0001C173800 703C3800E07C7801C0783001C0380001C0380001C038000380700003807000038070003FFFFF00 03807000038070000700E0000700E0000700E0000700E0000700E0000700E0000E01C0000E01C0 000E01C0000E01C0000E01C0000E01C0001C0380001C03C000FF8FF800>29 29 1 0 24]11 dc[ <0007E0001C1000703800E07801C07801C03001C00001C0000380000380000380003FFFF00380 F00380700700E00700E00700E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01 C01C03801C03C0FF8FF0>21 29 1 0 23]12 dc[<000400080030006000C00080018003000600 06000C000C001800180038003000300070007000600060006000E000E000E000E000E000E000E0 00E0006000600060006000200030003000180008000C0004000200>14 42 4 11 16]40 dc[<01 00008000400060002000300010001800180018001C000C000C000C000C000C000C000C000C001C 001C001C0018001800380038003000300070006000E000C001C001800300030006000C00180030 0060008000>14 42 0 11 16]41 dc[<7070F060>4 4 4 0 12]46 dc[<00F800038E00060600 0C03000C0300180380380380380380300380700380700380700380700380E00700E00700E00700 E00700E00700E00600E00E00C00E00C00E00C00C00C01C00C0180060300060600030C0001F0000 >17 29 4 1 21]48 dc[<007E000183800201C00400E00400E00F00E00F00E01F00E01F00E00E 00E00001E00001C0000380000380000700000E00001C0000380000600000C00001800003008006 00800801001001003FFF007FFE00FFFE00>19 28 2 0 21]50 dc[<007C000187000203800403 800F03C00F03C00F03C00E0380000380000700000600000C0000380003F000001C00000E00000E 00000F00000F00000F00700F00F80F00F80F00F00E00E01E00801C004038003070000FC000>18 29 3 1 21]51 dc[<0301C003FF8003FE0007FC00040000040000040000040000040000080000 08F8000B0C000C0E00080700080700000700000780000780000780700F00F00F00F00F00F00E00 801E00801C0040380040300030E0000F8000>18 29 3 1 21]53 dc[<003E0000E10001808003 03800607800C07801C070018000038000030000071F000761800780C00E80E00F00600F00600E0 0700E00700E00700E00E00C00E00C00E00C00E00C01C00E0180060380060300030C0000F8000> 17 29 4 1 21]54 dc[<1000003FFFC03FFFC03FFF806001004002004004008008000008000010 0000200000400000C0000080000180000180000300000700000700000F00000E00000E00001E00 001E00001E00003C00003C00003C0000180000>18 29 5 1 21]55 dc[<00F800030400060600 0C03001C0300380300380380300380700380700380700380700380700780700700700F00300F00 18170008270007CE00000E00000C00001C00601800F03800F03000E0600080C0004380003E0000 >17 29 4 1 21]57 dc[<0007F010001C0C300070026000C001E0038000E0070000E00E000060 0E0000601C0000403C00004038000040780000007800000078000000F0000000F0000000F00000 00F0000000F0000000F0000080F0000100700001007000010038000200380004001C0004000C00 1800060020000380C000007F0000>28 30 4 1 30]67 dc[<0FFF9FFE00F803E000F003C000F0 03C000F003C000F003C000F003C001E0078001E0078001E0078001E0078001E0078001E0078003 FFFF0003C00F0003C00F0003C00F0003C00F0003C00F0007801E0007801E0007801E0007801E00 07801E0007801E000F003C000F803E00FFF3FFC0>31 28 2 0 31]72 dc[<0FFF83FE00F800F8 00F000E000F0008000F0010000F0020000F0040001E0080001E0100001E0400001E0800001E1C0 0001E3C00003C5E00003C9E00003D1F00003E0F00003C0F00003C078000780780007803C000780 3C0007801E0007801E0007800F000F000F000F801F80FFF07FF0>31 28 2 0 32]75 dc[<0FF8 0007FC00F8000FC000BC000F8000BC00178000BC00178000BC00278000BC002780011E004F0001 1E004F00011E008F00011E008F00011E010F00010F010F00020F021E00020F021E00020F041E00 020F041E000207881E000207901E000407903C000407A03C000407A03C000407C03C000403C03C 000403803C000C038078001E03007C00FF8307FF80>38 28 2 0 38]77 dc[<0FFFFC0000F80F 0000F0038000F003C000F001C000F001C000F001C001E003C001E003C001E003C001E0038001E0 070001E00E0003C03C0003FFE00003C0000003C0000003C0000003C00000078000000780000007 8000000780000007800000078000000F0000000F800000FFF00000>26 28 2 0 28]80 dc[<00 3F0400C0CC0180380300380600180E00180E00180E00181E00101E00001F00000F80000FF80007 FF0003FF8001FFC0003FE00003E00001E00000E00000E04000E04000E04000E04000C06001C0E0 0180F00300CC0E0083F800>22 30 2 1 23]83 dc[<07F0001C18001E0C001C0E00180E00000E 00000E0001FE000F0E001C1C00301C00701C00E01C40E01C40E03C40E05C80709D803F0E00>18 18 3 0 21]97 dc[<3F00000F00000E00000E00000E00000E00000E00000E00001C00001C0000 1C00001C78001D86001E03003C03803801803801803801C03801C03801C0700380700380700380 700300700700700E00F00C00CC300083C000>18 29 4 0 23]98 dc[<01F8071C0C1E181C3818 3000700070007000E000E000E000600060047008301018200FC0>15 18 3 0 18]99 dc[<0003 F00000F00000E00000E00000E00000E00000E00000E00001C00001C00001C000F1C0030DC00C03 C01C0380380380300380700380700380700380E00700E00700E00700600700600700700F00301E 00186F00078FC0>20 29 3 0 23]100 dc[<01F8070C0C061C073803300370037FFF7000E000E0 00E00060006002300430081C3007C0>16 18 2 0 18]101 dc[<000F800039C00061C000E3C001 C18001C00001C00001C0000380000380000380003FF80003800003800007000007000007000007 00000700000700000E00000E00000E00000E00000E00000E00001C00001E0000FFC000>18 29 1 0 13]102 dc[<000038003CCC00C69C0183080383800703800703800703800703800707000306 00038C0004F0000400000C00000C00000FFE0007FF800FFFC01801C02000C06000E0C000C0C000 C0600180200300180E0007F000>22 28 0 9 21]103 dc[<07E00001E00001C00001C00001C000 01C00001C00001C000038000038000038000038F8003B0C003C0E00780E00780E00700E00700E0 0700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF9FF0>20 29 1 0 23]104 dc[<00C001C001C0018000000000000000000000000000001F80078003800700070007 000700070007000E000E000E000E000E000E001C001E00FF80>10 29 1 0 12]105 dc[<07E000 01E00001C00001C00001C00001C00001C00001C0000380000380000380000387F80381E0038180 07020007040007080007100007700007F8000F38000E3C000E1C000E1E000E0E000E0F001C0700 1C0F80FF9FE0>21 29 1 0 22]107 dc[<07E001E001C001C001C001C001C001C0038003800380 0380038003800700070007000700070007000E000E000E000E000E000E001C001E00FF80>11 29 1 0 12]108 dc[<1F8FC0FC00079061060003E076070007807807000780780700070070070007 00700700070070070007007007000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E00 0E00E00E001C01C01C001E01E01E00FF8FF8FF80>33 18 1 0 36]109 dc[<1F8F8007B0C003C0 E00780E00780E00700E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03 801E03C0FF9FF0>20 18 1 0 23]110 dc[<00FC000307000E01801C01C03800C03000C07000E0 7000E07000E0E001C0E001C0E001C0600180600380700700380E001C180007E000>19 18 2 0 21]111 dc[<0FC78003D86001E03003C03803803803801803801C03801C03801C070038070038 0700380700700700700700E00F01C00EC3000E3C000E00000E00000E00001C00001C00001C0000 1C0000FF8000>22 26 0 8 23]112 dc[<1F9C07EE03CF078E078C07000700070007000E000E00 0E000E000E000E001C001E00FFC0>16 18 1 0 16]114 dc[<03F20C0E18061004300438043E00 1FE00FF007F8003C401C400C400C6018E010D0608FC0>15 18 1 0 16]115 dc[<020002000200 060006000C001C003C00FFE01C001C003800380038003800380038007000704070407040704070 80708031001E00>11 26 4 0 16]116 dc[17 18 4 0 23]117 dc[19 18 4 0 22]118 dc[27 18 4 0 30]119 dc[<1FE3 FC07C1E003818001C10001C20000E40000EC00007800007000003800007800009C00011E00020E 000407000C07003C0780FE1FF0>22 18 1 0 22]120 dc[<0FF0FE03C03801C03001C02001C060 01C04001E08000E08000E10000E10000E200007200007400007C00007800007000003000002000 002000004000004000708000F10000F10000E60000780000>23 26 0 8 22]121 dc[<0FFF800E 0700080E00180E00101C0010380010700000E00001C00001C0000382000702000E02001C040038 0400380C00703800FFF800>17 18 1 0 18]122 dc dfe /fj df[8 2 3 -6 13]45 dc[ <01E006300C1018101010301030106030603060306030C060C060C060C040C0C080808180C100 46003C00>12 21 5 0 18]48 dc[<004000C000C003800D800180018003000300030003000600 0600060006000C000C000C000C001800FF80>10 21 4 0 18]49 dc[<00F00308040C09040886 10861086210C120C1C1800300060008003000C0010002004200C7C18C7F081E0>15 21 3 0 18] 50 dc[<060C07F807F00480080008000800080017C0186010600070007000706070F0E0E0E080 C0818043003C00>14 21 4 0 18]53 dc[<00F0030806080C381838180030003000678068C070 40E060C060C060C060C0C0C0C0C080C10042003C00>13 21 5 0 18]54 dc[<17822F8438CC60 784018801080200020004000C00080018001800300030003000600060006000C000C00>15 21 5 0 18]55 dc[<00F8010C020604060C060C060E0C0F1807B003E007F018F83038601C601CC018C0 18C010602030C01F00>15 21 3 0 18]56 dc[<00E0031006080C081808180818183018301830 38103818F00730003000600060E0C0E080810086007800>13 21 4 0 18]57 dc[<0001800001 80000380000380000780000780000B800013800013800023C00021C00041C000C1C00081C00101 C001FFC00201C00201C00401C00801C00801C01801C0FE0FF8>21 23 2 0 26]65 dc[<003F04 00E0880380580600380C00381C0010380010300010700010600000E00000E00000E00000C00000 C00040C00040C00080E00080E0010060020030040018180007E000>22 23 6 0 26]67 dc[<03 FFFE00E00E00E00400E00400E00401C00401C00401C10001C10003820003820003FE0003860007 04000704080704080700100E00100E00300E00200E00601C01C0FFFFC0>23 23 2 0 24]69 dc[ <03FFFE00E00E00E00400E00400E00401C00401C00401C10001C10003820003820003FE000386 000704000704000704000700000E00000E00000E00000E00001C0000FFC000>23 23 2 0 23] 70 dc[<03FE3FE000E00E0000E00E0000E00E0000E00E0001C01C0001C01C0001C01C0001C01C 00038038000380380003FFF80003803800070070000700700007007000070070000E00E0000E00 E0000E00E0000E00E0001C01C000FF8FF800>27 23 2 0 26]72 dc[<07FE00E000E000E000E0 01C001C001C001C0038003800380038007000700070007000E000E000E000E001C00FF80>15 23 2 0 14]73 dc[<03FF0000E00000E00000E00000E00001C00001C00001C00001C0000380000380 000380000380000700000700200700200700400E00400E00C00E00800E01801C0780FFFF00>19 23 2 0 22]76 dc[<03F0003F8000F000780000B800780000B800B80000B80138000138017000 013802700001380270000138047000023808E000021C08E000021C10E000021C10E000041C21C0 00041C41C000041C41C000041C81C000081D038000081D038000080E038000080E038000180C07 0000FE083FE000>33 23 2 0 32]77 dc[<03F00FE000F0030000F0020000B8020000B8020001 1C0400011C0400011C0400010E0400020E0800020E080002070800020708000403900004039000 040390000401D0000801E0000800E0000800E0000800E00018004000FE004000>27 23 2 0 26] 78 dc[<001F8000E0C00180600300300600380C00381C00181800183800383000387000387000 38700038700070E00070E000E06000E07001C0700380300300380E001C180007E000>21 23 5 0 27]79 dc[<03FFE000E03800E01C00E00C00E00C01C01C01C01C01C01C01C0380380700380E003 FF800380000700000700000700000700000E00000E00000E00000E00001C0000FF8000>22 23 2 0 24]80 dc[<007C400182800301800601800601800C01000C01000C00000E00000FC00007F800 03FC00007C00000E00000E00000600200600400C00400C00600800601000D8600087C000>18 23 3 0 20]83 dc[<1FFFFC38381C20380860380840380840700880700800700000700000E00000E0 0000E00000E00001C00001C00001C00001C0000380000380000380000380000780007FF800>22 23 6 0 26]84 dc[<7FC1FC1C00601C00401C00401C0040380080380080380080380080700100 700100700100700100E00200E00200E00200E00200E00400E00800E008006030003040001F8000 >22 23 7 0 26]85 dc[32 23 7 0 36]87 dc[<03FC3F 8000700E00007008000070100000382000003840000038C000001C8000001D0000001E0000000E 0000000E0000001F000000370000002700000047800000838000010380000203C0000401C0000C 01C0001C01E000FE07F800>25 23 2 0 26]88 dc[<072008E018E0306030C060C060C060C0C1 80C188C1884388659038E0>13 14 4 0 18]97 dc[<03C00C6018E030E0300060006000600040 00C0004020604021801E00>11 14 4 0 16]99 dc[<007C001800180018001800300030003000 30076008E018E0306030C060C060C060C0C180C188C1884388659038E0>14 23 4 0 18]100 dc [<07001880304060404080FF00C000C000C0008000C040C08043003C00>10 14 5 0 16]101 dc [<001C0036002E006C00600060006000C000C007FC00C000C001C0018001800180018001800300 0300030003000300060006006600E400C8007000>15 29 -1 6 11]102 dc[<01C8023806380C 180C3018301830183030603060306010E019C00EC000C000C06180E180C3007C00>13 20 2 6 16]103 dc[<1F0006000600060006000C000C000C000C0019C01A601C20183030603060306030 6060C060C461846188C098C0E0>14 23 3 0 18]104 dc[<030706000000000000384C4C4C8C18 1818303262622438>8 23 3 0 11]105 dc[<1F0006000600060006000C000C000C000C001870 189819381A30340038003E0033006300631063106310C320C1C0>13 23 3 0 16]107 dc[<3E0C 0C0C0C181818183030303060606060C0D0D0D0D060>7 23 4 0 9]108 dc[<38787800448C8C00 47050400460604008C0C0C000C0C0C000C0C0C000C0C0C00181818001818188018183080181831 003030130030301C00>25 14 3 0 29]109 dc[<387044984708460C8C180C180C180C18183018 311861186230263038>16 14 3 0 20]110 dc[<078018C0304060606060C060C060C06080C080 C08180C10046003C00>11 14 5 0 18]111 dc[<1C702288230C230C460C060C060C060C0C180C 180C100C301A601B8018001800300030003000FC00>14 20 2 6 18]112 dc[<38F04518463846 308C000C000C000C00180018001800180030003000>13 14 3 0 15]114 dc[<07800C4018E018 E038001E001F8007C000C060C0E0C0C180C3003E00>11 14 3 0 15]115 dc[<03000300060006 0006000600FF800C000C000C001800180018001800300031003100310032001C00>9 20 3 0 12 ]116 dc[<1C0826184618461886300C300C300C30186018621862186208E40738>15 14 3 0 19 ]117 dc[<1C0410260C18460C18460C188618100C18100C18100C181018302018302018304018 30400C5880078F00>21 14 3 0 24]119 dc[<0E3C1346218E218C430003000300030006000608 C608E610CA2071C0>15 14 2 0 16]120 dc[<1C0826184618461886300C300C300C3018601860 1860186008C007C000C000807180730066003C00>13 20 3 6 17]121 dc dfe /fk df[<1F00 218060C060C000C0008001800F00008000400060C060C060804060801F00>11 16 1 0 15]51 dc[<0300030007000F000B001300330023004300C300FFE003000300030003001FE0>11 16 1 0 15]52 dc[<20803F002C002000200020002F0030802040006000600060C06080C061801F00>11 16 1 0 15]53 dc dfe /fl df[<006000E000E00160026006600C600860106020606060C060FF FC0060006000600060006003FC>14 19 1 0 17]52 dc[<60607FC07F8044004000400040004F 0070C040E0006000700070E070E070E06040E021C01F00>12 19 2 0 17]53 dc dfe /fm df[< 003FC00001F0300003C0380007C07C000F807C000F807C000F8038000F8000000F8000000F8000 000F800000FFFFFC00FFFFFC000F807C000F807C000F807C000F807C000F807C000F807C000F80 7C000F807C000F807C000F807C000F807C000F807C000F807C000F807C007FE1FF807FE1FF80> 25 29 0 0 27]12 dc[11 4 1 -7 16]45 dc[<001FE02000FFF8E003F8 0FE007C003E00F8001E01F0000E03E0000E03E0000607E0000607C000060FC000000FC000000FC 000000FC000000FC000000FC000000FC000000FC0000007C0000607E0000603E0000603E0000C0 1F0000C00F80018007C0030003F80E0000FFFC00001FE000>27 28 3 0 34]67 dc[27 28 2 0 31]69 dc[16 28 1 0 18]73 dc[27 28 2 0 33]80 dc[<07F820 1FFEE03C07E07801E07000E0F000E0F00060F00060F80000FE0000FFE0007FFE003FFF003FFF80 0FFFC007FFE0007FE00003F00001F00000F0C000F0C000F0C000E0E000E0F001C0FC03C0EFFF00 83FC00>20 28 3 0 27]83 dc[<7FFFFFE07FFFFFE0781F81E0701F80E0601F8060E01F8070C0 1F8030C01F8030C01F8030C01F8030001F8000001F8000001F8000001F8000001F8000001F8000 001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80 0007FFFE0007FFFE00>28 28 2 0 33]84 dc[32 28 2 0 37]85 dc[<0FF8001C1E003E0F803E07803E 07C01C07C00007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC03E13F80F E1F8>21 18 1 0 23]97 dc[<03FC000E0E001C1F003C1F00781F00780E00F80000F80000F800 00F80000F80000F800007800007801803C01801C03000E0E0003F800>17 18 2 0 21]99 dc[< 000FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F001F9F00F07F0 1C03F03C01F07801F07801F0F801F0F801F0F801F0F801F0F801F0F801F07801F07801F03C01F0 1C03F00F0FFE03F9FE>23 29 2 0 27]100 dc[<01FC000F07001C03803C01C07801C07801E0F8 01E0F801E0FFFFE0F80000F80000F800007800007C00603C00601E00C00F038001FC00>19 18 1 0 22]101 dc[<007F0001E38003C7C00787C00F87C00F83800F80000F80000F80000F80000F80 00FFF800FFF8000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80 000F80000F80000F80007FF8007FF800>18 29 0 0 15]102 dc[<03F8F00E0F381E0F381C0730 3C07803C07803C07803C07801C07001E0F000E0E001BF8001000001800001800001FFF001FFFC0 0FFFE01FFFF07801F8F00078F00078F000787000707800F01E03C007FF00>21 27 1 9 24]103 dc[24 29 1 0 27]104 dc[<1E003F003F003F003F001E000000000000 00000000000000FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F00 FFE0FFE0>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[<01FC000F07801C01C03C01E07800F07800F0F800F8F800 F8F800F8F800F8F800F8F800F87800F07800F03C01E01E03C00F078001FC00>21 18 1 0 24] 111 dc[23 26 1 8 27]112 dc[17 18 1 0 20]114 dc[<1FD830786018E018E018F000FF807FE07FF01FF807FC007CC01CC01CE01CE018F830CFC0> 14 18 2 0 19]115 dc[<0300030003000300070007000F000F003FFCFFFC1F001F001F001F00 1F001F001F001F001F001F0C1F0C1F0C1F0C0F08079803F0>14 26 1 0 19]116 dc[24 18 1 0 27]117 dc[22 18 1 0 25]118 dc[31 18 1 0 34]119 dc[22 18 1 0 25]120 dc [22 26 1 8 25]121 dc[<3FFF803C1F00303F00303E00607C0060FC0060F80001F00003F000 07E00007C1800F81801F81801F03803E03007E07007C0F00FFFF00>17 18 1 0 21]122 dc dfe /fn df[<387CFEFEFE7C38>7 7 4 0 16]46 dc[<00180000780001F800FFF800FFF80001F800 01F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F800 01F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8007FFFE07FFFE0 >19 32 4 0 28]49 dc[<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01F87C 01F83803F80003F80003F00003F00007E00007C0000F80001F00003E0000380000700000E01801 C0180380180700180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF0>21 32 3 0 28]50 dc[ <0000E00001E00003E00003E00007E0000FE0001FE0001FE00037E00077E000E7E001C7E00187 E00307E00707E00E07E00C07E01807E03807E07007E0E007E0FFFFFEFFFFFE0007E00007E00007 E00007E00007E00007E00007E000FFFE00FFFE>23 32 2 0 28]52 dc[<1000201E01E01FFFC0 1FFF801FFF001FFE001FF8001BC00018000018000018000018000019FC001FFF001E0FC01807E0 1803E00003F00003F00003F80003F83803F87C03F8FE03F8FE03F8FC03F0FC03F07007E03007C0 1C1F800FFF0003F800>21 32 3 0 28]53 dc[32 34 2 0 37]69 dc[19 34 1 0 21]73 dc[<07FC001FFF803F07C03F03E03F01E03F01F01E01F00001F00001F0003FF003FDF0 1FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF87F07E03F>24 22 2 0 27]97 dc[<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000FC0000FC0000FC0000FC 0000FC0000FC00007C00007E00007E00003E00301F00600FC0E007FF8000FE00>20 22 2 0 25] 99 dc[<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC00 00FC0000FC00007C00007C00007E00003E00181F00300FC07003FFC000FF00>21 22 2 0 26] 101 dc[<003F8000FFC001E3E003C7E007C7E00F87E00F83C00F80000F80000F80000F80000F80 000F8000FFFC00FFFC000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80 000F80000F80000F80000F80000F80000F80000F80000F80007FF8007FF800>19 35 1 0 17] 102 dc[<03FC1E0FFF7F1F0F8F3E07CF3C03C07C03E07C03E07C03E07C03E07C03E03C03C03E07 C01F0F801FFF0013FC003000003000003800003FFF801FFFF00FFFF81FFFFC3800FC70003EF000 1EF0001EF0001EF0001E78003C7C007C3F01F80FFFE001FF00>24 33 2 11 28]103 dc[<1C00 3F007F007F007F003F001C000000000000000000000000000000FF00FF001F001F001F001F001F 001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE0>11 36 2 0 16] 105 dc[11 35 2 0 16]108 dc[43 22 2 0 48]109 dc[26 22 2 0 31]110 dc[<00FE0007FFC00F83E01E00F03E00F87C007C7C007C7C007C FC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F81F01F00F83E007FFC0 00FE00>23 22 2 0 28]111 dc[26 32 2 10 31]112 dc[19 22 2 0 23]114 dc[<0FF300 3FFF00781F00600700E00300E00300F00300FC00007FE0007FF8003FFE000FFF0001FF00000F80 C00780C00380E00380E00380F00700FC0E00EFFC00C7F000>17 22 2 0 22]115 dc[<01800001 80000180000180000380000380000780000780000F80003F8000FFFF00FFFF000F80000F80000F 80000F80000F80000F80000F80000F80000F80000F80000F80000F81800F81800F81800F81800F 81800F830007C30003FE0000F800>17 32 1 0 22]116 dc[26 22 2 0 31]117 dc dfe /fo df[<00FCF807839C0E079C1C07081C07001C07001C07001C07001C0700 FFFFE01C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700 FF1FE0>22 23 0 0 21]11 dc[<00FC000782000E07001C07001C02001C00001C00001C00001C 0000FFFF001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C 0700FF1FE0>19 23 0 0 20]12 dc[<00FF000707000E07001C07001C07001C07001C07001C07 001C0700FFFF001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07 001C0700FFBFE0>19 23 0 0 20]13 dc[<60C0F1E0F1E070E0102010202040204040804080> 11 10 1 -13 18]34 dc[<01C0000320000610000E10000E10000E10000E20000E40000E800007 80FE0700380700200B802013804031C04061E08060E100E07100E03A00E01C02700E0238370C0F C1F8>23 23 1 0 27]38 dc[<60F0F070101020204040>4 10 3 -13 10]39 dc[<0102040C18 18303070606060E0E0E0E0E0E0E0E0E0E060606070303018180C040201>8 34 3 9 14]40 dc[< 8040203018180C0C0E060606070707070707070707070606060E0C0C181830204080>8 34 2 9 14]41 dc[<60F0F070101020204040>4 10 3 6 10]44 dc[9 2 0 -6 12]45 dc[< 60F0F060>4 4 3 0 10]46 dc[<07C018303018701C600C600CE00EE00EE00EE00EE00EE00EE0 0EE00EE00E600C600C701C30181C7007C0>15 21 1 0 18]48 dc[<03000700FF000700070007 00070007000700070007000700070007000700070007000700070007007FF0>12 21 2 0 18] 49 dc[<0F8030E040708030C038E0384038003800700070006000C00180030006000C08080810 183FF07FF0FFF0>13 21 2 0 18]50 dc[<0FE030306018701C701C001C00180038006007E000 300018000C000E000EE00EE00EC00C401830300FE0>15 21 1 0 18]51 dc[<00300030007000 F001F001700270047008701870107020704070C070FFFE0070007000700070007003FE>15 21 1 0 18]52 dc[<20303FE03FC0240020002000200020002F8030E020700030003800384038E038E0 388030406020C01F00>13 21 2 0 18]53 dc[<01F00608080C181C301C70006000E000E3E0EC 30F018F00CE00EE00EE00E600E600E300C3018183007C0>15 21 1 0 18]54 dc[<40007FFE7F FC7FF8C008801080200040008000800100010003000200060006000E000E000E000E000E000400 >15 22 2 0 18]55 dc[<07E018302018600C600C700C78183E101F600FC00FF018F8607C601E C00EC006C006C004600C38300FE0>15 21 1 0 18]56 dc[<07C0183030186018E00CE00CE00E E00EE00E601E301E186E0F8E000E000C001C70187018603020C01F80>15 21 1 0 18]57 dc[< 60F0F06000000000000060F0F060>4 14 3 0 10]58 dc[<001000003800003800003800005C00 005C00005C00008E00008E00008E0001070001070003078002038002038007FFC00401C00401C0 0800E00800E01800E03800F0FE03FE>23 23 1 0 26]65 dc[21 23 1 0 25]66 dc[<00FC100383300E00B01C00 70380030300030700010600010E00010E00000E00000E00000E00000E00000E000106000107000 103000203800201C00400E008003830000FC00>20 23 2 0 25]67 dc[23 23 1 0 27]68 dc[21 23 1 0 24]69 dc[20 23 1 0 23]70 dc[<007E08 0381980600580C0038180018300018700008700008E00008E00000E00000E00000E00000E003FE E000387000387000383000381800380C00380600380380D8007F08>23 23 2 0 28]71 dc[23 23 1 0 26]72 dc[ 11 23 1 0 13]73 dc[<0FFC00E000E000E000E000E000E000E000E000E0 00E000E000E000E000E000E000E000E0E0E0E0E0C1C061801F00>14 23 2 0 18]74 dc[24 23 1 0 27]75 dc[< FFC0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0000 1C00001C00201C00201C00201C00601C00601C00401C00C01C03C0FFFFC0>19 23 1 0 22]76 dc[29 23 1 0 32]77 dc[23 23 1 0 26]78 dc[<00FC000303000E01C01C 00E0380070300030700038600018E0001CE0001CE0001CE0001CE0001CE0001CE0001C70003870 00383000303800701C00E00E01C003030000FC00>22 23 2 0 27]79 dc[20 23 1 0 24]80 dc[24 23 1 0 26]82 dc[<0FC4302C 601C400CC004C004C004E00070007F003FE00FF801FC001C000E0006800680068006C004E008D8 1087E0>15 23 2 0 20]83 dc[<7FFFF860381840380840380880380480380480380400380000 380000380000380000380000380000380000380000380000380000380000380000380000380000 380007FFC0>22 23 1 0 25]84 dc[23 23 1 0 26]85 dc[23 23 1 0 26]86 dc[33 23 1 0 36]87 dc[25 23 0 0 26]89 dc[6 33 3 8 10]91 dc[<204020404080408081008100E1C0F1E0F1E060C0 >11 10 5 -13 18]92 dc[6 33 0 8 10]93 dc[<1FC0386038301038003803F81E3830387038E039E039E0 7970FF1F1E>16 14 1 0 18]97 dc[18 23 0 0 20]98 dc[<07F01838303870106000E000E000E000E000600070 083008183007C0>13 14 1 0 16]99 dc[<007E00000E00000E00000E00000E00000E00000E00 000E00000E0007CE001C3E00300E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00 301E00182E0007CFC0>18 23 1 0 20]100 dc[<0FC0186030307038E018FFF8E000E000E00060 0070083010183007C0>13 14 1 0 16]101 dc[<03E006700E701C201C001C001C001C001C00FF 801C001C001C001C001C001C001C001C001C001C001C001C00FF80>12 23 0 0 11]102 dc[<0F 9E18E33060707070707070306018C02F80200060003FE03FF83FFC600EC006C006C006600C3838 0FE0>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[<07C018303018 600C600CE00EE00EE00EE00EE00E701C3018183007C0>15 14 1 0 18]111 dc[18 20 0 6 20]112 dc[<07C2001C2600381E00700E0060 0E00E00E00E00E00E00E00E00E00600E00700E00301E001C2E0007CE00000E00000E00000E0000 0E00000E00007FC0>18 20 1 6 19]113 dc[13 14 0 0 14]114 dc[<1F4060C0C040C040E000FF007F801FC001E08060 8060C060E0C09F00>11 14 1 0 14]115 dc[<080008000800180018003800FF80380038003800 380038003800380038403840384038401C800F00>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[17 1 0 -8 18]123 dc dfe /fp df[<0001FC000703000C03001C07001C030018000038000038000038 0000380000700007FFFC00701C00701C00701C00E03800E03800E03800E03800E07001C07001C0 7001C07001C0E201C0E201C0E20380E4038064038038038000030000070000060000C60000E400 00CC0000700000>24 37 -1 8 23]12 dc[<0001FDC000070FC0000C0FC0001C0F80001C038000 380380003803800038070000380700003807000070070007FFFE0000700E0000700E0000700E00 00E01C0000E01C0000E01C0000E01C0000E0380001C0380001C0380001C0380001C0710001C071 0003807100038072000380320003801C0003800000030000000700000006000000C6000000E400 0000CC00000070000000>26 37 -1 8 24]13 dc[<001000100008000C00040006000600060006 0006000700070007000700070006000600060006000E000E000C000C001C001800180038003000 300060006000C000C001800300030006000C00180010006000C000>16 42 0 11 17]41 dc[<00 0100000300000300000300000300000600000600000600000600000C00000C00000C00FFFFFFFF FFFF001800001800001800003000003000003000003000006000006000006000006000004000> 24 26 6 3 32]43 dc[10 3 3 -7 15]45 dc[<3078F060>5 4 4 0 13]46 dc [<0003F020001E0C60003002E000E003C001C001C0038001C0070000C00E0000801E0000801C00 00803C0000803C000000780000007800000078000000F0000000F0000000F0000000F0000000F0 000400F0000400F0000400F0000800700008007000100038002000180040000C01800007060000 01F80000>27 30 6 1 30]67 dc[<01FFFC00003C070000380380003801C0003801C0003801C0 007003C0007003C0007003C00070038000E0078000E0070000E00E0000E0380001FFE00001C000 0001C0000001C00000038000000380000003800000038000000700000007000000070000000700 00000F000000FFE00000>26 28 3 0 28]80 dc[<1FFFFFC01C0701C0300E00C0200E0080600E 0080400E0080401C0080801C0080801C0080001C00000038000000380000003800000038000000 70000000700000007000000070000000E0000000E0000000E0000000E0000001C0000001C00000 01C0000001C0000003C000007FFE0000>26 28 7 0 30]84 dc[26 29 9 1 31]86 dc[<03CC 063C0C3C181C3838303870387038E070E070E070E070E0E2C0E2C0E261E462643C38>15 18 5 0 21]97 dc[<01F007080C08181C3838300070007000E000E000E000E000E000E008E010602030C0 1F00>14 18 5 0 19]99 dc[<001F80000380000380000700000700000700000700000E00000E 00000E00000E0003DC00063C000C3C00181C00383800303800703800703800E07000E07000E070 00E07000E0E200C0E200C0E20061E4006264003C3800>17 29 5 0 21]100 dc[<01E007100C10 18083810701070607F80E000E000E000E000E000E0086010602030C01F00>13 18 5 0 19]101 dc[<0003C0000670000C70001C60001C00001C0000380000380000380000380000380003FF8000 700000700000700000700000700000E00000E00000E00000E00000E00001C00001C00001C00001 C00001C000038000038000038000030000030000070000C60000E60000CC0000780000>20 37 -1 8 13]102 dc[<00F3018F030F06070E0E0C0E1C0E1C0E381C381C381C381C38383038303818 7818F00F700070007000E000E0C0C0E1C0C3007E00>16 26 3 8 19]103 dc[<0FC00001C00001 C0000380000380000380000380000700000700000700000700000E78000E8C000F0E000E0E001C 0E001C0E001C0E001C0E00381C00381C00381C00383800703880703880707080707100E0320060 1C00>17 29 3 0 21]104 dc[<01800380010000000000000000000000000000001C0026004700 47008E008E000E001C001C001C0038003800710071007100720072003C00>9 28 4 0 13]105 dc[<1F800380038007000700070007000E000E000E000E001C001C001C001C0038003800380038 007000700070007000E400E400E400E40068003800>9 29 4 0 11]108 dc[<3C1E0780266318 C04683A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701C01C0701C01C07 0380380E0388380E0388380E0708380E0710701C0320300C01C0>29 18 4 0 34]109 dc[<3C3C 002646004687004707008E07008E07000E07000E07001C0E001C0E001C0E001C1C00381C40381C 40383840383880701900300E00>18 18 4 0 23]110 dc[<01E007180C0C180C380C300E700E70 0EE01CE01CE01CE018E038E030E06060C031801E00>15 18 5 0 21]111 dc[<07870004D98008 E0C008E0C011C0E011C0E001C0E001C0E00381C00381C00381C003818007038007030007070007 06000E8C000E70000E00000E00001C00001C00001C00001C00003C0000FF8000>19 26 1 8 21] 112 dc[<3C3C26C2468747078E068E000E000E001C001C001C001C003800380038003800700030 00>16 18 4 0 18]114 dc[<01F006080C080C1C18181C001F001FC00FF007F0007800386030E0 30C030806060C01F00>14 18 3 0 17]115 dc[<00C001C001C001C00380038003800380FFE007 00070007000E000E000E000E001C001C001C001C00384038403840388019000E00>11 26 3 0 14]116 dc[<1E0300270700470700470700870E00870E000E0E000E0E001C1C001C1C001C1C00 1C1C003838803838801838801839001C5900078E00>17 18 4 0 22]117 dc[<1E06270E470E47 06870287020E020E021C041C041C041C0818083808181018200C400780>15 18 4 0 19]118 dc [<1E01832703874703874703838707018707010E07010E07011C0E021C0E021C0E021C0E04180C 04181C04181C081C1C100C263007C3C0>24 18 4 0 28]119 dc[<070E0019910010E38020E380 41C30041C00001C00001C000038000038000038000038000070200670200E70400CB04008B0800 70F000>17 18 3 0 19]120 dc[<1E03270747074707870E870E0E0E0E0E1C1C1C1C1C1C1C1C38 383838183818381C7007F00070007000E0E0C0E1C0818047003C00>16 26 4 8 20]121 dc[<03 8207C20FEC08381008001000200040008001000200040008081008383067F043E081C0>15 18 3 0 17]122 dc dfe /fq df[<0C0003000F803F000FFFFE000FFFFC000FFFF8000FFFF0000FFFE0 000FFFC0000FFE00000E0000000E0000000E0000000E0000000E0000000E0000000E7FC0000FFF F8000F80FC000E003E000C003F0000001F8000001FC000001FC000001FE000001FE018001FE07C 001FE0FE001FE0FE001FE0FE001FE0FE001FC0FC001FC078003F8078003F803C007F001F01FE00 0FFFF80003FFF00000FF8000>27 39 3 0 34]53 dc[<0007F000003FFC0000FFFE0001FC0F00 03F01F8007E03F800FC03F801FC03F801F803F803F801F003F8000007F0000007F0000007F0000 00FF000000FF0FC000FF3FF800FF707C00FFC03E00FFC03F00FF801F80FF801FC0FF001FC0FF00 1FE0FF001FE0FF001FE07F001FE07F001FE07F001FE07F001FE03F001FE03F001FC01F801FC01F 803F800FC03F0007E07E0003FFFC0000FFF000003FC000>27 39 3 0 34]54 dc[<380000003E 0000003FFFFFF03FFFFFF03FFFFFF07FFFFFE07FFFFFC07FFFFF807FFFFF0070000E0070000E00 70001C00E0003800E0007000E000E0000000E0000001C000000380000007800000078000000F00 00000F0000001F0000001F0000003F0000003E0000003E0000007E0000007E0000007E0000007E 000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000007C000000 380000>28 41 4 0 34]55 dc[<000003800000000007C00000000007C0000000000FE0000000 000FE0000000000FE0000000001FF0000000001FF0000000003FF8000000003FF8000000003FF8 0000000073FC0000000073FC00000000F3FE00000000E1FE00000000E1FE00000001C0FF000000 01C0FF00000003C0FF80000003807F80000007807FC0000007003FC0000007003FC000000E003F E000000E001FE000001E001FF000001C000FF000001FFFFFF000003FFFFFF800003FFFFFF80000 780007FC0000700003FC0000700003FC0000E00001FE0000E00001FE0001E00001FF0001C00000 FF0001C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE001FFFFE>47 41 2 0 52]65 dc[<0000 3FF001800003FFFE0380000FFFFF8780003FF007DF8000FF8001FF8001FE00007F8003FC00003F 8007F000001F800FF000000F801FE0000007801FE0000007803FC0000007803FC0000003807FC0 000003807F80000003807F8000000000FF8000000000FF8000000000FF8000000000FF80000000 00FF8000000000FF8000000000FF8000000000FF8000000000FF80000000007F80000000007F80 000000007FC0000003803FC0000003803FC0000003801FE0000003801FE0000007000FF0000007 0007F000000E0003FC00001E0001FE00003C0000FF8000F800003FF007E000000FFFFFC0000003 FFFF000000003FF80000>41 41 4 0 50]67 dc[39 41 3 0 47] 80 dc[48 41 3 0 52]82 dc[<01FF800007FFF0000F81F800 1FC07E001FC07E001FC03F000F803F8007003F8000003F8000003F8000003F80000FFF8000FFFF 8007FC3F800FE03F803F803F803F003F807F003F80FE003F80FE003F80FE003F80FE003F807E00 7F807F00DF803F839FFC0FFF0FFC01FC03FC>30 27 2 0 33]97 dc[<001FF80000FFFE0003F0 1F0007E03F800FC03F801F803F803F801F007F800E007F0000007F000000FF000000FF000000FF 000000FF000000FF000000FF000000FF0000007F0000007F0000007F8000003F8001C01F8001C0 0FC0038007E0070003F01E0000FFFC00001FE000>26 27 2 0 31]99 dc[<00003FF80000003F F80000003FF800000003F800000003F800000003F800000003F800000003F800000003F8000000 03F800000003F800000003F800000003F800000003F800000003F800001FE3F80000FFFBF80003 F03FF80007E00FF8000FC007F8001F8003F8003F8003F8007F0003F8007F0003F8007F0003F800 FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F8007F0003F8 007F0003F8007F0003F8003F8003F8001F8003F8000F8007F80007C00FF80003F03BFF8000FFF3 FF80003FC3FF80>33 42 2 0 38]100 dc[<003FE00001FFF80003F07E0007C01F000F801F801F 800F803F800FC07F000FC07F0007C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF000000 FF000000FF0000007F0000007F0000007F0000003F8000E01F8000E00FC001C007E0038003F81F 0000FFFE00001FF000>27 27 2 0 32]101 dc[<0007F0003FFC00FE3E01F87F03F87F03F07F07 F07F07F03E07F00007F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007 F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007 F00007F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80>24 42 2 0 21]102 dc [<00FF81F003FFE7F80FC1FE7C1F80FC7C1F007C383F007E107F007F007F007F007F007F007F00 7F007F007F007F007F003F007E001F007C001F80FC000FC1F8001FFFE00018FF80003800000038 0000003C0000003E0000003FFFF8001FFFFF001FFFFF800FFFFFC007FFFFE01FFFFFF03E0007F0 7C0001F8F80000F8F80000F8F80000F8F80000F87C0001F03C0001E01F0007C00FC01F8003FFFE 00007FF000>30 40 2 13 34]103 dc[<07000FC01FE03FE03FE03FE01FE00FC0070000000000 00000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F E00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE>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[<003FE00001FF FC0003F07E000FC01F801F800FC03F800FE03F0007E07F0007F07F0007F07F0007F0FF0007F8FF 0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F0007F03F800FE0 3F800FE01F800FC00FC01F8007F07F0001FFFC00003FE000>29 27 2 0 34]111 dc[ 24 27 2 0 28]114 dc[<03FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FF E0007FFE007FFF803FFFE01FFFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F8 0038FC0070FF01E0F7FFC0C1FF00>22 27 2 0 27]115 dc[<00700000700000700000700000F0 0000F00000F00001F00003F00003F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F0 0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F03807F03807F03807F0 3807F03807F03803F03803F87001F86000FFC0001F80>21 38 1 0 27]116 dc[33 27 3 0 38]117 dc[47 27 1 0 50]119 dc dfe /fr df[<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0000E01C0000E 01C0000E01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000 0E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0 007F87FC00>26 29 0 0 24]11 dc[<007E0001C1800301800703C00E03C00E01800E00000E00 000E00000E00000E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07F87F8>21 29 0 0 23]12 dc[<007FC0 01C1C00303C00703C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01C00E01C0 0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 0E01C07FCFF8>21 29 0 0 23]13 dc[<003F07E00001C09C18000380F018000701F03C000E01 E03C000E00E018000E00E000000E00E000000E00E000000E00E000000E00E00000FFFFFFFC000E 00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C00 0E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C 007FC7FCFF80>33 29 0 0 35]14 dc[<6060F0F0F8F868680808080808081010101020204040 8080>13 12 1 -17 21]34 dc[<0F0000C0188000C030600380703807006027FB00E0100600E0 100C00E0100C00E0101800E0101800E0103000E0106000602060007020C0003041800018818000 0F0303C00006062000060C10000C1C08001818080018380400303804006038040060380400C038 0400C03804018038040300180803001C0806000C100C000620040003C0>30 33 2 2 35]37 dc[ <60F0F8680808081010204080>5 12 4 -17 12]39 dc[<004000800100020006000C000C0018 001800300030007000600060006000E000E000E000E000E000E000E000E000E000E000E000E000 600060006000700030003000180018000C000C0006000200010000800040>10 42 3 11 16]40 dc[<800040002000100018000C000C000600060003000300038001800180018001C001C001C001 C001C001C001C001C001C001C001C001C0018001800180038003000300060006000C000C001800 1000200040008000>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[<000100030006000600 06000C000C000C0018001800180030003000300060006000C000C000C001800180018003000300 0300060006000C000C000C00180018001800300030003000600060006000C000C000>16 41 2 10 21]47 dc[<03C00C301818300C300C700E60066006E007E007E007E007E007E007E007E007 E007E007E007E007E00760066006700E300C300C18180C3007E0>16 29 2 1 21]48 dc[<0300 07003F00C700070007000700070007000700070007000700070007000700070007000700070007 00070007000700070007000F80FFF8>13 28 4 0 21]49 dc[<07C01830201C400C400EF00FF8 0FF807F8077007000F000E000E001C001C00380070006000C00180030006010C01180110023FFE 7FFEFFFE>16 28 2 0 21]50 dc[<07E01830201C201C781E780E781E381E001C001C00180030 006007E00030001C001C000E000F000F700FF80FF80FF80FF00E401C201C183007E0>16 29 2 1 21]51 dc[<000C00000C00001C00003C00003C00005C0000DC00009C00011C00031C00021C0004 1C000C1C00081C00101C00301C00201C00401C00C01C00FFFFC0001C00001C00001C00001C0000 1C00001C00001C0001FFC0>18 28 1 0 21]52 dc[<300C3FF83FF03FC0200020002000200020 00200023E024302818301C200E000E000F000F000F600FF00FF00FF00F800E401E401C20381870 07C0>16 29 2 1 21]53 dc[<00F0030C06040C0E181E301E300C700070006000E3E0E430E818 F00CF00EE006E007E007E007E007E007600760077006300E300C18180C3003E0>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[<000600000006 000000060000000F0000000F0000000F00000017800000178000001780000023C0000023C00000 23C0000041E0000041E0000041E0000080F0000080F0000180F8000100780001FFF80003007C00 02003C0002003C0006003E0004001E0004001E000C001F001E001F00FF80FFF0>28 29 1 0 31] 65 dc[24 28 2 0 29]66 dc[<001F808000E0618001801980070007800E00 03801C0003801C00018038000180780000807800008070000080F0000000F0000000F0000000F0 000000F0000000F0000000F0000000F0000000700000807800008078000080380000801C000100 1C0001000E000200070004000180080000E03000001FC000>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[26 28 2 0 31] 72 dc[12 28 1 0 15]73 dc[<1FFF00F8007800 78007800780078007800780078007800780078007800780078007800780078007800787078F878 F878F878F0F040E021C01F00>16 29 1 1 21]74 dc[21 28 2 0 26]76 dc[ 33 28 2 0 38]77 dc[26 28 2 0 31]78 dc[<003F800000E0E0000380380007001C000E000E001C0007003C00078038000380780003C078 0003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0 700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C000380380000E0E0 00003F8000>27 30 2 1 32]79 dc[23 28 2 0 28]80 dc[28 29 2 1 31] 82 dc[<07E0801C1980300580700380600180E00180E00080E00080E00080F00000F800007C00 007FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001C08001C08001C0C001 80C00180E00300D00200CC0C0083F800>18 30 2 1 23]83 dc[<7FFFFFC0700F01C0600F00C0 400F0040400F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F0000000F00 00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F 0000000F0000000F0000000F0000001F800003FFFC00>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[<7FF0FFC00FC03E000780180003C0180003E0100001E0200001 F0600000F0400000788000007D8000003D0000001E0000001F0000000F0000000F8000000F8000 0013C0000023E0000021E0000041F00000C0F8000080780001007C0003003C0002001E0006001F 001F003F80FFC0FFF0>28 28 1 0 31]88 dc[30 28 0 0 31]89 dc[<7FFFF07C01F07001E06003C060 03C0400780400F80400F00401E00001E00003C00007C0000780000F00000F00001E00003E00003 C0100780100780100F00101F00301E00203C00203C00607800E0F803E0FFFFE0>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: 10 10 bop -33 -28 a fr(T)l(ogether,)12 b(the)f(bit)f(v)o(ectors)i(and)e(the)h(dirt) o(y)g(bit)f(enco)r(de)h(the)-75 18 y(consistency)k(state)g(of)d(every)i(cac)o (he)g(page)g fh(c)f fr(with)h(resp)r(ect)h(to)-75 63 y(all)9 b(virtual)g(addr\ esses)k(that)d(map)e(to)j(that)f(ph)o(ysical)f(page)i(and)-75 108 y(cache)j (page.)k(This)c(enco)r(ding)f(is)g(shown)g(in)h(T)l(able)g(3.)-33 156 y(The) 20 b(CPU's)h(access)h(through)e(an)o(y)g(virtual)f(address)j fh(V)9 b fr(,) -75 201 y(where)26 b fh(V)33 b fr(maps)24 b(to)g(ph)o(ysical)g(page)g fh(p)h fr(and)f(cache)g(page)-75 246 y fh(c)p fr(,)33 b(is)d(determined)g(b)o(y)g fh (P)5 b fr([)p fh(p)p fr(])p fh(:mapped)p fr([)p fh(c)p fr(])28 b(together)j (with)-75 292 y fh(P)5 b fr([)p fh(p)p fr(])p fh(:cache)r 13 2 v 12 w(dir)q (ty)r fr(.)23 b(If)16 b fh(P)5 b fr([)p fh(p)p fr(])p fh(:mapped)p fr([)p fh (c)p fr(])14 b(is)h(false)h(\(the)g(cache)-75 337 y(page)i(is)g(empt)n(y)f (or)h(stale\),)h(then)f(CPU)h(access)g(through)f fh(V)-75 382 y fr(m)m(ust)c (fault.)j(This)c(allo)n(ws)g(the)h(consistency)h(state)f(to)f(b)q(e)h(up-)-75 428 y(dated)c(b)o(y)g(the)h(cac)o(he)g(con)o(trol)f(algorithm.)k(If)9 b fh (P)d fr([)p fh(p)p fr(])p fh(:mapped)p fr([)p fh(c)p fr(])-75 473 y(is)15 b (true)h(but)g fh(P)5 b fr([)p fh(p)p fr(])p fh(:cache)q 13 2 v 13 w(dir)q(ty) 17 b fr(is)e(false)g(\(the)h(cache)f(page)h(is)-75 518 y(presen)q(t\),)h(then) h(write)f(access)i(through)e(an)n(y)g fh(V)27 b fr(that)17 b(maps)-75 564 y (to)d fh(p)h fr(m)m(ust)h(b)q(e)f(disabled)f(in)g(order)i(to)e(catch)h(the)g (write,)g(and)-75 609 y(to)e(mark)g(the)h(cac)o(he)g(page)g(as)g(dirt)n(y)g (and)f(other)i(cac)o(he)f(pages)-75 654 y(as)g(stale.)-33 702 y(The)22 b(hard\ w)o(are)g(do)q(es)h(not)e(guaran)o(tee)i(consistency)g(b)q(e-)-75 747 y(t)o (w)o(een)e(separate)h(instruction)f(and)g(data)f(caches.)39 b(Conse-)-75 792 y (quen)o(tly)l(,)18 b(virtual)e(addresses)j(con)o(taining)c(data)i(nev)o(er)h (align)-75 838 y(with)13 b(those)g(con)o(taining)f(instructions,)i(ev)o(en)f (when)h(they)f(are)-75 883 y(equiv)n(alen)n(t.)31 b(In)18 b(the)h(implemen)l (tation,)g(it)e(is)h(necessary)j(to)-75 928 y(main)m(tain)16 b(cac)o(he)h(pag\ e)f(state)h(for)f(b)r(oth)g(cac)o(hes,)i(and)e(to)g(in-)-75 974 y(terpret)g (a)d(virtual)g(address)i(in)f(the)g(con)o(text)g(of)g(the)g(cache)g(in)-75 1019 y(whic)o(h)h(it)h(will)e(b)q(e)i(found.)22 b(F)m(or)15 b(simplicit)m(y)m (,)g(though,)g(the)h(al-)-75 1064 y(gorithm)d(sho)o(wn)h(in)g(Figure)h(1)f (assumes)h(that)f(a)h(read)g(access)-75 1110 y(includes)f(b)r(oth)f(instructi\ on)i(and)e(data)h(fetc)o(hes.)-75 1224 y fm(Explanation)f(of)j(the)f(co)q(de) -75 1300 y fr(The)i(co)r(de)g(in)f(Figure)h(1)f(is)h(brok)o(en)g(in)n(to)g (six)g(stanzas.)27 b(The)-75 1345 y(\014rst)e(stanza)g(computes)f(the)g(ph)o (ysical)g(page)g(and)g(target)-75 1391 y(cache)12 b(page)g(corresp)s(onding)f (to)h(the)h(target)f(virtual)g(address.)-33 1438 y(The)18 b(second)i(stanza)e (remo)n(v)o(es)h(the)g(con)o(ten)o(ts)g(of)f(a)g(dirt)o(y)-75 1483 y(cache)33 b(page)f(in)g(the)h(case)h(that)e(it)h(is)f(not)g(the)i(tar-)-75 1529 y(get)e (cac)o(he)g(page.)70 b(A)32 b(dirt)n(y)g(page)f(can)g(b)r(e)g(mapped)-75 1574 y(through)f(only)g(one)h(cac)o(he)g(page,)j(and)d(the)g(op)q(eration)-75 1619 y fd(find)r 14 2 v 13 w(mapped)q 14 2 v 13 w(cache)r 14 2 v 13 w(page)13 b fr (returns)i(that)f(cache)g(page.)-33 1667 y(The)g(third)h(stanza)g(ensures)h (that)e(the)h(target)g(cache)f(page)-75 1712 y(is)g(not)g(stale.)k(This)c(is) f(only)g(relev)o(an)n(t)h(for)g(a)f(CPU)i(access.)-33 1760 y(The)e(fourth)f (stanza)i(ensures)g(that)f(writes)h(in)n(to)f(the)g(mem-)-75 1805 y(ory)21 b (system)f(cause)i(all)e(mapp)o(ed)i(pages)f(to)g(b)q(ecome)f(stale)-75 1850 y (and)f(th)o(us)h(no)f(longer)g(mapp)o(ed.)35 b(In)19 b(the)h(case)g(of)e(a)h (CPU-)-75 1896 y(write,)d(the)h(written)f(page)g(is)f(mark)n(ed)h(as)g(mapped) g(and)g(not)-75 1941 y(stale,)c(and)f(the)h(ph)o(ysical)f(page)h(is)f(mark)m (ed)h(as)g(dirt)o(y)l(.)17 b(The)12 b(ac-)-75 1986 y(tual)g(implem)o(en)m(tat\ ion)f(includes)i(an)f(optimization)e(that)i(sets)-75 2032 y fh(P)5 b fr([)p fh (p)p fr(])p fh(:cache)r 13 2 v 12 w(dir)q(ty)16 b fr(whenever)g(the)f(virtual) f(memory)f(system)-75 2077 y(sets)19 b(the)g fp(p)n(age-mo)n(di\014e)n(d)f fr (bit)g(y)o(et)g(the)h(n)o(um)m(b)q(er)g(of)e(mapped)-75 2122 y(bits)d(is)g (one.)k(Finally)-5 b(,)14 b(note)g(that)g(the)g(data)g(structures)j(used)-75 2168 y(b)o(y)10 b(the)h(algorithm)d(lend)j(themselv)n(es)g(to)g(e\016cien)o (t)g(state)g(mod-)-75 2213 y(i\014cation.)17 b(F)m(or)c(example,)f(all)g(mapp) o(ed)i(\(presen)q(t\))g(pages)f(can)-75 2258 y(b)q(e)j(mark)m(ed)g(stale)f (with)g(a)g(bit)o(wise-or)g(of)f fh(P)6 b fr([)p fh(p)p fr(])p fh(:mapped)14 b fr(and)-75 2304 y fh(P)5 b fr([)p fh(p)p fr(])p fh(:stale)11 b fr(in)n(to)f (the)h fh(P)6 b fr([)p fh(p)p fr(])p fh(:stale)k fr(v)o(ector,)h(and)f(a)g (bit)o(wise-clear)-75 2349 y(of)j(the)i fh(P)5 b fr([)p fh(p)p fr(])p fh(:map\ ped)13 b fr(v)n(ector.)-33 2396 y(The)d(\014fth)g(stanza)h(sets)g(the)g(mapp) o(ed)g(bit)e(for)h(the)h(page)f(on)g(a)-75 2442 y(CPU-read)k(to)e(indicate)h (that)g(the)h(cac)o(he)g(page)f(ma)m(y)g(con)o(tain)-75 2487 y(data)h(from)e (the)i(ph)o(ysical)g(page.)-33 2534 y(The)i(\014nal)g(stanza)h(sets)h(the)f (virtual)f(memory)e(page)j(pro-)-75 2580 y(tections)k(for)e(all)g(mappings)f (to)i(the)g(ph)o(ysical)f(page)h(to)g(b)q(e)-75 2625 y(consistent)14 b(with)g (the)g(cache)g(page)g(state.)1013 -46 y fm(Tw)o(o)i(simple)d(optimizatio)o (ns)1013 27 y fr(The)d(co)r(de)h(sequence)h(in)e(Figure)h(1)f(includes)h(t)o (w)o(o)f(simple)f(opti-)1013 72 y(mizations)h(that)j(reduce)i(the)e(frequency) h(of)e(purge)i(and)e(\015ush)1013 118 y(operations.)34 b(These)20 b(are)f(dri\ v)o(en)g(b)o(y)g(the)g(t)o(w)o(o)g(parameters)1013 163 y fd(will)q 14 2 v 13 w (overwrite)13 b fr(and)h fd(need)r 14 2 v 13 w(data)p fr(.)k(In)d(order,)f (their)h(use)g(is)1013 208 y(describ)r(ed)f(b)q(elo)o(w.)1054 254 y(A)j(strai\ gh)n(tforw)o(ard)g(w)o(a)n(y)g(to)f(eliminate)f(stale)h(data)h(from)1013 300 y (the)e(cac)o(he)g(is)g(to)f(purge)h(it)g(through)f(the)h(virtual)f(address)i (at)1013 345 y(whic)n(h)g(the)h(data)f(is)g(kno)n(wn)g(to)g(b)r(e)g(stale.)25 b(Another)17 b(w)o(a)n(y)f(to)1013 390 y(eliminate)10 b(the)k(stale)f(data,)f (though,)g(is)h(to)f(completely)g(o)o(v)n(er-)1013 436 y(write)i(it)g(with)g (new)g(data)g(from)e(the)j(CPU.)f(In)g(particular,)g(if)1013 481 y(a)j(stale) i(line)e(is)h(kno)o(wn)g(to)g(b)q(ecome)g(completely)f(o)o(v)o(erwrit-)1013 526 y(ten)f(b)q(efore)g(it)f(will)f(b)q(e)i(read,)g(then)g(a)g(preliminary)d (purge)j(is)1013 572 y(not)j(necessary)n(.)34 b(This)19 b(situation)g(commonl) o(y)e(arises)i(when)1013 617 y(the)13 b(virtual)f(memory)e(system)j(prepares) i(a)d(page)h(of)f(memory)1013 662 y(with)j(either)h(a)g fp(c)n(opy-p)n(age)g fr(or)g fp(zer)m(o-\014l)s(l)f fr(op)q(eration.)23 b(In)16 b(b)q(oth)1013 708 y(cases,)22 b(the)e(CPU)g(completely)f(o)n(v)o(erwrites)i(the)g(page)e(with) 1013 753 y(new)e(data)g(b)q(efore)h(an)n(y)f(other)h(access)h(to)e(the)h(page) f(o)q(ccurs.)1013 798 y(In)11 b(suc)o(h)h(cases,)g(the)g(page)f(can)g(b)r(e)g (allo)n(w)n(ed)h(to)f(lea)o(v)n(e)h(the)g(stale)1013 844 y(state)j(without)f (a)g(preliminary)e(purge)j(\()p fd(will)r 14 2 v 13 w(overwrite)d fr(is)1013 889 y(true\).)1054 935 y(A)f(second)g(optimization)d(relates)j(to)g(the)g(ass\ umption)e(that)1013 980 y(dirt)n(y)16 b(data)g(is)f(also)h(useful)f(data.)24 b (This)16 b(assumption)e(is)i(not)1013 1026 y(alw)n(a)n(ys)g(v)m(alid.)22 b (F)l(or)15 b(example,)f(consider)j(the)e(case)i(of)d(a)i(new)1013 1071 y(mapp\ ing)j(where)j(a)f(ph)o(ysical)g(page)g(that)g(had)g(previously)1013 1116 y (b)q(een)12 b(mapped)g(in)n(to)f(one)h(address)h(space)f(is)g(b)q(eing)f(rema\ pped)1013 1162 y(in)n(to)k(another,)h(and)f(then)h(copied)g(in)o(to)f(or)g (zero)r(ed.)24 b(Clearly)-5 b(,)1013 1207 y(the)11 b(previous)h(con)o(ten)o (ts)g(of)e(the)i(ph)o(ysical)f(page)g(are)g(no)g(longer)1013 1252 y(useful.) 18 b(Therefore,)c(if)f(the)h(page)f(is)h(dirt)o(y)l(,)f(it)g(can)h(b)q(e)g (purged)1013 1298 y(instead)g(of)f(\015ushed)i(\()p fd(need)r 14 2 v 13 w(dat\ a)e fr(is)h(false\).)1013 1412 y fn(4.2)55 b(Eliminating)16 b(inconsistencies) 1013 1485 y fr(Although)f(the)j(algorithm)13 b(dela)o(ys)k(consistency)h(op)q (erations)1013 1531 y(and)d(handles)i(aligned)e(mappings,)f(it)i(do)q(es)h (not)f(reduce)h(the)1013 1576 y(frequency)22 b(of)e(unaligned)g(virtual)g(add\ resses.)41 b(W)l(e)21 b(found)1013 1621 y(that)11 b(suc)o(h)g(accesses)j(o)q (ccurred)f(frequently)d(in)h(Mac)o(h)g(b)q(ecause)1013 1667 y(the)16 b(system) h(w)n(as)g(initially)d(designed)j(for)f(use)h(on)f(mac)n(hines)1013 1712 y (with)i(ph)o(ysically)g(indexed)h(caches)h(where)g(virtual)e(address)1013 1757 y(selection)11 b(w)o(as)f(not)h(a)f(factor)h(in)f(cache)h(p)q(erformance.)17 b (Conse-)1013 1803 y(quen)o(tly)l(,)11 b(w)o(e)g(made)e(three)j(c)o(hanges)f (to)g(the)g(system)g(to)f(reduce)1013 1848 y(the)20 b(frequency)h(of)e(unalig\ ned)g(virtual)g(mappings.)35 b(These)1013 1893 y(c)o(hanges)14 b(allo)n(w)g (the)g(virtual)g(memory)d(system)j(to)g(select)h(the)1013 1939 y(virtual)e (address)k(at)d(whic)o(h)h(a)f(ph)o(ysical)h(page)f(is)h(mapped)g(so)1013 1984 y(that)g(it)g(aligns)f(with)h(the)g(previous)h(virtual)e(address)j(b)q(ound) 1013 2029 y(to)h(that)h(ph)o(ysical)f(page.)32 b(None)19 b(of)g(the)g(c)o(han\ ges)g(ha)o(v)o(e)g(af-)1049 2192 y fg(Cac)o(he)1176 2205 y 2 42 v 280 w 2 42 v 231 w 2 42 v 1061 2234 a(page)1176 2246 y 2 42 v 1192 2234 a fc(P)5 b fg([)p fc(p)p fg(])p fc(:mapped)p fg([)p fc(c)p fg(])1456 2246 y 2 42 v 1472 2234 a fc(P)g fg([)p fc(p)p fg(])p fc(:stale)p fg([)p fc(c)p fg(])1687 2246 y 2 42 v 1703 2234 a fc(P)g fg([)p fc(p)p fg(])p fc(:cache)q 12 2 v 11 w(dir)r(ty)1059 2275 y fg(state)1176 2288 y 2 42 v 280 w 2 42 v 231 w 2 42 v 1022 2289 a 971 2 v 1043 2318 a(Empt)o(y)1176 2331 y 2 42 v 1280 2318 a(false)1456 2331 y 2 42 v 1535 2318 a(false)1687 2331 y 2 42 v 1835 2318 a 12 2 v 1037 2360 a(Presen)o (t)1176 2372 y 2 42 v 1283 2360 a(true)1456 2372 y 2 42 v 1535 2360 a(false) 1687 2372 y 2 42 v 1803 2360 a(false)1055 2402 y(Dirty)1176 2414 y 2 42 v 1283 2402 a(true)1456 2414 y 2 42 v 1535 2402 a(false)1687 2414 y 2 42 v 1806 2402 a(true)1058 2443 y(Stale)1176 2456 y 2 42 v 1280 2443 a(false)1456 2456 y 2 42 v 1538 2443 a(true)1687 2456 y 2 42 v 1835 2443 a 12 2 v 1013 2530 a fr(T)l (able)11 b(3:)17 b fi(Corresp)r(ondence)c(b)q(etw)n(een)g(cac)o(he)f(page)g (state)g(and)1013 2575 y(data)h(structures)j(main)m(tained)e(b)o(y)g(the)g (algorithm.)p eop %%Page: 11 11 bop -75 -46 a fr(fected)14 b(the)g(system's)e(functionalit)n(y)l(,)h(only)f (its)h(p)q(erformance,)-75 -1 y(whic)o(h)h(is)g(discussed)h(in)f(the)g(next)g (section.)-75 71 y fm(P)n(ages)i(passed)f(during)e(IPC)j(op)q(erations)-75 148 y fr(A)i(large)g(n)o(um)m(b)q(er)h(of)e(virtual)g(memory)f(remapping)g(op)q (era-)-75 193 y(tions)11 b(corresp)s(ond)g(to)h(ph)o(ysical)f(pages)h(b)q(ein\ g)f(passed)i(as)e(part)-75 238 y(of)19 b(in)n(terpro)r(cess)j(comm)l(unicatio\ n)d(\(IPC\))h(messages.)35 b(The)-75 284 y(k)o(ernel's)19 b(IPC)f(co)q(de)h (transfers)g(a)f(ph)o(ysical)g(page)g(from)e(one)-75 329 y(virtual)e(address) i(to)f(another)g([Y)m(oung)f(et)h(al.)21 b(87].)f(The)15 b(k)o(er-)-75 374 y (nel)g(is)g(free)h(to)f(select)h(an)o(y)f(destination)g(virtual)f(address,)i (so)-75 420 y(c)o(ho)q(osing)e(one)g(that)g(aligns)e(with)i(the)g(source)i (address)f(guar-)-75 465 y(an)o(tees)j(that)g(no)f(cac)o(he)h(managemen)l(t)g (op)q(eration)f(is)g(neces-)-75 510 y(sary)m(.)g(The)10 b(destination)g(virtu\ al)f(address,)i(though,)f(w)o(as)g(orig-)-75 556 y(inally)19 b(c)o(hosen)i (according)f(to)g(a)g(\014rst-\014t)i(strategy)m(,)f(so)g(the)-75 601 y(sourc\ e)13 b(and)f(destination)g(virtual)f(addresses)j(rarely)e(aligned.)-75 646 y (Consequently)l(,)e(the)g(old)f(virtual)g(address,)i(whic)o(h)f(w)n(ould)f (gen-)-75 692 y(erally)j(b)q(e)h(dirt)n(y)g(since)g(it)f(con)o(tained)g(data) g(generated)i(b)o(y)e(the)-75 737 y(sender,)17 b(w)n(ould)e(b)q(e)h(\015ushed\ ,)g(and)f(the)g(new)h(virtual)e(address)-75 782 y(w)o(ould)f(b)q(e)i(purged.) -33 830 y(W)l(e)d(mo)o(di\014ed)g(the)g(IPC)f(co)r(de)h(to)f(select)i(an)e (address)i(in)e(the)-75 875 y(receiver)j(that)g(aligns)f(in)h(the)g(cache)g (with)g(the)g(sender's.)-75 947 y fm(Preparing)f(new)j(pages)f(with)g(cop)n (y)h(and)f(zero-\014ll)-75 1024 y fr(The)25 b(k)o(ernel)g(can)g(prepare)g(a)g (new)f(page)h(with)f(data)g(us-)-75 1069 y(ing)i(cop)o(y)g(and)g(zero-\014ll.) 56 b(The)26 b(\014rst)i(op)q(eration)e(copies)-75 1114 y(data)17 b(from)e(one) i(ph)o(ysical)g(page)g(to)g(another,)h(and)f(the)g(sec-)-75 1160 y(ond)24 b (clears)g(a)g(ph)o(ysical)g(page)f(b)o(y)h(\014lling)f(it)g(with)h(zeros.)-75 1205 y(P)o(age)c(preparation)h(in)f(Mac)o(h)g(is)g(split)g(b)q(etw)o(een)h (mac)n(hine-)-75 1250 y(indep)q(endent)12 b(and)g(mac)m(hine-dep)r(endent)g (componen)o(ts.)18 b(The)-75 1296 y(mac)n(hine-indep)q(endent)11 b(componen)o (t)h(deals)f(with)g(virtual)g(ad-)-75 1341 y(dresses)21 b(and)e(initiates)f (page)h(preparation)g(in)g(resp)r(onse)h(to)-75 1386 y(demands)11 b(on)h(the) h(virtual)e(memory)f(system.)17 b(The)c(mac)n(hine-)-75 1432 y(dep)r(endent) 20 b(componen)o(t)g(deals)h(with)e(ph)o(ysical)h(pages)h(and)-75 1477 y(imple\ men)l(ts)h(the)g(cop)o(y)f(and)g(zero-\014ll)g(op)q(erations.)41 b(With)-75 1522 y(a)17 b(virtually)f(indexed)i(cache,)g(a)f(page)h(should)f(b)q(e)h(prep\ ared)-75 1568 y(through)12 b(a)g(virtual)g(address)i(that)e(aligns)f(with)h (the)h(ultimate)-75 1613 y(mapping)g(for)i(the)h(page.)22 b(This)15 b(conside\ ration)g(is)g(unimpor-)-75 1658 y(tan)o(t)9 b(on)g(a)g(mac)n(hine)g(with)g (a)g(ph)o(ysically)g(indexed)g(cache,)h(ho)o(w-)-75 1704 y(ev)o(er,)k(so)g (the)g(preparation)f(routines)i(\(whic)o(h)e(w)o(ere)i(designed)-75 1749 y (assuming)h(suc)o(h)i(a)f(cac)o(he\))h(w)o(ere)g(not)f(passed)h(the)g(ultimat\ e)-75 1794 y(virtual)13 b(address.)-33 1842 y(W)l(e)26 b(extended)h(the)f(mac) n(hine-dep)q(endent)g(in)o(terface)g(so)-75 1888 y(that)15 b(the)h(mac)m(hine\ -indep)r(enden)o(t)g(la)n(y)n(er)g(could)f(pass)g(the)h(ul-)-75 1933 y(timate) h(virtual)i(address)h(do)n(wn)f(to)g(the)h(page)e(preparation)-75 1978 y(rout\ ines.)34 b(A)19 b(similar)d(extension)k(w)n(as)f(in)o(tro)q(duced)h(b)o(y)f (the)-75 2024 y(T)m(ut)14 b(pro)r(ject)h([Chao)d(et)j(al.)i(90].)-75 2140 y fm (Shared)d(pages)h(in)g(the)g(Unix)g(serv)n(er)-75 2217 y fr(Mac)o(h's)e(user-\ level)h(Unix)f(serv)o(er)i(allo)o(cates)g(and)e(shares)i(sev-)-75 2262 y(eral) i(pages)g(of)f(memory)f(with)h(each)h(Unix)f(pro)r(cess.)28 b(These)-75 2308 y (pages)20 b(are)h(exp)q(ected)g(to)f(b)q(e)h(used)f(as)g(a)g(high-bandwidth,) -75 2353 y(lo)n(w-latency)i(c)o(hannel)f(for)g(passing)h(information)c(b)q (etw)o(een)-75 2398 y(applications)g(and)i(the)g(Unix)e(server.)35 b(In)20 b (the)g(initial)d(v)o(er-)-75 2444 y(sion)d(of)h(the)g(system,)f(the)i(Unix)e (server)h(requested)i(that)e(the)-75 2489 y(shared)c(pages)f(b)q(e)g(allocate\ d)h(at)e(a)h(sp)q(eci\014c)h(virtual)e(address)i(in)-75 2534 y(its)16 b(o)n (wn)g(and)g(eac)o(h)g(pro)q(cess')h(address)g(space.)25 b(These)17 b(pages) -75 2580 y(did)g(not)h(align,)f(so)h(accesses)j(resulted)e(in)e(frequent)h (consis-)-75 2625 y(tency)d(faults.)1054 -46 y(W)l(e)f(changed)g(the)g(Unix)f (server)i(so)f(that)f(these)j(pages)e(can)1013 -1 y(b)q(e)22 b(allocated)g (at)g(addresses)h(determined)f(b)o(y)g(the)g(virtual)1013 44 y(memory)11 b (system,)i(thereby)h(aligning.)1013 156 y fq(5)69 b(P)n(erformance)1054 247 y fr(W)l(e)20 b(ha)o(v)o(e)g(measured)g(the)g(three)h(b)q(enchmark)d(programs) 1013 292 y(describ)r(ed)j(in)g(Section)g(2.5)g(on)f(the)i(HP)g(9000)e(Series) i(700)1013 337 y(\(Mo)q(del)11 b(720\).)17 b(W)l(e)c(ran)f(eac)o(h)g(b)q(ench\ mark)e(on)i(six)g(successiv)q(e)1013 383 y(con\014gurations)k(of)h(the)g(Mac) o(h)g(3.0)f(k)n(ernel.)28 b(T)m(able)16 b(4)h(sho)o(ws)1013 428 y(the)12 b (p)q(erformance)f(statistics)i(a)o(v)n(eraged)g(o)n(v)o(er)f(the)h(last)e(t)o (w)o(o)h(of)1013 473 y(three)18 b(consecutive)g(runs)g(of)e(each)h(b)q(enchma\ rk)f(on)h(an)g(oth-)1013 519 y(erwise)g(unloaded)f(system.)24 b(The)17 b(tabl\ e)f(sho)o(ws)h(the)f(elapsed)1013 564 y(time,)10 b(operation)i(coun)o(ts,)g (and)f(a)n(v)o(erage)h(cycle)g(coun)o(ts)g(across)1013 609 y(v)m(arious)17 b (con\014gurations)h(for)f(eac)o(h)h(of)f(the)h(programs.)28 b(The)1013 655 y (cycle)20 b(coun)o(ts)g(w)o(ere)h(gathered)g(using)e(the)i(pro)q(cessor's)g (on-)1013 700 y(c)o(hip)13 b(cycle)i(coun)o(ter.)1054 747 y(The)c(con\014gura\ tions)f(ranged)h(from)e(one)h(ha)o(ving)f(only)h(min-)1013 793 y(imal)17 b (cache)j(consistency)i(mac)n(hinery)e(\(that)h(describ)r(ed)g(as)1013 838 y (\\old")15 b(in)i(Section)g(2.5)f(and)h(lab)q(eled)g(\\A")g(in)f(the)i(table\ \))f(to)1013 883 y(one)g(ha)n(ving)f(all)g(of)g(the)h(mac)n(hinery)g(describ) r(ed)h(in)e(the)h(pre-)1013 929 y(vious)f(section)j(\(that)e(describ)s(ed)g (as)h(\\new")f(in)g(Section)h(2.5)1013 974 y(and)i(labeled)h(\\F")e(in)h(the) h(table\).)37 b(Eac)o(h)20 b(successiv)q(e)h(v)n(er-)1013 1019 y(sion)15 b (pro)o(vides)h(a)f(cum)n(ulativ)n(e)h(and)f(more)g(e\016cien)o(t)h(solution) 1013 1065 y(to)i(consistency)j(managemen)l(t)f(than)f(the)g(previous)h(b)o (y)f(in-)1013 1110 y(cluding)e(an)g(additional)f(optimization.)27 b(In)18 b (order,)h(w)o(e)f(\(B\))1013 1155 y(dela)n(y)j(\015ush)h(and)e(purge)i(op)q (erations)f(un)o(til)f(a)h(virtual)f(ad-)1013 1201 y(dress)h(is)g(reused)h (\()p fp(+lazy)f(unmap\))p fr(,)h(\(C\))f(allo)m(w)f(the)h(k)o(ernel)1013 1246 y(to)16 b(select)i(virtual)e(addresses)j(for)d(m)m(ultiply)g(mapp)o(ed)i(page\ s)1013 1291 y(so)11 b(that)h(they)h(align)d(in)h(the)i(cac)o(he)g(\()p fp(+al\ ign)g(p)n(ages)p fr(\),)f(\(D\))g(sup-)1013 1337 y(p)q(ort)k(aligned)f(page)h (preparation)g(\()p fp(+aligne)n(d)h(pr)m(ep)o(ar)m(e)p fr(\),)f(\(E\))1013 1382 y(replace)c(\015ushes)i(with)d(purges)i(when)g(old)e(data)h(will)e(never) i(b)r(e)1013 1427 y(used)g(\()p fp(+)p fd(need)q 14 2 v 14 w(data)p fr(\),)e (and)h(\(F\))h(eliminate)d(purges)k(when)e(the)1013 1473 y(destination)i(cac) o(he)h(page)f(is)g(b)q(eing)g(completely)f(o)o(v)o(erwritten)1013 1518 y(\()p fp(+)p fd(will)q 14 2 v 13 w(overwrite)p fr(\).)k(The)11 b(b)q(ottom)e(t)o (w)o(o)h(ro)o(ws)h(of)g(the)g(table)1013 1563 y(sho)o(w)j(total)g(coun)o(ts)i (and)e(times)g(for)h(the)g(three)h(b)q(enchmarks)1013 1609 y(running)d(on)h (the)g(\014nal)g(and)f(most)g(e\016cien)o(t)h(con\014guration.)1054 1656 y (In)i(the)g(b)q(enchmarks,)e(all)g(DMA)i(activit)n(y)f(is)h(due)g(to)f(disk) 1013 1701 y(access.)28 b(There)18 b(are)f(no)f(disk)h(reads,)g(whic)o(h)g(cor\ resp)s(ond)f(to)1013 1747 y(DMA-writes,)22 b(for)e(either)h(of)f(the)h(\014rs\ t)g(t)o(w)o(o)f(b)r(enchmarks.)1013 1792 y(This)f(is)h(b)q(ecause)i(all)d(\ \014le)h(system)f(reads)i(are)g(satis\014ed)f(b)o(y)1013 1837 y(the)f(Unix)g (bu\013er)h(cache.)34 b(The)20 b(third)f(b)r(enc)o(hmark,)g(whic)o(h)1013 1883 y(accesses)h(substantially)c(more)h(\014le)h(system)g(data)f(than)h(the)1013 1928 y(other)c(t)o(w)o(o,)f(do)q(es)i(require)f(disk)g(reads.)19 b(The)c(lo)n (w)e(cyle)i(coun)o(t)1013 1973 y(for)10 b(DMA-read)i(\015ushes)g(is)f(b)q(eca\ use)i(the)f(\014le)f(system's)g(write-)1013 2019 y(b)q(ehind)18 b(p)r(olicy)f (in)o(tro)q(duces)j(dela)o(ys)f(b)q(et)o(w)o(een)h(the)f(dirt)o(ying)1013 2064 y(and)13 b(subsequen)q(t)g(\015ushing)h(of)f(a)g(bu\013er)i(cache)f(bloc)o (k,)g(so)f(the)1013 2109 y(dirt)n(y)h(lines)g(tend)g(to)g(b)q(e)h(written)f (bac)o(k)g(naturally)-5 b(.)1013 2232 y fn(5.1)55 b(In)o(terpretation)17 b (of)h(results)1013 2308 y fp(Car)m(eful)j(c)n(ache)g(management)h(impr)n(oves) f(applic)n(ation)g(p)o(er-)1013 2353 y(formanc)m(e.)28 b fr(Mo)n(ving)17 b (do)n(wn)o(w)o(ard)g(o)o(v)n(er)h(successiv)q(e)f(con\014gu-)1013 2398 y(rati\ ons)c(for)g(a)g(giv)n(en)h(b)q(enchmark)e(sho)o(ws)i(that)f(p)q(erformance) 1013 2444 y(impro)m(v)n(es)j(b)o(y)e(dela)o(ying)g(cac)o(he)h(consistency)i (op)q(erations,)d(b)o(y)1013 2489 y(aligning)c(pages,)i(and)h(b)n(y)g(exploit\ ing)e(the)i(seman)n(tics)g(of)e(data)1013 2534 y(use.)18 b(F)m(or)13 b(exampl\ e,)e(the)i(decrease)i(in)e(page)g(purges)h(b)q(et)o(w)o(een)1013 2580 y(con\ \014gurations)21 b(\\A")h(and)f(\\B")h(re\015ects)i(the)f(fact)e(that)h(a) 1013 2625 y(ph)n(ysical)16 b(page)g(is)g(often)g(unmapped,)h(and)e(then)i(rem\ apped)p eop %%Page: 12 12 bop 290 -29 a 2 42 v 105 w 2 42 v 2 42 v 466 -42 a fg(VM)600 -29 y 2 42 v 640 -42 a(Consis-)800 -29 y 2 42 v 8 w 2 42 v 2 42 v 867 -42 a(T)m(otal)1013 -29 y 2 42 v 1069 -42 a(DMA)1217 -29 y 2 42 v 1256 -42 a(Data)13 b(to)1422 -29 y 2 42 v 8 w 2 42 v 2 42 v 1493 -42 a(P)o(age)1635 -29 y 2 42 v 1697 -42 a(P)o (age)1839 -29 y 2 42 v 1884 -42 a(DMA)290 12 y 2 42 v 105 w 2 42 v 2 42 v 424 0 a(Mapping)600 12 y 2 42 v 655 0 a(tency)800 12 y 2 42 v 8 w 2 42 v 2 42 v 871 0 a(P)o(age)1013 12 y 2 42 v 1073 0 a(Read)1217 12 y 2 42 v 1282 0 a(Inst\ .)1422 12 y 2 42 v 8 w 2 42 v 2 42 v 1476 0 a(Purges)1635 12 y 2 42 v 1681 0 a (Purges)1839 12 y 2 42 v 1883 0 a(W)n(rite)35 41 y(Program)290 54 y 2 42 v 299 41 a(Time)395 54 y 2 42 v 447 41 a(F)m(aults)600 54 y 2 42 v 649 41 a(F)m(aul\ ts)800 54 y 2 42 v 8 w 2 42 v 2 42 v 848 41 a(Flushes)1013 54 y 2 42 v 1053 41 a(Flushes)1217 54 y 2 42 v 1265 41 a(Copies)1422 54 y 2 42 v 8 w 2 42 v 2 42 v 1473 41 a(\(Instr.\))1635 54 y 2 42 v 1681 41 a(\(Data\))1839 54 y 2 42 v 1874 41 a(Purges)290 55 y 1731 2 v 40 x 2 42 v 2 42 v 311 83 a(secs)395 95 y 2 42 v 423 83 a(cn)o(t)47 b(a)o(vg)600 95 y 2 42 v 627 83 a(cn)o(t)f(a)o(vg)800 95 y 2 42 v 8 w 2 42 v 2 42 v 836 83 a(cn)o(t)h(a)o(vg)1013 95 y 2 42 v 1040 83 a (cn)o(t)h(a)o(vg)1217 95 y 2 42 v 1245 83 a(cn)o(t)f(a)o(vg)1422 95 y 2 42 v 8 w 2 42 v 2 42 v 1458 83 a(cn)o(t)g(a)o(vg)1635 95 y 2 42 v 1662 83 a(cn)o(t)h (a)o(vg)1839 95 y 2 42 v 1867 83 a(cn)o(t)35 b(avg)290 140 y 2 45 v 105 w 2 45 v 2 45 v 406 127 a ff(\002)p fg(10)474 111 y fk(3)524 127 y fg(cyc)600 140 y 2 45 v 610 127 a ff(\002)p fg(10)678 111 y fk(3)726 127 y fg(cyc)800 140 y 2 45 v 8 w 2 45 v 2 45 v 819 127 a ff(\002)p fg(10)887 111 y fk(3)937 127 y fg(cyc) 1013 140 y 2 45 v 1024 127 a ff(\002)p fg(10)1092 111 y fk(3)1141 127 y fg (cyc)1217 140 y 2 45 v 1228 127 a ff(\002)p fg(10)1296 111 y fk(3)1346 127 y fg(cyc)1422 140 y 2 45 v 8 w 2 45 v 2 45 v 1441 127 a ff(\002)p fg(10)1509 111 y fk(3)1559 127 y fg(cyc)1635 140 y 2 45 v 1645 127 a ff(\002)p fg(10)1713 111 y fk(3)1763 127 y fg(cyc)1839 140 y 2 45 v 1850 127 a ff(\002)p fg(10)1918 111 y fk(3)1956 127 y fg(cyc)-75 141 y 2097 2 v 10 x 2097 2 v -66 180 a(A.)12 b fb (afs-b)m(ench)290 193 y 2 42 v 319 180 a fg(66.0)395 193 y 2 42 v 405 180 a (60.65)23 b(1507)600 193 y 2 42 v 609 180 a(24.07)c(2165)800 193 y 2 42 v 8 w 2 42 v 818 180 a(77.41)k(1327)1013 193 y 2 42 v 1023 180 a(0.726)41 b(316) 1217 193 y 2 42 v 1295 180 a(0)80 b(0)1422 193 y 2 42 v 8 w 2 42 v 1440 180 a (18.30)23 b(1099)1635 193 y 2 42 v 1644 180 a(43.79)42 b(387)1839 193 y 2 42 v 1917 180 a(0)57 b(0)-66 222 y(B.)13 b(+lazy)h(unmap)290 234 y 2 42 v 319 222 a (64.1)395 234 y 2 42 v 405 222 a(60.61)23 b(1786)600 234 y 2 42 v 609 222 a (23.74)c(1413)800 234 y 2 42 v 8 w 2 42 v 818 222 a(70.36)k(1148)1013 234 y 2 42 v 1023 222 a(0.703)41 b(313)1217 234 y 2 42 v 1227 222 a(7.012)h(827)1422 234 y 2 42 v 8 w 2 42 v 1440 222 a(4.874)23 b(1105)1635 234 y 2 42 v 1644 222 a(42.86)42 b(295)1839 234 y 2 42 v 1917 222 a(0)57 b(0)-66 264 y(C.)12 b(+ali\ gn)j(pages)290 276 y 2 42 v 319 264 a(62.0)395 276 y 2 42 v 405 264 a(60.58) 23 b(1712)600 276 y 2 42 v 609 264 a(0.046)c(1288)800 276 y 2 42 v 8 w 2 42 v 818 264 a(54.45)k(1328)1013 276 y 2 42 v 1023 264 a(0.695)41 b(304)1217 276 y 2 42 v 1227 264 a(7.058)h(831)1422 276 y 2 42 v 8 w 2 42 v 1440 264 a(4.803) 23 b(1106)1635 276 y 2 42 v 1644 264 a(42.76)42 b(294)1839 276 y 2 42 v 1917 264 a(0)57 b(0)-66 305 y(D.)13 b(+aligned)i(prepare)290 318 y 2 42 v 319 305 a (59.5)395 318 y 2 42 v 405 305 a(60.56)23 b(1272)600 318 y 2 42 v 609 305 a (0.046)c(1293)800 318 y 2 42 v 8 w 2 42 v 818 305 a(25.19)42 b(605)1013 318 y 2 42 v 1023 305 a(0.681)f(311)1217 318 y 2 42 v 1227 305 a(7.058)h(701)1422 318 y 2 42 v 8 w 2 42 v 1440 305 a(4.755)23 b(1107)1635 318 y 2 42 v 1644 305 a(14.25)42 b(297)1839 318 y 2 42 v 1917 305 a(0)57 b(0)-66 347 y(E.)13 b(+)p fe(need)p 12 2 v 12 w(data)290 359 y 2 42 v 319 347 a fg(59.9)395 359 y 2 42 v 405 347 a(60.59)23 b(1266)600 359 y 2 42 v 609 347 a(0.046)c(1338)800 359 y 2 42 v 8 w 2 42 v 818 347 a(7.753)42 b(669)1013 359 y 2 42 v 1023 347 a(0.695)f (322)1217 359 y 2 42 v 1227 347 a(7.058)h(703)1422 359 y 2 42 v 8 w 2 42 v 1440 347 a(4.767)23 b(1103)1635 359 y 2 42 v 1644 347 a(31.80)42 b(470)1839 359 y 2 42 v 1917 347 a(0)57 b(0)-66 388 y(F.)13 b(+)p fe(will)p 12 2 v 12 w (overwrite)290 401 y 2 42 v 319 388 a fg(59.4)395 401 y 2 42 v 405 388 a(60.5\ 8)23 b(1264)600 401 y 2 42 v 609 388 a(0.046)c(1336)800 401 y 2 42 v 8 w 2 42 v 818 388 a(7.754)42 b(666)1013 401 y 2 42 v 1023 388 a(0.696)f(310)1217 401 y 2 42 v 1227 388 a(7.058)h(701)1422 401 y 2 42 v 8 w 2 42 v 1440 388 a(4.857) 23 b(1105)1635 401 y 2 42 v 1644 388 a(17.75)42 b(613)1839 401 y 2 42 v 1917 388 a(0)57 b(0)-75 402 y 2097 2 v 10 x 2097 2 v -66 441 a(A.)12 b fb(latex-p) l(ap)m(er)290 454 y 2 42 v 338 441 a fg(5.8)395 454 y 2 42 v 405 441 a(1.481) 23 b(1335)600 454 y 2 42 v 609 441 a(0.963)c(2235)800 454 y 2 42 v 8 w 2 42 v 818 441 a(2.029)k(1253)1013 454 y 2 42 v 1023 441 a(0.056)41 b(311)1217 454 y 2 42 v 1295 441 a(0)80 b(0)1422 454 y 2 42 v 8 w 2 42 v 1440 441 a(0.273)23 b (1126)1635 454 y 2 42 v 1644 441 a(1.250)42 b(456)1839 454 y 2 42 v 1917 441 a (0)57 b(0)-66 483 y(B.)13 b(+lazy)h(unmap)290 495 y 2 42 v 338 483 a(5.8)395 495 y 2 42 v 405 483 a(1.477)23 b(1647)600 495 y 2 42 v 609 483 a(0.952)c(148\ 0)800 495 y 2 42 v 8 w 2 42 v 818 483 a(1.649)k(1232)1013 495 y 2 42 v 1023 483 a(0.052)41 b(324)1217 495 y 2 42 v 1227 483 a(0.088)h(540)1422 495 y 2 42 v 8 w 2 42 v 1440 483 a(0.003)23 b(1127)1635 495 y 2 42 v 1644 483 a(0.485)42 b(301)1839 495 y 2 42 v 1917 483 a(0)57 b(0)-66 525 y(C.)12 b(+align)j(pages) 290 537 y 2 42 v 338 525 a(5.8)395 537 y 2 42 v 405 525 a(1.474)23 b(1469)600 537 y 2 42 v 678 525 a(0)76 b(0)800 537 y 2 42 v 8 w 2 42 v 818 525 a(1.107) 23 b(1621)1013 537 y 2 42 v 1023 525 a(0.052)41 b(303)1217 537 y 2 42 v 1227 525 a(0.088)h(547)1422 537 y 2 42 v 8 w 2 42 v 1440 525 a(0.003)23 b(1120) 1635 537 y 2 42 v 1644 525 a(0.361)42 b(296)1839 537 y 2 42 v 1917 525 a(0)57 b(0)-66 566 y(D.)13 b(+aligned)i(prepare)290 579 y 2 42 v 338 566 a(5.6)395 579 y 2 42 v 405 566 a(1.479)23 b(1135)600 579 y 2 42 v 678 566 a(0)76 b(0) 800 579 y 2 42 v 8 w 2 42 v 818 566 a(0.423)42 b(729)1013 579 y 2 42 v 1023 566 a(0.055)f(305)1217 579 y 2 42 v 1227 566 a(0.088)h(539)1422 579 y 2 42 v 8 w 2 42 v 1440 566 a(0.002)23 b(1122)1635 579 y 2 42 v 1644 566 a(0.161)42 b (296)1839 579 y 2 42 v 1917 566 a(0)57 b(0)-66 608 y(E.)13 b(+)p fe(need)p 12 2 v 12 w(data)290 620 y 2 42 v 338 608 a fg(5.7)395 620 y 2 42 v 405 608 a (1.472)23 b(1131)600 620 y 2 42 v 678 608 a(0)76 b(0)800 620 y 2 42 v 8 w 2 42 v 818 608 a(0.140)42 b(448)1013 620 y 2 42 v 1023 608 a(0.052)f(304)1217 620 y 2 42 v 1227 608 a(0.088)h(534)1422 620 y 2 42 v 8 w 2 42 v 1440 608 a(0.003) 23 b(1120)1635 620 y 2 42 v 1644 608 a(0.310)g(1197)1839 620 y 2 42 v 1917 608 a(0)57 b(0)-66 649 y(F.)13 b(+)p fe(will)p 12 2 v 12 w(overwrite)290 662 y 2 42 v 338 649 a fg(5.5)395 662 y 2 42 v 405 649 a(1.481)23 b(1139)600 662 y 2 42 v 678 649 a(0)76 b(0)800 662 y 2 42 v 8 w 2 42 v 818 649 a(0.143)42 b(463) 1013 662 y 2 42 v 1023 649 a(0.055)f(310)1217 662 y 2 42 v 1227 649 a(0.088)h (560)1422 662 y 2 42 v 8 w 2 42 v 1440 649 a(0.002)23 b(1118)1635 662 y 2 42 v 1644 649 a(0.278)g(1310)1839 662 y 2 42 v 1917 649 a(0)57 b(0)-75 663 y 2097 2 v 10 x 2097 2 v -66 702 a(A.)12 b fb(kernel-build)290 715 y 2 42 v 300 702 a fg(678.9)395 715 y 2 42 v 405 702 a(408.5)23 b(1388)600 715 y 2 42 v 609 702 a (249.3)c(2223)800 715 y 2 42 v 8 w 2 42 v 818 702 a(602.9)k(1354)1013 715 y 2 42 v 1023 702 a(5.306)41 b(310)1217 715 y 2 42 v 1295 702 a(0)80 b(0)1422 715 y 2 42 v 8 w 2 42 v 1440 702 a(81.11)23 b(1098)1635 715 y 2 42 v 1644 702 a (337.3)42 b(392)1839 715 y 2 42 v 1917 702 a(0)57 b(0)-66 744 y(B.)13 b(+lazy) h(unmap)290 756 y 2 42 v 300 744 a(661.3)395 756 y 2 42 v 405 744 a(407.7)23 b (1772)600 756 y 2 42 v 609 744 a(247.6)c(1457)800 756 y 2 42 v 8 w 2 42 v 818 744 a(541.9)k(1115)1013 756 y 2 42 v 1023 744 a(5.365)41 b(324)1217 756 y 2 42 v 1227 744 a(52.06)h(608)1422 756 y 2 42 v 8 w 2 42 v 1440 744 a(28.31)23 b (1104)1635 756 y 2 42 v 1644 744 a(309.1)42 b(298)1839 756 y 2 42 v 1849 744 a (1.000)18 b(368)-66 785 y(C.)12 b(+align)j(pages)290 798 y 2 42 v 300 785 a (641.9)395 798 y 2 42 v 405 785 a(407.7)23 b(1706)600 798 y 2 42 v 609 785 a (1.001)c(1381)800 798 y 2 42 v 8 w 2 42 v 818 785 a(405.4)k(1278)1013 798 y 2 42 v 1023 785 a(5.258)41 b(326)1217 798 y 2 42 v 1227 785 a(52.58)h(608)1422 798 y 2 42 v 8 w 2 42 v 1440 785 a(27.06)23 b(1105)1635 798 y 2 42 v 1644 785 a(303.0)42 b(294)1839 798 y 2 42 v 1849 785 a(1.549)18 b(400)-66 827 y(D.)13 b (+aligned)i(prepare)290 839 y 2 42 v 300 827 a(626.8)395 839 y 2 42 v 405 827 a(408.8)23 b(1204)600 839 y 2 42 v 609 827 a(1.002)c(1402)800 839 y 2 42 v 8 w 2 42 v 818 827 a(197.6)42 b(473)1013 839 y 2 42 v 1023 827 a(5.283)f(321)1217 839 y 2 42 v 1227 827 a(52.58)h(552)1422 839 y 2 42 v 8 w 2 42 v 1440 827 a (30.61)23 b(1104)1635 839 y 2 42 v 1644 827 a(101.1)42 b(297)1839 839 y 2 42 v 1849 827 a(1.572)18 b(477)-66 869 y(E.)13 b(+)p fe(need)p 12 2 v 12 w(data) 290 881 y 2 42 v 300 869 a fg(627.6)395 881 y 2 42 v 405 869 a(408.9)23 b(121\ 1)600 881 y 2 42 v 609 869 a(1.015)c(1406)800 881 y 2 42 v 8 w 2 42 v 818 869 a(57.88)42 b(531)1013 881 y 2 42 v 1023 869 a(5.300)f(318)1217 881 y 2 42 v 1227 869 a(52.57)h(553)1422 881 y 2 42 v 8 w 2 42 v 1440 869 a(29.77)23 b(110\ 4)1635 881 y 2 42 v 1644 869 a(239.6)42 b(390)1839 881 y 2 42 v 1849 869 a (1.600)18 b(497)-66 910 y(F.)13 b(+)p fe(will)p 12 2 v 12 w(overwrite)290 923 y 2 42 v 300 910 a fg(620.9)395 923 y 2 42 v 405 910 a(407.6)23 b(1199)600 923 y 2 42 v 609 910 a(0.986)c(1409)800 923 y 2 42 v 8 w 2 42 v 818 910 a(57.88) 42 b(529)1013 923 y 2 42 v 1023 910 a(5.305)f(328)1217 923 y 2 42 v 1227 910 a (52.58)h(549)1422 923 y 2 42 v 8 w 2 42 v 1440 910 a(29.02)23 b(1104)1635 923 y 2 42 v 1644 910 a(142.6)42 b(452)1839 923 y 2 42 v 1849 910 a(1.537)18 b (462)-75 924 y 2097 2 v -66 953 a(T)m(otal)13 b(for)g(\\F")290 966 y 2 42 v 300 953 a(685.8)395 966 y 2 42 v 405 953 a(469.7)23 b(3602)600 966 y 2 42 v 609 953 a(1.032)c(2745)800 966 y 2 42 v 8 w 2 42 v 818 953 a(65.78)k(1658) 1013 966 y 2 42 v 1023 953 a(6.056)41 b(948)1217 966 y 2 42 v 1227 953 a(59.7\ 2)23 b(1810)1422 966 y 2 42 v 8 w 2 42 v 1440 953 a(33.88)g(3327)1635 966 y 2 42 v 1644 953 a(160.6)g(2375)1839 966 y 2 42 v 1849 953 a(1.537)18 b(462)-75 967 y 2097 2 v 10 x 2097 2 v -66 1006 a(Seconds)c(for)f(\\F")290 1019 y 2 42 v 300 1006 a(685.8)395 1019 y 2 42 v 405 1006 a(11.34)18 b(1.6%)600 1019 y 2 42 v 629 1006 a(0.03)44 b(0%)800 1019 y 2 42 v 8 w 2 42 v 837 1006 a(0.72)19 b (.10%)1013 1019 y 2 42 v 1042 1006 a(0.04)f(.01%)1217 1019 y 2 42 v 1246 1006 a(0.68)h(.10%)1422 1019 y 2 42 v 8 w 2 42 v 1459 1006 a(0.75)f(.11%)1635 1019 y 2 42 v 1664 1006 a(1.51)g(.22%)1839 1019 y 2 42 v 1868 1006 a(0.01)25 b(0%) -75 1021 y 2097 2 v 88 x fr(T)m(able)10 b(4:)16 b fi(P)o(erformance)10 b(of)g (three)i(b)r(enc)o(hmark)d(programs)h(using)g(v)n(ariously)g(con\014gured)h (v)o(ersions)g(of)f(Mac)o(h)h(3.0)f(\(MK67\))g(running)-75 1154 y(on)k(a)f (50Mhz)h(HP)g(9000)f(Series)i(700)e(\(Mo)q(del)h(720\).)-75 1276 y fr(through) i(an)g(aligned)g(virtual)f(address.)26 b(The)17 b(sligh)n(t)f(reduc-)-75 1322 y(tion)h(in)h(purge)g(time)e(for)i(the)g(data)g(cac)o(he)g(o)q(ccurs)i(b)q (ecause)-75 1367 y(the)11 b(dela)o(y)n(ed)g(purge)g(reduces)i(the)e(lik)m(eli\ ho)q(o)q(d)f(that)h(the)g(page's)-75 1412 y(data)h(is)g(in)g(the)h(cache.)18 b (That)12 b(no)h(suc)o(h)g(reduction)g(o)q(ccurs)h(for)-75 1458 y(the)j(instru\ ction)g(cache)g(app)q(ears)g(to)g(b)q(e)g(an)f(artifact)h(of)f(the)-75 1503 y (720's)f(implemen)m(tation)g(whic)o(h)h(requires)i(constan)o(t)f(time)e(to) -75 1548 y(purge)f(the)h(instruction)f(cache,)g(regardless)h(of)e(its)h(con)o (ten)o(ts.)-33 1597 y(The)f(reduction)g(in)f(\015ushes)i(b)r(et)o(w)o(een)g (con\014gurations)e(\\D")-75 1643 y(and)g(\\E")g(sho)o(ws)h(that)f(dirt)o(y)g (data)g(is)g(often)g(left)g(in)g(the)g(cache)-75 1688 y(nev)o(er)17 b(to)e (b)r(e)h(accessed)i(again.)23 b(This)15 b(data)h(can)g(b)q(e)g(purged,)-75 1733 y(rather)f(than)e(\015ushed.)19 b(As)c(exp)q(ected,)g(the)f(decrease)i (in)e(data)-75 1779 y(cache)f(\015ushes)h(is)f(o\013set)h(b)o(y)f(an)g(equiv) m(alen)o(t)g(increase)h(in)f(data)-75 1824 y(cache)i(purges.)23 b(No)15 b(inc\ rease)i(o)q(ccurs)g(for)d(purges)j(of)d(the)i(in-)-75 1869 y(struction)c(cach\ e)g(b)q(ecause)h(that)f(cache)g(nev)o(er)g(con)o(tains)g(dirt)o(y)-75 1915 y (data.)17 b(Execution)11 b(time)e(do)q(es)i(not)f(impro)m(v)o(e)h(b)q(ecause) h(the)f(720)-75 1960 y(app)q(ears)k(to)e(purge)i(no)f(more)e(quic)o(kly)h(tha\ n)h(it)g(\015ushes.)819 1945 y fl(4)-33 2009 y fp(The)k(overhe)n(ad)i(to)f (maintain)g(c)n(onsistency)g(state)g(is)f(low.)-75 2054 y fr(The)12 b(Mac)o (h)g(k)o(ernel)g(lazily)e(ev)o(aluates)h(man)n(y)g(virtual)g(memory)-75 2099 y (op)q(erations.)23 b(F)l(or)16 b(example,)e(mac)m(hine-dep)r(endent)h(page)h (ta-)-75 2145 y(ble)h(en)o(tries)h(are)f(not)g(created)i(un)o(til)d(they)i (are)f(\014rst)h(faulted)-75 2190 y(on,)e(thereb)q(y)g(enabling)g(sparse)i (but)e(space-e\016cien)q(t)g(virtual)-75 2235 y(address)e(spaces)h([Rashid)d (et)h(al.)k(87].)g(This)c(approac)o(h)g(in)o(tro-)-75 2281 y(duces)i(a)e(cert\ ain)h(n)o(um)m(b)q(er)h(of)d fp(mapping)k(faults)p fr(,)c(whic)o(h)h(o)q(ccur) -75 2326 y(ev)o(ery)20 b(time)e(a)h(virtual)f(page)h(is)g(\014rst)h(accessed) i(b)o(y)d(an)g(ad-)-75 2371 y(dress)d(space.)j(These)c(faults)f(o)q(ccur)h (regardless)g(of)f(the)g(cache)-75 2417 y(arc)o(hitecture.)41 b(In)20 b(contr\ ast,)i(a)f fp(c)n(onsistency)h(fault)e fr(o)q(ccurs)-75 2462 y(whenever)h(a)f (reference)j(to)d(a)g(virtual)f(address)j(requires)g(a)-75 2516 y 396 2 v -29 2577 a fk(4)-11 2589 y fo(W)m(e)11 b(ha)o(v)o(e)f(v)o(eri\014ed)f(the)h(720's) g(un)o(usual)f(\015ush)h(and)h(purge)e(b)q(eha)o(vior)-75 2625 y(indep)q(ende\ n)n(tly)f(of)k(the)e(b)q(enc)o(hmarks.)1013 1276 y fr(cac)o(he)20 b(consisten\ cy)g(state)g(transition)f(that)g(cannot)g(b)q(e)h(in-)1013 1322 y(ferred)12 b (b)o(y)f(some)g(other)h(mapping)d(fault.)16 b(Consistency)c(faults)1013 1367 y (are)h(the)g(result)g(of)f(the)i(cac)o(he)f(b)r(eing)f(virtually)f(indexed,)i (and)1013 1412 y(should)18 b(b)q(e)i(coun)o(ted)g(as)f(b)q(o)q(okk)n(eeping)g (o)o(v)o(erhead)h(separate)1013 1458 y(from)14 b(purge)i(and)g(\015ush)g(o)o (v)o(erhead.)25 b(The)16 b(table)g(sho)o(ws)g(that)1013 1503 y(mapping)11 b (faults)i(remain)f(almost)g(constan)o(t)i(across)g(con\014gu-)1013 1548 y(rat\ ions,)f(but)i(that)g(consistency)g(faults)f(drop)h(substantially)-6 b(.)1013 1594 y(In)9 b(the)i(end,)f(the)h(total)e(b)q(o)q(okk)o(eeping)h(o)n(v)o(erhea\ d)h(for)e(the)i(three)1013 1639 y(b)q(enchmarks)18 b(is)h(a)h(small)d(fractio\ n)i(of)g(the)h(total)f(mapping)1013 1684 y(o)n(v)o(erhead)13 b(and)f(insigni\ \014can)n(t)h(compared)e(to)i(total)e(execution)1013 1730 y(time.)1054 1809 y fp(Page)k(\015ushes)h(ne)n(e)n(d)f(o)o(c)n(cur)f(no)i(mor)m(e)f(often)g(in)g (a)g(virtual)q(ly)1013 1854 y(indexe)n(d)20 b(c)n(ache)h(than)g(in)f(a)g(phys\ ic)n(al)r(ly)g(indexe)n(d)h(one.)35 b fr(F)m(or)1013 1900 y(con\014guration) 14 b(\\F,")f(the)i(n)o(um)n(b)q(er)g(of)f(page)g(\015ushes)i(is)e(equal)1013 1945 y(to)j(the)h(n)o(um)n(b)q(er)g(of)f(DMA-read)h(\015ushes)h(plus)e(the)i (n)o(um)m(b)q(er)1013 1990 y(of)12 b(pages)h(copied)g(from)e(data)i(space)h (in)n(to)f(instruction)g(space.)1013 2036 y(Both)k(of)g(these)h(op)q(erations) g(require)g(a)f(\015ush.)29 b(The)18 b(\015ushes)1013 2081 y(due)e(to)g(cop)o (ying)f(in)o(to)h(instruction)g(space)h(arise)g(b)q(ecause)h(of)1013 2126 y (the)e(in)n(teraction)h(b)q(etw)n(een)g(separate)g(instruction)g(and)e(data) 1013 2172 y(cac)o(hes,)e(and)f(the)h(op)q(erating)g(system's)f(bu\013er)h(cac\ he.)18 b(When)1013 2217 y(a)13 b(pro)q(cess)j(faults)d(on)g(an)h(instruction) g(page,)f(the)h(\014le)g(system)1013 2262 y(copies)d(the)g(faulted)g(page)g (from)e(its)i(bu\013er)g(cache)g(in)o(to)f(a)h(page)1013 2308 y(in)h(the)h (faulting)e(pro)q(cess')i(address)h(space.)19 b(That)12 b(cop)o(y)g(op)q(er-) 1013 2353 y(ation)f(writes)i(in)n(to)f(the)h(data)e(cache,)h(y)o(et)h(the)f (page)h(is)e(needed)1013 2398 y(in)16 b(the)h(instruction)g(cache.)27 b(The) 17 b(page)f(m)n(ust)h(therefore)h(b)r(e)1013 2444 y(\015ushed)13 b(from)e(the) j(data)e(cache)h(b)q(efore)h(it)e(can)h(b)r(e)g(used.)19 b(The)1013 2489 y (destination)d(virtual)g(page,)i(unless)f(empt)n(y)g(in)g(the)g(instruc-)1013 2534 y(tion)e(cache,)i(m)m(ust)g(also)f(b)q(e)h(purged.)26 b(This)16 b(proble\ m)f(exists)1013 2580 y(with)k(ph)o(ysically)f(indexed)i(caches)g(as)g(w)n(ell\ ,)g(b)r(ecause)h(dual)1013 2625 y(cac)o(hes)15 b(e\013ectively)e(create)j(an) d(aliasing)g(problem.)p eop %%Page: 13 13 bop -33 -46 a fr(The)14 b(\\A")h(con\014gurations)f(all)f(sho)o(w)i(no)f(dat\ a)g(to)h(instruc-)-75 -1 y(tion)g(space)i(copies)f(b)q(ecause)h(the)f(\014le) g(system)f(\014rst)i(unmaps)-75 44 y(the)h(dirt)o(y)g(data)f(cac)o(he)h(page) g(b)q(efore)g(mapping)e(it)h(in)n(to)h(the)-75 90 y(faulting)c(address)j(spac\ e.)23 b(The)16 b(unmap)e(forces)j(an)e(immedi-)-75 135 y(ate)d(\015ush)h(whic) o(h)f(is)g(re\015ected)i(in)e(the)h(column)d(for)i(total)f(page)-75 180 y(\ \015ushes,)16 b(rather)g(than)e(in)h(the)g(column)e(for)i(data)f(to)h(instruc\ -)-75 226 y(tion)e(space)i(copies.)-33 274 y fp(Virtual)q(ly)i(indexe)o(d)h (c)n(aches)h(should)g(supp)n(ort)f(a)g(fast)g(p)n(age)-75 319 y(pur)n(ge)i (op)n(er)n(ation.)35 b fr(F)m(or)19 b(the)h(b)q(enchmarks)e(running)i(under) -75 365 y(con\014guration)h(\\F,")f(page)h(purges)h(represen)q(t)g(the)f(larg\ est)-75 410 y(cost)j(componen)o(t)g(of)f(virtually)f(indexed)i(cac)o(he)g(man\ age-)-75 455 y(men)n(t.)39 b(They)22 b(o)q(ccur)g(almost)d(200,000)g(times)h (during)h(the)-75 501 y(three)f(b)q(enchmarks.)31 b(Although)18 b(some)g(of)g (the)h(purges)h(are)-75 546 y(necessary)g(during)e(DMA-writes)g(\(.8%\),)f (and)h(when)h(cop)o(y-)-75 591 y(ing)f(instructions)h(from)d(data)i(space)i (to)e(instruction)g(space)-75 637 y(\(17.5%\),)c(most)h(\(ab)q(out)h(80%\))f (are)h(due)g(to)g(the)g(creation)g(of)-75 682 y(new)g(mappings)d(when)j(a)f (virtual)f(address)j(is)e(assigned)h(to)f(a)-75 727 y(random)f(ph)o(ysical)i (page)g(from)e(the)i(k)o(ernel's)h(free)f(page)g(list.)-75 773 y(Some)j(of)h (these)i(purges)f(could)f(b)q(e)h(eliminated)d(b)o(y)i(reduc-)-75 818 y(ing)g (the)g(asso)r(ciativit)n(y)g(of)f(virtual)h(to)g(ph)o(ysical)f(mappings)-75 863 y(through)f(the)h(use)f(of)g(m)m(ultiple)g(free)g(page)g(lists.)724 848 y fl(5)773 863 y fr(The)h(ar-)-75 909 y(c)o(hitecture,)14 b(ho)o(w)n(ever,)e (should)g(also)g(pro)o(vide)g(supp)q(ort)h(for)f(ef-)-75 954 y(\014cien)o(t) 21 b(cac)o(he)g(purges.)38 b(It)20 b(should)g(b)r(e)g(p)r(ossible)g(to)g(purg\ e)-75 999 y(an)15 b(empt)n(y)m(,)g(present,)h(or)f(dirt)o(y)g(line,)g(and)g (p)q(ossibly)g(page,)g(in)-75 1045 y(one)d(cache)h(cycle)f(since)h(no)f(in)o (teraction)g(with)g(memory)e(is)i(re-)-75 1090 y(quired.)27 b(A)16 b(fast)h (purge)g(w)o(ould)f(also)g(b)q(ene\014t)i(systems)f(with)-75 1135 y(a)i(ph)o (ysically)f(indexed)i(cac)o(he,)h(since)f(purges)g(that)f(cannot)-75 1181 y (b)q(e)c(eliminated)d(through)i(reduced)i(asso)q(ciativit)n(y)e(are)h(neces-) -75 1226 y(sary)d(there)h(as)f(w)o(ell.)17 b(In)12 b(all,)e(the)j(total)e(sa) o(vings)g(for)h(the)g(three)-75 1271 y(b)q(enchmarks)d(giv)n(en)h(a)f(single) g(cycle)i(cac)o(he)f(page)g(purge)g(w)o(ould)-75 1317 y(b)q(e)15 b(about)f (2.26)f(seconds)i(\(.33%\))e(out)h(of)f(685.8)f(seconds.)-33 1365 y(In)g(summ\ ary)-6 b(,)12 b(the)h(total)e(o)o(v)o(erhead)i(for)f(virtually)f(indexed)-75 1410 y(cache)g(managemen)l(t)g(across)h(the)f(three)h(b)r(enc)o(hmarks)e(in)g (con-)-75 1455 y(\014guration)23 b(\\F")f(is)h(1.53)f(seconds)j(\(.22%\).)45 b (This)23 b(is)g(the)-75 1501 y(amoun)m(t)16 b(of)f(time)f(sp)r(en)o(t)i(handl\ ing)e(consistency)j(faults)e(\(.03)-75 1546 y(seconds\))h(and)f(purging)f(the) i(data)e(cac)o(he)i(for)e(reasons)i(other)-75 1591 y(than)e(DMA)g(\(1.50)f (seconds\).)21 b(An)14 b(additional)e(1.48)h(seconds)-75 1637 y(\(.21%\))k (is)g(required)i(for)e(op)q(erations)h(that)g(m)n(ust)g(o)q(ccur)h(re-)-75 1682 y(gardless)c(of)g(the)g(cac)o(he)h(arc)o(hitecture.)22 b(This)15 b(is)g (the)g(amoun)m(t)-75 1727 y(of)h(time)f(sp)r(en)o(t)i(\015ushing)f(and)g(purg\ ing)g(the)i(cac)o(he)f(to)f(driv)o(e)-75 1773 y(DMA)i(devices,)i(and)e(to)g (cop)o(y)g(from)f(instruction)h(space)i(to)-75 1818 y(data)14 b(space.)-75 1964 y fq(6)69 b(Related)21 b(w)n(ork)-75 2055 y fr(Sev)o(eral)c(op)q(erating) f(systems)h(ha)o(v)o(e)g(b)q(een)g(implemen)m(ted)g(for)-75 2101 y(arc)o(hite\ ctures)j(with)d(virtually)f(indexed)j(cac)o(hes.)30 b(As)19 b(men-)-75 2146 y (tioned)28 b(in)f(Section)h(2,)i(these)f(systems)f(either)g(disallo)n(w)-75 2191 y(aliases,)11 b(allo)n(w)g(constrained)h(aliases,)g(or)f(supp)r(ort)g (full)g(aliases)-75 2237 y(through)k(cac)o(he)g(\015ushing)g(and)g(purging.) 20 b(The)15 b(most)e(impor-)-75 2282 y(tan)o(t)20 b(di\013erence)i(b)q(etw)o (een)f(these)g(other)g(systems)f(and)g(our)-75 2327 y(o)o(wn)i(is)g(not)h(so) f(m)n(uc)o(h)g(in)g(the)h(optimizations)d(that)j(they)-75 2373 y(supp)r(ort,) 17 b(but)f(the)h(style)f(with)g(whic)o(h)h(they)g(ensure)h(consis-)-75 2418 y (tency)n(.)36 b(Our)21 b(approac)o(h,)g(based)g(on)f(state)h(transitions)f (for)-75 2463 y(cache)13 b(pages)g(with)f(resp)r(ect)i(to)e(virtual)g(and)g (ph)o(ysical)h(pages,)-75 2516 y 396 2 v -29 2577 a fk(5)-11 2589 y fo(This)f (reduction)e(in)j(asso)q(ciativit)o(y)c(is)k(only)e(an)i(optimizati)o(on,)d (and)-75 2625 y(not)h(a)g(requiremen)o(t)d([Chiueh)j(&)h(Katz)f(92].)1013 -46 y fr(naturally)e(handles)h(the)h(man)m(y)f(kinds)g(of)f(inconsistencies)j(and) 1013 -1 y(optimizations)e(that)k(arise)f(in)g(the)h(managemen)l(t)g(of)e(a)h (virtu-)1013 44 y(ally)f(indexed)j(cache.)k(The)c(state)g(of)e(a)h(cache)g (page)g(dep)r(ends)1013 90 y(only)j(on)h(its)g(previous)h(state)g(and)f(the)h (current)g(op)q(eration,)1013 135 y(and)c(the)h(state)h(transitions)f(can)g (b)q(e)g(encapsulated)h(en)o(tirely)1013 180 y(within)11 b(a)h(short)h(co)r (de)g(sequence.)20 b(Moreo)o(v)n(er,)13 b(adapting)f(that)1013 226 y(sequence) g(to)d(alternativ)o(e)h(arc)o(hitectures)i(is)e(straigh)o(tforw)n(ard,)1013 271 y(giv)n(en)20 b(the)g(observ)n(ations)f(made)g(in)g(Section)g(3.3.)34 b (In)20 b(con-)1013 316 y(trast,)e(previous)f(systems,)h(whic)o(h)f(do)g(not)g (main)l(tain)g(cac)o(he)1013 362 y(page)e(state)h(in)f(an)n(y)g(explicit)g (manner,)f(ha)o(v)o(e)i(dealt)f(with)g(in-)1013 407 y(consistencies)d(and)f (optimizations)d(on)j(a)f(case-by-case)h(basis.)1013 452 y(As)g(a)g(result,)i (optimizations)c(requiring)i(global)e(information,)1013 498 y(suc)o(h)17 b (as)g(\\do)q(es)h(a)e(cache)h(page)g(need)h(to)f(b)q(e)g(\015ushed)h(b)q(efor\ e)1013 543 y(it)12 b(can)h(b)r(e)g(used)h(as)f(the)h(destination)f(of)f(a)h (DMA-write,")g(are)1013 588 y(di\016cult)i(to)i(implemen)l(t,)g(and)f(are)h (therefore)i(less)e(lik)n(ely)f(to)1013 634 y(b)q(e)e(found.)1054 693 y(T)m (able)f(5)h(highligh)m(ts)h(some)e(of)h(the)h(functional)e(di\013erences)1013 738 y(b)q(et)o(w)o(een)d(several)f(op)q(erating)h(systems)f(implemen)m(ted)h (for)f(ma-)1013 784 y(c)o(hines)i(with)g(virtually)f(indexed)h(caches.)18 b (The)11 b(CMU)g(system)1013 829 y(is)i(the)h(one)g(describ)r(ed)g(in)g(this)f (pap)q(er.)19 b(The)14 b(Utah)g(system)f(is)1013 874 y(a)f(v)o(ersion)h(of)g (Mac)o(h)g(that)g(b)q(eha)o(v)o(es)h(as)f(the)g(one)h(describ)r(ed)f(in)1013 920 y(Section)j(2.5.)22 b(The)16 b(T)m(ut)g(pro)r(ject)h([Chao)e(et)h(al.)23 b (90])14 b(merged)1013 965 y(Mac)o(h's)f(virtual)g(memory)e(system)j(in)n(to)g (HP-UX,)g(HP's)g(v)n(er-)1013 1010 y(sion)d(of)g(UNIX.)h(The)g(Ap)q(ollo)f (system)g(is)h(an)f(implemen)m(tation)1013 1056 y(of)i(OSF/1)h(done)h(b)o(y)f (the)h(Ap)q(ollo)e(Systems)h(Division)f(of)h(HP)l(.)1013 1101 y(These)f(four) f(systems)h(ha)n(v)o(e)g(b)q(een)g(implemen)l(ted)g(on)g(HP)f(P)m(A-)1013 1146 y(RISC)g(mac)m(hines.)19 b(The)13 b(Sun)g(system)f(is)h(an)f(implemen)m(tatio\ n)1013 1192 y(of)h(4.2)g(BSD)h(for)f(Sun-3)h(200)f(series)i(mac)n(hines)f([Ch\ eng)g(87].)1054 1251 y(The)f(column)e(labels)i(describ)r(e)g(the)g(b)r(eha)o (vior)f(of)g(eac)o(h)h(sys-)1013 1296 y(tem)h(with)g(resp)s(ect)i(to)e(consis\ tency)j(managemen)l(t.)22 b(All)14 b(\014v)o(e)1013 1342 y(systems)c(handle)g (unaligned)f(aliases,)h(although)g(the)g(Sun)h(sys-)1013 1387 y(tem)16 b(limi\ ts)e(accesses)20 b(through)d(unaligned)f(aliases)h(to)g(w)o(ell-)1013 1432 y (b)q(eha)o(v)o(ed)e(op)q(erating)f(system)h(co)q(de)g(fragmen)n(ts.)21 b(Othe\ rwise,)1013 1478 y(aliases)14 b(m)m(ust)h(b)q(e)g(uncached.)20 b(The)15 b(Uta\ h,)f(Ap)q(ollo,)f(and)h(Sun)1013 1523 y(systems)g(clean)h(the)g(cache)f(whene\ ver)h(the)h(last)e(mapping)e(to)1013 1568 y(a)17 b(ph)o(ysical)h(page)g(is)g (remo)n(v)o(ed,)h(while)f(the)h(CMU)f(and)g(T)m(ut)1013 1614 y(systems)12 b (dela)o(y)g(the)h(consistency)g(op)q(eration)f(un)o(til)g(the)h(map-)1013 1659 y(ping)g(could)h(b)q(e)g(reused)i(\(lazy)e(unmap\).)j(In)d(T)m(ut,)g(if)f(the) i(new)1013 1704 y(virtual)h(address)j(for)e(a)g(page)g(is)h(the)g(same)e(as)i (the)g(old)f(one)1013 1750 y(\(as)h(opp)q(osed)h(to)f(aligned\))f(then)i(no)f (purge)h(or)f(\015ush)g(is)g(re-)1013 1795 y(quired.)e(Otherwise)c(the)f(cac) o(he)g(pages)f(corresp)s(onding)f(to)h(the)1013 1840 y(old)i(and)h(new)g(virt\ ual)f(pages)h(are)h(remo)n(v)n(ed)g(from)d(the)i(cache.)1013 1886 y(The)i(Uta\ h)h(system)f(mak)m(es)h(no)f(attempt)g(to)g(select)i(aligning)1013 1931 y(vir\ tual)12 b(addresses)j(for)d(m)n(ultiply)f(mapped)i(pages.)19 b(T)l(ut)13 b (do)q(es)1013 1976 y(so)e(only)g(for)h(program)e(text)i(pages.)18 b(T)l(ut,) 12 b(lik)n(e)g(the)h(CMU)f(sys-)1013 2022 y(tem,)f(attempts)i(to)g(c)o(ho)q (ose)h(preparatory)g(mappings)d(so)i(that)1013 2067 y(they)18 b(align)f(with) h(ev)o(entual)g(mappings)e(when)j(preparing)f(a)1013 2112 y(page)i(with)g(cop) o(y)h(or)f(zero-\014ll.)38 b(In)20 b(situations)h(where)g(ad-)1013 2158 y(dre\ sses)16 b(do)e(not)g(align,)e(the)j(CMU)g(k)n(ernel)g(eliminates)e(man)m(y) 1013 2203 y(cac)o(he)21 b(con)o(trol)f(op)q(erations)g(b)o(y)h(exploiting)e (the)h(seman)o(tics)1013 2248 y(of)g(new)i(mappings)e(\()p fd(need)r 14 2 v 13 w(data)p fr(\))g(and)i(page)f(preparation)1013 2294 y(\()p fd(will)q 14 2 v 14 w(overwrite)p fr(\).)1054 2353 y(The)12 b(systems)f(can)h(also)f(b)q(e)h(view) n(ed)g(in)f(terms)g(of)g(the)h(cac)o(he)1013 2398 y(consistency)19 b(states)g (that)e(they)i(main)l(tain)e(for)h(data)f(in)g(the)1013 2444 y(cac)o(he,)e (ph)o(ysical)f(memory)-6 b(,)15 b(and)f(virtual)g(memory)-6 b(.)21 b(None)15 b (of)1013 2489 y(the)c(Utah,)g(Ap)q(ollo)f(or)h(Sun)g(systems)g(main)m(tain)f (a)h(stale)g(state,)1013 2534 y(as)16 b(evidenced)j(b)o(y)d(the)i(fact)f(that) f(they)i(purge)f(or)g(\015ush)g(the)1013 2580 y(cac)o(he)11 b(whenever)h(a)e (mapping)f(is)i(brok)n(en,)h(such)e(as)h(on)g(a)g(write)1013 2625 y(to)h(an)g (aliased)g(page)g(or)h(during)f(the)h(remo)n(v)n(al)e(of)h(a)g(virtual)g(to)p eop %%Page: 14 14 bop 84 2 a 2 36 v 430 -8 a fo(T)m(ry)44 b(Align)179 b(Uses)84 38 y 2 36 v 120 28 a(Handle)211 b(to)63 b(page)50 b(Uses)e(\\)p fa(will)p 11 2 v 84 74 a 2 36 v 100 63 a fo(unaligned)43 b(Lazy)50 b(align)45 b(pre-)40 b(\\)p fa(need)p 11 2 v 58 w(over)-41 99 y fo(System)84 110 y 2 36 v 125 99 a(aliases)54 b(unmap) 28 b(pages)37 b(pare)43 b fa(data)p fo(")35 b fa(write)p fo(")-56 112 y 951 2 v -41 137 a(CMU)84 148 y 2 36 v 148 137 a(Y)m(es)104 b(Y)m(es)73 b(Y)m(es)60 b (Y)m(es)70 b(Y)m(es)80 b(Y)m(es)-41 173 y(Utah)84 183 y 2 36 v 148 173 a(Y)m (es)109 b(No)81 b(No)70 b(No)78 b(No)89 b(No)-41 209 y(T)m(ut)84 219 y 2 36 v 148 209 a(Y)m(es)d(Equal)44 b(T)m(ext)51 b(Y)m(es)74 b(No)89 b(No)-41 244 y (Ap)q(ollo)84 255 y 2 36 v 148 244 a(Y)m(es)109 b(No)77 b(Y)m(es)65 b(No)78 b (No)89 b(No)-41 280 y(Sun)84 291 y 2 36 v 111 280 a(Memory)70 b(No)77 b(Y)m (es)65 b(No)78 b(No)89 b(No)-75 366 y fr(T)m(able)11 b(5:)17 b fi(Characteris\ tics)d(of)d(several)h(di\013eren)o(t)h(systems)f(for)-75 411 y(mac)n(hines)i (with)g(virtually)e(indexed)i(caches.)-75 542 y fr(ph)o(ysical)i(mapping.)26 b (The)17 b(Sun)g(system)g(app)q(ears)h(to)f(main-)-75 588 y(tain)d(only)g(pres\ en)q(t)h(and)g(empt)n(y)g(states)h(for)e(ph)o(ysical)h(pages,)-75 633 y(altho\ ugh)j(in)g(some)g(cases,)j(such)e(as)g(pageout,)g(it)g(uses)h(the)-75 678 y (fact)14 b(that)g(a)g(ph)o(ysical)g(page)g(is)g(dirt)n(y)g(to)g(a)o(v)o(oid)f (a)h(redundan)o(t)-75 724 y(cache)d(\015ush.)18 b(T)l(ut)11 b(asso)r(ciates)g (state)h(with)f(a)f(virtual)h(address,)-75 769 y(rather)i(than)e(with)h(a)f (cache)h(page,)g(as)f(evidenced)j(b)n(y)e(the)g(fact)-75 814 y(that)f(only)g (equal,)g(rather)i(than)e(aligned,)f(aliased)h(virtual)g(ad-)-75 860 y(dresse\ s)16 b(a)o(v)o(oid)d(cac)o(he)i(managemen)l(t)f(op)q(erations.)-75 1000 y fq (7)69 b(Conclusions)-75 1100 y fr(Virtually)13 b(indexed)h(write-bac)o(k)g (cac)o(hes)h(create)g(consistency)-75 1146 y(problems.)40 b(W)l(e)22 b(ha)o (v)o(e)g(describ)r(ed)g(these)h(problems)d(infor-)-75 1191 y(mally)-6 b(,)14 b (and)g(ha)n(v)o(e)h(then)g(de\014ned)g(a)f(model)g(that)g(attac)o(ks)h(the) -75 1236 y(consistency)e(problems)e(at)h(their)g(core)g(b)o(y)g(ensuring)g (that)g(the)-75 1282 y(memory)c(system)j(nev)o(er)h(returns)h(a)d(stale)h(v)n (alue)g(to)f(either)i(de-)-75 1327 y(vices)g(or)g(the)g(CPU.)g(Our)g(consiste\ ncy)h(model)e(lends)h(itself)g(to)-75 1372 y(an)18 b(implem)o(en)m(tation)f (that)h(relies)g(on)g(the)g(virtual)f(memory)-75 1418 y(system)h(to)f(trap)i (memory)c(accesses)20 b(that)e(could)g(create)h(or)-75 1463 y(rev)o(eal)14 b (inconsistencies.)-33 1516 y(The)c(p)r(erformance)g(of)g(our)g(approac)o(h)h (on)f(the)h(HP)g(9000)e(Se-)-75 1561 y(ries)17 b(700)f(demonstrates)h(that)f (careful)h(cac)o(he)g(managemen)l(t)-75 1606 y(is)g(an)f(imp)o(ortan)o(t)h (factor)g(in)f(o)o(v)n(erall)h(system)f(p)q(erformance.)-75 1652 y(Moreo)o (v)o(er,)d(an)g(analysis)e(of)i(the)g(op)q(erations)g(required)h(to)e(en-)-75 1697 y(sure)j(consistency)h(rev)o(eals)e(that)g(a)g(virtually)f(indexed)h(cac\ he)-75 1742 y(need)e(not)e(incur)h(signi\014can)o(tly)f(more)f(o)o(v)o(erhead) i(than)g(a)f(ph)o(ys-)-75 1788 y(ically)j(indexed)h(one.)-33 1840 y(Our)22 b (exp)r(erience)i(with)e(implemen)l(ting)g(Mac)o(h's)g(virtual)-75 1886 y(memo\ ry)11 b(system)j(on)f(a)h(mac)m(hine)g(with)f(a)h(virtually)e(indexed)-75 1931 y(cache)i(has)h(led)g(us)g(to)f(conclude)h(that)g(there)h(exist)f(no)f(quan-) -75 1976 y(titativ)n(e)k(or)h(qualitativ)m(e)f(reasons)h(to)f(sh)o(y)g(a)o (w)o(a)n(y)g(from)f(suc)o(h)-75 2022 y(mac)n(hines,)k(as)f(they)g(o\013er)h (reduced)g(cycle)g(times)e(with)g(in-)-75 2067 y(signi\014can)n(t)14 b(soft)o (w)o(are)g(cost)h(and)f(complexit)m(y)l(.)-75 2207 y fq(Ac)n(kno)n(wledgemen) n(ts)-75 2308 y fr(Jerry)24 b(Huck,)g(Mic)o(hael)f(Mahon,)h(Bart)g(Sears,)h (and)e(John)-75 2353 y(Wilk)m(es)c(of)e(Hewlett-Pac)o(k)n(ard,)h(Jim)e(Ha)o (y)o(es)i(of)g(NeXT,)g(and)-75 2398 y(T)m(om)8 b(Mistretta)j(of)e(Ap)r(ollo)f (pro)o(vided)i(insigh)n(t)g(in)o(to)g(the)h(prob-)-75 2444 y(lems)19 b(of)h (virtually)f(indexed)i(cac)o(he)g(managemen)l(t.)38 b(They)m(,)-75 2489 y(alo\ ng)9 b(with)h(Je\013)h(Chase,)g(Mik)n(e)g(Hibler,)f(Ed)h(Lazo)o(wsk)m(a,)g (Hank)-75 2534 y(Levy)m(,)j(Chris)g(Maeda,)g(Stev)o(e)h(Sch)n(w)o(ab,)f(Dan)g (Sto)q(dolsky)g(and)-75 2580 y(Matt)j(Zek)n(ausk)n(as)f(pro)o(vided)h(v)m(alu\ able)f(feedback)g(on)g(earlier)-75 2625 y(drafts)e(of)f(this)h(pap)q(er.)1013 -33 y fq(References)1013 35 y fo([Accetta)c(et)h(al.)g(86])20 b(Accetta,)15 b (M.)h(J.,)g(Baron,)f(R.)h(V.,)g(Bolosky)m(,)f(W.,)1053 71 y(Golub,)f(D.)h(B.,) g(Rashid,)g(R.)f(F.,)i(T)m(ev)n(anian,)e(Jr.,)h(A.,)h(and)e(Y)m(oung,)1053 107 y(M.)g(W.)23 b(Mac)o(h:)d(A)15 b(New)g(Kernel)e(F)m(oundation)e(for)j(Unix)f (Dev)o(elop-)1053 143 y(men)o(t.)18 b(In)12 b fj(Pr)n(o)n(c)n(e)n(e)n(ding)q (s)k(of)e(the)h(Summer)g(1986)g(USENIX)g(Confer-)1053 179 y(enc)n(e)p fo(,)e (pages)d(93{113,)f(July)i(1986.)1013 231 y([App)q(el)f(&)i(Li)g(91])20 b(App) q(el,)13 b(W.)h(and)f(Li,)h(K.)22 b(Virtual)12 b(Memory)g(Primi-)1053 267 y (tiv)o(es)h(for)g(User)h(Programs.)21 b(In)13 b fj(Pr)n(o)n(c)n(e)n(e)n(dings) 18 b(of)d(the)h(F)m(ourth)g(Sym-)1053 303 y(p)n(osium)c(on)h(A)o(r)n(chite)n (ctur)n(al)h(Supp)n(ort)f(for)g(Pr)n(o)n(gr)n(amming)h(L)n(anguages)1053 339 y (and)f(Op)n(er)n(ating)i(Systems)p fo(,)c(pages)f(96{107,)g(April)h(1991.) 1013 391 y([Chao)f(et)i(al.)f(90])19 b(Chao,)10 b(C.,)h(Mac)o(k)o(ey)m(,)e (M.,)i(and)e(Sears,)h(B.)j(Mac)o(h)d(on)f(a)1053 427 y(Virtually)e(Addressed) h(Cac)o(he)g(Arc)o(hitecture.)h(In)g fj(Pr)n(o)n(c)n(e)n(e)n(dings)k(of)e(the) 1053 463 y(First)h(Mach)i(USENIX)g(Workshop)p fo(,)e(pages)e(31{51,)g(Octob)q (er)g(1990.)1013 516 y([Chase)g(et)i(al.)f(92])19 b(Chase,)c(J.)g(S.,)g(Levy) m(,)g(H.)g(M.,)h(Bak)o(er-Harv)o(ey)m(,)d(M.,)1053 552 y(and)h(Lazo)o(wsk)n (a,)g(E.)h(D.)26 b(Ho)o(w)15 b(to)g(Use)g(a)g(64-Bit)e(Virtual)h(Address)1053 588 y(Space.)35 b(Departmen)o(t)15 b(of)j(Computer)f(Science)g(and)g(Engineer\ ing)1053 623 y(T)m(ec)o(hnical)11 b(Rep)q(ort)g(92-03-02,)f(Univ)o(ersit)o (y)h(of)h(W)m(ashington,)f(F)m(ebru-)1053 659 y(ary)g(1992.)1013 712 y([Cheng) f(87])20 b(Cheng,)12 b(R.)20 b(Virtual)12 b(Address)g(Cac)o(he)g(in)g(Unix.) 19 b(In)13 b fj(Pr)n(o-)1053 748 y(c)n(e)n(e)n(dings)i(of)f(the)g(1987)g(Summ\ er)g(Usenix)g(Confer)n(enc)n(e)p fo(,)g(pages)d(217{)1053 784 y(224,)f(1987.) 1013 836 y([Chiueh)g(&)i(Katz)f(92])20 b(Chiueh,)12 b(T.)h(and)f(Katz,)g(R.) 19 b(Beating)11 b(The)h(Ad-)1053 872 y(dress)c(T)m(ranslation)f(Bottlenec)o (k.)i(In)f fj(Pr)n(o)n(c)n(e)n(e)n(dings)13 b(of)e(the)g(Fifth)g(Sym-)1053 908 y(p)n(osium)h(on)h(A)o(r)n(chite)n(ctur)n(al)h(Supp)n(ort)f(for)g(Pr)n(o)n (gr)n(amming)h(L)n(anguages)1053 944 y(and)f(Op)n(er)n(ating)i(Systems)p fo (,)c(Octob)q(er)f(1992.)k(This)e(issue.)1013 996 y([DEC)f(Alpha)g(92])20 b (DEC)k(Alpha.)48 b fj(A)o(lpha)24 b(A)o(r)n(chite)n(ctur)n(e)i(T)m(e)n(chnic) n(al)1053 1032 y(Summary)p fo(.)16 b(Digital)10 b(Equipmen)o(t)f(Corp)q(orati\ on,)g(1992.)1013 1085 y([Golub)g(et)j(al.)f(90])19 b(Golub,)d(D.,)h(Dean,)f (R.,)h(F)m(orin,)f(A.,)i(and)d(Rashid,)1053 1120 y(R.)26 b(Unix)14 b(as)h(an) g(Application)d(Program.)24 b(In)15 b fj(Pr)n(o)n(c)n(e)n(e)n(dings)j(of)f (the)1053 1156 y(Summer)d(1990)f(USENIX)h(Confer)n(enc)n(e)p fo(,)f(pages)e (87{95,)e(June)i(1990.)1013 1209 y([Jouppi)e(88])20 b(Jouppi,)h(N.)g(P)m(.)42 b(Arc)o(hitectural)18 b(and)i(Organizationa)o(l)1053 1245 y(T)m(radeo\013s)12 b(in)h(the)f(Design)g(of)h(the)g(MultiTitan)f(CPU.)22 b(In)13 b fj(Pr)n(o)n (c)n(e)n(e)n(d-)1053 1281 y(ings)i(of)h(the)g(15th)h(A)o(nnual)f(Symp)n(osium) h(on)f(Computer)g(A)o(r)n(chite)n(c-)1053 1316 y(tur)n(e)p fo(,)c(pages)e(281\ {289,)f(June)i(1988.)1013 1369 y([Knapp)f(&)i(Baer)f(85])20 b(Knapp,)c(V.)i (and)d(Baer,)i(J.-L.)30 b(Virtually)15 b(Ad-)1053 1405 y(dressed)i(Cac)o(hes) h(for)g(Multiprogrammi)o(ng)e(and)i(Multipro)q(cessin)o(g)1053 1441 y(En)o (vironmen)o(t)o(s.)13 b(In)f fj(Pr)n(o)n(c)n(e)n(e)n(dings)j(of)e(the)h(18th) f(A)o(nnual)h(Hawaii)g(In-)1053 1477 y(ternational)k(Confer)n(enc)n(e)h(on)e (System)g(Scienc)n(es)p fo(,)i(pages)c(477{486,)1053 1513 y(1985.)1013 1565 y ([Kohn)10 b(89])20 b(Kohn,)13 b(L.)22 b(Description)11 b(of)i(the)g(In)o(tel) f(i860)h(64-bit)e(RISC-)1053 1601 y(based)f(Micropro)q(cessor.)i fj(IEEE)h (Micr)n(o)p fo(,)f(4\(9\),)f(August)f(1989.)1013 1653 y([Lee)g(89])20 b(Lee,) d(R.)e(B.)29 b(Precision)13 b(Arc)o(hitecture.)26 b fj(IEEE)17 b(Computer)p fo (,)1053 1689 y(pages)10 b(78{91,)g(Jan)o(uary)g(1989.)1013 1742 y([Li)h(92]) 20 b(Li,)11 b(K.,)h(Marc)o(h)f(1992.)j(P)o(ersonal)c(comm)o(unic)o(atio)o(n.) 1013 1794 y([Rashid)g(et)h(al.)g(87])20 b(Rashid,)h(R.,)h(T)m(ev)n(anian,)f (Jr.,)h(A.,)h(Y)m(oung,)e(M.,)1053 1830 y(Golub,)12 b(D.,)i(Baron,)f(R.,)g (Blac)o(k,)g(D.,)h(Bolosky)m(,)e(W.,)i(and)f(Chew,)h(J.)1053 1866 y(Mac)o(hin\ e-Indepen)o(den)n(t)6 b(Virtual)h(Memory)h(Managemen)o(t)d(for)j(P)o(aged) 1053 1902 y(Unipro)q(cessor)13 b(and)h(Multipro)q(cessor)e(Arc)o(hitectures.) 24 b(In)15 b fj(Pr)n(o)n(c)n(e)n(e)n(d-)1053 1938 y(ings)d(of)h(the)f(2nd)h (Symp)n(osium)g(on)g(A)o(r)n(chite)n(ctur)n(al)i(Supp)n(ort)e(for)g(Pr)n(o-) 1053 1974 y(gr)n(amming)h(L)n(anguages)h(and)e(Op)n(er)n(ating)h(Systems)p fo (,)e(April)f(1987.)1013 2026 y([Sat)o(y)o(anara)o(n)o(y)n(an)o(y)n(an)d(et)k (al.)f(85])19 b(Sat)o(y)o(anaran)o(y)o(a)o(n)o(y)n(an,)26 b(M.,)j(Ho)o(w)o (ard,)1053 2062 y(J.,)9 b(Nic)o(hols,)g(D.,)g(Sideb)q(otham)o(,)e(R.,)i(and)f (Sp)q(ector,)f(A.)12 b(The)d(ITC)h(Dis-)1053 2098 y(tributed)d(File)h(System:) k(Principles)7 b(and)h(Design.)i(In)f fj(Pr)n(o)n(c)n(e)n(e)n(dings)k(of)1053 2134 y(the)h(10th)h(A)o(CM)f(Symp)n(osium)h(on)g(Op)n(er)n(ating)g(Systems)f (Principles)p fo(,)1053 2170 y(pages)c(35{50,)g(Decem)o(b)q(er)f(1985.)1013 2222 y([W)m(ang)h(et)h(al.)g(89])20 b(W)m(ang,)10 b(W.-H.,)g(Baer,)g(J.-L.,)g (and)f(Levy)m(,)h(H.)g(M.)k(Or-)1053 2258 y(ganization)6 b(and)i(P)o(erforman\ ce)d(of)k(a)g(Tw)o(o-lev)o(el)f(Virtual)g(Real)g(Cac)o(he)1053 2294 y(Hierarc) o(h)o(y.)16 b(In)c fj(Pr)n(o)n(c)n(e)n(e)n(dings)k(of)e(the)g(16th)g(A)o(nnua\ l)g(Symp)n(osium)h(on)1053 2330 y(Computer)e(A)o(r)n(chite)n(ctur)n(e)p fo (,)h(pages)d(140{148,)e(Ma)o(y)i(1989.)1013 2382 y([Y)m(oung)f(et)h(al.)g(87]) 20 b(Y)m(oung,)j(M.,)h(T)m(ev)n(anian,)e(Jr.,)i(A.,)g(Rashid,)e(R.,)1053 2418 y(Golub,)15 b(D.,)h(Eppinger,)e(J.,)j(Chew,)f(J.,)h(Bolosky)m(,)e(W.,)h(Blac) o(k,)f(D.,)1053 2454 y(and)e(Baron,)f(R.)22 b(The)14 b(Dualit)o(y)e(of)h(Memo\ ry)f(and)h(Comm)o(unicatio)o(n)1053 2490 y(in)d(the)g(Implemen)o(ta)o(tio)o (n)e(of)i(a)h(Multipro)q(cessor)c(Op)q(erating)i(System.)1053 2526 y(In)e fj (Pr)n(o)n(c)n(e)n(e)n(ding)q(s)12 b(of)d(the)h(11th)g(A)o(CM)g(Symp)n(osium)g (on)g(Op)n(er)n(ating)h(Sys-)1053 2562 y(tems)i(Principles)p fo(,)f(pages)e (63{76,)g(No)o(v)o(em)o(b)q(er)g(1987.)p eop eos %%Trailer end %%EOF