%! %%BoundingBox: (atend) %%Pages: (atend) %%DocumentFonts: (atend) %%EndComments % % FrameMaker PostScript Prolog 3.0, for use with FrameMaker 3.0 % Copyright (c) 1986,87,89,90,91 by Frame Technology Corporation. % All rights reserved. % % Known Problems: % Due to bugs in Transcript, the 'PS-Adobe-' is omitted from line 1 /FMversion (3.0) def % Set up Color vs. Black-and-White /FMPrintInColor systemdict /colorimage known systemdict /currentcolortransfer known or def % Uncomment this line to force b&w on color printer % /FMPrintInColor false def /FrameDict 295 dict def systemdict /errordict known not {/errordict 10 dict def errordict /rangecheck {stop} put} if % The readline in 23.0 doesn't recognize cr's as nl's on AppleTalk FrameDict /tmprangecheck errordict /rangecheck get put errordict /rangecheck {FrameDict /bug true put} put FrameDict /bug false put mark % Some PS machines read past the CR, so keep the following 3 lines together! currentfile 5 string readline 00 0000000000 cleartomark errordict /rangecheck FrameDict /tmprangecheck get put FrameDict /bug get { /readline { /gstring exch def /gfile exch def /gindex 0 def { gfile read pop dup 10 eq {exit} if dup 13 eq {exit} if gstring exch gindex exch put /gindex gindex 1 add def } loop pop gstring 0 gindex getinterval true } def } if /FMVERSION { FMversion ne { /Times-Roman findfont 18 scalefont setfont 100 100 moveto (FrameMaker version does not match postscript_prolog!) dup = show showpage } if } def /FMLOCAL { FrameDict begin 0 def end } def /gstring FMLOCAL /gfile FMLOCAL /gindex FMLOCAL /orgxfer FMLOCAL /orgproc FMLOCAL /organgle FMLOCAL /orgfreq FMLOCAL /yscale FMLOCAL /xscale FMLOCAL /manualfeed FMLOCAL /paperheight FMLOCAL /paperwidth FMLOCAL /FMDOCUMENT { array /FMfonts exch def /#copies exch def FrameDict begin 0 ne dup {setmanualfeed} if /manualfeed exch def /paperheight exch def /paperwidth exch def /yscale exch def /xscale exch def currenttransfer cvlit /orgxfer exch def currentscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def setpapername manualfeed {true} {papersize} ifelse {manualpapersize} {false} ifelse {desperatepapersize} if end } def /pagesave FMLOCAL /orgmatrix FMLOCAL /landscape FMLOCAL /FMBEGINPAGE { FrameDict begin /pagesave save def 3.86 setmiterlimit /landscape exch 0 ne def landscape { 90 rotate 0 exch neg translate pop } {pop pop} ifelse xscale yscale scale /orgmatrix matrix def gsave } def /FMENDPAGE { grestore pagesave restore end showpage } def /FMFONTDEFINE { FrameDict begin findfont ReEncode 1 index exch definefont FMfonts 3 1 roll put end } def /FMFILLS { FrameDict begin array /fillvals exch def end } def /FMFILL { FrameDict begin fillvals 3 1 roll put end } def /FMNORMALIZEGRAPHICS { newpath 0.0 0.0 moveto 1 setlinewidth 0 setlinecap 0 0 0 sethsbcolor 0 setgray } bind def /fx FMLOCAL /fy FMLOCAL /fh FMLOCAL /fw FMLOCAL /llx FMLOCAL /lly FMLOCAL /urx FMLOCAL /ury FMLOCAL /FMBEGINEPSF { end /FMEPSF save def /showpage {} def FMNORMALIZEGRAPHICS [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall fx fy translate rotate fw urx llx sub div fh ury lly sub div scale llx neg lly neg translate } bind def /FMENDEPSF { FMEPSF restore FrameDict begin } bind def FrameDict begin /setmanualfeed { %%BeginFeature *ManualFeed True statusdict /manualfeed true put %%EndFeature } def /max {2 copy lt {exch} if pop} bind def /min {2 copy gt {exch} if pop} bind def /inch {72 mul} def /pagedimen { paperheight sub abs 16 lt exch paperwidth sub abs 16 lt and {/papername exch def} {pop} ifelse } def /papersizedict FMLOCAL /setpapername { /papersizedict 14 dict def papersizedict begin /papername /unknown def /Letter 8.5 inch 11.0 inch pagedimen /LetterSmall 7.68 inch 10.16 inch pagedimen /Tabloid 11.0 inch 17.0 inch pagedimen /Ledger 17.0 inch 11.0 inch pagedimen /Legal 8.5 inch 14.0 inch pagedimen /Statement 5.5 inch 8.5 inch pagedimen /Executive 7.5 inch 10.0 inch pagedimen /A3 11.69 inch 16.5 inch pagedimen /A4 8.26 inch 11.69 inch pagedimen /A4Small 7.47 inch 10.85 inch pagedimen /B4 10.125 inch 14.33 inch pagedimen /B5 7.16 inch 10.125 inch pagedimen end } def /papersize { papersizedict begin /Letter {lettertray letter} def /LetterSmall {lettertray lettersmall} def /Tabloid {11x17tray 11x17} def /Ledger {ledgertray ledger} def /Legal {legaltray legal} def /Statement {statementtray statement} def /Executive {executivetray executive} def /A3 {a3tray a3} def /A4 {a4tray a4} def /A4Small {a4tray a4small} def /B4 {b4tray b4} def /B5 {b5tray b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end /FMdicttop countdictstack 1 add def statusdict begin stopped end countdictstack -1 FMdicttop {pop end} for } def /manualpapersize { papersizedict begin /Letter {letter} def /LetterSmall {lettersmall} def /Tabloid {11x17} def /Ledger {ledger} def /Legal {legal} def /Statement {statement} def /Executive {executive} def /A3 {a3} def /A4 {a4} def /A4Small {a4small} def /B4 {b4} def /B5 {b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end stopped } def /desperatepapersize { statusdict /setpageparams known { paperwidth paperheight 0 1 statusdict begin {setpageparams} stopped pop end } if } def /savematrix { orgmatrix currentmatrix pop } bind def /restorematrix { orgmatrix setmatrix } bind def /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul exch dup mul add sqrt def /freq dpi 18.75 div 8 div round dup 0 eq {pop 1} if 8 mul dpi exch div def /sangle 1 0 dmatrix defaultmatrix dtransform exch atan def /DiacriticEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /.notdef /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef /yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron ] def /ReEncode { dup length dict begin { 1 index /FID ne {def} {pop pop} ifelse } forall 0 eq {/Encoding DiacriticEncoding def} if currentdict end } bind def /graymode true def /bwidth FMLOCAL /bpside FMLOCAL /bstring FMLOCAL /onbits FMLOCAL /offbits FMLOCAL /xindex FMLOCAL /yindex FMLOCAL /x FMLOCAL /y FMLOCAL /setpattern { /bwidth exch def /bpside exch def /bstring exch def /onbits 0 def /offbits 0 def freq sangle landscape {90 add} if {/y exch def /x exch def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer offbits offbits onbits add div FMsetgray /graymode false def } bind def /grayness { FMsetgray graymode not { /graymode true def orgxfer cvx settransfer orgfreq organgle orgproc cvx setscreen } if } bind def /HUE FMLOCAL /SAT FMLOCAL /BRIGHT FMLOCAL /Colors FMLOCAL FMPrintInColor { /HUE 0 def /SAT 0 def /BRIGHT 0 def % array of arrays Hue and Sat values for the separations [HUE BRIGHT] /Colors [[0 0 ] % black [0 0 ] % white [0.00 1.0] % red [0.37 1.0] % green [0.60 1.0] % blue [0.50 1.0] % cyan [0.83 1.0] % magenta [0.16 1.0] % comment / yellow ] def /BEGINBITMAPCOLOR { BITMAPCOLOR} def /BEGINBITMAPCOLORc { BITMAPCOLORc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUECOLOR } def /BEGINBITMAPTRUECOLORc { BITMAPTRUECOLORc } def /K { Colors exch get dup 0 get /HUE exch store 1 get /BRIGHT exch store HUE 0 eq BRIGHT 0 eq and {1.0 SAT sub setgray} {HUE SAT BRIGHT sethsbcolor} ifelse } def /FMsetgray { /SAT exch 1.0 exch sub store HUE 0 eq BRIGHT 0 eq and {1.0 SAT sub setgray} {HUE SAT BRIGHT sethsbcolor} ifelse } bind def } { /BEGINBITMAPCOLOR { BITMAPGRAY} def /BEGINBITMAPCOLORc { BITMAPGRAYc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUEGRAY } def /BEGINBITMAPTRUECOLORc { BITMAPTRUEGRAYc } def /FMsetgray {setgray} bind def /K { pop } def } ifelse /normalize { transform round exch round exch itransform } bind def /dnormalize { dtransform round exch round exch idtransform } bind def /lnormalize { 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop } bind def /H { lnormalize setlinewidth } bind def /Z { setlinecap } bind def /fillvals FMLOCAL /X { fillvals exch get dup type /stringtype eq {8 1 setpattern} {grayness} ifelse } bind def /V { gsave eofill grestore } bind def /N { stroke } bind def /M {newpath moveto} bind def /E {lineto} bind def /D {curveto} bind def /O {closepath} bind def /n FMLOCAL /L { /n exch def newpath normalize moveto 2 1 n {pop normalize lineto} for } bind def /Y { L closepath } bind def /x1 FMLOCAL /x2 FMLOCAL /y1 FMLOCAL /y2 FMLOCAL /rad FMLOCAL /R { /y2 exch def /x2 exch def /y1 exch def /x1 exch def x1 y1 x2 y1 x2 y2 x1 y2 4 Y } bind def % The following commented out code did not work for tangent lines of zero % length. The code following it was provided by Frame to patch this error. % %/RR { % /rad exch def % normalize % /y2 exch def % /x2 exch def % normalize % /y1 exch def % /x1 exch def % newpath % x1 y1 rad add moveto % x1 y2 x2 y2 rad arcto % x2 y2 x2 y1 rad arcto % x2 y1 x1 y1 rad arcto % x1 y1 x1 y2 rad arcto % closepath % 16 {pop} repeat % } bind def /rarc {rad {arcto} stopped } bind def /RR { /rad exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def mark newpath x1 y1 rad add moveto x1 y2 x2 y2 rarc x2 y2 x2 y1 rarc x2 y1 x1 y1 rarc % x2 y1 x1 y1 rarc x1 y1 x1 y2 rarc closepath cleartomark } bind def /C { grestore gsave R clip } bind def /FMpointsize FMLOCAL /F { FMfonts exch get FMpointsize scalefont setfont } bind def /Q { /FMpointsize exch def F } bind def /T { moveto show } bind def /RF { rotate 0 ne {-1 1 scale} if } bind def /TF { gsave moveto RF show grestore } bind def /P { moveto 0 32 3 2 roll widthshow } bind def /PF { gsave moveto RF 0 32 3 2 roll widthshow grestore } bind def /S { moveto 0 exch ashow } bind def /SF { gsave moveto RF 0 exch ashow grestore } bind def /B { moveto 0 32 4 2 roll 0 exch awidthshow } bind def /BF { gsave moveto RF 0 32 4 2 roll 0 exch awidthshow grestore } bind def /G { gsave newpath normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath fill grestore } bind def /A { gsave savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix stroke grestore } bind def /x FMLOCAL /y FMLOCAL /w FMLOCAL /h FMLOCAL /xx FMLOCAL /yy FMLOCAL /ww FMLOCAL /hh FMLOCAL /FMsaveobject FMLOCAL /FMoptop FMLOCAL /FMdicttop FMLOCAL /BEGINPRINTCODE { /FMdicttop countdictstack 1 add def /FMoptop count 4 sub def /FMsaveobject save def userdict begin /showpage {} def FMNORMALIZEGRAPHICS 3 index neg 3 index neg translate } bind def /ENDPRINTCODE { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMsaveobject restore } bind def /gn { 0 { 46 mul cf read pop 32 sub dup 46 lt {exit} if 46 sub add } loop add } bind def /str FMLOCAL /cfs { /str sl string def 0 1 sl 1 sub {str exch val put} for str def } bind def /ic [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx} {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx} {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh} {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh} {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl} {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl} {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl} {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl} ] def /sl FMLOCAL /val FMLOCAL /ws FMLOCAL /im FMLOCAL /bs FMLOCAL /cs FMLOCAL /len FMLOCAL /pos FMLOCAL /ms { /sl exch def /val 255 def /ws cfs /im cfs /val 0 def /bs cfs /cs cfs } bind def 400 ms /cip { is 0 cf cs readline pop { ic exch get exec add } forall pop /tot w 1 sub def 0 1 tot { /indx exch def /indxa is indx get def /placer nredt indxa get def /placeg ngreent indxa get def /placeb nbluet indxa get def cris indx placer 255 mul cvi put cgis indx placeg 255 mul cvi put cbis indx placeb 255 mul cvi put } for pop cris } bind def /ip { is 0 cf cs readline pop { ic exch get exec add } forall pop } bind def /wh { /len exch def /pos exch def ws 0 len getinterval im pos len getinterval copy pop pos len } bind def /bl { /len exch def /pos exch def bs 0 len getinterval im pos len getinterval copy pop pos len } bind def /s1 1 string def /fl { /len exch def /pos exch def /val cf s1 readhexstring pop 0 get def pos 1 pos len add 1 sub {im exch val put} for pos len } bind def /hx { 3 copy getinterval cf exch readhexstring pop pop } bind def /h FMLOCAL /w FMLOCAL /d FMLOCAL /lb FMLOCAL /bitmapsave FMLOCAL /is FMLOCAL /cf FMLOCAL /wbytes { dup 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } bind def /BEGINBITMAPBWc { 1 {} COMMONBITMAPc } bind def /BEGINBITMAPGRAYc { 8 {} COMMONBITMAPc } bind def /BEGINBITMAP2BITc { 2 {} COMMONBITMAPc } bind def /COMMONBITMAPc { /r exch def /d exch def gsave translate rotate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def r /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} image bitmapsave restore grestore } bind def /BEGINBITMAPBW { 1 {} COMMONBITMAP } bind def /BEGINBITMAPGRAY { 8 {} COMMONBITMAP } bind def /BEGINBITMAP2BIT { 2 {} COMMONBITMAP } bind def /COMMONBITMAP { /r exch def /d exch def gsave translate rotate scale /h exch def /w exch def /bitmapsave save def r /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} image bitmapsave restore grestore } bind def /proc1 FMLOCAL /proc2 FMLOCAL /newproc FMLOCAL /Fmcc { /proc2 exch cvlit def /proc1 exch cvlit def /newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx } bind def /ngrayt 256 array def /nredt 256 array def /nbluet 256 array def /ngreent 256 array def /gryt FMLOCAL /blut FMLOCAL /grnt FMLOCAL /redt FMLOCAL /indx FMLOCAL /cynu FMLOCAL /magu FMLOCAL /yelu FMLOCAL /k FMLOCAL /u FMLOCAL /colorsetup { currentcolortransfer /gryt exch def /blut exch def /grnt exch def /redt exch def 0 1 255 { /indx exch def /cynu 1 red indx get 255 div sub def /magu 1 green indx get 255 div sub def /yelu 1 blue indx get 255 div sub def /k cynu magu min yelu min def nredt indx 1 0 cynu max sub redt exec put ngreent indx 1 0 magu max sub grnt exec put nbluet indx 1 0 yelu max sub blut exec put ngrayt indx 1 k sub gryt exec put } for } bind def /tran FMLOCAL /fakecolorsetup { /tran 256 string def 0 1 255 {/indx exch def tran indx red indx get 77 mul green indx get 151 mul blue indx get 28 mul add add 256 idiv put} for currenttransfer {255 mul cvi tran exch get 255.0 div} exch Fmcc settransfer } bind def /BITMAPCOLOR { /d 8 def gsave translate rotate scale /h exch def /w exch def /bitmapsave save def colorsetup /is w d wbytes string def /ris w d wbytes string def /gis w d wbytes string def /bis w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop /tot w 1 sub def 0 1 tot { /indx exch def /indxa is indx get def /placer nredt indxa get def /placeg ngreent indxa get def /placeb nbluet indxa get def ris indx placer 255 mul cvi put gis indx placeg 255 mul cvi put bis indx placeb 255 mul cvi put } for pop ris} {gis} {bis} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPCOLORc { /d 8 def gsave translate rotate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def colorsetup /is im 0 lb getinterval def /cris lb string def /cgis lb string def /cbis lb string def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {cip} {cgis} {cbis} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLORc { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def ws 0 w getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {ip} {gip} {bip} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLOR { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop } { cf gis readhexstring pop } { cf bis readhexstring pop } true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUEGRAYc { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def ws 0 w getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {ip gip bip w gray} image bitmapsave restore grestore } bind def /ww FMLOCAL /r FMLOCAL /g FMLOCAL /b FMLOCAL /i FMLOCAL /gray { /ww exch def /b exch def /g exch def /r exch def 0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul b i get .114 mul add add r i 3 -1 roll floor cvi put } for r } bind def /BITMAPTRUEGRAY { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop cf gis readhexstring pop cf bis readhexstring pop w gray} image bitmapsave restore grestore } bind def /BITMAPGRAY { 8 {fakecolorsetup} COMMONBITMAP } bind def /BITMAPGRAYc { 8 {fakecolorsetup} COMMONBITMAPc } bind def /ENDBITMAP { } bind def end /ALDsave FMLOCAL /ALDmatrix matrix def ALDmatrix currentmatrix pop /StartALD { /ALDsave save def savematrix ALDmatrix setmatrix } bind def /InALD { restorematrix } bind def /DoneALD { ALDsave restore } bind def %%EndProlog %%BeginSetup (3.0) FMVERSION 1 1 612 792 0 1 18 FMDOCUMENT 0 0 /Helvetica-Bold FMFONTDEFINE 1 0 /Times-Roman FMFONTDEFINE 2 0 /Times-Bold FMFONTDEFINE 3 1 /Symbol FMFONTDEFINE 4 0 /Courier-Bold FMFONTDEFINE 5 0 /Times-Italic FMFONTDEFINE 6 0 /Helvetica FMFONTDEFINE 32 FMFILLS 0 0 FMFILL 1 0.1 FMFILL 2 0.3 FMFILL 3 0.5 FMFILL 4 0.7 FMFILL 5 0.9 FMFILL 6 0.97 FMFILL 7 1 FMFILL 8 <0f1e3c78f0e1c387> FMFILL 9 <0f87c3e1f0783c1e> FMFILL 10 FMFILL 11 FMFILL 12 <8142241818244281> FMFILL 13 <03060c183060c081> FMFILL 14 <8040201008040201> FMFILL 16 1 FMFILL 17 0.9 FMFILL 18 0.7 FMFILL 19 0.5 FMFILL 20 0.3 FMFILL 21 0.1 FMFILL 22 0.03 FMFILL 23 0 FMFILL 24 FMFILL 25 FMFILL 26 <3333333333333333> FMFILL 27 <0000ffff0000ffff> FMFILL 28 <7ebddbe7e7dbbd7e> FMFILL 29 FMFILL 30 <7fbfdfeff7fbfdfe> FMFILL %%EndSetup %%Page: "1" 1 %%BeginPaperSize: Letter %%EndPaperSize 612 792 0 FMBEGINPAGE 72 444.68 558 444.68 2 L 2 H 2 Z 0 X 0 K N 72 75.33 558 75.33 2 L 0.25 H N 0 10 Q (Autumn 1994) 495.24 60.29 T 1 24 Q -0.17 (REACT) 207 677 S 1 19 Q -0.13 (TM) 284.8 686.6 S 1 24 Q -0.17 ( In IRIX) 313.04 677 S 1 19 Q -0.13 (TM) 392.98 686.6 S 1 24 Q -0.17 ( 5.3) 421.22 677 S 207 629 558 639 C 207 630 459 630 2 L 0.25 H 0 Z 0 X 0 K N 0 0 612 792 C 1 24 Q 0 X 0 K -0.17 (T) 207 647 S -0.17 (echnical Report) 219.81 647 S 2 12 Q (Silicon Graphics, Inc.) 207 605 T 2 10 Q (A description of the r) 207 425.33 T (eal-time capabilities of IRIX V) 297.87 425.33 T (ersion 5.3) 427.42 425.33 T (running on Onyx) 207 412.33 T 1 8 Q -0.05 (TM) 280.32 416.33 S 2 10 Q ( and CHALLENGE) 292.2 412.33 T 1 8 Q -0.05 (TM) 377.18 416.33 S 2 10 Q ( multipr) 389.06 412.33 T (ocessor) 424.14 412.33 T (systems.) 207 399.33 T FMENDPAGE %%EndPage: "1" 2 %%Page: "2" 2 612 792 0 FMBEGINPAGE FMENDPAGE %%EndPage: "2" 3 %%Page: "3" 3 612 792 0 FMBEGINPAGE 72 750.68 558 750.68 2 L 2 H 0 Z 0 X 0 K N 72 726.98 558 726.98 2 L 0.25 H N 72 75.33 558 75.33 2 L 2 Z N 0 9 Q (REACT In IRIX V) 207 60.96 T (.5 T) 276.09 60.96 T (echnical Report) 290.91 60.96 T 0 10 Q (3) 527.85 60.96 T 0 9 Q ( of) 533.41 60.96 T 0 10 Q (31) 546.89 60.96 T 54 660.33 540 667.33 C 54 660.33 540 667.33 R 7 X 0 K V 51 664.33 303 664.33 2 L 0.25 H 0 Z 0 X N 0 0 612 792 C 1 20 Q 0 X 0 K -0.14 (T) 54 673.99 S -0.14 (able of Contents) 64.68 673.99 S 1 10 Q (Introduction) 162 643.66 T (5) 535 643.66 T (Scope Of This Document) 189 631.66 T (5) 535 631.66 T (Con\336guration Assumptions) 189 619.66 T (5) 535 619.66 T (Related Documentation) 189 607.66 T (5) 535 607.66 T (System Interrupt Response) 162 591.66 T (6) 535 591.66 T (T) 189 579.66 T (otal Interrupt Response T) 194.41 579.66 T (ime) 295.93 579.66 T (6) 535 579.66 T (Interrupt Latency) 189 567.66 T (7) 535 567.66 T (Hardware Interrupt Latency) 211.75 555.66 T (7) 535 555.66 T (Software Interrupt Latency) 211.75 543.66 T (8) 535 543.66 T (Potential Sources Of Software Interrupt Latency) 211.75 531.66 T (8) 535 531.66 T (Interrupt Handlers) 252 519.66 T (8) 535 519.66 T (Critical Kernel Regions) 252 507.66 T (8) 535 507.66 T (Software Interrupt Response T) 189 495.66 T (ime) 311.61 495.66 T (9) 535 495.66 T (Con\336guring For Real-T) 162 479.66 T (ime Operation) 256.6 479.66 T (10) 530.01 479.66 T (Redirecting Interrupts) 189 467.66 T (10) 530.01 467.66 T (Assigning Processes T) 189 455.66 T (o Processors) 278.8 455.66 T (1) 530.37 455.66 T (1) 535 455.66 T (Locking Processes Into Memory) 189 443.66 T (1) 530.37 443.66 T (1) 535 443.66 T (Processor Isolation) 189 431.66 T (12) 530.01 431.66 T (Overview) 211.75 419.66 T (12) 530.01 419.66 T (Activities That Override Processor Isolation) 211.75 407.66 T (12) 530.01 407.66 T (Minimizing Memory Management Overhead) 211.75 395.66 T (13) 530.01 395.66 T (Controlling Process Scheduling) 189 383.66 T (13) 530.01 383.66 T (Setting Process Priority) 211.75 371.66 T (13) 530.01 371.66 T (Disabling The UNIX Scheduler \050Shutting Of) 211.75 359.66 T (f Clock Interrupts\051) 391.17 359.66 T (14) 530.01 359.66 T (Deadline Scheduling) 211.75 347.66 T (14) 530.01 347.66 T (Frame Scheduler) 252 335.66 T (15) 530.01 335.66 T (Other Real-T) 162 319.66 T (ime Programming Features) 214.66 319.66 T (18) 530.01 319.66 T (T) 189 307.66 T (imers) 194.76 307.66 T (18) 530.01 307.66 T (Interval T) 211.75 295.66 T (imers) 251.09 295.66 T (17) 530.01 295.66 T (Event T) 211.75 283.66 T (imers) 243.32 283.66 T (17) 530.01 283.66 T (Details Of T) 211.75 271.66 T (imer Resolution) 261.36 271.66 T (19) 530.01 271.66 T (Asynchronous Disk I/O) 189 259.66 T (20) 530.01 259.66 T (External Interrupts) 189 247.66 T (22) 530.01 247.66 T (Signals) 189 235.66 T (22) 530.01 235.66 T (VME Bus Capabilities and Use) 162 219.66 T (25) 530.01 219.66 T (Con\336gurations) 189 207.66 T (25) 530.01 207.66 T (Memory Mapping) 189 195.66 T (26) 530.01 195.66 T (PIO Mapping) 211.75 183.66 T (26) 530.01 183.66 T (DMA Mapping) 211.75 171.66 T (26) 530.01 171.66 T (Optimizing Bandwidth and Latency) 189 159.66 T (27) 530.01 159.66 T (PIO Operations) 211.74 147.66 T (29) 530.01 147.66 T (DMA Engine) 211.74 135.66 T (29) 530.01 135.66 T (Intelligent I/O Controllers) 211.74 123.66 T (30) 530.01 123.66 T (SCSI Capabilities and Use) 162 107.66 T (31) 530.01 107.66 T (Summary of REACT System Functions) 162 92.66 T (32) 530.01 92.66 T FMENDPAGE %%EndPage: "3" 4 %%Page: "4" 4 612 792 0 FMBEGINPAGE 54 750.68 540 750.68 2 L 2 H 0 Z 0 X 0 K N 54 726.98 540 726.98 2 L 0.25 H N 54 75.33 540 75.33 2 L 2 Z N 0 10 Q (4) 54 60.96 T 0 9 Q ( of) 59.56 60.96 T (31) 73.32 60.96 T (REACT In IRIX V) 189 60.96 T (.5 T) 258.09 60.96 T (echnical Report) 272.91 60.96 T 54 664.33 540 671.33 C 54 664.33 540 671.33 R 7 X 0 K V 51 668.33 303 668.33 2 L 0.25 H 0 Z 0 X N 0 0 612 792 C 1 16 Q 0 X 0 K -0.11 (List of Figures) 54 676.66 S 1 10 Q (Components of T) 155.02 651.66 T (otal Interrupt Response) 224.28 651.66 T (6) 535 651.66 T (Hardware Interrupt Path) 155.02 639.66 T (7) 535 639.66 T (Components of Software Interrupt Response T) 155.02 627.66 T (ime) 341.48 627.66 T (9) 535 627.66 T (Frame Scheduler Operation) 155.02 615.66 T (16) 530.01 615.66 T (Asynchronous I/O operation) 155.02 603.66 T (21) 530.01 603.66 T 54 575.33 540 582.33 C 54 575.33 540 582.33 R 7 X 0 K V 51 579.33 303 579.33 2 L 0.25 H 0 Z 0 X N 0 0 612 792 C 1 16 Q 0 X 0 K -0.11 (List of T) 54 587.66 S -0.11 (ables) 107.86 587.66 S 1 10 Q (Signal Functions Summary) 153 562.66 T (24) 530.01 562.66 T (CHALLENGE / Onyx VME Slots) 153 550.66 T (25) 530.01 550.66 T (POWERchannel-2 \050Pc-2\051 Con\336gurations vs. Number of VME Busses) 153 538.66 T (27) 530.01 538.66 T (VME Bus DMA Performance \050using DMA board on VME\051) 153 526.66 T (28) 530.01 526.66 T (VME PIO Bandwidth \050CPU accessing Slave on VME Bus\051) 153 514.66 T (29) 530.01 514.66 T (VME DMA Engine Performance vs. Block Size \050MB / sec, D32 transfers\051) 153 502.66 T (30) 530.01 502.66 T (REACT System Functions) 153 490.66 T (32) 530.01 490.66 T FMENDPAGE %%EndPage: "4" 5 %%Page: "5" 5 612 792 0 FMBEGINPAGE 72 750.68 558 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Introduction) 207 739.85 T 72 726.98 558 726.98 2 L 0.25 H N 72 75.33 558 75.33 2 L 2 Z N (REACT In IRIX V) 207 60.96 T (.5 T) 276.09 60.96 T (echnical Report) 290.91 60.96 T 0 10 Q (5) 527.85 60.96 T 0 9 Q ( of) 533.41 60.96 T 0 10 Q (33) 546.89 60.96 T 72 672.33 558 675.33 C 207 674.48 558 674.48 2 L 0.25 H 2 Z 0 X 0 K N 72 674.48 198 674.48 2 L 0 Z N 0 0 612 792 C 0 12 Q 0 X 0 K (1.0) 207 679.33 T ( Introduction) 223.67 679.33 T 1 10 Q -0.18 (The REACT extensions to IRIX enable a multiprocessor system to be con\336gured to pro-) 207 657.66 P (vide deterministic performance, including the response to external interrupts and sig-) 207 645.66 T (nals. REACT also provides features that simplify the implementation of real-time) 207 633.66 T (applications.) 207 621.66 T (The approach used in IRIX with REACT to achieving determinism is to provide the) 207 597.66 T (user with full control over the assignment of software activity to processors. One pro-) 207 585.66 T (cessor \050or more, if desired\051 is designated as the system processor) 207 573.66 T (, and all non-determin-) 465.57 573.66 T (istic system activity takes place on that processor) 207 561.66 T (. For example, system activity) 403.26 561.66 T (typically includes the UNIX) 207 549.66 T 1 8 Q (TM) 319.98 553.66 T 1 10 Q ( scheduler and general-purpose disk and network I/O.) 331.97 549.66 T -0.29 (The remaining processors are designated as real-time processors, and no system activity) 207 537.66 P (takes place on those processors unless it is explicitly requested by a real-time process.) 207 525.66 T 0 F (1.1) 184.11 495.66 T (Scope Of This Document) 207 495.66 T 1 F (This document covers the subset of IRIX operating system functionality and of Onyx) 207 479.66 T (and CHALLENGE multiprocessor hardware that is of particular interest to developers) 207 467.66 T -0.12 (of real-time applications. It provides a description of system functionality) 207 455.66 P -0.12 (, identi\336es the) 499.51 455.66 P (system calls and user interfaces that provide access to the functionality) 207 443.66 T (, and provides) 489.48 443.66 T (background information.) 207 431.66 T 0 F (1.2) 184.11 401.66 T (Con\336guration Assumptions) 207 401.66 T 1 F (The descriptions included in this document are accurate for all Onyx systems and all) 207 385.66 T (multiprocessor CHALLENGE systems running IRIX 5.3. W) 207 373.66 T (ithin this document, these) 448.67 373.66 T (con\336gurations are referred to generically as \322the system\323.) 207 361.66 T 0 F (1.3) 184.11 331.66 T (Related Documentation) 207 331.66 T 1 F (Refer also to the following documents:) 207 315.66 T -0.1 (Advanced Site and Server Administration Guide \050M4-ADMIN-3.0, or available on-line) 207 291.66 P (through IRIS Insight) 207 279.66 T 1 8 Q (TM) 289.73 283.66 T 1 10 Q (\051) 301.73 279.66 T (CHALLENGE and Onyx Performance Report) 207 255.66 T (IRIX Device Driver Programming Guide \050007-091) 207 231.66 T (1-030\051) 410.09 231.66 T (IRIX Device Driver Reference Pages \050007-2183-001\051) 207 207.66 T (IRIX Man Pages \050M4-IRXMP-4.0, or available on-line through IRIS Insight\051) 207 183.66 T (IRIX System Programming Guide \050available on-line through IRIS Insight\051) 207 159.66 T (Symmetric Multiprocessing Systems T) 207 135.66 T (echnical Report \050EVER-IND-TR \05001/93\051\051) 362.05 135.66 T FMENDPAGE %%EndPage: "5" 6 %%Page: "6" 6 612 792 0 FMBEGINPAGE 54 750.68 540 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (System Interrupt Response) 189 739.85 T 54 726.98 540 726.98 2 L 0.25 H N 54 75.33 540 75.33 2 L 2 Z N 0 10 Q (6) 54 60.96 T 0 9 Q ( of) 59.56 60.96 T 0 10 Q ( 33) 70.54 60.96 T 0 9 Q (REACT In IRIX V) 189 60.96 T (.5 T) 258.09 60.96 T (echnical Report) 272.91 60.96 T 54 672.33 540 675.33 C 189 674.48 540 674.48 2 L 0.25 H 2 Z 0 X 0 K N 54 674.48 180 674.48 2 L 0 Z N 0 0 612 792 C 0 12 Q 0 X 0 K (2.0) 189 679.33 T ( System Interrupt Response) 205.67 679.33 T 1 10 Q (This section describes the events that occur in response to an external interrupt.) 189 657.66 T 0 F (2.1) 166.11 627.66 T (T) 189 627.66 T (otal Interrupt Response T) 194.37 627.66 T (ime) 315.25 627.66 T 1 F (The REACT extensions included in IRIX provide guaranteed deterministic interrupt) 189 603.66 T (response on a properly con\336gured system. Performance is speci\336ed in terms of total) 189 591.66 T (interrupt response, which is de\336ned as the interval between the occurrence of an exter-) 189 579.66 T (nal interrupt and the start of execution of a user process that was enabled by that inter-) 189 567.66 T (rupt. The worst-case total interrupt response time for a properly con\336gured system) 189 555.66 T (running IRIX V) 189 543.66 T (.5 is guaranteed not to exceed 200) 251.56 543.66 T 3 F (m) 390.34 543.66 T 1 F (s.) 396.1 543.66 T -0.17 (T) 189 519.66 P -0.17 (otal Interrupt Response time can be divided into two component intervals \050refer to Fig-) 194.41 519.66 P (ure 1\051:) 189 507.66 T 0 9 Q (1.) 189 489.66 T 2 10 Q -0.15 (Interrupt latency) 202.74 489.66 P -0.15 (.) 275.61 489.66 P 1 F -0.15 ( The time between the occurrence of a hardware interrupt and the) 278.11 489.66 P (instant when the operating system begins responding to that interrupt.) 202.74 477.66 T 0 9 Q (2.) 189 462.66 T 2 10 Q (Softwar) 202.74 462.66 T (e interrupt r) 236.43 462.66 T (esponse time.) 289.54 462.66 T 1 F ( The system time spent responding to the inter-) 346.17 462.66 T (rupt, ending when a user process begins executing.) 202.74 450.66 T (Figure 1: Components of T) 189 116.68 T (otal Interrupt Response) 297.13 116.68 T 54 89.3 540 687.33 C 82.01 137.34 540 423.33 C 0 34 -295 480 -21 446 274 91.01 144.33 FMBEGINEPSF %%BeginDocument: %!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(TM) 3.2 %%For: (Frank X. Doyle) (Dangerous Ideas Group) %%Title: (Fig. 1 Chart) %%CreationDate: (1/20/94) (4:39 PM) %%BoundingBox: 34 -295 480 -21 %%DocumentProcessColors: Black %%DocumentFonts: Helvetica %%DocumentSuppliedResources: procset Adobe_packedarray 2.0 0 %%+ procset Adobe_cmykcolor 1.1 0 %%+ procset Adobe_cshow 1.1 0 %%+ procset Adobe_customcolor 1.0 0 %%+ procset Adobe_typography_AI3 1.0 1 %%+ procset Adobe_IllustratorA_AI3 1.0 1 %AI3_ColorUsage: Black&White %AI3_TemplateBox: 306 -394 306 -394 %AI3_TileBox: 18 -782 594 -6 %AI3_DocumentPreview: Macintosh_Pic %%EndComments %%BeginProlog %%BeginResource: procset Adobe_packedarray 2.0 0 %%Title: (Packed Array Operators) %%Version: 2.0 %%CreationDate: (8/2/90) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) userdict /Adobe_packedarray 5 dict dup begin put /initialize % - initialize - { /packedarray where { pop } { Adobe_packedarray begin Adobe_packedarray { dup xcheck { bind } if userdict 3 1 roll put } forall end } ifelse } def /terminate % - terminate - { } def /packedarray % arguments count packedarray array { array astore readonly } def /setpacking % boolean setpacking - { pop } def /currentpacking % - setpacking boolean { false } def currentdict readonly pop end %%EndResource Adobe_packedarray /initialize get exec %%BeginResource: procset Adobe_cmykcolor 1.1 0 %%Title: (CMYK Color Operators) %%Version: 1.1 %%CreationDate: (1/23/89) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_cmykcolor 4 dict dup begin put /initialize % - initialize - { /setcmykcolor where { pop } { userdict /Adobe_cmykcolor_vars 2 dict dup begin put /_setrgbcolor /setrgbcolor load def /_currentrgbcolor /currentrgbcolor load def Adobe_cmykcolor begin Adobe_cmykcolor { dup xcheck { bind } if pop pop } forall end end Adobe_cmykcolor begin } ifelse } def /terminate % - terminate - { currentdict Adobe_cmykcolor eq { end } if } def /setcmykcolor % cyan magenta yellow black setcmykcolor - { 1 sub 4 1 roll 3 { 3 index add neg dup 0 lt { pop 0 } if 3 1 roll } repeat Adobe_cmykcolor_vars /_setrgbcolor get exec pop } def /currentcmykcolor % - currentcmykcolor cyan magenta yellow black { Adobe_cmykcolor_vars /_currentrgbcolor get exec 3 { 1 sub neg 3 1 roll } repeat 0 } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_cshow 1.1 0 %%Title: (cshow Operator) %%Version: 1.1 %%CreationDate: (1/23/89) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_cshow 3 dict dup begin put /initialize % - initialize - { /cshow where { pop } { userdict /Adobe_cshow_vars 1 dict dup begin put /_cshow % - _cshow proc {} def Adobe_cshow begin Adobe_cshow { dup xcheck { bind } if userdict 3 1 roll put } forall end end } ifelse } def /terminate % - terminate - { } def /cshow % proc string cshow - { exch Adobe_cshow_vars exch /_cshow exch put { 0 0 Adobe_cshow_vars /_cshow get exec } forall } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_customcolor 1.0 0 %%Title: (Custom Color Operators) %%Version: 1.0 %%CreationDate: (5/9/88) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_customcolor 5 dict dup begin put /initialize % - initialize - { /setcustomcolor where { pop } { Adobe_customcolor begin Adobe_customcolor { dup xcheck { bind } if pop pop } forall end Adobe_customcolor begin } ifelse } def /terminate % - terminate - { currentdict Adobe_customcolor eq { end } if } def /findcmykcustomcolor % cyan magenta yellow black name findcmykcustomcolor object { 5 packedarray } def /setcustomcolor % object tint setcustomcolor - { exch aload pop pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } def /setoverprint % boolean setoverprint - { pop } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_typography_AI3 1.1 0 %%Title: (Typography Operators) %%Version: 1.0 %%CreationDate:(5/31/90) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_typography_AI3 47 dict dup begin put /initialize % - initialize - { /TZ where { pop } { Adobe_typography_AI3 begin Adobe_typography_AI3 { dup xcheck { bind } if pop pop } forall end Adobe_typography_AI3 begin } ifelse } def /terminate % - terminate - { currentdict Adobe_typography_AI3 eq { end } if } def % [ number value stream [ array for encoding modification ] modifyEncoding ==> [ modified array ] /modifyEncoding { /_tempEncode exch ddef % pointer for sequential encodings /_pntr 0 ddef { % get bottom object counttomark -1 roll % is it a mark ? dup type dup /marktype eq { % exit pop pop exit } { % ... object ... type .... % insert if a nametype /nametype eq { % insert the name at _pntr and increment pointer _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll put } { % reset _pntr if it's a number /_pntr exch ddef } ifelse } ifelse } loop % return the modified encoding _tempEncode } def /TE % Set std platform encoding % (encoding pairs) TE - { StandardEncoding 256 array copy modifyEncoding /_nativeEncoding exch def } def % re-define font % expected arguments % for 'normal fonts : % [ /_Helvetica-Bold/Helvetica-Bold direction fontScript defaultEncoding TZ % % for cartographic, pictographic, and expert fonts : % [ ... number value stream ... /_Symbol/Symbol % direction fontScript defaultEncoding TZ % for blended fonts w/ default encoding : % [ /_AdobeSans_20ULig1XCond-Bold/AdobeSans % direction fontScript defaultEncoding [ w0 w1 ... wn ] TZ % for blended fonts w/ special encoding : % [ ... number value stream ... /_AdobeSans_20ULig1XCond/AdobeSans % direction fontScript defaultEncoding [ w0 w1 ... wn ] TZ /TZ { % set weight vector (if present) dup type /arraytype eq {/_wv exch def} {/_wv 0 def} ifelse % platform dependent coding flag /_useNativeEncoding exch def % pop fontScript & direction pop pop % create a new dictionary with length % equal to original dictionary length + 2 % copy all the key/value pairs except FID % call makeblended font with the weight values if _wv is an array findfont _wv type /arraytype eq {_wv makeblendedfont} if dup length 2 add dict begin % copy all the values but the FID % into the new dictionary mark exch { 1 index /FID ne { def } if cleartomark mark } forall % discard last mark pop % define FontName /FontName exch def % if no re-encoding stream is present % then if the base encoding vector of the font % is the same as StandardEncoding % and the use platform encoding flag is true % then install AI platform encoding % else leave the base encoding in effect counttomark 0 eq { 1 _useNativeEncoding eq { /Encoding _nativeEncoding def } if % clean up cleartomark } { % custom encoding to be done % start off with a copy of the font's standard encoding /Encoding load 256 array copy modifyEncoding /Encoding exch def } ifelse FontName currentdict end % register the new font definefont pop } def % text painting operators /tr % string tr ax ay string { _ax _ay 3 2 roll } def /trj % string trj cx cy fillchar ax ay string { _cx _cy _sp _ax _ay 6 5 roll } def /a0 { /Tx % text % textString Tx - { dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss } ddef /Tj % justified text % textString Tj - { dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss } ddef } def /a1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll gsave dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll gsave dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss grestore 3 1 roll moveto tr sp } ddef } def /e0 { /Tx % text % textString Tx - { tr _psf } ddef /Tj % justified text % textString Tj - { trj _pjsf } ddef } def /e1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll gsave tr _psf grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll gsave trj _pjsf grestore 3 1 roll moveto tr sp } ddef } def /i0 { /Tx % text % textString Tx - { tr sp } ddef /Tj % justified text % textString Tj - { trj jsp } ddef } def /i1 { W N } def /o0 { /Tx % text % textString Tx - { tr sw rmoveto } ddef /Tj % justified text % textString Tj - { trj swj rmoveto } ddef } def /r0 { /Tx % text % textString Tx - { tr _ctm _pss } ddef /Tj % justified text % textString Tj - { trj _ctm _pjss } ddef } def /r1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll currentpoint gsave newpath moveto tr _ctm _pss grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll currentpoint gsave newpath moveto trj _ctm _pjss grestore 3 1 roll moveto tr sp } ddef } def % font operators % Binding /To % begin text % bindType To - { pop _ctm currentmatrix pop } def /TO % end text % TO - { Te _ctm setmatrix newpath } def % Text paths /Tp % begin text path % a b c d tx ty startPt Tp - { pop _tm astore pop _ctm setmatrix _tDict begin /W {} def /h {} def } def /TP % end text path % TP - { end iTm 0 0 moveto } def % Render mode & matrix operators /Tr % begin render % render Tr - { _render 3 le {currentpoint newpath moveto} if dup 8 eq {pop 0} {dup 9 eq {pop 1} if} ifelse dup /_render exch ddef _renderStart exch get load exec } def /iTm % internal set text matrix % - iTm - (uses _tm as implicit argument) { _ctm setmatrix _tm concat 0 _rise translate _hs 1 scale } def /Tm % set text matrix % a b c d tx ty Tm - { _tm astore pop iTm 0 0 moveto } def /Td % translate text matrix % tx ty Td - { _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto } def /Te % end render % - Te - { _render -1 eq {} {_renderEnd _render get dup null ne {load exec} {pop} ifelse} ifelse /_render -1 ddef } def % Attributes /Ta % set alignment % alignment Ta - { pop } def /Tf % set font name and size % fontname size Tf - { dup 1000 div /_fScl exch ddef exch findfont exch scalefont setfont } def /Tl % set leading % leading paragraphLeading Tl - { pop 0 exch _leading astore pop } def /Tt % set user tracking % userTracking Tt - { pop } def /TW % set word spacing % minSpace optSpace maxSpace TW - { 3 npop } def /Tw % set computed word spacing % wordSpace Tw { /_cx exch ddef } def /TC % set character spacing % minSpace optSpace maxSpace TC - { 3 npop } def /Tc % set computed char spacing % charSpace Tc - { /_ax exch ddef } def /Ts % set super/subscripting (rise) % rise Ts - { /_rise exch ddef currentpoint iTm moveto } def /Ti % set indentation % firstStartIndent otherStartIndent stopIndent Ti - { 3 npop } def /Tz % set horizontal scaling % scalePercent Tz - { 100 div /_hs exch ddef iTm } def /TA % set pairwise kerning % autoKern TA - % autoKern = 0 -> no pair kerning % = 1 -> automatic pair kerning { pop } def /Tq % set hanging quotes % hangingQuotes Tq - % hangingQuotes = 0 -> no hanging quotes % = 1 -> hanging quotes { pop } def % Text Bodies /TX {pop} def %/Tx % non-justified text % textString Tx - %/Tj % justified text % textString Tj - /Tk % kern % autoKern kernValue Tk - % autoKern = 0 -> manual kern, = 1 -> auto kern % kernValue = kern value in em/1000 space { exch pop _fScl mul neg 0 rmoveto } def /TK % non-printing kern % autoKern kernValue TK - { 2 npop } def /T* % carriage return & line feed % - T* - { _leading aload pop neg Td } def /T*- % carriage return & negative line feed % - T*- - { _leading aload pop Td } def /T- % print a discretionary hyphen % - T- - { _hyphen Tx } def /T+ % discretionary hyphen hyphen % - T+ - {} def /TR % reset pattern matrix % a b c d tx ty TR - { _ctm currentmatrix pop _tm astore pop iTm 0 0 moveto } def /TS % special chars % textString justified TS - { 0 eq {Tx} {Tj} ifelse } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_IllustratorA_AI3 1.0 2 %%Title: (Adobe Illustrator (R) Version 3.0 Abbreviated Prolog) %%Version: 1.0 %%CreationDate: (7/22/89) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_IllustratorA_AI3 61 dict dup begin put % initialization /initialize % - initialize - { % 47 vars, but leave slack of 10 entries for custom Postscript fragments userdict /Adobe_IllustratorA_AI3_vars 57 dict dup begin put % paint operands /_lp /none def /_pf {} def /_ps {} def /_psf {} def /_pss {} def /_pjsf {} def /_pjss {} def /_pola 0 def /_doClip 0 def % paint operators /cf currentflat def % - cf flatness % typography operands /_tm matrix def /_renderStart [/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0] def /_renderEnd [null null null null /i1 /i1 /i1 /i1] def /_render -1 def /_rise 0 def /_ax 0 def % x character spacing (_ax, _ay, _cx, _cy follows awidthshow naming convention) /_ay 0 def % y character spacing /_cx 0 def % x word spacing /_cy 0 def % y word spacing /_leading [0 0] def /_ctm matrix def /_mtx matrix def /_sp 16#020 def /_hyphen (-) def /_fScl 0 def /_cnt 0 def /_hs 1 def /_nativeEncoding 0 def /_useNativeEncoding 0 def /_tempEncode 0 def /_pntr 0 def /_tDict 2 dict def % typography operators /Tx {} def /Tj {} def % compound path operators /CRender {} def % printing /_AI3_savepage {} def % color operands /_gf null def /_cf 4 array def /_if null def /_of false def /_fc {} def /_gs null def /_cs 4 array def /_is null def /_os false def /_sc {} def /_i null def Adobe_IllustratorA_AI3 begin Adobe_IllustratorA_AI3 { dup xcheck { bind } if pop pop } forall end end Adobe_IllustratorA_AI3 begin Adobe_IllustratorA_AI3_vars begin newpath } def /terminate % - terminate - { end end } def % definition operators /_ % - _ null null def /ddef % key value ddef - { Adobe_IllustratorA_AI3_vars 3 1 roll put } def /xput % key value literal xput - { dup load dup length exch maxlength eq { dup dup load dup length 2 mul dict copy def } if load begin def end } def /npop % integer npop - { { pop } repeat } def % marking operators /sw % ax ay string sw x y { dup length exch stringwidth exch 5 -1 roll 3 index 1 sub mul add 4 1 roll 3 1 roll 1 sub mul add } def /swj % cx cy fillchar ax ay string swj x y { dup 4 1 roll dup length exch stringwidth exch 5 -1 roll 3 index 1 sub mul add 4 1 roll 3 1 roll 1 sub mul add 6 2 roll /_cnt 0 ddef {1 index eq {/_cnt _cnt 1 add ddef} if} forall pop exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop } def /ss % ax ay string matrix ss - { 4 1 roll { % matrix ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put pop gsave false charpath currentpoint 4 index setmatrix stroke grestore moveto 2 copy rmoveto } exch cshow 3 npop } def /jss % cx cy fillchar ax ay string matrix jss - { 4 1 roll { % cx cy fillchar matrix ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put gsave _sp eq { exch 6 index 6 index 6 index 5 -1 roll widthshow currentpoint } { false charpath currentpoint 4 index setmatrix stroke }ifelse grestore moveto 2 copy rmoveto } exch cshow 6 npop } def % path operators /sp % ax ay string sp - { { 2 npop (0) exch 2 copy 0 exch put pop false charpath 2 copy rmoveto } exch cshow 2 npop } def /jsp % cx cy fillchar ax ay string jsp - { { % cx cy fillchar ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put _sp eq { exch 5 index 5 index 5 index 5 -1 roll widthshow } { false charpath }ifelse 2 copy rmoveto } exch cshow 5 npop } def % path construction operators /pl % x y pl x y { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } def /setstrokeadjust where { pop true setstrokeadjust /c % x1 y1 x2 y2 x3 y3 c - { curveto } def /C /c load def /v % x2 y2 x3 y3 v - { currentpoint 6 2 roll curveto } def /V /v load def /y % x1 y1 x2 y2 y - { 2 copy curveto } def /Y /y load def /l % x y l - { lineto } def /L /l load def /m % x y m - { moveto } def } {%else /c { pl curveto } def /C /c load def /v { currentpoint 6 2 roll pl curveto } def /V /v load def /y { pl 2 copy curveto } def /Y /y load def /l { pl lineto } def /L /l load def /m { pl moveto } def }ifelse % graphic state operators /d % array phase d - { setdash } def /cf {} def % - cf flatness /i % flatness i - { dup 0 eq { pop cf } if setflat } def /j % linejoin j - { setlinejoin } def /J % linecap J - { setlinecap } def /M % miterlimit M - { setmiterlimit } def /w % linewidth w - { setlinewidth } def % path painting operators /H % - H - {} def /h % - h - { closepath } def /N % - N - { _pola 0 eq { _doClip 1 eq {clip /_doClip 0 ddef} if newpath } { /CRender {N} ddef }ifelse } def /n % - n - {N} def /F % - F - { _pola 0 eq { _doClip 1 eq { gsave _pf grestore clip newpath /_lp /none ddef _fc /_doClip 0 ddef } { _pf }ifelse } { /CRender {F} ddef }ifelse } def /f % - f - { closepath F } def /S % - S - { _pola 0 eq { _doClip 1 eq { gsave _ps grestore clip newpath /_lp /none ddef _sc /_doClip 0 ddef } { _ps }ifelse } { /CRender {S} ddef }ifelse } def /s % - s - { closepath S } def /B % - B - { _pola 0 eq { _doClip 1 eq % F clears _doClip gsave F grestore { gsave S grestore clip newpath /_lp /none ddef _sc /_doClip 0 ddef } { S }ifelse } { /CRender {B} ddef }ifelse } def /b % - b - { closepath B } def /W % - W - { /_doClip 1 ddef } def /* % - [string] * - { count 0 ne { dup type (stringtype) eq {pop} if } if _pola 0 eq {newpath} if } def % group operators /u % - u - {} def /U % - U - {} def /q % - q - { _pola 0 eq {gsave} if } def /Q % - Q - { _pola 0 eq {grestore} if } def /*u % - *u - { _pola 1 add /_pola exch ddef } def /*U % - *U - { _pola 1 sub /_pola exch ddef _pola 0 eq {CRender} if } def /D % polarized D - {pop} def /*w % - *w - {} def /*W % - *W - {} def % place operators /` % matrix llx lly urx ury string ` - { /_i save ddef 6 1 roll 4 npop concat pop userdict begin /showpage {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 0 setgray false setoverprint } def /~ % - ~ - { end _i restore } def % color operators /O % flag O - { 0 ne /_of exch ddef /_lp /none ddef } def /R % flag R - { 0 ne /_os exch ddef /_lp /none ddef } def /g % gray g - { /_gf exch ddef /_fc { _lp /fill ne { _of setoverprint _gf setgray /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /G % gray G - { /_gs exch ddef /_sc { _lp /stroke ne { _os setoverprint _gs setgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /k % cyan magenta yellow black k - { _cf astore pop /_fc { _lp /fill ne { _of setoverprint _cf aload pop setcmykcolor /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /K % cyan magenta yellow black K - { _cs astore pop /_sc { _lp /stroke ne { _os setoverprint _cs aload pop setcmykcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /x % cyan magenta yellow black name gray x - { /_gf exch ddef findcmykcustomcolor /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /X % cyan magenta yellow black name gray X - { /_gs exch ddef findcmykcustomcolor /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def % locked object operator /A % value A - { pop } def currentdict readonly pop end setpacking % annotate page operator /annotatepage { } def %%EndResource %%EndProlog %%BeginSetup %%IncludeFont: Helvetica Adobe_cmykcolor /initialize get exec Adobe_cshow /initialize get exec Adobe_customcolor /initialize get exec Adobe_typography_AI3 /initialize get exec Adobe_IllustratorA_AI3 /initialize get exec [ 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute /egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde /oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex /udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash /.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash /questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef /guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide /.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex /Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex /Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla /hungarumlaut/ogonek/caron TE %AI3_BeginEncoding: _Helvetica Helvetica [/_Helvetica/Helvetica 0 0 1 TZ %AI3_EndEncoding TrueType %%EndSetup 0 A 0 i 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 540 254 m 540 -1042 L (N) * 36 254 m 36 -1042 L (N) * 108 254 m 108 -1042 L (N) * 180 254 m 180 -1042 L (N) * 324 254 m 324 -1042 L (N) * 252 254 m 252 -1042 L (N) * 396 254 m 396 -1042 L (N) * 468 254 m 468 -1042 L (N) * 0 To 0.8552 0 0 0.8552 97.5762 -29.3903 0 Tp TP -10.1342 0 Td 0 Tr 0 O 0 g 0.8552 w /_Helvetica 9.3543 Tf 0 Ts 100 Tz 0 Tt 0 TA 0 0 5 TC 100 100 200 TW 0 0 0 Ti 1 Ta 0 Tq 0 0 Tl 0 Tc 0 Tw (VME) Tx (\r) TX -7.2772 -11.3543 Td (Interrupt) Tx (\r) TX 2.6012 -11.3543 Td (Occurs) Tx (\r) TX TO 0 To 0.8552 0 0 0.8552 405.457 -29.3903 0 Tp TP -6.7577 0 Td 0 Tr (OS) Tx (\r) TX -14.2964 -11.3543 Td (Response) Tx (\r) TX 1.0448 -11.3543 Td (Complete) Tx (\r) TX TO 0 R 0 G 1 D 36.8552 -79.8552 m 467.0332 -79.8552 l S u 0 O 0 g 0 D 460.2919 -79.9154 m 458.8279 -77.6304 L 458.91 -77.5757 L 462.8369 -79.1355 L 464.2052 -79.4365 465.5734 -79.7376 466.9417 -80.0386 c 465.5734 -80.3396 464.2052 -80.6406 462.8369 -80.9416 c 458.91 -82.5014 L 458.8279 -82.4604 L 460.2919 -80.1617 L 460.2919 -79.9154 L f U u 0 R 0 G 1.7104 w 159.1523 -72.1582 m 159.1523 -79.8552 l 159.1523 -87.5522 l S U u 220.7285 -72.1582 m 220.7285 -79.8552 l 220.7285 -87.5522 l S U u 0 O 0 g 0.8552 w 98.3698 -65.8587 m 100.5453 -65.8587 L 97.5762 -68.8552 L 94.5934 -65.8587 L 96.7826 -65.8587 L 98.3698 -65.8587 L f U u 406.2506 -65.8587 m 408.4262 -65.8587 L 405.457 -68.8552 L 402.4742 -65.8587 L 404.6634 -65.8587 L 406.2506 -65.8587 L f U 0 To 0.8552 0 0 0.8552 251.9442 -292.6605 0 Tp TP -104.2173 0 Td 0 Tr (Figure 1: Components of Total Interrupt Response) Tx (\r) TX TO 0 To 0.8552 0 0 0.8552 468.0166 -76.9008 0 Tp TP -1.6243 0 Td 0 Tr /_Helvetica 11.6929 Tf (t) Tx (\r) TX TO u 0 R 0 G 1.7104 w 97.6523 -72.1582 m 97.6523 -79.8552 l 97.6523 -87.5522 l S U u 405.3809 -72.1582 m 405.3809 -79.8552 l 405.3809 -87.5522 l S U u 1 w 97.6523 -53.1582 m 97.6523 -60.8552 l 97.6523 -68.5522 l S U u 405.3809 -52.6582 m 405.3809 -60.3552 l 405.3809 -68.0522 l S U 0 To 0.8552 0 0 0.8552 159.0762 -29.3903 0 Tp TP -21.0483 0 Td 0 Tr 0 O 0 g 0.8552 w /_Helvetica 9.3543 Tf (Processor) Tx (\r) TX 1.8179 -11.3543 Td (Receives) Tx (\r) TX 1.819 -11.3543 Td (Interrupt) Tx (\r) TX TO u 159.8698 -65.8587 m 162.0453 -65.8587 L 159.0762 -68.8552 L 156.0934 -65.8587 L 158.2826 -65.8587 L 159.8698 -65.8587 L f U u 0 R 0 G 1 w 159.1523 -53.1582 m 159.1523 -60.8552 l 159.1523 -68.5522 l S U 0 To 0.8552 0 0 0.8552 220.5762 -29.3903 0 Tp TP -6.7577 0 Td 0 Tr 0 O 0 g 0.8552 w (OS) Tx (\r) TX -7.5387 -11.3543 Td (Begins) Tx (\r) TX -10.6572 -11.3543 Td (Responding) Tx (\r) TX TO u 221.3698 -65.8587 m 223.5453 -65.8587 L 220.5762 -68.8552 L 217.5934 -65.8587 L 219.7826 -65.8587 L 221.3698 -65.8587 L f U u 0 R 0 G 1 w 220.6523 -53.1582 m 220.6523 -60.8552 l 220.6523 -68.5522 l S U u 1.7104 w 159.1523 -129.1582 m 159.1523 -136.8552 l 159.1523 -144.5522 l S U u 220.7285 -129.1582 m 220.7285 -136.8552 l 220.7285 -144.5522 l S U u 97.6523 -129.1582 m 97.6523 -136.8552 l 97.6523 -144.5522 l S U u u 0 O 0 g 0.8552 w 216.9588 -135.7722 m 216.9588 -133.5967 L 219.9553 -136.5658 L 216.9588 -139.5486 L 216.9588 -137.3594 L 216.9588 -135.7722 L f U 0 R 0 G 1 w 211.9553 -136.4897 m 219.6523 -136.4897 l S U -342 -143.5 m 954 -143.5 L (N) * u u 0 O 0 g 0.8552 w 155.4588 -135.7722 m 155.4588 -133.5967 L 158.4553 -136.5658 L 155.4588 -139.5486 L 155.4588 -137.3594 L 155.4588 -135.7722 L f U 0 R 0 G 1 w 150.4553 -136.4897 m 158.1523 -136.4897 l S U u u 0 O 0 g 0.8552 w 163.0412 -137.2278 m 163.0412 -139.4033 L 160.0447 -136.4342 L 163.0412 -133.4514 L 163.0412 -135.6406 L 163.0412 -137.2278 L f U 0 R 0 G 1 w 168.0447 -136.5103 m 160.3477 -136.5103 l S U u u 0 O 0 g 0.8552 w 101.7912 -137.2278 m 101.7912 -139.4033 L 98.7947 -136.4342 L 101.7912 -133.4514 L 101.7912 -135.6406 L 101.7912 -137.2278 L f U 0 R 0 G 1 w 106.7947 -136.5103 m 99.0977 -136.5103 l S U 0 To 0.8552 0 0 0.8552 130.0762 -134.1403 0 Tp TP -20.2661 0 Td 0 Tr 0 O 0 g 0.8552 w (Hardware) Tx (\r) TX 3.8892 -11.3543 Td (Latency) Tx (\r) TX TO 0 To 0.8552 0 0 0.8552 191.0762 -134.1403 0 Tp TP -18.4517 0 Td 0 Tr (Software) Tx (\r) TX 2.0748 -11.3543 Td (Latency) Tx (\r) TX TO u 0 R 0 G 1.7104 w 220.7285 -185.1582 m 220.7285 -192.8552 l 220.7285 -200.5522 l S U u 97.6523 -185.1582 m 97.6523 -192.8552 l 97.6523 -200.5522 l S U u u 0 O 0 g 0.8552 w 216.9588 -191.7722 m 216.9588 -189.5967 L 219.9553 -192.5658 L 216.9588 -195.5486 L 216.9588 -193.3594 L 216.9588 -191.7722 L f U 0 R 0 G 1 w 211.9553 -192.4897 m 219.6523 -192.4897 l S U u u 0 O 0 g 0.8552 w 101.7912 -193.2278 m 101.7912 -195.4033 L 98.7947 -192.4342 L 101.7912 -189.4514 L 101.7912 -191.6406 L 101.7912 -193.2278 L f U 0 R 0 G 1 w 106.7947 -192.5103 m 99.0977 -192.5103 l S U 0 To 0.8552 0 0 0.8552 158.5762 -194.1403 0 Tp TP -35.0878 0 Td 0 Tr 0 O 0 g 0.8552 w (Interrupt Latency) Tx (\r) TX TO 1 w 405.5 254 m 405.5 -1042 L (N) * u 0 R 0 G 1.7104 w 405.4785 -185.1582 m 405.4785 -192.8552 l 405.4785 -200.5522 l S U 1 w 405.5 254 m 405.5 -1042 L (N) * u 0 O 0 g 0.8552 w 224.2912 -193.2278 m 224.2912 -195.4033 L 221.2947 -192.4342 L 224.2912 -189.4514 L 224.2912 -191.6406 L 224.2912 -193.2278 L f U 0 R 0 G 1 w 243.2947 -192.5103 m 221.5977 -192.5103 l S u 0 O 0 g 0.8552 w 401.9588 -191.7722 m 401.9588 -189.5967 L 404.9553 -192.5658 L 401.9588 -195.5486 L 401.9588 -193.3594 L 401.9588 -191.7722 L f U 0 R 0 G 1 w 382.9553 -192.4897 m 404.6523 -192.4897 l S 0 To 0.8552 0 0 0.8552 312.5762 -194.1403 0 Tp TP -71.2055 0 Td 0 Tr 0 O 0 g 0.8552 w (Software Interrupt Response Time) Tx (\r) TX TO u 0 R 0 G 1.7104 w 97.6523 -240.6582 m 97.6523 -248.3552 l 97.6523 -256.0522 l S U u 405.4785 -240.6582 m 405.4785 -248.3552 l 405.4785 -256.0522 l S U u 0 O 0 g 0.8552 w 401.9588 -247.2722 m 401.9588 -245.0967 L 404.9553 -248.0658 L 401.9588 -251.0486 L 401.9588 -248.8594 L 401.9588 -247.2722 L f U 0 To 0.8552 0 0 0.8552 251.5762 -249.6403 0 Tp TP -63.4099 0 Td 0 Tr (TotaI Interrupt Response Time) Tx (\r) TX TO u 101.2912 -248.7278 m 101.2912 -250.9033 L 98.2947 -247.9342 L 101.2912 -244.9514 L 101.2912 -247.1406 L 101.2912 -248.7278 L f U u 0 R 0 G 1 w 182.2947 -248.0103 m 98.5977 -248.0103 l S U u 404.2947 -248.0103 m 320.5977 -248.0103 l S U %%PageTrailer gsave annotatepage grestore showpage %%Trailer Adobe_IllustratorA_AI3 /terminate get exec Adobe_typography_AI3 /terminate get exec Adobe_customcolor /terminate get exec Adobe_cshow /terminate get exec Adobe_cmykcolor /terminate get exec Adobe_packedarray /terminate get exec %%EOF %%EndDocument FMENDEPSF 54 89.3 540 687.33 C 0 0 612 792 C 181.11 108.66 410 128.66 R 7 X 0 K V FMENDPAGE %%EndPage: "6" 7 %%Page: "7" 7 612 792 0 FMBEGINPAGE 72 750.68 558 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (System Interrupt Response) 207 739.85 T 72 726.98 558 726.98 2 L 0.25 H N 72 75.33 558 75.33 2 L 2 Z N (REACT In IRIX V) 207 60.96 T (.5 T) 276.09 60.96 T (echnical Report) 290.91 60.96 T 0 10 Q (7) 527.85 60.96 T 0 9 Q ( of) 533.41 60.96 T 0 10 Q (33) 546.89 60.96 T (2.2) 184.11 680.66 T (Interrupt Latency) 207 680.66 T 1 F (Interrupt latency) 207 664.66 T (, as de\336ned in the previous section, can be subdivided into two compo-) 272.68 664.66 T (nent intervals:) 207 652.66 T 0 9 Q (1.) 207 634.66 T 2 10 Q (Hardwar) 220.74 634.66 T (e interrupt latency) 259.98 634.66 T (.) 338.82 634.66 T 1 F ( The time required for the interrupt to propagate) 341.32 634.66 T (through the hardware from its source to the R4400) 220.74 622.66 T 1 8 Q (TM) 422.82 626.66 T 1 10 Q ( interrupt pin.) 434.82 622.66 T 0 9 Q (2.) 207 607.66 T 2 10 Q (Softwar) 220.74 607.66 T (e interrupt latency) 254.43 607.66 T (.) 333.26 607.66 T 1 F ( The interval between the instant when the R4400) 335.76 607.66 T (receives the interrupt, and the instant when the operating system begins responding) 220.74 595.66 T (to the hardware interrupt.) 220.74 583.66 T 0 9 Q (2.2.1) 178.01 560.33 T (Hardware Interrupt Latency) 207 560.33 T 1 10 Q (The system implements 128 interrupt levels with priority control hardware on the CPU) 207 547.66 T -0.15 (boards. In addition to being divided by levels, interrupts may be directed to speci\336c pro-) 207 535.66 P (cessors or to groups of processors.) 207 523.66 T (The path followed by VME interrupt signals is shown in Figure 2.) 207 499.66 T (Figure 2: Hardware Interrupt Path) 207 262.66 T (On the VCAM VME controller) 207 238.66 T (, there are eight Interrupt Level / Destination registers) 332.07 238.66 T (which can be programmed with arbitrary interrupt levels and destination processors.) 207 226.66 T (\050Direct access to these registers is limited to the OS; see section 3.1.\051 Seven of these) 207 214.66 T -0.14 (registers are directly associated with the seven VME interrupt lines; the eighth is associ-) 207 202.66 P (ated with error detection circuitry within the VCAM. When one of the interrupt lines is) 207 190.66 T -0.36 (active or an error is detected by the VCAM, the interrupt level and destination contained) 207 178.66 P -0.23 (in the associated register is used to transmit an interrupt over the POWERpath-2) 207 166.66 P 1 8 Q -0.19 (TM) 525.09 170.66 P 1 10 Q -0.23 ( bus,) 537.09 166.66 P (where it is received and acted on by the appropriate CPU.) 207 154.66 T (The typical time required for the interrupt to propagate from the VME bus to the appro-) 207 130.66 T -0.3 (priate CPU chip is approximately 2) 207 118.66 P 3 F -0.3 (m) 346.78 118.66 P 1 F -0.3 (s. The theoretical worst-case propagation delay is 8) 352.54 118.66 P 3 F (m) 207 106.66 T 1 F (s. Note that the theoretical worst case requires a very lar) 212.76 106.66 T (ge con\336guration. For typical) 437.11 106.66 T (con\336gurations, 4) 207 94.66 T 3 F (m) 274.18 94.66 T 1 F (s is a more appropriate worst-case maximum propagation delay) 279.94 94.66 T (.) 532.99 94.66 T 72 89.3 558 687.33 C 173.02 283.33 558 472.33 C 0 25 -189 398 -12 373 186 187.02 286.33 FMBEGINEPSF %%BeginDocument: %!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(TM) 3.2 %%For: (Frank X. Doyle) (Dangerous Ideas Group) %%Title: (Fig. 2 Chart) %%CreationDate: (1/20/94) (4:52 PM) %%BoundingBox: 25 -189 398 -12 %%DocumentProcessColors: Black %%DocumentFonts: Helvetica %%DocumentSuppliedResources: procset Adobe_packedarray 2.0 0 %%+ procset Adobe_cmykcolor 1.1 0 %%+ procset Adobe_cshow 1.1 0 %%+ procset Adobe_customcolor 1.0 0 %%+ procset Adobe_typography_AI3 1.0 1 %%+ procset Adobe_IllustratorA_AI3 1.0 1 %AI3_ColorUsage: Black&White %AI3_TemplateBox: 306 -394 306 -394 %AI3_TileBox: 18 -782 594 -6 %AI3_DocumentPreview: Macintosh_Pic %%EndComments %%BeginProlog %%BeginResource: procset Adobe_packedarray 2.0 0 %%Title: (Packed Array Operators) %%Version: 2.0 %%CreationDate: (8/2/90) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) userdict /Adobe_packedarray 5 dict dup begin put /initialize % - initialize - { /packedarray where { pop } { Adobe_packedarray begin Adobe_packedarray { dup xcheck { bind } if userdict 3 1 roll put } forall end } ifelse } def /terminate % - terminate - { } def /packedarray % arguments count packedarray array { array astore readonly } def /setpacking % boolean setpacking - { pop } def /currentpacking % - setpacking boolean { false } def currentdict readonly pop end %%EndResource Adobe_packedarray /initialize get exec %%BeginResource: procset Adobe_cmykcolor 1.1 0 %%Title: (CMYK Color Operators) %%Version: 1.1 %%CreationDate: (1/23/89) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_cmykcolor 4 dict dup begin put /initialize % - initialize - { /setcmykcolor where { pop } { userdict /Adobe_cmykcolor_vars 2 dict dup begin put /_setrgbcolor /setrgbcolor load def /_currentrgbcolor /currentrgbcolor load def Adobe_cmykcolor begin Adobe_cmykcolor { dup xcheck { bind } if pop pop } forall end end Adobe_cmykcolor begin } ifelse } def /terminate % - terminate - { currentdict Adobe_cmykcolor eq { end } if } def /setcmykcolor % cyan magenta yellow black setcmykcolor - { 1 sub 4 1 roll 3 { 3 index add neg dup 0 lt { pop 0 } if 3 1 roll } repeat Adobe_cmykcolor_vars /_setrgbcolor get exec pop } def /currentcmykcolor % - currentcmykcolor cyan magenta yellow black { Adobe_cmykcolor_vars /_currentrgbcolor get exec 3 { 1 sub neg 3 1 roll } repeat 0 } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_cshow 1.1 0 %%Title: (cshow Operator) %%Version: 1.1 %%CreationDate: (1/23/89) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_cshow 3 dict dup begin put /initialize % - initialize - { /cshow where { pop } { userdict /Adobe_cshow_vars 1 dict dup begin put /_cshow % - _cshow proc {} def Adobe_cshow begin Adobe_cshow { dup xcheck { bind } if userdict 3 1 roll put } forall end end } ifelse } def /terminate % - terminate - { } def /cshow % proc string cshow - { exch Adobe_cshow_vars exch /_cshow exch put { 0 0 Adobe_cshow_vars /_cshow get exec } forall } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_customcolor 1.0 0 %%Title: (Custom Color Operators) %%Version: 1.0 %%CreationDate: (5/9/88) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_customcolor 5 dict dup begin put /initialize % - initialize - { /setcustomcolor where { pop } { Adobe_customcolor begin Adobe_customcolor { dup xcheck { bind } if pop pop } forall end Adobe_customcolor begin } ifelse } def /terminate % - terminate - { currentdict Adobe_customcolor eq { end } if } def /findcmykcustomcolor % cyan magenta yellow black name findcmykcustomcolor object { 5 packedarray } def /setcustomcolor % object tint setcustomcolor - { exch aload pop pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } def /setoverprint % boolean setoverprint - { pop } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_typography_AI3 1.1 0 %%Title: (Typography Operators) %%Version: 1.0 %%CreationDate:(5/31/90) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_typography_AI3 47 dict dup begin put /initialize % - initialize - { /TZ where { pop } { Adobe_typography_AI3 begin Adobe_typography_AI3 { dup xcheck { bind } if pop pop } forall end Adobe_typography_AI3 begin } ifelse } def /terminate % - terminate - { currentdict Adobe_typography_AI3 eq { end } if } def % [ number value stream [ array for encoding modification ] modifyEncoding ==> [ modified array ] /modifyEncoding { /_tempEncode exch ddef % pointer for sequential encodings /_pntr 0 ddef { % get bottom object counttomark -1 roll % is it a mark ? dup type dup /marktype eq { % exit pop pop exit } { % ... object ... type .... % insert if a nametype /nametype eq { % insert the name at _pntr and increment pointer _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll put } { % reset _pntr if it's a number /_pntr exch ddef } ifelse } ifelse } loop % return the modified encoding _tempEncode } def /TE % Set std platform encoding % (encoding pairs) TE - { StandardEncoding 256 array copy modifyEncoding /_nativeEncoding exch def } def % re-define font % expected arguments % for 'normal fonts : % [ /_Helvetica-Bold/Helvetica-Bold direction fontScript defaultEncoding TZ % % for cartographic, pictographic, and expert fonts : % [ ... number value stream ... /_Symbol/Symbol % direction fontScript defaultEncoding TZ % for blended fonts w/ default encoding : % [ /_AdobeSans_20ULig1XCond-Bold/AdobeSans % direction fontScript defaultEncoding [ w0 w1 ... wn ] TZ % for blended fonts w/ special encoding : % [ ... number value stream ... /_AdobeSans_20ULig1XCond/AdobeSans % direction fontScript defaultEncoding [ w0 w1 ... wn ] TZ /TZ { % set weight vector (if present) dup type /arraytype eq {/_wv exch def} {/_wv 0 def} ifelse % platform dependent coding flag /_useNativeEncoding exch def % pop fontScript & direction pop pop % create a new dictionary with length % equal to original dictionary length + 2 % copy all the key/value pairs except FID % call makeblended font with the weight values if _wv is an array findfont _wv type /arraytype eq {_wv makeblendedfont} if dup length 2 add dict begin % copy all the values but the FID % into the new dictionary mark exch { 1 index /FID ne { def } if cleartomark mark } forall % discard last mark pop % define FontName /FontName exch def % if no re-encoding stream is present % then if the base encoding vector of the font % is the same as StandardEncoding % and the use platform encoding flag is true % then install AI platform encoding % else leave the base encoding in effect counttomark 0 eq { 1 _useNativeEncoding eq { /Encoding _nativeEncoding def } if % clean up cleartomark } { % custom encoding to be done % start off with a copy of the font's standard encoding /Encoding load 256 array copy modifyEncoding /Encoding exch def } ifelse FontName currentdict end % register the new font definefont pop } def % text painting operators /tr % string tr ax ay string { _ax _ay 3 2 roll } def /trj % string trj cx cy fillchar ax ay string { _cx _cy _sp _ax _ay 6 5 roll } def /a0 { /Tx % text % textString Tx - { dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss } ddef /Tj % justified text % textString Tj - { dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss } ddef } def /a1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll gsave dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll gsave dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss grestore 3 1 roll moveto tr sp } ddef } def /e0 { /Tx % text % textString Tx - { tr _psf } ddef /Tj % justified text % textString Tj - { trj _pjsf } ddef } def /e1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll gsave tr _psf grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll gsave trj _pjsf grestore 3 1 roll moveto tr sp } ddef } def /i0 { /Tx % text % textString Tx - { tr sp } ddef /Tj % justified text % textString Tj - { trj jsp } ddef } def /i1 { W N } def /o0 { /Tx % text % textString Tx - { tr sw rmoveto } ddef /Tj % justified text % textString Tj - { trj swj rmoveto } ddef } def /r0 { /Tx % text % textString Tx - { tr _ctm _pss } ddef /Tj % justified text % textString Tj - { trj _ctm _pjss } ddef } def /r1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll currentpoint gsave newpath moveto tr _ctm _pss grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll currentpoint gsave newpath moveto trj _ctm _pjss grestore 3 1 roll moveto tr sp } ddef } def % font operators % Binding /To % begin text % bindType To - { pop _ctm currentmatrix pop } def /TO % end text % TO - { Te _ctm setmatrix newpath } def % Text paths /Tp % begin text path % a b c d tx ty startPt Tp - { pop _tm astore pop _ctm setmatrix _tDict begin /W {} def /h {} def } def /TP % end text path % TP - { end iTm 0 0 moveto } def % Render mode & matrix operators /Tr % begin render % render Tr - { _render 3 le {currentpoint newpath moveto} if dup 8 eq {pop 0} {dup 9 eq {pop 1} if} ifelse dup /_render exch ddef _renderStart exch get load exec } def /iTm % internal set text matrix % - iTm - (uses _tm as implicit argument) { _ctm setmatrix _tm concat 0 _rise translate _hs 1 scale } def /Tm % set text matrix % a b c d tx ty Tm - { _tm astore pop iTm 0 0 moveto } def /Td % translate text matrix % tx ty Td - { _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto } def /Te % end render % - Te - { _render -1 eq {} {_renderEnd _render get dup null ne {load exec} {pop} ifelse} ifelse /_render -1 ddef } def % Attributes /Ta % set alignment % alignment Ta - { pop } def /Tf % set font name and size % fontname size Tf - { dup 1000 div /_fScl exch ddef exch findfont exch scalefont setfont } def /Tl % set leading % leading paragraphLeading Tl - { pop 0 exch _leading astore pop } def /Tt % set user tracking % userTracking Tt - { pop } def /TW % set word spacing % minSpace optSpace maxSpace TW - { 3 npop } def /Tw % set computed word spacing % wordSpace Tw { /_cx exch ddef } def /TC % set character spacing % minSpace optSpace maxSpace TC - { 3 npop } def /Tc % set computed char spacing % charSpace Tc - { /_ax exch ddef } def /Ts % set super/subscripting (rise) % rise Ts - { /_rise exch ddef currentpoint iTm moveto } def /Ti % set indentation % firstStartIndent otherStartIndent stopIndent Ti - { 3 npop } def /Tz % set horizontal scaling % scalePercent Tz - { 100 div /_hs exch ddef iTm } def /TA % set pairwise kerning % autoKern TA - % autoKern = 0 -> no pair kerning % = 1 -> automatic pair kerning { pop } def /Tq % set hanging quotes % hangingQuotes Tq - % hangingQuotes = 0 -> no hanging quotes % = 1 -> hanging quotes { pop } def % Text Bodies /TX {pop} def %/Tx % non-justified text % textString Tx - %/Tj % justified text % textString Tj - /Tk % kern % autoKern kernValue Tk - % autoKern = 0 -> manual kern, = 1 -> auto kern % kernValue = kern value in em/1000 space { exch pop _fScl mul neg 0 rmoveto } def /TK % non-printing kern % autoKern kernValue TK - { 2 npop } def /T* % carriage return & line feed % - T* - { _leading aload pop neg Td } def /T*- % carriage return & negative line feed % - T*- - { _leading aload pop Td } def /T- % print a discretionary hyphen % - T- - { _hyphen Tx } def /T+ % discretionary hyphen hyphen % - T+ - {} def /TR % reset pattern matrix % a b c d tx ty TR - { _ctm currentmatrix pop _tm astore pop iTm 0 0 moveto } def /TS % special chars % textString justified TS - { 0 eq {Tx} {Tj} ifelse } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_IllustratorA_AI3 1.0 2 %%Title: (Adobe Illustrator (R) Version 3.0 Abbreviated Prolog) %%Version: 1.0 %%CreationDate: (7/22/89) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_IllustratorA_AI3 61 dict dup begin put % initialization /initialize % - initialize - { % 47 vars, but leave slack of 10 entries for custom Postscript fragments userdict /Adobe_IllustratorA_AI3_vars 57 dict dup begin put % paint operands /_lp /none def /_pf {} def /_ps {} def /_psf {} def /_pss {} def /_pjsf {} def /_pjss {} def /_pola 0 def /_doClip 0 def % paint operators /cf currentflat def % - cf flatness % typography operands /_tm matrix def /_renderStart [/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0] def /_renderEnd [null null null null /i1 /i1 /i1 /i1] def /_render -1 def /_rise 0 def /_ax 0 def % x character spacing (_ax, _ay, _cx, _cy follows awidthshow naming convention) /_ay 0 def % y character spacing /_cx 0 def % x word spacing /_cy 0 def % y word spacing /_leading [0 0] def /_ctm matrix def /_mtx matrix def /_sp 16#020 def /_hyphen (-) def /_fScl 0 def /_cnt 0 def /_hs 1 def /_nativeEncoding 0 def /_useNativeEncoding 0 def /_tempEncode 0 def /_pntr 0 def /_tDict 2 dict def % typography operators /Tx {} def /Tj {} def % compound path operators /CRender {} def % printing /_AI3_savepage {} def % color operands /_gf null def /_cf 4 array def /_if null def /_of false def /_fc {} def /_gs null def /_cs 4 array def /_is null def /_os false def /_sc {} def /_i null def Adobe_IllustratorA_AI3 begin Adobe_IllustratorA_AI3 { dup xcheck { bind } if pop pop } forall end end Adobe_IllustratorA_AI3 begin Adobe_IllustratorA_AI3_vars begin newpath } def /terminate % - terminate - { end end } def % definition operators /_ % - _ null null def /ddef % key value ddef - { Adobe_IllustratorA_AI3_vars 3 1 roll put } def /xput % key value literal xput - { dup load dup length exch maxlength eq { dup dup load dup length 2 mul dict copy def } if load begin def end } def /npop % integer npop - { { pop } repeat } def % marking operators /sw % ax ay string sw x y { dup length exch stringwidth exch 5 -1 roll 3 index 1 sub mul add 4 1 roll 3 1 roll 1 sub mul add } def /swj % cx cy fillchar ax ay string swj x y { dup 4 1 roll dup length exch stringwidth exch 5 -1 roll 3 index 1 sub mul add 4 1 roll 3 1 roll 1 sub mul add 6 2 roll /_cnt 0 ddef {1 index eq {/_cnt _cnt 1 add ddef} if} forall pop exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop } def /ss % ax ay string matrix ss - { 4 1 roll { % matrix ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put pop gsave false charpath currentpoint 4 index setmatrix stroke grestore moveto 2 copy rmoveto } exch cshow 3 npop } def /jss % cx cy fillchar ax ay string matrix jss - { 4 1 roll { % cx cy fillchar matrix ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put gsave _sp eq { exch 6 index 6 index 6 index 5 -1 roll widthshow currentpoint } { false charpath currentpoint 4 index setmatrix stroke }ifelse grestore moveto 2 copy rmoveto } exch cshow 6 npop } def % path operators /sp % ax ay string sp - { { 2 npop (0) exch 2 copy 0 exch put pop false charpath 2 copy rmoveto } exch cshow 2 npop } def /jsp % cx cy fillchar ax ay string jsp - { { % cx cy fillchar ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put _sp eq { exch 5 index 5 index 5 index 5 -1 roll widthshow } { false charpath }ifelse 2 copy rmoveto } exch cshow 5 npop } def % path construction operators /pl % x y pl x y { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } def /setstrokeadjust where { pop true setstrokeadjust /c % x1 y1 x2 y2 x3 y3 c - { curveto } def /C /c load def /v % x2 y2 x3 y3 v - { currentpoint 6 2 roll curveto } def /V /v load def /y % x1 y1 x2 y2 y - { 2 copy curveto } def /Y /y load def /l % x y l - { lineto } def /L /l load def /m % x y m - { moveto } def } {%else /c { pl curveto } def /C /c load def /v { currentpoint 6 2 roll pl curveto } def /V /v load def /y { pl 2 copy curveto } def /Y /y load def /l { pl lineto } def /L /l load def /m { pl moveto } def }ifelse % graphic state operators /d % array phase d - { setdash } def /cf {} def % - cf flatness /i % flatness i - { dup 0 eq { pop cf } if setflat } def /j % linejoin j - { setlinejoin } def /J % linecap J - { setlinecap } def /M % miterlimit M - { setmiterlimit } def /w % linewidth w - { setlinewidth } def % path painting operators /H % - H - {} def /h % - h - { closepath } def /N % - N - { _pola 0 eq { _doClip 1 eq {clip /_doClip 0 ddef} if newpath } { /CRender {N} ddef }ifelse } def /n % - n - {N} def /F % - F - { _pola 0 eq { _doClip 1 eq { gsave _pf grestore clip newpath /_lp /none ddef _fc /_doClip 0 ddef } { _pf }ifelse } { /CRender {F} ddef }ifelse } def /f % - f - { closepath F } def /S % - S - { _pola 0 eq { _doClip 1 eq { gsave _ps grestore clip newpath /_lp /none ddef _sc /_doClip 0 ddef } { _ps }ifelse } { /CRender {S} ddef }ifelse } def /s % - s - { closepath S } def /B % - B - { _pola 0 eq { _doClip 1 eq % F clears _doClip gsave F grestore { gsave S grestore clip newpath /_lp /none ddef _sc /_doClip 0 ddef } { S }ifelse } { /CRender {B} ddef }ifelse } def /b % - b - { closepath B } def /W % - W - { /_doClip 1 ddef } def /* % - [string] * - { count 0 ne { dup type (stringtype) eq {pop} if } if _pola 0 eq {newpath} if } def % group operators /u % - u - {} def /U % - U - {} def /q % - q - { _pola 0 eq {gsave} if } def /Q % - Q - { _pola 0 eq {grestore} if } def /*u % - *u - { _pola 1 add /_pola exch ddef } def /*U % - *U - { _pola 1 sub /_pola exch ddef _pola 0 eq {CRender} if } def /D % polarized D - {pop} def /*w % - *w - {} def /*W % - *W - {} def % place operators /` % matrix llx lly urx ury string ` - { /_i save ddef 6 1 roll 4 npop concat pop userdict begin /showpage {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 0 setgray false setoverprint } def /~ % - ~ - { end _i restore } def % color operators /O % flag O - { 0 ne /_of exch ddef /_lp /none ddef } def /R % flag R - { 0 ne /_os exch ddef /_lp /none ddef } def /g % gray g - { /_gf exch ddef /_fc { _lp /fill ne { _of setoverprint _gf setgray /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /G % gray G - { /_gs exch ddef /_sc { _lp /stroke ne { _os setoverprint _gs setgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /k % cyan magenta yellow black k - { _cf astore pop /_fc { _lp /fill ne { _of setoverprint _cf aload pop setcmykcolor /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /K % cyan magenta yellow black K - { _cs astore pop /_sc { _lp /stroke ne { _os setoverprint _cs aload pop setcmykcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /x % cyan magenta yellow black name gray x - { /_gf exch ddef findcmykcustomcolor /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /X % cyan magenta yellow black name gray X - { /_gs exch ddef findcmykcustomcolor /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def % locked object operator /A % value A - { pop } def currentdict readonly pop end setpacking % annotate page operator /annotatepage { } def %%EndResource %%EndProlog %%BeginSetup %%IncludeFont: Helvetica Adobe_cmykcolor /initialize get exec Adobe_cshow /initialize get exec Adobe_customcolor /initialize get exec Adobe_typography_AI3 /initialize get exec Adobe_IllustratorA_AI3 /initialize get exec [ 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute /egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde /oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex /udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash /.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash /questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef /guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide /.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex /Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex /Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla /hungarumlaut/ogonek/caron TE %AI3_BeginEncoding: _Helvetica Helvetica [/_Helvetica/Helvetica 0 0 1 TZ %AI3_EndEncoding TrueType %%EndSetup 0 A 0 i 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 540 254 m 540 -1042 L (N) * 36 254 m 36 -1042 L (N) * 108 254 m 108 -1042 L (N) * 180 254 m 180 -1042 L (N) * 324 254 m 324 -1042 L (N) * 252 254 m 252 -1042 L (N) * 396 254 m 396 -1042 L (N) * 468 254 m 468 -1042 L (N) * 0 To 0.8552 0 0 0.8552 44.0762 -33.3903 0 Tp TP -12.2136 0 Td 0 Tr 0 O 0 g 0.8552 w /_Helvetica 9.3543 Tf 0 Ts 100 Tz 0 Tt 0 TA 0 0 5 TC 100 100 200 TW 0 0 0 Ti 1 Ta 0 Tq 0 0 Tl 0 Tc 0 Tw (IRQ 7) Tx (\r) TX 12.2136 -11.3543 Td (\r) TX -12.2136 -11.3543 Td (IRQ 1) Tx (\r) TX TO 0 To 0.8552 0 0 0.8552 222.4442 -187.1605 0 Tp TP -69.6457 0 Td 0 Tr (Figure 2: Hardware Interrupt Path) Tx (\r) TX TO 1 w -342 -143.5 m 954 -143.5 L (N) * 405.5 254 m 405.5 -1042 L (N) * 405.5 254 m 405.5 -1042 L (N) * 0 R 0 G 0.855 w 102.8471 -17.1261 m 126.8191 -40.8789 L 102.8471 -64.7412 L S u 113 -30 m 57 -30 l S U u 113 -52 m 57 -52 l S U 0 To 1 0 0 1 43.5 -39.5 0 Tp TP -1.3994 0 Td 0 Tr 0 O 0 g 1 w /_Helvetica 7.9997 Tf 4 0 Tl (\245) Tx (\r) TX T* (\245) Tx (\r) TX T* (\245) Tx (\r) TX TO 1 To 1 0 0 1 136 -17 0 Tp 1 g 0 R 0 G 0.85 w 183.5 -64.5 m 183.5 -17 L 136 -17 L 136 -64.5 L 183.5 -64.5 L b TP 23.75 -3 Td 2 Tr (\r) TX TO 1 w -342 -17 m 954 -17 L (N) * -342 -64.5 m 954 -64.5 L (N) * u 0 O 1 g 0 R 0 G 0.855 w 298.5 -64.5 m 298.5 -17 L 220 -17 L 220 -64.5 L 298.5 -64.5 L b 259.25 -40.75 m B U u 393.4015 -57.7431 m 393.4015 -20.9931 L 356.6515 -20.9931 L 356.6515 -57.7431 L 393.4015 -57.7431 L b 375.0265 -39.3681 m B U u u 320 -17 m 320 -143.5 l B U u 337 -17 m 337 -143.5 l B U U u u 0.5 w 183.5 -37 m 191 -29.5 197 -32.5 v 203 -35.5 207.5 -42 219.5 -33.5 c S U u 183 -46 m 190.5 -38.5 196.5 -41.5 v 202.5 -44.5 207 -51 219 -42.5 c S U U 0 To 0.8552 0 0 0.8552 159.0762 -33.8903 0 Tp TP -13.5107 0 Td 0 Tr 0 O 0 g 0.8552 w /_Helvetica 9.3543 Tf 0 0 Tl (VCAM) Tx (\r) TX 3.3765 -11.3543 Td (VME) Tx (\r) TX -10.1308 -11.3543 Td (Controller) Tx (\r) TX TO 0 To 0.8552 0 0 0.8552 258.5762 -37.8903 0 Tp TP -38.2017 0 Td 0 Tr (POWERchannel-2) Tx (\r) TX 25.7254 -11.3543 Td (Board) Tx (\r) TX TO u 0 To 0.8552 0 0 0.8552 375.0762 -31.8903 0 Tp TP -9.8727 0 Td 0 Tr (CPU) Tx (\r) TX -2.6035 -11.3543 Td (Board) Tx (\r) TX 9.8761 -11.3543 Td (0) Tx (\r) TX TO u 0 R 0 G 0.25 w 373.5625 -50.875 m 376.5625 -46.375 l S U U u 0 O 0 g 0.8552 w 316.655 -41.1995 m 316.655 -39.024 L 319.6515 -41.9931 L 316.655 -44.9759 L 316.655 -42.7867 L 316.655 -41.1995 L f U u 0 R 0 G 1 w 298.6515 -41.917 m 319.3485 -41.917 l S U u u 0 O 0 g 0.8552 w 353.655 -92.6995 m 353.655 -90.524 L 356.6515 -93.4931 L 353.655 -96.4759 L 353.655 -94.2867 L 353.655 -92.6995 L f U 0 R 0 G 1 w 337.6515 -93.417 m 356.3485 -93.417 l S U 0 To 0.8552 0 0 0.8552 289.5762 -100.8903 0 Tp TP -30.9244 0 Td 0 Tr 0 O 0 g 0.8552 w (POWERpath-2) Tx (\r) TX 22.8662 -11.3543 Td (Bus) Tx (\r) TX TO 0 To 1 0 0 1 374.5 -65 0 Tp TP -1.3994 0 Td 0 Tr 1 w /_Helvetica 7.9997 Tf 4 0 Tl (\245) Tx (\r) TX T* (\245) Tx (\r) TX T* (\245) Tx (\r) TX TO u u 0.8552 w 353.655 -34.1995 m 353.655 -32.024 L 356.6515 -34.9931 L 353.655 -37.9759 L 353.655 -35.7867 L 353.655 -34.1995 L f U 0 R 0 G 1 w 337.6515 -34.917 m 356.3485 -34.917 l S U u 0 O 1 g 0.855 w 393.4015 -110.2431 m 393.4015 -73.4931 L 356.6515 -73.4931 L 356.6515 -110.2431 L 393.4015 -110.2431 L b 375.0265 -91.8681 m B U 0 To 0.8552 0 0 0.8552 376.5762 -85.3903 0 Tp TP -9.8727 0 Td 0 Tr 0 g 0.8552 w /_Helvetica 9.3543 Tf 0 0 Tl (CPU) Tx (\r) TX -2.6035 -11.3543 Td (Board) Tx (\r) TX 9.8761 -11.3543 Td (n) Tx (\r) TX TO %%PageTrailer gsave annotatepage grestore showpage %%Trailer Adobe_IllustratorA_AI3 /terminate get exec Adobe_typography_AI3 /terminate get exec Adobe_customcolor /terminate get exec Adobe_cshow /terminate get exec Adobe_cmykcolor /terminate get exec Adobe_packedarray /terminate get exec %%EOF %%EndDocument FMENDEPSF 72 89.3 558 687.33 C 0 0 612 792 C 197.22 255.89 382.23 275.89 R 7 X 0 K V FMENDPAGE %%EndPage: "7" 8 %%Page: "8" 8 612 792 0 FMBEGINPAGE 54 750.68 540 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (System Interrupt Response) 189 739.85 T 54 726.98 540 726.98 2 L 0.25 H N 54 75.33 540 75.33 2 L 2 Z N 0 10 Q (8) 54 60.96 T 0 9 Q ( of) 59.56 60.96 T 0 10 Q ( 33) 70.54 60.96 T 0 9 Q (REACT In IRIX V) 189 60.96 T (.5 T) 258.09 60.96 T (echnical Report) 272.91 60.96 T 1 10 Q (W) 189 680.66 T (orst case interrupt propagation time can be reduced signi\336cantly by not supporting) 197.63 680.66 T (graphics or HIPPI interfaces with the same POWERchannel-2 interface used for VME.) 189 668.66 T -0.36 (Upon receiving a VME interrupt at a CPU, the OS\325) 189 644.66 P -0.36 (s VME Kernel Driver will read status) 390.11 644.66 P -0.37 (registers to identify the interrupting device\050s\051 and clear the interrupt. This information is) 189 632.66 P (used to select which device-speci\336c interrupt handler will execute. Interrupts are not) 189 620.66 T (cleared until all devices requesting service at that level have been read.) 189 608.66 T -0.11 (In order to minimize the time spent handling interrupts on the VME bus, it is preferable) 189 584.66 P (to connect only a single device to each VME interrupt line.) 189 572.66 T 0 9 Q (2.2.2) 160.01 549.33 T (Software Interrupt Latency) 189 549.33 T 1 10 Q (Software interrupt latency is the interval between the instant when the hardware inter-) 189 536.66 T (rupt signal arrives at the R4400, and the instant when the OS begins responding to the) 189 524.66 T (interrupt.) 189 512.66 T (Anytime interrupts are not masked in software, then software interrupt latency is less) 189 494.66 T (than one instruction time. The approach taken in IRIX with REACT is to enable real-) 189 482.66 T (time processors to always have interrupts enabled when a real-time interrupt can occur) 189 470.66 T (,) 534.99 470.66 T (so that software latency is less than one instruction time. The implications of this are) 189 458.66 T (covered in the following sections, which describe the situations in which interrupts are) 189 446.66 T (masked.) 189 434.66 T 0 9 Q (2.2.3) 160.01 411.33 T (Potential Sources Of Software Interrupt Latency) 189 411.33 T 1 10 Q (The two situations in which interrupts are masked are:) 189 398.66 T 0 9 Q (1.) 189 380.66 T 1 10 Q (When a higher priority interrupt handler is executing.) 202.74 380.66 T 0 9 Q (2.) 189 365.66 T 1 10 Q (When critical regions of kernel code are executing.) 202.74 365.66 T (IRIX with REACT enable users to prevent higher priority interrupts from introducing) 189 341.66 T (latency by directing them away from real-time processors. Critical regions of kernel) 189 329.66 T (code are avoided or carefully managed. The following sections examine these two situ-) 189 317.66 T (ations in detail.) 189 305.66 T 0 9 Q (2.2.3.1) 152.52 282.33 T (Interrupt Handlers) 189 282.33 T 1 10 Q -0.06 (While an interrupt handler is executing, it masks interrupts at an equal or lower priority) 189 269.66 P -0.15 (from being serviced. Furthermore, all pending interrupts that are equal to or higher than) 189 257.66 P (the priority of a new interrupt must complete execution before the new interrupt is ser-) 189 245.66 T (viced. Interrupt handlers run only on the processor to which the interrupt is directed.) 189 233.66 T -0.01 (Once non-real-time interrupts are directed away from real-time processors as described) 189 221.66 P (in Section 3, they will never introduce latency) 189 209.66 T (.) 372.67 209.66 T 0 9 Q (2.2.3.2) 152.52 186.33 T (Critical Kernel Regions) 189 186.33 T 1 10 Q -0.1 (IRIX is a fully symmetric multiprocessor OS that allows multiple processors to execute) 189 173.66 P (in the kernel simultaneously) 189 161.66 T (. Certain critical sections of kernel code require exclusive) 301.34 161.66 T (access to shared resources. Spin locks are used to arbitrate which processor has exclu-) 189 149.66 T (sive access to the shared resources. Once a processor acquires a spin lock and enters a) 189 137.66 T -0.01 (critical section of kernel code, it raises its interrupt level. New interrupts that are below) 189 125.66 P (the processor) 189 113.66 T (\325) 242.38 113.66 T (s interrupt level will not be serviced until the critical section of kernel) 245.16 113.66 T (code is complete and the processor) 189 101.66 T (\325) 328.98 101.66 T (s interrupt level is lowered.) 331.76 101.66 T FMENDPAGE %%EndPage: "8" 9 %%Page: "9" 9 612 792 0 FMBEGINPAGE 72 750.68 558 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (System Interrupt Response) 207 739.85 T 72 726.98 558 726.98 2 L 0.25 H N 72 75.33 558 75.33 2 L 2 Z N (REACT In IRIX V) 207 60.96 T (.5 T) 276.09 60.96 T (echnical Report) 290.91 60.96 T 0 10 Q (9) 527.85 60.96 T 0 9 Q ( of) 533.41 60.96 T 0 10 Q (33) 546.89 60.96 T 1 F (Where possible, real-time processes should avoid making system calls during time-crit-) 207 680.66 T (ical regions. Instead, forking processes, allocating memory) 207 668.66 T (, etc. should be done as part) 442.01 668.66 T -0.18 (of an initialization routine. T) 207 656.66 P -0.18 (ypically) 320.79 656.66 P -0.18 (, the only types of kernel activity that must be done) 352.34 656.66 P (during a time-critical region are process synchronization and context switches.) 207 644.66 T 0 F (2.3) 184.11 614.66 T (Software Interrupt Response T) 207 614.66 T (ime) 352.32 614.66 T 1 F (The software interrupt response time is the interval between the time the OS begins) 207 598.66 T (responding to an interrupt and the time that a user level process begins executing. Fig-) 207 586.66 T (ure 3 shows the sequence of operations that are included in the software interrupt) 207 574.66 T (response time. These are described below:) 207 562.66 T 4 11 Q (\245) 207 544.66 T 2 10 Q (Mode switch.) 220.74 544.66 T 1 F ( A mode switch occurs whenever a processor enters or leaves the ker-) 277.37 544.66 T (nel. It involves saving / restoring basic resources such as the integer registers and) 220.74 532.66 T (graphics registers \050if any\051. When entering the kernel, it also includes steps to deter-) 220.74 520.66 T (mine why the kernel was entered.) 220.74 508.66 T 4 11 Q (\245) 207 493.66 T 2 10 Q (Interrupt handler) 220.74 493.66 T (.) 296.17 493.66 T 1 F ( This is device-speci\336c code that always runs in kernel mode on) 298.67 493.66 T (the processor to which an interrupt is directed. Users must provide an interrupt han-) 220.74 481.66 T (dler for any device they add to the system that generates interrupts. T) 220.74 469.66 T (ypically) 496.78 469.66 T (, an) 528.34 469.66 T (interrupt handler will unblock a process or send a signal to alert a process that the) 220.74 457.66 T (interrupt has occurred.) 220.74 445.66 T 4 11 Q (\245) 207 430.66 T 2 10 Q -0.1 (Dispatch cycle.) 220.74 430.66 P 1 F -0.1 ( During the dispatch cycle, the scheduler determines which user pro-) 284.49 430.66 P (cess should run next. A dispatch cycle will be followed either by a context switch) 220.74 418.66 T -0.35 (and a mode switch, or by only a mode switch, depending on the circumstances. If the) 220.74 406.66 P -0.14 (next user process to be run is not the same user process that was previously running,) 220.74 394.66 P (the scheduler initiates a context switch.) 220.74 382.66 T (If the processor was in the kernel idle loop at the time the interrupt occurred, a con-) 220.74 367.66 T (text switch will not be required if the next process to be run was also running just) 220.74 355.66 T (before the processor entered the idle loop.) 220.74 343.66 T 4 11 Q (\245) 207 328.66 T 2 10 Q (Context switch.) 220.74 328.66 T 1 F ( During a context switch, the kernel saves the context of one user) 286.81 328.66 T (process and restores the context of another user process.) 220.74 316.66 T (Figure 3: Components of Software Interrupt Response T) 207 108.68 T (ime) 432.34 108.68 T 72 89.3 558 687.33 C 100.01 129.34 558 289.33 C 0 34 -169 480 -21 450 153 109.01 136.33 FMBEGINEPSF %%BeginDocument: %!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(TM) 3.2 %%For: (Frank X. Doyle) (Dangerous Ideas Group) %%Title: (Fig. 3 Chart) %%CreationDate: (1/20/94) (4:40 PM) %%BoundingBox: 34 -169 480 -21 %%DocumentProcessColors: Black %%DocumentFonts: Helvetica %%DocumentSuppliedResources: procset Adobe_packedarray 2.0 0 %%+ procset Adobe_cmykcolor 1.1 0 %%+ procset Adobe_cshow 1.1 0 %%+ procset Adobe_customcolor 1.0 0 %%+ procset Adobe_typography_AI3 1.0 1 %%+ procset Adobe_IllustratorA_AI3 1.0 1 %AI3_ColorUsage: Black&White %AI3_TemplateBox: 306 -394 306 -394 %AI3_TileBox: 18 -782 594 -6 %AI3_DocumentPreview: Macintosh_Pic %%EndComments %%BeginProlog %%BeginResource: procset Adobe_packedarray 2.0 0 %%Title: (Packed Array Operators) %%Version: 2.0 %%CreationDate: (8/2/90) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) userdict /Adobe_packedarray 5 dict dup begin put /initialize % - initialize - { /packedarray where { pop } { Adobe_packedarray begin Adobe_packedarray { dup xcheck { bind } if userdict 3 1 roll put } forall end } ifelse } def /terminate % - terminate - { } def /packedarray % arguments count packedarray array { array astore readonly } def /setpacking % boolean setpacking - { pop } def /currentpacking % - setpacking boolean { false } def currentdict readonly pop end %%EndResource Adobe_packedarray /initialize get exec %%BeginResource: procset Adobe_cmykcolor 1.1 0 %%Title: (CMYK Color Operators) %%Version: 1.1 %%CreationDate: (1/23/89) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_cmykcolor 4 dict dup begin put /initialize % - initialize - { /setcmykcolor where { pop } { userdict /Adobe_cmykcolor_vars 2 dict dup begin put /_setrgbcolor /setrgbcolor load def /_currentrgbcolor /currentrgbcolor load def Adobe_cmykcolor begin Adobe_cmykcolor { dup xcheck { bind } if pop pop } forall end end Adobe_cmykcolor begin } ifelse } def /terminate % - terminate - { currentdict Adobe_cmykcolor eq { end } if } def /setcmykcolor % cyan magenta yellow black setcmykcolor - { 1 sub 4 1 roll 3 { 3 index add neg dup 0 lt { pop 0 } if 3 1 roll } repeat Adobe_cmykcolor_vars /_setrgbcolor get exec pop } def /currentcmykcolor % - currentcmykcolor cyan magenta yellow black { Adobe_cmykcolor_vars /_currentrgbcolor get exec 3 { 1 sub neg 3 1 roll } repeat 0 } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_cshow 1.1 0 %%Title: (cshow Operator) %%Version: 1.1 %%CreationDate: (1/23/89) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_cshow 3 dict dup begin put /initialize % - initialize - { /cshow where { pop } { userdict /Adobe_cshow_vars 1 dict dup begin put /_cshow % - _cshow proc {} def Adobe_cshow begin Adobe_cshow { dup xcheck { bind } if userdict 3 1 roll put } forall end end } ifelse } def /terminate % - terminate - { } def /cshow % proc string cshow - { exch Adobe_cshow_vars exch /_cshow exch put { 0 0 Adobe_cshow_vars /_cshow get exec } forall } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_customcolor 1.0 0 %%Title: (Custom Color Operators) %%Version: 1.0 %%CreationDate: (5/9/88) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_customcolor 5 dict dup begin put /initialize % - initialize - { /setcustomcolor where { pop } { Adobe_customcolor begin Adobe_customcolor { dup xcheck { bind } if pop pop } forall end Adobe_customcolor begin } ifelse } def /terminate % - terminate - { currentdict Adobe_customcolor eq { end } if } def /findcmykcustomcolor % cyan magenta yellow black name findcmykcustomcolor object { 5 packedarray } def /setcustomcolor % object tint setcustomcolor - { exch aload pop pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } def /setoverprint % boolean setoverprint - { pop } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_typography_AI3 1.1 0 %%Title: (Typography Operators) %%Version: 1.0 %%CreationDate:(5/31/90) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_typography_AI3 47 dict dup begin put /initialize % - initialize - { /TZ where { pop } { Adobe_typography_AI3 begin Adobe_typography_AI3 { dup xcheck { bind } if pop pop } forall end Adobe_typography_AI3 begin } ifelse } def /terminate % - terminate - { currentdict Adobe_typography_AI3 eq { end } if } def % [ number value stream [ array for encoding modification ] modifyEncoding ==> [ modified array ] /modifyEncoding { /_tempEncode exch ddef % pointer for sequential encodings /_pntr 0 ddef { % get bottom object counttomark -1 roll % is it a mark ? dup type dup /marktype eq { % exit pop pop exit } { % ... object ... type .... % insert if a nametype /nametype eq { % insert the name at _pntr and increment pointer _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll put } { % reset _pntr if it's a number /_pntr exch ddef } ifelse } ifelse } loop % return the modified encoding _tempEncode } def /TE % Set std platform encoding % (encoding pairs) TE - { StandardEncoding 256 array copy modifyEncoding /_nativeEncoding exch def } def % re-define font % expected arguments % for 'normal fonts : % [ /_Helvetica-Bold/Helvetica-Bold direction fontScript defaultEncoding TZ % % for cartographic, pictographic, and expert fonts : % [ ... number value stream ... /_Symbol/Symbol % direction fontScript defaultEncoding TZ % for blended fonts w/ default encoding : % [ /_AdobeSans_20ULig1XCond-Bold/AdobeSans % direction fontScript defaultEncoding [ w0 w1 ... wn ] TZ % for blended fonts w/ special encoding : % [ ... number value stream ... /_AdobeSans_20ULig1XCond/AdobeSans % direction fontScript defaultEncoding [ w0 w1 ... wn ] TZ /TZ { % set weight vector (if present) dup type /arraytype eq {/_wv exch def} {/_wv 0 def} ifelse % platform dependent coding flag /_useNativeEncoding exch def % pop fontScript & direction pop pop % create a new dictionary with length % equal to original dictionary length + 2 % copy all the key/value pairs except FID % call makeblended font with the weight values if _wv is an array findfont _wv type /arraytype eq {_wv makeblendedfont} if dup length 2 add dict begin % copy all the values but the FID % into the new dictionary mark exch { 1 index /FID ne { def } if cleartomark mark } forall % discard last mark pop % define FontName /FontName exch def % if no re-encoding stream is present % then if the base encoding vector of the font % is the same as StandardEncoding % and the use platform encoding flag is true % then install AI platform encoding % else leave the base encoding in effect counttomark 0 eq { 1 _useNativeEncoding eq { /Encoding _nativeEncoding def } if % clean up cleartomark } { % custom encoding to be done % start off with a copy of the font's standard encoding /Encoding load 256 array copy modifyEncoding /Encoding exch def } ifelse FontName currentdict end % register the new font definefont pop } def % text painting operators /tr % string tr ax ay string { _ax _ay 3 2 roll } def /trj % string trj cx cy fillchar ax ay string { _cx _cy _sp _ax _ay 6 5 roll } def /a0 { /Tx % text % textString Tx - { dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss } ddef /Tj % justified text % textString Tj - { dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss } ddef } def /a1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll gsave dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll gsave dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss grestore 3 1 roll moveto tr sp } ddef } def /e0 { /Tx % text % textString Tx - { tr _psf } ddef /Tj % justified text % textString Tj - { trj _pjsf } ddef } def /e1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll gsave tr _psf grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll gsave trj _pjsf grestore 3 1 roll moveto tr sp } ddef } def /i0 { /Tx % text % textString Tx - { tr sp } ddef /Tj % justified text % textString Tj - { trj jsp } ddef } def /i1 { W N } def /o0 { /Tx % text % textString Tx - { tr sw rmoveto } ddef /Tj % justified text % textString Tj - { trj swj rmoveto } ddef } def /r0 { /Tx % text % textString Tx - { tr _ctm _pss } ddef /Tj % justified text % textString Tj - { trj _ctm _pjss } ddef } def /r1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll currentpoint gsave newpath moveto tr _ctm _pss grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll currentpoint gsave newpath moveto trj _ctm _pjss grestore 3 1 roll moveto tr sp } ddef } def % font operators % Binding /To % begin text % bindType To - { pop _ctm currentmatrix pop } def /TO % end text % TO - { Te _ctm setmatrix newpath } def % Text paths /Tp % begin text path % a b c d tx ty startPt Tp - { pop _tm astore pop _ctm setmatrix _tDict begin /W {} def /h {} def } def /TP % end text path % TP - { end iTm 0 0 moveto } def % Render mode & matrix operators /Tr % begin render % render Tr - { _render 3 le {currentpoint newpath moveto} if dup 8 eq {pop 0} {dup 9 eq {pop 1} if} ifelse dup /_render exch ddef _renderStart exch get load exec } def /iTm % internal set text matrix % - iTm - (uses _tm as implicit argument) { _ctm setmatrix _tm concat 0 _rise translate _hs 1 scale } def /Tm % set text matrix % a b c d tx ty Tm - { _tm astore pop iTm 0 0 moveto } def /Td % translate text matrix % tx ty Td - { _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto } def /Te % end render % - Te - { _render -1 eq {} {_renderEnd _render get dup null ne {load exec} {pop} ifelse} ifelse /_render -1 ddef } def % Attributes /Ta % set alignment % alignment Ta - { pop } def /Tf % set font name and size % fontname size Tf - { dup 1000 div /_fScl exch ddef exch findfont exch scalefont setfont } def /Tl % set leading % leading paragraphLeading Tl - { pop 0 exch _leading astore pop } def /Tt % set user tracking % userTracking Tt - { pop } def /TW % set word spacing % minSpace optSpace maxSpace TW - { 3 npop } def /Tw % set computed word spacing % wordSpace Tw { /_cx exch ddef } def /TC % set character spacing % minSpace optSpace maxSpace TC - { 3 npop } def /Tc % set computed char spacing % charSpace Tc - { /_ax exch ddef } def /Ts % set super/subscripting (rise) % rise Ts - { /_rise exch ddef currentpoint iTm moveto } def /Ti % set indentation % firstStartIndent otherStartIndent stopIndent Ti - { 3 npop } def /Tz % set horizontal scaling % scalePercent Tz - { 100 div /_hs exch ddef iTm } def /TA % set pairwise kerning % autoKern TA - % autoKern = 0 -> no pair kerning % = 1 -> automatic pair kerning { pop } def /Tq % set hanging quotes % hangingQuotes Tq - % hangingQuotes = 0 -> no hanging quotes % = 1 -> hanging quotes { pop } def % Text Bodies /TX {pop} def %/Tx % non-justified text % textString Tx - %/Tj % justified text % textString Tj - /Tk % kern % autoKern kernValue Tk - % autoKern = 0 -> manual kern, = 1 -> auto kern % kernValue = kern value in em/1000 space { exch pop _fScl mul neg 0 rmoveto } def /TK % non-printing kern % autoKern kernValue TK - { 2 npop } def /T* % carriage return & line feed % - T* - { _leading aload pop neg Td } def /T*- % carriage return & negative line feed % - T*- - { _leading aload pop Td } def /T- % print a discretionary hyphen % - T- - { _hyphen Tx } def /T+ % discretionary hyphen hyphen % - T+ - {} def /TR % reset pattern matrix % a b c d tx ty TR - { _ctm currentmatrix pop _tm astore pop iTm 0 0 moveto } def /TS % special chars % textString justified TS - { 0 eq {Tx} {Tj} ifelse } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_IllustratorA_AI3 1.0 2 %%Title: (Adobe Illustrator (R) Version 3.0 Abbreviated Prolog) %%Version: 1.0 %%CreationDate: (7/22/89) () %%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_IllustratorA_AI3 61 dict dup begin put % initialization /initialize % - initialize - { % 47 vars, but leave slack of 10 entries for custom Postscript fragments userdict /Adobe_IllustratorA_AI3_vars 57 dict dup begin put % paint operands /_lp /none def /_pf {} def /_ps {} def /_psf {} def /_pss {} def /_pjsf {} def /_pjss {} def /_pola 0 def /_doClip 0 def % paint operators /cf currentflat def % - cf flatness % typography operands /_tm matrix def /_renderStart [/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0] def /_renderEnd [null null null null /i1 /i1 /i1 /i1] def /_render -1 def /_rise 0 def /_ax 0 def % x character spacing (_ax, _ay, _cx, _cy follows awidthshow naming convention) /_ay 0 def % y character spacing /_cx 0 def % x word spacing /_cy 0 def % y word spacing /_leading [0 0] def /_ctm matrix def /_mtx matrix def /_sp 16#020 def /_hyphen (-) def /_fScl 0 def /_cnt 0 def /_hs 1 def /_nativeEncoding 0 def /_useNativeEncoding 0 def /_tempEncode 0 def /_pntr 0 def /_tDict 2 dict def % typography operators /Tx {} def /Tj {} def % compound path operators /CRender {} def % printing /_AI3_savepage {} def % color operands /_gf null def /_cf 4 array def /_if null def /_of false def /_fc {} def /_gs null def /_cs 4 array def /_is null def /_os false def /_sc {} def /_i null def Adobe_IllustratorA_AI3 begin Adobe_IllustratorA_AI3 { dup xcheck { bind } if pop pop } forall end end Adobe_IllustratorA_AI3 begin Adobe_IllustratorA_AI3_vars begin newpath } def /terminate % - terminate - { end end } def % definition operators /_ % - _ null null def /ddef % key value ddef - { Adobe_IllustratorA_AI3_vars 3 1 roll put } def /xput % key value literal xput - { dup load dup length exch maxlength eq { dup dup load dup length 2 mul dict copy def } if load begin def end } def /npop % integer npop - { { pop } repeat } def % marking operators /sw % ax ay string sw x y { dup length exch stringwidth exch 5 -1 roll 3 index 1 sub mul add 4 1 roll 3 1 roll 1 sub mul add } def /swj % cx cy fillchar ax ay string swj x y { dup 4 1 roll dup length exch stringwidth exch 5 -1 roll 3 index 1 sub mul add 4 1 roll 3 1 roll 1 sub mul add 6 2 roll /_cnt 0 ddef {1 index eq {/_cnt _cnt 1 add ddef} if} forall pop exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop } def /ss % ax ay string matrix ss - { 4 1 roll { % matrix ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put pop gsave false charpath currentpoint 4 index setmatrix stroke grestore moveto 2 copy rmoveto } exch cshow 3 npop } def /jss % cx cy fillchar ax ay string matrix jss - { 4 1 roll { % cx cy fillchar matrix ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put gsave _sp eq { exch 6 index 6 index 6 index 5 -1 roll widthshow currentpoint } { false charpath currentpoint 4 index setmatrix stroke }ifelse grestore moveto 2 copy rmoveto } exch cshow 6 npop } def % path operators /sp % ax ay string sp - { { 2 npop (0) exch 2 copy 0 exch put pop false charpath 2 copy rmoveto } exch cshow 2 npop } def /jsp % cx cy fillchar ax ay string jsp - { { % cx cy fillchar ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put _sp eq { exch 5 index 5 index 5 index 5 -1 roll widthshow } { false charpath }ifelse 2 copy rmoveto } exch cshow 5 npop } def % path construction operators /pl % x y pl x y { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } def /setstrokeadjust where { pop true setstrokeadjust /c % x1 y1 x2 y2 x3 y3 c - { curveto } def /C /c load def /v % x2 y2 x3 y3 v - { currentpoint 6 2 roll curveto } def /V /v load def /y % x1 y1 x2 y2 y - { 2 copy curveto } def /Y /y load def /l % x y l - { lineto } def /L /l load def /m % x y m - { moveto } def } {%else /c { pl curveto } def /C /c load def /v { currentpoint 6 2 roll pl curveto } def /V /v load def /y { pl 2 copy curveto } def /Y /y load def /l { pl lineto } def /L /l load def /m { pl moveto } def }ifelse % graphic state operators /d % array phase d - { setdash } def /cf {} def % - cf flatness /i % flatness i - { dup 0 eq { pop cf } if setflat } def /j % linejoin j - { setlinejoin } def /J % linecap J - { setlinecap } def /M % miterlimit M - { setmiterlimit } def /w % linewidth w - { setlinewidth } def % path painting operators /H % - H - {} def /h % - h - { closepath } def /N % - N - { _pola 0 eq { _doClip 1 eq {clip /_doClip 0 ddef} if newpath } { /CRender {N} ddef }ifelse } def /n % - n - {N} def /F % - F - { _pola 0 eq { _doClip 1 eq { gsave _pf grestore clip newpath /_lp /none ddef _fc /_doClip 0 ddef } { _pf }ifelse } { /CRender {F} ddef }ifelse } def /f % - f - { closepath F } def /S % - S - { _pola 0 eq { _doClip 1 eq { gsave _ps grestore clip newpath /_lp /none ddef _sc /_doClip 0 ddef } { _ps }ifelse } { /CRender {S} ddef }ifelse } def /s % - s - { closepath S } def /B % - B - { _pola 0 eq { _doClip 1 eq % F clears _doClip gsave F grestore { gsave S grestore clip newpath /_lp /none ddef _sc /_doClip 0 ddef } { S }ifelse } { /CRender {B} ddef }ifelse } def /b % - b - { closepath B } def /W % - W - { /_doClip 1 ddef } def /* % - [string] * - { count 0 ne { dup type (stringtype) eq {pop} if } if _pola 0 eq {newpath} if } def % group operators /u % - u - {} def /U % - U - {} def /q % - q - { _pola 0 eq {gsave} if } def /Q % - Q - { _pola 0 eq {grestore} if } def /*u % - *u - { _pola 1 add /_pola exch ddef } def /*U % - *U - { _pola 1 sub /_pola exch ddef _pola 0 eq {CRender} if } def /D % polarized D - {pop} def /*w % - *w - {} def /*W % - *W - {} def % place operators /` % matrix llx lly urx ury string ` - { /_i save ddef 6 1 roll 4 npop concat pop userdict begin /showpage {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 0 setgray false setoverprint } def /~ % - ~ - { end _i restore } def % color operators /O % flag O - { 0 ne /_of exch ddef /_lp /none ddef } def /R % flag R - { 0 ne /_os exch ddef /_lp /none ddef } def /g % gray g - { /_gf exch ddef /_fc { _lp /fill ne { _of setoverprint _gf setgray /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /G % gray G - { /_gs exch ddef /_sc { _lp /stroke ne { _os setoverprint _gs setgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /k % cyan magenta yellow black k - { _cf astore pop /_fc { _lp /fill ne { _of setoverprint _cf aload pop setcmykcolor /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /K % cyan magenta yellow black K - { _cs astore pop /_sc { _lp /stroke ne { _os setoverprint _cs aload pop setcmykcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /x % cyan magenta yellow black name gray x - { /_gf exch ddef findcmykcustomcolor /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /X % cyan magenta yellow black name gray X - { /_gs exch ddef findcmykcustomcolor /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def % locked object operator /A % value A - { pop } def currentdict readonly pop end setpacking % annotate page operator /annotatepage { } def %%EndResource %%EndProlog %%BeginSetup %%IncludeFont: Helvetica Adobe_cmykcolor /initialize get exec Adobe_cshow /initialize get exec Adobe_customcolor /initialize get exec Adobe_typography_AI3 /initialize get exec Adobe_IllustratorA_AI3 /initialize get exec [ 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute /egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde /oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex /udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash /.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash /questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef /guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide /.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex /Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex /Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla /hungarumlaut/ogonek/caron TE %AI3_BeginEncoding: _Helvetica Helvetica [/_Helvetica/Helvetica 0 0 1 TZ %AI3_EndEncoding TrueType %%EndSetup 0 A 0 i 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 540 254 m 540 -1042 L (N) * 36 254 m 36 -1042 L (N) * 108 254 m 108 -1042 L (N) * 180 254 m 180 -1042 L (N) * 324 254 m 324 -1042 L (N) * 252 254 m 252 -1042 L (N) * 396 254 m 396 -1042 L (N) * 468 254 m 468 -1042 L (N) * 0 To 0.8552 0 0 0.8552 97.5762 -29.3903 0 Tp TP -22.3535 0 Td 0 Tr 0 O 0 g 0.8552 w /_Helvetica 9.3543 Tf 0 Ts 100 Tz 0 Tt 0 TA 0 0 5 TC 100 100 200 TW 0 0 0 Ti 1 Ta 0 Tq 0 0 Tl 0 Tc 0 Tw (OS Begins) Tx (\r) TX -2.6001 -11.3543 Td (Responding) Tx (\r) TX 0.7856 -11.3543 Td (To Interrupt) Tx (\r) TX TO 0 To 0.8552 0 0 0.8552 126.6538 -91.4008 0 Tp TP -11.6952 0 Td 0 Tr (Mode) Tx (\r) TX -2.0771 -11.3543 Td (Switch) Tx (\r) TX TO 0 To 0.8552 0 0 0.8552 190.368 -91.4008 0 Tp TP -26.2473 0 Td 0 Tr (Kernel-Level) Tx (\r) TX -8.8347 -11.3543 Td (Interrupt Handler) Tx (\r) TX -2.6001 -11.3543 Td (\(unblocks process) Tx (\r) TX 4.6783 -11.3543 Td (or sends signal\)) Tx (\r) TX TO 0 To 0.8552 0 0 0.8552 405.457 -29.3903 0 Tp TP -6.7577 0 Td 0 Tr (OS) Tx (\r) TX -14.2964 -11.3543 Td (Response) Tx (\r) TX 1.0448 -11.3543 Td (Complete) Tx (\r) TX TO 0 R 0 G 1 D 36.8552 -79.8552 m 467.0332 -79.8552 l S u 0 O 0 g 0 D 460.2919 -79.9154 m 458.8279 -77.6304 L 458.91 -77.5757 L 462.8369 -79.1355 L 464.2052 -79.4365 465.5734 -79.7376 466.9417 -80.0386 c 465.5734 -80.3396 464.2052 -80.6406 462.8369 -80.9416 c 458.91 -82.5014 L 458.8279 -82.4604 L 460.2919 -80.1617 L 460.2919 -79.9154 L f U u 0 R 0 G 1.7104 w 159.1523 -72.1582 m 159.1523 -79.8552 l 159.1523 -87.5522 l S U u 220.7285 -72.1582 m 220.7285 -79.8552 l 220.7285 -87.5522 l S U u 282.3047 -72.1582 m 282.3047 -79.8552 l 282.3047 -87.5522 l S U u 343.8809 -72.1582 m 343.8809 -79.8552 l 343.8809 -87.5522 l S U u 0 O 0 g 0.8552 w 98.3698 -65.8587 m 100.5453 -65.8587 L 97.5762 -68.8552 L 94.5934 -65.8587 L 96.7826 -65.8587 L 98.3698 -65.8587 L f U u 406.2506 -65.8587 m 408.4262 -65.8587 L 405.457 -68.8552 L 402.4742 -65.8587 L 404.6634 -65.8587 L 406.2506 -65.8587 L f U 0 To 0.8552 0 0 0.8552 251.5166 -91.4008 0 Tp TP -18.1913 0 Td 0 Tr (Dispatch) Tx (\r) TX TO 0 To 0.8552 0 0 0.8552 310.9547 -91.4008 0 Tp TP -31.1859 0 Td 0 Tr (Context Switch) Tx (\r) TX 6.4973 -11.3543 Td (\(may not be) Tx (\r) TX 5.9812 -11.3543 Td (required\)) Tx (\r) TX TO 0 To 0.8552 0 0 0.8552 373.3861 -91.4008 0 Tp TP -11.6952 0 Td 0 Tr (Mode) Tx (\r) TX -2.0771 -11.3543 Td (Switch) Tx (\r) TX TO 0 To 0.8552 0 0 0.8552 251.9442 -166.6605 0 Tp TP -123.9639 0 Td 0 Tr (Figure 3: Components of Software Interrupt Response Time) Tx (\r) TX TO 0 To 0.8552 0 0 0.8552 468.0166 -76.9008 0 Tp TP -1.6243 0 Td 0 Tr /_Helvetica 11.6929 Tf (t) Tx (\r) TX TO u 0 R 0 G 1.7104 w 97.6523 -72.1582 m 97.6523 -79.8552 l 97.6523 -87.5522 l S U u 405.3809 -72.1582 m 405.3809 -79.8552 l 405.3809 -87.5522 l S U u 1 w 97.6523 -53.1582 m 97.6523 -60.8552 l 97.6523 -68.5522 l S U u 405.3809 -52.6582 m 405.3809 -60.3552 l 405.3809 -68.0522 l S U %%PageTrailer gsave annotatepage grestore showpage %%Trailer Adobe_IllustratorA_AI3 /terminate get exec Adobe_typography_AI3 /terminate get exec Adobe_customcolor /terminate get exec Adobe_cshow /terminate get exec Adobe_cmykcolor /terminate get exec Adobe_packedarray /terminate get exec %%EOF %%EndDocument FMENDEPSF 72 89.3 558 687.33 C 0 0 612 792 C 191 100 480 121 R 7 X 0 K V FMENDPAGE %%EndPage: "9" 10 %%Page: "10" 10 612 792 0 FMBEGINPAGE 54 750.68 540 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Con\336guring For Real-T) 189 739.85 T (ime Operation) 286.7 739.85 T 54 726.98 540 726.98 2 L 0.25 H N 54 75.33 540 75.33 2 L 2 Z N 0 10 Q (10) 54 60.96 T 0 9 Q ( of) 65.11 60.96 T 0 10 Q ( 33) 76.1 60.96 T 0 9 Q (REACT In IRIX V) 189 60.96 T (.5 T) 258.09 60.96 T (echnical Report) 272.91 60.96 T 54 672.33 540 675.33 C 189 674.48 540 674.48 2 L 0.25 H 2 Z 0 X 0 K N 54 674.48 180 674.48 2 L 0 Z N 0 0 612 792 C 0 12 Q 0 X 0 K (3.0) 189 679.33 T ( Con\336guring For Real-T) 205.67 679.33 T (ime Operation) 339.39 679.33 T 1 10 Q -0.01 (The steps required to establish a set of real-time processors with deterministic response) 189 657.66 P (to interrupts are outlined below) 189 645.66 T (. A detailed description of each step is provided in the) 313.82 645.66 T (sections that follow) 189 633.66 T (.) 266.64 633.66 T 0 9 Q (1.) 189 615.66 T 1 10 Q (Direct interrupts not related to real-time processes away from real-time processors.) 202.74 615.66 T (Direct real-time interrupts to the real-time processors.) 202.74 603.66 T 0 9 Q (2.) 189 588.66 T 1 10 Q (Restrict each real-time processor so that all processes not explicitly assigned to it) 202.74 588.66 T (will be run on a non-real-time processor) 202.74 576.66 T (.) 362.63 576.66 T 0 9 Q (3.) 189 561.66 T 1 10 Q (Lock real-time processes onto real-time processors.) 202.74 561.66 T 0 9 Q (4.) 189 546.66 T 1 10 Q (Allocate and lock physical memory to all virtual addresses used by real-time pro-) 202.74 546.66 T (cesses.) 202.74 534.66 T 0 9 Q (5.) 189 519.66 T 1 10 Q -0.03 (Isolate the real-time processors from interprocessor interrupts used in a multiproces-) 202.74 519.66 P (sor system.) 202.74 507.66 T 0 9 Q (6.) 189 492.66 T 1 10 Q (Exempt real-time processors from system clock interrupts and UNIX timesharing) 202.74 492.66 T (scheduler activity) 202.74 480.66 T (.) 272.88 480.66 T (Once these steps are complete, the total response time to an interrupt directed to a real-) 189 456.66 T (time processor will be less than 200) 189 444.66 T 3 F (m) 334.74 444.66 T 1 F (s, from the time the hardware interrupt occurs) 340.5 444.66 T (until a user process begins executing.) 189 432.66 T (This timing assumes that the interrupt is initiated by a VME device, and that no other) 189 408.66 T (VME interrupts of the same level are outstanding at the time the interrupt occurs. An) 189 396.66 T (interrupt handler speci\336c to that interrupt will unblock a user process that is sleeping) 189 384.66 T (awaiting the interrupt. The guaranteed timing assumes that another user process is exe-) 189 372.66 T (cuting at the time the interrupt occurs, so a context switch is necessary) 189 360.66 T (.) 470.1 360.66 T (An additional step is required to ensure that the processes assigned to real-time proces-) 189 336.66 T -0.25 (sors execute in the desired order) 189 324.66 P -0.25 (. The user must assign a priority in the real-time band to) 316.24 324.66 P (each process. All real-time priorities \050i.e. priorities in the real-time band\051 are non-) 189 312.66 T (degrading.) 189 300.66 T (When the REACT/pro frame scheduler is used to schedule processes, step 2 - 6 listed) 189 276.66 T (above are invoked automatically) 189 264.66 T (. In this case, the only other explicit user action) 318.53 264.66 T (required to con\336gure for real-time operation is to direct interrupts properly) 189 252.66 T (.) 487.02 252.66 T 0 F (3.1) 166.11 222.66 T (Redirecting Interrupts) 189 222.66 T 1 F (Mapping of hardware interrupts to processors is controlled by system software. The) 189 206.66 T -0.13 (user has full control over the assignment of VME interrupts to processors. The user can-) 189 194.66 P (not speci\336cally control the direction of other types of interrupts to processors, but he) 189 182.66 T (can prevent the system from assigning any of these interrupts to real-time processors.) 189 170.66 T (Controlling the mapping of interrupts to processors is done by editing the \336le) 189 146.66 T 5 F (/var/sys-) 500.21 146.66 T -0.14 (gen/system) 189 134.66 P 1 F -0.14 (, then running) 232.86 134.66 P 5 F -0.14 (autocon\336g\0501M\051) 290.73 134.66 P 1 F -0.14 (or) 355.27 134.66 P 5 F -0.14 ( lboot\0501M\051) 363.6 134.66 P 1 F -0.14 (. Non-real-time interrupts should) 406.48 134.66 P (be directed away from the real-time processors \050using NOINTR directive\051, and real-) 189 122.66 T (time interrupts should be directed to real-time processor \050using IPL directive\051. VME) 189 110.66 T -0.23 (interrupts are controllable by VME interrupt level \050IRQn\051. That is, all interrupts at a par-) 189 98.66 P FMENDPAGE %%EndPage: "10" 11 %%Page: "11" 11 612 792 0 FMBEGINPAGE 72 750.68 558 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Con\336guring For Real-T) 207 739.85 T (ime Operation) 304.7 739.85 T 72 726.98 558 726.98 2 L 0.25 H N 72 75.33 558 75.33 2 L 2 Z N (REACT In IRIX V) 207 60.96 T (.5 T) 276.09 60.96 T (echnical Report) 290.91 60.96 T 0 10 Q (1) 522.84 60.96 T (1) 527.85 60.96 T 0 9 Q ( of) 533.41 60.96 T 0 10 Q (33) 546.89 60.96 T 1 F (ticular IRQ level on the VME bus will be directed to the same processor) 207 680.66 T (. In systems) 495.41 680.66 T (with multiple VME buses, the mapping of IRQ levels to processors cannot be speci\336ed) 207 668.66 T (by bus. This means, for example, that IRQ7 for all VME buses will be directed to the) 207 656.66 T (same processor) 207 644.66 T (.) 267.79 644.66 T 0 F (3.2) 184.11 614.66 T (Assigning Processes T) 207 614.66 T (o Processors) 316.24 614.66 T 1 F -0.1 (The POWERpath-2 hardware architecture is fully symmetric, meaning that there are no) 207 598.66 P (software activities which can only run on a speci\336c processor) 207 586.66 T (. If desired, processes can) 452.1 586.66 T -0.31 (be allowed to migrate freely among processors. In its default \050non-real-time\051 state, IRIX) 207 574.66 P (optimizes utilization by assigning the highest priority ready-to-run process to the \336rst) 207 562.66 T (available processor \050subject to some modi\336cation due to cache af) 207 550.66 T (\336nity\051. Other schedul-) 467.46 550.66 T (ing modes are available, however) 207 538.66 T (, enabling the user to explicitly control assignment of) 340.66 538.66 T (processes to processors.) 207 526.66 T (In a real-time environment, the user should designate one or more processors for run-) 207 502.66 T (ning real-time processes, lock real-time processes onto these processors, and restrict) 207 490.66 T (these processors from running any other processes. This can be done using shell com-) 207 478.66 T (mands, or more typically) 207 466.66 T (, using system calls.) 306.29 466.66 T -0.18 (The) 207 442.66 P 5 F -0.18 (sysmp\0502\051) 224.86 442.66 P 1 F -0.18 ( command MP_MUSTRUN speci\336es that a process must run on a speci\336c) 260.94 442.66 P -0.22 (processor) 207 430.66 P -0.22 (. Its shell command equivalent is) 244.75 430.66 P 5 F -0.22 (mpadmin\0501\051) 377.51 430.66 P 1 F -0.22 (. The locked process will always) 426.37 430.66 P (run on the speci\336ed processor) 207 418.66 T (, even when kernel code is executing on behalf of the pro-) 325.95 418.66 T (cess. An exception to this can occur with drivers which are not semaphored. If the pro-) 207 406.66 T (cess calls a non-semaphored driver that includes an interrupt handler for an interrupt) 207 394.66 T (directed to another processor) 207 382.66 T (, however) 322.34 382.66 T (, the interrupt handler will execute on the other) 361.35 382.66 T (processor) 207 370.66 T (. This temporary override of MP_MUSTRUN is transparent to the user) 244.75 370.66 T (.) 528.17 370.66 T (Threads created using) 207 346.66 T 5 F (spr) 297.2 346.66 T (oc\0502\051) 309.6 346.66 T 1 F ( will inherit their parent\325) 330.69 346.66 T (s processor assignment. In the) 428.41 346.66 T -0.36 (case where threads are created prior to calling) 207 334.66 P 5 F -0.36 (sysmp\0502\051) 390.08 334.66 P 1 F -0.36 (, each thread must be assigned to) 426.16 334.66 P (a processor individually) 207 322.66 T (.) 302.4 322.66 T -0.32 (The) 207 298.66 P 5 F -0.32 (sysmp\0502\051) 224.72 298.66 P 1 F -0.32 ( command MP_RESTRICT restricts a processor to running only processes) 260.8 298.66 P (assigned to it using) 207 286.66 T 5 F (sysmp\0502\051) 286.41 286.66 T 1 F ( MP_MUSTRUN, or its shell command equivalent,) 322.49 286.66 T 5 F -0.03 (runon\0501\051) 207 274.66 P 1 F -0.03 (. An exception to this restriction are interrupt handlers of interrupts directed to) 242.53 274.66 P (that processor) 207 262.66 T (. T) 262.24 262.66 T (o avoid having an interrupt handler run on a processor) 272.64 262.66 T (, the interrupt) 489.02 262.66 T (should be directed to a dif) 207 250.66 T (ferent processor using NOINTR. MP_RESTRICT requires) 310.91 250.66 T (superuser privileges.) 207 238.66 T 0 F (3.3) 184.11 208.66 T (Locking Processes Into Memory) 207 208.66 T 1 F (In a virtual memory system, any memory reference can potentially cause a page fault.) 207 192.66 T (The time required to bring the data being referenced from disk into physical memory) 207 180.66 T (will destroy real-time behavior) 207 168.66 T (. IRIX with REACT enables users to lock processes into) 329.97 168.66 T (memory) 207 156.66 T (, ensuring that real-time processes will never incur a page fault.) 239.66 156.66 T (IRIX with REACT provides the ability to lock / unlock a speci\336ed range of addresses) 207 132.66 T (into physical memory using) 207 120.66 T 5 F (mpin\0502\051) 320.83 120.66 T 1 F ( and) 352.47 120.66 T 5 F (munpin\0502\051) 371.9 120.66 T 1 F (. When called,) 413.54 120.66 T 5 F (mpin\0502\051) 473.76 120.66 T 1 F ( causes the) 505.41 120.66 T -0.11 (kernel to allocate physical memory to the speci\336ed address range and locks those pages) 207 108.66 P (down before returning to the user program. The call) 207 96.66 T 5 F (munpin\0502\051) 416.83 96.66 T 1 F ( undoes any previous) 458.47 96.66 T FMENDPAGE %%EndPage: "11" 12 %%Page: "12" 12 612 792 0 FMBEGINPAGE 54 750.68 540 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Con\336guring For Real-T) 189 739.85 T (ime Operation) 286.7 739.85 T 54 726.98 540 726.98 2 L 0.25 H N 54 75.33 540 75.33 2 L 2 Z N 0 10 Q (12) 54 60.96 T 0 9 Q ( of) 65.11 60.96 T 0 10 Q ( 33) 76.1 60.96 T 0 9 Q (REACT In IRIX V) 189 60.96 T (.5 T) 258.09 60.96 T (echnical Report) 272.91 60.96 T 1 10 Q (locking using) 189 680.66 T 5 F (mpin\0502\051) 245.64 680.66 T 1 F (. Shared memory segments \050see) 277.28 680.66 T 5 F (shmop\0502\051) 406.63 680.66 T 1 F (\051, shared arenas \050see) 444.38 680.66 T 5 F (usinit\0503P\051) 189 668.66 T 1 F (\051, and) 228.98 668.66 T 5 F (mmap\0502\051) 254.23 668.66 T 1 F ( \336les must still be individually locked using) 290.31 668.66 T 5 F (mpin\0502\051) 467.46 668.66 T 1 F (.) 499.1 668.66 T (UNIX SVR3 provided this capability in a rudimentary fashion, using) 189 644.66 T 5 F (plock\0502\051) 467.44 644.66 T 1 F (, which) 500.74 644.66 T (allows text, data, or stack segments to be locked in their entirety) 189 632.66 T (. IRIX also supports) 445.12 632.66 T 5 F -0.08 (plock\0502\051) 189 620.66 P 1 F -0.08 (, and has extended its functioning to automatically lock shared library sections.) 222.3 620.66 P (In addition, when) 189 608.66 T 5 F (plock\0502\051) 261.73 608.66 T 1 F ( is used, any growth of a locked section \050via) 295.03 608.66 T 5 F (sbrk\0502\051) 473.51 608.66 T 1 F (\051 will) 502.38 608.66 T (cause the pages to be immediately faulted in and locked down.) 189 596.66 T 0 F (3.4) 166.11 566.66 T (Processor Isolation) 189 566.66 T 0 9 Q (3.4.1) 160.01 543.33 T (Overview) 189 543.33 T 1 10 Q (The processor isolation feature of IRIX with REACT enables the user to prevent the) 189 530.66 T (kernel from sending inter) 189 518.66 T (-processor interrupts a real-time processor) 290.11 518.66 T (.) 458.31 518.66 T -0.14 (In order to maintain the integrity of the shared memory) 189 500.66 P -0.14 (, symmetric multiprocessing pro-) 407.73 500.66 P -0.13 (gramming environment, IRIX must carry on two system activities that are not visible to) 189 488.66 P (user processes. These are instruction cache \337ushes, and T) 189 476.66 T (ranslation Look-Aside Buf) 418.46 476.66 T (fer) 525.43 476.66 T -0.18 (\050TLB\051 \337ushes. Nominally) 189 464.66 P -0.18 (, at irregular intervals IRIX will generate inter) 291.55 464.66 P -0.18 (-processor inter-) 474.4 464.66 P (rupts to all processors to signal them to \337ush their TLB or instruction cache. For iso-) 189 452.66 T (lated processors, IRIX will instead set a status bit to indicate that a \337ush is pending.) 189 440.66 T (When an isolated processor enters kernel mode, the status bits are tested and any pend-) 189 428.66 T (ing \337ushes are carried out. \050A processor enters kernel mode whenever the running pro-) 189 416.66 T (cess makes a system call, or when an external interrupt occurs that is directed to that) 189 404.66 T -0.08 (processor) 189 392.66 P -0.08 (.\051 This ensures that the user) 226.75 392.66 P -0.08 (\325) 336.67 392.66 P -0.08 (s real-time process will never be preempted by an) 339.44 392.66 P (unsolicited interrupt from the kernel, and eliminates the overhead of \336elding an inter) 189 380.66 T (-) 527.17 380.66 T (processor interrupt.) 189 368.66 T -0.34 (Processor isolation is established using either the) 189 344.66 P 5 F -0.34 (sysmp\0502\051) 385.09 344.66 P 1 F -0.34 ( command MP_ISOLA) 421.17 344.66 P -0.34 (TE, or) 512.65 344.66 P (the) 189 332.66 T 5 F (mpadmin\0501\051) 203.71 332.66 T 1 F ( shell command.) 252.57 332.66 T 0 9 Q (3.4.2) 160.01 309.33 T (Activities That Override Processor Isolation) 189 309.33 T 1 10 Q -0.15 (All IRIX kernel services are available to a process running on an isolated processor) 189 296.66 P -0.15 (, but) 520.03 296.66 P (certain system calls will generate inter) 189 284.66 T (-processor interrupts that are not blocked by pro-) 342.3 284.66 T (cessor isolation. Fielding such an interrupt introduces latency which can cause non-) 189 272.66 T (deterministic behavior in processes running on the processor) 189 260.66 T (.) 430.78 260.66 T (The following system calls will generate interrupts if they are executed by a process) 189 236.66 T (running on an isolated processor) 189 224.66 T (, or by an) 318.51 224.66 T 5 F (spr) 358.76 224.66 T (oc) 371.16 224.66 T 1 F ( of such a process running on any pro-) 380.6 224.66 T (cessor) 189 212.66 T (. These system calls can be used in a real-time application without introducing) 213.43 212.66 T (non-determinism provided they are executed in an initialization routine.) 189 200.66 T 4 11 Q (\245) 189 182.66 T 5 10 Q (cachectl\0502\051) 202.74 182.66 T 1 F ( system call to mark pages cacheable or uncacheable) 247.7 182.66 T 4 11 Q (\245) 189 167.66 T 5 10 Q (fork\0502\051) 202.74 167.66 T 1 F ( system call to create a new process) 230.5 167.66 T 4 11 Q (\245) 189 152.66 T 1 10 Q (sproc\0502\051 system call to create a new share group process) 202.74 152.66 T 4 11 Q (\245) 189 137.66 T 5 10 Q (sbrk\0502\051) 202.74 137.66 T 1 F ( system call that releases memory or grows memory past a 4 MB boundary) 231.61 137.66 T 4 11 Q (\245) 189 122.66 T 5 10 Q (mpr) 202.74 122.66 T (otect\0502\051) 218.48 122.66 T 1 F ( system call to set protection on a portion of memory that is shared) 249.56 122.66 T (\050MAP_LOCAL is immune\051) 202.74 110.66 T 4 11 Q (\245) 189 95.66 T 5 10 Q (pr) 202.74 95.66 T (ctl\0502\051) 211.26 95.66 T 1 F ( system call to acquire information on the current process) 232.91 95.66 T FMENDPAGE %%EndPage: "12" 13 %%Page: "13" 13 612 792 0 FMBEGINPAGE 72 750.68 558 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Con\336guring For Real-T) 207 739.85 T (ime Operation) 304.7 739.85 T 72 726.98 558 726.98 2 L 0.25 H N 72 75.33 558 75.33 2 L 2 Z N (REACT In IRIX V) 207 60.96 T (.5 T) 276.09 60.96 T (echnical Report) 290.91 60.96 T 0 10 Q (13) 522.29 60.96 T 0 9 Q ( of) 533.41 60.96 T 0 10 Q (33) 546.89 60.96 T 1 F -0.2 (The following system calls will generate inter) 207 680.66 P -0.2 (-processor interrupts to an isolated proces-) 388.83 680.66 P (sor if they are called from any processor and passed the) 207 668.66 T 5 F (pid) 431.54 668.66 T 1 F ( of a process running on the) 444.31 668.66 T (isolated processor) 207 656.66 T (.) 278.34 656.66 T 4 11 Q (\245) 207 638.66 T 5 10 Q (pr) 220.74 638.66 T (ctl\0502\051) 229.26 638.66 T 1 F ( system call to acquire information on a process running on an isolated pro-) 250.91 638.66 T (cessor) 220.74 626.66 T 4 11 Q (\245) 207 611.66 T 1 10 Q -0.16 (a write using) 220.74 611.66 P 5 F -0.16 (pr) 274.4 611.66 P -0.16 (oc\0504\051) 282.91 611.66 P 1 F -0.16 ( to the address space of a process running on an isolated proces-) 304 611.66 P (sor) 220.74 599.66 T 0 9 Q (3.4.3) 178.01 576.33 T (Minimizing Memory Management Overhead) 207 576.33 T 1 10 Q -0.16 (A processor on which no process frees any memory page will never be required to \337ush) 207 563.66 P (its TLB, even without processor isolation. Accordingly) 207 551.66 T (, real-time processes and device) 426.77 551.66 T -0.32 (drivers should be written so that memory resources are allocated once and reused, rather) 207 539.66 P (than repeatedly allocated and freed.) 207 527.66 T 0 F (3.5) 184.11 497.66 T (Controlling Process Scheduling) 207 497.66 T 1 F -0.37 (UNIX typically implements priority aging for processes. The priority of a process that is) 207 481.66 P (CPU-bound is lowered gradually as the process runs. This ensures that lower priority) 207 469.66 T (processes can eventually run, and is desirable behavior in the environments for which) 207 457.66 T (UNIX originally was designed; i.e. interactive users typing on ASCII terminals. In a) 207 445.66 T (real-time environment, the user typically wishes to ensure that a process will run imme-) 207 433.66 T -0.14 (diately when an event occurs \050e.g. delivery of a timer signal\051. Specifying a high priority) 207 421.66 P (with the UNIX) 207 409.66 T 5 F (nice\0502\051) 269.46 409.66 T 1 F ( system call is only a partial solution; even \322niced\323 jobs age.) 297.76 409.66 T (IRIX with REACT provides \336xed-priority scheduler services which meet the require-) 207 397.66 T (ments of a real-time environment.) 207 385.66 T 0 9 Q (3.5.1) 178.01 362.33 T (Setting Process Priority) 207 362.33 T 1 10 Q (Under IRIX with REACT) 207 349.66 T (, the user can specify a \336xed priority for a process that does) 309.8 349.66 T (not decrease over time. Fixed priorities are available in three bands: above normal) 207 337.66 T -0.18 (UNIX priorities \050real-time band\051, within the same range as normal UNIX priorities, and) 207 325.66 P (below normal UNIX priorities. These bands are appropriate for real-time processes,) 207 313.66 T (general purpose processes, and lar) 207 301.66 T (ge background processes, respectively) 343.64 301.66 T (. Any process) 496.2 301.66 T (in the highest priority \050real-time\051 band will always take precedence over any process in) 207 289.66 T (either of the other two bands. No process in the lowest priority band will ever run if) 207 277.66 T (there are any processes ready to run in either of the two higher priority bands.) 207 265.66 T (W) 207 241.66 T (ithin the real-time priority band, there are 10 priority levels \05030 - 39\051. If two or more) 216.04 241.66 T -0.21 (processes are ready-to-run at the time of a scheduling event, the highest priority process) 207 229.66 P (\050lowest priority level\051 will always run. If a high priority process becomes ready to run) 207 217.66 T (while a lower priority process is running, the lower priority process will be preempted) 207 205.66 T (immediately) 207 193.66 T (.) 256.32 193.66 T -0.01 (Fixed priorities in the real-time band can be dangerous if misused. If a process with the) 207 169.66 P (highest \336xed priority enters an in\336nite loop, then all other processes will be unable to) 207 157.66 T (run on that processor) 207 145.66 T (. On a uniprocessor) 290.55 145.66 T (, a system reset is the only way to regain con-) 367.87 145.66 T -0.09 (trol. On a multiprocessor system, it is possible to kill the of) 207 133.66 P -0.09 (fending process from a shell) 442.69 133.66 P (executing on another processor) 207 121.66 T (.) 331.07 121.66 T FMENDPAGE %%EndPage: "13" 14 %%Page: "14" 14 612 792 0 FMBEGINPAGE 54 750.68 540 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Con\336guring For Real-T) 189 739.85 T (ime Operation) 286.7 739.85 T 54 726.98 540 726.98 2 L 0.25 H N 54 75.33 540 75.33 2 L 2 Z N 0 10 Q (14) 54 60.96 T 0 9 Q ( of) 65.11 60.96 T 0 10 Q ( 33) 76.1 60.96 T 0 9 Q (REACT In IRIX V) 189 60.96 T (.5 T) 258.09 60.96 T (echnical Report) 272.91 60.96 T 1 10 Q (Fixed process priorities are established using the) 189 680.66 T 5 F (schedctl\0502\051) 385.81 680.66 T 1 F ( system call. The real-time) 430.22 680.66 T (priorities range between 30 and 39, inclusive. The calling process must have superuser) 189 668.66 T (privileges to set a \336xed priority above normal UNIX priorities.) 189 656.66 T (If a real-time process is waiting for a lock that is held by a lower priority process, the) 189 632.66 T (priority of the process that holds the lock will be temporarily raised to that of the real-) 189 620.66 T (time process. This avoids a form of priority inversion that would otherwise occur if the) 189 608.66 T (low priority process had to wait for a resource held by a process whose priority was) 189 596.66 T (above its own, but below that of the real-time process.) 189 584.66 T 0 9 Q (3.5.2) 160.01 561.33 T (Disabling The UNIX Scheduler \050Shutting Off Clock Interrupts\051) 189 561.33 T 1 10 Q (When con\336gured as a timesharing system, the UNIX scheduler daemon wakes up on) 189 548.66 T (each processor at the beginning of each time slice and determines which process will) 189 536.66 T -0.16 (run on that processor during that time slice. The scheduler updates the accounting statis-) 189 524.66 P (tics for the running process, decrements its time slice, and performs some other time-) 189 512.66 T (sharing accounting.) 189 500.66 T (The UNIX scheduler daemon is awakened by a system clock interrupt sourced by a) 189 476.66 T -0.34 (hardware timer) 189 464.66 P -0.34 (. Each processor has its own hardware timer) 248.88 464.66 P -0.34 (. The system clock timers are) 422.44 464.66 P (clocked by the processor) 189 452.66 T (\325) 288.45 452.66 T (s clock signal, and generate an interrupt every 10 ms. The) 291.23 452.66 T -0.22 (default time slice is 30 ms, which means that the scheduler is run every third clock inter-) 189 440.66 P (rupt. The time slice is a tunable parameter) 189 428.66 T (.) 356.66 428.66 T -0.12 (In a real-time environment, this periodic system activity may be unnecessary) 189 404.66 P -0.12 (, and repre-) 494.45 404.66 P (sent undesirable overhead. IRIX with REACT enables the user to shut of) 189 392.66 T (f periodic) 480.28 392.66 T -0.25 (scheduler activity on an isolated processor using) 189 380.66 P 5 F -0.25 (sysmp\0502\051) 383.54 380.66 P 1 F -0.25 (. \050See the previous section for) 419.62 380.66 P -0.13 (a description of processor isolation.\051 The clock must remain enabled on at least one pro-) 189 368.66 P (cessor in a multiprocessor system. By default, the clock on processor 0 must remain) 189 356.66 T (enabled. This can be modi\336ed using the MP_F) 189 344.66 T (ASTCLOCK command in the) 374.82 344.66 T 5 F (sysmp\0502\051) 496.97 344.66 T 1 F (system call.) 189 332.66 T (Shutting of) 189 308.66 T (f the clock on a processor suspends the action of the scheduler daemon.) 233.53 308.66 T -0.2 (Under these circumstances, a running user process will continue to run without interrup-) 189 296.66 P (tion until it chooses to yield. The process accounting information usually collected by) 189 284.66 T (the scheduler will be lost while the clock inteprocessor interrupt is shut of) 189 272.66 T (f.) 484.18 272.66 T (Scheduler services remain available on an as-needed basis on a processor that does not) 189 248.66 T (receive clock interrupts. That is, if a process blocks or sleeps waiting for completion of) 189 236.66 T -0.29 (an I/O system call, the scheduler will be invoked to run the next-highest priority process) 189 224.66 P (that is assigned to that processor \050if any\051.) 189 212.66 T (If the clock interrupt is not shut of) 189 188.66 T (f on a real-time processor) 325.67 188.66 T (, that processor will incur a) 427.41 188.66 T -0.09 (clock interrupt once per time slice. The clock interrupt handler typically requires 200) 189 176.66 P 3 F -0.09 (m) 527.95 176.66 P 1 F -0.09 (s) 533.7 176.66 P (to execute, and user interrupts to the processor are disabled during this time.) 189 164.66 T (Unless the REACT/pro frame scheduler is being used \050see next section\051, processors on) 189 140.66 T -0.33 (which the clock has been disabled will continue to receive an occasional clock interrupt.) 189 128.66 P (This is because it is not possible to completely disable clock interrupts in hardware.) 189 116.66 T (Instead, when a processor) 189 104.66 T (\325) 292.61 104.66 T (s clock interrupt is disabled, the timer is programmed to a) 295.39 104.66 T (lar) 189 92.66 T (ge value. It continues to generate an interrupt every F0000000 \050Hex\051 ticks. The dura-) 199.36 92.66 T FMENDPAGE %%EndPage: "14" 15 %%Page: "15" 15 612 792 0 FMBEGINPAGE 72 750.68 558 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Con\336guring For Real-T) 207 739.85 T (ime Operation) 304.7 739.85 T 72 726.98 558 726.98 2 L 0.25 H N 72 75.33 558 75.33 2 L 2 Z N (REACT In IRIX V) 207 60.96 T (.5 T) 276.09 60.96 T (echnical Report) 290.91 60.96 T 0 10 Q (15) 522.29 60.96 T 0 9 Q ( of) 533.41 60.96 T 0 10 Q (33) 546.89 60.96 T 1 F (tion of this period varies with the speed of the processor being used, and can be calcu-) 207 680.66 T (lated by multiplying F0000000 \050Hex\051 times the clock period of the processor) 207 668.66 T (. The) 513.75 668.66 T (overhead of processing these occasional interrupts is minimized by the clock interrupt) 207 656.66 T (handler) 207 644.66 T (. Upon being entered, the interrupt handler will determine that clock interrupts) 236.42 644.66 T -0.05 (are disabled, and return immediately) 207 632.66 P -0.05 (. Handling an interrupt in this way requires the pro-) 352.45 632.66 P (cessor to execute in kernel mode for approximately 20 microseconds.) 207 620.66 T (When in use, the REACT/pro frame scheduler periodically resets the clock interrupt) 207 596.66 T (timer and thus prevents a clock interrupt from ever occuring.) 207 584.66 T 0 9 Q (3.5.3) 178.01 561.33 T (Deadline Scheduling) 207 561.33 T 1 10 Q (IRIX with REACT includes a deadline scheduling mode which guarantees that a pro-) 207 548.66 T (cess will be given an opportunity to execute for a speci\336c amount of time within a spe-) 207 536.66 T -0.29 (ci\336c, recurring period. This capability is useful for applications such as data acquisition,) 207 524.66 P -0.21 (which require a \336xed amount of processing on successive frames of data. Media servers) 207 512.66 P (which must source frames of data at \336xed intervals also require this capability) 207 500.66 T (.) 518.35 500.66 T -0.37 (Deadline scheduling is enabled using the system call) 207 476.66 P 5 F -0.37 (schedctl\0502\051) 417.2 476.66 P 1 F -0.37 (, which permits the user) 461.61 476.66 P (to set the length of the recurring period, as well as the run time to be allocated to the) 207 464.66 T (process in each period. The process is guaranteed to receive its allotment during the) 207 452.66 T (period, though exactly when is not speci\336ed.) 207 440.66 T 0 9 Q (3.5.3.1) 170.52 417.33 T (Frame Scheduler) 207 417.33 T 1 10 Q (REACT/pro, available as a layered software product for IRIX 5.3 and subsequent) 207 404.66 T (releases, includes a frame scheduler that is useful in real-time simulation applications.) 207 392.66 T (The frame scheduler is a kernel module that cyclically schedules processes at intervals) 207 380.66 T (de\336ned by a regularly-occurring interrupt. When enabled on a processor) 207 368.66 T (, the frame) 495.25 368.66 T (scheduler replaces all other IRIX scheduling policies on that processor) 207 356.66 T (. Frame schedul-) 488.73 356.66 T (ers can be enabled on all but one processor in a multiprocessor system; i.e. all but the) 207 344.66 T (system processor) 207 332.66 T (. Each frame scheduler manages execution of processes only on its) 275.01 332.66 T (own processor) 207 320.66 T (, but multiple frame schedulers can be synchronized to enable frames on) 264.61 320.66 T (separate processors in a system to be synchronized.) 207 308.66 T (The frame scheduler uses an incoming interrupt to partition time into a sequence of) 207 284.66 T (minor frames. The interrupt source can be the internal timer \050see Section 4.1\051, an exter-) 207 272.66 T (nal interrupt \050see Section 4.3\051, an interrupt from one of the VME buses, the vertical) 207 260.66 T -0.01 (retrace interrupt in an Onyx graphics system, or an interrupt sent from another user pro-) 207 248.66 P (cess. A user) 207 236.66 T (-de\336ned number of minor frames comprise a lar) 254.81 236.66 T (ger recurring periodic time) 446.43 236.66 T (slice, called a major frame. This arrangement is shown in Figure 4.) 207 224.66 T (Each minor frame is associated with a queue of processes to be executed within that) 207 200.66 T -0.17 (interval of time. The list of processes in the queue is maintained in priority order) 207 188.66 P -0.17 (. At the) 526.32 188.66 P (beginning of each minor frame, control is passed to the \336rst process in the queue. The) 207 176.66 T (remaining processes in the queue are executed when the previous process yields the) 207 164.66 T (CPU. Processes are typically enqueued as part of the set-up of the frame scheduler) 207 152.66 T (, but) 536.34 152.66 T (they also can be added or deleted from a queue dynamically after the frame scheduler) 207 140.66 T (has been started.) 207 128.66 T -0.06 (The minor / major frame construct enables multiple, related frame rates to be created in) 207 104.66 P (the following way) 207 92.66 T (. Specify a timer interrupt to start minor frames at the highest desired) 279.08 92.66 T FMENDPAGE %%EndPage: "15" 16 %%Page: "16" 16 612 792 0 FMBEGINPAGE 54 750.68 540 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Con\336guring For Real-T) 189 739.85 T (ime Operation) 286.7 739.85 T 54 726.98 540 726.98 2 L 0.25 H N 54 75.33 540 75.33 2 L 2 Z N 0 10 Q (16) 54 60.96 T 0 9 Q ( of) 65.11 60.96 T 0 10 Q ( 33) 76.1 60.96 T 0 9 Q (REACT In IRIX V) 189 60.96 T (.5 T) 258.09 60.96 T (echnical Report) 272.91 60.96 T 1 10 Q (rate, and specify the number of minor frames per major frame equal to the ratio of the) 189 680.66 T -0.35 (lowest and highest desired rates. Enqueue processes to be run at the highest rate in every) 189 668.66 P -0.32 (minor frame, and enqueue processes to be run at the lowest rate in only one minor frame) 189 656.66 P (per major frame. Enqueue processes to be run at the middle rate in every other minor) 189 644.66 T (frame, and so on.) 189 632.66 T -0.34 (Each enqueued process is assigned a) 189 338.35 P 5 F -0.34 (discipline) 335.76 338.35 P 1 F -0.34 (, which speci\336es the process\325 preemption) 374.63 338.35 P (behavior within the queue. Nominally) 189 326.35 T (, a process that has not been found ready to run) 340.2 326.35 T -0.07 (throughout the duration of a minor frame will generate an underrun error) 189 314.35 P -0.07 (, and a process) 478.96 314.35 P (that has not yielded the CPU by the end of its minor frame will generate an overrun) 189 302.35 T (error) 189 290.35 T (. Errors result in a signal being sent to the group of processes participating in the) 207.87 290.35 T (frame scheduler setup. These errors can be masked by specifying the) 189 278.35 T 5 F (r) 466.55 278.35 T (eal-time under-) 470.07 278.35 T (runnable) 189 266.35 T 1 F ( or) 225.09 266.35 T 5 F (r) 238.41 266.35 T (eal-time overrunable) 241.93 266.35 T 1 F ( discipline, respectively) 326.04 266.35 T (, for the process when it is) 420.04 266.35 T (created. A process that is overrunable can also be assigned the) 189 254.35 T 5 F (continue) 440.46 254.35 T 1 F (discipline,) 477.38 254.35 T (which speci\336es that if the process that has not yielded the CPU by the end of the minor) 189 242.35 T -0.36 (frame, it will be continued from that point in a later minor frame \050on which it is queued\051.) 189 230.35 P -0.09 (One or more processes per queue can be assigned the) 189 218.35 P 5 F -0.09 (backgr) 403.51 218.35 P -0.09 (ound) 430.89 218.35 P 1 F -0.09 ( discipline. These pro-) 450.88 218.35 P -0.01 (cesses must be enqueued last in the queues. Background processes run only when there) 189 206.35 P (are spare cycles, and do not generate overrun or underrun errors.) 189 194.35 T (Processes controlled by the frame scheduler can perform operations that result in their) 189 170.35 T (execution being suspended, such as awaiting completion of an I/O operation or avail-) 189 158.35 T (ability of a system resource. When a process suspends, the frame scheduler will start) 189 146.35 T -0.11 (execution of the next highest priority process. As soon as the event occurs on which the) 189 134.35 P -0.2 (higher process is waiting, the frame scheduler will suspend execution of the lower prior-) 189 122.35 P (ity process and resume execution of the higher priority process.) 189 110.35 T 189 383.01 540 629.33 C 501.46 533.63 513 530.33 501.46 527.02 501.46 530.33 4 Y 0 X 0 K V 207 530.33 501.46 530.33 2 L 1 H 2 Z N 225 539.33 225 521.33 2 L 3 H N 333 539.33 333 521.33 2 L N 441 539.33 441 521.33 2 L N 261 539.33 261 521.33 2 L 0.5 H N 297 539.33 297 521.33 2 L N 369 539.33 369 521.33 2 L N 405 539.33 405 521.33 2 L N 477 539.33 477 521.33 2 L N 333 602.33 333 539.33 2 L 1 X N 225 602.33 225 539.33 2 L N 441 602.33 441 539.33 2 L N 261 566.33 261 539.33 2 L N 297 566.33 297 539.33 2 L N 369 566.33 369 539.33 2 L N 236.54 563.02 225 566.33 236.54 569.63 236.54 566.33 4 Y 0 X V 249.46 569.63 261 566.33 249.46 563.02 249.46 566.33 4 Y V 236.54 566.33 249.46 566.33 2 L 0 Z N 272.54 563.02 261 566.33 272.54 569.63 272.54 566.33 4 Y V 285.46 569.63 297 566.33 285.46 563.02 285.46 566.33 4 Y V 272.54 566.33 285.46 566.33 2 L N 308.54 563.02 297 566.33 308.54 569.63 308.54 566.33 4 Y V 321.46 569.63 333 566.33 321.46 563.02 321.46 566.33 4 Y V 308.54 566.33 321.46 566.33 2 L N 405 566.33 405 539.33 2 L 2 Z 1 X N 344.54 563.02 333 566.33 344.54 569.63 344.54 566.33 4 Y 0 X V 357.46 569.63 369 566.33 357.46 563.02 357.46 566.33 4 Y V 344.54 566.33 357.46 566.33 2 L 0 Z N 380.54 563.02 369 566.33 380.54 569.63 380.54 566.33 4 Y V 393.46 569.63 405 566.33 393.46 563.02 393.46 566.33 4 Y V 380.54 566.33 393.46 566.33 2 L N 416.54 563.02 405 566.33 416.54 569.63 416.54 566.33 4 Y V 429.46 569.63 441 566.33 429.46 563.02 429.46 566.33 4 Y V 416.54 566.33 429.46 566.33 2 L N 477 566.33 477 539.33 2 L 2 Z 1 X N 452.54 563.02 441 566.33 452.54 569.63 452.54 566.33 4 Y 0 X V 465.46 569.63 477 566.33 465.46 563.02 465.46 566.33 4 Y V 452.54 566.33 465.46 566.33 2 L 0 Z N 236.54 599.02 225 602.33 236.54 605.63 236.54 602.33 4 Y V 321.46 605.63 333 602.33 321.46 599.02 321.46 602.33 4 Y V 236.54 602.33 321.46 602.33 2 L N 344.54 599.02 333 602.33 344.54 605.63 344.54 602.33 4 Y V 429.46 605.63 441 602.33 429.46 599.02 429.46 602.33 4 Y V 344.54 602.33 429.46 602.33 2 L N 452.54 599.02 441 602.33 452.54 605.63 452.54 602.33 4 Y V 452.54 602.33 477 602.33 2 L 2 Z N 234 440.33 252 512.33 R N 234 440.33 234 422.33 2 L N 252 440.33 252 422.33 2 L N 234 458.33 252 458.33 2 L N 234 476.33 252 476.33 2 L N 234 494.33 252 494.33 2 L N 239.69 518.79 243 530.33 246.31 518.79 243 518.79 4 Y V 243 512.33 243 518.79 2 L N 270 440.33 288 512.33 R N 270 440.33 270 422.33 2 L N 288 440.33 288 422.33 2 L N 270 458.33 288 458.33 2 L N 270 476.33 288 476.33 2 L N 270 494.33 288 494.33 2 L N 275.69 518.79 279 530.33 282.31 518.79 279 518.79 4 Y V 279 512.33 279 518.79 2 L N 306 440.33 324 512.33 R N 306 440.33 306 422.33 2 L N 324 440.33 324 422.33 2 L N 306 458.33 324 458.33 2 L N 306 476.33 324 476.33 2 L N 306 494.33 324 494.33 2 L N 311.69 518.79 315 530.33 318.31 518.79 315 518.79 4 Y V 315 512.33 315 518.79 2 L N 1 10 Q (Major Frame) 361.54 613.51 T (Major Frame) 252 613.51 T 1 7 Q (Minor) 234 575.33 T (-0) 251.33 575.33 T (Minor) 270 575.33 T (-1) 287.33 575.33 T (Minor) 306 575.33 T (-2) 323.33 575.33 T (Minor) 342 575.33 T (-0) 359.33 575.33 T (Minor) 378 575.33 T (-1) 395.33 575.33 T (Minor) 414 575.33 T (-2) 431.33 575.33 T 1 8 Q (TIME) 495 512.33 T (Q0) 234 413.33 T (Q1) 270 413.33 T (Q3) 306 413.33 T 329.69 509.79 333 521.33 336.31 509.79 333 509.79 4 Y V 333 509.79 333 503.33 2 L N 473.69 509.79 477 521.33 480.31 509.79 477 509.79 4 Y V 477 509.79 477 503.33 2 L N 437.69 509.79 441 521.33 444.31 509.79 441 509.79 4 Y V 441 509.79 441 503.33 2 L N 401.69 509.79 405 521.33 408.31 509.79 405 509.79 4 Y V 405 509.79 405 503.33 2 L N 365.69 509.79 369 521.33 372.31 509.79 369 509.79 4 Y V 369 509.79 369 503.33 2 L N 293.69 509.79 297 521.33 300.31 509.79 297 509.79 4 Y V 297 509.79 297 503.33 2 L N 257.69 509.79 261 521.33 264.31 509.79 261 509.79 4 Y V 261 509.79 261 503.33 2 L N 221.69 509.79 225 521.33 228.31 509.79 225 509.79 4 Y V 225 509.79 225 503.33 2 L N (Real-time Event Interrupts) 351 494.33 T (Process Queues) 333 449.33 T 1 10 Q (Figure 4: Frame Scheduler Operation) 287.83 389.19 T 0 0 612 792 C FMENDPAGE %%EndPage: "16" 17 %%Page: "17" 17 612 792 0 FMBEGINPAGE 72 750.68 558 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Con\336guring For Real-T) 207 739.85 T (ime Operation) 304.7 739.85 T 72 726.98 558 726.98 2 L 0.25 H N 72 75.33 558 75.33 2 L 2 Z N (REACT In IRIX V) 207 60.96 T (.5 T) 276.09 60.96 T (echnical Report) 290.91 60.96 T 0 10 Q (17) 522.29 60.96 T 0 9 Q ( of) 533.41 60.96 T 0 10 Q (33) 546.89 60.96 T 1 F (A frame scheduler is created by a user) 207 680.66 T (-mode program using the) 359.72 680.66 T 5 F (frs_cr) 462.98 680.66 T (eate\0503\051) 486.49 680.66 T 1 F ( call. This) 514.79 680.66 T -0.29 (call speci\336es the CPU that will run the frame scheduler process group, isolates this CPU) 207 668.66 P (\050see Section 3.4\051, speci\336es the number of minor frames that will form a major frame,) 207 656.66 T (and speci\336es the interrupt source that will drive the scheduler) 207 644.66 T (.) 452.11 644.66 T -0.17 (The process issuing the) 207 620.66 P 5 F -0.17 (frs_cr) 302.38 620.66 P -0.17 (eate) 325.89 620.66 P 1 F -0.17 ( call becomes the) 342.54 620.66 P 5 F -0.17 (master pr) 413.48 620.66 P -0.17 (ocess) 451.54 620.66 P 1 F -0.17 (for this frame sched-) 475.52 620.66 P (uler) 207 608.66 T (. The master process creates all the other processes that are members of the frame) 221.99 608.66 T -0.23 (scheduler process group, using) 207 596.66 P 5 F -0.23 ( fork\0502\051) 329.54 596.66 P 1 F -0.23 (or) 361.83 596.66 P 5 F -0.23 (spr) 372.42 596.66 P -0.23 (oc\0502\051.) 384.82 596.66 P 1 F -0.23 (The master process assigns each pro-) 410.68 596.66 P -0.14 (cess to a minor frame, using) 207 584.66 P 5 F -0.14 (frs_enqueue\0503\051) 321.37 584.66 P 1 F -0.14 (. \050The master process is not queued) 381.87 584.66 P 3 F -0.14 (,) 522.33 584.66 P 1 F -0.14 ( since it) 524.82 584.66 P (must run asynchronously in order to respond to signals.\051 A single process may be) 207 572.66 T (enqueued on several queues simultaneously; that is, the same process may execute on) 207 560.66 T -0.15 (multiple minor frames within the same major frame. After a process is enqueued, it con-) 207 548.66 P (nects itself to the frame scheduler using the function) 207 536.66 T 5 F (frs_join\0503\051) 418.79 536.66 T 1 F (.) 461.55 536.66 T (After all processes have been enqueued, the master process signals the frame scheduler) 207 518.66 T -0.22 (to start activating processes, using) 207 506.66 P 5 F -0.22 (frs_start\0503) 345.26 506.66 P 1 F -0.22 (\051. If all enqueued processes have been con-) 387.47 506.66 P (nected to the frame scheduler using) 207 494.66 T 5 F (frs_join\0503\051) 351.33 494.66 T 1 F (, the scheduler enables the event inter-) 394.09 494.66 T (rupt, waits for its next occurrence, and starts scheduling the member processes in real-) 207 482.66 T (time.) 207 470.66 T -0.23 (The master process or any process in the frame scheduler process group may initiate the) 207 452.66 P (termination of a frame scheduler using) 207 440.66 T 5 F ( frs_destr) 361.61 440.66 T (oy\0503\051) 399.27 440.66 T 1 F (. This call disconnects all pro-) 420.36 440.66 T (cesses from the frame scheduler and un-isolates the CPU. After disconnection, pro-) 207 428.66 T -0.13 (cesses continue execution in normal mode and may not issue any frame scheduler calls.) 207 416.66 P -0.03 (Each frame scheduler executes on an isolated processor) 207 392.66 P -0.03 (. Multiple frame schedulers exe-) 428.52 392.66 P -0.08 (cuting on dif) 207 380.66 P -0.08 (ferent CPUs can be synchronized, such that one frame scheduler is de\336ned) 257.75 380.66 P (to be a synchronization master and the other frame schedulers are synchronization) 207 368.66 T (slaves. In all cases, frame schedulers executing on dif) 207 356.66 T (ferent processors will be synchro-) 421.09 356.66 T -0.04 (nized if they are using the same interrupt source. For the case of the internal timer inter-) 207 344.66 P -0.2 (rupt, synchronization is maintained as a result of hardware synchronization of all timers) 207 332.66 P -0.08 (in the system. For other interrupt sources, synchronization is maintained using the inter-) 207 320.66 P (rupt multi-cast feature of the POWERpath-2 system bus. When the selected interrupt) 207 308.66 T (occurs, it is multicast simultaneously to all processors.) 207 296.66 T FMENDPAGE %%EndPage: "17" 18 %%Page: "18" 18 612 792 0 FMBEGINPAGE 54 750.68 540 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Other Real-T) 189 739.85 T (ime Programming Features) 242.77 739.85 T 54 726.98 540 726.98 2 L 0.25 H N 54 75.33 540 75.33 2 L 2 Z N 0 10 Q (18) 54 60.96 T 0 9 Q ( of) 65.11 60.96 T 0 10 Q ( 33) 76.1 60.96 T 0 9 Q (REACT In IRIX V) 189 60.96 T (.5 T) 258.09 60.96 T (echnical Report) 272.91 60.96 T 54 672.33 540 675.33 C 189 674.48 540 674.48 2 L 0.25 H 2 Z 0 X 0 K N 54 674.48 180 674.48 2 L 0 Z N 0 0 612 792 C 0 12 Q 0 X 0 K (4.0) 189 679.33 T ( Other Real-T) 205.67 679.33 T (ime Programming Features) 280.76 679.33 T 1 10 Q (This section discusses additional features included in IRIX with REACT that are often) 189 657.66 T (useful to real-time users.) 189 645.66 T 0 F (4.1) 166.11 615.66 T (T) 189 615.66 T (imers) 194.93 615.66 T 1 F -0.2 (IRIX with REACT includes support for Berkeley interval timers \050) 189 599.66 P 5 F -0.2 (itimers) 450.65 599.66 P 1 F -0.2 (\051. These timers) 478.42 599.66 P (generate an interrupt at the end of the speci\336ed interval. Hardware support for) 189 587.66 T 5 F (itimers) 503.19 587.66 T 1 F (included in the system enables short intervals to be timed with high accuracy and no) 189 575.66 T (increase in system overhead.) 189 563.66 T (IRIX with REACT also supports event timers, which are useful for measuring the real) 189 539.66 T -0.05 (time between two points in the user) 189 527.66 P -0.05 (\325) 331.19 527.66 P -0.05 (s code. Three types of event timer facilities are pro-) 333.97 527.66 P (vided in IRIX with REACT) 189 515.66 T (: UNIX System V timers, BSD4.2 timers, and direct access) 299.55 515.66 T (to hardware timers from user code.) 189 503.66 T 0 9 Q (4.1.1) 160.01 480.33 T (Interval T) 189 480.33 T (imers) 228.8 480.33 T 1 10 Q (BSD4.2 UNIX introduced the) 189 467.66 T 5 F (itimer) 310.86 467.66 T 1 F ( facility) 334.74 467.66 T (. An) 364.9 467.66 T 5 F (itimer) 384.61 467.66 T 1 F ( allows the user to specify both) 408.49 467.66 T (an of) 189 455.66 T (fset from the current time \050the delay\051 and the recurrence time \050the interval\051. The) 209.08 455.66 T (timer will wait until the delay has passed, then begin timing the interval. At the end of) 189 443.66 T (the interval, it will \336re, interrupting the processor that set up the) 189 431.66 T 5 F (itimer) 447.17 431.66 T 1 F (. The kernel\325) 470.49 431.66 T (s) 521.29 431.66 T 5 F (itimer) 189 419.66 T 1 F ( interrupt handler delivers a signal to the process that set it up. As described) 212.88 419.66 T (below) 189 407.66 T (, three types of) 212.78 407.66 T 5 F (itimers) 274.67 407.66 T 1 F ( are provided, each of which delivers a dif) 302.44 407.66 T (ferent signal to) 470.73 407.66 T (the process. Each user process can utilize up to one) 189 395.66 T 5 F (itimer) 396.34 395.66 T 1 F ( of each type.) 420.21 395.66 T (The \336rst type is the real-time) 189 371.66 T 5 F (itimer) 307.26 371.66 T 1 F (, which delivers the signal SIGALRM. This timer) 330.73 371.66 T -0.27 (measures wall clock time. It can time intervals from 400) 189 359.66 P 3 F -0.27 (m) 414.23 359.66 P 1 F -0.27 (s to 200 hours with resolution) 419.99 359.66 P -0.19 (of greater than 1) 189 347.66 P 3 F -0.19 (m) 256.5 347.66 P 1 F -0.19 (s, subject to the restrictions on the) 262.25 347.66 P 5 F -0.19 (fasthz) 399.7 347.66 P 1 F -0.19 ( parameter that are described) 423.02 347.66 P (in the following section. The accuracy of the hardware that underlies the) 189 335.66 T 5 F (itimers) 481.27 335.66 T 1 F ( is one) 509.03 335.66 T (hundred parts per million. \050NOTE: The timer resolution speci\336ed in this paragraph) 189 323.66 T (assumes IRIX V) 189 311.66 T (ersion 5.2 or later) 253.95 311.66 T (.\051) 323.91 311.66 T (The second) 189 287.66 T 5 F (itimer) 237.29 287.66 T 1 F ( type is a process-virtual-time timer) 261.17 287.66 T (, which delivers the signal) 403.17 287.66 T (SIGVT) 189 275.66 T (ALRM. It runs only when the process is running in user mode.) 217.62 275.66 T (The third) 189 251.66 T 5 F (itimer) 228.42 251.66 T 1 F ( type is the system-virtual-time timer) 252.29 251.66 T (, which delivers the signal SIG-) 399.86 251.66 T (PROF) 189 239.66 T (. It runs both when the process is in user mode and when the kernel is operating) 213.2 239.66 T (on behalf of the user) 189 227.66 T (. During all system calls and I/O driver execution, the kernel is) 270.61 227.66 T (operating on behalf of a user process. T) 189 215.66 T (ime spent executing interrupt handlers is not) 346.85 215.66 T (counted as part of system virtual time, since it is not always possible to determine to) 189 203.66 T (which process the time should be assigned.) 189 191.66 T (The resolution of the process-virtual-time and system-virtual-time) 189 167.66 T 5 F (itimers) 455.76 167.66 T 1 F ( is 10 ms.) 483.53 167.66 T (T) 189 155.66 T (imers other than) 194.76 155.66 T 5 F (itimers) 262.21 155.66 T 1 F ( \050such as) 289.98 155.66 T 5 F (stimer) 327.44 155.66 T 1 F ( or) 352.43 155.66 T 5 F (utimer) 365.75 155.66 T 1 F (\051 do not measure real-time, and) 391.85 155.66 T (should not be used for real-time applications.) 189 143.66 T 0 9 Q (4.1.2) 160.01 120.33 T (Event T) 189 120.33 T (imers) 221.3 120.33 T 1 10 Q (Event timers are typically used to measure the elapsed time between events. By getting) 189 107.66 T -0.28 (the time before and after an operation and then subtracting, the application can calculate) 189 95.66 P FMENDPAGE %%EndPage: "18" 19 %%Page: "19" 19 612 792 0 FMBEGINPAGE 72 750.68 558 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Other Real-T) 207 739.85 T (ime Programming Features) 260.77 739.85 T 72 726.98 558 726.98 2 L 0.25 H N 72 75.33 558 75.33 2 L 2 Z N (REACT In IRIX V) 207 60.96 T (.5 T) 276.09 60.96 T (echnical Report) 290.91 60.96 T 0 10 Q (19) 522.29 60.96 T 0 9 Q ( of) 533.41 60.96 T 0 10 Q (33) 546.89 60.96 T 1 F -0.38 (elapsed time. For timing events, IRIX with REACT supports direct user code access to a) 207 680.66 P -0.05 (free-running hardware timer) 207 668.66 P -0.05 (, and two syntaxes of UNIX system calls. The free-running) 319.74 668.66 P (hardware timer provides the highest resolution and accuracy) 207 656.66 T (, and is recommended for) 447.55 656.66 T (use in real-time applications.) 207 644.66 T -0.01 (Each processor has a free-running timer which consists of a 52-bit counter clocked con-) 207 620.66 P -0.42 (tinuously by the POWERpath-2 bus clock. The SGI_QUER) 207 608.66 P -0.42 (Y_CYCLECNTR command) 442.8 608.66 P (of) 207 596.66 T 5 F (syssgi\0502\051) 217.82 596.66 T 1 F ( returns the address of the counter and the period of its clock signal. \050In the) 253.35 596.66 T (current generation of multiprocessor systems, the clock period is 21 nS, though this) 207 584.66 T (hardware dependency should not be programmed into applications.\051 After querying for) 207 572.66 T -0.2 (the counter) 207 560.66 P -0.2 (\325) 251.85 560.66 P -0.2 (s address, a user process can use) 254.63 560.66 P 5 F -0.2 (mmap\0502\051) 385.3 560.66 P 1 F -0.2 ( to map the counter into its virtual) 421.38 560.66 P -0.39 (address space. The process can subsequently read the hardware counter directly) 207 548.66 P -0.39 (, without) 520.75 548.66 P (the overhead of a system call. The time required to read this counter is approximately) 207 536.66 T (100 nS. All timers in a system are synchronized in hardware; i.e. all timers start at zero) 207 524.66 T (on the same clock tick and so always contain the same value.) 207 512.66 T (In IRIX V) 207 488.66 T (.5, there are two options for reading the timers, depending upon the require-) 246.79 488.66 T (ments of the application. The \336rst option is to read the counter as a 64-bit integer) 207 476.66 T (. How-) 530.12 476.66 T -0.24 (ever) 207 464.66 P -0.24 (, the underlying assembler code will perform two 32-bit loads. This gives rise to the) 223.8 464.66 P (possibility of a carry occuring between the two 32-bit loads. \050A carry will occur every) 207 452.66 T (90.2 seconds.\051 T) 207 440.66 T (o fully account for this possibility) 272.36 440.66 T (, the user must perform three 32-bit) 406.92 440.66 T (reads: the high order section, followed by the low order section, followed by the high) 207 428.66 T (order section. If the two reads of the high order section are not equal, then a carry) 207 416.66 T (occurred.) 207 404.66 T (In IRIX V) 207 380.66 T (.6, the 52-bit timer can be read as a 64-bit integer) 246.79 380.66 T (.) 443.31 380.66 T -0.2 (The) 207 356.66 P 5 F -0.2 (gettimeofday\0503B\051) 224.84 356.66 P 1 F -0.2 ( call provides a system call interface to the timer described above.) 294.23 356.66 P -0.09 (The system initializes a time base on power) 207 344.66 P -0.09 (-up using the battery backed up time-of-day) 380.74 344.66 P (clock and associates a counter value with that time. Subsequent) 207 332.66 T 5 F (gettimeofday\0503B\051) 463.21 332.66 T 1 F ( calls) 532.6 332.66 T (will return the original time base plus the dif) 207 320.66 T (ference between the current counter value) 385.04 320.66 T -0.27 (and the original power) 207 308.66 P -0.27 (-up counter value. The resolution of this counter is determined by) 296.19 308.66 P (the system parameter) 207 296.66 T 5 F (fasthz) 294.43 296.66 T 1 F ( \050see the following section for an explanation of) 317.76 296.66 T 5 F (fasthz) 511.78 296.66 T 1 F (\051.) 535.11 296.66 T (Note that if the) 207 284.66 T 5 F (timed\0501M\051) 269.74 284.66 T 1 F ( daemon is enabled, it may modify the) 311.92 284.66 T 5 F (gettimeofday\0503B\051) 467.66 284.66 T 1 F (timer) 207 272.66 T (, resulting in erroneous event timing.) 227.7 272.66 T (Process execution time accounting information is traditionally measured under UNIX) 207 248.66 T (System V using the) 207 236.66 T 5 F (times\0502\051) 287.52 236.66 T 1 F ( system call. Berkeley added the) 320.27 236.66 T 5 F (getrusage\0503\051) 452.11 236.66 T 1 F ( system call.) 503.19 236.66 T (The) 207 224.66 T 5 F (times\0502\051) 225.04 224.66 T 1 F ( and) 257.79 224.66 T 5 F (getrusage\0503B\051) 277.22 224.66 T 1 F ( return reports of accumulated real, user) 334.4 224.66 T (, and system) 493.58 224.66 T (times. Under IRIX V) 207 212.66 T (.5, the kernel time-stamps each process state transitions between) 290.09 212.66 T (user and kernel mode using the free-running timer and accumulates the elapsed time) 207 200.66 T (between state transitions.) 207 188.66 T (Shutting of) 207 164.66 T (f the system clock using the) 251.53 164.66 T 5 F (sysmp\0502\051) 365.34 164.66 T 1 F ( command MP_NONPREEMPTIVE) 401.42 164.66 T (does not af) 207 152.66 T (fect the gathering of process state transition data.) 250.68 152.66 T 0 9 Q (4.1.3) 178.01 129.33 T (Details Of T) 207 129.33 T (imer Resolution) 256.78 129.33 T 1 10 Q (Each processor in a multiprocessor system includes two hardware clock interrupt sig-) 207 116.66 T (nals.) 207 104.66 T FMENDPAGE %%EndPage: "19" 20 %%Page: "20" 20 612 792 0 FMBEGINPAGE 54 750.68 540 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Other Real-T) 189 739.85 T (ime Programming Features) 242.77 739.85 T 54 726.98 540 726.98 2 L 0.25 H N 54 75.33 540 75.33 2 L 2 Z N 0 10 Q (20) 54 60.96 T 0 9 Q ( of) 65.11 60.96 T 0 10 Q ( 33) 76.1 60.96 T 0 9 Q (REACT In IRIX V) 189 60.96 T (.5 T) 258.09 60.96 T (echnical Report) 272.91 60.96 T 1 10 Q (The \336rst clock signal, called the CPU scheduler clock, has a \336xed period of 10 ms, and) 189 680.66 T -0.03 (is used for scheduling and statistics gathering. The system clock is not accessible to the) 189 668.66 P (user) 189 656.66 T (.) 205.1 656.66 T (The second clock signal, referred to as the \322fast clock\323, has a variable frequency set by) 189 632.66 T -0.37 (the system parameter) 189 620.66 P 5 F -0.37 (fasthz) 275.31 620.66 P 1 F -0.37 (. The fast clock is distributed to all processors, and is used as) 298.64 620.66 P (the basis of the real-time timers. It is also used for event timer system calls such as) 189 608.66 T 5 F (get-) 522.11 608.66 T (timeofday\0503B\051) 189 596.66 T 1 F (.) 246.18 596.66 T (The allowable frequency range for) 189 572.66 T 5 F (fasthz) 329.7 572.66 T 1 F ( is from 500 Hz to 2500 Hz \05010 ms to 400) 353.03 572.66 T 3 F (m) 522.93 572.66 T 1 F (s) 528.68 572.66 T -0.03 (period\051. The resolution of the real-time) 189 560.66 P 5 F -0.03 (itimer) 347.31 560.66 P 1 F -0.03 ( is determined by the) 371.19 560.66 P 5 F -0.03 (fasthz) 457.37 560.66 P 1 F -0.03 ( period. When) 480.69 560.66 P 5 F (setitimer\0502\051) 189 548.66 T 1 F ( is called, it divides the) 235.63 548.66 T 5 F (fasthz) 330.3 548.66 T 1 F ( period into the requested) 353.63 548.66 T 5 F (itimer) 457.72 548.66 T 1 F ( interval to) 481.6 548.66 T (determine how many clock ticks in duration the interval should be. This results in an) 189 536.66 T (interval with a precision of one) 189 524.66 T 5 F (fasthz) 316.13 524.66 T 1 F ( period.) 339.46 524.66 T -0.05 (By choosing an appropriate value of) 189 500.66 P 5 F -0.05 (fasthz) 336.39 500.66 P 1 F -0.05 (, it is possible to time any interval within the) 359.72 500.66 P (range of 400) 189 488.66 T 3 F ( m) 239.51 488.66 T 1 F (s to 200 hours \050accurate to the level of the underlying crystal oscillator) 247.77 488.66 T -0.14 (which generates the clock signal\051. An appropriate value of) 189 476.66 P 5 F -0.14 (fasthz) 423.67 476.66 P 1 F -0.14 ( is one whose period is) 447 476.66 P (an even divisor of the desired interval. For example, if an interval of 5 ms is desired,) 189 464.66 T (2000 Hz \050whose period is 500) 189 452.66 T 3 F (m) 311.69 452.66 T 1 F (s\051 is an appropriate value.) 317.45 452.66 T -0.03 (The default value of) 189 428.66 P 5 F -0.03 (fasthz) 272.16 428.66 P 1 F -0.03 ( is 1000 Hz \0501 ms\051. It can be modi\336ed using the) 295.49 428.66 P 5 F -0.03 (systune\0501M\051) 488.12 428.66 P 1 F (utility) 189 416.66 T (.) 212.24 416.66 T -0.17 (In the current generation of hardware, the frequency of the hardware clock signal that is) 189 392.66 P (used to generate) 189 380.66 T 5 F (fasthz) 256.44 380.66 T 1 F ( is 47 MHz \05021 ns period\051. \050Always use the SGI_QUER) 279.77 380.66 T (Y_CY-) 502.68 380.66 T -0.22 (CLECNTR command of) 189 368.66 P 5 F -0.22 (syssgi\0502\051) 289.1 368.66 P 1 F -0.22 ( to read the frequency in any application program that) 324.63 368.66 P (uses it.\051 The accuracy of the crystal oscillator that sources this signal is 100 parts per) 189 356.66 T (million. This translates to a maximum timing error of 100 microseconds per second.) 189 344.66 T (While a timer may drift this much relative to an external time source, the skew among) 189 332.66 T -0.1 (timers for dif) 189 320.66 P -0.1 (ferent processors in the same system will be less than one clock tick, since) 241.36 320.66 P (all timers are clocked by the same hardware clock signal.) 189 308.66 T 0 F (4.2) 166.11 278.66 T (Asynchronous Disk I/O) 189 278.66 T 1 F (T) 189 262.66 T (ypically when a user process makes a system call to perform disk I/O, the kernel ini-) 194.41 262.66 T (tiates the I/O operation, and the user process is blocked until the I/O operation com-) 189 250.66 T (pletes. T) 189 238.66 T (o meet the needs of real-time applications, IRIX with REACT supports) 222.72 238.66 T (asynchronous I/O. When an asynchronous I/O system call is made, the kernel initiates) 189 226.66 T -0.04 (the I/O request on behalf of the user process and returns control to the user process.The) 189 214.66 P -0.03 (user process can either wait for the I/O operation to complete, or it can continue execut-) 189 202.66 P (ing until receipt of a signal. This sequence of events is shown in Figure 5.) 189 190.66 T FMENDPAGE %%EndPage: "20" 21 %%Page: "21" 21 612 792 0 FMBEGINPAGE 72 750.68 558 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Other Real-T) 207 739.85 T (ime Programming Features) 260.77 739.85 T 72 726.98 558 726.98 2 L 0.25 H N 72 75.33 558 75.33 2 L 2 Z N (REACT In IRIX V) 207 60.96 T (.5 T) 276.09 60.96 T (echnical Report) 290.91 60.96 T 0 10 Q (21) 522.29 60.96 T 0 9 Q ( of) 533.41 60.96 T 0 10 Q (33) 546.89 60.96 T 1 F (.) 207 680.66 T (Figure 4: Asynchronous I/O operation) 207 411.52 T (The asynchronous I/O interface is implemented using four child processes created by) 207 387.52 T 5 F (spr) 207 375.52 T (oc\0502\051) 219.4 375.52 T 1 F ( that perform the actual I/O operations, and a control block in memory \050) 240.49 375.52 T 5 F (aiocb) 527.5 375.52 T 1 F (\051) 549.71 375.52 T (containing user) 207 363.52 T (- and system-de\336ned status and control information for the transaction,) 268.15 363.52 T (such as the \336le pointer) 207 351.52 T (, the number of bytes, and the priority of the request.) 296.54 351.52 T (The child processes can be created by the) 207 327.52 T 5 F (aio_init) 375.19 327.52 T 1 F ( system call, or by the call that ini-) 406.29 327.52 T -0.18 (tiates the \336rst asynchronous I/O transaction. For real-time application, it is preferable to) 207 315.52 P (create the child processes using the system call) 207 303.52 T 5 F (aio_init) 397.42 303.52 T 1 F (, which allows the calling pro-) 428.52 303.52 T (cess to assign execution of the child processes to another processor) 207 291.52 T (. \050This is because) 474.58 291.52 T (child processes created using) 207 279.52 T 5 F (spr) 325.8 279.52 T (oc) 338.2 279.52 T 1 F ( inherit their parent\325) 347.63 279.52 T (s processor assignment, so that) 427.3 279.52 T (child processes created in a real-time process\325 address space will run on that real-time) 207 267.52 T (processor) 207 255.52 T (.\051 The) 244.75 255.52 T 5 F (aio_init\0503\051) 271.11 255.52 T 1 F ( call should be made prior to isolating the real-time proces-) 313.87 255.52 T (sor) 207 243.52 T (. It is available in IRIX 5.2 and later versions.) 218.66 243.52 T (The asynchronous I/O interface is initialized when a process issues its \336rst asynchro-) 207 219.52 T -0.33 (nous I/O read \050) 207 207.52 P 5 F -0.33 (aio_r) 266.23 207.52 P -0.33 (ead) 287.52 207.52 P 1 F -0.33 (\051, asynchronous I/O write \050) 301.95 207.52 P 5 F -0.33 (aio_write\051) 408.58 207.52 P 1 F -0.33 (, or multiple asynchronous) 450.23 207.52 P (I/O reads/writes \050) 207 195.52 T 5 F (lio_listio) 276.94 195.52 T 1 F (\051 request. Initialization includes creating the child processes) 312.49 195.52 T -0.16 (\050if they have not already been created by) 207 183.52 P 5 F -0.16 (aio_init) 371.16 183.52 P 1 F -0.16 (\051 and enqueueing the) 402.27 183.52 P 5 F -0.16 (aiocb) 487.69 183.52 P 1 F -0.16 ( for the sub-) 509.89 183.52 P (sequent I/O transactions. The child processes busy wait on a semaphore that is incre-) 207 171.52 T (mented each time an I/O request is made. When the semaphore is non-zero, one of the) 207 159.52 T -0.2 (child processes wakes up and handles the \336rst aio request from the linked list of aio con-) 207 147.52 P (trol blocks.) 207 135.52 T -0.22 (By default, aio requests are queued in the order of the priority of the processes initiating) 207 111.52 P -0.05 (the requests. The user can optionally reduce the priority of a particular request by speci-) 207 99.52 P 72 89.3 558 687.33 C 207 432.18 558 677.33 C 1 10 Q 0 X 0 K (aio_init) 308.72 620.92 T (aio_read) 306.12 582.25 T (aio_suspend) 301.11 501.58 T 351 624.33 468 624.33 2 L 0.5 H 2 Z N 279 530.32 369 557.32 R N (real-time processing) 283.32 540.41 T 461.47 588.32 466.67 585.32 461.47 582.32 461.47 585.32 4 Y V 349.67 585.32 461.47 585.32 2 L N 471 561.85 468 556.65 465 561.85 468 561.85 4 Y V 468 574.65 468 561.85 2 L N 432 529.65 522 556.65 R N (i/o processing) 449.1 539.74 T 477 529.65 477 502.65 2 L N 383.2 499.65 378 502.65 383.2 505.65 383.2 502.65 4 Y V 383.2 502.65 477 502.65 2 L N 422.67 592.32 512.67 610.32 R N (start child processes) 427.4 597.91 T 471 615.2 468 610 465 615.2 468 615.2 4 Y V 468 624.33 468 615.2 2 L N 468 591.33 468 574.65 2 L N 297 615.33 351 633.33 9 RR N 294.33 495.99 357.33 513.99 9 RR N 296.33 576.66 350.33 594.66 9 RR N 270 457.65 387 484.65 R N (Handle Signal) 300.03 467.74 T 266 651.99 383 669.99 R N (User Process) 298.54 657.58 T (Receive Info) 405 509.5 T 326.33 638.53 323.33 633.33 320.33 638.53 323.33 638.53 4 Y V 323.33 652 323.33 638.53 2 L N 326.33 598.53 323.33 593.33 320.33 598.53 323.33 598.53 4 Y V 323.33 615.33 323.33 598.53 2 L N 327 561.86 324 556.67 321 561.86 324 561.86 4 Y V 324 576 324 561.86 2 L N 327 519.2 324 514 321 519.2 324 519.2 4 Y V 324 528.67 324 519.2 2 L N (Figure 5: Asynchronous I/O operation) 312.14 437.42 T 72 89.3 558 687.33 C 0 0 612 792 C FMENDPAGE %%EndPage: "21" 22 %%Page: "22" 22 612 792 0 FMBEGINPAGE 54 750.68 540 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Other Real-T) 189 739.85 T (ime Programming Features) 242.77 739.85 T 54 726.98 540 726.98 2 L 0.25 H N 54 75.33 540 75.33 2 L 2 Z N 0 10 Q (22) 54 60.96 T 0 9 Q ( of) 65.11 60.96 T 0 10 Q ( 33) 76.1 60.96 T 0 9 Q (REACT In IRIX V) 189 60.96 T (.5 T) 258.09 60.96 T (echnical Report) 272.91 60.96 T 1 10 Q -0.14 (fying a value other than 0 in the) 189 680.66 P 5 F -0.14 (aio_r) 317.77 680.66 P -0.14 (eqprio) 339.06 680.66 P 1 F -0.14 ( \336eld of the) 365.15 680.66 P 5 F -0.14 (aiocb) 412.89 680.66 P 1 F -0.14 (. This value will be added) 435.09 680.66 P (to the process priority to determine the request\325) 189 668.66 T (s order in the queue.) 378.04 668.66 T (The) 189 644.66 T 5 F (lio_listio\0503\051) 207.04 644.66 T 1 F ( allows multiple I/O requests to be made in a single function call. The) 254.24 644.66 T (user process can simultaneously enqueue a number of aio requests to a device and) 189 632.66 T -0.03 (optionally receive a queued signal when the request completes. The operation to be per-) 189 620.66 P (formed \050read or write\051 is speci\336ed in the) 189 608.66 T 5 F (aio_lio_opcode) 352.76 608.66 T 1 F ( \336eld of each) 414.95 608.66 T 5 F (iocb) 469.35 608.66 T 1 F (.) 486.56 608.66 T (The user process can choose to synchronously wait a speci\336ed amount of time for aio) 189 584.66 T (completion, using the) 189 572.66 T 5 F (aio_suspend\0503\051) 277.84 572.66 T 1 F ( call. This gives a program the capability of queu-) 339.47 572.66 T -0.04 (ing a number of aio requests, and then waiting until at least one of them has completed,) 189 560.66 P (or the program is interrupted by a signal, or the timeout speci\336ed in the call expires.) 189 548.66 T (When) 189 536.66 T 5 F (aio_suspend) 215.37 536.66 T 1 F ( is used with) 265.34 536.66 T 5 F (aio_err) 318.09 536.66 T (or\0503\051) 347.7 536.66 T 1 F ( and) 368.24 536.66 T 5 F (aio_r) 387.67 536.66 T (eturn\0503\051) 408.96 536.66 T 1 F (, the user process incurs) 441.71 536.66 T (the least amount of overhead using asynchronous I/O: upon return from) 189 524.66 T 5 F (aio_suspend) 477.96 524.66 T 1 F (,) 527.93 524.66 T (the functions) 189 512.66 T 5 F (aio_err) 243.41 512.66 T (or) 273.02 512.66 T 1 F ( and) 281.91 512.66 T 5 F (aio_r) 301.34 512.66 T (eturn) 322.63 512.66 T 1 F ( can be applied to the individual) 343.73 512.66 T 5 F (aiocb) 474.47 512.66 T 1 F ( for com-) 496.68 512.66 T (pletion status.) 189 500.66 T (Alternatively) 189 476.66 T (, the user process can continue executing after the aio request has been) 241.09 476.66 T -0.23 (queued, and be noti\336ed of I/O completion by a signal. The signal type is speci\336ed either) 189 464.66 P (in the) 189 452.66 T 5 F (aio_sigevent.sevt_signo) 213.99 452.66 T 1 F ( \336eld of the) 309.2 452.66 T 5 F (aiocb) 357.51 452.66 T 1 F (, or as the) 379.71 452.66 T 5 F (sig.sevt_signo) 421.07 452.66 T 1 F ( ar) 477.43 452.66 T (gument to) 487.52 452.66 T 5 F -0.18 (lio_listio) 189 440.66 P 1 F -0.18 (. Because of the overhead of asynchronous signal delivery) 224.55 440.66 P -0.18 (, this method is most) 455.36 440.66 P (appropriate when the number of outstanding asynchronous I/O requests is small, or) 189 428.66 T (when the process cannot af) 189 416.66 T (ford to block because it has other time-sensitive tasks to) 297.06 416.66 T (complete.) 189 404.66 T (The) 189 380.66 T 5 F (aio_err) 207.04 380.66 T (or) 236.65 380.66 T 1 F ( and) 245.54 380.66 T 5 F (aio_r) 264.97 380.66 T (eturn) 286.26 380.66 T 1 F ( calls can be used to determine the error status and return) 307.36 380.66 T (status, respectively) 189 368.66 T (, of an aio operation while it is proceeding.) 264.41 368.66 T (Pending aio requests can be cancelled using) 189 344.66 T 5 F (aio_cancel\0503\051.) 366.92 344.66 T 1 F ( In compliance with the) 424.93 344.66 T (POSIX standard, any requested signal will be delivered to the process that initiated the) 189 332.66 T (request.) 189 320.66 T 0 F (4.3) 166.11 290.66 T (External Interrupts) 189 290.66 T 1 F (CHALLENGE and Onyx systems provide six I/O lines \050two inputs and four outputs\051) 189 274.66 T -0.13 (designed to be connected to external equipment. The interface to these lines is provided) 189 262.66 P (by the special device \336le) 189 250.66 T 5 F (/dev/ei) 290.31 250.66 T 1 F ( \050see) 316.96 250.66 T 5 F (ei\0507\051) 338.05 250.66 T 1 F (\051. This interface allows separate machines to) 356.92 250.66 T -0.25 (send and receive interrupts over a dedicated wire for purposes of inter) 189 238.66 P -0.25 (-machine synchro-) 465.59 238.66 P (nization.) 189 226.66 T (The eternal interrupt device driver maintains per) 189 202.66 T (-process state information, allowing) 382.53 202.66 T (any number of processes to open this device and use it without interfering with each) 189 190.66 T (other) 189 178.66 T (. In order to distribute the overhead associated with the) 208.99 178.66 T 5 F ( ioctl) 428.83 178.66 T 1 F ( calls, a user) 449.1 178.66 T (-process) 498.3 178.66 T (can specify which CPU executes the device driver system calls \050EIIOCSETSYSCPU\051) 189 166.66 T (and which CPU executes the interrupt handlers \050EIIOCSETINTRCPU\051.) 189 154.66 T -0.07 (The device driver maintains queues of incoming interrupts for each process that has the) 189 130.66 P -0.11 (device \336le open. There are two interrupt queues for each process: one for use by the sig-) 189 118.66 P (nal handler and the other for use by the busy wait function, as explained below) 189 106.66 T (. The) 503.4 106.66 T FMENDPAGE %%EndPage: "22" 23 %%Page: "23" 23 612 792 0 FMBEGINPAGE 72 750.68 558 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Other Real-T) 207 739.85 T (ime Programming Features) 260.77 739.85 T 72 726.98 558 726.98 2 L 0.25 H N 72 75.33 558 75.33 2 L 2 Z N (REACT In IRIX V) 207 60.96 T (.5 T) 276.09 60.96 T (echnical Report) 290.91 60.96 T 0 10 Q (23) 522.29 60.96 T 0 9 Q ( of) 533.41 60.96 T 0 10 Q (33) 546.89 60.96 T 1 F -0.35 (interrupt queues allow software to determine how many interrupts have arrived but have) 207 680.66 P (not yet been retrieved by the process. The queue can be \337ushed by the user program.) 207 668.66 T (A user process can enable or disable interrupts using the EIIOCENABLE and EIIO-) 207 644.66 T -0.19 (CDISABLE commands. Interrupts are automatically disabled when the device is closed) 207 632.66 P -0.24 (by the last process. A process can assert \050EIIOCSETHI\051 or de-assert \050EIIOCSETLO\051 an) 207 620.66 P (interrupt on any of the four output pins and generate an outgoing interrupt pulse) 207 608.66 T (\050EIIOCSTROBE\051.) 207 596.66 T (Incoming interrupts can be handled in a number of ways. Using the EIIOCSETSIG) 207 572.66 T -0.08 (command, a process can instruct the driver to send a signal when each interrupt arrives.) 207 560.66 P (The interrupt queue permits the signal handler to know exactly how many interrupts) 207 548.66 T (have arrived, even if a signal was discarded. Or a user process may request to block in) 207 536.66 T (an) 207 524.66 T 5 F (ioctl\050\051) 218.93 524.66 T 1 F ( until an interrupt is received. Finally) 243.36 524.66 T (, in situations where the overhead of a) 391.23 524.66 T (system call is unacceptable \050for example, when interrupts occur frequently\051, a process) 207 512.66 T (can busy wait for an interrupt to arrive, using the) 207 500.66 T 5 F (eicbusywait) 404.91 500.66 T 1 F ( library function. The) 452.11 500.66 T -0.01 (interrupt queue maintained for this function insures that an interrupt arriving before the) 207 488.66 P (library call is made will still be available to the calling process.) 207 476.66 T -0.22 (A process can specify the value in microseconds of the outgoing pulse width \050EIIOCSE-) 207 452.66 P -0.45 (T) 207 440.66 P -0.45 (OPW\051, the expected incoming pulse width \050EIIOCSETIPW\051, and the threshold beyond) 212.93 440.66 P (which an incoming pulse is considered to be \322stuck\323 \050EIIOCSETSPW\051.) 207 428.66 T (The outgoing pulse width determines how long the output lines are asserted when the) 207 404.66 T (driver generates an outgoing interrupt using EIIOCSTROBE. This value should not be) 207 392.66 T (set too high, because the processor busy waits with all interrupts blocked during this) 207 380.66 T (time. On the other hand, too short a pulse may not be reliably received by the remote) 207 368.66 T (machine. The default is 5) 207 356.66 T 3 F (m) 308.31 356.66 T 1 F (s and should not normally be changed.) 314.07 356.66 T -0.18 (The expected incoming pulse width determines how long the interrupt handler will wait) 207 332.66 P (before returning. The interrupt handler must not return while the input line is still) 207 320.66 T (asserted; otherwise, multiple interrupts are received from the same input pulse, indicat-) 207 308.66 T -0.25 (ing to the driver that the line is \322stuck\323. The value of the expected incoming pulse width) 207 296.66 P -0.05 (should match the outgoing pulse width of the machine producing the pulse. The default) 207 284.66 P (is 5) 207 272.66 T 3 F (m) 221.16 272.66 T 1 F (s.) 226.92 272.66 T (The \322stuck\323 pulse width de\336nes the minimum allowable time between distinct input) 207 248.66 T (pulses: any two pulses that arrive within this time are considered to be the same pulse.) 207 236.66 T (Setting this value too low will cause a single pulse to be processed as more than one) 207 224.66 T (interrupt; on the other hand, setting this value too high will limit the maximum rate at) 207 212.66 T (which interrupts can be received. The default value is 500 microseconds.) 207 200.66 T 0 F (4.4) 184.11 170.66 T (Signals) 207 170.66 T 1 F (A signal is a synchronous or asynchronous noti\336cation of an event that is sent to a pro-) 207 154.66 T -0.25 (cess when the event associated with that signal occurs. Examples of such events include) 207 142.66 P (hardware exceptions, timer expiration, terminal activity) 207 130.66 T (, as well as calls to) 428.69 130.66 T 5 F (kill\0502\051) 506.14 130.66 T 1 F (,) 530.56 130.66 T 5 F (sig-) 535.56 130.66 T (queue\0503\051) 207 118.66 T 1 F (,) 242.52 118.66 T 5 F (sigsend\0502\051) 247.52 118.66 T 1 F (, or) 289.15 118.66 T 5 F (raise\0503c\051) 304.98 118.66 T 1 F (. In some cases, a single event generates signals for) 341.06 118.66 T (multiple processes. A process may request a detailed noti\336cation of the source of the) 207 106.66 T (signal and the reason why it was generated \050see) 207 94.66 T 5 F (siginfo\0505\051\051.) 399.34 94.66 T FMENDPAGE %%EndPage: "23" 24 %%Page: "24" 24 612 792 0 FMBEGINPAGE 54 750.68 540 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Other Real-T) 189 739.85 T (ime Programming Features) 242.77 739.85 T 54 726.98 540 726.98 2 L 0.25 H N 54 75.33 540 75.33 2 L 2 Z N 0 10 Q (24) 54 60.96 T 0 9 Q ( of) 65.11 60.96 T 0 10 Q ( 33) 76.1 60.96 T 0 9 Q (REACT In IRIX V) 189 60.96 T (.5 T) 258.09 60.96 T (echnical Report) 272.91 60.96 T 1 10 Q -0.33 (IRIX with REACT supports the signal functions in BSD4.3 and System V) 189 680.66 P -0.33 (, as well as the) 480.58 680.66 P -0.3 (POSIX P1003.1b-1993 real-time signals extension. The basic dif) 189 668.66 P -0.3 (ferences between these) 446.27 668.66 P (signal interfaces are summarized in T) 189 656.66 T (able 1. Because only the POSIX convention pro-) 338.46 656.66 T (vides reliable and deterministic signal noti\336cation, the remaining discussion in this sec-) 189 644.66 T (tion will be con\336ned to just those signals.) 189 632.66 T (IRIX with REACT supports signal numbers between 0 and 64. The signals between 0) 189 474.66 T (and 32 have prede\336ned names \050see) 189 462.66 T 5 F (/var/include/sys/signal.h) 331.1 462.66 T 1 F (\051. The POSIX standard) 429.11 462.66 T (reserves all signals between 33 \050SIGR) 189 450.66 T (TMIN\051 and 64 \050SIGR) 340.79 450.66 T (TMAX\051 for real-time appli-) 427.07 450.66 T (cations.The signals between 1 and 32 are of equal priority) 189 438.66 T (, but have a higher priority) 419.84 438.66 T -0.37 (than real-time signals. The real-time signals are prioritized such that the lower the signal) 189 426.66 P (number) 189 414.66 T (, the higher the signal\325) 219.13 414.66 T (s priority) 308.24 414.66 T (.) 343.96 414.66 T (Each process may specify a system action to be taken in response to each signal type) 189 390.66 T -0.1 (sent to it, called the signal\325) 189 378.66 P -0.1 (s) 295.67 378.66 P 5 F -0.1 ( disposition) 299.56 378.66 P 1 F -0.1 (.The set of system signal actions for a process is) 345.84 378.66 P -0.21 (initialized from that of its parent. Once a disposition has been installed for a speci\336c sig-) 189 366.66 P -0.17 (nal, it usually remains installed until another disposition is explicitly requested by a call) 189 354.66 P (to either) 189 342.66 T 5 F (sigaction\0502\051,) 224.53 342.66 T 1 F ( or until the process execs. When a process execs, all signals) 275.33 342.66 T -0.15 (whose disposition have been set to catch the signal will be set to the default disposition,) 189 330.66 P (SIG_DFL. Alternatively) 189 318.66 T (, a process may request that the system automatically reset the) 286.07 318.66 T (disposition of a signal to SIG_DFL after it has been caught \050see) 189 306.66 T 5 F (sigaction\0502\051) 446.05 306.66 T 1 F (\051.) 494.35 306.66 T (A signal is said to be delivered to a process when the appropriate action for the process) 189 282.66 T (and signal is taken. During the time between the generation of a signal and its delivery) 189 270.66 T (,) 534.22 270.66 T -0.21 (the signal is said to be pending \050see) 189 258.66 P 5 F -0.21 (sigpending\0502\051) 331.65 258.66 P 1 F -0.21 (\051. A process can determine the signals) 387.17 258.66 P -0.04 (that are currently pending using) 189 246.66 P 5 F -0.04 (sigpending) 318.45 246.66 P 1 F -0.04 (.When a pending signal is delivered, the sig-) 362.32 246.66 P (nal will remain pending if there are additional signals queued to that signal number) 189 234.66 T (.) 520.73 234.66 T (Otherwise the pending indication is reset.) 189 222.66 T -0.14 (Because a signal\324s disposition is determined at the time it is delivered, rather than when) 189 198.66 P (it is caught, a signal\324s disposition can change while it is pending. When multiple) 189 186.66 T (unblocked signals are pending, the highest priority signal will be delivered \336rst. On the) 189 174.66 T (other hand, a lower priority signal cannot preempt a higher priority signal handler) 189 162.66 T (.) 515.16 162.66 T (Each process has a signal mask that de\336nes the set of signals currently blocked from) 189 138.66 T -0.26 (delivery to it \050see) 189 126.66 P 5 F -0.26 (sigpr) 260.12 126.66 P -0.26 (ocmask\0502\051) 280.3 126.66 P 1 F -0.26 (\051. The signal mask for a process is initialized from that) 321.93 126.66 P (of its parent. A signal that is blocked by a process will not be lost, but will be queued) 189 114.66 T 54 600.33 540 623.33 C 189 608.33 540 608.33 2 L 0.25 H 2 Z 0 X 0 K N 54 608.33 180 608.33 2 L 0 Z N 0 0 612 792 C 0 9 Q 0 X 0 K (T) 54 594.33 T (ABLE 1.) 58.83 594.33 T 6 F (Signal Functions Summary) 189 594.33 T 0 8 Q (System V) 189 570.99 T (BSD4.3) 285 570.99 T (Posix 1003.1) 375 570.99 T (Posix 1003.1b-1993) 462.57 570.99 T 1 9 Q (32 signals) 189 556.33 T (32 signals) 285 556.33 T (32 signals) 375 556.33 T (64 signals) 462.57 556.33 T (Not reliable) 189 541.33 T (Reliable) 285 541.33 T (Reliable) 375 541.33 T (Reliable) 462.57 541.33 T (Error if signal occurs) 189 526.33 T (during system call) 189 515.33 T (Restarts system call) 285 526.33 T (on signal) 285 515.33 T (Restarts system call) 375 526.33 T (on signal) 375 515.33 T (Restarts system call) 462.57 526.33 T (on signal) 462.57 515.33 T (Signals not queued) 189 500.33 T (Signals not queued) 285 500.33 T (Signals not queued) 375 500.33 T (Signals queued) 462.57 500.33 T FMENDPAGE %%EndPage: "24" 25 %%Page: "25" 25 612 792 0 FMBEGINPAGE 72 750.68 558 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Other Real-T) 207 739.85 T (ime Programming Features) 260.77 739.85 T 72 726.98 558 726.98 2 L 0.25 H N 72 75.33 558 75.33 2 L 2 Z N (REACT In IRIX V) 207 60.96 T (.5 T) 276.09 60.96 T (echnical Report) 290.91 60.96 T 0 10 Q (25) 522.29 60.96 T 0 9 Q ( of) 533.41 60.96 T 0 10 Q (33) 546.89 60.96 T 1 F (and left pending, so that if it is later unblocked \050) 207 680.66 T 5 F (sigsuspend\0502\051) 399.37 680.66 T 1 F (\051 the signal will be deliv-) 454.89 680.66 T (ered. A process can also block a signal by setting its disposition to SIG_IGN.) 207 668.66 T -0.05 (If the disposition of a signal is the address of a function, and the signal\324s SA_SIGINFO) 207 644.66 P (\337ag is set \050see) 207 632.66 T 5 F (sigaction\0502\051) 265.85 632.66 T 1 F (\051, the handler will be passed a pointer to the) 314.15 632.66 T 5 F (siginfo_t) 491.52 632.66 T 1 F ( struc-) 526.51 632.66 T -0.29 (ture, containing the signal\325) 207 620.66 P -0.29 (s cause, as well as a pointer to the structure) 312.74 620.66 P 5 F -0.29 (ucontext_t,) 485.01 620.66 P 1 F -0.29 ( which) 529.15 620.66 P (contains the receiving process\325 context when the signal was delivered. When the signal) 207 608.66 T -0.01 (handler returns, the receiving process resumes execution at the point it was interrupted,) 207 596.66 P (unless the signal handler makes other arrangements.) 207 584.66 T (A process can wait for the occurrence of a signal in a number of ways. It can wait for a) 207 560.66 T (number of signals to occur with a speci\336ed timeout \050) 207 548.66 T 5 F (sigtimedwait) 417.69 548.66 T 1 F (\051 or without timeout) 468.79 548.66 T (\050) 207 536.66 T 5 F (sigwaitrt) 210.33 536.66 T 1 F (\051. It can unblock a signal and then wait for that signal in a single atomic oper-) 245.88 536.66 T (ation \050) 207 524.66 T 5 F (sigsuspend\0503\051) 232.82 524.66 T 1 F (\051. Or it can simply return the value for a queued signal \050) 288.33 524.66 T 5 F (sigwait-) 511.22 524.66 T (info\0503\051) 207 512.66 T 1 F (\051.) 234.21 512.66 T FMENDPAGE %%EndPage: "25" 26 %%Page: "26" 26 612 792 0 FMBEGINPAGE 54 750.68 540 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (VME Bus Capabilities and Use) 189 739.85 T 54 726.98 540 726.98 2 L 0.25 H N 54 75.33 540 75.33 2 L 2 Z N 0 10 Q (26) 54 60.96 T 0 9 Q ( of) 65.11 60.96 T 0 10 Q ( 33) 76.1 60.96 T 0 9 Q (REACT In IRIX V) 189 60.96 T (.5 T) 258.09 60.96 T (echnical Report) 272.91 60.96 T 54 672.33 540 675.33 C 189 674.48 540 674.48 2 L 0.25 H 2 Z 0 X 0 K N 54 674.48 180 674.48 2 L 0 Z N 0 0 612 792 C 0 12 Q 0 X 0 K (5.0) 189 679.33 T ( VME Bus Capabilities and Use) 205.67 679.33 T 1 10 Q (The system VME interface is a high performance implementation which provides full) 189 657.66 T -0.18 (support for all features of Revision C.2 of the VME Speci\336cation plus the A64 and D64) 189 645.66 P (modes as de\336ned in Revision D. The VME interface is designed to allow both direct) 189 633.66 T (access of addresses on the POWERpath-2 bus by devices on the VME bus and direct) 189 621.66 T (access of addresses on the VME bus by devices on the POWERpath-2. Address map-) 189 609.66 T (ping is provided which allows VME devices to perform DMA access to user) 189 597.66 T (-process) 494.69 597.66 T (virtual addresses.) 189 585.66 T 0 F (5.1) 166.11 555.66 T (Con\336gurations) 189 555.66 T 1 F -0.13 (All CHALLENGE and Onyx systems contain a 9U VME bus in their main card cage as) 189 539.66 P (part of the standard I/O complement. Rack con\336gurations may optionally include an) 189 527.66 T (auxiliary 9U VME card cage. This cage may be con\336gured as one, two, or four VME) 189 515.66 T -0.06 (busses. T) 189 503.66 P -0.06 (able 2 illustrates the number of VME slots available in various CHALLENGE) 225.43 503.66 P (and Onyx con\336gurations:) 189 491.66 T (Determining whether to split the auxiliary VME cage into multiple busses should be) 189 326.66 T (done by examining the bandwidth required. Each additional VME bus which is con\336g-) 189 314.66 T (ured requires an F cable output from an F-HIO card installed in a POWERchannel-2) 189 302.66 T (board and a Remote VCAM board installed in the auxiliary VME cage.) 189 290.66 T (Up to a total of three VME busses \050two in auxiliary cage\051 may be supported using the) 189 266.66 T -0.23 (\336rst POWERchannel-2 board in a system; four or more busses requires the addition of a) 189 254.66 P -0.33 (second POWERchannel-2. T) 189 242.66 P -0.33 (able 3 illustrates the con\336guration requirements for various) 303.38 242.66 P (numbers of VME busses.) 189 230.66 T 54 459.33 540 482.33 C 189 467.33 540 467.33 2 L 0.25 H 2 Z 0 X 0 K N 54 467.33 180 467.33 2 L 0 Z N 0 0 612 792 C 0 9 Q 0 X 0 K (T) 54 453.33 T (ABLE 2.) 58.83 453.33 T 6 F (CHALLENGE / Onyx VME Slots) 189 453.33 T 0 8 Q -0.1 (Main Cage) 276 420.99 P (VME Slots) 276 411.99 T (Aux Cage) 330 429.99 T (VME Slots) 330 420.99 T (- 1 Bus) 330 411.99 T (Aux Cage) 384 429.99 T (VME slots) 384 420.99 T (- 2 Busses) 384 411.99 T (Aux Cage) 438 429.99 T (VME Slots) 438 420.99 T (- 4 Busses) 438 411.99 T 1 9 Q (CHALLENGE L) 189 397.33 T (5) 276 397.33 T (none) 330 397.33 T (none) 384 397.33 T (none) 438 397.33 T (Onyx Deskside) 189 382.33 T (3) 276 382.33 T (none) 330 382.33 T (none) 384 382.33 T (none) 438 382.33 T (Challenge XL) 189 367.33 T (5) 276 367.33 T (20) 330 367.33 T (10 / 9) 384 367.33 T (5 / 4 / 4 / 4) 438 367.33 T (Onyx Rack) 189 352.33 T (4) 276 352.33 T (20) 330 352.33 T (10 / 9) 384 352.33 T (5 / 4 / 4 / 4) 438 352.33 T FMENDPAGE %%EndPage: "26" 27 %%Page: "27" 27 612 792 0 FMBEGINPAGE 72 750.68 558 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (VME Bus Capabilities and Use) 207 739.85 T 72 726.98 558 726.98 2 L 0.25 H N 72 75.33 558 75.33 2 L 2 Z N (REACT In IRIX V) 207 60.96 T (.5 T) 276.09 60.96 T (echnical Report) 290.91 60.96 T 0 10 Q (27) 522.29 60.96 T 0 9 Q ( of) 533.41 60.96 T 0 10 Q (33) 546.89 60.96 T 1 9 Q (Note that F-HIO Short modules, which are intended for use only on POWERchannel-2) 219 504.33 T -0.16 (#1, have only a single F Cable output, while regular F-HIO modules provide two F Cable) 219 494.33 P (outputs. This explains why a second POWERchannel-2 board is required for 4 or more) 219 484.33 T 0 (VME busses, but the HIO slots on POWERchannel-2 #1 is not used in this con\336guration.) 219 474.33 P 0 10 Q (5.2) 184.11 445.66 T (Memory Mapping) 207 445.66 T 1 F -0.04 (The system supports mapping of VME addresses into the POWERpath-2 address space) 207 429.66 P (for programmed I/O \050PIO\051 control of VME devices and supports mapping of POWER-) 207 417.66 T (path-2 addresses into the address space of the VME bus for direct memory accesses) 207 405.66 T (\050DMA\051 by devices on the VME bus. The implementation and operation of these two) 207 393.66 T (mappings dif) 207 381.66 T (fer) 259.29 381.66 T (, as described below) 269.98 381.66 T (.) 350.38 381.66 T 0 9 Q (5.2.1) 178.01 358.33 T (PIO Mapping) 207 358.33 T 1 10 Q -0.15 (PIO mapping is based on opening a 128 megabyte) 207 345.66 P 5 F -0.15 (window) 409.12 345.66 P 1 F -0.15 ( from the POWERpath-2 bus) 440.22 345.66 P (address map into the VME address spaces. Each VME bus in the system has its own) 207 333.66 T (window) 207 321.66 T (. This window is divided into sixteen 8 Mb segments. The \336rst of these seg-) 238.55 321.66 T (ments contains VCAM control registers and the A16 VME address space.) 207 309.66 T -0.02 (The other 15 segments are used to access the VME bus through a 15 entry Map Ram in) 207 285.66 P (the VMECC. Each Map Ram entry contains a six bit Address Modi\336er and nine high-) 207 273.66 T -0.01 (order address bits. When a reference is made to one of the segments, these bits are read) 207 261.66 P -0.31 (from the Map Ram and combined with the of) 207 249.66 P -0.31 (fset into the 8 Mb segment to form an A64,) 385.35 249.66 P -0.08 (A32, or A24 VME address. One of the VCAM control registers stores the additional 32) 207 237.66 P (high order address bits which are used to form A64 addresses.) 207 225.66 T -0.01 (PIO Map Ram entries are set up by making a system call. Parameters of the call are the) 207 201.66 P -0.3 (VME address range to be mapped and the Address Modi\336er code to use in accessing the) 207 189.66 P -0.35 (VME bus. The service returns a pointer to the virtual address at which the VME bus will) 207 177.66 P (be accessed. The mapping remains established for the life of the calling process unless) 207 165.66 T (another call is made to close the mapping. See) 207 153.66 T 5 F (usrvme\0507\051.) 394.65 153.66 T 0 9 Q (5.2.2) 178.01 130.33 T (DMA Mapping) 207 130.33 T 1 10 Q (DMA mapping is based on the use of page tables which are stored in the system main) 207 117.66 T (memory) 207 105.66 T (. This scheme allows VME DMA devices to reference a stream of contiguous) 239.66 105.66 T (virtual addresses which correspond to virtual addresses in the user process\325 space.) 207 93.66 T 72 648.33 558 671.33 C 207 656.33 558 656.33 2 L 0.25 H 2 Z 0 X 0 K N 72 656.33 198 656.33 2 L 0 Z N 0 0 612 792 C 0 9 Q 0 X 0 K (T) 72 642.33 T (ABLE 3.) 76.83 642.33 T 6 F (POWERchannel-2 \050Pc-2\051 Con\336gurations vs. Number of VME Busses) 207 642.33 T 0 8 Q (# VME) 207 618.99 T (Busses) 207 609.99 T (Pc-2 #1 Slot) 261 618.99 T (1) 261 609.99 T (Pc-2 #1 Slot) 322.67 618.99 T (2) 322.67 609.99 T (Pc-2 #2) 384.35 618.99 T (Slot 1) 384.35 609.99 T (Pc-2 #2) 438.35 618.99 T (Slot 2) 438.35 609.99 T 1 9 Q (1) 207 595.33 T (open) 261 595.33 T (open) 322.67 595.33 T (not req.) 384.35 595.33 T (not req.) 438.35 595.33 T (2) 207 580.33 T (F-HIO Short) 261 580.33 T (open) 322.67 580.33 T (not req.) 384.35 580.33 T (not req.) 438.35 580.33 T (3 \0501 Pc-2\051) 207 565.33 T (F-HIO Short) 261 565.33 T (F-HIO Short) 322.67 565.33 T (not req.) 384.35 565.33 T (not req.) 438.35 565.33 T (3 \0502 Pc-2\051) 207 550.33 T (open) 261 550.33 T (open) 322.67 550.33 T (F-HIO) 384.35 550.33 T (open) 438.35 550.33 T (4) 207 535.33 T (open) 261 535.33 T (open) 322.67 535.33 T (F-HIO) 384.35 535.33 T (F-HIO) 438.35 535.33 T (5) 207 520.33 T (open) 261 520.33 T (open) 322.67 520.33 T (F-HIO) 384.35 520.33 T (F-HIO) 438.35 520.33 T FMENDPAGE %%EndPage: "27" 28 %%Page: "28" 28 612 792 0 FMBEGINPAGE 54 750.68 540 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (VME Bus Capabilities and Use) 189 739.85 T 54 726.98 540 726.98 2 L 0.25 H N 54 75.33 540 75.33 2 L 2 Z N 0 10 Q (28) 54 60.96 T 0 9 Q ( of) 65.11 60.96 T 0 10 Q ( 33) 76.1 60.96 T 0 9 Q (REACT In IRIX V) 189 60.96 T (.5 T) 258.09 60.96 T (echnical Report) 272.91 60.96 T 1 10 Q -0.38 (These virtual addresses may refer to scattered physical pages in main memory) 189 681.36 P -0.38 (. Thus, the) 496.44 681.36 P (VME device is able to view the addresses it references in the same way as the user pro-) 189 669.36 T -0.09 (cess, and DMA transfers which span multiple pages can be performed as a single opera-) 189 657.37 P (tion.) 189 645.37 T (Each DMA stream from the VME bus is assigned a VME V) 189 621.37 T (irtual Base address which) 428.51 621.37 T (corresponds to a pointer into a translation ram on the POWERchannel-2. The contents) 189 609.37 T (of this ram point to the beginning of a page table in main memory) 189 597.37 T (. Bits 20:12 of the) 451.8 597.37 T (VME V) 189 585.37 T (irtual Address are used as the of) 220.32 585.37 T (fset into the page table. The page table entry is) 348.37 585.37 T (used to translate the VME V) 189 573.37 T (irtual Address into a physical address on the POWERchan-) 302.49 573.37 T (nel-2.) 189 561.37 T (Each VME I/O adapter on the POWERchannel-2 caches sixteen translations internally) 189 537.37 T (.) 534.2 537.37 T (Whenever a VME device performs a memory reference, the translation cache is) 189 525.36 T -0.1 (checked. If a hit occurs, the cache entry is used to translate the VME V) 189 513.37 P -0.1 (irtual Address to) 471.18 513.37 P (a POWERpath-2 bus physical address. If a miss occurs, the POWERchannel-2 hard-) 189 501.37 T (ware automatically fetches a new translation from the page tables in main memory and) 189 489.37 T -0.22 (loads the new translation into the cache, replacing the least recently used entry) 189 477.37 P -0.22 (. Because) 499.64 477.37 P (each VME bus has its own translation cache with eight pairs of entries, up to eight) 189 465.37 T (DMA streams can be simultaneously active on a single VME bus without incurring a) 189 453.37 T (loss of performance due to thrashing.) 189 441.37 T (A kernel-resident device driver is required to set up DMA mapping. See) 189 417.37 T 5 F (IRIX Device) 480.17 417.37 T (Driver Pr) 189 405.37 T (ogramming Guide) 227.77 405.37 T 1 F ( for more information.) 300.78 405.37 T 0 F (5.3) 166.11 375.37 T (Optimizing Bandwidth and Latency) 189 375.37 T 1 F -0.35 (The system architecture is designed to maximize the total available I/O connectivity and) 189 359.37 P (bandwidth. Most high performance I/O devices operate by performing block-mode) 189 347.37 T -0.27 (DMA, and this is the mode of operation which yields the best results. For devices which) 189 335.37 P (are not capable of DMA operation, the system provides the option of accessing these) 189 323.37 T (boards via programmed I/O. In addition, the system provides a DMA engine in the) 189 311.37 T -0.39 (VME interface which can perform DMA with non-DMA VME devices to optimize their) 189 299.37 P (performance.) 189 287.37 T (T) 189 269.37 T (able 4 summarizes the performance of the system VME bus using a VME DMA) 194.41 269.37 T (device to access system memory in various transfer modes. Actual performance may) 189 257.37 T (vary somewhat depending on the timing of the DMA controller used. The system has) 189 245.37 T -0.13 (enough bandwidth that performance is nearly independent of whether other I/O streams) 189 233.37 P -0.19 (\050from other VME busses or other controllers on the POWERchannel-2\051 are active at the) 189 221.37 P (same time.) 189 209.37 T 54 177.03 540 200.03 C 189 185.03 540 185.03 2 L 0.25 H 2 Z 0 X 0 K N 54 185.03 180 185.03 2 L 0 Z N 0 0 612 792 C 0 9 Q 0 X 0 K (T) 54 171.03 T (ABLE 4.) 58.83 171.03 T 6 F (VME Bus DMA Performance \050using DMA board on VME\051) 189 171.03 T 0 8 Q (READ) 251.19 147.7 T (WRITE) 305.19 147.7 T 1 9 Q (D8) 189 133.03 T (0.4 Mb / S) 251.19 133.03 T (0.6 Mb / S) 305.19 133.03 T (D16) 189 118.03 T (0.8 Mb / S) 251.19 118.03 T (1.3 Mb / S) 305.19 118.03 T (D32) 189 103.03 T (1.6 Mb / S) 251.19 103.03 T (2.6 Mb / S) 305.19 103.03 T FMENDPAGE %%EndPage: "28" 29 %%Page: "29" 29 612 792 0 FMBEGINPAGE 72 750.68 558 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (VME Bus Capabilities and Use) 207 739.85 T 72 726.98 558 726.98 2 L 0.25 H N 72 75.33 558 75.33 2 L 2 Z N (REACT In IRIX V) 207 60.96 T (.5 T) 276.09 60.96 T (echnical Report) 290.91 60.96 T 0 10 Q (29) 522.29 60.96 T 0 9 Q ( of) 533.41 60.96 T 0 10 Q (33) 546.89 60.96 T 0 9 Q (5.3.1) 178.01 568.03 T (PIO Operations) 207 568.03 T 1 10 Q (Some VME devices are only capable of operating in a slave mode. For these boards,) 207 555.37 T (there are two alternative ways to access them: using PIO operations from a CPU or) 207 543.37 T (using the DMA engine included in the POWERpath-2 architecture. PIO is the most) 207 531.36 T (straightforward method and will generally require little or no rewriting to port applica-) 207 519.36 T (tion software from other systems. However) 207 507.36 T (, the bandwidth available through this) 379.8 507.36 T (method is limited, especially for reads \050see T) 207 495.36 T (able 5.\051. This is because PIO operations) 386.17 495.36 T (cannot be pipelined - the entire path from the POWERchannel-2 to the VME bus and) 207 483.36 T -0.08 (the CPU itself remains occupied from the time a PIO read starts to its completion. Each) 207 471.36 P (PIO read operation requires two transfers over the POWERpath-2 bus; one to send the) 207 459.36 T (VME address to be read, and another to retrieve the data. W) 207 447.37 T (rite operations to the VME) 446.68 447.37 T (bus are somewhat faster) 207 435.37 T (, requiring data to be passed in only one direction. \050In contrast,) 302.91 435.37 T (DMA transfers can be extensively pipelined through the use of data prefetching, which) 207 423.37 T (is performed by the hardware.\051 Latency for single PIO reads from the VME bus is) 207 411.37 T (approximately 4 microseconds.) 207 399.37 T -0.38 (If multiple VME busses are in use, PIO bandwidth may be increased by using a dif) 207 375.37 P -0.38 (ferent) 532.57 375.37 P (CPU to perform PIO accesses to each VME bus. Using more than one CPU to do PIO) 207 363.37 T (accesses to devices on the same VME bus will result in little or no increase in overall) 207 351.37 T (bandwidth, due to the fact that the POWERpath-2 bus uses split transactions.) 207 339.37 T 0 9 Q (5.3.2) 178.01 184.03 T (DMA Engine) 207 184.03 T 1 10 Q (Because of the modest PIO transfer rates achievable, a DMA engine is included as part) 207 171.37 T -0.06 (of each VME bus in a POWERpath-2 system. The DMA engine enables ef) 207 159.37 P -0.06 (\336cient block-) 505.04 159.37 P (mode DMA transfers of data between system memory and VME boards which support) 207 147.37 T (only slave mode \050PIO\051 operations.) 207 135.37 T (Provided that blocks of data of at least 32 contiguous bytes are used, this DMA engine) 207 111.37 T -0.25 (can transfer data at a higher rate than that achieved using PIO. The DMA engine is capa-) 207 99.37 P 1 9 Q (D32 BLOCK) 207 621.03 T (22 Mb / S) 269.19 621.03 T (24 Mb / S) 323.19 621.03 T (D64 BLOCK) 207 606.03 T (55 Mb / S) 269.19 606.03 T (58 Mb / S) 323.19 606.03 T 72 283.03 558 306.03 C 207 291.03 558 291.03 2 L 0.25 H 2 Z 0 X 0 K N 72 291.03 198 291.03 2 L 0 Z N 0 0 612 792 C 0 9 Q 0 X 0 K (T) 72 277.03 T (ABLE 5.) 76.83 277.03 T 6 F (VME PIO Bandwidth \050CPU accessing Slave on VME Bus\051) 207 277.03 T 0 8 Q (READ) 261 253.7 T (WRITE) 315 253.7 T 1 9 Q (D8) 207 239.03 T (0.2 Mb / S) 261 239.03 T -0.15 (0.75 Mb / S) 315 239.03 P (D16) 207 224.03 T (0.5 Mb / S) 261 224.03 T (1.5 Mb / S) 315 224.03 T (D32) 207 209.03 T (1 Mb / S) 261 209.03 T (3 Mb / S) 315 209.03 T 72 665.03 558 688.03 C 207 673.03 558 673.03 2 L 0.25 H 2 Z 0 X 0 K N 72 673.03 198 673.03 2 L 0 Z N 0 0 612 792 C 0 9 Q 0 X 0 K (T) 72 659.03 T (ABLE 4.) 76.83 659.03 T 6 F (VME Bus DMA Performance \050using DMA board on VME\051) 207 659.03 T 0 8 Q (READ) 269.19 635.7 T (WRITE) 323.19 635.7 T FMENDPAGE %%EndPage: "29" 30 %%Page: "30" 30 612 792 0 FMBEGINPAGE 54 750.68 540 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (VME Bus Capabilities and Use) 189 739.85 T 54 726.98 540 726.98 2 L 0.25 H N 54 75.33 540 75.33 2 L 2 Z N 0 10 Q (30) 54 60.96 T 0 9 Q ( of) 65.11 60.96 T 0 10 Q ( 33) 76.1 60.96 T 0 9 Q (REACT In IRIX V) 189 60.96 T (.5 T) 258.09 60.96 T (echnical Report) 272.91 60.96 T 1 10 Q -0.37 (ble of performing D8, D16, D32, D32 Block, and D64 Block data transfers in A16, A24,) 189 680.66 P (and A32 address spaces.) 189 668.66 T -0.26 (T) 189 644.66 P -0.26 (able 6 illustrates the performance of the DMA engine versus the size of the transfer for) 194.41 644.66 P (a typical VME slave device using D32 accesses. The performance increases with) 189 632.66 T (increasing block size because the start-up cost of using the DMA engine is amortized) 189 620.66 T -0.11 (over a lar) 189 608.66 P -0.11 (ger number of bytes. In systems with multiple VME busses, each bus includes) 226.34 608.66 P -0.37 (an independent DMA engine, with the result that simultaneous performance on each bus) 189 596.66 P (will be as shown in T) 189 584.66 T (able 6. Performance using D64 transfers will be approximately) 274.08 584.66 T (\050though somewhat less than\051 twice the performance shown in T) 189 572.66 T (able 6.) 442.28 572.66 T (A set of library functions for controlling the DMA engine from a user process is pro-) 189 548.66 T (vided in IRIX with REACT) 189 536.66 T (. These allow the user to set up buf) 299.31 536.66 T (fers, map the DMA) 438.75 536.66 T (engine into a process\325 virtual address space, and initiate DMA operations. \050See) 189 524.66 T 5 F (usr) 189 512.66 T (dma\0507\051) 201.4 512.66 T 1 F ( and) 230.27 512.66 T 5 F (udmalib\0503\051) 249.7 512.66 T 1 F (\051. The initialization routines use system calls, but the actual) 294.11 512.66 T -0.23 (transfers are completed in user mode, eliminating the overhead of making a system call.) 189 305.66 P (This keeps very low the overhead involved in using the DMA engine, resulting in a net) 189 293.66 T (performance increase compared with PIOs for transfers of 32 bytes and lar) 189 281.66 T (ger) 487.18 281.66 T (.) 499.39 281.66 T 0 9 Q (5.3.3) 160.01 258.33 T (Intelligent I/O Controllers) 189 258.33 T 1 10 Q (In addition to the techniques described above, it is possible to use a VME CPU board) 189 245.66 T -0.3 (\050non-SGI\051 to act as an intelligent DMA engine to copy data between a slave VME board) 189 233.66 P (and system memory) 189 221.66 T (. This may of) 268.86 221.66 T (fer advantages if non-contiguous blocks of data must) 321.98 221.66 T -0.06 (be transferred, or if it is desirable to do some preprocessing of the data before writing it) 189 209.66 P (to system memory) 189 197.66 T (.) 262.2 197.66 T 54 480.33 540 503.33 C 189 488.33 540 488.33 2 L 0.25 H 2 Z 0 X 0 K N 54 488.33 180 488.33 2 L 0 Z N 0 0 612 792 C 0 9 Q 0 X 0 K (T) 54 474.33 T (ABLE 6.) 58.83 474.33 T 6 F (VME DMA Engine Performance vs. Block Size \050MB / sec, D32 transfers\051) 189 474.33 T 0 8 Q (Size \050bytes\051) 189 450.99 T (READ) 245.43 450.99 T (WRITE) 304.52 450.99 T (BLOCK READ) 368.94 450.99 T (BLOCK WRITE) 434.24 450.99 T 1 9 Q (32) 189 436.33 T (2.8) 245.43 436.33 T (2.6) 304.52 436.33 T (2.7) 368.94 436.33 T (2.7) 434.24 436.33 T (64) 189 421.33 T (3.8) 245.43 421.33 T (3.8) 304.52 421.33 T (4.0) 368.94 421.33 T (3.9) 434.24 421.33 T (128) 189 406.33 T (5.0) 245.43 406.33 T (5.3) 304.52 406.33 T (5.6) 368.94 406.33 T (5.8) 434.24 406.33 T (256) 189 391.33 T (6.0) 245.43 391.33 T (6.7) 304.52 391.33 T (6.4) 368.94 391.33 T (7.3) 434.24 391.33 T (512) 189 376.33 T (6.4) 245.43 376.33 T (7.7) 304.52 376.33 T (7.0) 368.94 376.33 T (8.0) 434.24 376.33 T (1024) 189 361.33 T (6.8) 245.43 361.33 T (8.0) 304.52 361.33 T (7.5) 368.94 361.33 T (8.8) 434.24 361.33 T (2048) 189 346.33 T (7.0) 245.43 346.33 T (8.4) 304.52 346.33 T (7.8) 368.94 346.33 T (9.2) 434.24 346.33 T (4096) 189 331.33 T (7.1) 245.43 331.33 T (8.7) 304.52 331.33 T (7.9) 368.94 331.33 T (9.4) 434.24 331.33 T FMENDPAGE %%EndPage: "30" 31 %%Page: "31" 31 612 792 0 FMBEGINPAGE 72 750.68 558 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (SCSI Capabilities and Use) 207 739.85 T 72 726.98 558 726.98 2 L 0.25 H N 72 75.33 558 75.33 2 L 2 Z N (REACT In IRIX V) 207 60.96 T (.5 T) 276.09 60.96 T (echnical Report) 290.91 60.96 T 0 10 Q (31) 522.29 60.96 T 0 9 Q ( of) 533.41 60.96 T 0 10 Q (33) 546.89 60.96 T 72 672.33 558 675.33 C 207 674.48 558 674.48 2 L 0.25 H 2 Z 0 X 0 K N 72 674.48 198 674.48 2 L 0 Z N 0 0 612 792 C 0 12 Q 0 X 0 K (6.0) 207 679.33 T ( SCSI Capabilities and Use) 223.67 679.33 T 1 10 Q (The system includes two SCSI-2 controllers on each POWERchannel-2 board, and has) 207 657.66 T (the capability to add additional controllers on HIO modules in groups of three. Since) 207 645.66 T -0.1 (these controllers are capable of dif) 207 633.66 P -0.1 (ferential output, SCSI devices can be cabled long dis-) 344.24 633.66 P (tances from the system cabinet. The SCSI controllers are inexpensive and ef) 207 621.66 T (\336cient) 511.59 621.66 T (DMA devices which make near) 207 609.66 T (-optimum use of the POWERpath-2 bus bandwidth.) 333.36 609.66 T (Using 16-bit SCSI, useful bandwidths of up to 14 megabytes per second may be) 207 585.66 T (achieved on each SCSI channel. Using 8-bit SCSI, approximately 7 megabytes per sec-) 207 573.66 T (ond is available. These bandwidths may be achieved by con\336guring the system to per-) 207 561.66 T (form DMA directly into the user process\325 address space without buf) 207 549.66 T (fering.) 478.84 549.66 T (Although SCSI represents a non-traditional approach to controlling real-time external) 207 525.66 T (hardware, some of our real-time customers are \336nding that it can be used to provide a) 207 513.66 T (more cost-ef) 207 501.66 T (fective interface than VME for controlling remote devices. The ability to) 257.05 501.66 T (cable it long distances and the high density \050up to eight SCSI channels per POWER-) 207 489.66 T (channel-2 Board\051 of connections make SCSI a particularly attractive option in the sys-) 207 477.66 T (tem.) 207 465.66 T FMENDPAGE %%EndPage: "31" 32 %%Page: "32" 32 612 792 0 FMBEGINPAGE 54 750.68 540 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Summary of REACT System Functions) 189 739.85 T 54 726.98 540 726.98 2 L 0.25 H N 54 75.33 540 75.33 2 L 2 Z N 0 10 Q (32) 54 60.96 T 0 9 Q ( of) 65.11 60.96 T 0 10 Q ( 33) 76.1 60.96 T 0 9 Q (REACT In IRIX V) 189 60.96 T (.5 T) 258.09 60.96 T (echnical Report) 272.91 60.96 T 54 672.33 540 675.33 C 189 674.48 540 674.48 2 L 0.25 H 2 Z 0 X 0 K N 54 674.48 180 674.48 2 L 0 Z N 0 0 612 792 C 0 12 Q 0 X 0 K (7.0) 189 679.33 T ( Summary of REACT System Functions) 205.67 679.33 T 54 619.33 540 642.33 C 189 627.33 540 627.33 2 L 0.25 H 2 Z 0 X 0 K N 54 627.33 180 627.33 2 L 0 Z N 0 0 612 792 C 0 9 Q 0 X 0 K (T) 54 613.33 T (ABLE 7.) 58.83 613.33 T 6 F (REACT System Functions) 189 613.33 T 0 8 Q (System Call Name) 189 589.99 T (Description) 276 589.99 T 1 9 Q (realtime\0505\051) 189 575.33 T (Introduction to IRIX real-time facilities) 276 575.33 T (sproc\0502\051) 189 560.33 T (Creates share group process) 276 560.33 T (ei\0507\051) 189 545.33 T (External interrupt interface speci\336cation) 276 545.33 T (ftimer\0501\051) 189 530.33 T (Reports status of high-resolution interval timer) 276 530.33 T (timers\0505\051) 189 515.33 T (Description of BSD4.3 interval timers) 276 515.33 T (systune\0501M\051) 189 500.33 T (Displays or sets system tuning parameters) 276 500.33 T (sleep\0502\051) 189 485.33 T (Suspends process execution for speci\336ed time) 276 485.33 T (time\0502\051) 189 470.33 T (Returns time in seconds since 1/1/70) 276 470.33 T (times\0502\051) 189 455.33 T (Returns time since start of process) 276 455.33 T (gettimeofday\0502\051) 189 440.33 T (Returns current time in seconds and microseconds) 276 440.33 T (syssgi\0502\051) 189 425.33 T (Returns system-dependent information) 276 425.33 T (mmap\0502\051) 189 410.33 T (Maps range of I/O addresses to user) 276 410.33 T (\325) 405.62 410.33 T (s address space) 408.11 410.33 T (frs_create\0503\051) 189 395.33 T (Creates frame scheduler process group) 276 395.33 T (frs_enqueue\0503\051) 189 380.33 T (Enqueues a process on a minor frame) 276 380.33 T (frs_join\0503\051) 189 365.33 T (Connects an enqueued process to the frame scheduler) 276 365.33 T (frs_start\0503\051) 189 350.33 T (Starts frame scheduler) 276 350.33 T (frs_yield\0503\051) 189 335.33 T (Causes an enqueued process to yield the processor to another process) 276 335.33 T (frs_destroy\0503\051) 189 320.33 T (T) 276 320.33 T (erminates a frame scheduler) 280.86 320.33 T (sigaction\0502\051) 189 305.33 T (Speci\336es and reports on handling of individual POSIX signals) 276 305.33 T (sigaltstack\0502\051) 189 290.33 T (Sets or gets signal on alternate stack) 276 290.33 T (sigblock\0503B\051) 189 275.33 T (Blocks signals from delivery to process \050BSD4.3\051) 276 275.33 T (siginfo\0505\051) 189 260.33 T (Returns information about signal generation) 276 260.33 T (signal\0502\051) 189 245.33 T (Interface to \050unreliable\051 System V UNIX signals) 276 245.33 T (signal\0503B\051) 189 230.33 T (Interface to \050reliable\051 BSD4.3 signals) 276 230.33 T (signal\0505\051) 189 215.33 T (Description of POSIX signal mechanism) 276 215.33 T (sigpending\0502\051) 189 200.33 T (Returns set of pending signals \050POSIX\051) 276 200.33 T (sigprocmask\0502\051) 189 185.33 T (Manipulates signals blocked from delivery to process \050POSIX\051) 276 185.33 T (sigqueue\0503\051) 189 170.33 T (Queues a signal to process or group of processes) 276 170.33 T (sigsend\0502\051) 189 155.33 T (Sends signal to process or group of processes) 276 155.33 T (sigsuspend\0502\051) 189 140.33 T (Releases blocked signals and waits for interrupt \050POSIX\051) 276 140.33 T (sigsetops\0503\051) 189 125.33 T (Manipulates and examines POSIX signal dispositions) 276 125.33 T (sigset\0502\051) 189 110.33 T (Manages signal disposition \050System V\051) 276 110.33 T (sigstack\0502\051) 189 95.33 T (Sets or gets signal stack context) 276 95.33 T FMENDPAGE %%EndPage: "32" 33 %%Page: "33" 33 612 792 0 FMBEGINPAGE 72 750.68 558 750.68 2 L 2 H 0 Z 0 X 0 K N 0 9 Q (Summary of REACT System Functions) 207 739.85 T 72 726.98 558 726.98 2 L 0.25 H N 72 75.33 558 75.33 2 L 2 Z N (REACT In IRIX V) 207 60.96 T (.5 T) 276.09 60.96 T (echnical Report) 290.91 60.96 T 0 10 Q (33) 522.29 60.96 T 0 9 Q ( of) 533.41 60.96 T 0 10 Q (33) 546.89 60.96 T 1 9 Q (sigtimedwait\0503\051) 207 620.33 T (W) 294 620.33 T (aits on set of signals with timeout) 301.77 620.33 T (sigvec\0503B\051) 207 605.33 T (Speci\336es and reports on disposition of individual BSD4.3 signals) 294 605.33 T (sigwait\0503\051) 207 590.33 T (Blocks process and waits for signal) 294 590.33 T (sigwaitinfo\0503\051) 207 575.33 T (Returns value of queued signal) 294 575.33 T (sigwaitrt\0503\051) 207 560.33 T (W) 294 560.33 T (aits for queued signals \050IRIX 5.2 only\051) 301.77 560.33 T (mpin\0502\051) 207 545.33 T (Locks speci\336ed range of addresses in memory) 294 545.33 T (munpin\0502\051) 207 530.33 T (Unlocks speci\336ed range of addresses in memory) 294 530.33 T (plock\0502\051) 207 515.33 T (Locks entire virtual space in memory) 294 515.33 T (punlock\0502\051) 207 500.33 T (Unlocks entire virtual space) 294 500.33 T (aio_read\0503\051) 207 485.33 T (Issues aio read request) 294 485.33 T (aio_write\0503\051) 207 470.33 T (Issues aio write request) 294 470.33 T (aio_cancel\0503\051) 207 455.33 T (Cancels one or more aio requests) 294 455.33 T (aio_error\0503\051) 207 440.33 T (Returns error status of an aio request) 294 440.33 T (aio_init\0503\051) 207 425.33 T (Initializes POSIX asynchronous I/O interface) 294 425.33 T (aio_return\0503\051) 207 410.33 T (Returns error status of an aio request) 294 410.33 T (aio_suspend\0503\051) 207 395.33 T (Suspends calling process until aio request completes) 294 395.33 T (lio_listio\0503\051) 207 380.33 T (Issues multiple aio requests) 294 380.33 T (schedctl\0502\051) 207 365.33 T (Sets non-degrading priorities) 294 365.33 T (pset\0501M\051) 207 350.33 T (Displays and manages processor set information) 294 350.33 T (usinit\0503P\051) 207 335.33 T (Initializes shared arena) 294 335.33 T (usmalloc\0503P\051) 207 320.33 T (Allocates shared memory from shared arena) 294 320.33 T (usnewlock\0503P\051) 207 305.33 T (Allocates and initializes lock from shared arena) 294 305.33 T (usnewsema\0503P\051) 207 290.33 T (Allocates and initializes semaphore from shared arena) 294 290.33 T (poll\0502\051) 207 275.33 T (W) 294 275.33 T (aits for completion of multiple \336le operations) 301.77 275.33 T (usnewpollsema\0503P\051) 207 260.33 T (Allocates and initializes pollable semaphore) 294 260.33 T (blockproc\0502\051) 207 245.33 T (Blocks a process) 294 245.33 T (runon\0501\051) 207 230.33 T (Locks process to a speci\336ed processor) 294 230.33 T (mpa) 207 215.33 T 5 10 Q (sysmp\0502\051) 222.48 215.33 T 1 9 Q (dmin\050) 258.56 215.33 T (1\051) 207 204.33 T (Controls and reports processor status) 294 215.33 T (sysmp\0502\051) 207 189.33 T (Sets multiprocessing system parameters) 294 189.33 T (1boot\0501M\051) 207 174.33 T (Implements updates of) 294 174.33 T 5 10 Q (/var/sysgen/system) 378.12 174.33 T 1 9 Q (udmalib\0503X\051) 207 159.33 T (Library of routines for using the DMA engine) 294 159.33 T 72 664.33 558 687.33 C 207 672.33 558 672.33 2 L 0.25 H 2 Z 0 X 0 K N 72 672.33 198 672.33 2 L 0 Z N 0 0 612 792 C 0 9 Q 0 X 0 K (T) 72 658.33 T (ABLE 7.) 76.83 658.33 T 6 F (REACT System Functions) 207 658.33 T 0 8 Q (System Call Name) 207 634.99 T (Description) 294 634.99 T FMENDPAGE %%EndPage: "33" 34 %%Trailer %%BoundingBox: 0 0 612 792 %%Pages: 33 1 %%DocumentFonts: Helvetica-Bold %%+ Times-Roman %%+ Times-Bold %%+ Symbol %%+ Courier-Bold %%+ Times-Italic %%+ Helvetica