%! %%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 /Palatino-Roman FMFONTDEFINE 1 0 /Helvetica-Bold FMFONTDEFINE 2 0 /Palatino-Italic FMFONTDEFINE 3 0 /Times-Roman FMFONTDEFINE 4 0 /Helvetica FMFONTDEFINE 5 0 /Palatino-Bold FMFONTDEFINE 6 0 /Courier 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 234 483.31 549 612 R 7 X 0 K V 0 18 Q 0 X -0.05 (The Real-time Frame Scheduler in IRIX) 234 600 P (Pr) 234 578 T (ogrammer) 251.65 578 T (\325s Guide) 336.4 578 T 234 176.74 549 188.74 R 7 X V FMENDPAGE %%EndPage: "1" 2 %%Page: "2" 2 612 792 0 FMBEGINPAGE 216 171 549 216 R 7 X 0 K V 0 9 Q 0 X (The Real-time Frame Scheduler in IRIX Pr) 216 210 T (ogrammer) 382.35 210 T (\325s Guide) 424.69 210 T (CONTRIBUT) 216 669 T (ORS) 269.28 669 T (W) 216 648 T (ritten by Luis Stevens) 224.32 648 T (Edited by David Cortesi) 216 637 T (Illustrated by Luis Stevens) 216 626 T (\251 Copyright 1994 Silicon Graphics, Inc.\321 All Rights Reserved) 216 603 T (This document contains pr) 216 591 T (oprietary and con\336dential information of Silicon) 322.11 591 T (Graphics, Inc. The contents of this document may not be disclosed to thir) 216 580 T (d parties,) 505.54 580 T (copied, or duplicated in any form, in whole or in part, without the prior written) 216 569 T (permission of Silicon Graphics, Inc.) 216 558 T (RESTRICTED RIGHTS LEGEND) 216 535 T (Use, duplication, or disclosur) 216 523 T (e of the technical data contained in this document by) 332.56 523 T (the Government is subject to r) 216 512 T (estrictions as set forth in subdivision \050c\051 \0501\051 \050ii\051 of the) 335.21 512 T (Rights in T) 216 501 T (echnical Data and Computer Softwar) 258.61 501 T (e clause at DF) 405.9 501 T (ARS 52.227-7013 and/) 460.3 501 T (or in similar or successor clauses in the F) 216 490 T (AR, or in the DOD or NASA F) 377.05 490 T (AR) 496.73 490 T (Supplement. Unpublished rights r) 216 479 T (eserved under the Copyright Laws of the United) 351.85 479 T (States. Contractor/manufactur) 216 468 T (er is Silicon Graphics, Inc., 201) 338.28 468 T (1 N. Shor) 458.42 468 T (eline Blvd.,) 495.36 468 T (Mountain V) 216 457 T (iew) 263.57 457 T (, CA 94039-731) 277.16 457 T (1.) 335.71 457 T (Silicon Graphics and IRIS ar) 216 434 T (e r) 327.51 434 T (egister) 337.45 434 T (ed trademarks and IRIX is a trademark of) 363.8 434 T (Silicon Graphics, Inc. Apollo is a r) 216 423 T (egister) 350.61 423 T (ed trademark of Apollo Computer) 376.96 423 T (, Inc.) 512.99 423 T -0.17 (FrameMaker is a r) 216 412 P -0.17 (egister) 287.67 412 P -0.17 (ed trademark of Frame technology) 314.03 412 P -0.17 (, Inc. Hewlett-Packar) 450.18 412 P -0.17 (d is) 532.92 412 P -0.23 (a r) 216 401 P -0.23 (egister) 225.9 401 P -0.23 (ed trademark of Hewlett-Packar) 252.25 401 P -0.23 (d Company) 379.58 401 P -0.23 (. IBM is a r) 425.43 401 P -0.23 (egister) 467.07 401 P -0.23 (ed trademark) 493.42 401 P -0.66 (of International Business Machines Corporation. Macintosh is a r) 216 390 P -0.66 (egister) 467.94 390 P -0.66 (ed trademark) 494.29 390 P (of Apple Computer) 216 379 T (, Inc.) 293.27 379 T FMENDPAGE %%EndPage: "2" 3 %%Page: "3" 3 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (3) 562 109.2 T 63 669.5 567 680.25 C 63 673.99 567 673.99 2 L 0.3 H 2 Z 0 X 0 K N 234 674.45 277.57 677.45 R V 0.5 H 0 Z N 9 72 603 720 C 0 16 Q 0 X 0 K (Contents) 234 658.84 T 0 10 Q (What is Frame Scheduling 5) 234 596.84 T (IRIX Process Scheduling 5) 234 581.84 T (Operation of the FRS 5) 234 566.84 T (Major and Minor Frames 6) 252 551.84 T (Using Minor Frames 6) 252 536.84 T (Using Multiple Processors 7) 252 521.84 T (Defining the Time Base 8) 252 506.84 T (Programming with the Frame Scheduler 8) 234 491.84 T (Designing with the Frame Scheduler 8) 252 476.84 T (Frame Scheduling Disciplines 9) 252 461.84 T (Using the Background Discipline 10) 270 446.84 T (Multiple Executions In A Major Frame 10) 270 431.84 T (Using Multiple Consecutive Minor Frames 10) 270 416.84 T (Preparing the System 11) 252 401.84 T (Implementing a Single FRS 12) 252 386.84 T (Implementing Multiple Synchronized Schedulers 13) 252 371.84 T (Frame Scheduler Methods 14) 234 356.84 T (Interrupt Sources 14) 252 341.84 T (On-Chip Timer Interrupt 14) 270 326.84 T (High-Resolution Timer 15) 270 311.84 T (External Interrupts 15) 270 296.84 T (Vertical Sync Interrupt 15) 270 281.84 T (Device Driver Interrupt 15) 270 266.84 T (Software Interrupt 16) 270 251.84 T (Interrupt Isolation 16) 252 236.84 T (Interrupt Synchronization 16) 252 221.84 T (Startup Synchronization 17) 252 206.84 T (Scheduling Within A Minor Frame 17) 252 191.84 T (Frame Scheduler Signals 18) 252 176.84 T FMENDPAGE %%EndPage: "3" 4 %%Page: "4" 4 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (4) 45 109.2 T 0 F (Contents) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 0 10 Q (The Frame Scheduler API 19) 216 632.33 T (Creating a Master or Slave Frame Scheduler 20) 234 617.33 T (Enqueuing Processes to a Frame Scheduler 22) 234 602.33 T (Joining a Frame Scheduler 24) 234 587.33 T (Starting the Frame Scheduler 25) 234 572.33 T (Yielding Control at the End of a Frame 26) 234 557.33 T (Delivering Time-Base Interrupts to a Frame Scheduler 28) 234 542.33 T (Stopping and Resuming Frame Schedulers 29) 234 527.33 T (Dynamic Management of Scheduler Queues 30) 234 512.33 T (Destroying a Frame Scheduler 32) 234 497.33 T (The Frame Scheduler DDI 33) 216 482.33 T (Frame Scheduler Initialization Function 33) 234 467.33 T (Example of Initialization Function 34) 252 452.33 T (Frame Scheduler Termination Function 35) 234 437.33 T (Example of Termination Function 35) 252 422.33 T (Exporting the Initialization and Termination Functions 35) 234 407.33 T (Example of Exporting Entry Points 36) 252 392.33 T (Generating Interrupts 36) 234 377.33 T (Example of Generating Interrupt 36) 252 362.33 T (Using a Device Driver 37) 234 347.33 T (Examples 38) 216 332.33 T (Basic Example 38) 234 317.33 T (Real-time Application Specification 38) 252 302.33 T (Frame Scheduler Design 39) 252 287.33 T (Example of Scheduling Separate Programs 39) 234 272.33 T (Example of Multiple Synchronized Schedulers 41) 234 257.33 T (Example of Device Driver 42) 234 242.33 T (Example of a 60 Hz Frame Rate 42) 234 227.33 T (Example of Memory and Cache Management 43) 234 212.33 T FMENDPAGE %%EndPage: "4" 5 %%Page: "5" 5 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (5) 562 109.2 T 1 12 Q (What is Frame Scheduling) 63 682.55 T 0 10 Q -0.04 (A frame scheduler is a pr) 234 656.88 P -0.04 (ocess execution manager that schedules pr) 344.91 656.88 P -0.04 (ocesses) 532.36 656.88 P (in a pr) 234 644.88 T (ede\336ned, cyclic sequence. The scheduling period, or) 262.49 644.88 T 2 F (frame) 495.04 644.88 T 0 F (, is) 517.8 644.88 T (determined by a r) 234 632.88 T (epetitive time base, usually a pr) 312.68 632.88 T (ocessor interr) 452.78 632.88 T (upt.) 512.43 632.88 T (The REACT/Pr) 234 608.88 T (o Frame Scheduler \050FRS\051 pr) 302.86 608.88 T (ovides this basic scheduling) 424.4 608.88 T (service, but extends it with additional featur) 234 596.88 T (es to cr) 429.32 596.88 T (eate a powerful) 460.27 596.88 T (development framework for r) 234 584.88 T (eal-time applications, allowing r) 365.57 584.88 T (eal-time) 507.96 584.88 T (application developers to mor) 234 572.88 T (e easily exploit the PowerPath-2 ar) 366.64 572.88 T (chitectur) 519.42 572.88 T (e.) 558.12 572.88 T 1 12 Q (IRIX Process Scheduling) 63 531.55 T 0 10 Q -0.19 (The normal IRIX scheduler is \337exible and tunable. Real-time executives can) 234 505.89 P (use IRIX system calls to set r) 234 493.89 T (eal-time priorities, to isolate and r) 359.28 493.89 T (eserve) 508.4 493.89 T (pr) 234 481.89 T (ocessors, and to achieve low-over) 243.77 481.89 T (head synchr) 391.77 481.89 T (onization of multiple) 445.61 481.89 T (pr) 234 469.89 T (ocesses. \050These standar) 243.77 469.89 T (d kernel featur) 345.72 469.89 T (es ar) 410.79 469.89 T (e described in the REACT) 431.08 469.89 T (T) 234 457.89 T (echnical Report.\051 However) 239.21 457.89 T (, the designer of a r) 356.81 457.89 T (eal-time application is) 441.37 457.89 T (r) 234 445.89 T (equir) 237.77 445.89 T (ed to understand and integrate a variety of privileged system calls) 260.86 445.89 T -0.66 (while cr) 234 433.89 P -0.66 (eating a multipr) 268.8 433.89 P -0.66 (ocessor scheduling mechanism\321work that is at best) 338.49 433.89 P (a distraction fr) 234 421.89 T (om the r) 298.42 421.89 T (eal task of designing a high-performance r) 335.33 421.89 T (eal-time) 522.08 421.89 T (pr) 234 409.89 T (ogram.) 243.77 409.89 T (The REACT/Pr) 234 385.89 T (o Frame Scheduler integrates the IRIX scheduler featur) 302.86 385.89 T (es) 544.71 385.89 T (and extends them, pr) 234 373.89 T (oviding an ef) 327.53 373.89 T (\336cient and easy-to-use framework for) 385.68 373.89 T (r) 234 361.89 T (eal-time application development.) 237.77 361.89 T 1 12 Q (Operation of the FRS) 63 320.55 T 0 10 Q (A single FRS is a kernel object that cyclicly schedules a set of pr) 234 294.89 T (ocesses,) 515.87 294.89 T (accor) 234 282.89 T (ding to pr) 257.1 282.89 T (ogram-de\336ned r) 300.97 282.89 T (ules, on a speci\336c pr) 373.1 282.89 T (ocessor) 462.46 282.89 T (. The FRS) 494.29 282.89 T -0.38 (super) 234 270.89 P -0.38 (cedes the IRIX scheduler) 258.83 270.89 P -0.38 (, so that only FRS-scheduled pr) 365.8 270.89 P -0.38 (ocesses r) 501.47 270.89 P -0.38 (un on) 539.64 270.89 P (that pr) 234 258.89 T (ocessor) 263.6 258.89 T (.) 295.43 258.89 T (The application designer determines how many pr) 234 234.89 T (ocessors ar) 457.62 234.89 T (e r) 505.68 234.89 T (equir) 516.73 234.89 T (ed to) 539.82 234.89 T -0.73 (meet the performance r) 234 222.89 P -0.73 (equir) 334.92 222.89 P -0.73 (ements, and initiates one FRS for each pr) 358.01 222.89 P -0.73 (ocessor) 532.67 222.89 P (to be used.) 234 210.89 T FMENDPAGE %%EndPage: "5" 6 %%Page: "6" 6 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (6) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 1 11.5 Q (Major and Minor Frames) 216 631.33 T 0 10 Q -0.67 (W) 216 606.83 P -0.67 (ithin one FRS, each scheduling cycle is initiated by a r) 225.45 606.83 P -0.67 (eal-time event. These) 455.17 606.83 P (r) 216 594.83 T (epetitive events divide time into intervals called) 219.77 594.83 T 2 9 Q (minor frames) 434.48 594.83 T 0 10 Q (. A \336xed) 482.67 594.83 T (number of minor frames is de\336ned as a) 216 582.83 T 2 9 Q (major frame) 391.81 582.83 T 0 10 Q (. The major frame is the) 435.5 582.83 T (basic r) 216 570.83 T (epetitive unit.) 244.37 570.83 T -0.09 (Each minor frame has a private pr) 216 546.83 P -0.09 (ocess queue listing all the pr) 366.05 546.83 P -0.09 (ocesses to be) 490.55 546.83 P (r) 216 534.83 T (un within the minor frame interval, as shown in the following \336gur) 219.87 534.83 T (e.) 517.27 534.83 T -0.64 (W) 216 264.52 P -0.64 (ithin a minor frame, pr) 225.45 264.52 P -0.64 (ocesses ar) 323.71 264.52 P -0.64 (e dispatched in the or) 366.52 264.52 P -0.64 (der that they appear) 459.22 264.52 P (in the queue. \050Normal Irix pr) 216 252.52 T (ocess priorities ar) 343.73 252.52 T (e ignor) 421.02 252.52 T (ed by the FRS.\051) 451.81 252.52 T 1 11.5 Q (Using Minor Frames) 216 215.52 T 0 10 Q (Pr) 216 191.02 T (ocesses ar) 225.8 191.02 T (e enqueued to one or mor) 269.25 191.02 T (e minor frames. The queues they) 382.7 191.02 T (appear on, and their or) 216 179.02 T (der in those queues, determines their r) 317.37 179.02 T (elative) 487.4 179.02 T (execution sequence within the major frame. Pr) 216 167.02 T (ocesses can be queued to) 420.77 167.02 T -0.47 (mor) 216 155.02 P -0.47 (e than one queue, so as to be scheduled mor) 234.05 155.02 P -0.47 (e than once in a major frame.) 423.98 155.02 P 198 285.19 549 531.5 C 510.46 435.81 522 432.5 510.46 429.19 510.46 432.5 4 Y 0 X 0 K V 216 432.5 510.46 432.5 2 L 1 H 2 Z N 234 441.5 234 423.5 2 L 3 H N 342 441.5 342 423.5 2 L N 450 441.5 450 423.5 2 L N 270 441.5 270 423.5 2 L 0.5 H N 306 441.5 306 423.5 2 L N 378 441.5 378 423.5 2 L N 414 441.5 414 423.5 2 L N 486 441.5 486 423.5 2 L N 342 504.5 342 441.5 2 L 1 X N 234 504.5 234 441.5 2 L N 450 504.5 450 441.5 2 L N 270 468.5 270 441.5 2 L N 306 468.5 306 441.5 2 L N 378 468.5 378 441.5 2 L N 245.54 465.19 234 468.5 245.54 471.81 245.54 468.5 4 Y 0 X V 258.46 471.81 270 468.5 258.46 465.19 258.46 468.5 4 Y V 245.54 468.5 258.46 468.5 2 L 0 Z N 281.54 465.19 270 468.5 281.54 471.81 281.54 468.5 4 Y V 294.46 471.81 306 468.5 294.46 465.19 294.46 468.5 4 Y V 281.54 468.5 294.46 468.5 2 L N 317.54 465.19 306 468.5 317.54 471.81 317.54 468.5 4 Y V 330.46 471.81 342 468.5 330.46 465.19 330.46 468.5 4 Y V 317.54 468.5 330.46 468.5 2 L N 414 468.5 414 441.5 2 L 2 Z 1 X N 353.54 465.19 342 468.5 353.54 471.81 353.54 468.5 4 Y 0 X V 366.46 471.81 378 468.5 366.46 465.19 366.46 468.5 4 Y V 353.54 468.5 366.46 468.5 2 L 0 Z N 389.54 465.19 378 468.5 389.54 471.81 389.54 468.5 4 Y V 402.46 471.81 414 468.5 402.46 465.19 402.46 468.5 4 Y V 389.54 468.5 402.46 468.5 2 L N 425.54 465.19 414 468.5 425.54 471.81 425.54 468.5 4 Y V 438.46 471.81 450 468.5 438.46 465.19 438.46 468.5 4 Y V 425.54 468.5 438.46 468.5 2 L N 486 468.5 486 441.5 2 L 2 Z 1 X N 461.54 465.19 450 468.5 461.54 471.81 461.54 468.5 4 Y 0 X V 474.46 471.81 486 468.5 474.46 465.19 474.46 468.5 4 Y V 461.54 468.5 474.46 468.5 2 L 0 Z N 245.54 501.19 234 504.5 245.54 507.81 245.54 504.5 4 Y V 330.46 507.81 342 504.5 330.46 501.19 330.46 504.5 4 Y V 245.54 504.5 330.46 504.5 2 L N 353.54 501.19 342 504.5 353.54 507.81 353.54 504.5 4 Y V 438.46 507.81 450 504.5 438.46 501.19 438.46 504.5 4 Y V 353.54 504.5 438.46 504.5 2 L N 461.54 501.19 450 504.5 461.54 507.81 461.54 504.5 4 Y V 461.54 504.5 486 504.5 2 L 2 Z N 351 333.5 369 405.5 R 0 Z N 351 333.5 351 315.5 2 L 2 Z N 369 333.5 369 315.5 2 L N 351 351.5 369 351.5 2 L N 351 369.5 369 369.5 2 L N 351 387.5 369 387.5 2 L N 356.69 411.96 360 423.5 363.31 411.96 360 411.96 4 Y V 360 405.5 360 411.96 2 L N 387 333.5 405 405.5 R 0 Z N 387 333.5 387 315.5 2 L 2 Z N 405 333.5 405 315.5 2 L N 387 351.5 405 351.5 2 L N 387 369.5 405 369.5 2 L N 387 387.5 405 387.5 2 L N 392.69 411.96 396 423.5 399.31 411.96 396 411.96 4 Y V 396 405.5 396 411.96 2 L N 423 333.5 441 405.5 R 0 Z N 423 333.5 423 315.5 2 L 2 Z N 441 333.5 441 315.5 2 L N 423 351.5 441 351.5 2 L N 423 369.5 441 369.5 2 L N 423 387.5 441 387.5 2 L N 428.69 411.96 432 423.5 435.31 411.96 432 411.96 4 Y V 432 405.5 432 411.96 2 L N 3 10 Q (Major Frame) 370.54 515.68 T (Major Frame) 261 515.68 T 3 7 Q (Minor) 243 477.5 T (-0) 260.33 477.5 T (Minor) 279 477.5 T (-1) 296.33 477.5 T (Minor) 315 477.5 T (-2) 332.33 477.5 T (Minor) 351 477.5 T (-0) 368.33 477.5 T (Minor) 387 477.5 T (-1) 404.33 477.5 T (Minor) 423 477.5 T (-2) 440.33 477.5 T 3 8 Q (TIME) 504 414.5 T (Q0) 351 306.5 T (Q1) 387 306.5 T (Q2) 423 306.5 T 338.69 411.96 342 423.5 345.31 411.96 342 411.96 4 Y V 342 411.96 342 405.5 2 L N 482.69 411.96 486 423.5 489.31 411.96 486 411.96 4 Y V 486 411.96 486 405.5 2 L N 446.69 411.96 450 423.5 453.31 411.96 450 411.96 4 Y V 450 411.96 450 405.5 2 L N 410.69 411.96 414 423.5 417.31 411.96 414 411.96 4 Y V 414 411.96 414 405.5 2 L N 374.69 411.96 378 423.5 381.31 411.96 378 411.96 4 Y V 378 411.96 378 405.5 2 L N 302.69 411.96 306 423.5 309.31 411.96 306 411.96 4 Y V 306 411.96 306 405.5 2 L N 266.69 411.96 270 423.5 273.31 411.96 270 411.96 4 Y V 270 411.96 270 405.5 2 L N 230.69 411.96 234 423.5 237.31 411.96 234 411.96 4 Y V 234 411.96 234 405.5 2 L N (Real-time Event Interrupts) 234 396.5 T (Process Queues) 450 342.5 T 9 72 603 720 C 26 151.69 27 197.69 R 0 X 0 K V FMENDPAGE %%EndPage: "6" 7 %%Page: "7" 7 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (Operation of the FRS) 483.18 679.44 T 1 F (7) 562 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 0 10 Q (A pr) 234 632.33 T (ocess is enqueued under one of a variety of scheduling disciplines) 254.05 632.33 T (\050described later\051, allowing even mor) 234 620.33 T (e \337exibility) 393.87 620.33 T (.) 442.05 620.33 T 1 11.5 Q (Using Multiple Processors) 234 583.33 T 0 10 Q -0.06 (Cr) 234 558.83 P -0.06 (eating an FRS establishes its contr) 244.85 558.83 P -0.06 (ol over a single pr) 393.52 558.83 P -0.06 (ocessor) 472.47 558.83 P -0.06 (. An FRS may) 504.29 558.83 P (be invoked on all but one of the pr) 234 546.83 T (ocessors in a Challenge or Onyx system.) 385.97 546.83 T -0.1 (\050One pr) 234 534.83 P -0.1 (ocessor) 267.96 534.83 P -0.1 (, usually pr) 299.79 534.83 P -0.1 (ocessor 0 by convention, must be left available to) 349.52 534.83 P (r) 234 522.83 T (un daemons and other normal UNIX housekeeping pr) 237.87 522.83 T (ocesses.\051) 477.21 522.83 T -0.32 (Once invoked, an FRS has full contr) 234 498.83 P -0.32 (ol over its pr) 390 498.83 P -0.32 (ocessor) 444.92 498.83 P -0.32 (. For multipr) 476.74 498.83 P -0.32 (ocessor) 532.26 498.83 P (applications, the pr) 234 486.83 T (ogrammer cr) 319.07 486.83 T (eates one FRS per pr) 376.12 486.83 T (ocessor) 466.24 486.83 T (, and de\336nes a) 498.07 486.83 T (master) 234 474.83 T (-slave r) 263.87 474.83 T (elationship among the FRSs. The interr) 296.05 474.83 T (upts that de\336ne the) 470.19 474.83 T (scheduling time base ar) 234 462.83 T (e br) 338.19 462.83 T (oadcast to the FRSs by an) 354.77 462.83 T 2 F (interrupt gr) 469.45 462.83 T (oup) 517.86 462.83 T 0 F (,) 532.86 462.83 T (implemented using the interr) 234 450.83 T (upt multicasting capability available on the) 363.51 450.83 T (Challenge \050see the paper \322Gr) 234 438.83 T (oup Interr) 361.8 438.83 T (upts on Challenge and Onyx) 406.83 438.83 T (Systems,\323 distributed with REACT/Pr) 234 426.83 T (o\051 to keep them in synchr) 404.17 426.83 T (ony) 516.34 426.83 T (.) 532.07 426.83 T 231.87 223.62 567 423.5 C 5 X 0 K 90 450 9 9 270 325.02 G 0.5 H 0 Z 0 X 90 450 9 9 270 325.02 A 7 X 90 450 18 18 342 379.02 G 0 X 90 450 18 18 342 379.02 A 7 X 90 450 18 18 342 325.02 G 0 X 90 450 18 18 342 325.02 A 7 X 90 450 18 18 342 271.02 G 0 X 90 450 18 18 342 271.02 A 3 8 Q (CPU1) 333 379.02 T (CPU2) 333 325.02 T (CPU3) 333 271.02 T 546.47 382.33 558 379.02 546.47 375.72 546.47 379.02 4 Y V 396 379.02 546.47 379.02 2 L 7 X V 1 H 2 Z 0 X N 414 388.02 414 370.02 2 L 7 X V 3 H 0 X N 450 388.02 450 370.02 2 L 7 X V 0.5 H 0 X N 486 388.02 486 370.02 2 L 7 X V 0 X N 522 388.02 522 370.02 2 L 7 X V 3 H 0 X N 423 343.02 441 361.02 R 0.5 H 0 Z N 428.69 367.49 432 379.02 435.31 367.49 432 367.49 4 Y V 432 361.02 432 367.49 2 L 2 Z N 423 352.02 441 352.02 2 L N 459 343.02 477 361.02 R 0 Z N 464.69 367.49 468 379.02 471.31 367.49 468 367.49 4 Y V 468 361.02 468 367.49 2 L 2 Z N 459 352.02 477 352.02 2 L N 495 343.02 513 361.02 R 0 Z N 500.69 367.49 504 379.02 507.31 367.49 504 367.49 4 Y V 504 361.02 504 367.49 2 L 2 Z N 495 352.02 513 352.02 2 L N 546.47 328.33 558 325.02 546.47 321.72 546.47 325.02 4 Y V 396 325.02 546.47 325.02 2 L 1 H N 414 334.02 414 316.02 2 L 3 H N 450 334.02 450 316.02 2 L 0.5 H N 486 334.02 486 316.02 2 L N 522 334.02 522 316.02 2 L 3 H N 423 289.02 441 307.02 R 0.5 H 0 Z N 428.69 313.49 432 325.02 435.31 313.49 432 313.49 4 Y V 432 307.02 432 313.49 2 L 2 Z N 423 298.02 441 298.02 2 L N 459 289.02 477 307.02 R 0 Z N 464.69 313.49 468 325.02 471.31 313.49 468 313.49 4 Y V 468 307.02 468 313.49 2 L 2 Z N 459 298.02 477 298.02 2 L N 495 289.02 513 307.02 R 0 Z N 500.69 313.49 504 325.02 507.31 313.49 504 313.49 4 Y V 504 307.02 504 313.49 2 L 2 Z N 495 298.02 513 298.02 2 L N 546.47 274.33 558 271.02 546.47 267.72 546.47 271.02 4 Y V 396 271.02 546.47 271.02 2 L 1 H N 414 280.02 414 262.02 2 L 3 H N 450 280.02 450 262.02 2 L 0.5 H N 486 280.02 486 262.02 2 L N 522 280.02 522 262.02 2 L 3 H N 423 235.02 441 253.02 R 0.5 H 0 Z N 428.69 259.49 432 271.02 435.31 259.49 432 259.49 4 Y V 432 253.02 432 259.49 2 L 2 Z N 423 244.02 441 244.02 2 L N 459 235.02 477 253.02 R 0 Z N 464.69 259.49 468 271.02 471.31 259.49 468 259.49 4 Y V 468 253.02 468 259.49 2 L 2 Z N 459 244.02 477 244.02 2 L N 495 235.02 513 253.02 R 0 Z N 500.69 259.49 504 271.02 507.31 259.49 504 259.49 4 Y V 504 253.02 504 259.49 2 L 2 Z N 495 244.02 513 244.02 2 L N 414 379.02 414 271.02 2 L 1 H 4 X N 450 379.02 450 271.02 2 L N 486 379.02 486 271.02 2 L N 522 379.02 522 271.02 2 L N 313.03 365.15 324 370.03 317.28 360.08 315.15 362.62 4 Y 0 X V 270 325.02 315.16 362.62 2 L 0.5 H N 312.46 328.33 324 325.02 312.46 321.72 312.46 325.02 4 Y V 270 325.02 312.46 325.02 2 L N 317.28 289.97 324 280.03 313.03 284.9 315.15 287.43 4 Y V 270 325.02 315.16 287.43 2 L N (Interrupt) 252 298.02 T (Source) 252 290.02 T (Synchronous) 396 406.02 T (Frame Schedulers) 396 398.02 T (Multicast) 270 379.02 T (Interrupts) 270 371.02 T 9 72 603 720 C 44 629 45 639 R 0 X 0 K V FMENDPAGE %%EndPage: "7" 8 %%Page: "8" 8 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (8) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 1 11.5 Q (De\336ning the T) 216 631.33 T (ime Base) 292.4 631.33 T 0 10 Q (Synchr) 216 606.83 T (onization to any interr) 246.64 606.83 T (upt sour) 345.43 606.83 T (ce on a Challenge or Onyx system is) 382.71 606.83 T (possible, including synchr) 216 594.83 T (onization to:) 331.69 594.83 T 4 9 Q (\245) 216 576.83 T 0 10 Q (A speci\336ed frame interval measur) 234 576.83 T (ed by a high-pr) 383.89 576.83 T (ecision clock that is) 451.56 576.83 T (synchr) 234 564.83 T (onized in all pr) 263.63 564.83 T (ocessors) 330.52 564.83 T 4 9 Q (\245) 216 546.83 T 0 10 Q -0.18 (An external interr) 234 546.83 P -0.18 (upt \050r) 312.48 546.83 P -0.18 (efer to the ei\0507\051 man page for details on external) 337.18 546.83 P (interr) 234 534.83 T (upt support\051) 258.59 534.83 T 4 9 Q (\245) 216 516.83 T 0 10 Q (The vertical r) 234 516.83 T (etrace interr) 292.39 516.83 T (upt fr) 345.69 516.83 T (om the graphics subsystem) 370.58 516.83 T 4 9 Q (\245) 216 498.83 T 0 10 Q (A call generated by a kernel-level device driver) 234 498.83 T 4 9 Q (\245) 216 480.83 T 0 10 Q (Pr) 234 480.83 T (ogram-supplied interr) 243.8 480.83 T (upts fr) 341.99 480.83 T (om a pr) 371.11 480.83 T (ogram-de\336ned time base \050most) 405.17 480.83 T (often used for debugging\051) 234 468.83 T (The master FRS sets up an interr) 216 444.83 T (upt gr) 359.21 444.83 T (oup, to synchr) 386.33 444.83 T (onize the slave FRSs.) 449.66 444.83 T 1 12 Q (Programming with the Frame Scheduler) 45 403.5 T 0 10 Q (This section summarizes the pr) 216 377.83 T (ocess of designing and implementing a) 353.41 377.83 T (r) 216 365.83 T (eal-time application based on the REACT/Pr) 219.77 365.83 T (o Frame Scheduler) 418.19 365.83 T (.) 500.08 365.83 T 1 11.5 Q (Designing with the Frame Scheduler) 216 328.83 T 0 10 Q -0.1 (Use of the Frame Scheduler permits the designer to plan in terms of a set of) 216 304.33 P (abstract activities that must be completed in each major frame. A typical) 216 292.33 T -0.17 (pr) 216 280.33 P -0.17 (ogram would consist of a par) 225.77 280.33 P -0.17 (ent pr) 353.96 280.33 P -0.17 (ocess that initializes r) 379.93 280.33 P -0.17 (esour) 473.82 280.33 P -0.17 (ces; cr) 498.1 280.33 P -0.17 (eates) 524.6 280.33 P (the needed FRSs; then cr) 216 268.33 T (eates each activity in the form of a lightweight) 324.35 268.33 T (pr) 216 256.33 T (ocess started with spr) 225.77 256.33 T (oc\0502\051 or with fork\0502\051.) 321.35 256.33 T (The \336rst step of each child pr) 216 232.33 T (ocess would be to join its assigned Frame) 344.28 232.33 T (Scheduler) 216 220.33 T (. Ther) 259.33 220.33 T (eafter each child pr) 284.82 220.33 T (ocess is dispatched by the FRS at the) 369.42 220.33 T (appr) 216 208.33 T (opriate time within a major frame, when it r) 236.78 208.33 T (uns until it yields contr) 430.69 208.33 T (ol.) 533.1 208.33 T FMENDPAGE %%EndPage: "8" 9 %%Page: "9" 9 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (Programming with the Frame Scheduler) 406.23 679.44 T 1 F (9) 562 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 0 10 Q (T) 234 632.33 T (o take advantage of this model, the designer would:) 239.21 632.33 T 4 9 Q (\245) 234 614.33 T 0 10 Q (Specify the r) 252 614.33 T (eal-time pr) 306.9 614.33 T (ogram in terms of logically-independent) 354.97 614.33 T -0.03 (abstract activities, noting which must r) 252 602.33 P -0.03 (un serially and which could r) 423.2 602.33 P -0.03 (un) 552.69 602.33 P (concurr) 252 590.33 T (ently) 285.89 590.33 T (.) 307.11 590.33 T 4 9 Q (\245) 234 572.33 T 0 10 Q (Estimate the execution time of each activity) 252 572.33 T (.) 442.33 572.33 T 4 9 Q (\245) 234 554.33 T 0 10 Q (Allocate the activities to as few pr) 252 554.33 T (ocessors as possible, based on the) 400.91 554.33 T (execution times and the possibilities for concurr) 252 542.33 T (ent execution.) 463.34 542.33 T 4 9 Q (\245) 234 524.33 T 0 10 Q (Plan the frame schedule in terms of the interr) 252 524.33 T (upt sour) 451.62 524.33 T (ce to use, the) 488.9 524.33 T (number of minor frames per major frame, and the queue that each) 252 512.33 T (pr) 252 500.33 T (ocess should join.) 261.77 500.33 T 1 11.5 Q (Frame Scheduling Disciplines) 234 463.33 T 0 10 Q (In the simplest case, the pr) 234 438.83 T (ocess that r) 351.31 438.83 T (epr) 400.56 438.83 T (esents an activity should start) 415.12 438.83 T -0.42 (during the minor frame to which it is queued, and should complete its work) 234 426.83 P (and yield within the same minor frame.) 234 414.83 T -0.37 (If the pr) 234 390.83 P -0.37 (ocess is not r) 268.6 390.83 P -0.37 (eady to r) 323.6 390.83 P -0.37 (un \050for example, is blocked on I/O\051 during the) 361.9 390.83 P (entir) 234 378.83 T (e minor frame, an) 254.54 378.83 T 2 F (underrun) 335.47 378.83 T 0 F ( err) 374.36 378.83 T (or is said to occur) 389.36 378.83 T (. If the pr) 466.44 378.83 T (ocess fails to) 506.77 378.83 T (complete its work and yield within the minor frame interval, an) 234 366.83 T 2 F (overrun) 518.17 366.83 T 0 F (err) 234 354.83 T (or is said to occur) 246.5 354.83 T (.) 323.58 354.83 T (The Frame Scheduler calls this strict discipline the Realtime scheduling) 234 330.83 T (discipline. However) 234 318.83 T (, a number of other disciplines ar) 322.56 318.83 T (e supported for) 468.06 318.83 T (\337exibility of design.) 234 306.83 T (Underr) 234 288.83 T (unnable) 266.3 288.83 T (Underr) 306 276.83 T (un err) 338.3 276.83 T (ors ar) 365.15 276.83 T (e ignor) 390.05 276.83 T (ed but overr) 420.85 276.83 T (un err) 475.26 276.83 T (ors ar) 502.1 276.83 T (e) 527.01 276.83 T (detected. Underr) 306 264.83 T (unable pr) 380.83 264.83 T (ocesses ar) 423.17 264.83 T (e allowed to skip) 466.61 264.83 T (frames; however) 306 252.83 T (, if they do r) 379.16 252.83 T (un they must yield befor) 432.74 252.83 T (e the) 541.48 252.83 T (end of the frame, or they cause an overrr) 306 240.83 T (un err) 485.51 240.83 T (or) 512.36 240.83 T (.) 521.02 240.83 T (Overr) 234 222.83 T (unnable) 260.11 222.83 T (Overr) 306 210.83 T (un err) 332.11 210.83 T (ors ar) 358.95 210.83 T (e ignor) 383.86 210.83 T (ed but underrr) 414.65 210.83 T (un err) 479.85 210.83 T (ors ar) 506.7 210.83 T (e) 531.61 210.83 T (detected. Overr) 306 198.83 T (unable pr) 374.63 198.83 T (ocesses must execute on every) 416.97 198.83 T (frame to which they ar) 306 186.83 T (e queued, but they ar) 406.1 186.83 T (e not r) 499.7 186.83 T (equir) 527.79 186.83 T (ed) 550.87 186.83 T (to yield befor) 306 174.83 T (e the end of the frame.) 364.85 174.83 T 44 303.5 45 313.5 R V FMENDPAGE %%EndPage: "9" 10 %%Page: "10" 10 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (10) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 0 10 Q (Underr) 216 632.33 T (unnable + Overr) 248.3 632.33 T (unnable) 321.34 632.33 T (Neither err) 288 620.33 T (or is detected. These pr) 336.81 620.33 T (ocesses can skip frames) 438.92 620.33 T (and overr) 288 608.33 T (un them.) 331.13 608.33 T (Overr) 216 590.33 T (unnable + Continuable) 242.11 590.33 T (This discipline is used to allow a pr) 288 578.33 T (ocess to extend its) 444 578.33 T (execution beyond a single minor frame.) 288 566.33 T (Backgr) 216 548.33 T (ound) 246.42 548.33 T (A pr) 288 536.33 T (ocess with Backgr) 308.05 536.33 T (ound discipline r) 386.95 536.33 T (uns only when all) 462.24 536.33 T (Realtime pr) 288 524.33 T (ocesses in its queue have yielded, that is, only) 339.42 524.33 T -0.6 (when the pr) 288 512.33 P -0.6 (ocessor would otherwise be idle. Underr) 340.19 512.33 P -0.6 (un and) 516.44 512.33 P (overr) 288 500.33 T (un err) 311.71 500.33 T (ors ar) 338.55 500.33 T (e not r) 363.46 500.33 T (elevant to this discipline.) 391.54 500.33 T 1 9.5 Q (Using the Background Discipline) 216 472.67 T 0 10 Q (The backgr) 216 448.83 T (ound discipline is mutually exclusive with the other discipline) 265.07 448.83 T -0.33 (types. The Frame Scheduler only dispatches a Backgr) 216 436.83 P -0.33 (ound pr) 448.41 436.83 P -0.33 (ocess when all) 483.76 436.83 P (other pr) 216 424.83 T (ocesses queued to that minor frame have r) 251.54 424.83 T (un and have yielded.) 438.55 424.83 T (Since the Backgr) 216 412.83 T (ound pr) 288.48 412.83 T (ocess cannot be sur) 324.16 412.83 T (e it will r) 408.94 412.83 T (un and cannot pr) 448.32 412.83 T (edict) 524.14 412.83 T (how much time it will have, the concepts of underr) 216 400.83 T (un and overr) 441.6 400.83 T (un do not) 499.06 400.83 T (apply to it.) 216 388.83 T 4 9 Q -0.44 (Note:) 216 364.83 P 0 10 Q -0.44 (A pr) 241.59 364.83 P -0.44 (ocess with the Backgr) 261.2 364.83 P -0.44 (ound discipline must be queued to its frame) 355.12 364.83 P (following all non-Backgr) 216 352.83 T (ound pr) 325.33 352.83 T (ocesses. Do not queue a r) 361.01 352.83 T (eal-time pr) 471.9 352.83 T (ocess) 519.97 352.83 T (after a Backgr) 216 340.83 T (ound pr) 276.74 340.83 T (ocess.) 312.42 340.83 T 1 9.5 Q (Multiple Executions In A Major Frame) 216 313.17 T 0 10 Q (A pr) 216 289.33 T (ocess can be scheduled to r) 236.05 289.33 T (un and yield mor) 355.06 289.33 T (e than once in a major) 431.64 289.33 T (frame, by queueing it to mor) 216 277.33 T (e than one minor frame.) 342.4 277.33 T 4 9 Q (Note:) 216 253.33 T 0 10 Q (A pr) 242.48 253.33 T (ocess cannot be queued for dispatch by mor) 262.53 253.33 T (e than one FRS. A) 456.24 253.33 T (pr) 216 241.33 T (ocess can be dispatched in multiple minor frames, but on only one) 225.77 241.33 T (pr) 216 229.33 T (ocessor) 225.77 229.33 T (. T) 257.6 229.33 T (o r) 267.8 229.33 T (un the same pr) 279.62 229.33 T (ocess on multiple FRSs at once, start multiple) 345.45 229.33 T (instances of the pr) 216 217.33 T (ocess.) 296.42 217.33 T 1 9.5 Q (Using Multiple Consecutive Minor Frames) 216 189.67 T 0 10 Q -0.3 (The Continuable discipline is used for a pr) 216 165.83 P -0.3 (ocess that may r) 401.56 165.83 P -0.3 (equir) 471.8 165.83 P -0.3 (e mor) 494.88 165.83 P -0.3 (e than) 519.92 165.83 P (one minor frame to complete its work. T) 216 153.83 T (o allow a pr) 392.98 153.83 T (ocess to use multiple) 445.31 153.83 T 26 545 27 555 R V 26 150.5 27 479 R V FMENDPAGE %%EndPage: "10" 11 %%Page: "11" 11 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (Programming with the Frame Scheduler) 406.23 679.44 T 1 F (11) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 0 10 Q -0.16 (consecutive minor frames, it must be enqueued in each of the minor frames) 234 632.33 P (in which it can r) 234 620.33 T (un. The discipline settings for each frame should be:) 305.32 620.33 T (First frame) 234 602.33 T -0.5 (Realtime + Overr) 306 602.33 P -0.5 (unnable + Continuable\321the pr) 381.32 602.33 P -0.5 (ocess must) 517.49 602.33 P -0.32 (start in this frame \050not Underr) 306 590.33 P -0.32 (unable\051 but is not r) 437.58 590.33 P -0.32 (equir) 519.95 590.33 P -0.32 (ed to) 543.03 590.33 P -0.69 (yield \050Overr) 306 578.33 P -0.69 (unable\051. If it yields, it will not be r) 359.51 578.33 P -0.69 (estarted in the) 503.6 578.33 P (following minor frame \050Continuable\051.) 306 566.33 T (Intermediate) 234 548.33 T (Realtime+Underr) 306 548.33 T (unable+Overr) 383.51 548.33 T (unnable+Continuable\321) 445.73 548.33 T -0.39 (the pr) 306 536.33 P -0.39 (ocess need not start \050it might alr) 331.74 536.33 P -0.39 (eady have yielded, or) 470.81 536.33 P -0.75 (might be blocked\051 but is not r) 306 524.33 P -0.75 (equir) 431.56 524.33 P -0.75 (ed to yield. If it does yield) 454.64 524.33 P (\050or if it had yielded in a pr) 306 512.33 T (eceding minor frame\051, it is not) 422.21 512.33 T (r) 306 500.33 T (estarted in the following minor frame \050Continuable\051.) 309.77 500.33 T (Final frame) 234 482.33 T (Realtime+Underr) 306 482.33 T (unable\321the pr) 383.51 482.33 T (ocess need not start \050it) 449.7 482.33 T (might alr) 306 470.33 T (eady have yielded\051 but if it starts it must yield in) 346.54 470.33 T -0.03 (this frame \050not Overr) 306 458.33 P -0.03 (unnable\051. The pr) 399.47 458.33 P -0.03 (ocess can start a new) 472.62 458.33 P (r) 306 446.33 T (un in the next minor frame to which it is queued \050not) 309.87 446.33 T (Continuable\051.) 306 434.33 T (In general terms, the Continuable \337ag allows the pr) 234 410.33 T (ogrammer to alter the) 461.1 410.33 T -0.56 (ef) 234 398.33 P -0.56 (fective length of a minor frame for one particular pr) 241.94 398.33 P -0.56 (ocess. A pr) 465.35 398.33 P -0.56 (ocess can be) 512.45 398.33 P (enqueued for one or mor) 234 386.33 T (e of these multi-frame sequences in one major) 344.18 386.33 T -0.4 (frame. For example, suppose that the minor frame rate is 60 Hz, and a major) 234 374.33 P (frame contains 60 minor frames \0501 Hz\051. Y) 234 362.33 T (ou have a pr) 414.59 362.33 T (ocess that should r) 469.59 362.33 T (un) 551.99 362.33 T -0.21 (at a rate of 5 Hz and can use up to 3/60 second at each dispatch. Y) 234 350.33 P -0.21 (ou would) 522.11 350.33 P (enqueue the pr) 234 338.33 T (ocess to 5 sequences of 3 consecutive frames, starting in) 300.46 338.33 T -0.22 (frames 0, 12, 24, 36, and 48. The disciplines in each of the 3-frame sequences) 234 326.33 P (would be those shown in the pr) 234 314.33 T (eceding list.) 373.72 314.33 T (In implementation dependent terms, the Continuable \337ag allows the) 234 290.33 T (pr) 234 278.33 T (ogramer to contr) 243.77 278.33 T (ol the place wher) 317.74 278.33 T (e the) 393.31 278.33 T 2 F (frs_run) 416.96 278.33 T 0 F ( and the) 447.51 278.33 T 2 F (frs_yield) 485.79 278.33 T 0 F ( \337ags ar) 520.78 278.33 T (e) 555.41 278.33 T (r) 234 266.33 T (eset \050see \322Scheduling W) 237.77 266.33 T (ithin A Minor Frame\323 on page) 343.53 266.33 T (17\051.) 480.33 266.33 T 1 11.5 Q (Preparing the System) 234 229.33 T 0 10 Q (The Challenge or Onyx pr) 234 204.83 T (ocessors that will be used by FRSs must be) 348.96 204.83 T (pr) 234 192.83 T (epar) 243.77 192.83 T (ed for use by a r) 263.33 192.83 T (eal-time pr) 334.36 192.83 T (ogram. The designer must:) 382.43 192.83 T 4 9 Q (\245) 234 174.83 T 0 10 Q (Select the gr) 252 174.83 T (oup of pr) 305.61 174.83 T (ocessors on the machine that will be used for) 346.66 174.83 T (r) 252 162.83 T (eal-time execution. Pr) 255.77 162.83 T (ocessor 0 \050at least\051 must be r) 351.51 162.83 T (eserved for IRIX) 475.59 162.83 T (system functions.) 252 150.83 T 44 617 45 639 R V 44 563 45 573 R V 44 497 45 531 R V 44 443 45 465 R V 44 311 45 417 R V FMENDPAGE %%EndPage: "11" 12 %%Page: "12" 12 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (12) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 4 F (\245) 216 632.33 T 0 10 Q (Specify which pr) 234 632.33 T (ocessors will handle I/O interr) 308.36 632.33 T (upts. By default, IRIX) 444.51 632.33 T (distributes I/O interr) 234 620.33 T (upts \050r) 328.07 620.33 T (eferr) 357.19 620.33 T (ed to as) 377.81 620.33 T 2 F (spraying) 414.15 620.33 T 0 F (\051 acr) 449.69 620.33 T (oss all available) 468.72 620.33 T (pr) 234 608.33 T (ocessors as a means of balancing the load. Real-time pr) 243.77 608.33 T (ocessors) 485.79 608.33 T (should be r) 234 596.33 T (emoved fr) 283.63 596.33 T (om the distribution set. This is done using the) 328.84 596.33 T (dir) 234 584.33 T (ective) 246.78 584.33 T 4 9 Q (NOINTR:) 275.11 584.33 T 2 10 Q (cpu#) 314.55 584.33 T 4 9 Q ([) 336.67 584.33 T 2 10 Q (cpu#) 339.17 584.33 T 4 9 Q (]*) 358.79 584.33 T 0 10 Q ( in the) 364.78 584.33 T 4 9 Q (/var/sysgen/system/irix.sm) 394.87 584.33 T 0 10 Q ( \336le) 500.24 584.33 T 4 8 Q (.) 516.48 584.33 T 0 10 Q (After) 520.92 584.33 T (modifying) 234 572.33 T 4 9 Q (irix.sm) 282.96 572.33 T 0 10 Q (, r) 308.92 572.33 T (ebuild the kernel using the command) 317.68 572.33 T 4 9 Q (/etc/autocon\336g) 234 560.33 T (-vf) 294.95 560.33 T 4 8 Q (.) 304.94 560.33 T 4 9 Q (\245) 216 542.33 T 0 10 Q (Make sur) 234 542.33 T (e that none of the r) 275.33 542.33 T (eal-time pr) 358.23 542.33 T (ocessors is acting as the) 406.3 542.33 T 2 9 Q (clock) 512.82 542.33 T (pr) 234 530.33 T (ocessor) 241.83 530.33 T (.) 266.79 530.33 T 0 10 Q (See mpadmin\0501\051. This is the pr) 271.28 530.33 T (ocessor that \336elds 10ms) 406.11 530.33 T -0.19 (scheduler interr) 234 518.33 P -0.19 (upts, and the r) 303.96 518.33 P -0.19 (esponsibility would typically be given to) 367.48 518.33 P (pr) 234 506.33 T (ocessor 0.) 243.77 506.33 T 4 9 Q (\245) 216 488.33 T 0 10 Q (Make sur) 234 488.33 T (e none of the r) 275.33 488.33 T (eal-time pr) 338.4 488.33 T (ocessors is acting as the) 386.48 488.33 T 2 F (fasthz) 492.99 488.33 T (pr) 234 476.33 T (ocessor) 242.71 476.33 T 0 F (. See mpadmin\0501\051. This is the pr) 270.46 476.33 T (ocessor that is interr) 410.28 476.33 T (upted at) 499.4 476.33 T (the rate set by the F) 234 464.33 T (ASTHZ kernel parameter when high-pr) 319.39 464.33 T (ecision) 494.84 464.33 T (itimers ar) 234 452.33 T (e in use. If fast itimers ar) 276.14 452.33 T (e used by the r) 384.35 452.33 T (eal-time pr) 449 452.33 T (ogram, it) 497.08 452.33 T (would be best to give the fasthz interr) 234 440.33 T (upt to a dif) 401.15 440.33 T (fer) 449.81 440.33 T (ent pr) 461.7 440.33 T (ocessor than) 487.83 440.33 T (0, pr) 234 428.33 T (ovided ther) 253.77 428.33 T (e is another pr) 304.91 428.33 T (ocessor not commited to r) 368.2 428.33 T (eal-time use.) 482.37 428.33 T 1 11.5 Q (Implementing a Single FRS) 216 391.33 T 0 10 Q -0.32 (The general steps that a r) 216 366.83 P -0.32 (eal-time pr) 325.04 366.83 P -0.32 (ogram needs to carry out ar) 372.8 366.83 P -0.32 (e as follows.) 493.31 366.83 P (This model assumes a single FRS.) 216 354.83 T (1.) 216 336.83 T (The par) 234 336.83 T (ent pr) 268 336.83 T (ocess initializes any global r) 294.14 336.83 T (esour) 417.42 336.83 T (ces such as) 441.7 336.83 T (memory-mapped segments, memory ar) 234 324.83 T (enas, \336les and other objects.) 409.12 324.83 T (2.) 216 306.83 T (The par) 234 306.83 T (ent pr) 268 306.83 T (ocess locks down the addr) 294.14 306.83 T (ess space it will shar) 410.44 306.83 T (e with) 500.21 306.83 T (lightweight pr) 234 294.83 T (ocesses\321see plock\0502\051 and mpin\0502\051.) 297.39 294.83 T (3.) 216 276.83 T (The par) 234 276.83 T (ent pr) 268 276.83 T (ocess cr) 294.14 276.83 T (eates the Frame Scheduler using the call) 328 276.83 T 5 F (frs_create_master\050\051) 234 264.83 T 0 F ( \050see page) 320.04 264.83 T (20\051.) 366.03 264.83 T (4.) 216 246.83 T (The par) 234 246.83 T (ent pr) 268 246.83 T (ocess cr) 294.14 246.83 T (eates the activity pr) 328 246.83 T (ocesses using either) 414.17 246.83 T 5 F (sproc\050\051) 503.9 246.83 T 0 F (\321) 534.98 246.83 T (pr) 234 234.83 T (eferr) 243.77 234.83 T (ed\321or) 264.39 234.83 T 5 F (fork\050\051) 297.18 234.83 T 0 F (. \050If) 323.28 234.83 T 5 F (fork\050\051) 340.8 234.83 T 0 F ( is used, each child pr) 366.9 234.83 T (ocess must lock its) 462.18 234.83 T (own addr) 234 222.83 T (ess space.\051) 277.09 222.83 T (5.) 216 204.83 T -0.02 (The par) 234 204.83 P -0.02 (ent uses) 267.98 204.83 P 5 F -0.02 (frs_enqueue\050\051) 306.09 204.83 P 0 F -0.02 ( to queue each child to the FRS queue or) 369.37 204.83 P (queues on which it is to r) 234 192.83 T (un \050see page) 344.94 192.83 T (22\051.) 402.77 192.83 T 26 387.5 27 399 R V 26 351.5 27 361.5 R V FMENDPAGE %%EndPage: "12" 13 %%Page: "13" 13 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (Programming with the Frame Scheduler) 406.23 679.44 T 1 F (13) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 0 10 Q (6.) 234 632.33 T -0.3 (Each pr) 252 632.33 P -0.3 (ocess uses) 285.33 632.33 P 5 F -0.3 (frs_join\050\051) 332.18 632.33 P 0 F -0.3 ( \050page) 374.37 632.33 P -0.3 (24\051 to let the FRS know the pr) 403.75 632.33 P -0.3 (ocess is) 532.29 632.33 P (r) 252 620.33 T (eady to start r) 255.77 620.33 T (eal-time execution. This call blocks until frame) 316.89 620.33 T (scheduling begins, then r) 252 608.33 T (eturns during the \336rst frame dispatch of the) 362.88 608.33 T (pr) 252 596.33 T (ocess.) 261.77 596.33 T (7.) 234 578.33 T (The par) 252 578.33 T (ent pr) 286 578.33 T (ocess uses) 312.14 578.33 T 5 F (frs_start\050\051) 359.58 578.33 T 0 F ( \050page) 403.43 578.33 T (25\051 to enable scheduling. The) 433.1 578.33 T -0.38 (Frame Scheduler will start scheduling pr) 252 566.33 P -0.38 (ocesses as soon as all pr) 429.9 566.33 P -0.38 (ocesses) 532.7 566.33 P (have called) 252 554.33 T 5 F (frs_join\050\051) 304.39 554.33 T 0 F (.) 346.58 554.33 T (8.) 234 536.33 T (After completing its work for a minor frame, a pr) 252 536.33 T (ocess calls) 469.09 536.33 T 5 F (frs_yield\050\051) 516.73 536.33 T 0 F (\050page) 252 524.33 T (26\051 to yield the pr) 279.17 524.33 T (ocessor until its next scheduled dispatch.) 357.11 524.33 T (9.) 234 506.33 T (The par) 252 506.33 T (ent pr) 286 506.33 T (ocess waits for err) 312.14 506.33 T (or and termination signals fr) 391.76 506.33 T (om the) 517.82 506.33 T (Frame Scheduler and other pr) 252 494.33 T (ocesses.) 384.14 494.33 T (10.) 234 476.33 T (T) 252 476.33 T (o terminate frame scheduling, any pr) 257.21 476.33 T (ocess calls) 420.88 476.33 T 5 F (frs_destroy\050\051) 468.52 476.33 T 0 F (\050page) 252 464.33 T (32\051.) 279.17 464.33 T (In the typical r) 234 440.33 T (eal-time pr) 298.39 440.33 T (ogram the r) 346.46 440.33 T (eal-time pr) 397.87 440.33 T (ocesses ar) 445.94 440.33 T (e lightweight) 489.39 440.33 T -0.65 (pr) 234 428.33 P -0.65 (ocesses cr) 243.77 428.33 P -0.65 (eated with spr) 286.01 428.33 P -0.65 (oc\050\051. However) 347.98 428.33 P -0.65 (, this is not a r) 409.41 428.33 P -0.65 (estriction of the Frame) 467.82 428.33 P (Scheduler) 234 416.33 T (. The Frame Scheduler can manage pr) 277.33 416.33 T (ocesses cr) 443.73 416.33 T (eated with fork\050\051.) 486.62 416.33 T (Mor) 234 404.33 T (eover) 252.68 404.33 T (, the r) 276.57 404.33 T (eal-time pr) 301.69 404.33 T (ocesses do not have to be child pr) 349.77 404.33 T (ocesses of the) 497.77 404.33 T (frs-master pr) 234 392.33 T (ocess. For an example, see \322Example of Scheduling Separate) 291.17 392.33 T (Pr) 234 380.33 T (ograms\323 on page) 243.8 380.33 T (39.) 321.94 380.33 T 1 11.5 Q (Implementing Multiple Synchronized Schedulers) 234 343.33 T 0 10 Q (When the r) 234 318.83 T (eal-time application r) 283.04 318.83 T (equir) 377.31 318.83 T (es the power of multiple CPUs, the) 400.4 318.83 T (pr) 234 306.83 T (ogram design is only slightly dif) 243.77 306.83 T (fer) 386.67 306.83 T (ent fr) 398.55 306.83 T (om that shown above. The) 422.01 306.83 T -0.69 (pr) 234 294.83 P -0.69 (ogram will cr) 243.77 294.83 P -0.69 (eate multiple FRSs, one master and one or mor) 301.45 294.83 P -0.69 (e slaves. Ther) 502.17 294.83 P -0.69 (e) 560.4 294.83 P -0.26 (is a r) 234 282.83 P -0.26 (estriction that each FRS must have a unique frs-master pr) 254.38 282.83 P -0.26 (ocess. That is,) 504.79 282.83 P (one pr) 234 270.83 T (ocess can cr) 262.33 270.83 T (eate only one FRS, master or slave.) 313.95 270.83 T (A variety of designs is possible but the simplest is pr) 234 246.83 T (obably to r) 466.28 246.83 T (eplicate the) 513.74 246.83 T (model in the pr) 234 234.83 T (eceding section, as follows:) 301.94 234.83 T (1.) 234 216.83 T (The par) 252 216.83 T (ent pr) 286 216.83 T (ocess initializes any global r) 312.14 216.83 T (esour) 435.42 216.83 T (ces such as) 459.7 216.83 T (memory-mapped segments, memory ar) 252 204.83 T (enas, \336les and other objects.) 427.12 204.83 T (One of these global r) 252 192.83 T (esour) 343.25 192.83 T (ces is the pr) 367.53 192.83 T (ocess ID of the par) 419.27 192.83 T (ent pr) 500.94 192.83 T (ocess.) 527.08 192.83 T (2.) 234 174.83 T (The par) 252 174.83 T (ent pr) 286 174.83 T (ocess locks down the addr) 312.14 174.83 T (ess space it will shar) 428.44 174.83 T (e with) 518.21 174.83 T (lightweight pr) 252 162.83 T (ocesses\321see plock\0502\051 and mpin\0502\051.) 315.39 162.83 T 44 575 45 585 R V 44 159.5 45 483 R V FMENDPAGE %%EndPage: "13" 14 %%Page: "14" 14 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (14) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 0 10 Q (3.) 216 632.33 T (The par) 234 632.33 T (ent pr) 268 632.33 T (ocess cr) 294.14 632.33 T (eates the Frame Scheduler using the call) 328 632.33 T 5 F (frs_create_master\050\051) 234 620.33 T 0 F (, and stor) 320.04 620.33 T (es its handle in a global location.) 361.18 620.33 T (4.) 216 602.33 T -0.15 (The par) 234 602.33 P -0.15 (ent pr) 267.85 602.33 P -0.15 (ocess cr) 293.84 602.33 P -0.15 (eates one sub-par) 327.55 602.33 P -0.15 (ent pr) 404.28 602.33 P -0.15 (ocess for each pr) 430.26 602.33 P -0.15 (ocessor to) 503.02 602.33 P (be used.) 234 590.33 T (5.) 216 572.33 T (Each sub-par) 234 572.33 T (ent cr) 291.75 572.33 T (eates a Frame Scheduler using) 316.32 572.33 T 5 F (frs_create_slave\050\051) 452.6 572.33 T 0 F (,) 531.43 572.33 T (specifying information about the master FRS.) 234 560.33 T (Now the par) 216 536.33 T (ent and each sub-par) 271.73 536.33 T (ent pr) 363.94 536.33 T (oceed to cr) 390.07 536.33 T (eate and enqueue the) 437.57 536.33 T (r) 216 524.33 T (eal-time pr) 219.77 524.33 T (ocesses that will be dispatched. When all pr) 267.84 524.33 T (ocesses ar) 460.39 524.33 T (e) 503.83 524.33 T (enqueued, the par) 216 512.33 T (ent and sub-par) 296.07 512.33 T (ents each start their r) 365.74 512.33 T (espective FRS. Each) 458.06 512.33 T (r) 216 500.33 T (eal-time pr) 219.77 500.33 T (ocess begins with and) 267.84 500.33 T 5 F (frs_join\050\051) 367.07 500.33 T 0 F ( call to its assigned FRS.) 409.25 500.33 T (For an example of this kind of pr) 216 476.33 T (ogram str) 360.69 476.33 T (uctur) 403.34 476.33 T (e, r) 426.85 476.33 T (efer to \322Example of) 440.41 476.33 T (Multiple Synchr) 216 464.33 T (onized Schedulers\323 on page) 287.4 464.33 T (41.) 413.39 464.33 T 1 12 Q (Frame Scheduler Methods) 45 423 T 0 10 Q (This section describes the details of the concepts and abstractions that the) 216 397.33 T (Frame Scheduler uses.) 216 385.33 T 1 11.5 Q (Interrupt Sources) 216 348.33 T 0 10 Q -0.54 (The pr) 216 323.83 P -0.54 (ogram speci\336es an interr) 244.46 323.83 P -0.54 (upt sour) 351.98 323.83 P -0.54 (ce to be the time base when it cr) 388.72 323.83 P -0.54 (eates) 524.97 323.83 P (the master FRS. The Frame Scheduler takes car) 216 311.83 T (e of initializing har) 422.34 311.83 T (dwar) 505.88 311.83 T (e) 529.09 311.83 T (r) 216 299.83 T (esour) 219.77 299.83 T (ces and r) 244.04 299.83 T (edir) 283.19 299.83 T (ecting the interr) 300.76 299.83 T (upt to the appr) 370.98 299.83 T (opriate pr) 437.12 299.83 T (ocessor and) 480.75 299.83 T (handler) 216 287.83 T (.) 249.64 287.83 T 1 9.5 Q (On-Chip T) 216 260.17 T (imer Interrupt) 261.7 260.17 T 0 10 Q (Each pr) 216 236.33 T (ocessor chip contains a USYNC timer which is used by IRIX for) 249.63 236.33 T (normal pr) 216 224.33 T (ocess scheduling. This timer is not synchr) 260.23 224.33 T (onized between) 443.61 224.33 T (pr) 216 212.33 T (ocessors, so it cannot be used to drive multiple FRSs in a master) 225.77 212.33 T (-slave) 507.23 212.33 T (r) 216 200.33 T (elationship. This timer can be used as an FRS time-base when the) 219.77 200.33 T (application cr) 216 188.33 T (eates only one FRS and ther) 276.41 188.33 T (e is a r) 398.8 188.33 T (eason to not use the SYNC) 426.99 188.33 T (timer) 216 176.33 T (.) 238.99 176.33 T 26 461 27 639 R V 26 233 27 266.5 R V FMENDPAGE %%EndPage: "14" 15 %%Page: "15" 15 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (Frame Scheduler Methods) 461.92 679.44 T 1 F (15) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 1 9.5 Q (High-Resolution T) 234 632.67 T (imer) 315.56 632.67 T 0 10 Q -0.2 (The high-r) 234 608.83 P -0.2 (esolution timer and clock is a timer that is synchr) 280.22 608.83 P -0.2 (onous acr) 495.17 608.83 P -0.2 (oss all) 537.66 608.83 P -0.37 (pr) 234 596.83 P -0.37 (ocessors, and is ideal to drive synchr) 243.77 596.83 P -0.37 (onous FRSs. On Challenge and Onyx) 403.37 596.83 P (systems this timer is based on a high r) 234 584.83 T (esolution counter found on the CC) 402.02 584.83 T (chip.) 234 572.83 T -0.07 (The IRIX uses this timer for managing timeout events. At cr) 234 548.83 P -0.07 (eation time, the) 496.35 548.83 P -0.55 (master FRS migrates all timeout events dependent on this timer to pr) 234 536.83 P -0.55 (ocessor) 532.49 536.83 P (0, leaving the timer on the FRS pr) 234 524.83 T (ocessor fr) 381.59 524.83 T (ee.) 423.75 524.83 T 1 9.5 Q (External Interrupts) 234 497.17 T 0 10 Q (An external interr) 234 473.33 T (upt is generated via a signal applied to the external) 312.84 473.33 T (interr) 234 461.33 T (upt sockets on a Challenge or Onyx system \050r) 258.59 461.33 T (efer to ei\0507\051 for details\051.) 458.57 461.33 T -0.12 (At FRS cr) 234 449.33 P -0.12 (eation time, the system allocates an interr) 275.47 449.33 P -0.12 (upt gr) 457.39 449.33 P -0.12 (oup which is used) 484.38 449.33 P (to make the interr) 234 437.33 T (upt simultaneously available to all pr) 312.83 437.33 T (ocessors r) 477.55 437.33 T (unning) 520.71 437.33 T (r) 234 425.33 T (elated FRSs.) 237.77 425.33 T 4 9 Q (Note:) 234 401.33 T 0 10 Q (External output signals can be generated by softwar) 260.48 401.33 T (e using) 489.72 401.33 T 5 F (ioctl\050\051) 524.05 401.33 T 0 F ( to) 550.69 401.33 T (the external interr) 234 389.33 T (upt driver) 313.11 389.33 T (. An imaginative designer might think of) 357.5 389.33 T (connecting the external output jacks to the external interr) 234 377.33 T (upt input jacks,) 486.23 377.33 T (thus cr) 234 365.33 T (eating softwar) 264.04 365.33 T (e-contr) 327.25 365.33 T (olled external interr) 358.1 365.33 T (upts as an FRS time base.) 445.51 365.33 T -0.2 (This would work in principle. However) 234 353.33 P -0.2 (, if the interr) 408.21 353.33 P -0.2 (upts ar) 462.29 353.33 P -0.2 (e generated by a) 492.89 353.33 P (user pr) 234 341.33 T (ocess that makes any other system calls, ther) 265.27 341.33 T (e is a possibility of) 461.82 341.33 T (system deadlock.) 234 329.33 T 1 9.5 Q (V) 234 301.67 T (ertical Sync Interrupt) 239.81 301.67 T 0 10 Q (An interr) 234 277.83 T (upt is generated for every vertical r) 274.68 277.83 T (etrace by the graphics) 430.27 277.83 T -0.64 (subsystem \050see gsync\0503g\051 for details\051. Similar to what is done for the external) 234 265.83 P -0.74 (interr) 234 253.83 P -0.74 (upts, the Frame Scheduler allocates an interr) 258.59 253.83 P -0.74 (upt gr) 450.58 253.83 P -0.74 (oup to distribute the) 476.95 253.83 P (VSYNC interr) 234 241.83 T (upt.) 295.61 241.83 T 1 9.5 Q (Device Driver Interrupt) 234 214.17 T 0 10 Q (A user) 234 190.33 T (-written, kernel-level device driver can supply the FRS time-base) 263.09 190.33 T -0.7 (interr) 234 178.33 P -0.7 (upt. See \322The Frame Scheduler DDI\323 on page) 258.59 178.33 P -0.7 (33. The Frame Scheduler) 458.42 178.33 P (allocates an interr) 234 166.33 T (upt gr) 312.39 166.33 T (oup to which the device driver must dir) 339.5 166.33 T (ect) 515.53 166.33 T (interr) 234 154.33 T (upts.) 258.59 154.33 T 44 605.5 45 639 R V 44 470 45 503.5 R V 44 262.5 45 408 R V 44 187 45 220.5 R V FMENDPAGE %%EndPage: "15" 16 %%Page: "16" 16 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (16) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 1 9.5 Q (Software Interrupt) 216 632.67 T 0 10 Q -0.01 (A pr) 216 608.83 P -0.01 (ogrammed, softwar) 236.04 608.83 P -0.01 (e-generated interr) 322.91 608.83 P -0.01 (upt can be used as the time base.) 402.15 608.83 P (Any user pr) 216 596.83 T (ocess can send this interr) 268.92 596.83 T (upt to the gr) 379.08 596.83 T (oup of synchr) 433.77 596.83 T (onous FRSs) 494.68 596.83 T (using the call) 216 584.83 T 5 F (frs_userintr\050\051) 277.16 584.83 T 0 F ( \050see \322Delivering T) 337.1 584.83 T (ime-Base Interr) 419.32 584.83 T (upts to a) 486.84 584.83 T (Frame Scheduler\323 on page) 216 572.83 T (28\051.) 335.79 572.83 T (When a user cr) 216 548.83 T (eates an FRS with this interr) 282.11 548.83 T (upt sour) 406.1 548.83 T (ce, the system allocates) 443.37 548.83 T (an interr) 216 536.83 T (upt gr) 253.9 536.83 T (oup that is used to send the interr) 281.01 536.83 T (upt simultaneously to all) 429.74 536.83 T (pr) 216 524.83 T (ocessors involved in the execution of the r) 225.77 524.83 T (eal-time application.) 410.98 524.83 T (Softwar) 216 500.83 T (e interr) 250.39 500.83 T (upts ar) 282.26 500.83 T (e primarily intended for application debugging. It is) 313.06 500.83 T (not feasible for a user pr) 216 488.83 T (ocess to generate interr) 323.01 488.83 T (upts with the kind of) 424.9 488.83 T (r) 216 476.83 T (egularity that a r) 219.77 476.83 T (eal-time scheduler r) 293.31 476.83 T (equir) 380.93 476.83 T (es.) 404.02 476.83 T 4 9 Q -0.22 (Note:) 216 452.83 P 0 10 Q -0.22 (User interr) 242.04 452.83 P -0.22 (upts ar) 289.66 452.83 P -0.22 (e normally trigger) 320.24 452.83 P -0.22 (ed by a pr) 399.79 452.83 P -0.22 (ocess r) 443.38 452.83 P -0.22 (unning on cpu 0.) 472.69 452.83 P (This can lead to system deadlock if the user pr) 216 440.83 T (ocess generating the) 420.48 440.83 T (interr) 216 428.83 T (upts issues system calls other than) 240.59 428.83 T 5 F (frs_userintr\050\051) 395.09 428.83 T 0 F (.) 455.04 428.83 T 1 11.5 Q (Interrupt Isolation) 216 391.83 T 0 10 Q (When an FRS is cr) 216 367.33 T (eated on a pr) 296.06 367.33 T (ocessor and the r) 353.53 367.33 T (eal-time event interr) 428.14 367.33 T (upt is) 517.82 367.33 T -0.26 (set, all other interr) 216 355.33 P -0.26 (upts ar) 296.16 355.33 P -0.26 (e either shut of) 326.69 355.33 P -0.26 (f or r) 391.64 355.33 P -0.26 (edir) 412.61 355.33 P -0.26 (ected, except for some I/O) 430.18 355.33 P (interr) 216 343.33 T (upts if the pr) 240.59 343.33 T (ocessor belongs to the set of pr) 297.48 343.33 T (ocessors that ar) 432.75 343.33 T (e) 500.64 343.33 T 0 9 Q (sprayable) 507.93 343.33 T 0 10 Q (\050see \322Pr) 216 331.33 T (eparing the System\323 on page) 250.44 331.33 T (1) 380.35 331.33 T (1\051.) 384.8 331.33 T 1 11.5 Q (Interrupt Synchronization) 216 294.33 T 0 10 Q (Frame Schedulers r) 216 269.83 T (unning on dif) 301.28 269.83 T (fer) 361.66 269.83 T (ent pr) 373.54 269.83 T (ocessors can be synchr) 399.68 269.83 T (onized. T) 499.17 269.83 T (o) 539.45 269.83 T (make this possible, Frame Schedulers ar) 216 257.83 T (e categorized as synchr) 392.63 257.83 T (onization) 495.03 257.83 T (masters or synchr) 216 245.83 T (onization slaves. The synchr) 294.33 245.83 T (onization type of an FRS is) 419.12 245.83 T -0.17 (speci\336ed at cr) 216 233.83 P -0.17 (eation time via the) 276.44 233.83 P 2 F -0.17 (sync_master) 360.19 233.83 P 0 F -0.17 ( parameter of) 410.9 233.83 P 5 F -0.17 (frs_create\050\051) 472.24 233.83 P 0 F -0.17 (. This) 522.75 233.83 P -0.47 (takes the value FRS_SYNC_MASTER for the master FRS, and the pr) 216 221.83 P -0.47 (ocess ID) 510.68 221.83 P (of the pr) 216 209.83 T (ocess that cr) 253.42 209.83 T (eated the master FRS when cr) 307.11 209.83 T (eating a slave FRS.) 437.9 209.83 T (The master FRS acts as a r) 216 185.83 T (epr) 330.19 185.83 T (esentative for the whole gr) 344.75 185.83 T (oup of FRSs. It) 462.45 185.83 T (allocates the interr) 216 173.83 T (upt gr) 297.43 173.83 T (oup they will use. It also synchr) 324.55 173.83 T (onizes the startup) 464.92 173.83 T (pr) 216 161.83 T (ocedur) 225.77 161.83 T (e: it waits for all its slaves to be r) 256.36 161.83 T (eady to start r) 399.6 161.83 T (eal-time execution,) 460.73 161.83 T 26 605.5 27 639 R V 26 425.5 27 507.5 R V FMENDPAGE %%EndPage: "16" 17 %%Page: "17" 17 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (Frame Scheduler Methods) 461.92 679.44 T 1 F (17) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 0 10 Q -0.71 (which happens only when every slave has done an) 234 632.33 P 5 F -0.71 (frs_start\050\051) 454.93 632.33 P 0 F -0.71 ( and all queued) 498.77 632.33 P (pr) 234 620.33 T (ocesses have called) 243.77 620.33 T 5 F (frs_join\050\051) 330.85 620.33 T 0 F (.) 373.03 620.33 T -0.39 (After the startup pr) 234 596.33 P -0.39 (ocedur) 318.8 596.33 P -0.39 (e, the frames ar) 349.38 596.33 P -0.39 (e kept synchr) 415.75 596.33 P -0.39 (onous via one of two) 474 596.33 P (mechanisms, depending on the interr) 234 584.33 T (upt sour) 399 584.33 T (ce. For the SYNC T) 436.28 584.33 T (imer) 519.7 584.33 T (, all) 539.43 584.33 T -0.57 (FRS\325s use the same CC Counter Base and clock. For the user) 234 572.33 P -0.57 (, external, driver) 491.45 572.33 P -0.57 (,) 562.57 572.33 P -0.75 (and vsync interr) 234 560.33 P -0.75 (upts, the frame schedulers use interr) 304.7 560.33 P -0.75 (upt gr) 462.16 560.33 P -0.75 (oups to br) 488.52 560.33 P -0.75 (oadcast) 531.76 560.33 P (one interr) 234 548.33 T (upt to several pr) 277.15 548.33 T (ocessors simultaneously) 349.74 548.33 T (.) 455.88 548.33 T 1 11.5 Q (Startup Synchronization) 234 511.33 T 0 10 Q (A Frame Scheduler cannot start r) 234 486.83 T (eal-time execution until all its managed) 379.7 486.83 T (pr) 234 474.83 T (ocesses have done their own initial setup and ar) 243.77 474.83 T (e r) 455.4 474.83 T (eady to r) 466.45 474.83 T (un their) 505.48 474.83 T (r) 234 462.83 T (eal-time loop. When) 237.77 462.83 T 5 F (frs_start\050\051) 329.81 462.83 T 0 F (is invoked in or) 376.15 462.83 T (der to trigger the startup) 445.02 462.83 T -0.14 (pr) 234 450.83 P -0.14 (ocedur) 243.77 450.83 P -0.14 (e, the FRS waits for all pr) 274.36 450.83 P -0.14 (ocesses in its queues to invoke) 384.17 450.83 P 5 F -0.14 (frs_join\050\051) 519.96 450.83 P 0 F -0.14 (.) 562.15 450.83 P -0.67 (When this state is r) 234 438.83 P -0.67 (eached the FRS waits for the next r) 315.42 438.83 P -0.67 (eal-time interr) 463.64 438.83 P -0.67 (upt, then) 525.86 438.83 P (pr) 234 426.83 T (oceeds to schedule the pr) 243.77 426.83 T (ocesses as speci\336ed in the queues.) 355.04 426.83 T (The pr) 234 402.83 T (ocess that cr) 263 402.83 T (eates a frame scheduler becomes the) 316.7 402.83 T 2 F ( frs-master pr) 477.12 402.83 T (ocess) 531.91 402.83 T 0 F (.) 552.08 402.83 T (This pr) 234 390.83 T (ocess may not be frame scheduled \050that is, enqueued on any of the) 265.36 390.83 T (minor frames queues\051. The frs-master pr) 234 378.83 T (ocess becomes the r) 412.26 378.83 T (epr) 498.61 378.83 T (esentative) 513.17 378.83 T (for an FRS, and is sent all the err) 234 366.83 T (or and termination signals that ar) 376.86 366.83 T (e sent to) 524.42 366.83 T (the pr) 234 354.83 T (ocesses in the FRS queues.) 260.14 354.83 T 1 11.5 Q (Scheduling W) 234 317.83 T (ithin A Minor Frame) 309.87 317.83 T 0 10 Q (Pr) 234 293.33 T (ocesses in a minor frame queue ar) 243.8 293.33 T (e activated in queue or) 393.53 293.33 T (der) 493.89 293.33 T (. \050Initially) 507.99 293.33 T (queue or) 234 281.33 T (der is the or) 272.95 281.33 T (der in which pr) 325.52 281.33 T (ocesses wer) 393.67 281.33 T (e named in) 445.24 281.33 T 5 F (frs_enqueue\050\051) 496.79 281.33 T 0 F -0.6 (calls. The queues can be r) 234 269.33 P -0.6 (eor) 343.02 269.33 P -0.6 (der) 357.03 269.33 P -0.6 (ed dynamically; see \322Dynamic Management) 371.7 269.33 P (of Scheduler Queues\323 on page) 234 257.33 T (30.\051) 370.68 257.33 T (The FRS keeps two status \337ags per queued pr) 234 233.33 T (ocess. If a pr) 435.36 233.33 T (ocess is r) 489.98 233.33 T (eady to) 529.05 233.33 T (r) 234 221.33 T (un when its turn comes, it is activated and its) 237.87 221.33 T 2 F (frs_run) 440.19 221.33 T 0 F ( \337ag is set to indicate) 470.74 221.33 T (that this pr) 234 209.33 T (ocess has r) 282.32 209.33 T (un at least once within this minor frame.) 329.4 209.33 T -0.16 (When a pr) 234 185.33 P -0.16 (ocess yields, its) 279.86 185.33 P 2 F -0.16 (frs_yield) 349.45 185.33 P 0 F -0.16 ( \337ag is set to indicate that the pr) 384.44 185.33 P -0.16 (ocess has) 524.11 185.33 P -0.14 (alr) 234 173.33 P -0.14 (eady r) 245.67 173.33 P -0.14 (un and r) 273.35 173.33 P -0.14 (eleased the pr) 310.6 173.33 P -0.14 (ocessor) 371.56 173.33 P -0.14 (. It will not be activated again within) 403.38 173.33 P (this minor frame.) 234 161.33 T FMENDPAGE %%EndPage: "17" 18 %%Page: "18" 18 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (18) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 0 10 Q (If a pr) 216 632.33 T (ocess is not r) 242.46 632.33 T (eady \050usually because it is blocked waiting for IO\051, it is) 298.57 632.33 T -0.44 (skipped. Upon r) 216 620.33 P -0.44 (eaching the end of the queue, the scheduler goes back to the) 287.04 620.33 P (beginning, in a r) 216 608.33 T (ound-r) 288.18 608.33 T (obin fashion, sear) 318.68 608.33 T (ching for pr) 396.24 608.33 T (ocesses that have not) 448.28 608.33 T -0.28 (yielded and may have become r) 216 596.33 P -0.28 (eady to r) 355.37 596.33 P -0.28 (un. If no r) 393.83 596.33 P -0.28 (eady to r) 436.55 596.33 P -0.28 (un pr) 475.01 596.33 P -0.28 (ocesses ar) 498.84 596.33 P -0.28 (e) 542 596.33 P -0.63 (found, the FRS goes into idle mode until a pr) 216 584.33 P -0.63 (ocess becomes available or until) 408.44 584.33 P (the end of the frame.) 216 572.33 T (When a r) 216 548.33 T (eal-time interr) 256.18 548.33 T (upt is r) 319.06 548.33 T (eceived, indicating end of minor frame, the) 350.27 548.33 T -0.52 (FRS checks the \337ags for each pr) 216 536.33 P -0.52 (ocesse. If the) 351.89 536.33 P 2 F -0.52 (frs_run) 408.83 536.33 P 0 F -0.52 ( \337ag has not been set, the) 439.38 536.33 P (pr) 216 524.33 T (ocess never ran and ther) 225.77 524.33 T (efor) 333.23 524.33 T (e is a candidate for an) 350.57 524.33 T 2 F (underrun) 449.45 524.33 T 0 F ( err) 488.34 524.33 T (or) 503.34 524.33 T (. If the) 512.01 524.33 T 2 F -0.5 (frs_run) 216 512.33 P 0 F -0.5 ( \337ag is set and the) 246.55 512.33 P 2 F -0.5 (frs_yield) 325.36 512.33 P 0 F -0.5 ( \337ag is not, the pr) 360.35 512.33 P -0.5 (ocess is a candidate for an) 434.77 512.33 P 2 F -0.08 (overrun) 216 500.33 P 0 F -0.08 ( err) 248.21 500.33 P -0.08 (or) 263.14 500.33 P -0.08 (. Whether these err) 271.8 500.33 P -0.08 (ors ar) 355.36 500.33 P -0.08 (e declar) 380.2 500.33 P -0.08 (ed depends on the scheduling) 414.41 500.33 P (discipline assigned to a pr) 216 488.33 T (ocess \050see \322Frame Scheduling Disciplines\323 on) 331.16 488.33 T (page) 216 476.33 T (9\051.) 239.85 476.33 T -0.09 (At the end of a minor frame, the FRS r) 216 452.33 P -0.09 (esets all) 383.55 452.33 P 2 F -0.09 (frs_run) 420.49 452.33 P 0 F -0.09 ( \337ags. It also r) 451.05 452.33 P -0.09 (esets all) 512.05 452.33 P 2 F -0.71 (frs_yield) 216 440.33 P 0 F -0.71 ( \337ags except for those of pr) 250.99 440.33 P -0.71 (ocesses that ar) 365.85 440.33 P -0.71 (e Continuable in that minor) 427.69 440.33 P (frame. For those pr) 216 428.33 T (ocesses, the r) 300.17 428.33 T (esidual) 357.48 428.33 T 2 F (frs_yield) 391.95 428.33 T 0 F ( \337ags will keep pr) 426.94 428.33 T (ocesses) 505.78 428.33 T (that have yielded fr) 216 416.33 T (om being dispatched in the next minor frame. All) 302.33 416.33 T (frs_yield \337ags ar) 216 404.33 T (e r) 289.41 404.33 T (eset at the end of a major frame.) 300.46 404.33 T (Underr) 216 380.33 T (un and overr) 248.3 380.33 T (un err) 305.77 380.33 T (ors ar) 332.62 380.33 T (e communicated via IRIX signals\0505\051. These) 357.52 380.33 T (signals ar) 216 368.33 T (e sent to) 257.93 368.33 T 2 F (all) 297.02 368.33 T 0 F ( pr) 307.02 368.33 T (ocesses in the FRS queues \050see \322Frame Scheduler) 319.29 368.33 T (Signals\323 on page) 216 356.33 T (18\051.) 292.79 356.33 T 1 11.5 Q (Frame Scheduler Signals) 216 319.33 T 0 10 Q (The frame scheduler uses 3 signals. By default they ar) 216 294.83 T (e set as follows:) 452.87 294.83 T 4 9 Q (\245) 216 276.83 T 0 10 Q (Overr) 234 276.83 T (un Signal is SIGUSR2) 260.11 276.83 T 4 9 Q (\245) 216 258.83 T 0 10 Q (Underr) 234 258.83 T (un Signal is SIGUSR1) 266.3 258.83 T 4 9 Q (\245) 216 240.83 T 0 10 Q (T) 234 240.83 T (ermination Signal is SIGHUP) 239.21 240.83 T (Signals ar) 216 216.83 T (e sent to all queued pr) 258.94 216.83 T (ocesses and to the frs-master pr) 356.95 216.83 T (ocess. The) 495.8 216.83 T (overr) 216 204.83 T (un and underr) 239.71 204.83 T (un signals ar) 304.02 204.83 T (e sent following detection of those err) 360.29 204.83 T (ors.) 526.51 204.83 T (The termination signal is sent after invocation of) 216 192.83 T 5 F (frs_destroy\050\051) 432.18 192.83 T 0 F (.) 489.92 192.83 T (Signals ar) 216 168.83 T (e deliver) 258.94 168.83 T (ed to pr) 297.14 168.83 T (ocesses during kernel-to-user transitions. In) 331.52 168.83 T (timeshar) 216 156.83 T (ed mode these transitions happen at least once every scheduler) 254.6 156.83 T 26 401 27 447 R V FMENDPAGE %%EndPage: "18" 19 %%Page: "19" 19 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (The Frame Scheduler API) 464.36 679.44 T 1 F (19) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 0 10 Q (clock interr) 234 632.33 T (upt \05010 ms for Irix\051. However) 283.88 632.33 T (, while in frame scheduler mode,) 412.53 632.33 T (these transitions ar) 234 620.33 T (e mor) 317.49 620.33 T (e sporadic; they only happen at minor frame) 342.83 620.33 T (boundaries and pr) 234 608.33 T (ocesses context switches due to system calls or yielding.) 315.51 608.33 T 1 12 Q (The Frame Scheduler API) 63 567 T 0 10 Q (The authorized pr) 234 541.33 T (ogramming interface \050API\051 to the Frame Scheduler is) 313.81 541.33 T (composed of system calls, which ar) 234 529.33 T (e available to either C or FOR) 389.56 529.33 T (TRAN) 519.45 529.33 T (pr) 234 517.33 T (ograms, and library calls, which pr) 243.77 517.33 T (ovide a C pr) 397.58 517.33 T (ogram with a mor) 451.84 517.33 T (e) 531.49 517.33 T -0.43 (convenient interface to the system calls. Calls ar) 234 505.33 P -0.43 (e pr) 441.83 505.33 P -0.43 (ovided for the following) 458.45 505.33 P (operations:) 234 493.33 T 4 9 Q (\245) 234 475.33 T 0 10 Q (Cr) 252 475.33 T (eating a master or slave Frame Scheduler) 262.85 475.33 T 4 9 Q (\245) 234 457.33 T 0 10 Q (Enqueuing pr) 252 457.33 T (ocesses to a Frame Scheduler) 312.92 457.33 T 4 9 Q (\245) 234 439.33 T 0 10 Q (Joining a Frame Scheduler) 252 439.33 T 4 9 Q (\245) 234 421.33 T 0 10 Q (Y) 252 421.33 T (ielding contr) 258.12 421.33 T (ol at the end of a frame) 314.35 421.33 T 4 9 Q (\245) 234 403.33 T 0 10 Q (Delivering user) 252 403.33 T (-de\336ned time-base interr) 320.32 403.33 T (upts) 429.54 403.33 T 4 9 Q (\245) 234 385.33 T 0 10 Q (Stopping and r) 252 385.33 T (esuming Frame Schedulers) 317.94 385.33 T 4 9 Q (\245) 234 367.33 T 0 10 Q (Dynamic Management of scheduler queues) 252 367.33 T 4 9 Q (\245) 234 349.33 T 0 10 Q (Destr) 252 349.33 T (oying a Frame Scheduler) 275.79 349.33 T FMENDPAGE %%EndPage: "19" 20 %%Page: "20" 20 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (20) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 1 11.5 Q (Creating a Master or Slave Frame Scheduler) 216 631.33 T 2 9.5 Q (Data Structur) 45 619.17 T (es) 99.57 619.17 T 4 8 Q (typedef struct frs_fsched_info {) 216 604.67 T (int) 246 593.67 T (cpu;) 276 593.67 T (int) 246 582.67 T (intr_source;) 276 582.67 T (int) 246 571.67 T (intr_qualifier;) 276 571.67 T (int) 246 560.67 T (n_minors;) 276 560.67 T (int) 246 549.67 T (sync_master;) 276 549.67 T (int*) 246 538.67 T (sync_slaves;) 276 538.67 T (int) 246 527.67 T (num_slaves;) 276 527.67 T (} frs_fsched_info_t;) 216 516.67 T (typedef struct frs {) 216 505.67 T (frs_fsched_info_t) 246 494.67 T (frs_info;) 306.89 494.67 T (int) 246 483.67 T (sync_master_pid;) 306 483.67 T (} frs_t;) 216 472.67 T 2 9.5 Q (System Call) 45 463.67 T 4 8 Q (int) 216 449.17 T (schedctl) 246 449.17 T (\050) 277.55 449.17 T (MPTS_FRS_CREATE, frs_fsched_info_t* frs_fsched_info) 282.44 449.17 T (\051) 489.07 449.17 T (;) 493.95 449.17 T 2 9.5 Q (Library Calls) 45 440.17 T 4 8 Q (frs_t*) 216 425.67 T (frs_create) 246 425.67 T (\050) 283.77 425.67 T (int cpu,) 288.66 425.67 T (int intr_source, int intr_qualifier, int n_minors,) 314.43 425.67 T (int sync_master_pid, int* sync_slaves, int num_slaves) 306 414.67 T (\051) 498.85 414.67 T (;) 503.74 414.67 T (frs_t*) 216 403.67 T (frs_create_master) 246 403.67 T (\050) 312.65 403.67 T (int cpu, int intr_source, int intr_qualifier, int n_minors,) 317.54 403.67 T (int* sync_slaves, int num_slaves) 306 392.67 T (\051) 423.31 392.67 T (;) 428.2 392.67 T (frs_t*) 216 370.67 T (frs_create_slave) 246 370.67 T (\050) 306.88 370.67 T (int cpu, frs_t* sync_master_frs) 311.76 370.67 T (\051) 421.52 370.67 T (;) 426.4 370.67 T 0 10 Q (A Frame Scheduler can be cr) 216 338.33 T (eated using any of the calls above. Both) 342.22 338.33 T 5 F (schedctl\050\051) 216 326.33 T 0 F ( and) 259.84 326.33 T 5 F (frs_create\050\051) 281.75 326.33 T 0 F ( allow for the cr) 332.27 326.33 T (eation of either kind of FRS.) 401.67 326.33 T -0.37 (The pr) 216 302.33 P -0.37 (ocess that cr) 244.63 302.33 P -0.37 (eates an FRS becomes the frs-master pr) 297.58 302.33 P -0.37 (ocess for that FRS.) 467.29 302.33 P (The pr) 216 290.33 T (ocess ID of the frs-master serves to identify the master FRS. As a) 245 290.33 T (r) 216 278.33 T (esult, the frs-master pr) 219.77 278.33 T (ocess is r) 319.51 278.33 T (estricted in several ways:) 358.58 278.33 T 4 9 Q (\245) 216 260.33 T 0 10 Q (That pr) 234 260.33 T (ocess cannot cr) 266.47 260.33 T (eate another FRS. Y) 332.62 260.33 T (ou must cr) 417.75 260.33 T (eate a separate) 464.78 260.33 T (pr) 234 248.33 T (ocess \050usually with) 243.77 248.33 T 5 F (sproc\050\051) 330.74 248.33 T 0 F (\051 for each FRS, master or slave.) 361.82 248.33 T 4 9 Q (\245) 216 230.33 T 0 10 Q (The frs-master pr) 234 230.33 T (ocess cannot be enqueued on any FRS.) 310.4 230.33 T 4 9 Q (\245) 216 212.33 T 0 10 Q (The frs-master r) 234 212.33 T (eceives the signals generated by its FRS.) 304.39 212.33 T (The call) 216 188.33 T 5 F (frs_create_master\050\051) 252.98 188.33 T 0 F ( is a wrapper that uses) 339.02 188.33 T 5 F (frs_create\050\051) 440.81 188.33 T 0 F ( to cr) 491.32 188.33 T (eate an) 513.24 188.33 T (FRS with) 216 176.33 T 2 F (sync_master_pid) 258.8 176.33 T 0 F ( set to FRS_SYNC_MASTER. Similarly) 327.28 176.33 T (,) 496.04 176.33 T 5 F (frs_create_slave\050\051) 216 164.33 T 0 F ( is a wrapper that calls) 294.83 164.33 T 5 F (frs_create\050\051) 396.81 164.33 T 0 F ( using the parameters) 447.32 164.33 T (found in the speci\336ed) 216 152.33 T 2 F (sync_master_frs) 314.64 152.33 T 0 F (.) 380.9 152.33 T 26 209 27 309 R V FMENDPAGE %%EndPage: "20" 21 %%Page: "21" 21 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (The Frame Scheduler API) 464.36 679.44 T 1 F (21) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 2 9.5 Q (Parameters) 63 632.67 T 2 10 Q (cpu) 234 613.83 T 0 F (The pr) 306 613.83 T (ocessor that will be managed by the cr) 335 613.83 T (eated frame) 504 613.83 T -0.35 (scheduler) 306 601.83 P -0.35 (. Pr) 348.32 601.83 P -0.35 (ocessors ar) 362.77 601.83 P -0.35 (e number) 410.49 601.83 P -0.35 (ed fr) 452.18 601.83 P -0.35 (om 0, but pr) 472.32 601.83 P -0.35 (ocessor 0) 525.14 601.83 P (cannot be used by an FRS.) 306 589.83 T 2 F (intr_sour) 234 571.83 T (ce) 272.14 571.83 T 0 F (The interr) 306 571.83 T (upt sour) 349.82 571.83 T (ce, which must be one of:) 387.1 571.83 T 4 9 Q (\245) 306 553.83 T 0 10 Q -0.41 (FRS_INTRSOURCE_R4KTIMER for the R4K timer \050not) 324 553.83 P (allowed for a slave FRS\051) 324 541.83 T 4 9 Q (\245) 306 523.83 T 0 10 Q (FRS_INTRSOURCE_CCTIMER for the synchr) 324 523.83 T (onous) 526.33 523.83 T (timer) 324 511.83 T 4 9 Q (\245) 306 493.83 T 0 10 Q (FRS_INTRSOURCE_EXTINTR for external interr) 324 493.83 T (upts) 540.55 493.83 T 4 9 Q (\245) 306 475.83 T 0 10 Q (FRS_INTRSOURCE_VSYNC for vsync interr) 324 475.83 T (upts) 521.73 475.83 T 4 9 Q (\245) 306 457.83 T 0 10 Q (FRS_INTRSOURCE_DRIVER for device driver) 324 457.83 T (interr) 324 445.83 T (upts) 348.59 445.83 T 4 9 Q (\245) 306 427.83 T 0 10 Q (FRS_INTRSOURCE_USER for user generated) 324 427.83 T (interr) 324 415.83 T (upts) 348.59 415.83 T 2 F (intr_quali\336er) 234 397.83 T 3 F (Additional information about the) 306 397.83 T 2 F (Intr_sour) 440.37 397.83 T (ce) 479.05 397.83 T 3 F (:) 487.01 397.83 T 4 9 Q (\245) 306 379.83 T 0 10 Q (The minor frame interval in micr) 324 379.83 T (oseconds when the) 469 379.83 T (interr) 324 367.83 T (upt sour) 348.59 367.83 T (ce is either timer) 385.87 367.83 T 4 9 Q (\245) 306 349.83 T 0 10 Q (The graphic pipe when the interr) 324 349.83 T (upt sour) 469.81 349.83 T (ce is vsync) 507.09 349.83 T 4 9 Q (\245) 306 331.83 T 0 10 Q -0.47 (The device driver identi\336er number when the interr) 324 331.83 P -0.47 (upt) 549.68 331.83 P (sour) 324 319.83 T (ce is a device driver \050see \322Exporting the) 343.49 319.83 T (Initialization and T) 324 307.83 T (ermination Functions\323 on page) 407.63 307.83 T (35\051) 547.49 307.83 T 2 F (n_minors) 234 289.83 T 0 F (The number of minor frames per major frame.) 306 289.83 T 2 F (sync_master_pid) 234 271.83 T 0 F (Specify whether the cr) 306 271.83 T (eated FRS is a master or a slave:) 404.59 271.83 T 4 9 Q (\245) 306 253.83 T 0 10 Q (FRS_SYNC_MASTER speci\336es a master) 324 253.83 T 4 9 Q (\245) 306 235.83 T 0 10 Q (The pr) 324 235.83 T (ocess id of the frs-master pr) 353 235.83 T (ocess of the master) 474.99 235.83 T (FRS speci\336es that the new FRS is a slave) 324 223.83 T 2 F (sync_slaves) 234 205.83 T 0 F (When cr) 306 205.83 T (eating a master FRS, the addr) 343.12 205.83 T (ess of an array of) 472.81 205.83 T (length) 306 193.83 T 2 F (num_slaves) 336.64 193.83 T 0 F (. Each array element contains the CPU) 384.41 193.83 T (number of a pr) 306 181.83 T (ocessor that will r) 371.98 181.83 T (un a slave FRS. This) 450.3 181.83 T -0.23 (information lets the master FRS allocate an interr) 306 169.83 P -0.23 (upt gr) 520.35 169.83 P -0.23 (oup) 547.24 169.83 P FMENDPAGE %%EndPage: "21" 22 %%Page: "22" 22 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (22) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 0 10 Q (and determine who it should wait for when starting) 288 632.33 T -0.07 (r) 288 620.33 P -0.07 (eal-time execution. When cr) 291.77 620.33 P -0.07 (eating a slave FRS,) 414.6 620.33 P 2 F -0.07 (sync_slaves) 499.19 620.33 P 0 F (is NULL.) 288 608.33 T 2 F (num_slaves) 216 590.33 T 0 F (The number of slave FRSs listed in) 288 590.33 T 2 F (sync_slaves) 443.17 590.33 T 0 F (, or 0.) 490.55 590.33 T 2 9.5 Q (Return V) 45 578.67 T (alues) 80.95 578.67 T 5 10 Q (frs_create\050\051) 216 553.83 T 0 F (,) 266.51 553.83 T 5 F (frs_create_master\050\051) 271.51 553.83 T 0 F (, and) 357.55 553.83 T 5 F (frs_create_slave\050\051) 381.97 553.83 T 0 F ( r) 460.8 553.83 T (eturn a pointer to) 467.06 553.83 T -0.29 (an frs_t str) 216 541.83 P -0.29 (uctur) 262.36 541.83 P -0.29 (e when the cr) 285.87 541.83 P -0.29 (eation was succesful, or NULL in case of err) 344.1 541.83 P -0.29 (or) 535.63 541.83 P -0.29 (.) 544.3 541.83 P (The) 216 529.83 T 5 F (schedctl\050\051) 235.23 529.83 T 0 F ( call r) 279.07 529.83 T (eturns 0 to indicate success, and -1 to indicate err) 303.08 529.83 T (or) 519.16 529.83 T (. In) 527.83 529.83 T (case of err) 216 517.83 T (or) 260.74 517.83 T (,) 269.41 517.83 T 2 F (errno) 274.41 517.83 T 0 F ( is set to) 296.07 517.83 T 4 9 Q (\245) 216 499.83 T 0 10 Q (EINV) 234 499.83 T (AL for invalid parameters) 257.89 499.83 T 4 9 Q (\245) 216 481.83 T 0 10 Q (EF) 234 481.83 T (AUL) 244.92 481.83 T (T if the frs_fsched_info_t* parameter is NULL) 265.84 481.83 T 4 9 Q (\245) 216 463.83 T 0 10 Q (ENOSPC if the system could not allocate an interr) 234 463.83 T (upt gr) 454.25 463.83 T (oup) 481.36 463.83 T 4 9 Q (\245) 216 445.83 T 0 10 Q (ENOMEM if the system could not allocate memory for the FRS Object) 234 445.83 T 4 9 Q (\245) 216 427.83 T 0 10 Q (EEXIST if an FRS Object alr) 234 427.83 T (eady exists for the speci\336ed pr) 354.52 427.83 T (ocessor) 488.74 427.83 T 4 9 Q (\245) 216 409.83 T 0 10 Q (EBUSY is the speci\336ed pr) 234 409.83 T (ocessor is the clock pr) 346 409.83 T (ocessor) 442.14 409.83 T 4 9 Q (\245) 216 391.83 T 0 10 Q (EPERM for lack of permission) 234 391.83 T 4 9 Q (\245) 216 373.83 T 0 10 Q (ENODEV to indicate the FRS subsystem has not been installed.) 234 373.83 T 1 11.5 Q (Enqueuing Processes to a Frame Scheduler) 216 336.83 T 2 9.5 Q (Data Structur) 45 324.67 T (e) 99.57 324.67 T 4 8 Q (typedef struct frs_queue_info {) 216 310.17 T ( int) 246 299.17 T (cpu;) 276 299.17 T ( int) 246 288.17 T (pid;) 276 288.17 T ( int) 246 277.17 T (minor_index;) 276 277.17 T ( int) 246 266.17 T (discipline;) 276 266.17 T (} frs_queue_info_t;) 216 255.17 T 2 9.5 Q (System Call) 45 246.17 T 4 8 Q (int) 216 231.67 T (schedctl) 246 231.67 T (\050) 277.55 231.67 T (MPTS_FRS_ENQUEUE, frs_queue_info_t* frs_queue_info) 282.44 231.67 T (\051) 493.52 231.67 T (;) 498.4 231.67 T 2 9.5 Q (Library Call) 45 222.67 T 4 8 Q (int) 216 208.17 T (frs_enqueue) 246 208.17 T (\050) 292.67 208.17 T (frs_t* frs, int pid, int minor_index, uint discipline) 297.56 208.17 T (\051) 466.42 208.17 T (;) 471.3 208.17 T 0 10 Q -0.41 (Pr) 216 175.83 P -0.41 (ocesses may be cr) 225.8 175.83 P -0.41 (eated using) 302.14 175.83 P 5 F -0.41 (fork\050\051) 354.79 175.83 P 0 F -0.41 ( or) 380.89 175.83 P 5 F -0.41 (sproc\050\051) 394.46 175.83 P 0 F -0.41 (. Using the child pr) 427.62 175.83 P -0.41 (ocess ID) 510.57 175.83 P (r) 216 163.83 T (eturned by these system calls, a pr) 219.77 163.83 T (ocess may be enqueued on a frame) 371.12 163.83 T FMENDPAGE %%EndPage: "22" 23 %%Page: "23" 23 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (The Frame Scheduler API) 464.36 679.44 T 1 F (23) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 0 10 Q -0.18 (scheduler minor frame queue using either of the calls above.) 234 632.33 P 5 F -0.18 (frs_enqueue\050\051) 501.4 632.33 P 0 F (is just a wrapper for the dir) 234 620.33 T (ect) 354.4 620.33 T 5 F (schedctl\050\051) 369.39 620.33 T 0 F ( call.) 413.22 620.33 T -0.15 (The frs-master pr) 234 596.33 P -0.15 (ocess is r) 310.09 596.33 P -0.15 (esponsible for enqueueing the pr) 348.85 596.33 P -0.15 (ocesses that will) 493.39 596.33 P (be scheduled by an FRS, on the queues associated with the minor frames) 234 584.33 T (wher) 234 572.33 T (e they ar) 256.71 572.33 T (e to r) 294.68 572.33 T (un.) 317.04 572.33 T (A pr) 234 548.33 T (ocess may be enqueued on several queues simultaneously) 254.05 548.33 T (. Hence the) 509.22 548.33 T (same pr) 234 536.33 T (ocess may be activated on dif) 269.12 536.33 T (fer) 398.3 536.33 T (ent minor frames within the same) 410.18 536.33 T (major frame. A pr) 234 524.33 T (ocess should not be enqueued to mor) 313 524.33 T (e than one FRS.) 477.25 524.33 T (Enqueueing a pr) 234 500.33 T (ocess on one or mor) 307.2 500.33 T (e frame queues does not mean that it) 395.14 500.33 T -0.24 (will immediately start being scheduled by the frame scheduler) 234 488.33 P -0.24 (. The queued) 507.66 488.33 P (pr) 234 476.33 T (ocess itself has to use) 243.77 476.33 T 5 F (frs_join\050\051) 339.67 476.33 T 0 F ( to join the frame scheduler) 381.86 476.33 T (, and the) 501.65 476.33 T (frs-master pr) 234 464.33 T (ocess has to or) 291.17 464.33 T (der the scheduler to start its operation. Further) 354.81 464.33 T (,) 560.62 464.33 T (the scheduler will not start scheduling pr) 234 452.33 T (ocesses, even if it has been) 415.58 452.33 T -0.36 (signalled to start, until all pr) 234 440.33 P -0.36 (ocesses in its queues have joined \050see \322Joining a) 357.36 440.33 P (Frame Scheduler\323 on page) 234 428.33 T (24\051. And in the case of multiple, synchr) 353.79 428.33 T (onized) 526.4 428.33 T (frame schedulers, execution will not start until all pr) 234 416.33 T (ocesses on all frame) 465.1 416.33 T (schedulers have joined.) 234 404.33 T 2 9.5 Q (Parameters) 63 392.67 T 2 10 Q (frs) 234 373.83 T 0 F (The frame scheduler descriptor r) 306 373.83 T (eturned by) 450.53 373.83 T 5 F (frs_create\050\051) 501.34 373.83 T 2 F (frs_queue_info) 234 355.83 T 0 F (For) 306 355.83 T 5 F (schedctl\050\051) 323.46 355.83 T 0 F (, a str) 367.3 355.83 T (uctur) 391.15 355.83 T (e containing the following values.) 414.67 355.83 T 2 F (pid) 234 337.83 T 0 F (The child pr) 306 337.83 T (ocess ID to be enqueued) 359.68 337.83 T 2 F (minor-index) 234 319.83 T 0 F (The minor frame wher) 306 319.83 T (e the pr) 405.77 319.83 T (ocess should r) 439.2 319.83 T (un. Minor) 501.77 319.83 T (frame 0 is the \336rst minor frame in the major frame.) 306 307.83 T 2 F (cpu) 234 289.83 T 0 F (This \336eld of the) 306 289.83 T 2 F (frs_queue_info) 377.58 289.83 T 0 F ( parameter in the) 437.2 289.83 T 5 F (schedctl\050\051) 515.34 289.83 T 0 F (call identi\336es the pr) 306 277.83 T (ocessor being managed by the) 393.24 277.83 T (destination FRS.) 306 265.83 T 2 F (discipline) 234 247.83 T 0 F (The scheduling discipline for this child pr) 306 247.83 T (ocess on this) 490.26 247.83 T (queue. See \322Frame Scheduling Disciplines\323 on page) 306 235.83 T (9. The) 537.27 235.83 T (parameter must be an arithmetic combination of:) 306 223.83 T 4 9 Q (\245) 306 205.83 T 0 10 Q (FRS_DISC_R) 324 205.83 T (T for the Realtime discipline, used with) 381.22 205.83 T (every pr) 324 193.83 T (ocess that is not FRS_DISC_BACKGROUND.) 361 193.83 T 4 9 Q (\245) 306 175.83 T 0 10 Q (FRS_DISC_UNDERRUNNABLE, added to) 324 175.83 T (FRS_DISC_R) 324 163.83 T (T to pr) 381.22 163.83 T (event detection of underr) 410.83 163.83 T (un err) 522.78 163.83 T (ors.) 549.63 163.83 T 44 581 45 603 R V FMENDPAGE %%EndPage: "23" 24 %%Page: "24" 24 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (24) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 4 F (\245) 288 632.33 T 0 10 Q (FRS_DISC_OVERRUNNABLE, added to) 306 632.33 T (FRS_DISC_R) 306 620.33 T (T to pr) 363.22 620.33 T (event detection of overr) 392.83 620.33 T (un err) 497.93 620.33 T (ors.) 524.78 620.33 T 4 9 Q (\245) 288 602.33 T 0 10 Q (FRS_DISC_CONT) 306 602.33 T (, added to FRS_DISC_R) 385.55 602.33 T (T and) 489.58 602.33 T (FRS_DISC_OVERRUNNABLE to allow the pr) 306 590.33 T (ocess to) 508.88 590.33 T (extend its execution over consecutive minor frames.) 306 578.33 T 4 9 Q (\245) 288 560.33 T 0 10 Q (FRS_DISC_BACKGROUND for a pr) 306 560.33 T (ocess that has no) 466.11 560.33 T (r) 306 548.33 T (eal-time constraints, and r) 309.77 548.33 T (uns only in idle time.) 424.73 548.33 T (FRS_DISC_BACKGROUND and FRS_DISC_R) 216 530.33 T (T ar) 420.25 530.33 T (e mutually exclusive.) 437.64 530.33 T 4 9 Q (Note:) 216 506.33 T 0 10 Q (Pr) 242.48 506.33 T (ocesses using the FRS_DISC_BACKGROUND discipline must be) 252.28 506.33 T (enqueued last, after all FRS_DISC_R) 216 494.33 T (T pr) 376.18 494.33 T (ocesses have been enqueued.) 394.58 494.33 T 2 9.5 Q (Return V) 45 482.67 T (alues) 80.95 482.67 T 5 10 Q (frs_enqueue\050\051) 216 457.83 T 0 F (and the corr) 281.51 457.83 T (esponding) 334.9 457.83 T 5 F (schedctl\050\051) 384.09 457.83 T 0 F ( call r) 427.93 457.83 T (eturn 0 to indicate) 451.94 457.83 T (success and a negative integer to \337ag a failur) 216 445.83 T (e. In case of err) 413.41 445.83 T (or) 479.62 445.83 T (,) 488.29 445.83 T 2 F (errno) 493.29 445.83 T 0 F ( will) 514.95 445.83 T (contain one of the following codes:) 216 433.83 T 4 9 Q (\245) 216 415.83 T 0 10 Q (EINV) 234 415.83 T (AL for invalid parameters) 257.89 415.83 T 4 9 Q (\245) 216 397.83 T 0 10 Q (EF) 234 397.83 T (AUL) 244.92 397.83 T (T if the frs_queue_info_t* parameter is NULL) 265.84 397.83 T 4 9 Q (\245) 216 379.83 T 0 10 Q (EPERM for lack of permission) 234 379.83 T 4 9 Q (\245) 216 361.83 T 0 10 Q (ENODEV to indicate the FRS subsystem has not been installed.) 234 361.83 T 1 11.5 Q (Joining a Frame Scheduler) 216 324.83 T 2 9.5 Q (System Call) 45 312.67 T 4 8 Q (int) 216 298.17 T (schedctl) 246 298.17 T (\050) 277.55 298.17 T (MPTS_FRS_JOIN, int cpu) 282.44 298.17 T (\051) 377.97 298.17 T (;) 382.85 298.17 T 2 9.5 Q (Library Call) 45 289.17 T 4 8 Q (int) 216 274.67 T (frs_join) 246 274.67 T (\050) 273.99 274.67 T (frs_t* frs) 278.88 274.67 T (\051) 310.87 274.67 T 0 10 Q (Real-time pr) 216 253.33 T (ocesses need to allocate r) 270.75 253.33 T (esour) 380.66 253.33 T (ces and set up befor) 404.94 253.33 T (e they start) 492.5 253.33 T (r) 216 241.33 T (eal-time execution. This includes pinning down stacks and dynamic) 219.77 241.33 T (memory \050memory allocated befor) 216 229.33 T (e an) 364.35 229.33 T 5 F (sproc\050\051) 384.95 229.33 T 0 F ( can be pinned by the par) 416.03 229.33 T (ent) 527.75 229.33 T (pr) 216 217.33 T (ocess, but memory allocated by the child, and the addr) 225.77 217.33 T (ess space cr) 467.37 217.33 T (eated) 518.3 217.33 T -0.74 (by) 216 205.33 P 5 F -0.74 (fork\050\051) 228.84 205.33 P 0 F -0.74 (, need to be pinned by the child\051, opening I/O r) 254.94 205.33 P -0.74 (esour) 457.35 205.33 P -0.74 (ces, initializing) 481.63 205.33 P (data str) 216 193.33 T (uctur) 249.22 193.33 T (es, locks, and semaphor) 272.74 193.33 T (es, etc.) 377.67 193.33 T -0.29 (A pr) 216 169.33 P -0.29 (ocess uses either of these calls to notify the Frame Scheduler to which it) 235.75 169.33 P (is queued that it is initialized and r) 216 157.33 T (eady to start r) 369.8 157.33 T (eal-time execution.) 430.93 157.33 T FMENDPAGE %%EndPage: "24" 25 %%Page: "25" 25 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (The Frame Scheduler API) 464.36 679.44 T 1 F (25) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 0 10 Q (The frs-master pr) 234 632.33 T (ocess cannot call) 310.4 632.33 T 5 F (frs_enqueue\050\051) 386.09 632.33 T 0 F ( until it has cr) 449.37 632.33 T (eated the) 509.71 632.33 T -0.12 (child pr) 234 620.33 P -0.12 (ocess; however the child pr) 268.33 620.33 P -0.12 (ocess typically calls) 388.08 620.33 P 5 F -0.12 (frs_join\050\051) 476.4 620.33 P 0 F -0.12 ( soon after) 518.58 620.33 P -0.54 (it is cr) 234 608.33 P -0.54 (eated. Hence ther) 259.44 608.33 P -0.54 (e\325s a race between the action of enqueueing a pr) 335.57 608.33 P -0.54 (ocess) 541.88 608.33 P (and the action of joining the frame scheduler) 234 596.33 T (. If the enqueueing happens) 430.8 596.33 T (\336rst, ther) 234 584.33 T (e is a potential pr) 274.12 584.33 T (oblem if the scheduler starts r) 350.22 584.33 T (unning befor) 481.17 584.33 T (e the) 538.48 584.33 T (pr) 234 572.33 T (ocess joins. This is avoided by having the scheduler wait for all its) 243.77 572.33 T (enqueued pr) 234 560.33 T (ocesses to join befor) 290.21 560.33 T (e it starts r) 377.99 560.33 T (eal-time execution. This) 424.14 560.33 T -0.67 (synchr) 234 548.33 P -0.67 (onization is done by the frame scheduler) 263.63 548.33 P -0.67 (, so the pr) 438.71 548.33 P -0.67 (ogrammer does not) 480.04 548.33 P -0.75 (need to be concerned with this race. Ther) 234 536.33 P -0.75 (e\325s no pr) 410.06 536.33 P -0.75 (oblem if) 446.41 536.33 P 5 F -0.75 (frs_join\050\051) 483.65 536.33 P 0 F -0.75 ( happens) 525.84 536.33 P (\336rst, unless, of course, the frs-master for) 234 524.33 T (gets to ever enqueue the pr) 410.98 524.33 T (ocess,) 530.67 524.33 T (which will have the expected ef) 234 512.33 T (fect of keeping the unenqueued pr) 373.24 512.33 T (ocess) 525.17 512.33 T (waiting for) 234 500.33 T (ever) 282.83 500.33 T (.) 301.26 500.33 T 2 9.5 Q (Parameters) 63 488.67 T 2 10 Q (frs) 234 469.83 T 0 F (An FRS descriptor as r) 306 469.83 T (eturned by) 405.17 469.83 T 5 F (frs_create\050\051) 455.98 469.83 T 0 F (.) 506.49 469.83 T 2 F (cpu) 234 451.83 T 0 F (Speci\336es the pr) 306 451.83 T (ocessor being managed by the destination) 373.09 451.83 T (FRS.) 306 439.83 T 2 9.5 Q (Return V) 63 428.17 T (alues) 98.95 428.17 T 0 10 Q (In case of success both calls r) 234 403.33 T (eturn a value gr) 361.14 403.33 T (eater or equal to zer) 431.16 403.33 T (o; and in) 518.92 403.33 T (case of err) 234 391.33 T (or) 278.74 391.33 T (, -1 is r) 287.41 391.33 T (eturned and) 316.64 391.33 T 2 F (errno) 373.29 391.33 T 0 F ( is set to one of these values:) 394.95 391.33 T 4 9 Q (\245) 234 373.33 T 0 10 Q (EINV) 252 373.33 T (AL for invalid parameters) 275.89 373.33 T 4 9 Q (\245) 234 355.33 T 0 10 Q (EPERM for lack of permission) 252 355.33 T 4 9 Q (\245) 234 337.33 T 0 10 Q (ENODEV to indicate the FRS subsystem has not been installed.) 252 337.33 T 1 11.5 Q (Starting the Frame Scheduler) 234 300.33 T 2 9.5 Q (System Call) 63 288.17 T 4 8 Q (int) 234 273.67 T (schedctl) 264 273.67 T (\050) 295.55 273.67 T (MPTS_FRS_START, int cpu) 300.44 273.67 T (\051) 403.96 273.67 T (;) 408.85 273.67 T 2 9.5 Q (Library Call) 63 264.67 T 4 8 Q (int) 234 250.17 T (frs_start) 264 250.17 T (\050) 295.1 250.17 T (frs_t* frs) 299.99 250.17 T (\051) 331.98 250.17 T (;) 336.86 250.17 T 0 10 Q -0.64 (When all pr) 234 228.83 P -0.64 (ocesses to be scheduled have been enqueued , the master pr) 284.71 228.83 P -0.64 (ocess) 541.99 228.83 P (commands the frame scheduler to start activating pr) 234 216.83 T (ocesses. This is done) 464.97 216.83 T (using either of the calls above.) 234 204.83 T (The scheduler waits for all enqueued pr) 234 180.83 T (ocesses to call) 409.77 180.83 T 5 F (frs_join\050\051) 473.42 180.83 T 0 F ( befor) 515.6 180.83 T (e it) 540.97 180.83 T (starts r) 234 168.83 T (eal-time operation. Once all pr) 264.2 168.83 T (ocesses have joined, the scheduler) 398.62 168.83 T FMENDPAGE %%EndPage: "25" 26 %%Page: "26" 26 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (26) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 0 10 Q (enables the event interr) 216 632.33 T (upt \050if necessary\051, waits for the next interr) 319.3 632.33 T (upt, and) 504.22 632.33 T (starts scheduling the member pr) 216 620.33 T (ocesses in r) 358.87 620.33 T (eal-time.) 408.54 620.33 T (When multiple synchr) 216 596.33 T (onized FRSs ar) 314.68 596.33 T (e used, each FRS must be started) 380.23 596.33 T -0.26 (individually) 216 584.33 P -0.26 (. Slave FRSs do not start until the master FRS sends an enabling) 269.69 584.33 P (signal. The master FRS does not send the signal until all slave FRSs r) 216 572.33 T (eport) 517.82 572.33 T (that all pr) 216 560.33 T (ocesses have joined.) 258.92 560.33 T 2 9.5 Q (Parameters) 45 548.67 T 2 10 Q (cpu) 216 529.83 T 0 F (Speci\336es the pr) 288 529.83 T (ocessor managed by the frame scheduler) 355.09 529.83 T (that is being started) 288 517.83 T 2 F (frs) 216 499.83 T 0 F (Speci\336es an FRS descriptor as r) 288 499.83 T (eturned by) 425.35 499.83 T 5 F (frs_create\050\051) 476.16 499.83 T 2 9.5 Q (Return V) 45 488.17 T (alues) 80.95 488.17 T 0 10 Q (Both calls r) 216 463.33 T (eturn 0 for sucess and -1 for err) 264.89 463.33 T (or) 402.4 463.33 T (. In case of err) 411.06 463.33 T (or) 472.49 463.33 T (,) 481.15 463.33 T 2 F (errno) 486.15 463.33 T 0 F ( is set to) 507.81 463.33 T (one of the following values:) 216 451.33 T 4 9 Q (\245) 216 433.33 T 0 10 Q (EINV) 234 433.33 T (AL for invalid parameters) 257.89 433.33 T 4 9 Q (\245) 216 415.33 T 0 10 Q (EPERM for lack of permission) 234 415.33 T 4 9 Q (\245) 216 397.33 T 0 10 Q (ENODEV to indicate the FRS subsystem has not been installed.) 234 397.33 T 1 11.5 Q (Y) 216 360.33 T (ielding Control at the End of a Frame) 223.24 360.33 T 2 9.5 Q (System Call) 45 348.17 T 4 8 Q (int) 216 333.67 T (schedctl) 246 333.67 T (\050) 277.55 333.67 T (MPTS_FRS_YIELD) 282.44 333.67 T (\051) 354.86 333.67 T (;) 359.74 333.67 T 2 9.5 Q (Library Call) 45 324.67 T 4 8 Q (int) 216 310.17 T (frs_yield) 246 310.17 T (\050) 277.99 310.17 T (void) 282.88 310.17 T (\051) 299.76 310.17 T (;) 304.65 310.17 T 0 10 Q -0.05 (A pr) 216 277.83 P -0.05 (ocess under contr) 236 277.83 P -0.05 (ol of a frame scheduler is never pr) 313.48 277.83 P -0.05 (eempted within its) 463.64 277.83 P (minor frame time period. After it \336nishes its work for that frame, it has to) 216 265.83 T (explicitly yield the pr) 216 253.83 T (ocessor using either of the calls above.) 310.24 253.83 T (The concept of yielding is dif) 216 229.83 T (fer) 344.07 229.83 T (ent than the concept of blocking. When a) 355.95 229.83 T (pr) 216 217.83 T (ocess blocks \050by r) 225.77 217.83 T (equesting some system service\051 it becomes unavailable) 302.73 217.83 T (to r) 216 205.83 T (un until it is unblocked. On the other hand, when a pr) 231.08 205.83 T (ocess yields by) 469.33 205.83 T -0.77 (using) 216 193.83 P 5 F -0.77 (frs_yield\050\051) 242.28 193.83 P 0 F -0.77 (, it r) 289.46 193.83 P -0.77 (emains available for execution \050r) 305.36 193.83 P -0.77 (eady to r) 446.01 193.83 P -0.77 (un\051, so that the) 483.51 193.83 P -0.54 (frame scheduler can r) 216 181.83 P -0.54 (eadily activate it when its turn to r) 309.84 181.83 P -0.54 (un comes again. The) 458.07 181.83 P (frame scheduler does not contr) 216 169.83 T (ol framed r) 352.8 169.83 T (eal-time execution by blocking) 401.92 169.83 T FMENDPAGE %%EndPage: "26" 27 %%Page: "27" 27 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (The Frame Scheduler API) 464.36 679.44 T 1 F (27) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 0 10 Q (and unblocking pr) 234 632.33 T (ocesses, but rather by activating them only when their) 315.7 632.33 T (turn comes.) 234 620.33 T (Pr) 234 596.33 T (ocesses within the same frame queue ar) 243.8 596.33 T (e activated in a non-pr) 418.61 596.33 T (eemptable) 517.7 596.33 T -0.2 (r) 234 584.33 P -0.2 (ound r) 237.77 584.33 P -0.2 (obin fashion until they yield. This means that a pr) 267.24 584.33 P -0.2 (ocess may r) 485.12 584.33 P -0.2 (equest) 536.01 584.33 P -0.54 (system services, block, unblock, and continue r) 234 572.33 P -0.54 (unning within a single minor) 438.05 572.33 P (frame. It is only the yield operation that causes a pr) 234 560.33 T (ocess to be pr) 460.48 560.33 T (evented) 519.93 560.33 T (fr) 234 548.33 T (om r) 241.1 548.33 T (unning again within its minor frame.) 261.74 548.33 T -0.85 (At the end of a minor frame the scheduler pr) 234 524.33 P -0.85 (eempts whatever is r) 423.76 524.33 P -0.85 (unning and) 513.19 524.33 P -0.03 (veri\336es that all pr) 234 512.33 P -0.03 (ocesses in the frame queue wer) 311.7 512.33 P -0.03 (e activated at least once. If) 448.84 512.33 P -0.65 (a pr) 234 500.33 P -0.65 (ocess was never activated because it was always blocked and the pr) 250.62 500.33 P -0.65 (ocess) 541.99 500.33 P -0.63 (is not Underr) 234 488.33 P -0.63 (unnable, the scheduler raises an underr) 291.72 488.33 P -0.63 (un exception. Similarly) 462.84 488.33 P -0.63 (,) 562.63 488.33 P (the scheduler veri\336es that all pr) 234 476.33 T (ocesses in the frame queue have yielded. If) 373.69 476.33 T -0.63 (it \336nds one that has not yielded but is not Overr) 234 464.33 P -0.63 (unnable , it raises an overr) 439.77 464.33 P -0.63 (un) 553.29 464.33 P (exception.) 234 452.33 T (The scheduler r) 234 428.33 T (esets the yield state of a pr) 302.55 428.33 T (ocess at the end of each minor) 419.08 428.33 T -0.03 (frame, unless the pr) 234 416.33 P -0.03 (ocess has been de\336ned to be Continuable in which case) 321.44 416.33 P (the yield state carries over to the next minor frame. This is the mechanism) 234 404.33 T (that pr) 234 392.33 T (events a Continuable pr) 263.6 392.33 T (ocess fr) 369 392.33 T (om being r) 401.75 392.33 T (edispatched once it has) 449.39 392.33 T (yielded. \050See \322Scheduling W) 234 380.33 T (ithin A Minor Frame\323 on page) 359.36 380.33 T (17.\051) 496.16 380.33 T 2 9.5 Q (Parameters) 63 368.67 T 0 10 Q (This call takes no parameters.) 234 343.83 T 2 9.5 Q (Return V) 63 332.17 T (alues) 98.95 332.17 T 0 10 Q (When the operation is succesful, this call r) 234 307.33 T (eturns the number of the last) 419.72 307.33 T (minor frame wher) 234 295.33 T (e this pr) 314.55 295.33 T (ocess yielded or was pr) 350.33 295.33 T (eempted. \050Minor frames) 453.39 295.33 T -0.7 (ar) 234 283.33 P -0.7 (e number) 242.76 283.33 P -0.7 (ed fr) 284.1 283.33 P -0.7 (om 0 within each major frame.\051 In case of err) 303.89 283.33 P -0.7 (or) 494.67 283.33 P -0.7 (, -1 is r) 503.33 283.33 P -0.7 (eturned) 530.47 283.33 P (with) 234 271.33 T 2 F (errno) 256.82 271.33 T 0 F ( set to one of the following values:) 278.48 271.33 T 4 9 Q (\245) 234 253.33 T 0 10 Q (EINV) 252 253.33 T (AL for invalid parameters) 275.89 253.33 T 4 9 Q (\245) 234 235.33 T 0 10 Q (EPERM for lack of permission) 252 235.33 T 4 9 Q (\245) 234 217.33 T 0 10 Q (ENODEV to indicate the FRS subsystem has not been installed.) 252 217.33 T 44 377 45 435 R V FMENDPAGE %%EndPage: "27" 28 %%Page: "28" 28 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (28) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 1 11.5 Q (Delivering T) 216 631.33 T (ime-Base Interrupts to a Frame Scheduler) 281.56 631.33 T 2 9.5 Q (System Call) 45 619.17 T 4 8 Q (int) 216 604.67 T (schedctl) 246 604.67 T (\050) 277.55 604.67 T (MPTS_FRS_INTR, int cpu) 282.44 604.67 T (\051) 378.41 604.67 T (;) 383.29 604.67 T 2 9.5 Q (Library Call) 45 595.67 T 4 8 Q (int) 216 581.17 T (frs_userintr) 246 581.17 T (\050) 288.21 581.17 T (frs_t* frs) 293.09 581.17 T (\051) 325.08 581.17 T (;) 329.97 581.17 T 0 10 Q (These calls allow the frs-master pr) 216 559.83 T (ocess to send r) 366.88 559.83 T (eal-time interr) 430.96 559.83 T (upts to one) 493.85 559.83 T (or several synchr) 216 547.83 T (onous frame schedulers. When multiple, synchr) 291.35 547.83 T (onized) 502.69 547.83 T (FRSs ar) 216 535.83 T (e in use, the speci\336ed FRS must be the master FRS.) 248.98 535.83 T -0.12 (This capability is intended to be used as a debugging aid by giving you full) 216 511.83 P -0.69 (contr) 216 499.83 P -0.69 (ol of when each minor frame begins. T) 238.74 499.83 P -0.69 (ypically you would have a debug) 402.74 499.83 P (version of your application in which, by conditional compilation, the) 216 487.83 T -0.38 (frs-master pr) 216 475.83 P -0.38 (ocess generates the interr) 272.79 475.83 P -0.38 (upt signal on some user input such as) 382.95 475.83 P (a mouse click.) 216 463.83 T 4 9 Q -0.54 (Note:) 216 439.83 P 0 10 Q -0.54 (It would not be practical to drive a pr) 241.4 439.83 P -0.54 (oduction r) 402.18 439.83 P -0.54 (eal-time pr) 447.38 439.83 P -0.54 (ogram fr) 494.92 439.83 P -0.54 (om) 532.76 439.83 P (softwar) 216 427.83 T (e-supplied interr) 249.38 427.83 T (upts, owing to the unpr) 323.57 427.83 T (edictable and varying) 427.86 427.83 T (latency in the scheduling of the interr) 216 415.83 T (upt-generating pr) 381.18 415.83 T (ocess. T) 459.51 415.83 T (o drive a) 492.87 415.83 T (Frame Scheduler fr) 216 403.83 T (om a custom interr) 300.27 403.83 T (upt sour) 383.88 403.83 T (ce, use the device driver) 421.16 403.83 T (interface \050see \322The Frame Scheduler DDI\323 on page) 216 391.83 T (33\051.) 441.77 391.83 T 2 9.5 Q (Parameters) 45 380.17 T 2 10 Q (cpu) 216 361.33 T 0 F (Speci\336es the pr) 288 361.33 T (ocessor being managed by the destination) 355.09 361.33 T (frame scheduler) 288 349.33 T 2 F (frs) 216 331.33 T 0 F (Speci\336es an FRS descriptor as r) 288 331.33 T (eturned by) 425.35 331.33 T 5 F (frs_create) 476.16 331.33 T 0 F (.) 520.01 331.33 T 2 9.5 Q (Return V) 45 319.67 T (alues) 80.95 319.67 T 0 10 Q (Both calls r) 216 294.83 T (eturn 0 for sucess and -1 for err) 264.89 294.83 T (or) 402.4 294.83 T (. In case of err) 411.06 294.83 T (or) 472.49 294.83 T (,) 481.15 294.83 T 2 F (errno) 486.15 294.83 T 0 F ( is set to) 507.81 294.83 T (one of the following values:) 216 282.83 T 4 9 Q (\245) 216 264.83 T 0 10 Q (EINV) 234 264.83 T (AL for invalid parameters) 257.89 264.83 T 4 9 Q (\245) 216 246.83 T 0 10 Q (EPERM for lack of permission) 234 246.83 T 4 9 Q (\245) 216 228.83 T 0 10 Q (ENODEV to indicate the FRS subsystem has not been installed.) 234 228.83 T FMENDPAGE %%EndPage: "28" 29 %%Page: "29" 29 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (The Frame Scheduler API) 464.36 679.44 T 1 F (29) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 1 11.5 Q (Stopping and Resuming Frame Schedulers) 234 631.33 T 2 9.5 Q (System Calls) 63 619.17 T 4 8 Q (int) 234 604.67 T (schedctl) 264 604.67 T (\050) 295.55 604.67 T (MPTS_FRS_STOP, int cpu) 300.44 604.67 T (\051) 399.53 604.67 T (;) 404.41 604.67 T (int) 234 593.67 T (schedctl) 264 593.67 T (\050) 295.55 593.67 T (MPTS_FRS_RESUME, int cpu) 300.44 593.67 T (\051) 411.96 593.67 T (;) 416.84 593.67 T 2 9.5 Q (Library Calls) 63 584.67 T 4 8 Q (int) 234 570.17 T (frs_stop) 264 570.17 T (\050) 294.66 570.17 T (frs_t* frs) 299.55 570.17 T (\051) 331.54 570.17 T (;) 336.42 570.17 T (int) 234 559.17 T (frs_resume) 264 559.17 T (\050) 306.21 559.17 T (frs_t* frs) 311.09 559.17 T (\051) 343.08 559.17 T (:) 347.97 559.17 T 0 10 Q -0.14 (These calls pr) 234 526.83 P -0.14 (ovide a way to stop and r) 293.73 526.83 P -0.14 (esume a Frame Scheduler) 405 526.83 P -0.14 (. When the) 517.16 526.83 P (stop call is issued, the scheduler state is changed such that the time-base) 234 514.83 T (interr) 234 502.83 T (upts ar) 258.59 502.83 T (e ignor) 289.38 502.83 T (ed. The scheduler continues executing all pr) 320.17 502.83 T (ocesses in) 514.42 502.83 T -0.32 (the curr) 234 490.83 P -0.32 (ent minor frame until they have all yielded. Then the scheduler falls) 268.22 490.83 P (into an idle loop.) 234 478.83 T -0.62 (The r) 234 454.83 P -0.62 (esume call enables the r) 256.38 454.83 P -0.62 (eception of time-base interr) 358.51 454.83 P -0.62 (upts. Upon the next) 477.63 454.83 P (interr) 234 442.83 T (upt, the scheduler starts scheduling the pr) 258.59 442.83 T (ocesses on the queue) 444.46 442.83 T -0.6 (associated with the minor frame immediately after the minor frame that was) 234 430.83 P (active when the stop call was issued.) 234 418.83 T (If the stop and r) 234 394.83 T (esume calls ar) 304.2 394.83 T (e issued so close together that no event) 366.12 394.83 T -0.22 (interr) 234 382.83 P -0.22 (upt gets ignor) 258.59 382.83 P -0.22 (ed, the r) 319.79 382.83 P -0.22 (esulting ef) 355.38 382.83 P -0.22 (fect is null. The stop and r) 401.1 382.83 P -0.22 (esume calls) 514.28 382.83 P (always change the length of a major frame by a whole number of minor) 234 370.83 T (frame periods \050possibly zer) 234 358.83 T (o\051.) 354.55 358.83 T (When multiple synchr) 234 334.83 T (onized FRSs ar) 332.68 334.83 T (e in use, all FRSs start and stop) 398.23 334.83 T (independently) 234 322.83 T (. Stopping one FRS while others continue can r) 297.55 322.83 T (esult in their) 503.63 322.83 T (major frames being out of synchr) 234 310.83 T (onization \050pr) 379.94 310.83 T (esuming all major frames) 437.16 310.83 T (wer) 234 298.83 T (e the same length to begin with\051. Y) 250.89 298.83 T (ou can keep all FRSs in a gr) 403.23 298.83 T (oup in) 524.17 298.83 T (major) 234 286.83 T (-frame synchr) 259.39 286.83 T (ony by stopping and starting all of them at the same) 320.73 286.83 T (ef) 234 274.83 T (fective time. This can be done because a scheduler does not actually stop) 241.94 274.83 T -0.58 (or start until a time-base event happens. Thus if you stop all FRSs within one) 234 262.83 P (minor frame interval, and if you r) 234 250.83 T (esume all FRSs in the interval after one) 382.57 250.83 T (time-base event and befor) 234 238.83 T (e the next, the gr) 348.24 238.83 T (oup of FRSs will r) 421.59 238.83 T (emain) 500.4 238.83 T (synchr) 234 226.83 T (onized to the same minor frame.) 263.63 226.83 T 2 9.5 Q (Parameters) 63 215.17 T 2 10 Q (cpu) 234 196.33 T 0 F (Speci\336es the pr) 306 196.33 T (ocessor being managed by the destination) 373.09 196.33 T (frame scheduler) 306 184.33 T 2 F (frs) 234 166.33 T 0 F (Speci\336es an FRS descriptor as r) 306 166.33 T (eturned by) 443.35 166.33 T 5 F (frs_create\050\051) 494.16 166.33 T 0 F (.) 544.67 166.33 T FMENDPAGE %%EndPage: "29" 30 %%Page: "30" 30 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (30) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 2 9.5 Q (Return V) 45 632.67 T (alues) 80.95 632.67 T 0 10 Q -0.44 (All calls r) 216 607.83 P -0.44 (eturn 0 for sucess and -1 for err) 256.96 607.83 P -0.44 (or) 391.34 607.83 P -0.44 (. In case of err) 400.01 607.83 P -0.44 (or) 459.65 607.83 P -0.44 (,) 468.32 607.83 P 2 F -0.44 (errno) 472.87 607.83 P 0 F -0.44 ( is set to one) 494.53 607.83 P (of the following values:) 216 595.83 T 4 9 Q (\245) 216 577.83 T 0 10 Q (EINV) 234 577.83 T (AL for invalid parameters) 257.89 577.83 T 4 9 Q (\245) 216 559.83 T 0 10 Q (EPERM for lack of permission) 234 559.83 T 4 9 Q (\245) 216 541.83 T 0 10 Q (ENODEV to indicate the FRS subsystem has not been installed.) 234 541.83 T 1 11.5 Q (Dynamic Management of Scheduler Queues) 216 504.83 T 2 9.5 Q (System Calls) 45 492.67 T 4 8 Q (int) 216 478.17 T (schedctl) 246 478.17 T (\050) 277.55 478.17 T (MPTS_FRS_GETQUEUELEN, frs_queue_info_t* frs_queue_info) 282.44 478.17 T (\051) 514.4 478.17 T (;) 519.29 478.17 T (int) 216 467.17 T (schedctl) 246 467.17 T (\050) 277.55 467.17 T (MPTS_FRS_READQUEUE, frs_queue_info_t* frs_queue_info,) 282.44 467.17 T (int* pidlist) 426 456.17 T (\051) 462.44 456.17 T (;) 467.32 456.17 T (int) 216 445.17 T (schedctl) 246 445.17 T (\050) 277.55 445.17 T (MPTS_FRS_PREMOVE, frs_queue_info_t* frs_queue_info) 282.44 445.17 T (\051) 493.97 445.17 T (;) 498.85 445.17 T (int) 216 434.17 T (schedctl) 246 434.17 T (\050) 277.55 434.17 T (MPTS_FRS_PINSERT, frs_queue_info_t* frs_queue_info, int base_pid) 282.44 434.17 T (\051) 536.19 434.17 T (;) 541.08 434.17 T 2 9.5 Q (Library Calls) 45 425.17 T 4 8 Q (int) 216 410.67 T (frs_getqueuelen) 246 410.67 T (\050) 305.56 410.67 T (frs_t* frs, int minor_index) 310.45 410.67 T (\051) 401.09 410.67 T (;) 405.98 410.67 T (int) 216 399.67 T (frs_readqueue) 246 399.67 T (\050) 299.78 399.67 T (frs_t* frs, int minor_index, int* pidlist) 304.66 399.67 T (\051) 433.97 399.67 T (;) 438.85 399.67 T (int) 216 388.67 T (frs_premove) 246 388.67 T (\050) 292.65 388.67 T (frs_t* frs, int minor_index, int remove_pid) 297.54 388.67 T (\051) 445.07 388.67 T (;) 449.95 388.67 T (int) 216 377.67 T (frs_pinsert) 246 377.67 T (\050) 285.55 377.67 T (frs_t* frs, int minor_index, int insert_pid, int discipline, int base_pid) 290.43 377.67 T (\051) 526.4 377.67 T (;) 531.28 377.67 T 0 10 Q (These functions ar) 216 345.33 T (e used to dynamically contr) 296.81 345.33 T (ol the minor frame pr) 419.22 345.33 T (ocess) 514.06 345.33 T (queues while the Frame Scheduler is r) 216 333.33 T (unning.) 384.27 333.33 T 4 9 Q (Note:) 216 309.33 T 0 10 Q (Queue manipulation entails considerable over) 242.48 309.33 T (head, taking up) 446.37 309.33 T (valuable time fr) 216 297.33 T (om a frame and possibly leading to overr) 285.67 297.33 T (un err) 467.59 297.33 T (ors.) 494.44 297.33 T -0.5 (The length of a queue is obtained using) 216 273.33 P 5 F -0.5 (frs_getqueuelen\050\051) 388.46 273.33 P 0 F -0.5 (. The length of the) 468.96 273.33 P (queue speci\336ed by minor_index is r) 216 261.33 T (eturned as the function r) 373.76 261.33 T (esult.) 482.4 261.33 T (The list of pr) 216 237.33 T (ocesses in a queue can be r) 272.1 237.33 T (ead using) 389.55 237.33 T 5 F (frs_readqueue\050\051) 434.99 237.33 T 0 F (. All) 507.16 237.33 T (pr) 216 225.33 T (ocess IDs ar) 225.77 225.33 T (e r) 278.04 225.33 T (eturned in queue or) 289.09 225.33 T (der to the speci\336ed array) 376.49 225.33 T (. The array) 485.56 225.33 T (must be long enough to r) 216 213.33 T (eceive them all.) 326.84 213.33 T -0.57 (The call) 216 189.33 P 5 F -0.57 (frs_premove\050\051) 251.83 189.33 P 0 F -0.57 ( r) 315.69 189.33 P -0.57 (emoves a speci\336c pr) 321.38 189.33 P -0.57 (ocess fr) 408.53 189.33 P -0.57 (om a queue. The pr) 440.71 189.33 P -0.57 (ocess) 523.92 189.33 P -0.4 (stops being scheduled for execution and is temporarily suspended. It can be) 216 177.33 P (r) 216 165.33 T (e-inserted in the queue.) 219.77 165.33 T FMENDPAGE %%EndPage: "30" 31 %%Page: "31" 31 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (The Frame Scheduler API) 464.36 679.44 T 1 F (31) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 5 10 Q -0.3 (frs_pinsert\050\051) 234 632.33 P 0 F -0.3 ( inserts a pr) 290.06 632.33 P -0.3 (ocess in a queue following) 340.63 632.33 P 2 F -0.3 (base_pid) 458.41 632.33 P 0 F -0.3 ( in the queue. T) 493.02 632.33 P -0.3 (o) 559.34 632.33 P (insert a pr) 234 620.33 T (ocess at the head of the queue, specify 0 for) 278.73 620.33 T 2 F (base_pid) 472.06 620.33 T 0 F (. The pr) 506.67 620.33 T (ocess) 540.67 620.33 T (is dispatched again in its corr) 234 608.33 T (ect turn.) 363.32 608.33 T 4 9 Q (Note:) 234 584.33 T 0 10 Q (Only pr) 260.48 584.33 T (ocesses that have been queued with) 294.89 584.33 T 5 F (frs_enqueue\050\051) 455.21 584.33 T 0 F ( can be) 518.49 584.33 T (inserted. The) 234 572.33 T 5 F (frs_premove\050\051) 294.08 572.33 T 0 F ( and) 357.93 572.33 T 5 F (frs_pinsert\050\051) 379.85 572.33 T 0 F ( calls ar) 435.91 572.33 T (e designed for the) 469.16 572.33 T -0.22 (purpose of r) 234 560.33 P -0.22 (e-or) 287.59 560.33 P -0.22 (dering the queues of existing pr) 304.93 560.33 P -0.22 (ocesses, or for changing the) 443.99 560.33 P (discipline of existing pr) 234 548.33 T (ocesses. They ar) 337.71 548.33 T (e not intended for the purpose of) 408.44 548.33 T (adding new pr) 234 536.33 T (ocesses to the dispatch queue.) 299.2 536.33 T 4 9 Q -0.44 (Note:) 234 512.33 P 0 10 Q -0.44 (Do not r) 259.59 512.33 P -0.44 (earrange the queue so as to place a Backgr) 295.2 512.33 P -0.44 (ound pr) 477.78 512.33 P -0.44 (ocess ahead) 513.02 512.33 P (of a r) 234 500.33 T (eal-time pr) 256.55 500.33 T (ocess. A Backgr) 304.62 500.33 T (ound pr) 373.47 500.33 T (ocess must always be the last in its) 409.15 500.33 T (queue.) 234 488.33 T 2 9.5 Q (Parameters) 63 476.67 T 2 10 Q (frs_queue_info) 234 457.83 T 0 F (Speci\336es a str) 306 457.83 T (uctur) 365.82 457.83 T (e in which the) 389.33 457.83 T 2 F (cpu) 454.02 457.83 T 0 F ( \336eld identi\336es the) 468.64 457.83 T (frame scheduler) 306 445.83 T (, and the other \336elds specify information) 376.7 445.83 T (about a queued pr) 306 433.83 T (ocess.) 386.87 433.83 T 2 F (frs) 234 415.83 T 0 F (Speci\336es an FRS descriptor as r) 306 415.83 T (eturned by) 443.35 415.83 T 5 F (frs_create\050\051) 494.16 415.83 T 0 F (.) 544.67 415.83 T 2 F (minor_index) 234 397.83 T 0 F (As a parameter or a \336eld in) 306 397.83 T 2 F (frs_queue_info) 429.03 397.83 T 0 F (, speci\336es the) 488.65 397.83 T (minor frame. Minor frames ar) 306 385.83 T (e number) 437.81 385.83 T (ed fr) 479.84 385.83 T (om 0.) 500.33 385.83 T 2 F (pidlist) 234 367.83 T 0 F (Addr) 306 367.83 T (ess of a vector of integers long enough to r) 329.76 367.83 T (eceive the) 516.59 367.83 T (pr) 306 355.83 T (ocess IDs of all pr) 315.77 355.83 T (ocesses in one queue.) 393.64 355.83 T 2 F (r) 234 337.83 T (emove_pid) 237.71 337.83 T 0 F (Pr) 306 337.83 T (ocess ID of a queued pr) 315.8 337.83 T (ocess to be r) 419.45 337.83 T (emoved fr) 472.9 337.83 T (om the) 518.1 337.83 T (queue.) 306 325.83 T 2 F (base_pid) 234 307.83 T 0 F (Pr) 306 307.83 T (ocess_ID of a pr) 315.8 307.83 T (ocess in the queue, or 0.) 386.12 307.83 T 2 F (insert_pid) 234 289.83 T 0 F -0.59 (Pr) 306 289.83 P -0.59 (ocess ID of a pr) 315.8 289.83 P -0.59 (ocess to be inserted in the queue following) 381.24 289.83 P 2 F (base_pid) 306 277.83 T 0 F (.) 340.61 277.83 T 2 F (discipline) 234 259.83 T 0 F (The scheduling discipline for the inserted pr) 306 259.83 T (ocess \050see) 501.57 259.83 T (\322Frame Scheduling Disciplines\323 on page) 306 247.83 T (9\051.) 487.73 247.83 T 2 9.5 Q (Return V) 63 236.17 T (alues) 98.95 236.17 T 0 10 Q -0.44 (All calls r) 234 211.33 P -0.44 (eturn 0 for sucess and -1 for err) 274.96 211.33 P -0.44 (or) 409.34 211.33 P -0.44 (. In case of err) 418.01 211.33 P -0.44 (or) 477.65 211.33 P -0.44 (,) 486.32 211.33 P 2 F -0.44 (errno) 490.87 211.33 P 0 F -0.44 ( is set to one) 512.53 211.33 P (of the following values:) 234 199.33 T 4 9 Q (\245) 234 181.33 T 0 10 Q (EINV) 252 181.33 T (AL for invalid parameters) 275.89 181.33 T 4 9 Q (\245) 234 163.33 T 0 10 Q (EPERM for lack of permission) 252 163.33 T 44 485 45 519 R V FMENDPAGE %%EndPage: "31" 32 %%Page: "32" 32 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (32) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 4 F (\245) 216 632.33 T 0 10 Q (ENODEV to indicate the FRS subsystem has not been installed) 234 632.33 T 4 9 Q (\245) 216 614.33 T 0 10 Q (EF) 234 614.33 T (AUL) 244.92 614.33 T (T to indicate that pidlist cannot be accessed.) 265.84 614.33 T 1 11.5 Q (Destroying a Frame Scheduler) 216 577.33 T 2 9.5 Q (System Call) 45 565.17 T 4 8 Q (int) 216 550.67 T (schedctl) 246 550.67 T (\050) 277.55 550.67 T (MPTS_FRS_DESTROY, int cpu) 282.44 550.67 T (\051) 398.4 550.67 T (;) 403.29 550.67 T 2 9.5 Q (Library Call) 45 541.67 T 4 8 Q (int) 216 527.17 T (frs_destroy) 246 527.17 T (\050) 287.77 527.17 T (frs_t* frs) 292.65 527.17 T (\051) 324.64 527.17 T (;) 329.53 527.17 T 0 10 Q (Any user pr) 216 494.83 T (ocess may initiate the termination of a frame scheduler using) 268.92 494.83 T (either of the calls above.) 216 482.83 T (This call causes termination signals to be sent to all member pr) 216 458.83 T (ocesses and) 492.33 458.83 T (to the frs-master pr) 216 446.83 T (ocess \050see \322Frame Scheduler Signals\323 on page) 300.74 446.83 T (18\051.) 505 446.83 T -0.49 (The FRS dequeues all pr) 216 422.83 P -0.49 (ocesses fr) 321.18 422.83 P -0.49 (om the frame scheduler and unisolates the) 362.46 422.83 P (cpu it was attached to. The IRIX scheduler r) 216 410.83 T (esumes contr) 408.7 410.83 T (ol of the CPU.) 466.84 410.83 T -0.58 (Pr) 216 398.83 P -0.58 (ocesses continue execution in normal mode. Frame scheduler calls such as) 225.8 398.83 P 5 F (frs_yield\050\051) 216 386.83 T 0 F ( r) 263.18 386.83 T (eturn err) 269.45 386.83 T (ors. The best way to avoid pr) 308.29 386.83 T (oblems is to have the) 436.46 386.83 T (termination signal handler wrap up all pr) 216 374.83 T (ocessing and then cause the) 399.69 374.83 T (pr) 216 362.83 T (ocess to exit.) 225.77 362.83 T 2 9.5 Q (Parameters) 45 351.17 T 2 10 Q (cpu) 216 332.33 T 0 F (Speci\336es the pr) 288 332.33 T (ocessor being managed by the destination) 355.09 332.33 T (frame scheduler) 288 320.33 T 2 F (frs) 216 302.33 T 0 F (Speci\336es an FRS descriptor as r) 288 302.33 T (eturned by) 425.35 302.33 T 5 F (frs_create\050\051) 476.16 302.33 T 0 F (.) 526.67 302.33 T 2 9.5 Q (Return V) 45 290.67 T (alues) 80.95 290.67 T 0 10 Q (Both calls r) 216 265.83 T (eturn 0 for sucess and -1 for err) 264.89 265.83 T (or) 402.4 265.83 T (. In case of err) 411.06 265.83 T (or) 472.49 265.83 T (,) 481.15 265.83 T 2 F (errno) 486.15 265.83 T 0 F ( is set to) 507.81 265.83 T (one of the following values:) 216 253.83 T 4 9 Q (\245) 216 235.83 T 0 10 Q (EINV) 234 235.83 T (AL for invalid parameters) 257.89 235.83 T 4 9 Q (\245) 216 217.83 T 0 10 Q (EPERM for lack of permission) 234 217.83 T 4 9 Q (\245) 216 199.83 T 0 10 Q (ENODEV to indicate the FRS subsystem has not been installed.) 234 199.83 T FMENDPAGE %%EndPage: "32" 33 %%Page: "33" 33 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (The Frame Scheduler DDI) 462.87 679.44 T 1 F (33) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 1 12 Q (The Frame Scheduler DDI) 63 631 T 0 10 Q -0.38 (The Frame Scheduler pr) 234 605.33 P -0.38 (ovides a device driver interface to allow any device) 339.04 605.33 P -0.01 (with a kernel-level device driver to generate the frame scheduler time-base) 234 593.33 P -0.29 (interr) 234 581.33 P -0.29 (upt. The system can contain up to 16 dif) 258.59 581.33 P -0.29 (fer) 432.51 581.33 P -0.29 (ent drivers that support the) 444.39 581.33 P -0.55 (Frame Scheduler) 234 569.33 P -0.55 (. The Frame Scheduler distinguishes them by an) 307.39 569.33 P 2 9 Q -0.49 (frs_driver_id) 517.8 569.33 P 0 10 Q (in the range 0 thr) 234 557.33 T (ough 15.) 309.53 557.33 T -0.52 (In or) 234 533.33 P -0.52 (der to interact with the frame scheduler) 254.38 533.33 P -0.52 (, a driver pr) 425.58 533.33 P -0.52 (ovides two r) 476.12 533.33 P -0.52 (outines,) 530.03 533.33 P -0.5 (one for initialization and one for termination, which it exports during driver) 234 521.33 P -0.29 (initialization. After an FRS initializes a device driver) 234 509.33 P -0.29 (, the driver calls an FRS) 462.28 509.33 P (entry point to signal the event of an interr) 234 497.33 T (upt.) 418.29 497.33 T 4 9 Q -0.04 (Note:) 234 473.33 P 0 10 Q -0.04 (The str) 260.4 473.33 P -0.04 (uctur) 290.95 473.33 P -0.04 (e of an IRIX kernel-level device driver is discussed in the) 314.47 473.33 P 2 F (IRIX Device Driver Pr) 234 461.33 T (ogramming Guide) 326.46 461.33 T 0 F (. The latest version, for IRIX 5.3, has) 400.04 461.33 T (part number 007-091) 234 449.33 T (1-044.) 324.9 449.33 T 1 11.5 Q (Frame Scheduler Initialization Function) 234 412.33 T 0 10 Q -0.54 (The device driver must pr) 234 387.83 P -0.54 (ovide a function with the following pr) 346.73 387.83 P -0.54 (ototype \050the) 512.1 387.83 P (actual function name is not signi\336cant\051:) 234 375.83 T 6 9 Q (void prefix_frs_func_set) 252 358.5 T (\050) 386.81 358.5 T (intrgroup_t* intrgroup) 397.6 358.5 T (\051) 521.62 358.5 T (;) 532.41 358.5 T 0 10 Q (This function is called by a new FRS when the FRS is cr) 234 334.83 T (eated with an) 477.37 334.83 T 2 F (inter_sour) 234 322.83 T (ce) 276.03 322.83 T 0 F ( of FRS_INTRSOURCE_DRIVER and) 283.98 322.83 T 2 F (inter_quali\336er) 450.16 322.83 T 0 F ( specifying) 507.83 322.83 T (this device driver) 234 310.83 T (\325s number \050see \322Cr) 311.98 310.83 T (eating a Master or Slave Frame) 394.41 310.83 T (Scheduler\323 on page) 234 298.83 T (20\051.) 323.18 298.83 T -0.78 (The ar) 234 274.83 P -0.78 (gument) 261.21 274.83 P 2 F -0.78 (intr) 297.2 274.83 P -0.78 (gr) 312.57 274.83 P -0.78 (oup) 321.28 274.83 P 0 F -0.78 ( identi\336es the interr) 336.27 274.83 P -0.78 (upt gr) 420.73 274.83 P -0.78 (oup allocated for the newly) 447.06 274.83 P (cr) 234 262.83 T (eated instance of the frame scheduler) 242.21 262.83 T (. The device driver must set the) 405.75 262.83 T -0.29 (har) 234 250.83 P -0.29 (dwar) 248.58 250.83 P -0.29 (e devices it manages so that interr) 271.79 250.83 P -0.29 (upts ar) 419.71 250.83 P -0.29 (e dir) 450.21 250.83 P -0.29 (ected to this interr) 469.99 250.83 P -0.29 (upt) 549.5 250.83 P (gr) 234 238.83 T (oup \050see the paper \322Gr) 243.32 238.83 T (oup Interr) 343.95 238.83 T (upts on Challenge and Onyx Systems\323) 388.98 238.83 T -0.16 (distributed with REACT/Pr) 234 226.83 P -0.16 (o\051. The actual gr) 357.7 226.83 P -0.16 (oup identi\336er may be obtained) 428.69 226.83 P (using the macr) 234 214.83 T (o:) 299.43 214.83 T 6 9 Q (intrgroup_get_groupid\050intrgroup\051) 252 197.5 T 0 10 Q (The ef) 234 173.83 T (fective destination may be obtained using the following macr) 261.17 173.83 T (o:) 531.53 173.83 T 6 9 Q (EVINTR_GROUPDEST\050intrgroup_get_groupid\050intrgroup\051\051) 252 156.5 T FMENDPAGE %%EndPage: "33" 34 %%Page: "34" 34 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (34) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 4 F (Note:) 216 632.33 T 0 10 Q (When the device driver has dir) 242.48 632.33 T (ected the har) 379.1 632.33 T (dwar) 435.92 632.33 T (e interr) 459.13 632.33 T (upt to the) 491 632.33 T -0.29 (interr) 216 620.33 P -0.29 (upt gr) 240.59 620.33 P -0.29 (oup speci\336ed, the har) 267.41 620.33 P -0.29 (dwar) 361.78 620.33 P -0.29 (e interr) 384.98 620.33 P -0.29 (upt will be pr) 416.56 620.33 P -0.29 (esented at every) 475.62 620.33 P (CPU in the gr) 216 608.33 T (oup. That is, the interr) 276.31 608.33 T (upt will be taken concurr) 374.58 608.33 T (ently on each) 485.55 608.33 T (CPU occupied by the master or a slave FRS. The device driver interr) 216 596.33 T (upt) 516.34 596.33 T (handler code is enter) 216 584.33 T (ed concurr) 308.23 584.33 T (ently on each CPU on each interr) 355.51 584.33 T (upt.) 500.94 584.33 T 1 9.5 Q (Example of Initialization Function) 216 556.67 T 6 9 Q (/*) 216 545.5 T (** Frame Scheduler initialization function) 216 534.5 T (** for the External Interrupts Driver) 216 523.5 T (*/) 216 512.5 T (void) 216 501.5 T (eintr_frs_func_set\050intrgroup_t* intrgroup\051) 216 490.5 T ({) 216 479.5 T (int s;) 234 468.5 T (ASSERT\050intrgroup != 0\051;) 234 457.5 T (/*) 234 446.5 T (** locking and spl level management) 234 435.5 T (** specific to this \050ei\051 driver) 234 424.5 T (*/) 234 413.5 T (s = EILOCK\050\051;) 234 402.5 T (DISABLE_INTR\050\051;) 234 391.5 T (/*) 234 380.5 T (** setting up the hardware to send intr to) 234 369.5 T (** the appropriate destination.) 234 358.5 T (*/) 234 347.5 T (evintr_connect\050) 234 336.5 T (\050evreg_t *\051\050epcbase + EPC_IIDINTR4\051,) 288 325.5 T (EVINTR_LEVEL_EPC_INTR4,) 288 314.5 T (SPLDEV,) 288 303.5 T (EVINTR_GROUPDEST\050intrgroup_get_groupid\050intrgroup\051\051,) 252 292.5 T (\050EvIntrFunc*\051eiintr,) 288 281.5 T (\050void *\0510\051;) 288 270.5 T (/*) 234 259.5 T (** Epilog specific to this driver) 234 248.5 T (*/) 234 237.5 T (ENABLE_INTR\050\051;) 234 226.5 T (setsyscpu\050-1\051;) 234 215.5 T (intr_enabled = 1;) 234 204.5 T (EIUNLOCK\050s\051;) 234 193.5 T (}) 216 182.5 T FMENDPAGE %%EndPage: "34" 35 %%Page: "35" 35 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (The Frame Scheduler DDI) 462.87 679.44 T 1 F (35) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 1 11.5 Q (Frame Scheduler T) 234 631.33 T (ermination Function) 336.59 631.33 T 0 10 Q -0.54 (The device driver must pr) 234 606.83 P -0.54 (ovide a function with the following pr) 346.73 606.83 P -0.54 (ototype \050the) 512.1 606.83 P (actual function name is not signi\336cant\051:) 234 594.83 T 6 9 Q (void prefix_frs_func_clear) 252 577.5 T (\050) 397.6 577.5 T (void) 408.38 577.5 T (\051) 435.34 577.5 T (;) 446.13 577.5 T 0 10 Q (A Frame Scheduler that initialized a device driver calls this function when) 234 553.83 T -0.4 (the Frame Scheduler is terminating \050see \322Destr) 234 541.83 P -0.4 (oying a Frame Scheduler\323 on) 437.77 541.83 P (page) 234 529.83 T (32\051. The Frame Scheduler deallocates the interr) 257.85 529.83 T (upt gr) 464.9 529.83 T (oup to which) 492.02 529.83 T (interr) 234 517.83 T (upts wer) 258.59 517.83 T (e dir) 297.51 517.83 T (ected.) 317.57 517.83 T (The device driver should clean up data str) 234 493.83 T (uctur) 420.5 493.83 T (es and make sur) 444.02 493.83 T (e that the) 515.66 493.83 T (device is in a safe state.) 234 481.83 T 1 9.5 Q (Example of T) 234 454.17 T (ermination Function) 292.37 454.17 T 6 9 Q (/*) 234 443 T (** Frame Scheduler termination function) 234 432 T (** for the External Interrupts Driver) 234 421 T (*/) 234 410 T (void) 234 399 T (eintr_frs_func_clear\050void\051) 234 388 T ({) 234 377 T (/*) 252 366 T (** Epilog specific to this) 252 355 T (** particular \050ei\051 driver) 252 344 T (*/) 252 333 T (disable_intr\050\051;) 252 322 T (setintrcpu\050config_intrcpu\051;) 252 311 T (setsyscpu\050config_syscallcpu\051;) 252 300 T (}) 234 289 T 1 11.5 Q (Exporting the Initialization and T) 234 252.33 T (ermination Functions) 410.63 252.33 T 0 10 Q (A device driver must export the Frame Scheduler interface functions to) 234 227.83 T -0.02 (make them known to the Frame Scheduler) 234 215.83 P -0.02 (. This call, which is made during) 420.75 215.83 P (the device driver) 234 203.83 T (\325s own initialization, also makes the driver known as a) 309.62 203.83 T (sour) 234 191.83 T (ce of time-base interr) 253.49 191.83 T (upts:) 346.24 191.83 T 6 9 Q (frs_driver_export\050int frs_driver_id,) 252 174.5 T (void \050*frs_func_set\051\050intrgroup_t*\051,) 306 163.5 T (void \050*frs_func_clear\051\050void\051\051;) 306 152.5 T FMENDPAGE %%EndPage: "35" 36 %%Page: "36" 36 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (36) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 0 10 Q -0.56 (The parameter) 216 632.33 P 2 F -0.56 (frs_driver_id) 282.16 632.33 P 0 F -0.56 (is the driver identi\336cation number) 336.66 632.33 P -0.56 (. It is speci\336ed) 485.66 632.33 P (in the) 216 620.33 T 2 F (intr_quali\336er) 243.59 620.33 T 0 F ( parameter to) 297.36 620.33 T 5 F (frs_create\050\051) 359.13 620.33 T 0 F ( in or) 409.64 620.33 T (der to select this driver as) 432.59 620.33 T (the sour) 216 608.33 T (ce of interr) 251.85 608.33 T (upts. The identi\336er is an integer between 0 and 15.) 299.44 608.33 T (Dif) 216 596.33 T (fer) 229.79 596.33 T (ent drivers must use dif) 241.68 596.33 T (fer) 346.68 596.33 T (ent identi\336ers.) 358.56 596.33 T 1 9.5 Q (Example of Exporting Entry Points) 216 568.67 T 6 9 Q (/*) 216 557.5 T (** Function called by the External Interrupts) 216 546.5 T (** driver to export its Frame Scheduler interface) 216 535.5 T (** functions.) 216 524.5 T (*/) 216 513.5 T (frs_driver_export\05012,) 216 502.5 T ( eintr_frs_func_set,) 288 491.5 T ( eintr_frs_func_clear\051;) 288 480.5 T 1 11.5 Q (Generating Interrupts) 216 443.83 T 0 10 Q (A driver has to call the frame scheduler interr) 216 419.33 T (upt handler fr) 417.52 419.33 T (om within its) 479.29 419.33 T (interr) 216 407.33 T (upt handler) 240.59 407.33 T (. This handler will be enter) 292.02 407.33 T (ed concurr) 410.27 407.33 T (ently on each) 457.56 407.33 T (pr) 216 395.33 T (ocessor wher) 225.77 395.33 T (e the master or a slave FRS is r) 283.54 395.33 T (unning. It delivers the) 417.71 395.33 T (interr) 216 383.33 T (upt to the FRS on that pr) 240.59 383.33 T (ocessor) 349.31 383.33 T (. The function to be invoked is:) 381.13 383.33 T 6 9 Q (void frs_handle_driverintr\050void\051;) 234 366 T 0 10 Q (It is possible for a handler to be enter) 216 342.33 T (ed at a time when the FRS for its) 379.39 342.33 T -0.79 (pr) 216 330.33 P -0.79 (ocessor is not active. However) 225.77 330.33 P -0.79 (, the frs_handle_driverintr\050\051 function checks) 355.91 330.33 P (for this and does nothing when nothing is r) 216 318.33 T (equir) 407.39 318.33 T (ed.) 430.47 318.33 T 1 9.5 Q (Example of Generating Interrupt) 216 290.67 T 6 9 Q (void eiintr\050struct eframe_s *ep, unsigned int arg\051) 216 273.5 T ({) 216 262.5 T (/*) 234 251.5 T (** Do anything required by the hardware...) 234 240.5 T (** ...then call the Frame Scheduler:) 234 229.5 T (*/) 234 218.5 T (frs_handle_driverintr\050\051;) 234 207.5 T (/*) 234 196.5 T (** Do any additional processing needed.) 234 185.5 T (*/) 234 174.5 T (return;) 234 163.5 T (}) 216 152.5 T 26 315 27 349 R V 26 160.5 27 257.5 R V FMENDPAGE %%EndPage: "36" 37 %%Page: "37" 37 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (The Frame Scheduler DDI) 462.87 679.44 T 1 F (37) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 1 11.5 Q (Using a Device Driver) 234 631.33 T 0 10 Q (This is the sequence of actions that occur when a device driver is used as a) 234 606.83 T (sour) 234 594.83 T (ce of time-base interr) 253.49 594.83 T (upts for the Frame Scheduler) 346.24 594.83 T (.) 473.8 594.83 T (During its initialization at system boot time, the driver exports the) 234 570.83 T 5 F (pre\336x_frs_func_set\050\051) 234 558.83 T 0 F ( and) 327.26 558.83 T 5 F (pre\336x_frs_func_clear\050\051) 349.18 558.83 T 0 F ( functions, specifying a) 451.32 558.83 T (unique driver identi\336er between 0 and 15. After these functions have been) 234 546.83 T -0.54 (exported the frame scheduler is awar) 234 534.83 P -0.54 (e of the existence of this driver and will) 395.38 534.83 P (allow pr) 234 522.83 T (ograms to r) 270.88 522.83 T (equest it as the sour) 321.38 522.83 T (ce of interr) 408.82 522.83 T (upts.) 456.42 522.83 T (Later) 234 498.83 T (, a pr) 256.36 498.83 T (ogram cr) 278.62 498.83 T (eates a frame scheduler specifying this driver as the) 318.11 498.83 T -0.21 (sour) 234 486.83 P -0.21 (ce of interr) 253.49 486.83 P -0.21 (upts. The scheduler veri\336es that this driver has exported the) 300.65 486.83 P (initialization and termination functions and invokes) 234 474.83 T 5 F (pre\336x_frs_func_set\050) 234 462.83 T 2 F (intr) 323.93 462.83 T (gr) 339.3 462.83 T (oup) 348.01 462.83 T 5 F (\051) 363 462.83 T 0 F ( for this particular driver) 366.33 462.83 T (.) 475.32 462.83 T (As long as the FRS exists, the driver invokes) 234 438.83 T 5 F (frs_handle_driverintr\050\051) 431.52 438.83 T 0 F ( each) 536.44 438.83 T (time its interr) 234 426.83 T (upt handling r) 293.77 426.83 T (outine is enter) 357.75 426.83 T (ed. This informs the FRS that an) 420.57 426.83 T (interr) 234 414.83 T (upt has been r) 258.59 414.83 T (eceived.) 321.11 414.83 T -0.32 (When the FRS is \336nally destr) 234 390.83 P -0.32 (oyed, it invokes) 360.2 390.83 P 5 F -0.32 (pre\336x_frs_func_clear\050\051) 431.72 390.83 P 0 F -0.32 (for the) 536.04 390.83 P -0.68 (associated driver) 234 378.83 P -0.68 (. The driver ceases calling) 307.85 378.83 P 5 F -0.68 (frs_handle_driverintr\050\051) 420.56 378.83 P 0 F -0.68 ( until it is) 525.48 378.83 P (again initialized by an FRS.) 234 366.83 T FMENDPAGE %%EndPage: "37" 38 %%Page: "38" 38 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (38) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 1 12 Q (Examples) 45 631 T 0 10 Q (The following example pr) 216 605.33 T (ograms ar) 330.15 605.33 T (e pr) 374.43 605.33 T (ovided:) 391.49 605.33 T 2 F (simple) 216 587.33 T 0 F (A frame scheduler r) 288 587.33 T (unning several pr) 376.08 587.33 T (ocesses on a single) 454.11 587.33 T (pr) 288 575.33 T (ocessor) 297.77 575.33 T 2 F (mpr) 216 557.33 T (ogs) 232.48 557.33 T 0 F (A frame scheduler setup with independent pr) 288 557.33 T (ocesses) 490.32 557.33 T 2 F (multi) 216 539.33 T 0 F (Thr) 288 539.33 T (ee synchr) 303.71 539.33 T (onous frame schedulers r) 345.42 539.33 T (unning lightweight) 456.96 539.33 T (pr) 288 527.33 T (ocesses on thr) 297.77 527.33 T (ee pr) 359.07 527.33 T (ocessors) 380.92 527.33 T 2 F (driver) 216 509.33 T 0 F (A pseudo-driver that demonstrates the frame scheduler) 288 509.33 T (device driver interface.) 288 497.33 T 2 F (sixtyhz) 216 479.33 T 0 F (A very simple example r) 288 479.33 T (unning one pr) 396.72 479.33 T (ocess at 60Hz) 459.5 479.33 T 2 F (memlock) 216 461.33 T 0 F (An example that takes car) 288 461.33 T (e of locking memory down and) 402.43 461.33 T -0.13 (which skips the \336rst minor frame to account for initial cold) 288 449.33 P (caches.) 288 437.33 T (The code for each example is in a subdir) 216 413.33 T (ectory named for the example.) 393.19 413.33 T 1 11.5 Q (Basic Example) 216 376.33 T 0 10 Q -0.15 (This example shows how to map a r) 216 351.83 P -0.15 (eal-time application speci\336cation into a) 374.01 351.83 P (Frame Scheduler speci\336cation and also how to write the corr) 216 339.83 T (esponding) 483.52 339.83 T (pr) 216 327.83 T (ogram using the Frame Scheduler API.) 225.77 327.83 T 1 9.5 Q (Real-time Application Speci\336cation) 216 300.17 T 0 10 Q (The application consists of 2 pr) 216 276.33 T (ocesses that have to periodically execute a) 353.08 276.33 T (speci\336c sequence of code. The period for the \336rst pr) 216 264.33 T (ocess, pr) 443.7 264.33 T (ocess A, is 600) 481.63 264.33 T (milliseconds \050ms\051. The period for the other pr) 216 252.33 T (ocess, pr) 416.83 252.33 T (ocess B, is 2400 ms.) 454.76 252.33 T 4 9 Q -0.19 (Note:) 216 228.33 P 0 10 Q -0.19 (Such long periods ar) 242.1 228.33 P -0.19 (e unr) 332.52 228.33 P -0.19 (ealistic for r) 355.23 228.33 P -0.19 (eal-time applications. However) 406.79 228.33 P -0.19 (,) 544.19 228.33 P (they allow the use of printf statements within the \322r) 216 216.33 T (eal-time\323 loops in this) 444.61 216.33 T (sample pr) 216 204.33 T (ogram.) 260.04 204.33 T FMENDPAGE %%EndPage: "38" 39 %%Page: "39" 39 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (Examples) 527.81 679.44 T 1 F (39) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 1 9.5 Q (Frame Scheduler Design) 234 632.67 T 0 10 Q (The two periods and their ratio determine the selection of the minor frame) 234 608.83 T (period\321600 ms\321and the number of minor frames per major frame\3214, for) 234 596.83 T (a total of 2400 ms.) 234 584.83 T (The discipline for pr) 234 560.83 T (ocess A is strict r) 323.76 560.83 T (eal-time \050FRS_DISC_R) 397.65 560.83 T (T\051. Underr) 496.5 560.83 T (un) 543.25 560.83 T (and overrr) 234 548.83 T (un err) 281.07 548.83 T (ors should cause signals.) 307.92 548.83 T (Pr) 234 524.83 T (ocess B should r) 243.8 524.83 T (un only once in 2400 ms, so it operates as Continuable) 314.98 524.83 T (over as many as 4 minor frames. For the \336rst 3 frames, its discipline is) 234 512.83 T (Overr) 234 500.83 T (unnable and Continuable. For the last frame it is strict r) 260.11 500.83 T (eal-time. The) 504.22 500.83 T (Overr) 234 488.83 T (unnable discipline allows pr) 260.11 488.83 T (ocess B to r) 385.13 488.83 T (un without yielding past the) 434.47 488.83 T (end of each frame. The Continuable discipline ensur) 234 476.83 T (es that once pr) 464.39 476.83 T (ocess B) 528.52 476.83 T (does yield, it is not r) 234 464.83 T (esumed until the fourth minor frames has passed. The) 323.46 464.83 T -0.55 (combination allows pr) 234 452.83 P -0.55 (ocess B to extend its execution to the allowable period) 331.93 452.83 P -0.34 (of 2400 ms, and the strict r) 234 440.83 P -0.34 (eal-time discipline at the end makes certain that it) 347.88 440.83 P (yields by the end of the major frame.) 234 428.83 T -0.38 (Ther) 234 404.83 P -0.38 (e is a single FRS so a single pr) 254.5 404.83 P -0.38 (ocessor is used by both pr) 382.75 404.83 P -0.38 (ocesses. Pr) 495.12 404.83 P -0.38 (ocess) 541.72 404.83 P (A r) 234 392.83 T (uns within a minor frame until yielding or until the expiration of the) 248.14 392.83 T (minor frame period. In the latter case the frame scheduler generates an) 234 380.83 T (overr) 234 368.83 T (un err) 257.71 368.83 T (or signaling that pr) 284.55 368.83 T (ocess A is misbehaving.) 369.27 368.83 T (When pr) 234 344.83 T (ocess A yields, the frame scheduler immediately activates pr) 272.69 344.83 T (ocess) 539.59 344.83 T (B. It r) 234 332.83 T (uns until yielding, or until the end of the minor frame wher) 258.1 332.83 T (e it is) 520.72 332.83 T (pr) 234 320.83 T (eempted. This is not an err) 243.77 320.83 T (or since pr) 361.41 320.83 T (ocess B is Overr) 407.77 320.83 T (unable.) 477.79 320.83 T (Starting the next minor frame, the FRS allows pr) 234 296.83 T (ocess A to execute again.) 449.66 296.83 T (After it yields, pr) 234 284.83 T (ocess B is allowed to r) 309.54 284.83 T (esume r) 406.42 284.83 T (unning, if it has not yet) 441.46 284.83 T -0.55 (yielded. Again in the thir) 234 272.83 P -0.55 (d and fourth minor frame, A is started, followed by) 342.87 272.83 P -0.04 (B if it has not yet yielded. At the interr) 234 260.83 P -0.04 (upt that signals the end of the fourth) 402.98 260.83 P (frame \050and the end of the major frame\051, pr) 234 248.83 T (ocess B must have yielded, or an) 420.4 248.83 T (overr) 234 236.83 T (un err) 257.71 236.83 T (or is signalled.) 284.55 236.83 T 1 11.5 Q (Example of Scheduling Separate Programs) 234 199.83 T 0 10 Q -0.19 (The code in dir) 234 175.33 P -0.19 (ectory) 299.96 175.33 P 2 F -0.19 (mpr) 329.72 175.33 P -0.19 (ogs) 346.2 175.33 P 0 F -0.19 (is based on the code for the basic example \050see) 361.84 175.33 P -0.65 (\322Basic Example\323 on page) 234 163.33 P -0.65 (38\051. However) 346.13 163.33 P -0.65 (, the scheduled pr) 404.34 163.33 P -0.65 (ocesses A and B ar) 481.23 163.33 P -0.65 (e) 560.36 163.33 P -0.45 (physically loaded as separate commands. The main pr) 234 151.33 P -0.45 (ogram establishes the) 470.52 151.33 P FMENDPAGE %%EndPage: "39" 40 %%Page: "40" 40 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (40) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 0 10 Q (single FRS. The r) 216 632.33 T (eal-time pr) 290.19 632.33 T (ocesses ar) 338.26 632.33 T (e started as separate pr) 381.71 632.33 T (ograms. They) 483.11 632.33 T (communicate with the main pr) 216 620.33 T (ogram using SVR4-compatible interpr) 352.27 620.33 T (ocess) 520.17 620.33 T (communication messages \050see intr) 216 608.33 T (o\0502\051 and msgget\0502\051\051.) 367.23 608.33 T (Ther) 216 584.33 T (e ar) 236.5 584.33 T (e thr) 252.55 584.33 T (ee separate executables in the mpr) 272.68 584.33 T (ogs example. The master) 423.87 584.33 T (pr) 216 572.33 T (ogram, in master) 225.77 572.33 T (.c, is a command that has the following syntax:) 300.09 572.33 T 6 9 Q (master [-p) 234 555 T 2 10 Q (cpu-number) 293.32 555 T 6 9 Q (] [-s) 342.56 555 T 2 10 Q (slave-count) 374.92 555 T 6 9 Q (]) 421.18 555 T 0 10 Q (The) 216 531.33 T 2 F (cpu-number) 235.23 531.33 T 0 F ( speci\336es which pr) 284.47 531.33 T (ocessor to use for the one FRS this) 366.51 531.33 T (pr) 216 519.33 T (ogram cr) 225.77 519.33 T (eates. The default is pr) 265.26 519.33 T (ocessor 1. The) 364.89 519.33 T 2 F (slave-count) 429.17 519.33 T 0 F ( tells the master) 475.44 519.33 T (how many subor) 216 507.33 T (dinate pr) 290.82 507.33 T (ograms will be enqueued to the FRS. The default) 330.97 507.33 T (is 2 pr) 216 495.33 T (ograms.) 242.91 495.33 T (The pr) 216 471.33 T (oblems that need to be solved in this example ar) 245 471.33 T (e as follows:) 457.42 471.33 T 4 9 Q (\245) 216 453.33 T 0 10 Q (The frs-master pr) 234 453.33 T (ogram must enqueue the subor) 310.4 453.33 T (dinate pr) 448.23 453.33 T (ocesses but,) 488.38 453.33 T (since they ar) 234 441.33 T (e started as separate pr) 289.37 441.33 T (ograms, the master has to be) 390.77 441.33 T (informed of their pr) 234 429.33 T (ocess IDs after they start.) 321.95 429.33 T 4 9 Q (\245) 216 411.33 T 0 10 Q (The subor) 234 411.33 T (dinates need to specify upon which minor frames they) 278.25 411.33 T (should be enqueued, and with what discipline.) 234 399.33 T 4 9 Q (\245) 216 381.33 T 0 10 Q (The master needs to enqueue the subor) 234 381.33 T (dinates in the pr) 406.93 381.33 T (oper or) 478.9 381.33 T (der on) 510.83 381.33 T (their minor frames, so they will be dispatched in the pr) 234 369.33 T (oper sequence.) 476.8 369.33 T (Ther) 234 357.33 T (efor) 254.5 357.33 T (e the master has to distinguish the subor) 271.84 357.33 T (dinates in some way) 450.46 357.33 T (.) 539.88 357.33 T 4 9 Q (\245) 216 339.33 T 0 10 Q (The subor) 234 339.33 T (dinate pr) 278.25 339.33 T (ograms must join the FRS, so they need the handle) 318.39 339.33 T (of the FRS to use as an ar) 234 327.33 T (gument to) 344.2 327.33 T 5 F (frs_join\050\051) 392.18 327.33 T 0 F (. However) 434.37 327.33 T (, this) 479.9 327.33 T (information is in the master) 234 315.33 T (\325s addr) 357.24 315.33 T (ess space.) 387.74 315.33 T 4 9 Q (\245) 216 297.33 T 0 10 Q (If an err) 234 297.33 T (or occurs when enqueueing, the master needs to tell the) 269.01 297.33 T (subor) 234 285.33 T (dinate so it can terminate in an or) 259.02 285.33 T (derly way) 406.85 285.33 T (.) 450.43 285.33 T (Ther) 216 261.33 T (e ar) 236.5 261.33 T (e many ways in which these objectives could be met. In this) 252.55 261.33 T -0.57 (example, the master and subor) 216 249.33 P -0.57 (dinates communicate using a simple pr) 349.55 249.33 P -0.57 (otocol) 520.09 249.33 P (of messages exchanged using msgget\0502\051 and msgput\0502\051. The sequence of) 216 237.33 T (operations is as follows:) 216 225.33 T (1.) 216 207.33 T (The master pr) 234 207.33 T (ogram cr) 295.56 207.33 T (eates a Frame Scheduler) 335.04 207.33 T (.) 441.05 207.33 T (2.) 216 189.33 T -0.31 (The master sends a message inviting the most important subor) 234 189.33 P -0.31 (dinate to) 508.04 189.33 P (r) 234 177.33 T (eply) 237.77 177.33 T (. \050All the message queue handling is in module ipc.c.\051) 255.92 177.33 T (3.) 216 159.33 T (The subor) 234 159.33 T (dinate compiled fr) 278.25 159.33 T (om the \336le pr) 359.65 159.33 T (ocessA.c r) 418.81 159.33 T (eplies to this) 462.94 159.33 T (message, sending its pr) 234 147.33 T (ocess ID and r) 336.83 147.33 T (equesting the FRS handle.) 399.28 147.33 T 26 144 27 591 R V FMENDPAGE %%EndPage: "40" 41 %%Page: "41" 41 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (Examples) 527.81 679.44 T 1 F (41) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 0 10 Q (4.) 234 632.33 T (The subor) 252 632.33 T (dinate pr) 296.25 632.33 T (ocessA sends a series of messages, one for each) 336.39 632.33 T (minor queue on which it should enqueue. The master enqueues it as) 252 620.33 T (r) 252 608.33 T (equested.) 255.77 608.33 T (5.) 234 590.33 T (The subor) 252 590.33 T (dinate pr) 296.25 590.33 T (ocessA sends a \322r) 336.39 590.33 T (eady\323 message.) 413.77 590.33 T (6.) 234 572.33 T -0.41 (The master sends a message inviting the next most important pr) 252 572.33 P -0.41 (ocess to) 530.96 572.33 P (r) 252 560.33 T (eply) 255.77 560.33 T (.) 273.92 560.33 T (7.) 234 542.33 T (The pr) 252 542.33 T (ogram compiled fr) 281 542.33 T (om pr) 363.32 542.33 T (ocessB.c will r) 389.87 542.33 T (eply to this r) 451.9 542.33 T (equest, and) 507.36 542.33 T (the sequence 3-6 is r) 252 530.33 T (epeated for as many slaves as the) 340.57 530.33 T 2 F (slave-count) 489.87 530.33 T 0 F (parameter to the master pr) 252 518.33 T (ogram. \050Only two slaves ar) 369.95 518.33 T (e pr) 489.33 518.33 T (ovided.) 506.39 518.33 T (However) 252 506.33 T (, you can easily cr) 292.54 506.33 T (eate mor) 370.92 506.33 T (e using pr) 409.3 506.33 T (ocessB.c as a pattern.\051) 453.41 506.33 T (8.) 234 488.33 T (The master issues) 252 488.33 T 5 F (frs_start\050\051) 332.72 488.33 T 0 F (, and waits for the termination signal.) 376.56 488.33 T (9.) 234 470.33 T (The subor) 252 470.33 T (dinates independently issue) 296.25 470.33 T 5 F (frs_join\050\051) 422.72 470.33 T 0 F ( and the r) 464.9 470.33 T (eal-time) 506.95 470.33 T (dispatching begins.) 252 458.33 T 1 11.5 Q (Example of Multiple Synchronized Schedulers) 234 421.33 T 0 10 Q (The example) 234 396.83 T 2 F (multi) 293.2 396.83 T 0 F ( demonstrates the cr) 315.42 396.83 T (eation of thr) 404.7 396.83 T (ee synchr) 458.55 396.83 T (onized FRSs.) 500.25 396.83 T (The thr) 234 384.83 T (ee FRSs use the SYNC timer to establish a minor frame interval of) 266.07 384.83 T (50) 234 372.83 T (ms. All thr) 246.49 372.83 T (ee have 20 minor frames per major frame, for a major frame) 293.49 372.83 T (rate of 1 Hz.) 234 360.83 T (The following pr) 234 336.83 T (ocesses ar) 308.18 336.83 T (e scheduled in this example:) 351.62 336.83 T 4 9 Q (\245) 234 318.83 T 0 10 Q (Pr) 252 318.83 T (ocesses A and D r) 261.8 318.83 T (equir) 340.18 318.83 T (e a fr) 363.27 318.83 T (equency of 20 Hz) 385.15 318.83 T 4 9 Q (\245) 234 300.83 T 0 10 Q (Pr) 252 300.83 T (ocess B r) 261.8 300.83 T (equir) 299.83 300.83 T (es a fr) 322.92 300.83 T (equency of 10 Hz and can consume up to 100 ms) 349.04 300.83 T (of execution time each time) 252 288.83 T 4 9 Q (\245) 234 270.83 T 0 10 Q -0.35 (Pr) 252 270.83 P -0.35 (ocess C r) 261.8 270.83 P -0.35 (equir) 300.1 270.83 P -0.35 (es a fr) 323.19 270.83 P -0.35 (equence of 5 Hz and can consume up to 200 ms of) 348.6 270.83 P (execution time each time) 252 258.83 T 4 9 Q (\245) 234 240.83 T 0 10 Q -0.34 (Pr) 252 240.83 P -0.34 (ocess E r) 261.8 240.83 P -0.34 (equir) 299.15 240.83 P -0.34 (es a fr) 322.24 240.83 P -0.34 (equency of 4 Hz and can consume up to 250 ms of) 347.67 240.83 P (execution time each time) 252 228.83 T 4 9 Q (\245) 234 210.83 T 0 10 Q -0.31 (Pr) 252 210.83 P -0.31 (ocess F r) 261.8 210.83 P -0.31 (equir) 298.67 210.83 P -0.31 (es a fr) 321.76 210.83 P -0.31 (equency of 2 Hz and can consume up to 500 ms of) 347.26 210.83 P (execution time each time) 252 198.83 T 4 9 Q (\245) 234 180.83 T 0 10 Q (Pr) 252 180.83 T (ocesses K1, K2 and K3 ar) 261.8 180.83 T (e backgr) 371.42 180.83 T (ound pr) 408.55 180.83 T (ocesses that should r) 444.23 180.83 T (un as) 535.66 180.83 T (often as possible, when time is available.) 252 168.83 T 44 455 45 639 R V FMENDPAGE %%EndPage: "41" 42 %%Page: "42" 42 612 792 0 FMBEGINPAGE 1 9 Q 0 X 0 K (42) 45 109.2 T 0 F (:) 45 679.44 T 45 675 549 675 2 L 0.3 H 2 Z N 0 10 Q (The pr) 216 632.33 T (ocesses ar) 245 632.33 T (e assigned to pr) 288.45 632.33 T (ocessors as follows:) 357.87 632.33 T 4 9 Q (\245) 216 614.33 T 0 10 Q (FRS 1 r) 234 614.33 T (uns pr) 265.34 614.33 T (ocesses A \05020 Hz\051 and K1 \050backgr) 293.7 614.33 T (ound\051) 440.96 614.33 T 4 9 Q (\245) 216 596.33 T 0 10 Q (FRS 2 r) 234 596.33 T (uns pr) 265.34 596.33 T (ocesses B \05010 Hz\051, C \0505 Hz\051 and K2 \050backgr) 293.7 596.33 T (ound\051) 481.33 596.33 T 4 9 Q (\245) 216 578.33 T 0 10 Q (FRS 3 r) 234 578.33 T (uns pr) 265.34 578.33 T (ocesses D \05020Hz\051, E \0504 Hz\051 and F \0502 Hz\051 and K3.) 293.7 578.33 T -0.62 (In or) 216 554.33 P -0.62 (der to simplify the coding of the example, all r) 236.29 554.33 P -0.62 (eal-time pr) 434.8 554.33 P -0.62 (ocesses use the) 482.26 554.33 P (same function body) 216 542.33 T (,) 302.43 542.33 T 5 F (process_skeleton\050\051) 307.43 542.33 T 0 F (, which is parameterized with the) 391.8 542.33 T (pr) 216 530.33 T (ocess name, the number of the FRS it is to join, and the \322r) 225.77 530.33 T (eal-time\323) 477.86 530.33 T -0.61 (function it is to execute. In the sample code, all r) 216 518.33 P -0.61 (eal-time functions ar) 422.37 518.33 P -0.61 (e empty) 512 518.33 P (function bodies.) 216 506.33 T 1 11.5 Q (Example of Device Driver) 216 469.33 T 0 10 Q (The code in dir) 216 444.83 T (ectory) 282.52 444.83 T 2 F (driver) 312.47 444.83 T 0 F ( contains a skeletal test-bed for a kernel-level) 336.9 444.83 T (device driver that interacts with the Frame Scheduler) 216 432.83 T (. Most of the driver) 450.11 432.83 T -0.71 (functions consist of minimal or empty stubs. However) 216 420.83 P -0.71 (, the) 450.27 420.83 P 5 F -0.71 (ioctl\050\051) 470.2 420.83 P 0 F -0.71 ( entry point) 496.83 420.83 P -0.66 (to the driver \050see ioctl\0502\051\051 simulates a har) 216 408.83 P -0.66 (dwar) 391.68 408.83 P -0.66 (e interr) 414.89 408.83 P -0.66 (upt and calls the Frame) 446.11 408.83 P -0.57 (Scheduler entry point,) 216 396.83 P 5 F -0.57 (frs_handle_driverintr\050\051) 315.16 396.83 P 0 F -0.57 ( \050see \322Generating Interr) 420.08 396.83 P -0.57 (upts\323) 522.55 396.83 P (on page) 216 384.83 T (36\051. This allows you to test the driver) 253.62 384.83 T (. Calling its) 416.63 384.83 T 5 F (ioctl\050\051) 469.21 384.83 T 0 F ( entry is) 495.85 384.83 T (equivalent to using) 216 372.83 T 5 F (frs_usrintr\050\051) 303.49 372.83 T 0 F ( \050see \322Delivering T) 358.44 372.83 T (ime-Base Interr) 440.66 372.83 T (upts to a) 508.18 372.83 T (Frame Scheduler\323 on page) 216 360.83 T (28\051.) 335.79 360.83 T 1 11.5 Q (Example of a 60 Hz Frame Rate) 216 323.83 T 0 10 Q (The example in dir) 216 299.33 T (ectory) 299.2 299.33 T 2 F (sixtyhz) 329.15 299.33 T 0 F ( demonstrates the ability to schedule a) 358.57 299.33 T (pr) 216 287.33 T (ocess at a frame rate of 60 Hz, a common tar) 225.77 287.33 T (get rate in visual simulators.) 420.48 287.33 T (A single FRS is cr) 216 275.33 T (eated. It uses the high-pr) 292.82 275.33 T (ecision timer with an interval of) 402.23 275.33 T (16,666 micr) 216 263.33 T (oseconds \05016.66 ms, appr) 265.92 263.33 T (oximately 60 Hz\051. Ther) 376.11 263.33 T (e is one minor) 477.1 263.33 T (frame per major frame.) 216 251.33 T (One r) 216 227.33 T (eal-time pr) 240.73 227.33 T (ocess is enqueued to the FRS. By changing the compiler) 288.8 227.33 T -0.04 (constant LOGLOOPS you can change the amount of work it attempts to do) 216 215.33 P (in each frame.) 216 203.33 T FMENDPAGE %%EndPage: "42" 43 %%Page: "43" 43 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (Examples) 527.81 679.44 T 1 F (43) 557.01 109.2 T 63 675 567 675 2 L 0.3 H 2 Z N 1 11.5 Q (Example of Memory and Cache Management) 234 631.33 T 0 10 Q (The example in dir) 234 606.83 T (ectory) 317.2 606.83 T 2 F (memlock) 347.15 606.83 T 0 F ( is almost identical to that in dir) 382.31 606.83 T (ectory) 522.31 606.83 T 2 F (sixtyhz) 234 594.83 T 0 F (. \050Use dif) 263.42 594.83 T (f\0501\051 to display the alter) 303.21 594.83 T (ed code.\051) 403.21 594.83 T (The functional dif) 234 570.83 T (fer) 312.85 570.83 T (ence between the two examples is that the r) 324.73 570.83 T (eal-time) 516.58 570.83 T -0.46 (pr) 234 558.83 P -0.46 (ocess in memlock.c locks its own virtual addr) 243.77 558.83 P -0.46 (ess space so as to avoid page) 440.92 558.83 P (faults. Also, it executes one major frame\325s worth of) 234 546.83 T 5 F (frs_yield\050\051) 460.4 546.83 T 0 F ( calls) 507.58 546.83 T (immediately after r) 234 534.83 T (eturn fr) 318.95 534.83 T (om) 352.39 534.83 T 5 F (frs_join\050\051) 369.17 534.83 T 0 F (. The purpose of this is to \322warm) 411.35 534.83 T -0.47 (up\323 the pr) 234 522.83 P -0.47 (ocessor cache with copies of the pr) 278.73 522.83 P -0.47 (ocess code and data. \050An actual) 428.54 522.83 P -0.03 (application pr) 234 510.83 P -0.03 (ocess could access its major data str) 295.94 510.83 P -0.03 (uctur) 452.66 510.83 P -0.03 (es prior to this yield) 476.17 510.83 P (in or) 234 498.83 T (der to speed up the caching pr) 254.45 498.83 T (ocess.\051) 388.57 498.83 T FMENDPAGE %%EndPage: "43" 44 %%Trailer %%BoundingBox: 0 0 612 792 %%Pages: 43 1 %%DocumentFonts: Palatino-Roman %%+ Helvetica-Bold %%+ Palatino-Italic %%+ Times-Roman %%+ Helvetica %%+ Palatino-Bold %%+ Courier