%!PS-Adobe-2.0 %%Creator: dvips by Radical Eye Software %%Title: timer.dvi %%Pages: 8 1 %%BoundingBox: 0 0 612 792 %%EndComments %%BeginDocument: tex.pro /TeXDict 200 dict def TeXDict begin /bdf{bind def}def /bop-aux{}bdf /@rigin{ /@page-height exch def /@page-width exch def 72 Resolution div dup neg scale translate}bdf /@letter{Resolution dup -10 mul 8.5 11 @rigin}bdf /@landscape{[ 0 1 -1 0 0 0]concat Resolution dup 8.5 11 @rigin}bdf /@a4{Resolution dup -10.6929133858 mul 21 2.54 div 29.7 2.54 div @rigin}bdf /@legal{Resolution dup -13 mul 8.5 14 @rigin}bdf /@11x17{statusdict /11x17tray known{statusdict begin 11x17tray end}if Resolution dup -16 mul 11 17 @rigin}bdf /@manualfeed{ statusdict /manualfeed true put}bdf /@copies{/#copies exch def}bdf /@draft{ /bop-aux{gsave initmatrix 72 dup scale @page-width 2 div @page-height 2 div translate @page-height @page-width atan rotate /Helvetica-Bold findfont 2 scalefont setfont(DRAFT)dup stringwidth pop 2 div neg -1 moveto .95 setgray show grestore}bdf}bdf /@FontMatrix[1 0 0 -1 0 0]def /@FontBBox[0 0 0 0]def /dmystr(ZZf@@@)def /newname{dmystr cvn}bdf /df{/fontname exch def dmystr 2 fontname cvx(@@@@)cvs putinterval newname 7 dict def newname load begin /FontType 3 def /FontMatrix @FontMatrix def /FontBBox @FontBBox def /BitMaps 256 array def /BuildChar{CharBuilder}def /Encoding IdentityEncoding def end fontname{/foo setfont}2 array copy cvx def fontname load 0 dmystr 6 string copy cvn cvx put}bdf /dfe{newname dup load definefont setfont}bdf /ch-image{ ch-data 0 get}bdf /ch-width{ch-data 1 get}bdf /ch-height{ch-data 2 get}bdf /ch-xoff{ch-data 3 get}bdf /ch-yoff{ch-data 4 get}bdf /ch-dx{ch-data 5 get} bdf /CharBuilder{save 3 1 roll exch /BitMaps get exch get /ch-data exch def ch-data null ne{ch-dx 0 ch-xoff ch-yoff neg ch-xoff ch-width add ch-height ch-yoff sub setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-height ch-yoff sub .1 add]{ch-image}imagemask}if restore}bdf /dc{/ch-code exch def /ch-data exch def newname load /BitMaps get ch-code ch-data put}bdf /bop{gsave /SaveImage save def /bop-aux load exec 0 0 moveto}bdf /eop{clear SaveImage restore showpage grestore}bdf /@start{/Resolution exch def /IdentityEncoding 256 array def 0 1 255{IdentityEncoding exch 1 string dup 0 3 index put cvn put}for}bdf /p{show}bdf /RuleMatrix[1 0 0 -1 -.1 -.1]def /BlackDots 8 string def /v{gsave currentpoint translate false RuleMatrix{ BlackDots}imagemask grestore}bdf /a{moveto}bdf /delta 0 def /tail{dup /delta exch def 0 rmoveto}bdf /b{exch show tail}bdf /c{show delta 4 sub tail}bdf /d{ show delta 3 sub tail}bdf /e{show delta 2 sub tail}bdf /f{show delta 1 sub tail}bdf /g{show delta 0 rmoveto}bdf /h{show delta 1 add tail}bdf /i{show delta 2 add tail}bdf /j{show delta 3 add tail}bdf /k{show delta 4 add tail} bdf /l{show -4 0 rmoveto}bdf /m{show -3 0 rmoveto}bdf /n{show -2 0 rmoveto} bdf /o{show -1 0 rmoveto}bdf /q{show 1 0 rmoveto}bdf /r{show 2 0 rmoveto}bdf /s{show 3 0 rmoveto}bdf /t{show 4 0 rmoveto}bdf /w{0 rmoveto}bdf /x{0 exch rmoveto}bdf /y{3 2 roll show moveto}bdf /bos{/section save def}bdf /eos{clear section restore}bdf end %%EndDocument %%BeginDocument: texps.pro TeXDict begin /rf{655360 div mul Resolution mul 7227 div /PixPerEm exch def findfont dup length 1 add dict /newfont exch def{1 index /FID ne{newfont 3 1 roll put}{pop pop}ifelse}forall 256 dict begin newfont /Encoding get 255 -1 0{ 2 copy get 4 -1 roll 1000 mul PixPerEm div def pop}for pop newfont /Metrics currentdict put end /fontname exch def dmystr 2 fontname cvx(@@@@)cvs putinterval newname dup newfont definefont[PixPerEm 0 0 PixPerEm neg 0 0] makefont def fontname{/foo setfont}2 array copy cvx def fontname load 0 dmystr 6 string copy cvn cvx put}bdf /ObliqueSlant{dup sin exch cos div neg}bdf /SlantFont{/foo exch def[1 0 foo 1 0 0]TransFont}bdf /ExtendFont{/foo exch def 258 2 roll 0 1 255{pop foo div 256 1 roll}for 258 -2 roll[foo 0 0 1 0 0] TransFont}bdf /TransFont{exch findfont exch makefont dup length dict /newfont exch def{1 index /FID ne{newfont 3 1 roll put}{pop pop}ifelse}forall dup newfont definefont pop}bdf end %%EndDocument TeXDict begin 300 @start /fa df[<01801801C01C03803803803803803803803807007007 00700700700700700E00E00E00E00E00E00E00E11E01C21E01C21E03C21E05C43F08C439F07838 0000380000700000700000700000700000E00000E00000E00000C00000>24 30 1 10 27]22 dc dfe /fb 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 17 28 25 25 50 41 17 17 17 25 28 12 17 12 14 25 25 25 25 25 25 25 25 25 25 17 17 28 28 28 25 46 36 33 36 36 33 30 39 39 19 25 39 33 47 36 39 30 39 36 28 33 36 36 50 36 36 33 17 14 17 29 25 17 25 28 22 28 22 17 25 28 14 17 28 14 41 28 25 28 28 22 19 17 28 25 36 25 25 22 20 11 20 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 25 25 8 25 25 25 25 14 25 25 17 17 28 28 0 25 25 25 12 0 27 17 17 25 25 25 50 50 0 25 0 17 17 17 17 17 17 17 17 0 17 17 0 17 17 17 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50 0 15 0 0 0 0 33 39 50 16 0 0 0 0 0 36 0 0 0 14 0 0 14 25 36 28 0 0 0 0 /Times-Bold 1000 786432 rf /fc 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 12 15 19 19 31 29 12 12 12 19 21 9 12 9 10 19 19 19 19 19 19 19 19 19 19 10 10 21 21 21 17 34 27 25 25 27 23 21 27 27 12 15 27 23 33 27 27 21 27 25 21 23 27 27 35 27 27 23 12 10 12 18 19 12 17 19 17 19 17 12 19 19 10 10 19 10 29 19 19 19 19 12 15 10 19 19 27 19 19 17 18 7 18 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 19 19 6 19 19 19 19 7 17 19 12 12 21 21 0 19 19 19 9 0 17 13 12 17 17 19 37 37 0 17 0 12 12 12 12 12 12 12 12 0 12 12 0 12 12 12 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 0 10 0 0 0 0 23 27 33 12 0 0 0 0 0 25 0 0 0 10 0 0 10 19 27 19 0 0 0 0 /Times-Roman 1000 589824 rf /fd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 15 19 23 23 38 35 15 15 15 23 31 11 15 11 13 23 23 23 23 23 23 23 23 23 23 15 15 31 31 31 23 42 28 28 30 33 28 28 33 33 15 20 30 25 38 30 33 28 33 28 23 25 33 28 38 28 25 25 18 13 18 19 23 15 23 23 20 23 20 13 23 23 13 13 20 13 33 23 23 23 23 18 18 13 23 20 30 20 20 18 18 12 18 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 23 23 8 23 23 23 23 10 25 23 15 15 23 23 0 23 23 23 11 0 24 16 15 25 25 23 40 45 0 23 0 15 15 15 15 15 15 15 15 0 15 15 0 15 15 15 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 0 13 0 0 0 0 25 33 43 14 0 0 0 0 0 30 0 0 0 13 0 0 13 23 30 23 0 0 0 0 /Times-Italic 1000 717619 rf /fe 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 27 27 27 27 27 27 27 27 27 27 27 27 0 0 0 27 27 27 27 0 27 27 27 27 27 27 27 0 0 27 0 27 27 27 27 27 27 27 27 0 27 27 0 27 27 27 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 0 0 0 27 27 0 27 0 0 0 0 0 0 0 0 0 27 0 0 27 27 0 27 0 0 0 0 /Courier 1000 717619 rf /ff 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 15 19 23 23 38 35 15 15 15 23 26 11 15 11 13 23 23 23 23 23 23 23 23 23 23 13 13 26 26 26 20 42 33 30 30 33 28 25 33 33 15 18 33 28 40 33 33 25 33 30 25 28 33 33 43 33 33 28 15 13 15 21 23 15 20 23 20 23 20 15 23 23 13 13 23 13 35 23 23 23 23 15 18 13 23 23 33 23 23 20 22 9 22 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 23 23 8 23 23 23 23 8 20 23 15 15 25 25 0 23 23 23 11 0 21 16 15 20 20 23 45 45 0 20 0 15 15 15 15 15 15 15 15 0 15 15 0 15 15 15 45 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 0 13 0 0 0 0 28 33 40 14 0 0 0 0 0 30 0 0 0 13 0 0 13 23 33 23 0 0 0 0 /Times-Roman 1000 717619 rf /fg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 14 17 21 21 35 32 14 14 14 21 28 10 14 10 12 21 21 21 21 21 21 21 21 21 21 14 14 28 28 28 21 38 25 25 28 30 25 25 30 30 14 18 28 23 35 28 30 25 30 25 21 23 30 25 35 25 23 23 16 12 16 18 21 14 21 21 18 21 18 12 21 21 12 12 18 12 30 21 21 21 21 16 16 12 21 18 28 18 18 16 17 11 17 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 21 21 7 21 21 21 21 9 23 21 14 14 21 21 0 21 21 21 10 0 22 15 14 23 23 21 37 42 0 21 0 14 14 14 14 14 14 14 14 0 14 14 0 14 14 14 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 11 0 0 0 0 23 30 39 13 0 0 0 0 0 28 0 0 0 12 0 0 12 21 28 21 0 0 0 0 /Times-Italic 1000 655360 rf /fh 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 25 25 25 25 25 25 25 25 25 25 25 25 0 0 0 25 25 25 25 0 25 25 25 25 25 25 25 0 0 25 0 25 25 25 25 25 25 25 25 0 25 25 0 25 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 25 25 0 25 0 0 0 0 0 0 0 0 0 25 0 0 25 25 0 25 0 0 0 0 /Courier 1000 655360 rf /fi 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 14 17 21 21 35 32 14 14 14 21 23 10 14 10 12 21 21 21 21 21 21 21 21 21 21 12 12 23 23 23 18 38 30 28 28 30 25 23 30 30 14 16 30 25 37 30 30 23 30 28 23 25 30 30 39 30 30 25 14 12 14 19 21 14 18 21 18 21 18 14 21 21 12 12 21 12 32 21 21 21 21 14 16 12 21 21 30 21 21 18 20 8 20 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 21 21 7 21 21 21 21 7 18 21 14 14 23 23 0 21 21 21 10 0 19 15 14 18 18 21 42 42 0 18 0 14 14 14 14 14 14 14 14 0 14 14 0 14 14 14 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 11 0 0 0 0 25 30 37 13 0 0 0 0 0 28 0 0 0 12 0 0 12 21 30 21 0 0 0 0 /Times-Roman 1000 655360 rf /fj 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 14 23 21 21 42 35 14 14 14 21 24 10 14 10 12 21 21 21 21 21 21 21 21 21 21 14 14 24 24 24 21 39 30 28 30 30 28 25 32 32 16 21 32 28 39 30 32 25 32 30 23 28 30 30 42 30 30 28 14 12 14 24 21 14 21 23 18 23 18 14 21 23 12 14 23 12 35 23 21 23 23 18 16 14 23 21 30 21 21 18 16 9 16 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 21 21 7 21 21 21 21 12 21 21 14 14 23 23 0 21 21 21 10 0 22 15 14 21 21 21 42 42 0 21 0 14 14 14 14 14 14 14 14 0 14 14 0 14 14 14 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42 0 12 0 0 0 0 28 32 42 14 0 0 0 0 0 30 0 0 0 12 0 0 12 21 30 23 0 0 0 0 /Times-Bold 1000 655360 rf /fk df[<000F0038007000E001C001C001C001C001 C001C001C001C001C001C001C001C001C001C001C001C001C0038007001E00F0001E0007000380 01C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C000E0007000 38000F>16 49 4 12 25]102 dc[16 49 4 12 25]103 dc dfe /fl 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 17 21 25 25 41 39 17 17 17 25 34 12 17 12 14 25 25 25 25 25 25 25 25 25 25 17 17 34 34 34 25 46 30 30 33 36 30 30 36 36 17 22 33 28 41 33 36 30 36 30 25 28 36 30 41 30 28 28 19 14 19 21 25 17 25 25 22 25 22 14 25 25 14 14 22 14 36 25 25 25 25 19 19 14 25 22 33 22 22 19 20 14 20 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 25 25 8 25 25 25 25 11 28 25 17 17 25 25 0 25 25 25 12 0 26 17 17 28 28 25 44 50 0 25 0 17 17 17 17 17 17 17 17 0 17 17 0 17 17 17 44 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44 0 14 0 0 0 0 28 36 47 15 0 0 0 0 0 33 0 0 0 14 0 0 14 25 33 25 0 0 0 0 /Times-Italic 1000 786432 rf /fm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 20 33 30 30 60 50 20 20 20 30 34 15 20 15 17 30 30 30 30 30 30 30 30 30 30 20 20 34 34 34 30 56 43 40 43 43 40 37 47 47 23 30 47 40 56 43 47 37 47 43 33 40 43 43 60 43 43 40 20 17 20 35 30 20 30 33 27 33 27 20 30 33 17 20 33 17 50 33 30 33 33 27 23 20 33 30 43 30 30 27 24 13 24 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 30 30 10 30 30 30 30 17 30 30 20 20 33 33 0 30 30 30 15 0 32 21 20 30 30 30 60 60 0 30 0 20 20 20 20 20 20 20 20 0 20 20 0 20 20 20 60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 18 0 0 0 0 40 47 60 20 0 0 0 0 0 43 0 0 0 17 0 0 17 30 43 33 0 0 0 0 /Times-Bold 1000 943718 rf end TeXDict begin @letter %%EndProlog %%Page: 1 1 bop 292 211 a fm(Real-T)o(ime)13 b(Mach)i(T)o(imers:)20 b(Exporting)14 b(T)o (ime)f(to)i(the)g(User)616 337 y fl(Stefan)d(Savage)g(and)h(Hideyuki)f(T)-5 b (okuda)693 453 y(School)13 b(of)f(Computer)g(Science)696 511 y(Carnegie)g(Mel\ lon)h(University)656 569 y(Pittsbur)n(gh,)g(Pennsylvania)g(15213)711 628 y fk (f)p fl(savage,hxt)p fk(g)p fl(@cs.cmu.edu)898 845 y fj(Abstract)241 924 y fi (The)h(current)g(CMU)f(Mach)i(3.0)e(microkernel)h(exports)f(simple)h(timestam\ p)f(and)h(delay)g(abstractions)179 974 y(through)8 b fh(host)r 13 2 v 12 w (get)s 13 2 v 12 w(time\(\))h fi(and)h(a)h(timeout)d(parameter)j(to)e fh(mach) r 13 2 v 13 w(msg\(\))p fi(.)15 b(While)9 b(this)g(is)g(suf)o(\256cient)179 1023 y(for)h(many)i(purposes,)f(it)g(does)g(not)f(provide)g(the)h(precision)g (or)g(generality)f(required)g(for)h(a)h(variety)e(of)h(real-)179 1073 y(time) f(applications.)j(In)d(this)f(paper)h(we)g(describe)h(extensions)e(to)g(CMU') m(s)h(Mach)h(3.0)f(which)f(provide)g(users)179 1123 y(with)f(\257exible)h(tim\ e-based)h(synchronization)e(and)h(timestamp)h(services.)16 b(Additionally)-6 b (,)10 b(we)g(will)e(describe)179 1173 y(how)f(timing)f(and)h(scheduling)g(ser\ vices)h(are)g(integrated)f(to)g(allow)f(real-time)i(applications)e(to)h(handl\ e)g fg(timing)179 1223 y(faults)p fi(.)75 1369 y fm(1)60 b(Intr)o(oduction)75 1472 y ff(Modern)21 b(operating)f(systems)h(are)h(expected)f(to)g(provide)f (services)h(to)g(allow)f(application)g(programs)h(to)75 1528 y(synchronize)15 b(with)g(the)h(passage)g(of)h(time.)31 b(The)17 b(BSD)f(UNIX)g(interface)h (includes)e fe(gettimeofday\(\))p ff(,)75 1585 y fe(sleep\(\))p ff(,)24 b fe (signal\(\))e ff(and)d fe(select\(\))j ff(to)d(provide)f(this)g(functionality\ [7)m(].)42 b(Similarly)l(,)22 b(Mach)e(3.0)75 1641 y(exports)c fe(host)t 14 2 v 13 w(get)t 14 2 v 14 w(time\(\))i ff(and)f(a)g(timeout)f(parameter)i(to)f fe (mach)t 14 2 v 13 w(msg\(\))p ff([8)q(].)35 b(While)16 b(these)g(timing)75 1698 y(services)i(are)h(suf)n(\256cient)f(for)h(a)f(broad)g(range)g(of)g(gene\ ral)h(purpose)e(applications,)h(real-time)g(applications)75 1754 y(frequently) 12 b(require)h(greater)h(precision)e(and)h(\257exibility)-6 b(.)23 b(Real-tim\ e)14 b(applications)d(may)i(be)h(loosely)d(de\256ned)75 1811 y(as)k(applicati\ ons)d(in)i(which)g(the)g(relationship)f(between)h(execution)g(behavior)f(and) i(the)f(passage)g(of)h(time)g(di-)75 1867 y(rectly)e(impacts)g(program)h(corr\ ectness.)22 b(Included)13 b(in)g(this)f(class)h(of)g(software)g(are)h(applica\ tions)e(for)h(factory)75 1924 y(automation,)f(military)g(command)h(and)f(cont\ rol,)h(robotics,)f(and)g(the)h(rapidly)e(growning)g(\256eld)i(of)g(continuous) 75 1980 y(media[6].)25 b(T)n(imestamps,)14 b(exact)g(delays,)g(periodic)f(sig\ nals)g(and)g(timeouts)g(are)h(among)g(the)g(services)f(which)75 2037 y(may)f (be)f(demanded)g(by)g(these)g(types)f(of)h(applications.)146 2093 y(There)j (are)i(several)e(requirements)g(for)h(providing)e(this)g(kind)h(of)g(support.) 26 b(First,)15 b(it)f(is)g(important)g(to)g(be)75 2149 y(able)g(to)f(measure) i(time)f(with)f(a)h(high)f(degree)h(of)g(precision.)24 b(Second,)15 b(users)e (must)h(be)g(able)g(to)f(synchronize)75 2206 y(with)i(this)h(high)f(precision) g(time)h(source.)32 b(Third)16 b(and)g(last,)h(it)f(is)g(necessary)g(to)g(int\ egrate)g(scheduling)e(and)75 2262 y(synchronization)d(so)j(that)f(computation) f(can)i(be)g(modi\256ed)g(in)f(the)h(presence)g(of)g fd(timing)e(faults)p ff (,)h(or)h(errors)g(in)75 2319 y(temporal)d(correctness.)75 2368 y 720 2 v 142 2441 a fc(This)f(research)f(was)g(supported)f(in)j(part)f(by)g(the)g(U.S.)g (NRaD)g(under)f(contract)h(number)f(N66001-87-C-0155,)g(by)g(the)h(Of\256ce)f (of)75 2486 y(Naval)f(Research)f(under)h(contract)g(number)g(N00014-84-K-0734\ ,)f(by)h(the)g(Defense)g(Advanced)e(Research)h(Projects)h(Agency)l(,)h(ARP)l (A)75 2532 y(Order)i(No.)18 b(7330)10 b(under)g(contract)g(number)g(MDA72-90-\ C-0035,)g(and)g(by)g(the)h(Federal)f(Systems)f(Division)i(of)g(IBM)g(Corporat\ ion)75 2578 y(under)d(University)g(Agreement)g(Y)l(A-278067.)k(The)c(views)g (and)g(conclusions)e(contained)h(in)i(this)f(document)g(are)g(those)g(of)h (the)f(authors)75 2623 y(and)f(should)f(not)h(be)g(interpreted)h(as)f(represe\ nting)f(of\256cial)h(policies,)h(either)f(expressed)e(or)j(implied,)h(of)e (NRaD,)h(ONR,)g(DARP)l(A,)g(IBM,)75 2669 y(or)h(the)g(U.S.)h(Government.)p eop %%Page: 2 2 bop 146 45 a ff(W)l(e)16 b(have)g(developed)f(this)f(necessary)i(functionali\ ty)d(in)j(Real-T)n(ime)h(Mach,)h(an)e(extension)e(to)h(CMU')n(s)75 102 y(Mach) h(3.0)f(which)g(provides)f(predictable)g(scheduling)g(and)h(priority)f(consis\ tent)f(synchronization[15)m(,)j(14].)75 158 y(T)n(ime)10 b(services)f(are)h (exported)f(to)g(the)g(user)g(in)g(the)h(form)g(of)f(two)g(abstractions:)k fd (clocks)d ff(and)f fd(timers)p ff(.)15 b(T)n(imers)10 b(are)75 214 y(active)i (objects)e(which)h(allow)g(users)h(to)f(synchronize)g(with)g(time)g(in)h(a)g (variety)f(of)h(ways.)18 b(Clocks)11 b(are)i(devices)75 271 y(which)d(measure) i(the)f(passage)g(of)g(time)g(and)g(support)f(the)h(use)g(of)g(timers)g(to)g (a)h(particular)e(degree)i(of)f(accuracy)n(.)75 327 y(In)e(the)g(next)g(secti\ ons)e(we)j(will)e(examine)h(these)g(two)f(abstractions)g(more)h(closely)f(and) h(the)g(motivation)e(for)j(their)75 384 y(design.)75 530 y fm(2)60 b(Clocks) 75 633 y ff(In)12 b(\256rst)g(implementing)f(our)g(time)h(services)g(we)g(wer\ e)g(faced)h(with)e(two)g(problems.)18 b(The)12 b(\256rst)g(was)g(our)f(desire) 75 690 y(to)16 b(allow)f(the)h(use)g(of)g(additional)f(time)h(measurement)h (hardware)f(to)g(be)g(integrated)f(seamlessly)h(for)g(those)75 746 y(applicat\ ions)d(which)i(required)g(high)f(precision.)28 b(Second,)17 b(we)f(encountere\ d)e(a)i(problem)f(with)g(the)g(lack)g(of)75 802 y(resolution)10 b(stability)g (in)i(Mach)g(3.0')n(s)g(representation)f(of)h(the)g(host)f(time.)19 b(In)12 b (order)g(to)g(support)f(synchronized)75 859 y(time)j(in)g(a)h(distributed)d (environment)i(while)f(still)g(preserving)h(monotonicity[12)m(],)i(Mach)f(3.0) f(provides)f(the)75 915 y fe(host)t 14 2 v 13 w(adjust)5 b 14 2 v 13 w(time\(\ \))14 b ff(interface.)j(This)10 b(interface)h(allows)g(the)g(host)f(time)h (to)g(be)g(skewed)g(at)h(resolutions)75 972 y(under)f(one)h(scheduling)e(cloc\ k)h(tick.)17 b(Consequently)-5 b(,)13 b(the)e(time)h(between)f(two)g(scheduli\ ng)f(clock)h(ticks)g(is)g(not)75 1028 y(always)g(measured)i(as)f(such.)18 b (The)12 b(solution)d(we)j(reached)h(to)e(these)h(problems)f(was)h(to)f(create) i(the)f(abstraction)75 1085 y(of)20 b(clocks,)i(which)d(measure)i(the)e(passa\ ge)h(of)g(time.)43 b(Clocks)19 b(can)h(be)g(used)g(for)g(accurate)h(timestamp\ s,)75 1141 y(measurements)11 b(of)g(CPU)g(usage,)g(or)g(for)g(basing)f(repres\ entations)f(of)i(the)f(time)h(of)g(day)m(.)16 b(T)n(imers)11 b(can)g(be)g(bou\ nd)75 1198 y(to)16 b(dif)o(ferent)h(clocks)g(depending)e(on)i(application)e (need)i(which)f(allows)g(the)g(simple)h(introduction)d(of)j(high)75 1254 y (resolution)c(timing)h(hardware.)29 b(Additionally)13 b(the)i(problem)g(of)g (the)g(host)f(time)h(representation)f(disappears)75 1311 y(since)h(clocks)f (represent)h(a)h(local,)g(device)f(speci\256c)g(time.)29 b(\252Host)14 b(time\ \272)i(is)f(a)g(system)g(personality)e(speci\256c)75 1367 y(notion)d(and)h (belongs)e(outside)h(the)h(kernel)g(along)f(with)g(operations)g(on)h(its)f (skew)m(.)75 1491 y fb(2.1)50 b(Functionality)75 1578 y ff(In)10 b(essence,)g (a)h(clock)e(is)g(simply)g(a)h(piece)g(of)g(hardware)g(which)g(measures)g(the) f(passage)h(of)g(time.)16 b(It)10 b(was)f(logical)75 1635 y(therefore)h(to)g (represent)f(clocks)h(as)g(Mach)g(devices.)16 b(This)9 b(limits)g(the)g(numbe\ r)h(of)g(additional)e(abstractions)g(and)75 1691 y(interfaces)j(in)g(the)g (kernel)g(and)g(facilitates)f(the)h(addition)e(of)i(specialized)g(time)g(meas\ urement)g(hardware.)146 1748 y(Clocks)h(are)j(manipulated)d(using)g(the)h(sta\ ndard)g(Mach)h(3.0)f(device)h(interfaces.)23 b(As)13 b(with)f(any)i(device,)g (a)75 1804 y(clock)f(must)f(\256rst)h(be)g(opened)g(using)e(device)s 14 2 v 13 w(open\(\))i(with)f(the)h(name)h(of)f(the)f(clock)h(device.)22 b(The)13 b(nam\ es)g(for)75 1861 y(these)e(devices)g(are)h(machine)g(dependent)e(so)h(we)h (have)f(provided)f(a)i(universal)e(macro,)j fe(CLOCK)t 14 2 v 13 w(REALTIME)p ff(,)75 1917 y(which)7 b(maps)g(to)g(a)h(baseline)f(clock)g(device)g(on)g(all) g(platforms.)15 b(Clocks)7 b(are)h(generally)f(manipulated)f(through)g(the)75 1974 y fe(device)t 14 2 v 14 w(get)t 14 2 v 13 w(status\(\))p ff(,)16 b fe (device)5 b 14 2 v 13 w(set)t 14 2 v 14 w(status\(\))p ff(,)16 b(and)d fe(dev\ ice)t 14 2 v 14 w(map\(\))h ff(interfaces)f(although)75 2030 y(the)g(particul\ ar)f(functionality)f(allowed)h(is)h(hardware)g(dependent.)22 b(T)m(ypical)12 b (operations)g(include)g(getting)f(the)75 2086 y(time,)g(getting)e(the)i(resol\ ution,)e(setting)g(the)i(resolution,)e(or)i(mapping)f(the)g(clock)h(into)f (a)h(user)q(')n(s)f(address)h(space.)75 2211 y fb(2.2)50 b(Implementation)75 2298 y ff(For)19 b(all)f(system)f(architectures)h(which)g(we)g(have)g(support\ ed)f(to)h(this)f(point)g(\(i486)h(A)-6 b(T)m(,)19 b(DECstation,)f(and)75 2354 y(SUN3\))13 b(the)f(baseline)g(clock)g(has)h(been)g(based)f(on)h(the)f(schedu\ ling)f(clock)h(tick.)21 b(In)13 b(the)f(case)h(of)g(the)g(i486)e(A)-5 b(T)75 2411 y(and)15 b(the)f(DECstation)f(where)i(the)g(clock)f(resolution)f(may)i (be)g(altered,)h(it)e(was)h(necessary)g(to)f(multiplex)f(the)75 2467 y(kernel) i fe(clock)t 14 2 v 14 w(interrupt\(\))j ff(routine)c(on)h(top)f(of)i(this)e (baseline)g(clock)h(device.)28 b(For)16 b(instance,)g(when)75 2524 y(the)11 b (baseline)g(clock)g(on)h(the)f(i486)f(A)-5 b(T)12 b(is)f(directed)g(to)g(incr\ ease)h(its)f(resolution)e(to)i(1ms,)h(the)g(scheduling)e(clock)75 2580 y(tick) g(frequency)g(increases)h(by)f(10.)16 b(T)m(o)10 b(preserve)h(the)f(illusion) e(of)j(the)f(standard)g(10ms)g(scheduling)f(clock)h(tick,)75 2636 y(the)j fe (clock)5 b 14 2 v 13 w(interrupt\(\))17 b ff(routine)c(is)g(executed)g(only)g (at)h(every)g(tenth)f(interrupt.)23 b(When)13 b(the)g(interrupt)75 2693 y(fre\ quency)d(is)g(not)f(an)h(integral)g(divisor)e(of)j(the)e(scheduling)g(clock)h (tick)f(frequency)m(,)i(the)f(scheduling)e(clock)i(tick)p eop %%Page: 3 3 bop 75 45 a ff(will)9 b(be)i(temporarily)f(skewed)f(over)i(the)f(period)g (of)g(the)g(modulo)g(of)g(the)h(two.)k(This)10 b(seemed)h(reasonable)f(since) 75 102 y(the)f(short)f(term)i(inaccuracy)g(of)f(this)f(number)h(has)h(relativ\ ely)e(minor)h(ef)o(fects,)h(and)f(quantum)g(based)g(scheduling)75 158 y(is)i (a)g(poor)g(choice)g(for)g(real-time)h(programs)f(anyway)l(.)146 214 y(In)f (general,)i(a)f(clock)g(device)f(contains)g(an)h(interrupt)e(handler)n(,)i (a)h(representation)d(of)i(the)g(current)f(time)h(and)75 271 y(a)16 b(timer)h (queue.)31 b(Pending)15 b(timers)h(are)h(inserted)e(into)g(this)g(queue)h(in) f(time)h(order)n(.)31 b(When)16 b(a)h(clock)e(device)75 327 y(receives)e(an)f (interrupt)f(it)h(checks)h(the)f(head)g(of)h(the)f(queue)g(to)g(see)h(if)g (any)f(timers)g(have)h(expired.)20 b(If)13 b(so)f(it)g(sets)75 384 y(an)h(AST) h(to)f(process)g(the)g(timers)g(at)h(a)f(safe)h(point.)22 b(Additionally)-6 b (,)14 b(clock)f(devices)g(may)h(provide)f(services)g(to)75 440 y(map)e(repres\ entations)d(of)j(the)f(current)g(time)g(into)f(a)i(user)q(')n(s)f(address)g (space,)h(to)e(change)i(clock)f(resolution,)e(or)j(to)75 497 y(obtain)f(highe\ r)g(resolution)g(timestamps)g(than)h(are)h(available)e(via)h(the)g(mapped)g (device)g(interface.)146 553 y(There)g(is)g(a)g(great)h(variance)f(in)g(the)g (timing)f(hardware,)i(especially)e(with)h(respect)g(to)g(achievable)f(interru\ pt)75 610 y(resolutions.)33 b(The)18 b(MC146818)e(clock)i(chip)f(on)g(the)g (DECstation,)h(for)f(example,)j(will)c(only)h(interrupt)f(at)75 666 y(frequen\ cies)10 b(which)f(are)i(powers)e(of)h(2.)16 b(Alternatively)-5 b(,)11 b(the)f (I8254)f(clock)h(chip)f(on)h(the)g(i486)f(A)-5 b(T)10 b(will)e(interrupt)75 723 y(at)15 b(any)h(multiple)e(of)31 b(838ns)14 b(up)h(to)30 b(.055)16 b(seco\ nds.)28 b(T)l(o)16 b(retain)f(machine)g(independence)g(in)g(our)g(interface) 75 779 y(yet)c(preserve)h(the)f(power)g(of)h(the)f(underlying)e(hardware)j (we)g(let)f(the)g(user)g(request)g(clock)g(resolution)f(changes)75 835 y(in) 15 b(terms)h(of)g(a)h(desired)e(resolution)f(and)i(an)f(allowable)g(skew)h (from)g(that)f(resolution.)29 b(If)16 b(the)g(clock)f(driver)75 892 y(cannot) 8 b(be)i(set)e(to)h(a)g(resolution)e(within)h(\(desired)r 14 2 v 13 w(resolut\ ion)f(-)j(skew\))f(then)f(it)h(will)e(return)i(failure.)16 b(The)9 b(correct) 75 948 y(resolution)g(may)j(be)f(queried)g(later)g(if)g(this)f(information)g (is)h(important)f(to)h(the)g(user)m(.)75 1094 y fm(3)60 b(T)o(imers)75 1198 y ff(Clock)10 b(devices)g(are)h(suf)o(\256cient)f(for)h(high)e(resolution)f(tim\ estamps)i(but)g(to)g(provide)f(blocking)g(synchronization)75 1254 y(requires) 16 b(a)i(stateful)e(object.)33 b(This)15 b(prompted)i(the)f(design)g(of)h(a)g (timer)g(abstraction.)32 b(T)o(imers)17 b(are)g(kernel-)75 1311 y(exported)10 b(objects)g(with)f(three)i(properties,)f(an)h(expiration)e(time,)i(a)g(synchr\ onization)e(action)h(to)g(be)h(taken,)f(and)75 1367 y(an)h(activity)e(state.) 16 b(An)10 b(active)h(timer)f(will)g(perform)h(its)f(synchronization)e(action) i(when)g(its)g(expiration)f(time)i(is)75 1423 y(reached.)146 1480 y(A)f(timer) h(is)f(created)h(using)e(the)h fe(timer)t 14 2 v 14 w(create\(\))j ff(call.)j (It)11 b(is)f(bound)f(to)h(a)h(task)f(and)g(to)g(a)h(clock)f(device)75 1536 y (which)h(will)g(measure)h(the)g(passage)f(of)h(time)g(for)g(it.)18 b(The)12 b (task)f(binding)f(is)h(useful)g(for)h(ownership)f(and)g(proper)75 1593 y(tear) o(-down)f(of)g(timer)g(resources.)16 b(If)10 b(a)h(task)e(is)h(terminated,)g (then)g(the)f(timer)i(resources)f(owned)f(by)h(it)f(are)i(termi-)75 1649 y (nated)i(as)g(well.)21 b(It)13 b(is)f(also)g(possible)g(to)g(explicitly)f(ter\ minate)i(a)g(timer)g(using)f(the)g fe(timer)t 14 2 v 14 w(terminate\(\))75 1706 y ff(call.)146 1762 y(T)n(imers)e(allow)f(synchronization)e(primarily)i (via)h(two)f(interfaces.)16 b fe(timer)t 14 2 v 14 w(sleep\(\))c ff(is)d(a)h (synchronous)75 1819 y(call)19 b(similar)f(to)g(the)h(POSIX)g(1003.4)f fe(nan\ osleep\(\))p ff([13)s(].)40 b(The)19 b(caller)g(speci\256es)f(a)h(time)g(to)g (wakeup)75 1875 y(and)f(indicates)e(whether)i(that)f(time)h(is)f(relative)h (or)f(absolute.)36 b(Relative)17 b(times)h(are)g(less)g(useful)f(for)h(real-) 75 1932 y(time)f(software)g(since)g(program-wide)g(accuracy)h(may)f(be)h(skew\ ed)e(by)h(preemption[4)o(].)35 b(For)18 b(example,)h(a)75 1988 y(thread)14 b (which)g(samples)f(data)i(and)f(then)f(sleeps)h(for)g(\256ve)h(seconds)e(may) i(be)f(preempted)g(between)g(sampling)75 2044 y(and)j(sleeping,)g(causing)e (a)j(steadily)d(increasing)h(skew)g(from)h(the)g(correct)g(time)f(base.)33 b (T)o(imers)17 b(which)f(are)75 2101 y(terminated)11 b(or)g(canceled)g(while)g (sleeping)f(return)g(an)i(error)f(to)g(the)g(user)m(.)146 2157 y fe(timer)t 14 2 v 13 w(arm\(\))j ff(provides)d(an)i(asynchronous)e(interface)h(to)g(timers.) 20 b(Through)12 b(it)f(the)i(user)f(speci\256es)g(an)75 2214 y(expiration)e (time,)j(an)f(optional)e(period,)i(and)f(a)i(port)e(which)g(will)g(receive)h (expiration)f(noti\256cation)f(messages.)75 2270 y(When)17 b(the)f(expiration) g(time)h(is)f(reached,)j(the)e(kernel)f(sends)g(an)h(asynchronous)e(message)i (containing)e(the)75 2327 y(current)10 b(time)f(to)h(this)e(port.)16 b(If)10 b (the)g(timer)g(is)f(speci\256ed)g(as)h(periodic)f(then)g(it)h(will)e(atomical\ ly)h(re-arm)i(itself)e(with)75 2383 y(the)i(speci\256ed)g(period)f(relative)h (to)g(the)g(last)f(expiration)g(time.)146 2440 y(Lastly)-5 b(,)18 b fe(timer) t 14 2 v 13 w(cancel\(\))h ff(allows)14 b(the)i(user)f(to)h(cancel)g(the)f (expiration)g(of)g(a)h(pending)f(timer)m(.)31 b(For)75 2496 y(periodic)11 b (timers,)h(the)g(user)g(has)f(the)h(option)e(of)i(canceling)g(only)e(the)i (current)g(expiration,)f(or)h(all)f(forthcoming)75 2553 y(expiration.)146 2609 y(These)17 b(last)f(facilities,)i(periodic)e(timers)h(and)g(partial)g(cancell\ ation,)h(are)g(important)e(because)h(they)g(al-)75 2665 y(low)f(an)h(ef\256ci\ ent)f(and)h(correct)g(implementation)e(of)i(periodic)f(computation.)32 b(This) 15 b(permits)i(a)g(user)g(level)p eop %%Page: 4 4 bop 75 45 a ff(implementation)10 b(of)h(Real-T)o(ime)g(Mach')n(s)g(periodic) g(threads.)75 190 y fm(4)60 b(T)o(iming)14 b(Faults)75 294 y ff(The)d(origina\ l)f(motivation)g(for)h(this)g(work)f(came)j(from)f(a)g(limitation)d(in)i(Real\ -T)n(ime)h(Mach')n(s)g(thread)f(package.)75 350 y(While)i(users)g(could)g(spe\ cify)f(a)i(deadline)f(for)h(periodic)e(threads,)i(this)f(deadline)f(would)h (only)f(be)i(checked)f(at)75 406 y(the)e(end)g(of)g(a)h(thread')m(s)f(periodi\ c)g(computation.)k(Ef)o(fectively)c(this)f(meant)i(that)e(the)h(user)g(was)h (only)e(noti\256ed)g(at)75 463 y(the)j(start)f(of)h(the)f(next)g(periodic)g (computation.)20 b(Moreover)o(,)13 b(aperiodic)f(deadlines)g(were)h(largely)f (ignored.)20 b(It)75 519 y(was)13 b(clear)h(that)e(we)h(needed)h(some)f(sort) f(of)i(asynchronous)d(noti\256cation)g(mechanism)j(to)e(allow)h(such)f(timing) 75 576 y(faults)c(to)h(be)h(acted)f(upon)g(aggressively)-5 b(.)16 b(W)l(e)10 b (looked)e(\256rst)h(into)g(the)g(use)g(of)g(the)g(exception)f(mechanism,)i (but)f(its)75 632 y(current)i(design)g(left)g(open)g(the)g(possibility)d(of)k (extended)e(priority)g(inversion)g(in)h(the)h(kernel.)17 b(This)10 b(is)h(bec\ ause)75 689 y(the)i(exception)f(mechanism)i fd(knows)f ff(that)g(the)g(except\ ion)f(was)h(caused)g(by)g(the)g(current)g(thread.)23 b(Therefore)14 b(a)75 745 y(timing)9 b(fault)g(registered)g(by)h(a)g(low)f(priority)g(thread)g(could)g (execute)h(in)f(the)h(context)f(of)h(a)g(high)f(priority)f(thread,)75 802 y (and)k(keep)g(it)g(blocked)f(in)h(the)g(kernel)g(inde\256nitely)-5 b(.)20 b (Instead)12 b(of)g(radically)g(changing)f(the)h(exception)f(code)h(we)75 858 y (designed)e(a)h(new)h(asynchronous)d(mechanism)i(which)g(led)g(to)f(the)h(cre\ ation)g(of)g(a)h(generalized)f(timer)g(service.)146 915 y(The)g(timer)h(inter\ face)g(supports)d(timing)i(faults)g(via)g(a)h(\257ag)g(in)f fe(timer)t 14 2 v 14 w(arm\(\))i ff(which)e(indicates)f(that)h(the)75 971 y(calling)c(thread)i (should)e(be)h(suspended)f(when)h(timer)h(expiration)e(occurs.)16 b(The)8 b (interface)h(is)f(important)f(because)75 1027 y(it)k(allows)g(timing)g(fault) g(handling)g(to)g(export)g(exception-like)g(semantics.)18 b(When)12 b(a)g(tim\ ing)f(fault)g(occurs,)h(the)75 1084 y(of)o(fending)i(thread)h(is)f(suspended) g(and)h(a)g(message)g(is)g(sent)f(to)h(its)f(deadline)g(handler)h(which)f(wil\ l)g(then)g(take)75 1140 y(corrective)d(action)f(and)h(possibly)e(resume)i(the) g(faulting)e(thread.)16 b(This)10 b(action)h(is)f(left)h(to)f(the)h(user)n (,)g(although)f(in)75 1197 y(practice)j(the)g(most)f(frequent)h(actions)f(inc\ lude)g(a)h(change)g(of)g(scheduling)e(parameters,)j(user)f(noti\256cation,)f (or)75 1253 y(for)h(hard)g(real-time)h(programs,)g(thread)f(termination.)21 b (T)m(o)13 b(simplify)f(programming)g(we)i(have)f(added)g(library)75 1310 y (support)g(for)i(deadline)f(handling)f(in)h(the)h(context)f(of)g(our)h fd(rt) r 14 2 v 14 w(thr)m(ead)f ff(package[15].)28 b(The)14 b(following)f(library) 75 1366 y(routine:)75 1467 y fe(thread_deadline_handler\(mythread,)36 b(mythr\ ead_attr,)31 b(entry,)e(arg\))146 1567 y ff(is)12 b(suf)o(\256cient)h(to)f (insure)g(that)h(when)f fe(mythread)j ff(misses)e(a)g(deadline)f(the)h(handle\ r)f fe(\(*entry\)\(arg\))75 1624 y ff(will)e(be)h(invoked.)75 1769 y fm(5)60 b (Performance)75 1872 y ff(All)14 b(benchmarks)h(were)g(performed)g(on)g(a)g (Gateway)f(2000)g(486DX2)f(66Mhz)i(system)f(with)g(16)h(megabytes)75 1929 y (of)e(70ns)f(ram,)i(and)e(64)h(kilobytes)d(of)j(25ns)f(secondary)g(cache.)22 b (Both)12 b(primary)h(and)f(secondary)h(caches)g(were)75 1985 y(warm.)j(The)8 b (system)f(was)h(runing)e(Real-T)o(ime)i(Mach)h(version)d(MK78)i(with)f(CMU)h (Unix)f(server)h(version)f(UX39)75 2041 y(running)i(in)h(single)g(user)h(mode\ .)16 b(Additionally)-6 b(,)11 b(the)g(network)f(was)g(disconnected)f(and)i (the)f(benchmarks)h(were)75 2098 y(scheduled)g(with)h(the)g(highest)f(thread) i(priority)-5 b(.)21 b(W)l(e)13 b(used)f(a)h(ST)l(A)-5 b(T![1])13 b(timer)f (board)g(to)h(take)f(measurements)75 2154 y(accurate)g(to)e(1)p fa(\026)p ff (sec.)75 2278 y fb(5.1)50 b(T)o(imer)13 b(operations)146 2365 y ff(W)l(e)j (measured)g(a)g(series)g(of)g(microbenchmarks)f(to)h(evaluate)f(the)g(executi\ on)g(cost)g(of)h(each)g(new)g(timer)75 2421 y(operation.)25 b(These)15 b(meas\ urements)f(were)h(repeated)g(1000)f(times)g(and)g(the)g(average)i(taken)e(\(c\ ontrolling)e(for)75 2478 y(clock)f(and)g(watchdog)f(interrupts)f(and)i(their) g(effect)g(on)g(the)g(cache,)h(the)f(variance)g(was)g(very)g(small\))146 2534 y(T)l(able)h(1)g(summarizes)h(the)f(latency)f(of)h(the)g(timer)g(operations.) 18 b(The)12 b(measurements)h(of)f fe(timer)t 14 2 v 14 w(arm\(\))75 2591 y ff (are)h(best)e(case)h(numbers)g(in)f(which)g(there)h(are)h(no)e(pending)f(time\ rs)i(earlier)g(in)g(the)f(clock)h(queue.)18 b(When)12 b(other)75 2647 y(timer\ s)h(intervene,)h(the)g(cost)f(increases)g(linearly)g(by)g(a)h(factor)g(of)27 b (600ns)12 b(per)i(timer)n(.)24 b(The)13 b(periodic)g(form)h(of)75 2704 y fe (timer)t 14 2 v 14 w(arm\(\))g ff(is)e(slightly)e(longer)j(that)f(the)g(one-s\ hot)f(but)h(there)h(is)f(signi\256cant)g(amortized)g(savings)g(since)p eop %%Page: 5 5 bop 598 5 a 754 2 v 57 x 2 57 v 623 45 a ff(operation)1059 62 y 2 57 v 1085 45 a(time)11 b(in)g fa(\026)p ff(secs)1351 62 y 2 57 v 598 63 a 754 2 v 57 x 2 57 v 623 103 a(timer)s 14 2 v 14 w(arm\(\))h([one-shot])1059 120 y 2 57 v 1183 103 a(33)1351 120 y 2 57 v 598 176 a 2 57 v 623 159 a(timer)s 14 2 v 14 w(arm\ \(\))g([periodic])1059 176 y 2 57 v 1183 159 a(37)1351 176 y 2 57 v 598 233 a 2 57 v 623 216 a(timer)s 14 2 v 14 w(cancel\(\))1059 233 y 2 57 v 1183 216 a (19)1351 233 y 2 57 v 598 289 a 2 57 v 623 272 a(timer)s 14 2 v 14 w(create\(\ \))1059 289 y 2 57 v 1172 272 a(220)1351 289 y 2 57 v 598 346 a 2 57 v 623 329 a(timer)s 14 2 v 14 w(terminate\(\))1059 346 y 2 57 v 1172 329 a(119)1351 346 y 2 57 v 598 347 a 754 2 v 57 x 2 57 v 623 387 a(mach)t 14 2 v 13 w(thread)r 14 2 v 14 w(self\(\))1059 404 y 2 57 v 1183 387 a(20)1351 404 y 2 57 v 598 460 a 2 57 v 623 443 a(null)e(trap)1059 460 y 2 57 v 1194 443 a(7)1351 460 y 2 57 v 598 462 a 754 2 v 641 539 a(T)m(able)h(1:)16 b fd(Latency)11 b(of)g(timer)f (operations)651 649 y 649 2 v 650 706 a 2 57 v 676 689 a ff(expiration)f(acti\ on)1007 706 y 2 57 v 1032 689 a(time)i(in)g fa(\026)p ff(secs)1298 706 y 2 57 v 651 707 a 649 2 v 650 764 a 2 57 v 676 747 a(unblock)f(thread)1007 764 y 2 57 v 1119 747 a(106)1298 764 y 2 57 v 650 820 a 2 57 v 676 803 a(send)g(messa\ ge)1007 820 y 2 57 v 1119 803 a(162)1298 820 y 2 57 v 651 822 a 649 2 v 439 899 a(T)l(able)h(2:)16 b fd(Latency)11 b(of)g(thr)m(ead)g(execution)g(fr)n (om)f(time)h(of)g(interrupt)75 1082 y ff(timer)f(reset)g(costs)f(are)21 b(1)p fa(\026)p ff(sec)10 b(\(again)g(subject)f(to)h(the)f(worst)h(case)g fd(O\(n\)) g ff(insertion)e(time)i(for)h(the)e(clock)h(queue\).)75 1139 y(These)h(number\ s)g(could)f(be)h(improved)g(using)f(tree-based)h(or)g(timing)f(wheel)h(algori\ thms[16)n(].)146 1195 y(The)e fe(timer)t 14 2 v 14 w(create\(\))j ff(and)e fe (timer)t 14 2 v 14 w(terminate\(\))j ff(are)d(substantially)d(slower)i(than)h (other)f(prim-)75 1252 y(itives)k(lar)o(gely)h(because)g(they)g(are)h(involve\ d)e(and)h(allocating)f(memory)i(and)f(port)g(structures.)25 b(Additionally)75 1308 y(both)13 b(of)h(these)g(operations)f(are)i(implemented)e(using)g(IPC)i (while)f(the)g(rest)g(of)g(the)g(timer)g(operations)f(are)h(in-)75 1365 y(vok\ ed)e(directly)g(through)g(traps.)22 b(The)13 b(times)f(for)i(the)f fe(mach)s 14 2 v 14 w(thread)t 14 2 v 14 w(self\(\))i ff(and)e(null)f(traps)g(are)i(giv\ en)75 1421 y(for)d(reference.)75 1545 y fb(5.2)50 b(Execution)12 b(latency) 146 1632 y ff(In)k(table)g(2)g(we)h(see)g(the)f(latency)g(between)g(the)g(tim\ e)h(a)f(clock)h(device)f(interrupt)f(occurs)h(and)h(a)f(thread)75 1689 y(wait\ ing)8 b(on)i(an)g(expired)f(timer)h(starts)f(to)g(execute.)16 b(The)10 b(two) f(cases)h(represent)g(two)f(dif)o(ferent)h(timer)g(expiration)75 1745 y(actio\ ns:)15 b(threads)c(which)f(are)j(directly)d(blocked)g(on)h(a)h(timer)f(using) f fe(timer)5 b 14 2 v 13 w(sleep\(\))p ff(,)14 b(and)d(threads)g(which)75 1802 y(are)19 b(waiting)e(for)i(a)g(timer)g(expiration)e(message.)39 b(MIG)19 b (stub,)h(copyout)e(and)g(general)h(IPC)g(overhead)g(all)75 1858 y(contribute) 10 b(to)g(the)h(56)p fa(\026)p ff(sec)g(dif)o(ference.)17 b(W)m(e)11 b(expect) g(that)f(a)i(handcoded)e(IPC)i(stub)e(in)h(the)f(kernel)h(and)g(general)75 1915 y(IPC)j(improvements)f(should)f(make)i(these)f(numbers)g(comparable.)24 b (Also,)13 b(we)h(believe)f(that)g(the)g(scheduling)75 1971 y(overhead)e(compo\ nent)f(of)i(these)e(numbers)h(can)h(be)f(reduced)g(by)g(at)g(least)g(40)p fa (\026)p ff(secs.)75 2095 y fb(5.3)50 b(Clock)12 b(operations)146 2182 y ff (The)h(latency)g(of)h(clock)f(device)h(operations)e(is)h(bounded)f(by)h(the)h (performance)g(of)g(the)f(device)h(server)g(in)75 2239 y(the)c(kernel.)16 b (T)l(able)10 b(3)g(shows)f(a)h(value)f(of)h(85)p fa(\026)p ff(secs)g(for)g (timestamps)f(via)h(IPC,)h(and)f(this)f(is)g(typical)g(for)h(all)g(clock)447 2333 y 1057 2 v 446 2390 a 2 57 v 472 2373 a(operation)1210 2390 y 2 57 v 1236 2373 a(time)h(in)g fa(\026)p ff(secs)1502 2390 y 2 57 v 447 2391 a 1057 2 v 446 2448 a 2 57 v 472 2431 a(timestamp)g(\(using)f(device)r 14 2 v 14 w(get)r 14 2 v 13 w(status\))1210 2448 y 2 57 v 1334 2431 a(85)1502 2448 y 2 57 v 446 2504 a 2 57 v 472 2487 a(timestamp)h(\(using)f(mapped)h(page/io)f(port\))1210 2504 y 2 57 v 1333 2487 a(<2)1502 2504 y 2 57 v 447 2506 a 1057 2 v 542 2583 a (T)m(able)h(3:)16 b fd(Latency)11 b(of)g(clock)g(timestamp)e(operations)p eop %%Page: 6 6 bop 75 45 a ff(operations.)27 b(However)m(,)17 b(for)e(some)g(clock)g(device\ s,)h(changes)f(in)f(resolution)f(may)j(be)f(postponed)e(from)i(the)75 102 y (time)c(of)g(invocation)f(for)h(the)g(duration)f(of)h(one)g(clock)g(device)g (tick.)146 158 y(These)18 b(numbers)g(suggest)f(that)h(all)g(timestamps)g(sho\ uld)f(be)h(obtained)f(via)h(mapped)h(I/O,)g(but)e(this)h(is)75 214 y(not)e (necessary)g(true.)33 b(For)17 b(some)g(clock)g(devices)f(the)g(interrupt)f (resolution)g(dif)o(fers)i(by)f(several)h(orders)f(of)75 271 y(magnitude)f (from)h(the)f(resolution)f(observable)g(from)j(supervisor)d(state.)29 b(For) 16 b(example,)h(i486)e(A)-5 b(T)15 b(systems)75 327 y(and)d(some)g(SP)l(ARC)h (systems)e(are)h(able)g(to)f(obtain)g(timestamps)g(of)h(accurate)h(to)23 b (1-4)p fa(\026)p ff(secs)12 b(in)f(the)h(kernel,)g(but)75 384 y(periodic)e (interrupts)g(only)g(occur)h(every)23 b(1-10ms.)16 b(In)11 b(these)g(cases,)h (application)d(programmers)j(may)f(wish)g(to)75 440 y(pay)g(the)g(extra)g(ove\ rhead)g(of)g(invoking)e(the)i(kernel)g(in)g(exchange)g(for)g(increased)g(prec\ ision.)75 565 y fb(5.4)50 b(Overhead)75 652 y ff(Clock)19 b(device)g(queue)f (processing)g(costs)g(1)p fa(\026)p ff(sec)i(at)f(interrupt)e(level.)40 b(Cha\ nging)18 b(the)h(clock)g(granularity)75 708 y(increases)9 b(the)g(overhead)h (of)f(this)f(routine)h(proportionally)-6 b(.)16 b(It)9 b(has)h(an)f(adverse)h (ef)o(fect)g(\(sometimes)f(disastrous\))75 764 y(ef)o(fect)18 b(on)e(locality) g(of)g(reference)j(in)d(the)h(cache.)34 b(For)17 b(reference,)j(the)d(regular) f fe(clock)t 14 2 v 14 w(interrupt\(\))75 821 y ff(routine)10 b(costs)g(9)p fa (\026)p ff(secs)i(before)f(the)g(addition)e(of)j(this)e(code.)75 967 y fm(6) 60 b(Related)13 b(W)m(ork)75 1070 y ff(POSIX)g(1003.4)f(de\256nes)h(both)f (timer)h(and)g(clock)f(interfaces)h(which)f(provided)g(much)h(of)g(the)f(insp\ iration)f(for)75 1127 y(our)d(own)h(time)f(interfaces)h(in)f(Real-T)o(ime)h (Mach.)16 b(Real-T)o(ime)9 b(Mach')n(s)f(clocks)g(and)h(timers)f(provide)g (a)h(superset)75 1183 y(of)j(POSIX)g(functionality)-5 b(,)12 b(including)e (the)h(ability)g(to)g(change)h(clock)f(granularity)g(dynamically)f(and)i(to)f (effect)75 1240 y(scheduling)e(decisions)h(via)h(the)g(timing)f(fault)g(mecha\ nism.)17 b(Otherwise)10 b(the)h(interfaces)g(are)h(very)f(similar)m(.)146 1296 y(Microsoft')l(s)f(NT)g(executive)f(provides)g fd(timer)g(objects)g ff(for)h (the)f(purposes)g(of)h(time)g(based)g(synchronization)75 1353 y([5,)j(11)o (].)21 b(In)12 b(addition)e(to)i(blocking)f(time)h(synchronization,)f(timer)h (objects)f(may)i(be)g(associated)e(with)g(APC')n(s)75 1409 y(\(Asynchronous)e (Procedure)i(Calls\))g(which)f(allow)g(the)h(kernel)f(to)h(asynchronously)d (set)j(a)g(thread')m(s)g(context)f(to)75 1465 y(execute)d(a)h(particular)e (function)g(when)h(a)g(timer)g(expires.)15 b(W)n(ithin)6 b(the)h(kernel)f(and) h(device)g(drivers,)h(timer)f(objects)75 1522 y(may)j(also)f(be)h(associated) e(with)h(DPC')n(s)g(\(Deferred)h(Procedure)g(Calls\))g(which)f(perform)h(a)g (similar)f(function)f(but)75 1578 y(are)14 b(invoked)d(in)i(the)g(current)f (execution)g(context.)21 b(NT)13 b(timer)g(objects)f(invoke)g(expiration)f (actions)h(using)g(an)75 1635 y(AST)l(-like)h(mechanism)h(much)f(like)g(Real-\ T)o(ime)h(Mach)g(does.)23 b(Unlike)13 b(our)g(system)g(however)n(,)i(NT)e(doe\ s)g(not)75 1691 y(provide)d(the)h(user)g(with)f(the)h(ability)f(to)h(bind)f (these)h(objects)f(to)g(dif)o(ferent)h(clock)g(devices.)146 1748 y(The)16 b (OSF)i(RI)f(has)f(designed)g(and)h(implemented)f(a)h(similar)f(set)h(of)g(int\ erfaces)f(for)h(their)f(microkernel)75 1804 y(called)e("clocks")g([10)o(,)h (9].)28 b(The)14 b(OSF)h(interfaces)g(export)f(services)g(for)h(getting)e(tim\ estamps,)i(setting)f(clock)75 1861 y(resolution,)f(exact)i(delays,)f(and)g (setting)f(alarm)h(messages.)26 b(Alarms)14 b(which)f(are)i(found)f(to)f(have) i(expired)e(at)75 1917 y(interrupt)d(time)g(are)i(copied)e(to)h(a)g(special)f (alarm)i(queue.)k(A)11 b(high)f(priority)f(kernel)i(thread)f(is)h(unblocked)e (and)i(it)75 1974 y(sends)d(alarm)h(messages)g(on)f(behalf)h(of)f(the)h(kerne\ l.)15 b(While)8 b(there)h(is)f(substantial)f(similarity)g(between)h(our)h(wor\ k)75 2030 y(and)14 b(that)f(of)h(OSF)m(,)g(we)h(feel)f(that)f(the)h(interface\ s)g(and)g(mechanisms)g(produced)f(at)h(CMU)h(are)f(smaller)n(,)i(more)75 2086 y(consistent)c(with)i(Mach)h(3.0,)g(and)f(have)h(superior)e(functionality)-5 b (.)26 b(Brie\257y)m(,)16 b(CMU)f(timers)f(support)f(periodic)75 2143 y(reset,) k(time)e(faults,)h(and)g(timer)f(cancellation)f(functionality)f(which)i(is)g (not)g(present)g(in)g(the)g(OSF)h(interface.)75 2199 y(CMU)10 b(clocks)f(are) h(standard)e(Mach)i(3.0)f(devices)g(while)g(OSF)h(names)f(their)g(clocks)g (via)g(")p fe(clock)s 14 2 v 14 w(id)p ff(')n(s")g(which)75 2256 y(are)14 b (raw)f(integers)f(interpreted)g(by)h(the)g(kernel.)22 b(Lastly)l(,)14 b(CMU') n(s)f(implementation)e(uses)i(an)g(AST)g(instead)f(of)75 2312 y(a)j(kernel)g (thread)f(to)h(dispatch)e(timer)i(messages,)h(thereby)e(avoiding)f(the)i(cost) f(of)h(additional)e(queueing)g(and)75 2369 y(context)d(switch)g(operations.) 75 2515 y fm(7)60 b(Curr)o(ent)14 b(Status)h(and)g(Futur)o(e)f(W)m(ork)75 2618 y ff(The)i(previously)e(mentioned)g(time)i(services)g(have)f(been)h(integrate\ d)f(successfully)f(into)h(Real-T)n(ime)i(Mach)75 2674 y(across)g(a)h(range)g (of)f(hardware.)36 b(Speci\256cally)l(,)20 b(we)d(have)h(supported)e(the)h (MC146818)f(clock)i(chip)e(on)h(the)p eop %%Page: 7 7 bop 75 45 a ff(DECstation,)14 b(the)f(I8254)h(and)g(MC146818)f(clock)h(chips) f(as)h(well)g(as)g(the)g(ST)l(A)-5 b(T!)14 b(timer)g(board)g(for)g(the)g(i486) 75 102 y(A)-5 b(T)l(,)13 b(and)e(the)h(standard)f(SUN3)h(clock)f(chip.)19 b (The)11 b(vast)h(majority)f(of)h(this)f(code)h(is)f(machine)h(independent)e (and)75 158 y(adding)g(new)h(clock)g(devices)g(extremely)g(simple.)146 214 y (W)l(e)i(are)g(working)e(closely)g(with)g(the)h(CMU)h(Mach)g(project)f(to)g (integrate)g(this)f(code)h(along)g(with)f(the)h(base)75 271 y(Real-T)o(ime)g (Mach)g(code)f(into)g(the)g(mainline)g(CMU)h(Mach)h(3.0)e(distribution.)k(As) c(a)h(part)f(of)h(this)f(mer)o(ge)h(some)75 327 y(of)k(the)h(interfaces)f(and) g(mechanisms)g(may)h(change.)32 b(W)n(ith)16 b(respect)g(to)g(this)f(paper)n (,)k(we)d(are)h(investigating)75 384 y(ways)11 b(to)g(allow)f(timing)g(faults) g(to)h(be)g(handled)g(within)e(the)i(exception)f(mechanisms.)17 b(Additionall\ y)-6 b(,)11 b(we)h(hope)75 440 y(that)j(all)g(kernel)g(timing,)h(such)f(as)g (device)h(timeouts)e(and)h(pc)h(sampling,)f(can)h(be)g(subsumed)e(by)h(this)f (single)75 497 y(mechanism.)25 b(In)14 b(addition)e(to)h(removing)g(duplicati\ on)f(of)i(ef)o(fort)g(this)f(will)f(simplify)h(machine)h(independent)75 553 y (support)8 b(for)h(particular)g(timing)f(functionality)-5 b(,)10 b(such)f(as) g(BSD')n(s)g(relatively)f(prime)i(pro\256ling)e(timer[7].)16 b(Lastly)l(,)75 610 y(we)c(are)g(examining)f(ways)h(in)f(which)g(the)h(timer)g(mechanisms)f (can)h(be)g(integrated)f(with)g(\256rst)h(class)f(user)h(level)75 666 y(threa\ ds[6)o(,)g(2,)f(3])h(to)e(provide)g(low)h(overhead)g(real-time)g(threads.)75 810 y fm(8)60 b(Conclusion)75 913 y ff(W)l(e)10 b(have)g(shown)e(that)h(there) h(are)g(three)f(requirements)h(for)f(providing)f(time)h(services)g(for)h(real\ -time)g(programs.)75 970 y(These)h(are,)h(high)f(accuracy)h(time)f(measuremen\ t,)h(synchronization)d(to)i(these)g(time)g(sources,)g(and)g(integration)75 1026 y(with)h(scheduling.)20 b(W)l(e)13 b(have)g(implemented)f(solutions)f (to)h(all)h(of)f(these)h(problems)f(in)h(an)f(interface)i(which)e(is)75 1083 y (clean,)g(ef)o(\256cient)f(and)g(consistent)e(with)h(the)h(Mach)h(3.0)f(desig\ n)f(philosophy)-5 b(.)75 1227 y fm(Refer)o(ences)98 1330 y ff([1])20 b(Alpha) 11 b(Logic)f(T)m(echnolgies.)15 b fd(ST)m(A)n(T!)d(System)e(T)n(iming)g(Analy\ sis)f(T)l(ool)i(User)g(Guide)p ff(,)f(1992.)98 1420 y([2])20 b(T)m(.E.)11 b (Anderson,)f(B.)h(Bershad,)g(E.D.)g(Lazowska,)f(and)g(H.M.)i(Levy)l(.)k(Sched\ uler)10 b(Activations:)j(Ef)o(fective)171 1477 y(Kernel)c(Support)f(for)h(the) f(User)o(-Level)g(Mangement)h(of)g(Parallelism.)j(In)d fd(Pr)m(oceedings)f (of)g(the)h(Thirteenth)171 1533 y(ACM)j(Symposium)d(on)i(Operating)e(System)i (Principles)p ff(,)e(October)i(1991.)98 1623 y([3])20 b(P)l(.)8 b(Barton-Davi\ s,)g(D.)g(McNamee,)i(R.)f(V)-6 b(aswani,)9 b(and)e(E.D.)h(Lazowska.)i(Adding) d(Scheduler)g(Activations)171 1679 y(to)k(Mach)h(3.0.)17 b(T)l(echnical)11 b (Report)g(92-08-03,)f(University)g(of)h(W)l(ashington,)f(October)h(1992.)98 1769 y([4])20 b(V)-6 b(.)18 b(Blazquez,)i(L.)e(Redono,)h(and)e(J.L.)h(Frenich\ e.)33 b(Experiences)17 b(with)f(\252Delay)h(Until\272)g(for)g(A)m(vionics)171 1826 y(Computers.)g fd(Ada)10 b(Letters)p ff(,)h(12\(1\):65\26172,)f(January) g(1992.)98 1915 y([5])20 b(H.)12 b(Custer)m(.)17 b fd(Inside)10 b(W)n(indows) g(NT)p ff(.)17 b(Microsoft)11 b(Press,)h(1992.)98 2005 y([6])20 b(R.)d(Govind\ an)e(and)h(D.P)-5 b(.)17 b(Anderson.)28 b(Scheduling)15 b(and)h(IPC)h(Mechani\ sms)f(for)h(Continuous)c(Media.)171 2062 y(In)h fd(Pr)n(oceedings)f(of)g(the) g(Thirteenth)g(ACM)h(Symposium)e(on)h(Operating)f(System)h(Principles)p ff (,)g(October)171 2118 y(1991.)98 2208 y([7])20 b(S.)15 b(Lef)o(\257er)o(,)g (M.)g(McKusick,)f(M.)g(Karels,)h(and)e(J.)h(Quarterman.)24 b fd(The)14 b(Desi\ gn)e(and)h(Implementation)f(of)171 2265 y(the)f(4.3BSD)g(UNIX)g(Operating)f (System)p ff(.)15 b(Addison-W)-5 b(esley)l(,)12 b(1989.)98 2354 y([8])20 b (K.)f(Loepere.)33 b fd(Mach)18 b(3)f(Kernel)h(Interfaces)p ff(.)33 b(Open)17 b (Software)h(Foundation)e(and)h(Carnegie-Mellon)171 2411 y(University)-5 b(,) 12 b(January)f(1992.)98 2501 y([9])20 b(K.)15 b(Loepere.)26 b fd(OSF)14 b(Mac\ h)g(Draft)f(Kernel)i(Interfaces)p ff(.)24 b(Open)14 b(Software)h(Foundation)d (and)j(Carnegie-)171 2557 y(Mellon)c(University)-5 b(,)12 b(October)f(1992.) 75 2647 y([10])20 b(K.)15 b(Loepere.)24 b fd(OSF)14 b(Mach)g(Draft)f(Kernel)h (Principles)p ff(.)22 b(Open)14 b(Software)g(Foundation)f(and)h(Carnegie-)171 2704 y(Mellon)d(University)-5 b(,)12 b(October)f(1992.)p eop %%Page: 8 8 bop 75 45 a ff([11])20 b(Microsoft)11 b(Corporation.)16 b fd(Pr)m(eliminary) 10 b(W)m(indows)g(NT)i(Device)g(Driver)e(Kit)p ff(,)i(1992.)75 139 y([12])20 b (D.)12 b(Mills.)17 b(Experiments)10 b(in)h(Network)g(Clock)g(Synchronization.) k(DARP)l(A)d(Network)e(W)m(orking)g(Group)171 195 y(Report)i(RFC-957,)g(Augus\ t)d(1985.)75 289 y([13])20 b(Realtime)14 b(Extension)d(for)i(Portable)g(Opera\ ting)f(Systems.)21 b(Proposed)12 b(Standard)h(IEEE)f(P1003.4/D12,)171 346 y (February)g(1992.)75 439 y([14])20 b(H.)11 b(T)l(okuda)e(and)h(T)l(.)h(Nakaji\ ma.)j(Evaluation)8 b(of)h(Real-T)o(ime)h(Synchronization)e(in)h(Real-T)o(ime) h(Mach.)15 b(In)171 496 y fd(Pr)n(oceedings)10 b(of)h(the)g(USENIX)g(Mach)g (Symposium)p ff(,)f(November)h(1991.)75 590 y([15])20 b(H.)d(T)m(okuda,)g(T)l (.)g(Nakajima,)h(and)e(P)l(.)g(Rao.)31 b(Real-T)o(ime)16 b(Mach:)27 b(T)m(owa\ rds)15 b(a)i(Predictable)f(Real-T)o(ime)171 646 y(System.)h(In)11 b fd(Pr)n (oceedings)f(of)h(the)g(USENIX)g(Mach)g(W)-5 b(orkshop)p ff(,)10 b(October)h (1990.)75 740 y([16])20 b(G.)14 b(V)-5 b(arghese)13 b(and)g(T)m(.)h(Lauck.)22 b(Hashed)13 b(and)g(Hierarchical)h(timing)e(Wheels:)20 b(Data)14 b(Structures) f(for)g(the)171 796 y(Ef\256cient)c(Implementation)g(of)h(a)h(T)n(imer)f(Faci\ lity.)k(In)c fd(Pr)n(oceedings)f(of)g(the)h(Eleventh)f(ACM)h(Symposium)171 853 y(on)h(Operating)f(System)g(Principles)p ff(,)g(November)h(1987.)p eop %%Trailer end %%EOF